summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--AUTHORS6
-rw-r--r--COMMITMENT45
-rw-r--r--COPYING339
-rw-r--r--MAINTAINERS1
-rw-r--r--NEWS1279
-rw-r--r--README.md29
-rw-r--r--RELEASE26
-rw-r--r--contrib/gnome-software.spec.in209
-rw-r--r--contrib/gs-plugin-example.c56
-rw-r--r--data/appdata/meson.build8
-rw-r--r--data/appdata/org.gnome.Software.appdata.xml.in1559
-rw-r--r--data/appdata/resize-window.sh6
-rw-r--r--data/appdata/ss-details.pngbin0 -> 589324 bytes
-rw-r--r--data/appdata/ss-installed.pngbin0 -> 122705 bytes
-rw-r--r--data/appdata/ss-overview.pngbin0 -> 379032 bytes
-rw-r--r--data/appdata/ss-updates-details.pngbin0 -> 89644 bytes
-rw-r--r--data/appdata/ss-updates.pngbin0 -> 108956 bytes
-rw-r--r--data/assets/featured-FeedReader.svg188
-rw-r--r--data/assets/featured-bitwarden.svg1
-rw-r--r--data/assets/featured-boxes.svg1
-rw-r--r--data/assets/featured-calibre-bg.jpgbin0 -> 413617 bytes
-rw-r--r--data/assets/featured-darktable-bg.jpgbin0 -> 142270 bytes
-rw-r--r--data/assets/featured-dropbox.pngbin0 -> 213256 bytes
-rw-r--r--data/assets/featured-foliate-bg.jpgbin0 -> 2700159 bytes
-rw-r--r--data/assets/featured-foliate.svg1
-rw-r--r--data/assets/featured-fondo-bg.jpgbin0 -> 154813 bytes
-rw-r--r--data/assets/featured-gimp.pngbin0 -> 99031 bytes
-rw-r--r--data/assets/featured-gnome-sudoku.pngbin0 -> 53762 bytes
-rw-r--r--data/assets/featured-homebank-bg.jpgbin0 -> 139818 bytes
-rw-r--r--data/assets/featured-inkscape.svg1
-rw-r--r--data/assets/featured-kdenlive-bg.jpgbin0 -> 234462 bytes
-rw-r--r--data/assets/featured-klavaro-bg.jpgbin0 -> 124160 bytes
-rw-r--r--data/assets/featured-maps-bg.svg220
-rw-r--r--data/assets/featured-maps-overlay.svg1
-rw-r--r--data/assets/featured-marker-bg.jpgbin0 -> 130527 bytes
-rw-r--r--data/assets/featured-mypaint.svg1
-rw-r--r--data/assets/featured-pdf-slicer.svg1
-rw-r--r--data/assets/featured-podcasts.svg1
-rw-r--r--data/assets/featured-polari.svg1
-rw-r--r--data/assets/featured-slack-bg.jpgbin0 -> 189436 bytes
-rw-r--r--data/assets/featured-sound-recorder.svg1
-rw-r--r--data/assets/featured-stellarium-bg.jpgbin0 -> 308236 bytes
-rw-r--r--data/assets/featured-tetravex-bg.jpgbin0 -> 94289 bytes
-rw-r--r--data/assets/featured-todo-bg.jpgbin0 -> 239322 bytes
-rw-r--r--data/assets/featured-transmission.svg422
-rw-r--r--data/assets/featured-uberwriter.svg1
-rw-r--r--data/assets/featured-vlc-bg.jpgbin0 -> 111323 bytes
-rw-r--r--data/assets/meson.build41
-rw-r--r--data/assets/org.gnome.Software.Featured.xml363
-rw-r--r--data/assets/upgrade-bg.pngbin0 -> 308691 bytes
-rw-r--r--data/icons/hicolor/meson.build6
-rw-r--r--data/icons/hicolor/scalable/org.gnome.Software.Devel.svg1
-rw-r--r--data/icons/hicolor/scalable/org.gnome.Software.svg152
-rw-r--r--data/icons/hicolor/scalable/software-installed-symbolic.svg75
-rw-r--r--data/icons/hicolor/symbolic/org.gnome.Software-symbolic.svg68
-rw-r--r--data/icons/meson.build1
-rw-r--r--data/meson.build27
-rw-r--r--data/org.gnome.software.external-appstream.policy.in.in20
-rw-r--r--data/org.gnome.software.gschema.xml150
-rw-r--r--data/tests/os-release16
-rw-r--r--doc/api/gnome-software-docs.xml617
-rw-r--r--doc/api/gnome-software.types6
-rw-r--r--doc/api/gs-example-details.pngbin0 -> 53714 bytes
-rw-r--r--doc/api/gs-example-installed.pngbin0 -> 106482 bytes
-rw-r--r--doc/api/gs-example-search.pngbin0 -> 24934 bytes
-rw-r--r--doc/api/meson.build11
-rw-r--r--doc/design.svg448
-rw-r--r--doc/kudos.md73
-rw-r--r--doc/meson.build3
-rw-r--r--doc/privacy-policy.html31
-rwxr-xr-xdoc/update.sh1
-rw-r--r--gnome-software.doap38
-rw-r--r--lib/README.md7
-rw-r--r--lib/gnome-software-private.h23
-rw-r--r--lib/gnome-software.h24
-rw-r--r--lib/gnome-software.pc.in12
-rw-r--r--lib/gs-app-collation.h21
-rw-r--r--lib/gs-app-list-private.h79
-rw-r--r--lib/gs-app-list.c963
-rw-r--r--lib/gs-app-list.h46
-rw-r--r--lib/gs-app-private.h30
-rw-r--r--lib/gs-app.c4680
-rw-r--r--lib/gs-app.h405
-rw-r--r--lib/gs-autocleanups.h52
-rw-r--r--lib/gs-category-private.h21
-rw-r--r--lib/gs-category.c527
-rw-r--r--lib/gs-category.h51
-rw-r--r--lib/gs-cmd.c699
-rw-r--r--lib/gs-debug.c190
-rw-r--r--lib/gs-debug.h21
-rw-r--r--lib/gs-ioprio.c152
-rw-r--r--lib/gs-ioprio.h31
-rw-r--r--lib/gs-metered.c267
-rw-r--r--lib/gs-metered.h29
-rw-r--r--lib/gs-os-release.c335
-rw-r--r--lib/gs-os-release.h33
-rw-r--r--lib/gs-plugin-event.c313
-rw-r--r--lib/gs-plugin-event.h67
-rw-r--r--lib/gs-plugin-job-private.h44
-rw-r--r--lib/gs-plugin-job.c618
-rw-r--r--lib/gs-plugin-job.h58
-rw-r--r--lib/gs-plugin-loader-sync.c208
-rw-r--r--lib/gs-plugin-loader-sync.h34
-rw-r--r--lib/gs-plugin-loader.c3968
-rw-r--r--lib/gs-plugin-loader.h100
-rw-r--r--lib/gs-plugin-private.h55
-rw-r--r--lib/gs-plugin-types.h280
-rw-r--r--lib/gs-plugin-vfuncs.h942
-rw-r--r--lib/gs-plugin.c2069
-rw-r--r--lib/gs-plugin.h132
-rw-r--r--lib/gs-self-test.c835
-rw-r--r--lib/gs-test.c71
-rw-r--r--lib/gs-test.h20
-rw-r--r--lib/gs-utils.c1226
-rw-r--r--lib/gs-utils.h96
-rw-r--r--lib/meson.build142
-rw-r--r--meson.build249
-rw-r--r--meson_options.txt22
-rwxr-xr-xmeson_post_install.sh14
-rw-r--r--plugins/core/gs-appstream.c1581
-rw-r--r--plugins/core/gs-appstream.h76
-rw-r--r--plugins/core/gs-desktop-common.c333
-rw-r--r--plugins/core/gs-desktop-common.h31
-rw-r--r--plugins/core/gs-plugin-appstream.c1092
-rw-r--r--plugins/core/gs-plugin-desktop-categories.c106
-rw-r--r--plugins/core/gs-plugin-desktop-menu-path.c111
-rw-r--r--plugins/core/gs-plugin-generic-updates.c106
-rw-r--r--plugins/core/gs-plugin-hardcoded-blocklist.c78
-rw-r--r--plugins/core/gs-plugin-hardcoded-popular.c66
-rw-r--r--plugins/core/gs-plugin-icons.c348
-rw-r--r--plugins/core/gs-plugin-key-colors-metadata.c89
-rw-r--r--plugins/core/gs-plugin-key-colors.c195
-rw-r--r--plugins/core/gs-plugin-os-release.c112
-rw-r--r--plugins/core/gs-plugin-provenance-license.c152
-rw-r--r--plugins/core/gs-plugin-provenance.c141
-rw-r--r--plugins/core/gs-plugin-rewrite-resource.c73
-rw-r--r--plugins/core/gs-self-test.c277
-rw-r--r--plugins/core/meson.build250
l---------plugins/core/tests/os-release1
-rw-r--r--plugins/dpkg/gs-plugin-dpkg.c111
-rw-r--r--plugins/dpkg/gs-self-test.c97
-rw-r--r--plugins/dpkg/meson.build41
-rwxr-xr-xplugins/dpkg/tests/build-deb.sh1
-rw-r--r--plugins/dpkg/tests/chiron-1.1-1.debbin0 -> 806 bytes
-rw-r--r--plugins/dpkg/tests/debian/DEBIAN/control13
-rw-r--r--plugins/dpkg/tests/debian/usr/bin/chiron0
-rw-r--r--plugins/dummy/gs-plugin-dummy.c938
-rw-r--r--plugins/dummy/gs-self-test.c898
-rw-r--r--plugins/dummy/meson.build41
-rw-r--r--plugins/eos-updater/com.endlessm.Updater.xml292
-rw-r--r--plugins/eos-updater/gs-plugin-eos-updater.c962
-rw-r--r--plugins/eos-updater/meson.build28
-rw-r--r--plugins/eos-updater/tests/eos_updater.py414
-rwxr-xr-xplugins/eos-updater/tests/manual-test.py434
-rw-r--r--plugins/external-appstream/gs-external-appstream-utils.c27
-rw-r--r--plugins/external-appstream/gs-external-appstream-utils.h17
-rw-r--r--plugins/external-appstream/gs-install-appstream.c181
-rw-r--r--plugins/external-appstream/gs-plugin-external-appstream.c289
-rw-r--r--plugins/external-appstream/meson.build38
-rw-r--r--plugins/fedora-langpacks/gs-plugin-fedora-langpacks.c101
-rw-r--r--plugins/fedora-langpacks/gs-self-test.c88
-rw-r--r--plugins/fedora-langpacks/meson.build40
-rw-r--r--plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c569
-rw-r--r--plugins/fedora-pkgdb-collections/meson.build17
l---------plugins/flatpak/gs-appstream.c1
l---------plugins/flatpak/gs-appstream.h1
-rw-r--r--plugins/flatpak/gs-flatpak-app.c178
-rw-r--r--plugins/flatpak/gs-flatpak-app.h62
-rw-r--r--plugins/flatpak/gs-flatpak-transaction.c804
-rw-r--r--plugins/flatpak/gs-flatpak-transaction.h35
-rw-r--r--plugins/flatpak/gs-flatpak-utils.c212
-rw-r--r--plugins/flatpak/gs-flatpak-utils.h21
-rw-r--r--plugins/flatpak/gs-flatpak.c3258
-rw-r--r--plugins/flatpak/gs-flatpak.h128
-rw-r--r--plugins/flatpak/gs-plugin-flatpak.c1320
-rw-r--r--plugins/flatpak/gs-self-test.c1936
-rw-r--r--plugins/flatpak/meson.build70
-rw-r--r--plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in12
-rw-r--r--plugins/flatpak/tests/app-extension-update/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/.empty0
-rw-r--r--plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/libtest/README1
-rw-r--r--plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml12
-rw-r--r--plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/metadata6
-rw-r--r--plugins/flatpak/tests/app-extension/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/.empty0
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/libtest/README0
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml12
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/metadata6
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron/.gitignore2
-rwxr-xr-xplugins/flatpak/tests/app-extension/org.test.Chiron/files/bin/chiron.sh2
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml16
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/applications/org.test.Chiron.desktop6
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.pngbin0 -> 334 bytes
-rw-r--r--plugins/flatpak/tests/app-extension/org.test.Chiron/metadata10
-rw-r--r--plugins/flatpak/tests/app-missing-runtime/.gitignore1
l---------plugins/flatpak/tests/app-missing-runtime/org.test.Chiron1
-rw-r--r--plugins/flatpak/tests/app-update/.gitignore1
l---------plugins/flatpak/tests/app-update/org.test.Chiron/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-update/org.test.Chiron/files/bin/chiron.sh2
-rw-r--r--plugins/flatpak/tests/app-update/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml19
l---------plugins/flatpak/tests/app-update/org.test.Chiron/files/share/applications/org.test.Chiron.desktop1
l---------plugins/flatpak/tests/app-update/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png1
-rw-r--r--plugins/flatpak/tests/app-update/org.test.Chiron/metadata4
-rw-r--r--plugins/flatpak/tests/app-with-runtime/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Chiron/.gitignore2
-rwxr-xr-xplugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/bin/chiron.sh2
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml16
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/applications/org.test.Chiron.desktop7
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.pngbin0 -> 334 bytes
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Chiron/metadata4
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Runtime/files/.empty0
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Runtime/metadata3
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/.gitignore1
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/libtest/README0
-rw-r--r--plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/metainfo/org.test.Runtime.metainfo.xml10
-rwxr-xr-xplugins/flatpak/tests/build.py125
-rw-r--r--plugins/flatpak/tests/chiron.flatpakbin0 -> 5452 bytes
-rw-r--r--plugins/flatpak/tests/flatpakrepos.tar.gzbin0 -> 72252 bytes
-rw-r--r--plugins/flatpak/tests/meson.build34
-rw-r--r--plugins/flatpak/tests/only-runtime/.gitignore1
l---------plugins/flatpak/tests/only-runtime/org.test.Runtime1
-rw-r--r--plugins/fwupd/gs-fwupd-app.c242
-rw-r--r--plugins/fwupd/gs-fwupd-app.h31
-rw-r--r--plugins/fwupd/gs-plugin-fwupd.c1132
-rw-r--r--plugins/fwupd/gs-self-test.c105
-rw-r--r--plugins/fwupd/meson.build60
-rw-r--r--plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in12
-rwxr-xr-xplugins/fwupd/tests/build-cab.sh4
-rw-r--r--plugins/fwupd/tests/chiron-0.2.cabbin0 -> 34376 bytes
-rw-r--r--plugins/fwupd/tests/firmware.dfubin0 -> 32784 bytes
-rw-r--r--plugins/fwupd/tests/firmware.dfu.asc11
-rw-r--r--plugins/fwupd/tests/firmware.metainfo.xml30
-rw-r--r--plugins/malcontent/gs-plugin-malcontent.c343
-rw-r--r--plugins/malcontent/meson.build17
-rw-r--r--plugins/meson.build47
-rw-r--r--plugins/modalias/gs-plugin-modalias.c151
-rw-r--r--plugins/modalias/gs-self-test.c116
-rw-r--r--plugins/modalias/meson.build42
-rw-r--r--plugins/odrs/gs-plugin-odrs.c1214
-rw-r--r--plugins/odrs/meson.build27
-rw-r--r--plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in12
-rw-r--r--plugins/packagekit/gs-markdown.c856
-rw-r--r--plugins/packagekit/gs-markdown.h41
-rw-r--r--plugins/packagekit/gs-packagekit-helper.c131
-rw-r--r--plugins/packagekit/gs-packagekit-helper.h35
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-history.c261
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-local.c271
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-offline.c181
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-proxy.c316
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-refine-repos.c123
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-refine.c822
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-refresh.c182
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-upgrade.c88
-rw-r--r--plugins/packagekit/gs-plugin-packagekit-url-to-app.c125
-rw-r--r--plugins/packagekit/gs-plugin-packagekit.c693
-rw-r--r--plugins/packagekit/gs-plugin-systemd-updates.c330
-rw-r--r--plugins/packagekit/gs-self-test.c279
-rw-r--r--plugins/packagekit/meson.build249
-rw-r--r--plugins/packagekit/packagekit-common.c543
-rw-r--r--plugins/packagekit/packagekit-common.h40
-rwxr-xr-xplugins/packagekit/tests/build-rpm.sh2
-rw-r--r--plugins/packagekit/tests/chiron-1.1-1.fc24.x86_64.rpmbin0 -> 6414 bytes
-rw-r--r--plugins/packagekit/tests/chiron.spec22
-rw-r--r--plugins/repos/gs-plugin-repos.c247
-rw-r--r--plugins/repos/gs-self-test.c82
-rw-r--r--plugins/repos/meson.build41
-rw-r--r--plugins/repos/tests/yum.repos.d/utopia.repo5
-rw-r--r--plugins/rpm-ostree/gs-plugin-rpm-ostree.c1829
-rw-r--r--plugins/rpm-ostree/meson.build26
-rw-r--r--plugins/rpm-ostree/org.projectatomic.rpmostree1.xml458
-rw-r--r--plugins/snap/gs-plugin-snap.c1325
-rw-r--r--plugins/snap/gs-self-test.c374
-rw-r--r--plugins/snap/meson.build54
-rw-r--r--plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in12
-rw-r--r--po/LINGUAS65
-rw-r--r--po/POTFILES.in92
-rw-r--r--po/af.po5120
-rw-r--r--po/ar.po5166
-rw-r--r--po/as.po2007
-rw-r--r--po/bg.po4000
-rw-r--r--po/bn.po3883
-rw-r--r--po/bs.po2321
-rw-r--r--po/ca.po5677
-rw-r--r--po/ca@valencia.po4789
-rw-r--r--po/ckb.po4174
-rw-r--r--po/cs.po4382
-rw-r--r--po/da.po5705
-rw-r--r--po/de.po4850
-rw-r--r--po/el.po5820
-rw-r--r--po/en_GB.po5180
-rw-r--r--po/eo.po5401
-rw-r--r--po/es.po5911
-rw-r--r--po/eu.po4387
-rw-r--r--po/fa.po4793
-rw-r--r--po/fi.po5628
-rw-r--r--po/fr.po4790
-rw-r--r--po/fur.po5609
-rw-r--r--po/ga.po2331
-rw-r--r--po/gd.po5097
-rw-r--r--po/gl.po4440
-rw-r--r--po/he.po5681
-rw-r--r--po/hi.po3882
-rw-r--r--po/hr.po5827
-rw-r--r--po/hu.po4412
-rw-r--r--po/id.po4737
-rw-r--r--po/is.po4546
-rw-r--r--po/it.po4434
-rw-r--r--po/ja.po4472
-rw-r--r--po/kab.po4211
-rw-r--r--po/kk.po5495
-rw-r--r--po/km.po1900
-rw-r--r--po/ko.po4543
-rw-r--r--po/lt.po5653
-rw-r--r--po/lv.po4741
-rw-r--r--po/meson.build6
-rw-r--r--po/mjw.po4203
-rw-r--r--po/ml.po3961
-rw-r--r--po/mr.po3881
-rw-r--r--po/ms.po4380
-rw-r--r--po/nb.po4319
-rw-r--r--po/ne.po4358
-rw-r--r--po/nl.po5659
-rw-r--r--po/oc.po5765
-rw-r--r--po/pa.po5760
-rw-r--r--po/pl.po4438
-rw-r--r--po/pt.po4856
-rw-r--r--po/pt_BR.po5866
-rw-r--r--po/ro.po5699
-rw-r--r--po/ru.po4740
-rw-r--r--po/sk.po5730
-rw-r--r--po/sl.po5819
-rw-r--r--po/sr.po5738
-rw-r--r--po/sr@latin.po5220
-rw-r--r--po/sv.po5644
-rw-r--r--po/te.po1812
-rw-r--r--po/th.po2974
-rw-r--r--po/tr.po5606
-rw-r--r--po/uk.po4385
-rw-r--r--po/vi.po4839
-rw-r--r--po/zh_CN.po5437
-rw-r--r--po/zh_HK.po2086
-rw-r--r--po/zh_TW.po5578
-rw-r--r--src/gnome-software-local-file.desktop.in12
-rw-r--r--src/gnome-software-service.desktop.in6
-rw-r--r--src/gnome-software.gresource.xml42
-rw-r--r--src/gnome-software.ui602
-rw-r--r--src/gnome-software.xml74
-rw-r--r--src/gs-app-addon-row.c273
-rw-r--r--src/gs-app-addon-row.h29
-rw-r--r--src/gs-app-addon-row.ui65
-rw-r--r--src/gs-app-row.c825
-rw-r--r--src/gs-app-row.h50
-rw-r--r--src/gs-app-row.ui258
-rw-r--r--src/gs-app-tile.c113
-rw-r--r--src/gs-app-tile.h33
-rw-r--r--src/gs-app-tile.ui134
-rw-r--r--src/gs-application.c1150
-rw-r--r--src/gs-application.h21
-rw-r--r--src/gs-basic-auth-dialog.c131
-rw-r--r--src/gs-basic-auth-dialog.h29
-rw-r--r--src/gs-basic-auth-dialog.ui203
-rw-r--r--src/gs-category-page.c594
-rw-r--r--src/gs-category-page.h25
-rw-r--r--src/gs-category-page.ui256
-rw-r--r--src/gs-category-tile.c93
-rw-r--r--src/gs-category-tile.h26
-rw-r--r--src/gs-category-tile.ui42
-rw-r--r--src/gs-common.c654
-rw-r--r--src/gs-common.h51
-rw-r--r--src/gs-content-rating.c784
-rw-r--r--src/gs-content-rating.h76
-rw-r--r--src/gs-css.c305
-rw-r--r--src/gs-css.h36
-rw-r--r--src/gs-dbus-helper.c814
-rw-r--r--src/gs-dbus-helper.h22
-rw-r--r--src/gs-details-page.c2856
-rw-r--r--src/gs-details-page.h29
-rw-r--r--src/gs-details-page.ui1424
-rw-r--r--src/gs-extras-page.c1220
-rw-r--r--src/gs-extras-page.h39
-rw-r--r--src/gs-extras-page.ui144
-rw-r--r--src/gs-feature-tile.c138
-rw-r--r--src/gs-feature-tile.h21
-rw-r--r--src/gs-feature-tile.ui74
-rw-r--r--src/gs-first-run-dialog.c60
-rw-r--r--src/gs-first-run-dialog.h21
-rw-r--r--src/gs-first-run-dialog.ui79
-rw-r--r--src/gs-fixed-size-bin.c237
-rw-r--r--src/gs-fixed-size-bin.h21
-rw-r--r--src/gs-folders.c610
-rw-r--r--src/gs-folders.h46
-rw-r--r--src/gs-hiding-box.c421
-rw-r--r--src/gs-hiding-box.h24
-rw-r--r--src/gs-history-dialog.c239
-rw-r--r--src/gs-history-dialog.h26
-rw-r--r--src/gs-history-dialog.ui48
-rw-r--r--src/gs-info-bar.c199
-rw-r--r--src/gs-info-bar.h29
-rw-r--r--src/gs-info-bar.ui45
-rw-r--r--src/gs-installed-page.c633
-rw-r--r--src/gs-installed-page.h22
-rw-r--r--src/gs-installed-page.ui62
-rw-r--r--src/gs-language.c163
-rw-r--r--src/gs-language.h26
-rw-r--r--src/gs-loading-page.c234
-rw-r--r--src/gs-loading-page.h29
-rw-r--r--src/gs-loading-page.ui58
-rw-r--r--src/gs-main.c51
-rw-r--r--src/gs-metered-data-dialog.c69
-rw-r--r--src/gs-metered-data-dialog.h23
-rw-r--r--src/gs-metered-data-dialog.ui69
-rw-r--r--src/gs-moderate-page.c340
-rw-r--r--src/gs-moderate-page.h22
-rw-r--r--src/gs-moderate-page.ui102
-rw-r--r--src/gs-origin-popover-row.c202
-rw-r--r--src/gs-origin-popover-row.h32
-rw-r--r--src/gs-origin-popover-row.ui182
-rw-r--r--src/gs-overview-page.c1061
-rw-r--r--src/gs-overview-page.h31
-rw-r--r--src/gs-overview-page.ui295
-rw-r--r--src/gs-page.c691
-rw-r--r--src/gs-page.h79
-rw-r--r--src/gs-popular-tile.c136
-rw-r--r--src/gs-popular-tile.h21
-rw-r--r--src/gs-popular-tile.ui113
-rw-r--r--src/gs-prefs-dialog.c88
-rw-r--r--src/gs-prefs-dialog.h24
-rw-r--r--src/gs-prefs-dialog.ui133
-rw-r--r--src/gs-progress-button.c87
-rw-r--r--src/gs-progress-button.h26
-rw-r--r--src/gs-removal-dialog.c172
-rw-r--r--src/gs-removal-dialog.h25
-rw-r--r--src/gs-removal-dialog.ui50
-rw-r--r--src/gs-repo-row.c290
-rw-r--r--src/gs-repo-row.h40
-rw-r--r--src/gs-repo-row.ui121
-rw-r--r--src/gs-repos-dialog.c890
-rw-r--r--src/gs-repos-dialog.h25
-rw-r--r--src/gs-repos-dialog.ui171
-rw-r--r--src/gs-restarter.c216
-rw-r--r--src/gs-review-bar.c77
-rw-r--r--src/gs-review-bar.h24
-rw-r--r--src/gs-review-dialog.c231
-rw-r--r--src/gs-review-dialog.h26
-rw-r--r--src/gs-review-dialog.ui211
-rw-r--r--src/gs-review-histogram.c112
-rw-r--r--src/gs-review-histogram.h29
-rw-r--r--src/gs-review-histogram.ui424
-rw-r--r--src/gs-review-row.c326
-rw-r--r--src/gs-review-row.h35
-rw-r--r--src/gs-review-row.ui204
-rw-r--r--src/gs-screenshot-image.c592
-rw-r--r--src/gs-screenshot-image.h36
-rw-r--r--src/gs-screenshot-image.ui62
-rw-r--r--src/gs-search-page.c504
-rw-r--r--src/gs-search-page.h27
-rw-r--r--src/gs-search-page.ui100
-rw-r--r--src/gs-self-test.c61
-rw-r--r--src/gs-shell-search-provider.c403
-rw-r--r--src/gs-shell-search-provider.h26
-rw-r--r--src/gs-shell.c2532
-rw-r--r--src/gs-shell.h95
-rw-r--r--src/gs-star-widget.c327
-rw-r--r--src/gs-star-widget.h38
-rw-r--r--src/gs-star-widget.ui21
-rw-r--r--src/gs-summary-tile.c247
-rw-r--r--src/gs-summary-tile.h21
-rw-r--r--src/gs-summary-tile.ui130
-rw-r--r--src/gs-third-party-repo-row.c247
-rw-r--r--src/gs-third-party-repo-row.h35
-rw-r--r--src/gs-third-party-repo-row.ui61
-rw-r--r--src/gs-update-dialog.c842
-rw-r--r--src/gs-update-dialog.h27
-rw-r--r--src/gs-update-dialog.ui308
-rw-r--r--src/gs-update-list.c120
-rw-r--r--src/gs-update-list.h31
-rw-r--r--src/gs-update-monitor.c1271
-rw-r--r--src/gs-update-monitor.h28
-rw-r--r--src/gs-updates-page.c1468
-rw-r--r--src/gs-updates-page.h22
-rw-r--r--src/gs-updates-page.ui373
-rw-r--r--src/gs-updates-section.c642
-rw-r--r--src/gs-updates-section.h46
-rw-r--r--src/gs-upgrade-banner.c411
-rw-r--r--src/gs-upgrade-banner.h36
-rw-r--r--src/gs-upgrade-banner.ui135
-rw-r--r--src/gs-vendor.c126
-rw-r--r--src/gs-vendor.h33
-rw-r--r--src/gtk-style-hc.css247
-rw-r--r--src/gtk-style.css523
-rw-r--r--src/meson.build257
-rw-r--r--src/org.freedesktop.PackageKit.Modify2.xml560
-rw-r--r--src/org.freedesktop.PackageKit.service.in3
-rw-r--r--src/org.freedesktop.PackageKit.xml506
-rw-r--r--src/org.gnome.Software-search-provider.ini5
-rw-r--r--src/org.gnome.Software.desktop.in18
-rw-r--r--src/org.gnome.Software.service.in3
-rw-r--r--src/shell-search-provider-dbus-interfaces.xml44
-rw-r--r--subprojects/libglib-testing.wrap4
-rw-r--r--subprojects/libxmlb.wrap4
-rw-r--r--subprojects/malcontent.wrap4
-rw-r--r--subprojects/sysprof.wrap4
-rwxr-xr-xtests/actions.py68
-rwxr-xr-xtests/basic.py157
506 files changed, 403143 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..611cba1
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,6 @@
+Richard Hughes <richard@hughsie.com>
+Matthias Clasen <mclasen@redhat.com>
+Kalev Lember <kalevlember@gmail.com>
+
+Backdrop image for Builder featured banner used with permission by
+Adam Wyles -- http://www.flickr.com/photos/the-travelling-bum/6336397663/
diff --git a/COMMITMENT b/COMMITMENT
new file mode 100644
index 0000000..bfa237f
--- /dev/null
+++ b/COMMITMENT
@@ -0,0 +1,45 @@
+Common Cure Rights Commitment, version 1.0
+
+Before filing or continuing to prosecute any legal proceeding or claim
+(other than a Defensive Action) arising from termination of a Covered
+License, we commit to extend to the person or entity ('you') accused
+of violating the Covered License the following provisions regarding
+cure and reinstatement, taken from GPL version 3. As used here, the
+term 'this License' refers to the specific Covered License being
+enforced.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you
+ have received notice of violation of this License (for any work)
+ from that copyright holder, and you cure the violation prior to 30
+ days after your receipt of the notice.
+
+We intend this Commitment to be irrevocable, and binding and
+enforceable against us and assignees of or successors to our
+copyrights.
+
+Definitions
+
+'Covered License' means the GNU General Public License, version 2
+(GPLv2), the GNU Lesser General Public License, version 2.1
+(LGPLv2.1), or the GNU Library General Public License, version 2
+(LGPLv2), all as published by the Free Software Foundation.
+
+'Defensive Action' means a legal proceeding or claim that We bring
+against you in response to a prior proceeding or claim initiated by
+you or your affiliate.
+
+'We' means each contributor to this repository as of the date of
+inclusion of this file, including subsidiaries of a corporate
+contributor.
+
+This work is available under a Creative Commons Attribution-ShareAlike
+4.0 International license.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..026b705
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1 @@
+Richard Hughes <richard@hughsie.com>
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..df4a0c3
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,1279 @@
+Version 3.34.0
+~~~~~~~~~~~~~~
+Released: 2019-09-09
+
+This is a stable release with the following changes:
+ * Add a link to the privacy policy in the review dialog
+ * Add and improve many overview banners
+ * Add support for download scheduling using Mogwai
+ * Allow installing locale data automatically
+ * Allow snaps to be shown by AppStream ID
+ * Don't apply drop shadow on stock symbolic icons
+ * Don't install queued apps when the network changes and is metered
+ * Fix the 'localised in my language' kudo
+ * Hide addons that are not available in repos
+ * Localize ESRB content rating strings
+ * Never show the installation progress bar going backwards
+ * Notify the user when an application can escape the sandbox
+ * Refactor screenshots and hide those unavailable when offline
+ * Select the rating systems selected based by territory
+ * Use smaller default size for main window when required
+
+This release also adds and updates existing translations.
+
+Version 3.32.4
+~~~~~~~~~~~~~~
+Released: 2019-07-11
+
+This is a stable release with the following changes:
+ * Fix an issue that led to some packages with multiple appdata files not
+ correctly showing up on the updates page
+ * Fix various problems with flatpak branch handling that were causing issues
+ with freedesktop.org runtime updates
+ * Fix flatpak update versions to correctly show up
+ * Various other minor bug fixes
+
+Version 3.32.3
+~~~~~~~~~~~~~~
+Released: 2019-05-24
+
+This is a stable release with the following changes:
+ * Add missing XbSilo locking, hopefully fixing a large number of reported
+ crashes
+ * Fix a regression that caused the fonts category to go missing
+ * Show a placeholder on the details page when we don't have the actual icon
+ * Plug a large memory leak
+ * Use nicer arrows for version numbers on the updates page
+ * Fix an issue that led to screenshots not being correctly scaled on hidpi
+ * flatpak: Fix several double-uses of GErrors
+ * flatpak: Handle failure of a libflatpak function updating permissions
+ * rpm-ostree: Implement what-provides decompose
+
+Version 3.32.2
+~~~~~~~~~~~~~~
+Released: 2019-05-07
+
+This is a stable release with the following changes:
+ * Avoid showing a review more than once
+ * Correctly update progress bar when downloading packagekit distro upgrades
+ * Fix a crash when closing the updates dialog before the content has loaded
+ * Fix CTRL+F not working right in certains conditions
+ * Set 022 umask to make sure flatpak system helper process can read the files
+ we've written
+ * rpm-ostree: Implement getting the repo list, and enabling and disabling
+ repos
+ * rpm-ostree: Implement provides search
+ * rpm-ostree: Make layered apps not discoverable in the UI
+ * Various other minor bug fixes
+
+This release also updates translations.
+
+Version 3.32.1
+~~~~~~~~~~~~~~
+Released: 2019-04-15
+
+This is a stable release with the following changes:
+ * Add drop shadows to app icons
+ * Various fixes to initial loading screen
+ * Show a generic icon instead of empty space if we failed to load the app icon
+ * Update featured banners for Maps and Blender
+ * Update featured app IDs
+ * Fix a crash due to missing locking
+ * Fix missing back button under certain conditions
+ * Fix loading AppSteam data from .yml.gz files
+ * Fix an issue that caused flatpak repo to not be correctly shown when it
+ matched an existing packagekit repo name
+ * Hide the fwupd Vendor repo in the repos dialog
+
+This release also updates translations.
+
+Version 3.32.0
+~~~~~~~~~~~~~~
+Released: 2019-03-11
+
+This is the first stable release for GNOME 3.32. Notable changes compared to
+3.30 include:
+ * Appstream parsing is completely rewritten and now uses the new libxmlb
+ library, instead of appstream-glib
+ * Improved handling for apps that are available from multiple sources, e.g. as
+ a flatpak from Flathub, as a flatpak from Fedora, and as an RPM package
+ * New source selection drop down on the details pages
+ * Flatpak apps now list the permissions they need on the details pages, and
+ also show new permissions when updating
+ * The flatpak backend received a large number of bug fixes
+ * The rpm-ostree backend has grown many new features and bug fixes, including
+ support for installing layered packages and doing distro upgrades
+ * Numerous fixes for error reporting, including making error messages more
+ useful and avoiding showing network errors from background operations
+ * The items in the app menu were all moved to the window menu
+ * New redesigned icon
+
+Version 3.31.92
+~~~~~~~~~~~~~~~
+Released: 2019-03-05
+
+This is an unstable release in the 3.31 development series, marking the end of
+the development cycle. Next release will be 3.32.0!
+ * Add two missing description strings for flatpak permissions
+ * Only show permissions for flatpak apps and not for e.g. fonts
+ * Fix flatpak permissions to correctly show up for available apps
+ * Hide various details page items that don't make sense when showing
+ .flatpakrepo files
+ * Fix an issue that caused descriptions to sometimes not get correctly loaded
+ * Sort the items in the Source drop down
+ * Don't show error notifications for background download and refresh errors
+ * Fix an issue that could cause an explosion of "A restart is required"
+ notifications
+ * Various flatpak plugin fixes to make it correctly match the data when
+ multiple flatpak repos are available
+ * Fix the rpm-ostree plugin to correctly convert remote dbus errors
+
+This release also updates translations.
+
+Version 3.31.90
+~~~~~~~~~~~~~~~
+Released: 2019-02-24
+
+This is an unstable release in the 3.31 development series, with the following
+improvements:
+ * Fix showing the installed check mark on tiles
+ * Fix crashes in the packagekit plugin due to missing locking
+ * Add back support for appstream data in /var/{cache,lib}/app-info directories
+ that accidentally got left out with the libxmlb rewrite
+ * Update the featured banner for gnome-chess
+ * Fix the details page alignment when only one screenshot is shown
+ * Move the Update button to the right hand side on the details page
+ * Fix enabling repos when installing codecs through the extras page
+ * Remove the Sundry folder and sync the apps in the Utilities folder with
+ gnome-menus 3.31.90
+ * Improve various content rating texts
+ * Drop workarounds for locales with codesets
+ * Use the currently selected icon theme for stock icons
+ * Don't hide compulsory apps in the category views
+ * Use the SPDX-License-Identifier in all source files
+ * Remove various useless error prefixes, making flatpak and packagekit error
+ messages shorter and easier to read
+ * flatpak: Show the installation type (user, system) in the Source dropdown
+ * flatpak: Let apps control the name suffix/prefix they have and don't force
+ (Nightly) suffix for everything on the master branch
+ * flatpak: Various fixes for matching flatpaks to appstream entries
+ * flatpak: Distinguish between the same app coming from multiple remotes
+ * rpm-ostree: Correctly resolve installed appdata files to package names
+ * rpm-ostree: Hook up percentage progress for install and remove
+ * rpm-ostree: Implement layered package install
+ * rpm-ostree: Implement locally downloaded rpm install
+ * rpm-ostree: Show the source of the packages when installing layered packages
+ * rpm-ostree: Various fixes making things more robust
+ * snap: Use new media API
+
+This release also updates translations.
+
+Version 3.31.2
+~~~~~~~~~~~~~~
+Released: 2019-01-16
+
+This is an unstable release in the 3.31 development series, with the following
+improvements:
+ * Show permissions for installed flatpaks, and new permissions for updates
+ * Use libxmlb to parse AppStream XML, making gnome-software start up faster
+ and use less memory
+ * Update the app icon
+ * Update categories for ESRA rating system
+ * Improve various error messages to have more details
+ * Fix an issue that caused incorrect version numbers to be shown for installed
+ flatpaks
+ * Fix various thread safety related crashes
+ * Fix row unrevealing to not leave behind 2 pixels on the updates page
+ * Make the refresh button to actually refresh packagekit cache
+ * Fix various issues that could lead to cache refresh getting stuck
+ * Show updates available notifications even when automatic updates are
+ disabled
+ * Fix counting apps in the updates applied notification
+ * Improve packagekit update loading code, hopefully making it more robust
+ * Fix an issue that could lead to the packagekit plugin activating on
+ rpm-ostree based systems
+ * Switch flatpak updates to use a single transaction, which lets us share more
+ code (and bugs) with the command line flatpak utility
+ * Fix various issues with transitioning from the "Download" state to "Restart
+ & Update"
+ * Don't error out from update downloads if the ODRS server is unavailable
+ * Fix old updates accumulating in the OS Updates item
+ * Various flatpakref installation fixes
+ * Fix opening the details page when clicking on "Show Details" in GNOME Shell
+ * Fix opening shell extensions details from GNOME Tweaks
+ * Various fixes for initial loading state
+ * Add a separate "Download" step for packagekit offline updates, so that
+ "Restart & Update" is instant
+ * Fix a version comparison issue that led to package updates sometimes showing
+ as downgrades in the OS Updates section (this needs latest appstream-glib)
+ * Show the refresh button when the updates page is in the failed state
+ * Notify about offline updates only after they are fully downloaded
+ * Fix a memory corruption issue on 32-bit arches that made gnome-software very
+ crashy
+ * Fix an issue with stuck back button on the details page after closing and
+ reopening gnome-software
+ * Make distro upgrades to Fedora N+2 release show up correctly
+ * Various flatpak plugin fixes
+ * Allow opening CAB files that include more than one update
+ * Fix critical warnings when quickly switching between category pages
+ * Small memory leak fixes
+
+This release also updates translations.
+
+Version 3.31.1
+~~~~~~~~~~~~~~
+Released: 2018-10-09
+
+This is an unstable release in the 3.31 development series, with the following
+improvements:
+ * Icon redesign
+ * Switch to using window menus instead of app menu
+ * Add a source selection drop down to details pages
+ * Move the search button to the left side in the header bar
+ * Various other minor UI tweaks
+ * GtkBuilder UI file changes to pave the way for an eventual GTK4 port (please
+ file issues for any UI layout regressions if you notice any!)
+ * Various internal plugin loader fixes and cleanups
+ * Remove the steam plugin
+ * Simplify the details page loading
+ * Fix an issue that caused icons to not get loaded for locally installed
+ flatpaks
+ * Update Fedora distro upgrades text
+ * Avoid a critical warning in the fwupd plugin when the device vendor is not
+ set
+ * Show verified developers for snaps
+
+This release also updates translations.
+
+Version 3.30.2
+~~~~~~~~~~~~~~
+Released: 2018-10-05
+
+This is a stable release with the following changes:
+ * Localize the polkit policy file
+ * Display ongoing app-installation at top of the list
+ * Update apps in display order
+ * Fix autoupdates triggering in a feedback loop
+ * Tweak the prefs dialog layout
+ * Various fixes to the flatpak plugin, making its state keeping more robust
+ * Fix flatpak errors to show up instead of a generic "Aborted" error
+ * Avoid triggering reboots for online updatable apps (flatpak)
+ * Make rpm-ostree updates work again
+ * Fix an issue that caused duplicate lines in 'OS Updates' on rpm-ostree based
+ systems
+ * Compiler warning fixes
+
+This release also updates translations.
+
+Version 3.30.1
+~~~~~~~~~~~~~~
+Released: 2018-09-25
+
+This is a stable release with the following changes:
+ * Fix an issue that caused duplicate lines in 'OS Updates'
+ * Filter the application restart notification to actual desktop apps
+ * Fix an issue that caused automatic updates to fail during download phase
+ * Avoid showing duplicates in the featured apps when an app is available as
+ both flatpak and a package
+ * Fix an issue that caused gnome-software to use 100% of CPU when doing
+ automatic updates
+ * Lower IO priority for gnome-software so that other apps stay responsive
+ during flatpak installs
+ * Various fixes and wording changes to automatic updates notifications
+ * Only show "Examine Disk" button when baobab is available
+ * Leak and correctness fixes in the snap plugin
+
+This release also updates translations.
+
+Version 3.30.0
+~~~~~~~~~~~~~~
+Released: 2018-09-04
+
+This is the first stable release for GNOME 3.30.
+
+Version 3.29.92
+~~~~~~~~~~~~~~~
+Released: 2018-08-28
+
+This is an unstable release in the 3.27 development series, with the following
+improvements:
+ * Do not go 'back' to a previous application details panel
+ * Don't crash if when getting the fwupd locked status
+ * Download updates automatically when required
+ * Fix dark theme support
+ * Hide screenshot and support widgets when no screenshots
+ * Ignore non-interactive generic errors
+ * Implement distro upgrade downloading when using rpm-ostree
+ * Only update the update check timestamp when it succeeds
+ * Open the WiFi panel when clicking the Network Settings button
+ * Rotate featured apps on the overview page
+ * Simplify the updates panel
+ * Use FlatpakTransaction to install, remove and update
+ * Use new display name for the Snap publisher
+ * Use the full name for the ESRB ratings descripion
+
+This release also updates translations.
+
+Version 3.29.1
+~~~~~~~~~~~~~~
+Released: 2018-03-05
+
+This is an unstable release in the 3.27 development series, with the following
+improvements:
+ * Show a better notification when a local file or URI is not supported
+ * snap: Use ODRS for reviews
+
+This release also updates translations.
+
+Version 3.28.2
+~~~~~~~~~~~~~~
+Released: 2018-05-09
+
+This is a stable release with the following changes:
+ * Add a warning when enabling the LVFS remote
+ * Show a notification when failing to open an url or a local file
+ * Fix multiple flatpak refreshes with new libflatpak
+ * Build fixes for FreeBSD
+ * Icon loading fixes for snap
+
+This release also updates translations.
+
+Version 3.28.1
+~~~~~~~~~~~~~~
+Released: 2018-04-09
+
+This is a stable release with the following changes:
+ * Fix a regression with opening results from gnome-shell search
+ * Show "Source: " tag in gnome-shell search when we have multiple matches
+ * Improve unknown license tag color scheme on details page
+ * Don't show installed icon on app tiles while still installing
+ * Fix empty items appearing under OS Updates
+ * Fix a regression that caused duplicate results in codec search
+ * Fix an issue with passing username/password to packagekit proxy
+ * Avoid crashing during first run with no network access
+ * A number of rpm-ostree fixes, making it possible to trigger offline updates
+ * Stop searching multiple times on search page
+ * Update Fedora third party repositories "Find out more..." link
+ * Fix an issue with in-app notifications failing with invalid markup errors
+ * Improve purchase failure handling for the snap store
+ * Fix a possible crash in snap plugin when adding screenshots
+ * Various other crash and correctness fixes
+
+This release also updates translations.
+
+Version 3.28.0
+~~~~~~~~~~~~~~
+Released: 2018-03-12
+
+This is the first stable release for GNOME 3.28, with the following
+improvements:
+ * Fix the build on NixOS
+ * Fix purchasing not working after authentication
+ * Revert a commit that led to flatpak updates failing without any feedback
+ * Make front page featured tile corners round to match other tiles
+ * Fix in-app notification close button alignment
+ * Several fixes to make error notifications more useful
+ * snap: Fix invalid metadata after cancelled refine
+ * snap: Launch command line snaps with 'snap run'
+
+This release also updates translations.
+
+Version 3.27.92
+~~~~~~~~~~~~~~~
+Released: 2018-03-05
+
+This is an unstable release in the 3.27 development series, marking the end of
+the development cycle. Next release will be 3.28.0!
+ * Removal of global plugin cache, simplifying gnome-software internals
+ * Software Repositories dialog got another batch of improvements and UI
+ changes
+ * GNOME Shell Extensions repository and fwupd repositories are now shown in
+ the Software Repositories dialog
+ * Shell extensions handling through PackageKit was improved, fixing a long
+ standing bug where we were unable to remove shell extension packages
+ * Category page rewrite that landed earlier this cycle went through UI review
+ and got a number of fixes
+ * Package version comparison in the updates dialog was fixed and should no
+ longer incorrectly show updates as downgrades
+ * Distro upgrade notifications are now rate limited to once per week
+ * Install buttons in codec install view that got lost in the 3.22 cycle are
+ now back
+ * Various paper cuts with distro upgrades were fixed
+ * Various fixes to installing apps from yum repos that have enabled=0
+ enabled_metadata=1
+ * Various other correctness and warning fixes
+ * Distros: Minimum supported fwupd version is now 1.0.3
+ * Distros: We've released PackageKit 1.1.9 that has string changes to match
+ gnome-software 3.28
+
+This release also updates translations.
+
+Version 3.27.90
+~~~~~~~~~~~~~~~
+Released: 2018-02-14
+
+This is an unstable release in the 3.27 development series, with the following
+improvements:
+ * The Software Sources dialog was renamed to Software Repositories and
+ rewritten
+ * Fedora Workstation third party repository handling was rewritten and should
+ be more robust
+ * Improved handling of metered network connections, making sure we cancel any
+ downloads when changing to a metered connection
+ * Limit the number of parallel operations depending on the installed CPU
+ * Improved handling of pending installs when there's no network connection
+ * Unused ostree and rpm plugins were dropped
+ * Switch from GtkSpell to gspell
+ * Improve alignment on the updates page
+ * Do not show missing screenshot error for fonts that have screenshots
+ * Fix various issues on Ubuntu when purchasing apps
+ * Fix an issue that led to duplicate categories appearing on the overview page
+ * Various memory leak and correctness fixes
+
+This release also updates translations.
+
+Version 3.27.4
+~~~~~~~~~~~~~~
+Released: 2018-01-08
+
+This is an unstable release in the 3.27 development series, with the following
+improvements:
+ * Add missing locking to gs_plugin_cache_remove(), fixing a possible crash
+ * Fix various memory leaks spotted by valgrind
+ * Fix a possible crash triggered by the fwupd plugin
+ * Do not emit critical warnings when reviewing OS Updates
+ * fwupd: Use the custom user-agent when downloading firmware
+ * overview page: Fix a crash when we have no featured apps
+ * packagekit: Implement repository enabling
+ * Fix hover CSS for "unknown" and "nonfree" license buttons
+
+This release also updates translations.
+
+Version 3.27.3
+~~~~~~~~~~~~~~
+Released: 2017-11-13
+
+This is an unstable release in the 3.27 development series, with the following
+improvements:
+ * Fix crashes in the repos plugin due to missing locking
+ * Add translated strings for the new OARS v1.1 additions
+ * Work around Firefox deleting rpm/deb files downloaded to /tmp when closing
+ * Log errors to console when starting from command line
+ * Do not enable distro-upgrades when updates are disabled
+ * Do not require the user to keep clicking 'More reviews' after each click
+ * Fix a critical when updating (flatpak) packages live
+ * fwupd: Do not crash when trying to list a locked device
+ * fwupd: Prepend the vendor name to the device name if not included
+ * Improve SPDX ID parsing when working out if it is 'free'
+ * packagekit: Do not crash when getting an invalid ID from PackageKit
+ * packagekit: Support apt:// URLs
+ * Various fixes to the snap plugin
+ * Do not crash when closing the source dialog while it is loading
+
+This release also updates translations.
+
+Version 3.27.2
+~~~~~~~~~~~~~~
+Released: 2017-11-13
+
+This is an unstable release in the 3.27 development series, with the following
+improvements:
+ * Redesigned category view
+ * Better notifications for completed distro upgrades
+ * Number of test suite fixes to pave way for continuous integration tests
+ * Improved support for running on low res displays
+ * Various fixes to internal state handling
+ * Allow linking to specified proprietary licenses
+ * Don't use versioned subdirectories under ~/.cache/gnome-software
+ * Only show in-app notifications for interactive user actions
+ * Various fixes for flatpak, fwupd, and snap support
+
+This release also updates translations.
+
+Version 3.26.2
+~~~~~~~~~~~~~~
+Released: 2017-11-09
+
+This is a stable release with the following changes:
+ * Various fixes to cancellable handling, making it more robust to cancel
+ install/remove operations
+ * Fix a common crash in Fedora distro upgrades plugin
+ * Fix showing N+2 Fedora upgrades
+ * Fix flatpak updates inadvertently triggering a reboot
+ * Revert plugin GType registering changes that broke app "adopting"
+ * Various flatpak plugin fixes
+ * Various snap plugin fixes
+ * Bump fwupd required dep to 0.9.7 and support building with new 1.0.0 API
+ * Avoid erroring out for operations that return more than 500 results (distro
+ upgrades, getting gnome-shell extensions list)
+ * Fix a few memory leaks
+
+This release also updates translations.
+
+Version 3.26.1
+~~~~~~~~~~~~~~
+Released: 2017-10-02
+
+This is a stable release with the following changes:
+ * Fix memory leak in "external appstream" plugin
+ * Don't translate an icon name in the Punjabi translation
+ * Fix critical warning in the fwupd plugin if the update URI isn't set
+ * Fix Addon categories not showing
+ * Fix crash in PackageKit plugin if reporting progress with no current
+ application
+ * Revert a change in the snapd plugin which can cause operations to fail or
+ hang in some situations
+
+This release also updates translations.
+
+Version 3.26.0
+~~~~~~~~~~~~~~
+Released: 2017-09-11
+
+This is the first stable release for GNOME 3.26, with the following
+improvements:
+ * Use the new fwupd API in 0.9.7 to avoid when a reboot is required
+ * Pass the complete proxy settings to PackageKit
+
+The following bugs are also fixed:
+ * Do not crash when emitting an uncommon error message
+ * Do not show a critical warning with new versions of fwupd
+ * Do not show an error for a remote-less flatpakref application
+ * Don't refine PackageKit packages after we've been cancelled
+ * Fix a possible crash on 32 bit systems
+ * Fix GNOME Shell search results for snap applications
+ * Properly disable shell-extensions when not running GNOME Shell
+
+This release also updates translations.
+
+Version 3.25.91
+~~~~~~~~~~~~~~~
+Released: 2017-08-21
+
+This is an unstable release in the 3.25 development series, with the following
+improvements:
+ * Add a simple donation button on the details page
+
+The following bugs are also fixed:
+ * Allow plugins to say that installation cannot be cancelled
+ * Fix displaying the info bar for the Shell Extensions category
+ * Use first featured snap as the featured app
+
+This release also updates translations.
+
+Version 3.25.90
+~~~~~~~~~~~~~~~
+Released: 2017-08-07
+
+This is an unstable release in the 3.25 development series, with the following
+improvements:
+ * Add a simple donation button on the details page
+
+The following bugs are also fixed:
+ * Do not crash if the child schema is invalid
+ * Don't log a warning when clicking the the 'more results' search entry
+ * Fixed subcategory names localization
+ * Ensure flatpak remote names are valid
+ * Fix critical warning with new versions of the fwupd daemon
+
+This release also updates translations.
+
+Version 3.25.4
+~~~~~~~~~~~~~~
+Released: 2017-07-21
+
+This is an unstable release in the 3.25 development series, with the following
+improvements:
+ * Add new rpm-ostree integration for Fedora Atomic Workstation
+ * Install the Flatpak runtime as part of the application install phase
+ * Split OS updates up into multiple sections and show the target version
+ * Support compatibility IDs when getting reviews from the ODRS
+
+The following bugs are also fixed:
+ * Cancel plugin jobs if they take too much time
+ * Correctly find already installed flatpak runtimes
+ * Do not show an error for a flatpakref when broken remotes exist
+ * Don't show the screenshot section for runtimes
+ * Fix authentication prompt not showing when using snapd
+ * Make license buttons buttons actually look clickable
+ * Make the review moderator panel easier to use
+ * Only show snaps as sandboxed if snapd supports confinement
+ * Respect the per-user or per-system install preferences
+ * Return the correct installed state for user/system flatpak remotes
+
+This release also updates translations.
+
+Version 3.25.3
+~~~~~~~~~~~~~~
+Released: 2017-06-22
+
+This is an unstable release in the 3.25 development series, with the following
+improvements:
+ * Add a banner designer utility
+ * Add the initial support to support purchasable apps
+ * Automatically install flatpak icon themes and GTK themes
+ * Restyle the updates panel to have a separate sections
+ * Show a notification in the updates page when the OS is end of life
+ * Show recently updated applications on the overview page
+
+The following bugs are also fixed:
+ * Add snap self tests and provide more data to the details panel
+ * Allow compiling with newer versions of meson
+ * Do not crash when sending progress reports while refreshing
+ * Don't trigger systemd for every single offline update
+ * Ensure all related flatpak applications get installed
+ * Ensure we use the gnome-desktop support if enabled
+ * Fix searching for codecs on Ubuntu
+ * Show a better status messages when downloading metadata
+ * Show a pulsing progressbar if plugins do not report progress
+ * Show the PackageKit interactive dialog when required
+ * Support updating metadata from multiple fwupd remotes
+
+This release also updates translations.
+
+Version 3.25.2
+~~~~~~~~~~~~~~
+Released: 2017-05-08
+
+This is an unstable release in the 3.25 development series, with the following
+improvements:
+ * Allow AppStream to be downloaded out-of-band per-user
+
+The following bugs are also fixed:
+ * Do not initialize plugins in every instance
+ * Fix the 'Show Details' context menu item in GNOME Shell
+ * Use headerbar in toolbar-mode in Unity
+ * Do not allow plugins to set the origin title in the UI
+
+This release also updates translations.
+
+Version 3.25.1
+~~~~~~~~~~~~~~
+Released: 2017-04-28
+
+This is an unstable release in the 3.25 development series, with the following
+improvements:
+ * Truncate the search results if there are a large number
+ * Use the complete source as a search keyword
+
+The following bugs are also fixed:
+ * Fall back to a stock icon for hardware drivers
+ * Fix a crash when removing an addon
+ * Fix a critical warning in the shell search provider
+ * Fix popular-overrides to show the correct applications
+ * Fix various failures to read from snapd
+ * Make offline updates work when online updates are available
+ * Never include the size of the runtime in the installed size
+ * Respect the install preference when for flatpakref files
+ * Use the developer name in preference to the project group
+
+This release also updates translations.
+
+Version 3.23.92
+~~~~~~~~~~~~~~~
+Released: 2017-03-13
+
+This is an unstable release in the 3.23 development series, with the following
+bug fixes:
+ * Allow installing broken flatpakref files
+ * Do not reload the updates list when updates are in progress
+ * Reset the headerbar title when switching to the details page
+ * Unconditionally show things that are in progress in the Installed page
+
+This release also updates translations.
+
+Version 3.23.91
+~~~~~~~~~~~~~~~
+Released: 2017-02-27
+
+This is an unstable release in the 3.23 development series, with the following
+improvements:
+ * Add support for RuntimeRepo in flatpakref files
+ * Allow the user to restart the currently running gnome-software instance
+ * Never show components without AppData files
+
+The following bugs are also fixed:
+ * Initialize progress to zero right before and after processing an action
+ * Animate the removal of live updates
+ * Add YaST as a default folder in gnome-shell overview
+
+This release also updates translations.
+
+Version 3.23.90
+~~~~~~~~~~~~~~~
+Released: 2017-02-13
+
+This is an unstable release in the 3.23 development series, with the following
+improvements:
+ * Handle apt and snap URLs
+ * Show the updates panel with sections
+ * Sort the apps in the installed panel by kind
+
+The following bugs are also fixed:
+ * Add a more detailed error message when AC power is required
+ * Do not hardcode the gnome-software application name
+ * Ensure firmware is downloaded when not cached
+ * Fix a rather large memory leak when loading Steam data
+ * Fix launching Flatpak apps after updating
+ * Install needed Flatpak runtimes when updating an app
+ * Only show the scary firmware warning for removable devices
+
+This release also updates translations.
+
+Version 3.23.3
+~~~~~~~~~~~~~~
+Released: 2016-12-15
+
+This is an unstable release in the 3.23 development series, with the following
+improvements:
+ * Add an --install and --interaction CLI options
+ * Add the installed size of the apps in the installed view
+ * Always set a description for each notification
+ * Show an in-app notification when installed plugins are changed
+ * Use a set of stars to show the different star ratings
+
+The following bugs are also fixed:
+ * Add a missing error check to fix a common crash on LiveDVD media
+ * Add thread locking in GsApp to fix some common crashes
+ * Allow upgrading to Fedora EOL releases
+ * Don't allow review actions when offline
+ * Ensure we actually schedule firmware updates for download
+ * Fix the getting of PackageKit and flatpak update details
+ * Hide some notifications when the new app is launched or the window is closed
+ * Hide the screenshot placeholder for input methods and langpacks
+
+This release also updates translations.
+
+Version 3.23.2
+~~~~~~~~~~~~~~
+Released: 2016-11-21
+
+This is an unstable release in the 3.23 development series, with the following
+improvements:
+ * Add a setting for downloading updates on metered connections
+ * Add content rating interface for games
+ * Add support for pending updates that are applied on demand
+ * Add support for the flatpak DefaultBranch feature
+ * Allow showing an application review without a display name
+ * Convert the modal failure dialogs to in-app notifications
+ * Switch to using the ODRS server hosted by GNOME
+
+The following bugs are also fixed:
+ * Always get the newest screenshot for GNOME Shell extensions
+ * Avoid redownloading the same screenshots for different images
+ * Don't download updates when low on power
+ * Fix the growth in memory usage for every search request
+ * Never show a 'back' button when showing search results
+ * Show the search bar when the user does ctrl+f
+
+This release also updates translations.
+
+Version 3.22.2
+~~~~~~~~~~~~~~
+Released: 2016-11-07
+
+This stable release fixes the following bugs:
+ * Large number of fixes and improvements for flatpak support
+ * Improved handling for flatpak repos with multiple branches
+ * Initial support for installing flatpakrepo files
+ * Fix a crash when searching for codecs
+ * Fix a crash when de-duplicating applications
+ * Speed improvements for loading appstream data
+ * Refactor snapd handling code using snapd-glib
+ * Show the search bar when the user does Ctrl+f
+
+This release also updates translations.
+
+Version 3.22.1
+~~~~~~~~~~~~~~
+Released: 2016-10-12
+
+This stable release fixes the following bugs:
+ * Fix several issues with flatpak bundles
+ * Fix installing local packages
+ * Fix a crash when failing to get an installed flatpak ref
+ * Speed up loading the details and overview pages
+ * Switch to using the ODRS server hosted by GNOME
+
+This release also updates translations.
+
+Version 3.22.0
+~~~~~~~~~~~~~~
+Released: 2016-09-19
+
+This is the first stable release for GNOME 3.22 and updates several
+translations.
+
+Version 3.21.92
+~~~~~~~~~~~~~~~
+Released: 2016-09-13
+
+This is an unstable release in the 3.21 development series, with the following
+improvements:
+ * Add a new section name in the Addons category for drivers
+ * Add a plugin to match a hardware modalias
+
+The following bugs are also fixed:
+ * Do not hide the origin when installing or removing an app
+ * Do not show the screenshot fallback image for firmware or drivers
+ * Fix launching app's details from the installed notification
+ * Fix showing the source line in the installed panel
+ * Unbreak the GNOME Shell search provider
+ * Use the same padding as a GtkStackSwitcher
+
+This release also updates translations for many languages.
+
+Version 3.21.91
+~~~~~~~~~~~~~~~
+Released: 2016-08-31
+
+This is an unstable release in the 3.21 development series, with the following
+improvements:
+ * Add functionality to enable non-free sources
+ * Show the device bootloader screenshot when required
+
+The following bugs are also fixed:
+ * Always return consistent results by allowing plugins to share a cache
+ * Ensure the search text is showing when going back to search results
+ * Only enable the firmware 'Install' button when the device is in the right
+ mode
+ * Remove an app from the installed view when it's uninstalled
+ * Show percentage progress when installing firmware
+
+This release also updates translations for many languages.
+
+Version 3.21.90
+~~~~~~~~~~~~~~~
+Released: 2016-08-15
+
+This is an unstable release in the 3.21 development series, with the following
+improvements:
+ * Limit the ODRS moderation queue to a specific language
+
+The following bugs are also fixed:
+ * Correctly load .flatpakrepo files
+ * Don't get the download size for installed flatpak packages
+ * Fix showing the progress bar when installing apps
+ * Never try to modify the application name
+ * Only notify about upgrades once per month
+
+This release also updates translations for many languages.
+
+Version 3.21.4
+~~~~~~~~~~~~~~
+Released: 2016-07-18
+
+This is an unstable release in the 3.21 development series, with the following
+improvements:
+ * Add a cancel button and progress information to the details page
+ * Add a dialog to confirm upgrade removals
+ * Add support for authenticating in plugins
+ * Add support for snaps
+ * Enable gtk-doc generation for documentation
+ * Show a new-style category list on the overview page
+ * Show origin information when applications are available from multiple
+ sources
+ * Show sandboxing information for selected applications
+ * Show the star ratings in more places
+ * Support installing .flatpakrepo files
+ * Support launching applicatins using a appstream:// URL
+
+The following bugs are also fixed:
+ * Allow plugins to be enabled and disabled at runtime
+ * Always show the 'MyLanguage' kudo when in en_US locale
+ * Correctly trigger systemd offline updates when only processing OS updates
+ * Disable app folders feature when run outside GNOME
+ * Do not show buttons on the search results
+ * Do not use deprecated CSS properties
+ * Do not use deprecated fwupd API
+ * Ensure reviews are shown in the correct order
+ * Fix a crash when double clicking files
+ * Fix several UX issues when upgrading
+ * Show the 'More Reviews' button in the details panel
+ * Try really hard to have two rows of important categories
+
+This release also updates translations for many languages.
+
+Version 3.21.2
+~~~~~~~~~~~~~~
+Released: 2016-05-23
+
+This is an unstable release in the 3.21 development series, with the following
+improvements:
+ * Add a --details-pkg option to the gnome-software binary
+ * Add support for flatpak packages
+ * Add a plugin to auto-add some license information
+ * Add depends, requires and conflicts at initialize time
+ * Add support for application key colors
+ * Export a set of headers to allow external plugins to be built
+
+The following bugs are also fixed:
+ * Do not crash if plugins are badly behaved
+ * Do not directly load pixbufs in the AppStream plugin
+ * Do not unconditionally invalidate the updates list on hardware hotplug
+ * Find the best AppSteam component when matching any prefixes
+ * Fix crash due to network change before app activation
+ * Fix launching various KDE4 applications
+ * Support getting cached content from /var/cache and /usr/share
+
+This release also updates translations for many languages.
+
+Version 3.21.1
+~~~~~~~~~~~~~~
+Released: 2016-04-25
+
+This is an unstable release in the 3.21 development series, with the following
+improvements:
+ * Add an initial loading panel when there is no metadata
+ * Add an outline ostree plugin that just adds remotes as sources
+ * Add an unreviewable application quirk
+ * Add initial Steam support
+ * Add support for app shortcut addition/removal
+ * Add support for GNOME Shell extensions
+ * Allow free-but-unspecified SPDX tokens
+ * Allow widgets to use custom CSS in a generic way
+ * Do the PackageKit refresh as a background transaction
+ * Hide "Software Sources" menu when its action is disabled
+ * Make the distro upgrades dialog match the new mockup
+ * Split the 'size' property into size-installed and size-download
+ * Use a link instead of a button for history
+ * Use AppStream files for the popular, featured and extra category data
+ * Use dpkg-deb info to create a GsApp when double clicking on a .deb file
+ * Use FwupdClient from fwupd 0.7.0
+ * Use GdkPixbuf to parse icns files
+ * Use gsettings to enable/disable the 'sources' action
+ * Use the Fedora themed image for the upgrade banner
+ * When there are no trusted sources mark everything as non-3rd-party
+
+The following bugs are also fixed:
+ * Actually show the error dialog for an invalid file
+ * Allow all functions called by g_module_symbol() to fail
+ * Allow popular and featured apps to match any prefix
+ * Do not maintain a cache of applications in the plugin loader
+ * Do not make the ODRS plugin depend on xdg-app
+ * Do not re-request the distro-upgrade when switching pages
+ * Do not show ratings and reviews for some component kinds
+ * Do not show the distro-upgrade notification if the window is open
+ * Do not use the header bar on Unity
+ * Fix a crash when double clicking package files
+ * Fix live installing firmware
+ * Get the correct icon size when installing xdg-app bundles on HiDPI
+ * Hide the kudo details panel for non desktop components
+ * Load screenshots directly if their URLs point to local files
+ * Lower the limits for review text
+ * Make all the plugins more threadsafe
+ * Make the provenance plugin non-specific to Fedora
+ * Move header bar button creation into individual pages
+ * Move the Install & Restart button below the upgrade banner
+ * Never show star ratings on the category app tiles
+ * Only show one modal dialog at a time
+ * Only show the session manager restart if there were any non-live updates
+ * Properly support multi-line .deb descriptions
+ * Show a 'Install All' button when all the updates can be installed live
+ * Show a modal dialog when downloading the distro-upgrade failed
+ * Show the upgrades banner even if there are no updates to show
+ * Use a cache file to respect the fedora-distro-upgrades cache-age
+ * Use GFile instead of a filename when converting apps
+
+This release also updates translations for many languages.
+
+Version 3.19.91
+~~~~~~~~~~~~~~~
+Released: 2016-02-29
+
+This is an unstable release in the 3.19 development series, with the following
+improvements:
+ * Add an 'All' subcategory in the category shell
+ * Add ratings and review functionality for Ubuntu
+ * Install the xdg-app runtime as required automatically
+ * Show a confirmation dialog before reporting a review
+ * Show a guide label for the different star values
+ * Support installing local xdg-app bundles
+
+The following bugs are also fixed:
+ * Correctly identify local packages with sources
+ * Do not add multiple search results for the same app
+ * Do not show xdg-app runtimes in the installed panel
+ * Escape markup before showing modal dialogs
+
+This release also updates translations for many languages.
+
+Version 3.19.90
+~~~~~~~~~~~~~~~
+Released: 2016-02-15
+
+This is an unstable release in the 3.19 development series, with the following
+improvements:
+ * Add end-user application review functionality
+ * Add support for upgrading the OS from one release to another
+ * Add support for xdg-app and Limba bundles
+ * Add tags to applications, and explain them in the details page
+ * Update the list of featured applications on the front page
+
+The following bugs are also fixed:
+ * Add a missing tag to the software center metadata file
+ * PackageKit support is now optional
+ * Temporarily remove the remove button in the sources dialog
+ * Use versioned user cache directories to pick up new screenshots
+
+This release also updates translations for many languages.
+
+Version 3.19.4
+~~~~~~~~~~~~~~
+Released: 2016-01-15
+
+This is an unstable release in the 3.19 development series, with the following
+improvements:
+ * Add a link to Wikipedia to explain proprietary and public domain software
+ * Allow administrators to override the default popular applications
+ * Improve the interface for device firmware updates and some can be done live
+ * Make sure Characters and Disks show up in Utilities
+ * Show 3rd party applications in the search results
+ * Show a nicer installation dialog when installing local files
+ * Speed up the application first-start and also speed up switching pages
+ * Try to show if an application is free software
+
+The following bugs are also fixed:
+ * Do not crash on refresh if the fwupd daemon is not available
+ * Fix installing web applications
+ * Rework several windows to fit better on small screens
+ * Use the correct user agent string when downloading firmware
+
+This release also updates translations for many languages.
+
+Version 3.18.3
+~~~~~~~~~~~~~~
+Released: 2015-11-05
+
+This stable release fixes the following bugs:
+ * Use the correct user agent string when downloading firmware
+ * Fix a crash in the limba plugin
+ * Fix installing web applications
+
+This release also updates translations for many languages.
+
+Version 3.18.2
+~~~~~~~~~~~~~~
+Released: 2015-10-15
+
+This stable release fixes the following bugs:
+ * Fix a regression that could lead to never finding any updates
+ * Fix an issue with getting package details for apps without AppData
+
+This release also updates translations for many languages.
+
+Version 3.18.1
+~~~~~~~~~~~~~~
+Released: 2015-10-13
+
+This stable release fixes the following bugs:
+ * Do not force the cache refresh and delete otherwise valid packages
+ * Fix several potential crashes when navigating and when installing
+ * Get the new application icon for local packages after installation
+ * Improve cold start time by only parsing AppStream data once
+ * Make sure Characters and Disks show up in Utilities
+ * Only download the fwupd metadata signature once per day
+ * Show an empty space for no category results
+ * Show applications without AppData in the installed panel
+
+This release also updates translations for many languages.
+
+Version 3.18.0
+~~~~~~~~~~~~~~
+Released: 2015-09-21
+
+This is the first stable release for the GNOME 3.18 desktop!
+
+Version 3.17.92
+~~~~~~~~~~~~~~~
+Released: 2015-09-15
+
+This is an unstable release in the 3.17 development series, with the following
+improvements:
+ * Fix getting firmware updates by parsing the metadata correctly
+ * Make the application menu path correct in RTL locales
+ * Don't keep the application running forever when run as a search provider
+
+This release also updates translations for many languages.
+
+Version 3.17.91
+~~~~~~~~~~~~~~~
+Released: 2015-09-03
+
+This is an unstable release in the 3.17 development series, with the following
+improvements:
+ * Better theming for the category sidebar
+ * Use standard size icon in the about dialog
+ * Support mouse back button for going back in dialogs
+ * Fix incorrect alignment on the front page in RTL languages
+ * Misc other minor bugs fixed
+
+This release also updates translations for many languages.
+
+Version 3.17.90
+~~~~~~~~~~~~~~~
+Released: 2015-08-19
+
+This is an unstable release with the following bugs fixed:
+ * Use CSS to style the error message details
+ * Correctly align labels in the Add to Folder dialog
+
+This release also updates translations for many languages.
+
+Version 3.17.3
+~~~~~~~~~~~~~~
+Released: 2015-08-12
+
+This is an unstable release in the 3.17 development series, with the following
+improvements:
+ * Add basic support for Limba bundles
+ * Automatically download new firmware metadata from LVFS
+ * Hide updates UI on managed systems
+ * Show a new notification when security updates remain unapplied
+ * Show installation progress when installing applications
+ * Use some new applications to the picked category
+
+Bugs fixed in this release:
+ * Do not show applications that are not available when searching by category
+ * Don't crash when launching an app that has no desktop ID
+ * Don't show applications without AppData in the category view
+ * Fix a possible race and crash when loading icons
+ * Fix locking in the AppStream code to fix several crashes
+ * Use better error messages on offline update failure
+ * Withdraw the notification when prepared update gets invalidated
+
+This release also updates translations for many languages.
+
+Version 3.17.2
+~~~~~~~~~~~~~~
+Released: 2015-06-05
+
+This is an unstable release in the 3.17 development series, with the following
+improvements:
+ * Make fwupd dependency automagic
+
+Bugs fixed in this release:
+ * Fix a regression from the previous unstable release that made it impossible
+ to install updates
+ * Fix a crash in the screenshot loader
+ * Fix a crash in the sources dialog
+ * Fix a crash when installing rpms that lack description
+ * Wrap long descriptions in the update dialog
+
+This release also updates translations for many languages.
+
+Version 3.17.1
+~~~~~~~~~~~~~~
+Released: 2015-05-25
+
+This is the first unstable release in the 3.17 development series, with a
+number of new features:
+ * Support getting firmware updates through the fwupd daemon
+ * Use a smaller number of tiles on the front page on small monitors
+ * Rework internal modulesets, making it easier to edit the list of featured
+ apps
+ * Revert back to using a hand-picked list of featured apps
+ * Several improvements to the sources dialog
+ * Show better human readable names when searching for font scripts
+ * Show a spinner while loading the data for the update history dialog
+
+This release also updates translations for many languages.
+
+Version 3.16.2
+~~~~~~~~~~~~~~
+Released: 2015-05-11
+
+This release fixes the following bugs:
+ * Remove redundant OK button from the updates installed notification
+ * Display a better human readable title for printer drivers
+ * Show a better UI for offline update failure dialog
+ * Set default actions for the update done notifications
+ * Allow searching for packages via the API without appdata
+ * Fix showing webapps with non-local icons
+
+This release also updates translations for many languages.
+
+Version 3.16.1
+~~~~~~~~~~~~~~
+Released: 2015-04-14
+
+This release fixes the following bugs:
+ * Correctly save HiDPI images to HiDPI directories
+ * Scroll the contents of the error message dialog
+
+This release also updates translations for many languages.
+
+Version 3.16.0
+~~~~~~~~~~~~~~
+Released: 2015-03-23
+
+This stable release marks the release of GNOME 3.16!
+
+Version 3.15.92
+~~~~~~~~~~~~~~~
+Released: 2015-03-16
+
+This unstable release adds the following features:
+ * React to theme changes
+ * Rebase the HighContrast theme
+
+This release fixes the following bug:
+ * Fix HiDPI scale factor calculation
+ * Align section headings in all views
+ * Fix 'installed' overlays when using the HighContrast theme
+ * Fall back to showing the top level category when no sub category exists
+ * Fix a crash when using the pending applications feature
+
+This release also updates translations for many languages.
+
+Version 3.15.91
+~~~~~~~~~~~~~~~
+Released: 2015-03-02
+
+This unstable release adds the following features:
+ * Enable kinetic scrolling in updates dialog
+
+This release fixes the following bug:
+ * Always ensure that the back entry focus widget is valid
+ * Don't show small screenshots on HiDPI hardware
+ * Fix a crash when starting GNOME Software for the first time
+ * Only show compatible projects when getting the featured list
+
+Version 3.15.90
+~~~~~~~~~~~~~~~
+Released: 2015-02-16
+
+This unstable release adds the following features:
+ * Add a new panel for displaying session service results
+ * Add a new version of the Modify interface
+ * Require AppData for all available packages
+
+This release fixes the following bug:
+ * Use the new mockups for the 3rd party source install dialogs
+
+Version 3.15.4
+~~~~~~~~~~~~~~
+Released: 2015-01-19
+
+This unstable release adds the following features:
+ * Fix searching with very small search terms
+
+This release fixes the following bugs:
+ * Do case-insensitive searching of suitable keywords
+ * Fix a crash in the screenshot loader
+ * Fix a crash when clicking the back button
+ * Fix searching for keyworks with special chars
+ * Show an error message when we fail to load details about a local file
+
+Version 3.15.2
+~~~~~~~~~~~~~~
+Released: 2014-11-24
+
+This unstable release adds the following features:
+ * Show a blurred low-resolution screenshot while loading the HiDPI one
+
+This release fixes the following bugs:
+ * Do not show a random white line above the star rating widget
+ * Do not show empty app boxes if no popular results are available
+ * Do not try to download local web-app icons
+ * Use blue stars for the user-ratings rather than gold
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c40a273
--- /dev/null
+++ b/README.md
@@ -0,0 +1,29 @@
+[![Build Status](https://gitlab.gnome.org/GNOME/gnome-software/badges/master/build.svg)](https://gitlab.gnome.org/GNOME/gnome-software/pipelines)
+
+# Software
+
+[Software](https://wiki.gnome.org/Apps/Software) lets you install and update applications and system extensions.
+A plugin system is used to access software from different sources.
+Plugins are provided for:
+ - Traditional package installation via PackageKit (e.g. Debian package, RPM).
+ - Next generation packages: [Flatpak](https://flatpak.org/) and [Snap](https://snapcraft.io/).
+ - Firmware updates.
+ - Ratings and reviews using [ODRS](https://odrs.gnome.org/).
+
+Software supports showing metadata that closely matches the [AppStream](https://www.freedesktop.org/wiki/Distributions/AppStream/) format.
+
+Software runs as a background service to provide update notifications and be a search provider for [GNOME Shell](https://wiki.gnome.org/Projects/GnomeShell).
+
+# Building
+
+Build locally with:
+```
+$ meson --prefix $PWD/install build/
+$ ninja -C build/ all install
+$ killall gnome-software
+$ XDG_DATA_DIRS=install/share:$XDG_DATA_DIRS ./install/bin/gnome-software
+```
+
+# Debugging
+
+Running with `--verbose` will give detailed logging information.
diff --git a/RELEASE b/RELEASE
new file mode 100644
index 0000000..518f563
--- /dev/null
+++ b/RELEASE
@@ -0,0 +1,26 @@
+GNOME Software Release Notes
+
+Write release entries:
+
+git log --format="%s" --cherry-pick --right-only 3.38.0... | grep -i -v trivial | grep -v Merge | sort | uniq
+Add any user visible changes into data/appdata/org.gnome.Software.appdata.xml.in
+
+Generate NEWS file:
+appstream-util appdata-to-news ../data/appdata/org.gnome.Software.appdata.xml.in > NEWS
+
+git commit -a -m "Release version 3.38.1"
+git tag -s 3.38.1 -m "==== Version 3.38.1 ===="
+<enter password>
+
+ninja-build dist
+git push --tags
+git push
+
+scp meson-dist/*.tar.xz rhughes@master.gnome.org:
+ssh rhughes@master.gnome.org
+ftpadmin install gnome-software-*.tar.xz
+
+Post release version bump in meson.build
+
+git commit -a -m "trivial: Post release version bump"
+git push
diff --git a/contrib/gnome-software.spec.in b/contrib/gnome-software.spec.in
new file mode 100644
index 0000000..73ff766
--- /dev/null
+++ b/contrib/gnome-software.spec.in
@@ -0,0 +1,209 @@
+%global glib2_version 2.61.1
+%global gtk3_version 3.22.4
+%global json_glib_version 1.2.0
+%global packagekit_version 1.1.1
+%global appstream_glib_version 0.7.15
+%global libsoup_version 2.52.0
+%global gsettings_desktop_schemas_version 3.12.0
+%global gnome_desktop_version 3.18.0
+%global fwupd_version 1.2.10
+%global flatpak_version 1.1.3
+%global libxmlb_version 0.1.7
+
+%define alphatag #ALPHATAG#
+
+Name: gnome-software
+Version: #VERSION#
+Release: 0.#BUILD#%{?alphatag}%{?dist}
+Summary: A software center for GNOME
+
+License: GPLv2+
+URL: https://wiki.gnome.org/Apps/Software
+Source0: https://download.gnome.org/sources/gnome-software/3.34/%{name}-%{version}.tar.xz
+
+BuildRequires: gcc
+BuildRequires: gettext
+BuildRequires: libxslt
+BuildRequires: docbook-style-xsl
+BuildRequires: desktop-file-utils
+BuildRequires: fwupd-devel >= %{fwupd_version}
+BuildRequires: glib2-devel >= %{glib2_version}
+BuildRequires: gnome-desktop3-devel
+BuildRequires: gnome-online-accounts-devel
+BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_version}
+BuildRequires: gspell-devel
+BuildRequires: gtk3-devel >= %{gtk3_version}
+BuildRequires: gtk-doc
+BuildRequires: json-glib-devel >= %{json_glib_version}
+BuildRequires: libappstream-glib-devel >= %{appstream_glib_version}
+BuildRequires: libdnf-devel
+BuildRequires: libsoup-devel
+BuildRequires: libxmlb-devel >= %{libxmlb_version}
+BuildRequires: meson
+BuildRequires: PackageKit-glib-devel >= %{packagekit_version}
+BuildRequires: polkit-devel
+BuildRequires: flatpak-devel >= %{flatpak_version}
+BuildRequires: ostree-devel
+BuildRequires: rpm-devel
+BuildRequires: rpm-ostree-devel
+BuildRequires: libgudev1-devel
+BuildRequires: valgrind-devel
+
+Requires: appstream-data
+Requires: flatpak%{?_isa} >= %{flatpak_version}
+Requires: flatpak-libs%{?_isa} >= %{flatpak_version}
+Requires: fwupd%{?_isa} >= %{fwupd_version}
+Requires: glib2%{?_isa} >= %{glib2_version}
+Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
+# gnome-menus is needed for app folder .directory entries
+Requires: gnome-menus%{?_isa}
+Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
+Requires: gtk3%{?_isa} >= %{gtk3_version}
+Requires: json-glib%{?_isa} >= %{json_glib_version}
+Requires: iso-codes
+Requires: libappstream-glib%{?_isa} >= %{appstream_glib_version}
+# librsvg2 is needed for gdk-pixbuf svg loader
+Requires: librsvg2%{?_isa}
+Requires: libsoup%{?_isa} >= %{libsoup_version}
+Requires: libxmlb%{?_isa} >= %{libxmlb_version}
+
+Recommends: PackageKit%{?_isa} >= %{packagekit_version}
+
+Obsoletes: gnome-software-snap < 3.33.1
+Obsoletes: gnome-software-editor < 3.35.1
+
+# this is not a library version
+%define gs_plugin_version 13
+
+%description
+gnome-software is an application that makes it easy to add, remove
+and update software in the GNOME desktop.
+
+%package devel
+Summary: Headers for building external gnome-software plugins
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description devel
+These development files are for building gnome-software plugins outside
+the source tree. Most users do not need this subpackage installed.
+
+%package rpm-ostree
+Summary: rpm-ostree backend for gnome-software
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: rpm-ostree%{?_isa}
+Supplements: (gnome-software%{?_isa} and rpm-ostree%{?_isa})
+
+%description rpm-ostree
+gnome-software is an application that makes it easy to add, remove
+and update software in the GNOME desktop.
+
+This package includes the rpm-ostree backend.
+
+%prep
+%autosetup -p1
+
+%build
+%meson \
+ -Dsnap=false \
+ -Dgudev=true \
+ -Dpackagekit=true \
+ -Dexternal_appstream=false \
+ -Drpm_ostree=true \
+ -Dtests=false
+%meson_build
+
+%install
+%meson_install
+
+# remove unneeded dpkg plugin
+rm %{buildroot}%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dpkg.so
+
+# make the software center load faster
+desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.desktop \
+ --set-key=X-AppInstall-Package --set-value=%{name}
+
+# set up for Fedora
+cat >> %{buildroot}%{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschema.override << FOE
+[org.gnome.software]
+official-repos = [ 'anaconda', 'fedora', 'fedora-debuginfo', 'fedora-source', 'koji-override-0', 'koji-override-1', 'rawhide', 'rawhide-debuginfo', 'rawhide-source', 'updates', 'updates-debuginfo', 'updates-source', 'updates-testing', 'updates-testing-debuginfo', 'updates-testing-source', 'fedora-modular', 'fedora-modular-debuginfo', 'fedora-modular-source', 'rawhide-modular', 'rawhide-modular-debuginfo', 'rawhide-modular-source' ]
+FOE
+
+%find_lang %name --with-gnome
+
+%check
+desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
+
+%files -f %{name}.lang
+%doc AUTHORS README.md
+%license COPYING
+%{_bindir}/gnome-software
+%{_datadir}/applications/gnome-software-local-file.desktop
+%{_datadir}/applications/org.gnome.Software.desktop
+%dir %{_datadir}/gnome-software
+%{_datadir}/gnome-software/*.png
+%{_mandir}/man1/gnome-software.1.gz
+%{_datadir}/icons/hicolor/*/apps/org.gnome.Software.svg
+%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Software-symbolic.svg
+%{_datadir}/icons/hicolor/scalable/status/software-installed-symbolic.svg
+%{_datadir}/gnome-software/featured-*.svg
+%{_datadir}/gnome-software/featured-*.jpg
+%{_datadir}/metainfo/org.gnome.Software.appdata.xml
+%{_datadir}/metainfo/org.gnome.Software.Plugin.Flatpak.metainfo.xml
+%{_datadir}/metainfo/org.gnome.Software.Plugin.Fwupd.metainfo.xml
+%{_datadir}/metainfo/org.gnome.Software.Plugin.Odrs.metainfo.xml
+%dir %{_libdir}/gs-plugins-%{gs_plugin_version}
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_appstream.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_desktop-categories.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_desktop-menu-path.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dummy.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fedora-langpacks.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fedora-pkgdb-collections.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_flatpak.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fwupd.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_generic-updates.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-blocklist.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-popular.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_icons.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_key-colors-metadata.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_key-colors.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_modalias.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_odrs.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_os-release.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-history.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-local.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-offline.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-proxy.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refine-repos.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refine.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refresh.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-upgrade.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-url-to-app.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_provenance-license.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_provenance.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_repos.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_rewrite-resource.so
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_systemd-updates.so
+%{_sysconfdir}/xdg/autostart/gnome-software-service.desktop
+%{_datadir}/app-info/xmls/org.gnome.Software.Featured.xml
+%{_datadir}/dbus-1/services/org.freedesktop.PackageKit.service
+%{_datadir}/dbus-1/services/org.gnome.Software.service
+%{_datadir}/gnome-shell/search-providers/org.gnome.Software-search-provider.ini
+%{_datadir}/glib-2.0/schemas/org.gnome.software.gschema.xml
+%{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschema.override
+%{_libexecdir}/gnome-software-cmd
+%{_libexecdir}/gnome-software-restarter
+
+%files rpm-ostree
+%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_rpm-ostree.so
+
+%files devel
+%{_libdir}/pkgconfig/gnome-software.pc
+%dir %{_includedir}/gnome-software
+%{_includedir}/gnome-software/*.h
+%{_datadir}/gtk-doc/html/gnome-software
+
+%changelog
+* #LONGDATE# Richard Hughes <richard@hughsie.com> #VERSION#-0.#BUILD##ALPHATAG#
+- Update from GIT
+
diff --git a/contrib/gs-plugin-example.c b/contrib/gs-plugin-example.c
new file mode 100644
index 0000000..92822eb
--- /dev/null
+++ b/contrib/gs-plugin-example.c
@@ -0,0 +1,56 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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 <gnome-software.h>
+
+/*
+ * Compile and install with:
+ *
+gcc -shared -o libgs_plugin_example.so gs-plugin-example.c -fPIC \
+ `pkg-config --libs --cflags gnome-software` \
+ -DI_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE &&
+ sudo cp libgs_plugin_example.so `pkg-config gnome-software --variable=plugindir`
+ */
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "appstream");
+}
+
+gboolean
+gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint i;
+ for (i = 0; values[i] != NULL; i++) {
+ if (g_strcmp0 (values[i], "fotoshop") == 0) {
+ g_autoptr(GsApp) app = gs_app_new ("gimp.desktop");
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ }
+ }
+ return TRUE;
+}
diff --git a/data/appdata/meson.build b/data/appdata/meson.build
new file mode 100644
index 0000000..b3e908b
--- /dev/null
+++ b/data/appdata/meson.build
@@ -0,0 +1,8 @@
+i18n.merge_file(
+ input: 'org.gnome.Software.appdata.xml.in',
+ output: 'org.gnome.Software.appdata.xml',
+ type: 'xml',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'metainfo')
+)
diff --git a/data/appdata/org.gnome.Software.appdata.xml.in b/data/appdata/org.gnome.Software.appdata.xml.in
new file mode 100644
index 0000000..ae67766
--- /dev/null
+++ b/data/appdata/org.gnome.Software.appdata.xml.in
@@ -0,0 +1,1559 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2013-2016 Richard Hughes <richard@hughsie.com> -->
+<component type="desktop">
+ <id>org.gnome.Software.desktop</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>GNOME Software</name>
+ <summary>Application manager for GNOME</summary>
+ <description>
+ <p>
+ Software allows you to find and install new applications and system
+ extensions and remove existing installed applications.
+ </p>
+ <p>
+ GNOME Software showcases featured and popular applications with useful
+ descriptions and multiple screenshots per application.
+ Applications can be found either through browsing the list of categories
+ or by searching.
+ It also allows you to update your system using an offline update.
+ </p>
+ </description>
+ <screenshots>
+ <screenshot height="675" width="1200" type="default">
+ <image>https://git.gnome.org/browse/gnome-software/plain/data/appdata/ss-overview.png</image>
+ <caption>Overview panel</caption>
+ </screenshot>
+ <screenshot height="675" width="1200">
+ <image>https://git.gnome.org/browse/gnome-software/plain/data/appdata/ss-details.png</image>
+ <caption>Details panel</caption>
+ </screenshot>
+ <screenshot height="675" width="1200">
+ <image>https://git.gnome.org/browse/gnome-software/plain/data/appdata/ss-installed.png</image>
+ <caption>Installed panel</caption>
+ </screenshot>
+ <screenshot height="675" width="1200">
+ <image>https://git.gnome.org/browse/gnome-software/plain/data/appdata/ss-updates.png</image>
+ <caption>Updates panel</caption>
+ </screenshot>
+ <screenshot height="675" width="1200">
+ <image>https://git.gnome.org/browse/gnome-software/plain/data/appdata/ss-updates-details.png</image>
+ <caption>The update details</caption>
+ </screenshot>
+ </screenshots>
+
+ <!--
+ Validate with `appstream-util validate *.appdata.xml`
+ -->
+ <releases>
+ <release date="2020-02-08" version="3.38.1">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Fix package details not found for some packages</li>
+ <li>Ignore harmless warnings when using unusual fwupd versions</li>
+ </ul>
+ <p>This release also updates existing translations.</p>
+ </description>
+ </release>
+ <release date="2020-09-11" version="3.38.0">
+ <description>
+ <p>
+ This is an stable release that just updates existing translations.
+ </p>
+ </description>
+ </release>
+ <release date="2020-09-01" version="3.37.92">
+ <description>
+ <p>
+ This is an unstable release with the following changes:
+ </p>
+ <ul>
+ <li>Add sysprof support for profiling jobs</li>
+ <li>Add webflow and basic auth support to flatpak plugin</li>
+ <li>Coalesce refresh operations where possible</li>
+ <li>Correctly mark layered rpm-ostree local packages as removable</li>
+ <li>Fix flatpak bundle installation</li>
+ <li>Handle invalid snap auth data</li>
+ <li>Improve flatpak progress reporting for transactions</li>
+ <li>Improve the heuristic for detecting old-style AppStream override files</li>
+ <li>Many performance improvements in many areas of the code</li>
+ <li>Only delete the firmware archive if we downloaded it to the cache</li>
+ <li>Show a pulsing progress bar if progress is unknown</li>
+ <li>Support loading appstream files from custom install prefix</li>
+ <li>Use the runtime fwupd version for the user agent</li>
+ </ul>
+ <p>This release also updates existing translations.</p>
+ </description>
+ </release>
+ <release date="2020-03-11" version="3.36.0">
+ <description>
+ <p>
+ This is the first stable release for GNOME 3.36.
+ </p>
+ </description>
+ </release>
+ <release date="2020-03-04" version="3.35.92">
+ <description>
+ <p>
+ This is an unstable stable release with the following changes:
+ </p>
+ <ul>
+ <li>Fix crash when viewing application details</li>
+ <li>Fix “thrice daily” check running every 3 days</li>
+ <li>Improve the appearance of the front page banners</li>
+ <li>Show the correct upgrade banner contents when a reboot is requried</li>
+ </ul>
+ <p>This release also updates existing translations.</p>
+ </description>
+ </release>
+ <release date="2020-02-19" version="3.35.91">
+ <description>
+ <p>
+ This is an unstable stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add an info bar about automatic updates</li>
+ <li>Avoid rpm-ostree downgrade error when doing distro upgrade</li>
+ <li>Click on stars to open review dialog in the details view</li>
+ <li>Fix loading of icons from AppStream YAML</li>
+ <li>Fix weird font sizes in the batter</li>
+ <li>Hide any in-app notifications when closing the main window</li>
+ <li>Integrate better with snapd</li>
+ <li>Only ignore flatpak estimated progress if >10%</li>
+ <li>Remove color stripes on categories in the Explore page</li>
+ <li>Remove support for Shell extensions</li>
+ <li>Remove webapp support</li>
+ <li>Reset star rating when loading an unrated app</li>
+ <li>Sort applications using locale based algorithms</li>
+ <li>Stop snaps from being automatically updated</li>
+ </ul>
+ <p>This release also adds and updates existing translations.</p>
+ </description>
+ </release>
+ <release date="2019-11-25" version="3.35.2">
+ <description>
+ <p>
+ This is an unstable stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add missing OARS content rating descriptions</li>
+ <li>Add new plugin for restricting access to apps</li>
+ <li>Avoid a UI crash when switching modes</li>
+ <li>Build libmalcontent dependency on Fedora CI</li>
+ <li>Correctly distinguish empty content ratings from missing ones</li>
+ <li>Correctly set the application state if autoupdate is in progress</li>
+ <li>Do not show a crazy error when installing packages</li>
+ <li>Do not show non-applications in the installed panel</li>
+ <li>Download Flatpak updates in the correct installation</li>
+ <li>Expose snap channels as app alternates</li>
+ <li>Fix a crash on 32-bit systems</li>
+ <li>Fix langpacks autoinstall on Fedora SilverBlue</li>
+ <li>Fix manual detach when updating removable device firmware</li>
+ <li>Fix third party repo enabling not working</li>
+ <li>Hide add/remove shortcut buttons for parentally filtered apps</li>
+ <li>Improve some front page banners</li>
+ <li>Invalidate caches when adding or removing remotes</li>
+ <li>Make flatpak more thread-safe to fix some crashes</li>
+ <li>Match the exact ID when refining a wildcard</li>
+ <li>Only set the app row's buttons as destructive when they remove an app</li>
+ <li>Remove hardcoded-featured plugin</li>
+ <li>Remove the app folder functionality as this is now built-in to the shell</li>
+ <li>Remove the banner editor as this is now an app on it's own</li>
+ <li>Rework age ratings handling to avoid hard-coded list</li>
+ <li>Set the shell extension origin correctly in all cases</li>
+ <li>Show the channel for snaps</li>
+ <li>Speed up the flatpak plugin in some situations</li>
+ <li>Use plugin API to launch apps from install notification.</li>
+ </ul>
+ <p>This release also adds and updates existing translations.</p>
+ </description>
+ </release>
+ <release date="2019-09-09" version="3.34.0">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add a link to the privacy policy in the review dialog</li>
+ <li>Add and improve many overview banners</li>
+ <li>Add support for download scheduling using Mogwai</li>
+ <li>Allow installing locale data automatically</li>
+ <li>Allow snaps to be shown by AppStream ID</li>
+ <li>Don't apply drop shadow on stock symbolic icons</li>
+ <li>Don't install queued apps when the network changes and is metered</li>
+ <li>Fix the 'localised in my language' kudo</li>
+ <li>Hide addons that are not available in repos</li>
+ <li>Localize ESRB content rating strings</li>
+ <li>Never show the installation progress bar going backwards</li>
+ <li>Notify the user when an application can escape the sandbox</li>
+ <li>Refactor screenshots and hide those unavailable when offline</li>
+ <li>Select the rating systems selected based by territory</li>
+ <li>Use smaller default size for main window when required</li>
+ </ul>
+ <p>This release also adds and updates existing translations.</p>
+ </description>
+ </release>
+ <release date="2019-07-11" version="3.32.4">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Fix an issue that led to some packages with multiple appdata files not correctly showing up on the updates page</li>
+ <li>Fix various problems with flatpak branch handling that were causing issues with freedesktop.org runtime updates</li>
+ <li>Fix flatpak update versions to correctly show up</li>
+ <li>Various other minor bug fixes</li>
+ </ul>
+ </description>
+ </release>
+ <release date="2019-05-24" version="3.32.3">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add missing XbSilo locking, hopefully fixing a large number of reported crashes</li>
+ <li>Fix a regression that caused the fonts category to go missing</li>
+ <li>Show a placeholder on the details page when we don't have the actual icon</li>
+ <li>Plug a large memory leak</li>
+ <li>Use nicer arrows for version numbers on the updates page</li>
+ <li>Fix an issue that led to screenshots not being correctly scaled on hidpi</li>
+ <li>flatpak: Fix several double-uses of GErrors</li>
+ <li>flatpak: Handle failure of a libflatpak function updating permissions</li>
+ <li>rpm-ostree: Implement what-provides decompose</li>
+ </ul>
+ </description>
+ </release>
+ <release date="2019-05-07" version="3.32.2">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Avoid showing a review more than once</li>
+ <li>Correctly update progress bar when downloading packagekit distro upgrades</li>
+ <li>Fix a crash when closing the updates dialog before the content has loaded</li>
+ <li>Fix CTRL+F not working right in certains conditions</li>
+ <li>Set 022 umask to make sure flatpak system helper process can read the files we've written</li>
+ <li>rpm-ostree: Implement getting the repo list, and enabling and disabling repos</li>
+ <li>rpm-ostree: Implement provides search</li>
+ <li>rpm-ostree: Make layered apps not discoverable in the UI</li>
+ <li>Various other minor bug fixes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2019-04-15" version="3.32.1">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add drop shadows to app icons</li>
+ <li>Various fixes to initial loading screen</li>
+ <li>Show a generic icon instead of empty space if we failed to load the app icon</li>
+ <li>Update featured banners for Maps and Blender</li>
+ <li>Update featured app IDs</li>
+ <li>Fix a crash due to missing locking</li>
+ <li>Fix missing back button under certain conditions</li>
+ <li>Fix loading AppSteam data from .yml.gz files</li>
+ <li>Fix an issue that caused flatpak repo to not be correctly shown when it matched an existing packagekit repo name</li>
+ <li>Hide the fwupd Vendor repo in the repos dialog</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2019-03-11" version="3.32.0">
+ <description>
+ <p>
+ This is the first stable release for GNOME 3.32. Notable changes compared to 3.30 include:
+ </p>
+ <ul>
+ <li>Appstream parsing is completely rewritten and now uses the new libxmlb library, instead of appstream-glib</li>
+ <li>Improved handling for apps that are available from multiple sources, e.g. as a flatpak from Flathub, as a flatpak from Fedora, and as an RPM package</li>
+ <li>New source selection drop down on the details pages</li>
+ <li>Flatpak apps now list the permissions they need on the details pages, and also show new permissions when updating</li>
+ <li>The flatpak backend received a large number of bug fixes</li>
+ <li>The rpm-ostree backend has grown many new features and bug fixes, including support for installing layered packages and doing distro upgrades</li>
+ <li>Numerous fixes for error reporting, including making error messages more useful and avoiding showing network errors from background operations</li>
+ <li>The items in the app menu were all moved to the window menu</li>
+ <li>New redesigned icon</li>
+ </ul>
+ </description>
+ </release>
+ <release date="2019-03-05" version="3.31.92">
+ <description>
+ <p>
+ This is an unstable release in the 3.31 development series,
+ marking the end of the development cycle. Next release will be 3.32.0!
+ </p>
+ <ul>
+ <li>Add two missing description strings for flatpak permissions</li>
+ <li>Only show permissions for flatpak apps and not for e.g. fonts</li>
+ <li>Fix flatpak permissions to correctly show up for available apps</li>
+ <li>Hide various details page items that don't make sense when showing .flatpakrepo files</li>
+ <li>Fix an issue that caused descriptions to sometimes not get correctly loaded</li>
+ <li>Sort the items in the Source drop down</li>
+ <li>Don't show error notifications for background download and refresh errors</li>
+ <li>Fix an issue that could cause an explosion of "A restart is required" notifications</li>
+ <li>Various flatpak plugin fixes to make it correctly match the data when multiple flatpak repos are available</li>
+ <li>Fix the rpm-ostree plugin to correctly convert remote dbus errors</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2019-02-24" version="3.31.90">
+ <description>
+ <p>
+ This is an unstable release in the 3.31 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Fix showing the installed check mark on tiles</li>
+ <li>Fix crashes in the packagekit plugin due to missing locking</li>
+ <li>Add back support for appstream data in /var/{cache,lib}/app-info directories that accidentally got left out with the libxmlb rewrite</li>
+ <li>Update the featured banner for gnome-chess</li>
+ <li>Fix the details page alignment when only one screenshot is shown</li>
+ <li>Move the Update button to the right hand side on the details page</li>
+ <li>Fix enabling repos when installing codecs through the extras page</li>
+ <li>Remove the Sundry folder and sync the apps in the Utilities folder with gnome-menus 3.31.90</li>
+ <li>Improve various content rating texts</li>
+ <li>Drop workarounds for locales with codesets</li>
+ <li>Use the currently selected icon theme for stock icons</li>
+ <li>Don't hide compulsory apps in the category views</li>
+ <li>Use the SPDX-License-Identifier in all source files</li>
+ <li>Remove various useless error prefixes, making flatpak and packagekit error messages shorter and easier to read</li>
+ <li>flatpak: Show the installation type (user, system) in the Source dropdown</li>
+ <li>flatpak: Let apps control the name suffix/prefix they have and don't force (Nightly) suffix for everything on the master branch</li>
+ <li>flatpak: Various fixes for matching flatpaks to appstream entries</li>
+ <li>flatpak: Distinguish between the same app coming from multiple remotes</li>
+ <li>rpm-ostree: Correctly resolve installed appdata files to package names</li>
+ <li>rpm-ostree: Hook up percentage progress for install and remove</li>
+ <li>rpm-ostree: Implement layered package install</li>
+ <li>rpm-ostree: Implement locally downloaded rpm install</li>
+ <li>rpm-ostree: Show the source of the packages when installing layered packages</li>
+ <li>rpm-ostree: Various fixes making things more robust</li>
+ <li>snap: Use new media API</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2019-01-16" version="3.31.2">
+ <description>
+ <p>
+ This is an unstable release in the 3.31 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Show permissions for installed flatpaks, and new permissions for updates</li>
+ <li>Use libxmlb to parse AppStream XML, making gnome-software start up faster and use less memory</li>
+ <li>Update the app icon</li>
+ <li>Update categories for ESRA rating system</li>
+ <li>Improve various error messages to have more details</li>
+ <li>Fix an issue that caused incorrect version numbers to be shown for installed flatpaks</li>
+ <li>Fix various thread safety related crashes</li>
+ <li>Fix row unrevealing to not leave behind 2 pixels on the updates page</li>
+ <li>Make the refresh button to actually refresh packagekit cache</li>
+ <li>Fix various issues that could lead to cache refresh getting stuck</li>
+ <li>Show updates available notifications even when automatic updates are disabled</li>
+ <li>Fix counting apps in the updates applied notification</li>
+ <li>Improve packagekit update loading code, hopefully making it more robust</li>
+ <li>Fix an issue that could lead to the packagekit plugin activating on rpm-ostree based systems</li>
+ <li>Switch flatpak updates to use a single transaction, which lets us share more code (and bugs) with the command line flatpak utility</li>
+ <li>Fix various issues with transitioning from the "Download" state to "Restart &amp; Update"</li>
+ <li>Don't error out from update downloads if the ODRS server is unavailable</li>
+ <li>Fix old updates accumulating in the OS Updates item</li>
+ <li>Various flatpakref installation fixes</li>
+ <li>Fix opening the details page when clicking on "Show Details" in GNOME Shell</li>
+ <li>Fix opening shell extensions details from GNOME Tweaks</li>
+ <li>Various fixes for initial loading state</li>
+ <li>Add a separate "Download" step for packagekit offline updates, so that "Restart &amp; Update" is instant</li>
+ <li>Fix a version comparison issue that led to package updates sometimes showing as downgrades in the OS Updates section (this needs latest appstream-glib)</li>
+ <li>Show the refresh button when the updates page is in the failed state</li>
+ <li>Notify about offline updates only after they are fully downloaded</li>
+ <li>Fix a memory corruption issue on 32-bit arches that made gnome-software very crashy</li>
+ <li>Fix an issue with stuck back button on the details page after closing and reopening gnome-software</li>
+ <li>Make distro upgrades to Fedora N+2 release show up correctly</li>
+ <li>Various flatpak plugin fixes</li>
+ <li>Allow opening CAB files that include more than one update</li>
+ <li>Fix critical warnings when quickly switching between category pages</li>
+ <li>Small memory leak fixes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-10-09" version="3.31.1">
+ <description>
+ <p>
+ This is an unstable release in the 3.31 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Icon redesign</li>
+ <li>Switch to using window menus instead of app menu</li>
+ <li>Add a source selection drop down to details pages</li>
+ <li>Move the search button to the left side in the header bar</li>
+ <li>Various other minor UI tweaks</li>
+ <li>GtkBuilder UI file changes to pave the way for an eventual GTK4 port (please file issues for any UI layout regressions if you notice any!)</li>
+ <li>Various internal plugin loader fixes and cleanups</li>
+ <li>Remove the steam plugin</li>
+ <li>Simplify the details page loading</li>
+ <li>Fix an issue that caused icons to not get loaded for locally installed flatpaks</li>
+ <li>Update Fedora distro upgrades text</li>
+ <li>Avoid a critical warning in the fwupd plugin when the device vendor is not set</li>
+ <li>Show verified developers for snaps</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-10-05" version="3.30.2">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Localize the polkit policy file</li>
+ <li>Display ongoing app-installation at top of the list</li>
+ <li>Update apps in display order</li>
+ <li>Fix autoupdates triggering in a feedback loop</li>
+ <li>Tweak the prefs dialog layout</li>
+ <li>Various fixes to the flatpak plugin, making its state keeping more robust</li>
+ <li>Fix flatpak errors to show up instead of a generic "Aborted" error</li>
+ <li>Avoid triggering reboots for online updatable apps (flatpak)</li>
+ <li>Make rpm-ostree updates work again</li>
+ <li>Fix an issue that caused duplicate lines in 'OS Updates' on rpm-ostree based systems</li>
+ <li>Compiler warning fixes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-09-25" version="3.30.1">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Fix an issue that caused duplicate lines in 'OS Updates'</li>
+ <li>Filter the application restart notification to actual desktop apps</li>
+ <li>Fix an issue that caused automatic updates to fail during download phase</li>
+ <li>Avoid showing duplicates in the featured apps when an app is available as both flatpak and a package</li>
+ <li>Fix an issue that caused gnome-software to use 100% of CPU when doing automatic updates</li>
+ <li>Lower IO priority for gnome-software so that other apps stay responsive during flatpak installs</li>
+ <li>Various fixes and wording changes to automatic updates notifications</li>
+ <li>Only show "Examine Disk" button when baobab is available</li>
+ <li>Leak and correctness fixes in the snap plugin</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-09-04" version="3.30.0">
+ <description>
+ <p>
+ This is the first stable release for GNOME 3.30.
+ </p>
+ </description>
+ </release>
+ <release date="2018-08-28" version="3.29.92">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Do not go 'back' to a previous application details panel</li>
+ <li>Don't crash if when getting the fwupd locked status</li>
+ <li>Download updates automatically when required</li>
+ <li>Fix dark theme support</li>
+ <li>Hide screenshot and support widgets when no screenshots</li>
+ <li>Ignore non-interactive generic errors</li>
+ <li>Implement distro upgrade downloading when using rpm-ostree</li>
+ <li>Only update the update check timestamp when it succeeds</li>
+ <li>Open the WiFi panel when clicking the Network Settings button</li>
+ <li>Rotate featured apps on the overview page</li>
+ <li>Simplify the updates panel</li>
+ <li>Use FlatpakTransaction to install, remove and update</li>
+ <li>Use new display name for the Snap publisher</li>
+ <li>Use the full name for the ESRB ratings descripion</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-03-05" version="3.29.1">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Show a better notification when a local file or URI is not supported</li>
+ <li>snap: Use ODRS for reviews</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-05-09" version="3.28.2">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add a warning when enabling the LVFS remote</li>
+ <li>Show a notification when failing to open an url or a local file</li>
+ <li>Fix multiple flatpak refreshes with new libflatpak</li>
+ <li>Build fixes for FreeBSD</li>
+ <li>Icon loading fixes for snap</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-04-09" version="3.28.1">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Fix a regression with opening results from gnome-shell search</li>
+ <li>Show "Source: " tag in gnome-shell search when we have multiple matches</li>
+ <li>Improve unknown license tag color scheme on details page</li>
+ <li>Don't show installed icon on app tiles while still installing</li>
+ <li>Fix empty items appearing under OS Updates</li>
+ <li>Fix a regression that caused duplicate results in codec search</li>
+ <li>Fix an issue with passing username/password to packagekit proxy</li>
+ <li>Avoid crashing during first run with no network access</li>
+ <li>A number of rpm-ostree fixes, making it possible to trigger offline updates</li>
+ <li>Stop searching multiple times on search page</li>
+ <li>Update Fedora third party repositories "Find out more..." link</li>
+ <li>Fix an issue with in-app notifications failing with invalid markup errors</li>
+ <li>Improve purchase failure handling for the snap store</li>
+ <li>Fix a possible crash in snap plugin when adding screenshots</li>
+ <li>Various other crash and correctness fixes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-03-12" version="3.28.0">
+ <description>
+ <p>
+ This is the first stable release for GNOME 3.28,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Fix the build on NixOS</li>
+ <li>Fix purchasing not working after authentication</li>
+ <li>Revert a commit that led to flatpak updates failing without any feedback</li>
+ <li>Make front page featured tile corners round to match other tiles</li>
+ <li>Fix in-app notification close button alignment</li>
+ <li>Several fixes to make error notifications more useful</li>
+ <li>snap: Fix invalid metadata after cancelled refine</li>
+ <li>snap: Launch command line snaps with 'snap run'</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-03-05" version="3.27.92">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ marking the end of the development cycle. Next release will be 3.28.0!
+ </p>
+ <ul>
+ <li>Removal of global plugin cache, simplifying gnome-software internals</li>
+ <li>Software Repositories dialog got another batch of improvements and UI changes</li>
+ <li>GNOME Shell Extensions repository and fwupd repositories are now shown in the Software Repositories dialog</li>
+ <li>Shell extensions handling through PackageKit was improved, fixing a long standing bug where we were unable to remove shell extension packages</li>
+ <li>Category page rewrite that landed earlier this cycle went through UI review and got a number of fixes</li>
+ <li>Package version comparison in the updates dialog was fixed and should no longer incorrectly show updates as downgrades</li>
+ <li>Distro upgrade notifications are now rate limited to once per week</li>
+ <li>Install buttons in codec install view that got lost in the 3.22 cycle are now back</li>
+ <li>Various paper cuts with distro upgrades were fixed</li>
+ <li>Various fixes to installing apps from yum repos that have enabled=0 enabled_metadata=1</li>
+ <li>Various other correctness and warning fixes</li>
+ <li>Distros: Minimum supported fwupd version is now 1.0.3</li>
+ <li>Distros: We've released PackageKit 1.1.9 that has string changes to match gnome-software 3.28</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-02-14" version="3.27.90">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>The Software Sources dialog was renamed to Software Repositories and rewritten</li>
+ <li>Fedora Workstation third party repository handling was rewritten and should be more robust</li>
+ <li>Improved handling of metered network connections, making sure we cancel any downloads when changing to a metered connection</li>
+ <li>Limit the number of parallel operations depending on the installed CPU</li>
+ <li>Improved handling of pending installs when there's no network connection</li>
+ <li>Unused ostree and rpm plugins were dropped</li>
+ <li>Switch from GtkSpell to gspell</li>
+ <li>Improve alignment on the updates page</li>
+ <li>Do not show missing screenshot error for fonts that have screenshots</li>
+ <li>Fix various issues on Ubuntu when purchasing apps</li>
+ <li>Fix an issue that led to duplicate categories appearing on the overview page</li>
+ <li>Various memory leak and correctness fixes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2018-01-08" version="3.27.4">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add missing locking to gs_plugin_cache_remove(), fixing a possible crash</li>
+ <li>Fix various memory leaks spotted by valgrind</li>
+ <li>Fix a possible crash triggered by the fwupd plugin</li>
+ <li>Do not emit critical warnings when reviewing OS Updates</li>
+ <li>fwupd: Use the custom user-agent when downloading firmware</li>
+ <li>overview page: Fix a crash when we have no featured apps</li>
+ <li>packagekit: Implement repository enabling</li>
+ <li>Fix hover CSS for "unknown" and "nonfree" license buttons</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-11-13" version="3.27.3">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Fix crashes in the repos plugin due to missing locking</li>
+ <li>Add translated strings for the new OARS v1.1 additions</li>
+ <li>Work around Firefox deleting rpm/deb files downloaded to /tmp when closing</li>
+ <li>Log errors to console when starting from command line</li>
+ <li>Do not enable distro-upgrades when updates are disabled</li>
+ <li>Do not require the user to keep clicking 'More reviews' after each click</li>
+ <li>Fix a critical when updating (flatpak) packages live</li>
+ <li>fwupd: Do not crash when trying to list a locked device</li>
+ <li>fwupd: Prepend the vendor name to the device name if not included</li>
+ <li>Improve SPDX ID parsing when working out if it is 'free'</li>
+ <li>packagekit: Do not crash when getting an invalid ID from PackageKit</li>
+ <li>packagekit: Support apt:// URLs</li>
+ <li>Various fixes to the snap plugin</li>
+ <li>Do not crash when closing the source dialog while it is loading</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-11-13" version="3.27.2">
+ <description>
+ <p>
+ This is an unstable release in the 3.27 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Redesigned category view</li>
+ <li>Better notifications for completed distro upgrades</li>
+ <li>Number of test suite fixes to pave way for continuous integration tests</li>
+ <li>Improved support for running on low res displays</li>
+ <li>Various fixes to internal state handling</li>
+ <li>Allow linking to specified proprietary licenses</li>
+ <li>Don't use versioned subdirectories under ~/.cache/gnome-software</li>
+ <li>Only show in-app notifications for interactive user actions</li>
+ <li>Various fixes for flatpak, fwupd, and snap support</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-11-09" version="3.26.2">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Various fixes to cancellable handling, making it more robust to cancel install/remove operations</li>
+ <li>Fix a common crash in Fedora distro upgrades plugin</li>
+ <li>Fix showing N+2 Fedora upgrades</li>
+ <li>Fix flatpak updates inadvertently triggering a reboot</li>
+ <li>Revert plugin GType registering changes that broke app "adopting"</li>
+ <li>Various flatpak plugin fixes</li>
+ <li>Various snap plugin fixes</li>
+ <li>Bump fwupd required dep to 0.9.7 and support building with new 1.0.0 API</li>
+ <li>Avoid erroring out for operations that return more than 500 results (distro upgrades, getting gnome-shell extensions list)</li>
+ <li>Fix a few memory leaks</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-10-02" version="3.26.1">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Fix memory leak in "external appstream" plugin</li>
+ <li>Don't translate an icon name in the Punjabi translation</li>
+ <li>Fix critical warning in the fwupd plugin if the update URI isn't set</li>
+ <li>Fix Addon categories not showing</li>
+ <li>Fix crash in PackageKit plugin if reporting progress with no current application</li>
+ <li>Revert a change in the snapd plugin which can cause operations to fail or hang in some situations</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-09-11" version="3.26.0">
+ <description>
+ <p>
+ This is the first stable release for GNOME 3.26,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Use the new fwupd API in 0.9.7 to avoid when a reboot is required</li>
+ <li>Pass the complete proxy settings to PackageKit</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Do not crash when emitting an uncommon error message</li>
+ <li>Do not show a critical warning with new versions of fwupd</li>
+ <li>Do not show an error for a remote-less flatpakref application</li>
+ <li>Don't refine PackageKit packages after we've been cancelled</li>
+ <li>Fix a possible crash on 32 bit systems</li>
+ <li>Fix GNOME Shell search results for snap applications</li>
+ <li>Properly disable shell-extensions when not running GNOME Shell</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-08-21" version="3.25.91">
+ <description>
+ <p>
+ This is an unstable release in the 3.25 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a simple donation button on the details page</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Allow plugins to say that installation cannot be cancelled</li>
+ <li>Fix displaying the info bar for the Shell Extensions category</li>
+ <li>Use first featured snap as the featured app</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-08-07" version="3.25.90">
+ <description>
+ <p>
+ This is an unstable release in the 3.25 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a simple donation button on the details page</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Do not crash if the child schema is invalid</li>
+ <li>Don't log a warning when clicking the the 'more results' search entry</li>
+ <li>Fixed subcategory names localization</li>
+ <li>Ensure flatpak remote names are valid</li>
+ <li>Fix critical warning with new versions of the fwupd daemon</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-07-21" version="3.25.4">
+ <description>
+ <p>
+ This is an unstable release in the 3.25 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add new rpm-ostree integration for Fedora Atomic Workstation</li>
+ <li>Install the Flatpak runtime as part of the application install phase</li>
+ <li>Split OS updates up into multiple sections and show the target version</li>
+ <li>Support compatibility IDs when getting reviews from the ODRS</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Cancel plugin jobs if they take too much time</li>
+ <li>Correctly find already installed flatpak runtimes</li>
+ <li>Do not show an error for a flatpakref when broken remotes exist</li>
+ <li>Don't show the screenshot section for runtimes</li>
+ <li>Fix authentication prompt not showing when using snapd</li>
+ <li>Make license buttons buttons actually look clickable</li>
+ <li>Make the review moderator panel easier to use</li>
+ <li>Only show snaps as sandboxed if snapd supports confinement</li>
+ <li>Respect the per-user or per-system install preferences</li>
+ <li>Return the correct installed state for user/system flatpak remotes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-06-22" version="3.25.3">
+ <description>
+ <p>
+ This is an unstable release in the 3.25 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a banner designer utility</li>
+ <li>Add the initial support to support purchasable apps</li>
+ <li>Automatically install flatpak icon themes and GTK themes</li>
+ <li>Restyle the updates panel to have a separate sections</li>
+ <li>Show a notification in the updates page when the OS is end of life</li>
+ <li>Show recently updated applications on the overview page</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Add snap self tests and provide more data to the details panel</li>
+ <li>Allow compiling with newer versions of meson</li>
+ <li>Do not crash when sending progress reports while refreshing</li>
+ <li>Don't trigger systemd for every single offline update</li>
+ <li>Ensure all related flatpak applications get installed</li>
+ <li>Ensure we use the gnome-desktop support if enabled</li>
+ <li>Fix searching for codecs on Ubuntu</li>
+ <li>Show a better status messages when downloading metadata</li>
+ <li>Show a pulsing progressbar if plugins do not report progress</li>
+ <li>Show the PackageKit interactive dialog when required</li>
+ <li>Support updating metadata from multiple fwupd remotes</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-05-08" version="3.25.2">
+ <description>
+ <p>
+ This is an unstable release in the 3.25 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Allow AppStream to be downloaded out-of-band per-user</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Do not initialize plugins in every instance</li>
+ <li>Fix the 'Show Details' context menu item in GNOME Shell</li>
+ <li>Use headerbar in toolbar-mode in Unity</li>
+ <li>Do not allow plugins to set the origin title in the UI</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-04-28" version="3.25.1">
+ <description>
+ <p>
+ This is an unstable release in the 3.25 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Truncate the search results if there are a large number</li>
+ <li>Use the complete source as a search keyword</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Fall back to a stock icon for hardware drivers</li>
+ <li>Fix a crash when removing an addon</li>
+ <li>Fix a critical warning in the shell search provider</li>
+ <li>Fix popular-overrides to show the correct applications</li>
+ <li>Fix various failures to read from snapd</li>
+ <li>Make offline updates work when online updates are available</li>
+ <li>Never include the size of the runtime in the installed size</li>
+ <li>Respect the install preference when for flatpakref files</li>
+ <li>Use the developer name in preference to the project group</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-03-13" version="3.23.92">
+ <description>
+ <p>
+ This is an unstable release in the 3.23 development series,
+ with the following bug fixes:
+ </p>
+ <ul>
+ <li>Allow installing broken flatpakref files</li>
+ <li>Do not reload the updates list when updates are in progress</li>
+ <li>Reset the headerbar title when switching to the details page</li>
+ <li>Unconditionally show things that are in progress in the Installed page</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-02-27" version="3.23.91">
+ <description>
+ <p>
+ This is an unstable release in the 3.23 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add support for RuntimeRepo in flatpakref files</li>
+ <li>Allow the user to restart the currently running gnome-software instance</li>
+ <li>Never show components without AppData files</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Initialize progress to zero right before and after processing an action</li>
+ <li>Animate the removal of live updates</li>
+ <li>Add YaST as a default folder in gnome-shell overview</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2017-02-13" version="3.23.90">
+ <description>
+ <p>
+ This is an unstable release in the 3.23 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Handle apt and snap URLs</li>
+ <li>Show the updates panel with sections</li>
+ <li>Sort the apps in the installed panel by kind</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Add a more detailed error message when AC power is required</li>
+ <li>Do not hardcode the gnome-software application name</li>
+ <li>Ensure firmware is downloaded when not cached</li>
+ <li>Fix a rather large memory leak when loading Steam data</li>
+ <li>Fix launching Flatpak apps after updating</li>
+ <li>Install needed Flatpak runtimes when updating an app</li>
+ <li>Only show the scary firmware warning for removable devices</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2016-12-15" version="3.23.3">
+ <description>
+ <p>
+ This is an unstable release in the 3.23 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add an --install and --interaction CLI options</li>
+ <li>Add the installed size of the apps in the installed view</li>
+ <li>Always set a description for each notification</li>
+ <li>Show an in-app notification when installed plugins are changed</li>
+ <li>Use a set of stars to show the different star ratings</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Add a missing error check to fix a common crash on LiveDVD media</li>
+ <li>Add thread locking in GsApp to fix some common crashes</li>
+ <li>Allow upgrading to Fedora EOL releases</li>
+ <li>Don't allow review actions when offline</li>
+ <li>Ensure we actually schedule firmware updates for download</li>
+ <li>Fix the getting of PackageKit and flatpak update details</li>
+ <li>Hide some notifications when the new app is launched or the window is closed</li>
+ <li>Hide the screenshot placeholder for input methods and langpacks</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2016-11-21" version="3.23.2">
+ <description>
+ <p>
+ This is an unstable release in the 3.23 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a setting for downloading updates on metered connections</li>
+ <li>Add content rating interface for games</li>
+ <li>Add support for pending updates that are applied on demand</li>
+ <li>Add support for the flatpak DefaultBranch feature</li>
+ <li>Allow showing an application review without a display name</li>
+ <li>Convert the modal failure dialogs to in-app notifications</li>
+ <li>Switch to using the ODRS server hosted by GNOME</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Always get the newest screenshot for GNOME Shell extensions</li>
+ <li>Avoid redownloading the same screenshots for different images</li>
+ <li>Don't download updates when low on power</li>
+ <li>Fix the growth in memory usage for every search request</li>
+ <li>Never show a 'back' button when showing search results</li>
+ <li>Show the search bar when the user does ctrl+f</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2016-11-07" version="3.22.2">
+ <description>
+ <p>This stable release fixes the following bugs:</p>
+ <ul>
+ <li>Large number of fixes and improvements for flatpak support</li>
+ <li>Improved handling for flatpak repos with multiple branches</li>
+ <li>Initial support for installing flatpakrepo files</li>
+ <li>Fix a crash when searching for codecs</li>
+ <li>Fix a crash when de-duplicating applications</li>
+ <li>Speed improvements for loading appstream data</li>
+ <li>Refactor snapd handling code using snapd-glib</li>
+ <li>Show the search bar when the user does Ctrl+f</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2016-10-12" version="3.22.1">
+ <description>
+ <p>This stable release fixes the following bugs:</p>
+ <ul>
+ <li>Fix several issues with flatpak bundles</li>
+ <li>Fix installing local packages</li>
+ <li>Fix a crash when failing to get an installed flatpak ref</li>
+ <li>Speed up loading the details and overview pages</li>
+ <li>Switch to using the ODRS server hosted by GNOME</li>
+ </ul>
+ <p>This release also updates translations.</p>
+ </description>
+ </release>
+ <release date="2016-09-19" version="3.22.0">
+ <description>
+ <p>
+ This is the first stable release for GNOME 3.22 and updates several
+ translations.
+ </p>
+ </description>
+ </release>
+ <release date="2016-09-13" version="3.21.92">
+ <description>
+ <p>
+ This is an unstable release in the 3.21 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a new section name in the Addons category for drivers</li>
+ <li>Add a plugin to match a hardware modalias</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Do not hide the origin when installing or removing an app</li>
+ <li>Do not show the screenshot fallback image for firmware or drivers</li>
+ <li>Fix launching app's details from the installed notification</li>
+ <li>Fix showing the source line in the installed panel</li>
+ <li>Unbreak the GNOME Shell search provider</li>
+ <li>Use the same padding as a GtkStackSwitcher</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-08-31" version="3.21.91">
+ <description>
+ <p>
+ This is an unstable release in the 3.21 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add functionality to enable non-free sources</li>
+ <li>Show the device bootloader screenshot when required</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Always return consistent results by allowing plugins to share a cache</li>
+ <li>Ensure the search text is showing when going back to search results</li>
+ <li>Only enable the firmware 'Install' button when the device is in the right mode</li>
+ <li>Remove an app from the installed view when it's uninstalled</li>
+ <li>Show percentage progress when installing firmware</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-08-15" version="3.21.90">
+ <description>
+ <p>
+ This is an unstable release in the 3.21 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Limit the ODRS moderation queue to a specific language</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Correctly load .flatpakrepo files</li>
+ <li>Don't get the download size for installed flatpak packages</li>
+ <li>Fix showing the progress bar when installing apps</li>
+ <li>Never try to modify the application name</li>
+ <li>Only notify about upgrades once per month</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-07-18" version="3.21.4">
+ <description>
+ <p>
+ This is an unstable release in the 3.21 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a cancel button and progress information to the details page</li>
+ <li>Add a dialog to confirm upgrade removals</li>
+ <li>Add support for authenticating in plugins</li>
+ <li>Add support for snaps</li>
+ <li>Enable gtk-doc generation for documentation</li>
+ <li>Show a new-style category list on the overview page</li>
+ <li>Show origin information when applications are available from multiple sources</li>
+ <li>Show sandboxing information for selected applications</li>
+ <li>Show the star ratings in more places</li>
+ <li>Support installing .flatpakrepo files</li>
+ <li>Support launching applicatins using a appstream:// URL</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Allow plugins to be enabled and disabled at runtime</li>
+ <li>Always show the 'MyLanguage' kudo when in en_US locale</li>
+ <li>Correctly trigger systemd offline updates when only processing OS updates</li>
+ <li>Disable app folders feature when run outside GNOME</li>
+ <li>Do not show buttons on the search results</li>
+ <li>Do not use deprecated CSS properties</li>
+ <li>Do not use deprecated fwupd API</li>
+ <li>Ensure reviews are shown in the correct order</li>
+ <li>Fix a crash when double clicking files</li>
+ <li>Fix several UX issues when upgrading</li>
+ <li>Show the 'More Reviews' button in the details panel</li>
+ <li>Try really hard to have two rows of important categories</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-05-23" version="3.21.2">
+ <description>
+ <p>
+ This is an unstable release in the 3.21 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a --details-pkg option to the gnome-software binary</li>
+ <li>Add support for flatpak packages</li>
+ <li>Add a plugin to auto-add some license information</li>
+ <li>Add depends, requires and conflicts at initialize time</li>
+ <li>Add support for application key colors</li>
+ <li>Export a set of headers to allow external plugins to be built</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Do not crash if plugins are badly behaved</li>
+ <li>Do not directly load pixbufs in the AppStream plugin</li>
+ <li>Do not unconditionally invalidate the updates list on hardware hotplug</li>
+ <li>Find the best AppSteam component when matching any prefixes</li>
+ <li>Fix crash due to network change before app activation</li>
+ <li>Fix launching various KDE4 applications</li>
+ <li>Support getting cached content from /var/cache and /usr/share</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-04-25" version="3.21.1">
+ <description>
+ <p>
+ This is an unstable release in the 3.21 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add an initial loading panel when there is no metadata</li>
+ <li>Add an outline ostree plugin that just adds remotes as sources</li>
+ <li>Add an unreviewable application quirk</li>
+ <li>Add initial Steam support</li>
+ <li>Add support for app shortcut addition/removal</li>
+ <li>Add support for GNOME Shell extensions</li>
+ <li>Allow free-but-unspecified SPDX tokens</li>
+ <li>Allow widgets to use custom CSS in a generic way</li>
+ <li>Do the PackageKit refresh as a background transaction</li>
+ <li>Hide "Software Sources" menu when its action is disabled</li>
+ <li>Make the distro upgrades dialog match the new mockup</li>
+ <li>Split the 'size' property into size-installed and size-download</li>
+ <li>Use a link instead of a button for history</li>
+ <li>Use AppStream files for the popular, featured and extra category data</li>
+ <li>Use dpkg-deb info to create a GsApp when double clicking on a .deb file</li>
+ <li>Use FwupdClient from fwupd 0.7.0</li>
+ <li>Use GdkPixbuf to parse icns files</li>
+ <li>Use gsettings to enable/disable the 'sources' action</li>
+ <li>Use the Fedora themed image for the upgrade banner</li>
+ <li>When there are no trusted sources mark everything as non-3rd-party</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Actually show the error dialog for an invalid file</li>
+ <li>Allow all functions called by g_module_symbol() to fail</li>
+ <li>Allow popular and featured apps to match any prefix</li>
+ <li>Do not maintain a cache of applications in the plugin loader</li>
+ <li>Do not make the ODRS plugin depend on xdg-app</li>
+ <li>Do not re-request the distro-upgrade when switching pages</li>
+ <li>Do not show ratings and reviews for some component kinds</li>
+ <li>Do not show the distro-upgrade notification if the window is open</li>
+ <li>Do not use the header bar on Unity</li>
+ <li>Fix a crash when double clicking package files</li>
+ <li>Fix live installing firmware</li>
+ <li>Get the correct icon size when installing xdg-app bundles on HiDPI</li>
+ <li>Hide the kudo details panel for non desktop components</li>
+ <li>Load screenshots directly if their URLs point to local files</li>
+ <li>Lower the limits for review text</li>
+ <li>Make all the plugins more threadsafe</li>
+ <li>Make the provenance plugin non-specific to Fedora</li>
+ <li>Move header bar button creation into individual pages</li>
+ <li>Move the Install &amp; Restart button below the upgrade banner</li>
+ <li>Never show star ratings on the category app tiles</li>
+ <li>Only show one modal dialog at a time</li>
+ <li>Only show the session manager restart if there were any non-live updates</li>
+ <li>Properly support multi-line .deb descriptions</li>
+ <li>Show a 'Install All' button when all the updates can be installed live</li>
+ <li>Show a modal dialog when downloading the distro-upgrade failed</li>
+ <li>Show the upgrades banner even if there are no updates to show</li>
+ <li>Use a cache file to respect the fedora-distro-upgrades cache-age</li>
+ <li>Use GFile instead of a filename when converting apps</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-02-29" version="3.19.91">
+ <description>
+ <p>
+ This is an unstable release in the 3.19 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add an 'All' subcategory in the category shell</li>
+ <li>Add ratings and review functionality for Ubuntu</li>
+ <li>Install the xdg-app runtime as required automatically</li>
+ <li>Show a confirmation dialog before reporting a review</li>
+ <li>Show a guide label for the different star values</li>
+ <li>Support installing local xdg-app bundles</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Correctly identify local packages with sources</li>
+ <li>Do not add multiple search results for the same app</li>
+ <li>Do not show xdg-app runtimes in the installed panel</li>
+ <li>Escape markup before showing modal dialogs</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release date="2016-02-15" version="3.19.90">
+ <description>
+ <p>
+ This is an unstable release in the 3.19 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add end-user application review functionality</li>
+ <li>Add support for upgrading the OS from one release to another</li>
+ <li>Add support for xdg-app and Limba bundles</li>
+ <li>Add tags to applications, and explain them in the details page</li>
+ <li>Update the list of featured applications on the front page</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Add a missing tag to the software center metadata file</li>
+ <li>PackageKit support is now optional</li>
+ <li>Temporarily remove the remove button in the sources dialog</li>
+ <li>Use versioned user cache directories to pick up new screenshots</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1452867221" version="3.19.4">
+ <description>
+ <p>
+ This is an unstable release in the 3.19 development series,
+ with the following improvements:
+ </p>
+ <ul>
+ <li>Add a link to Wikipedia to explain proprietary and public domain software</li>
+ <li>Allow administrators to override the default popular applications</li>
+ <li>Improve the interface for device firmware updates and some can be done live</li>
+ <li>Make sure Characters and Disks show up in Utilities</li>
+ <li>Show 3rd party applications in the search results</li>
+ <li>Show a nicer installation dialog when installing local files</li>
+ <li>Speed up the application first-start and also speed up switching pages</li>
+ <li>Try to show if an application is free software</li>
+ </ul>
+ <p>The following bugs are also fixed:</p>
+ <ul>
+ <li>Do not crash on refresh if the fwupd daemon is not available</li>
+ <li>Fix installing web applications</li>
+ <li>Rework several windows to fit better on small screens</li>
+ <li>Use the correct user agent string when downloading firmware</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1446724044" version="3.18.3">
+ <description>
+ <p>This stable release fixes the following bugs:</p>
+ <ul>
+ <li>Use the correct user agent string when downloading firmware</li>
+ <li>Fix a crash in the limba plugin</li>
+ <li>Fix installing web applications</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1444908967" version="3.18.2">
+ <description>
+ <p>This stable release fixes the following bugs:</p>
+ <ul>
+ <li>Fix a regression that could lead to never finding any updates</li>
+ <li>Fix an issue with getting package details for apps without AppData</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1444738225" version="3.18.1">
+ <description>
+ <p>This stable release fixes the following bugs:</p>
+ <ul>
+ <li>Do not force the cache refresh and delete otherwise valid packages</li>
+ <li>Fix several potential crashes when navigating and when installing</li>
+ <li>Get the new application icon for local packages after installation</li>
+ <li>Improve cold start time by only parsing AppStream data once</li>
+ <li>Make sure Characters and Disks show up in Utilities</li>
+ <li>Only download the fwupd metadata signature once per day</li>
+ <li>Show an empty space for no category results</li>
+ <li>Show applications without AppData in the installed panel</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1442827658" version="3.18.0">
+ <description>
+ <p>This is the first stable release for the GNOME 3.18 desktop!</p>
+ </description>
+ </release>
+ <release timestamp="1442313469" version="3.17.92">
+ <description>
+ <p>This is an unstable release in the 3.17 development series, with the following improvements:</p>
+ <ul>
+ <li>Fix getting firmware updates by parsing the metadata correctly</li>
+ <li>Make the application menu path correct in RTL locales</li>
+ <li>Don't keep the application running forever when run as a search provider</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1441303652" version="3.17.91">
+ <description>
+ <p>This is an unstable release in the 3.17 development series, with the following improvements:</p>
+ <ul>
+ <li>Better theming for the category sidebar</li>
+ <li>Use standard size icon in the about dialog</li>
+ <li>Support mouse back button for going back in dialogs</li>
+ <li>Fix incorrect alignment on the front page in RTL languages</li>
+ <li>Misc other minor bugs fixed</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1439990842" version="3.17.90">
+ <description>
+ <p>This is an unstable release with the following bugs fixed:</p>
+ <ul>
+ <li>Use CSS to style the error message details</li>
+ <li>Correctly align labels in the Add to Folder dialog</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1439370225" version="3.17.3">
+ <description>
+ <p>This is an unstable release in the 3.17 development series, with the following improvements:</p>
+ <ul>
+ <li>Add basic support for Limba bundles</li>
+ <li>Automatically download new firmware metadata from LVFS</li>
+ <li>Hide updates UI on managed systems</li>
+ <li>Show a new notification when security updates remain unapplied</li>
+ <li>Show installation progress when installing applications</li>
+ <li>Use some new applications to the picked category</li>
+ </ul>
+ <p>Bugs fixed in this release:</p>
+ <ul>
+ <li>Do not show applications that are not available when searching by category</li>
+ <li>Don't crash when launching an app that has no desktop ID</li>
+ <li>Don't show applications without AppData in the category view</li>
+ <li>Fix a possible race and crash when loading icons</li>
+ <li>Fix locking in the AppStream code to fix several crashes</li>
+ <li>Use better error messages on offline update failure</li>
+ <li>Withdraw the notification when prepared update gets invalidated</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1433526589" version="3.17.2">
+ <description>
+ <p>This is an unstable release in the 3.17 development series, with the following improvements:</p>
+ <ul>
+ <li>Make fwupd dependency automagic</li>
+ </ul>
+ <p>Bugs fixed in this release:</p>
+ <ul>
+ <li>Fix a regression from the previous unstable release that made it impossible to install updates</li>
+ <li>Fix a crash in the screenshot loader</li>
+ <li>Fix a crash in the sources dialog</li>
+ <li>Fix a crash when installing rpms that lack description</li>
+ <li>Wrap long descriptions in the update dialog</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1432590395" version="3.17.1">
+ <description>
+ <p>This is the first unstable release in the 3.17 development series, with a number of new features:</p>
+ <ul>
+ <li>Support getting firmware updates through the fwupd daemon</li>
+ <li>Use a smaller number of tiles on the front page on small monitors</li>
+ <li>Rework internal modulesets, making it easier to edit the list of featured apps</li>
+ <li>Revert back to using a hand-picked list of featured apps</li>
+ <li>Several improvements to the sources dialog</li>
+ <li>Show better human readable names when searching for font scripts</li>
+ <li>Show a spinner while loading the data for the update history dialog</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1431345463" version="3.16.2">
+ <description>
+ <p>This release fixes the following bugs:</p>
+ <ul>
+ <li>Remove redundant OK button from the updates installed notification</li>
+ <li>Display a better human readable title for printer drivers</li>
+ <li>Show a better UI for offline update failure dialog</li>
+ <li>Set default actions for the update done notifications</li>
+ <li>Allow searching for packages via the API without appdata</li>
+ <li>Fix showing webapps with non-local icons</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1429029680" version="3.16.1">
+ <description>
+ <p>This release fixes the following bugs:</p>
+ <ul>
+ <li>Correctly save HiDPI images to HiDPI directories</li>
+ <li>Scroll the contents of the error message dialog</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1427103917" version="3.16.0">
+ <description>
+ <p>This stable release marks the release of GNOME 3.16!</p>
+ </description>
+ </release>
+ <release timestamp="1426498834" version="3.15.92">
+ <description>
+ <p>This unstable release adds the following features:</p>
+ <ul>
+ <li>React to theme changes</li>
+ <li>Rebase the HighContrast theme</li>
+ </ul>
+ <p>This release fixes the following bug:</p>
+ <ul>
+ <li>Fix HiDPI scale factor calculation</li>
+ <li>Align section headings in all views</li>
+ <li>Fix 'installed' overlays when using the HighContrast theme</li>
+ <li>Fall back to showing the top level category when no sub category exists</li>
+ <li>Fix a crash when using the pending applications feature</li>
+ </ul>
+ <p>This release also updates translations for many languages.</p>
+ </description>
+ </release>
+ <release timestamp="1425309931" version="3.15.91">
+ <description>
+ <p>This unstable release adds the following features:</p>
+ <ul>
+ <li>Enable kinetic scrolling in updates dialog</li>
+ </ul>
+ <p>This release fixes the following bug:</p>
+ <ul>
+ <li>Always ensure that the back entry focus widget is valid</li>
+ <li>Don't show small screenshots on HiDPI hardware</li>
+ <li>Fix a crash when starting GNOME Software for the first time</li>
+ <li>Only show compatible projects when getting the featured list</li>
+ </ul>
+ </description>
+ </release>
+ <release timestamp="1424116753" version="3.15.90">
+ <description>
+ <p>This unstable release adds the following features:</p>
+ <ul>
+ <li>Add a new panel for displaying session service results</li>
+ <li>Add a new version of the Modify interface</li>
+ <li>Require AppData for all available packages</li>
+ </ul>
+ <p>This release fixes the following bug:</p>
+ <ul>
+ <li>Use the new mockups for the 3rd party source install dialogs</li>
+ </ul>
+ </description>
+ </release>
+ <release timestamp="1421625600" version="3.15.4">
+ <description>
+ <p>This unstable release adds the following features:</p>
+ <ul>
+ <li>Fix searching with very small search terms</li>
+ </ul>
+ <p>This release fixes the following bugs:</p>
+ <ul>
+ <li>Do case-insensitive searching of suitable keywords</li>
+ <li>Fix a crash in the screenshot loader</li>
+ <li>Fix a crash when clicking the back button</li>
+ <li>Fix searching for keyworks with special chars</li>
+ <li>Show an error message when we fail to load details about a local file</li>
+ </ul>
+ </description>
+ </release>
+ <release timestamp="1416787200" version="3.15.2">
+ <description>
+ <p>This unstable release adds the following features:</p>
+ <ul>
+ <li>Show a blurred low-resolution screenshot while loading the HiDPI one</li>
+ </ul>
+ <p>This release fixes the following bugs:</p>
+ <ul>
+ <li>Do not show a random white line above the star rating widget</li>
+ <li>Do not show empty app boxes if no popular results are available</li>
+ <li>Do not try to download local web-app icons</li>
+ <li>Use blue stars for the user-ratings rather than gold</li>
+ </ul>
+ </description>
+ </release>
+ </releases>
+ <provides>
+ <id>gnome-software.desktop</id>
+ </provides>
+ <kudos>
+ <kudo>HiDpiIcon</kudo>
+ <kudo>ModernToolkit</kudo>
+ <kudo>Notifications</kudo>
+ <kudo>SearchProvider</kudo>
+ </kudos>
+ <url type="bugtracker">https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software</url>
+ <url type="donation">http://www.gnome.org/friends/</url>
+ <url type="homepage">https://wiki.gnome.org/Design/Apps/Software</url>
+ <url type="translate">https://wiki.gnome.org/TranslationProject</url>
+ <update_contact>richard_at_hughsie.com</update_contact>
+ <compulsory_for_desktop>GNOME</compulsory_for_desktop>
+ <project_group>GNOME</project_group>
+ <translation type="gettext">gnome-software</translation>
+ <developer_name>The GNOME Project</developer_name>
+ <content_rating type="oars-1.0">
+ <content_attribute id="violence-cartoon">none</content_attribute>
+ <content_attribute id="violence-fantasy">none</content_attribute>
+ <content_attribute id="violence-realistic">none</content_attribute>
+ <content_attribute id="violence-bloodshed">none</content_attribute>
+ <content_attribute id="violence-sexual">none</content_attribute>
+ <content_attribute id="drugs-alcohol">none</content_attribute>
+ <content_attribute id="drugs-narcotics">none</content_attribute>
+ <content_attribute id="drugs-tobacco">none</content_attribute>
+ <content_attribute id="sex-nudity">none</content_attribute>
+ <content_attribute id="sex-themes">none</content_attribute>
+ <content_attribute id="language-profanity">none</content_attribute>
+ <content_attribute id="language-humor">none</content_attribute>
+ <content_attribute id="language-discrimination">none</content_attribute>
+ <content_attribute id="social-chat">moderate</content_attribute>
+ <content_attribute id="social-info">mild</content_attribute>
+ <content_attribute id="social-audio">none</content_attribute>
+ <content_attribute id="social-location">none</content_attribute>
+ <content_attribute id="social-contacts">none</content_attribute>
+ <content_attribute id="money-purchasing">none</content_attribute>
+ <content_attribute id="money-gambling">none</content_attribute>
+ </content_rating>
+</component>
diff --git a/data/appdata/resize-window.sh b/data/appdata/resize-window.sh
new file mode 100644
index 0000000..242152f
--- /dev/null
+++ b/data/appdata/resize-window.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# aim for a size of 1200x675, but wmctrl doesn't seem to take into account
+# the size of the window borders
+wmctrl -r Software -e 0,-1,-1,1224,700
+wmctrl -a Software
diff --git a/data/appdata/ss-details.png b/data/appdata/ss-details.png
new file mode 100644
index 0000000..e837371
--- /dev/null
+++ b/data/appdata/ss-details.png
Binary files differ
diff --git a/data/appdata/ss-installed.png b/data/appdata/ss-installed.png
new file mode 100644
index 0000000..42f838d
--- /dev/null
+++ b/data/appdata/ss-installed.png
Binary files differ
diff --git a/data/appdata/ss-overview.png b/data/appdata/ss-overview.png
new file mode 100644
index 0000000..2866182
--- /dev/null
+++ b/data/appdata/ss-overview.png
Binary files differ
diff --git a/data/appdata/ss-updates-details.png b/data/appdata/ss-updates-details.png
new file mode 100644
index 0000000..88d5296
--- /dev/null
+++ b/data/appdata/ss-updates-details.png
Binary files differ
diff --git a/data/appdata/ss-updates.png b/data/appdata/ss-updates.png
new file mode 100644
index 0000000..3089d56
--- /dev/null
+++ b/data/appdata/ss-updates.png
Binary files differ
diff --git a/data/assets/featured-FeedReader.svg b/data/assets/featured-FeedReader.svg
new file mode 100644
index 0000000..66a3cd1
--- /dev/null
+++ b/data/assets/featured-FeedReader.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="featured-FeedReader.svg"
+ id="svg33"
+ version="1.1"
+ viewBox="0 0 135.83973 120.64994"
+ height="455.99979"
+ width="513.40948">
+ <metadata
+ id="metadata37">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:current-layer="svg33"
+ inkscape:window-maximized="1"
+ inkscape:window-y="0"
+ inkscape:window-x="0"
+ inkscape:cy="228"
+ inkscape:cx="721.46522"
+ inkscape:zoom="1.0296875"
+ fit-margin-bottom="0"
+ fit-margin-right="0"
+ fit-margin-left="0"
+ fit-margin-top="0"
+ showgrid="false"
+ id="namedview35"
+ inkscape:window-height="1043"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff" />
+ <defs
+ id="defs5">
+ <clipPath
+ id="a"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ id="path2"
+ d="m 135.996,846.686 h 338.667 v 120.65 H 135.996 Z"
+ stroke-opacity="0.971"
+ stroke-width="0"
+ stroke="#f6c211"
+ fill-opacity="0.965"
+ fill="#f5c211" />
+ </clipPath>
+ </defs>
+ <g
+ id="g31"
+ transform="translate(-135.996,-846.686)"
+ clip-path="url(#a)">
+ <circle
+ id="circle7"
+ fill-opacity="0.965"
+ fill="#e5a50a"
+ r="3.175"
+ cy="772.495"
+ cx="-510.556"
+ transform="rotate(-45)" />
+ <circle
+ id="circle9"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ cx="-510.556"
+ cy="772.495"
+ r="9.8990002"
+ transform="rotate(-45)" />
+ <circle
+ id="circle11"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ r="19.174999"
+ cy="772.495"
+ cx="-510.57101"
+ transform="rotate(-45)" />
+ <circle
+ id="circle13"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ cx="-510.57101"
+ cy="772.495"
+ r="28.434999"
+ transform="rotate(-45)" />
+ <circle
+ id="circle15"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ r="37.695"
+ cy="772.495"
+ cx="-510.57101"
+ transform="rotate(-45)" />
+ <circle
+ id="circle17"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ cx="-510.57101"
+ cy="772.495"
+ r="37.695"
+ transform="rotate(-45)" />
+ <circle
+ id="circle19"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ r="46.956001"
+ cy="772.495"
+ cx="-510.57101"
+ transform="rotate(-45)" />
+ <circle
+ id="circle21"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ cx="-510.57101"
+ cy="772.495"
+ r="56.216"
+ transform="rotate(-45)" />
+ <circle
+ id="circle23"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ r="65.476997"
+ cy="772.495"
+ cx="-510.57101"
+ transform="rotate(-45)" />
+ <circle
+ id="circle25"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ cx="-510.57101"
+ cy="772.495"
+ r="74.737"
+ transform="rotate(-45)" />
+ <circle
+ id="circle27"
+ stroke-opacity="0.971"
+ stroke-width="5.292"
+ stroke="#f8e45c"
+ fill="none"
+ r="83.997002"
+ cy="772.495"
+ cx="-510.57101"
+ transform="rotate(-45)" />
+ <path
+ id="path29"
+ stroke-opacity="0.975"
+ stroke-width="5.292"
+ stroke="#e5a50a"
+ fill="none"
+ d="m 244.604,847.87 a 83.997,83.997 0 0 1 0,118.79 m -6.549,-112.242 a 74.737,74.737 0 0 1 0,105.694 m -6.548,-99.146 a 65.477,65.477 0 0 1 0,92.598 m -6.547,-86.05 a 56.216,56.216 0 0 1 0,79.502 m -6.549,-72.954 a 46.956,46.956 0 0 1 0,66.406 m -6.548,-59.858 a 37.695,37.695 0 0 1 0,53.31 m -6.548,-46.761 a 28.435,28.435 0 0 1 0,40.213 m -6.548,-33.665 a 19.175,19.175 0 0 1 0,27.117 m -6.548,-20.569 a 9.899,9.899 0 0 1 0,13.999" />
+ </g>
+</svg>
diff --git a/data/assets/featured-bitwarden.svg b/data/assets/featured-bitwarden.svg
new file mode 100644
index 0000000..39c841b
--- /dev/null
+++ b/data/assets/featured-bitwarden.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="800" height="400" version="1.0"><circle style="marker:none" cx="167" cy="157" r="33" fill="#26a269"/><circle r="33" cy="238" cx="651" style="marker:none" fill="#26a269"/><circle style="marker:none" cx="419" cy="154" r="33" fill="#26a269"/><g transform="translate(110 131)"><rect ry="11.393" rx="11.393" y="71" x="70" height="52" width="410" style="marker:none" fill="#fff" stroke="#26a269" stroke-width="2" stroke-linejoin="round"/><circle r="11" cy="97" cx="97" style="marker:none" fill="#1f1f1f"/><circle style="marker:none" cx="125" cy="97" r="11" fill="#1f1f1f"/><circle style="marker:none" cx="153" cy="97" r="11" fill="#1f1f1f"/><circle r="11" cy="97" cx="181" style="marker:none" fill="#1f1f1f"/><circle style="marker:none" cx="209" cy="97" r="11" fill="#1f1f1f"/><circle r="11" cy="97" cx="237" style="marker:none" fill="#1f1f1f"/><circle r="11" cy="97" cx="265" style="marker:none" fill="#1f1f1f"/><circle style="marker:none" cx="293" cy="97" r="11" fill="#1f1f1f"/></g><path style="marker:none" d="M187 158h440c12.314 0 21 9.739 21 21v57" fill="none" stroke="#26a269" stroke-width="20" stroke-linejoin="round"/><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" d="M413 144a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 7.74-6H429v4h6v-8h-14.266a8 8 0 0 0-7.734-6zm0 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4z" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="#fff"/><g fill="#fff" color="#bebebe"><path style="marker:none" d="M640.938 234c-1.108 0-2 .892-2 2v12h24v-12c0-1.108-.892-2-2-2z" overflow="visible"/><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" d="M658.914 222c-3.288 0-5.93 2.71-5.914 6v12h4v-12c0-1.142.772-2 1.914-2h.032c1.142 0 2 .858 2 2v2h4v-2c0-3.29-2.71-6-6-6z" font-weight="400" font-family="sans-serif" overflow="visible"/></g><path style="marker:none" d="M165 143c-3.29 0-6 2.71-6 6v6h-2c-1.108 0-2 .892-2 2v12h24v-12c0-1.108-.892-2-2-2h-2v-6c0-3.29-2.71-6-6-6zm0 4h4c1.143 0 2 .857 2 2v6h-8v-6c0-1.143.857-2 2-2z" color="#bebebe" overflow="visible" fill="#fff"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-boxes.svg b/data/assets/featured-boxes.svg
new file mode 100644
index 0000000..8eb1d1f
--- /dev/null
+++ b/data/assets/featured-boxes.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="600"><defs><linearGradient id="d"><stop offset="0" stop-color="#fdcc80"/><stop offset=".4" stop-color="#fcb546"/><stop offset="1" stop-color="#fb8c14"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#fff"/><stop offset=".4" stop-color="#fff"/><stop offset="1" stop-color="#f6f5f4"/></linearGradient><radialGradient xlink:href="#a" id="r" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -1303.755 -442.564)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="q" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -1303.755 -482.564)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="p" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -1596.155 -866.54)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="o" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -1596.155 -954.54)"/><radialGradient xlink:href="#a" id="n" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -1263.755 -482.564)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="m" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -1263.755 -442.564)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="l" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -1508.155 -866.54)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="k" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -1508.155 -954.54)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><linearGradient xlink:href="#b" id="f" x1="136" y1="256" x2="376" y2="256" gradientUnits="userSpaceOnUse" gradientTransform="translate(347.043 -12.613)"/><linearGradient id="b"><stop offset="0" stop-color="#babdb6"/><stop offset=".033" stop-color="#fff"/><stop offset=".2" stop-color="#7a8599"/><stop offset=".267" stop-color="#e4e6e8"/><stop offset=".284" stop-color="#c5c9cf"/><stop offset=".719" stop-color="#7a8599"/><stop offset=".751" stop-color="#fff"/><stop offset=".899" stop-color="#7a8599"/><stop offset="1" stop-color="#e4e6e8"/></linearGradient><radialGradient xlink:href="#c" id="e" cx="254.015" cy="419.989" fx="254.015" fy="419.989" r="223.985" gradientTransform="matrix(1.6429 0 0 1.643 -163.306 -270.045)" gradientUnits="userSpaceOnUse"/><linearGradient id="c"><stop offset="0" stop-color="#fc8a3e"/><stop offset="1" stop-color="#ed6204"/></linearGradient><radialGradient xlink:href="#a" id="g" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.2308 0 0 .22763 -1507.88 83.084)" cx="279.422" cy="-61.739" fx="279.422" fy="-61.739" r="224"/><radialGradient xlink:href="#d" id="i" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.17087 0 0 .16852 -1412.845 162.179)" cx="279.422" cy="-61.739" fx="279.422" fy="-61.739" r="224"/></defs><g transform="rotate(30 531.958 423.98)"><ellipse style="marker:none" cx="456.014" cy="-156" rx="47.986" ry="48" transform="translate(323.043 231.387)" opacity=".15"/><path transform="translate(347.043 -12.613)" d="M80.014 32a47.986 48 0 0 0-47.985 48A47.986 48 0 0 0 56 121.504v269.008A47.986 48 0 0 0 32.03 432a47.986 48 0 0 0 47.984 48 47.986 48 0 0 0 41.506-24h269.005a47.986 48 0 0 0 41.489 24A47.986 48 0 0 0 480 432a47.986 48 0 0 0-24-41.521V121.504A47.986 48 0 0 0 480 80a47.986 48 0 0 0-47.986-48 47.986 48 0 0 0-41.506 24H121.502a47.986 48 0 0 0-41.488-24z" style="marker:none" fill="url(#e)"/><path d="M519.043 115.387c-19.944 0-36 16.056-36 36v16c0 12.53 6.34 23.522 15.998 29.965v92.07c-9.657 6.444-15.998 17.435-15.998 29.965v16c0 17.85 12.865 32.575 29.864 35.473a36 36 0 0 0 .033.006 36.28 36.28 0 0 0 3.355.408 36 36 0 0 0 .428.032c.768.048 1.54.082 2.32.082 12.532 0 23.524-6.343 29.967-16.002h108.066a35.883 35.883 0 0 0 26.963 15.869 36 36 0 0 0 .252.017c.91.069 1.825.116 2.752.116 17.85 0 32.575-12.865 35.473-29.864v-.017a36 36 0 0 0 0-.016 36.24 36.24 0 0 0 .408-3.355 36 36 0 0 0 .031-.428c.055-.768.088-1.54.088-2.32v-16c0-12.53-6.34-23.522-15.998-29.965v-92.07a35.883 35.883 0 0 0 15.863-26.94 36 36 0 0 0 .024-.32c.066-.894.111-1.794.111-2.706v-16c0-19.944-16.056-36-36-36-18.59 0-33.796 13.952-35.775 31.999h-96.45c-1.979-18.047-17.184-31.999-35.775-31.999zm29.967 71.999h108.067a35.999 35.999 0 0 0 9.968 9.968v92.067c-8.616 5.747-14.587 15.114-15.777 25.965h-96.45a35.88 35.88 0 0 0-15.777-25.965v-92.067a36 36 0 0 0 9.97-9.968z" style="marker:none" fill="url(#f)"/><circle style="marker:none" cx="519.043" cy="151.387" r="36" fill="#fff"/><circle style="marker:none" cx="687.043" cy="151.387" r="36" fill="#fff"/><path style="marker:none" d="M527.043 151.385h152" fill="#fff" stroke="#fff" stroke-width="40" stroke-linecap="round"/><circle style="marker:none" cx="687.043" cy="319.387" r="36" fill="#fff"/><circle style="marker:none" cx="519.043" cy="319.387" r="36" fill="#fff"/><path style="marker:none" d="M679.043 319.385h-152m160.002-159.998v152m-168.004 0v-152" fill="#fff" stroke="#fff" stroke-width="40" stroke-linecap="round"/></g><g transform="rotate(15 -592.354 6719.751)"><path style="marker:none" d="M-1364.957 139.887a32 32 0 0 0-32 32 32 32 0 0 0 17 28.249v104.796a32 32 0 0 0-16.5 27.955 32 32 0 0 0 32 32 32 32 0 0 0 28.248-17h103.297a32 32 0 0 0 27.955 16.5 32 32 0 0 0 32-32 32 32 0 0 0-16-27.677V200.055a32 32 0 0 0 16-27.668 32 32 0 0 0-32-32 32 32 0 0 0-27.37 15.5h-104.962a32 32 0 0 0-27.668-16zm27.678 48h104.367a32 32 0 0 0 11.955 12.178V304.72a32 32 0 0 0-11.37 11.168h-105.036a32 32 0 0 0-10.594-10.37V198.98a32 32 0 0 0 10.678-11.094z" fill="#e35e0d"/><path d="M-1364.957 131.887a32 32 0 0 0-32 32 32 32 0 0 0 17 28.249v104.796a32 32 0 0 0-16.5 27.955 32 32 0 0 0 32 32 32 32 0 0 0 28.248-17h103.297a32 32 0 0 0 27.955 16.5 32 32 0 0 0 32-32 32 32 0 0 0-16-27.677V192.055a32 32 0 0 0 16-27.668 32 32 0 0 0-32-32 32 32 0 0 0-27.37 15.5h-104.962a32 32 0 0 0-27.668-16zm27.678 48h104.367a32 32 0 0 0 11.955 12.178V296.72a32 32 0 0 0-11.37 11.168h-105.036a32 32 0 0 0-10.594-10.37V190.98a32 32 0 0 0 10.678-11.094z" style="marker:none" fill="#fb8c14"/><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" d="M-1443.707 51.887a39.75 39.75 0 0 0-39.75 39.75 39.75 39.75 0 0 0 23.5 36.239v247.539a39.75 39.75 0 0 0-23.5 36.222 39.75 39.75 0 0 0 39.75 39.75 39.75 39.75 0 0 0 36.395-23.822h246.238a39.75 39.75 0 0 0 36.367 23.822 39.75 39.75 0 0 0 39.75-39.75 39.75 39.75 0 0 0-24-36.48V128.085a39.75 39.75 0 0 0 24-36.448 39.75 39.75 0 0 0-39.75-39.75 39.75 39.75 0 0 0-36.466 23.971h-246.1a39.75 39.75 0 0 0-36.434-23.97zm36.254 55.971h246.51a39.75 39.75 0 0 0 19.986 20.018v247.539a39.75 39.75 0 0 0-20.074 20.15h-246.373a39.75 39.75 0 0 0-20.553-20.408V128.085a39.75 39.75 0 0 0 20.504-20.227z" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="#d5d3cf"/><path d="M-1443.707 43.887a39.75 39.75 0 0 0-39.75 39.75 39.75 39.75 0 0 0 23.5 36.239v247.539a39.75 39.75 0 0 0-23.5 36.222 39.75 39.75 0 0 0 39.75 39.75 39.75 39.75 0 0 0 36.395-23.822h246.238a39.75 39.75 0 0 0 36.367 23.822 39.75 39.75 0 0 0 39.75-39.75 39.75 39.75 0 0 0-24-36.48V120.085a39.75 39.75 0 0 0 24-36.448 39.75 39.75 0 0 0-39.75-39.75 39.75 39.75 0 0 0-36.466 23.971h-246.1a39.75 39.75 0 0 0-36.434-23.97zm36.254 55.971h246.51a39.75 39.75 0 0 0 19.986 20.018v247.539a39.75 39.75 0 0 0-20.074 20.15h-246.373a39.75 39.75 0 0 0-20.553-20.408V120.085a39.75 39.75 0 0 0 20.504-20.227z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="#f6f5f4"/><circle style="marker:none" id="h" cx="-1443.207" cy="83.637" r="40.25" display="inline" opacity="1" fill="url(#g)" fill-opacity="1" stroke="none" stroke-width=".045" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1" marker-start="none" marker-mid="none" marker-end="none" paint-order="normal"/><use height="100%" width="100%" transform="translate(318)" xlink:href="#h"/><use height="100%" width="100%" transform="translate(318 319.5)" xlink:href="#h"/><use height="100%" width="100%" transform="translate(0 319.5)" xlink:href="#h"/><circle style="marker:none" id="j" cx="-1364.957" cy="163.387" r="32" display="inline" opacity="1" fill="url(#i)" fill-opacity="1" stroke="none" stroke-width=".045" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1" marker-start="none" marker-mid="none" marker-end="none" paint-order="normal"/><use height="100%" width="100%" transform="translate(160)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(160 161.5)" xlink:href="#j"/><use height="100%" width="100%" transform="translate(0 161.5)" xlink:href="#j"/></g><g transform="translate(2441.487 -897.107) scale(3.01813)"><path d="M-788.605 393.74h82.687v82.686h-82.687z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="none"/><g color="#000" fill="none" stroke="#f6f5f4" stroke-width="8"><path d="M-726.957 455.387l24 24m-24-64l24-24m-64 64l-24 24m24-64l-24-24m24 24h40v40h-40z" style="marker:none" overflow="visible"/><path style="marker:none" overflow="visible" d="M-790.957 391.387h88v88h-88z"/></g><path style="marker:none" fill="#d5d3cf" d="M-712.457 393.387v2h-69v-2z"/><path d="M-690.957 391.387c0 6.628-5.372 12-12 12-1.849 0-3.222-.095-5.165-1.165-1.092-1.726-3.55-4.585-5.668-5.667-1.071-1.943-1.167-3.317-1.167-5.168 0-6.627 5.373-12 12-12 6.628 0 12 5.373 12 12z" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M-700.957 402.387h2v69h-2z"/><circle r="12" cy="479.387" cx="-702.957" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M-731.957 457.387v2h-30v-2zm20.605 16.426l-1.414 1.414-15-15 1.415-1.414zm3.453-74.633l1.414 1.414-15 15-1.414-1.414z"/><circle r="12" cy="389.387" cx="-702.957" style="marker:none" color="#000" overflow="visible" fill="url(#k)"/><path style="marker:none" fill="#d5d3cf" d="M-724.957 421.387h2v26h-2zm-7-4v2h-30v-2z"/><circle r="8" cy="415.387" cx="-726.957" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M-712.457 481.387v2h-69v-2z"/><circle style="marker:none" cx="-702.957" cy="477.387" r="12" color="#000" overflow="visible" fill="url(#l)"/><path d="M-718.957 455.387c0 .666 0 1-.234 1.932-1.166.59-4.766 4.543-5.788 5.822-.502.246-1.295.246-1.978.246a8 8 0 1 1 8-8z" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><circle r="8" cy="453.387" cx="-726.957" style="marker:none" color="#000" overflow="visible" fill="url(#m)"/><circle style="marker:none" cx="-726.957" cy="413.387" r="8" color="#000" overflow="visible" fill="url(#n)"/><path style="marker:none" fill="#d5d3cf" d="M-788.957 402.387h2v69h-2z"/><circle style="marker:none" cx="-790.957" cy="479.387" r="12" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M-764.957 421.387h2v26h-2z"/><circle style="marker:none" cx="-766.957" cy="415.387" r="8" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M-767.37 458.973l1.414 1.414-15 15-1.415-1.414z"/><path style="marker:none" d="M-803.045 391.387c0 6.628 5.373 12 12 12 1.85 0 3.222-.095 5.165-1.165 1.092-1.726 3.55-4.585 5.668-5.667 1.071-1.943 1.167-3.317 1.167-5.168 0-6.627-5.373-12-12-12s-12 5.373-12 12z" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M-770.88 414.34l-1.414 1.415-15-15 1.415-1.414z"/><circle style="marker:none" cx="-790.957" cy="389.387" r="12" color="#000" overflow="visible" fill="url(#o)"/><circle r="12" cy="477.387" cx="-790.957" style="marker:none" color="#000" overflow="visible" fill="url(#p)"/><circle r="8" cy="413.387" cx="-766.957" style="marker:none" color="#000" overflow="visible" fill="url(#q)"/><path style="marker:none" d="M-774.957 455.387c0 .666 0 1 .235 1.932 1.166.59 4.765 4.543 5.788 5.822.502.246 1.295.246 1.977.246a8 8 0 1 0-8-8z" color="#000" overflow="visible" fill="#d5d3cf"/><circle style="marker:none" cx="-766.957" cy="453.387" r="8" color="#000" overflow="visible" fill="url(#r)"/></g><rect style="marker:none" width="92.923" height="91.424" x="1029.642" y="322.731" rx="2" ry="2" fill="#fca937"/><rect ry="2" rx="2" y="204.33" x="1029.642" height="91.424" width="92.923" style="marker:none" fill="#ed6204"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-calibre-bg.jpg b/data/assets/featured-calibre-bg.jpg
new file mode 100644
index 0000000..822573e
--- /dev/null
+++ b/data/assets/featured-calibre-bg.jpg
Binary files differ
diff --git a/data/assets/featured-darktable-bg.jpg b/data/assets/featured-darktable-bg.jpg
new file mode 100644
index 0000000..4d520fa
--- /dev/null
+++ b/data/assets/featured-darktable-bg.jpg
Binary files differ
diff --git a/data/assets/featured-dropbox.png b/data/assets/featured-dropbox.png
new file mode 100644
index 0000000..6d3253d
--- /dev/null
+++ b/data/assets/featured-dropbox.png
Binary files differ
diff --git a/data/assets/featured-foliate-bg.jpg b/data/assets/featured-foliate-bg.jpg
new file mode 100644
index 0000000..cce3396
--- /dev/null
+++ b/data/assets/featured-foliate-bg.jpg
Binary files differ
diff --git a/data/assets/featured-foliate.svg b/data/assets/featured-foliate.svg
new file mode 100644
index 0000000..cb497a6
--- /dev/null
+++ b/data/assets/featured-foliate.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="256" height="512" version="1.0"><defs><linearGradient id="c"><stop offset="0" stop-color="#cfcfcc"/><stop offset=".037" stop-color="#e8e8e8" stop-opacity=".98"/><stop offset=".074" stop-color="#d0d0cc"/><stop offset=".923" stop-color="#d0d0cc"/><stop offset=".962" stop-color="#e8e8e8"/><stop offset="1" stop-color="#d0d0cc"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#f6f5f4"/><stop offset="1" stop-color="#e1dfdd"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#f6f5f4"/><stop offset=".333" stop-color="#fdfdfd"/><stop offset="1" stop-color="#c9c6c1"/></linearGradient></defs><path d="M69.293 35.105S21.305 154.242 21.445 216.909c.105 46.635 6.424 99.258 36.213 135.139 22.886 27.567 96.938 46.443 96.938 46.443l24.134 90.095 22.525-6.034-24.134-90.094s54.68-53.375 60.72-88.69c7.858-45.971-12.982-94.706-36.207-135.145-31.211-54.337-132.34-133.518-132.34-133.518z" fill="#0cc"/><path d="M178.369 488.86l22.525-6.04-42.247-157.664 41.22-71.393-14.282-8.243-32.971 57.117-12.067-45.05 32.971-57.118-14.282-8.242-24.728 42.84-9.054-33.787 24.735-42.835-14.282-8.249-16.486 28.565-21.5-78.57-22.524 6.033 21.499 78.57-28.559-16.492-8.243 14.283 42.841 24.728 9.053 33.788-42.84-24.735-8.243 14.283 57.117 32.977 12.067 45.044-57.117-32.977-8.243 14.282 71.4 41.215z" fill="#20baba"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-fondo-bg.jpg b/data/assets/featured-fondo-bg.jpg
new file mode 100644
index 0000000..b4f37e7
--- /dev/null
+++ b/data/assets/featured-fondo-bg.jpg
Binary files differ
diff --git a/data/assets/featured-gimp.png b/data/assets/featured-gimp.png
new file mode 100644
index 0000000..585bd74
--- /dev/null
+++ b/data/assets/featured-gimp.png
Binary files differ
diff --git a/data/assets/featured-gnome-sudoku.png b/data/assets/featured-gnome-sudoku.png
new file mode 100644
index 0000000..ffb0a0d
--- /dev/null
+++ b/data/assets/featured-gnome-sudoku.png
Binary files differ
diff --git a/data/assets/featured-homebank-bg.jpg b/data/assets/featured-homebank-bg.jpg
new file mode 100644
index 0000000..afa86e0
--- /dev/null
+++ b/data/assets/featured-homebank-bg.jpg
Binary files differ
diff --git a/data/assets/featured-inkscape.svg b/data/assets/featured-inkscape.svg
new file mode 100644
index 0000000..d03e0d3
--- /dev/null
+++ b/data/assets/featured-inkscape.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="724" height="350"><path d="M216.388 114.711c-.013-6.72 8.436-1.9 7.157 3.218-.406 1.622-6.429.425-7.157-3.218z" fill="#68836f"/><path d="M210.392 108.837c-.135-2.62-.255-5.295 3.304-4.405 1.153.288 1.028 1.522 1.958 2.08.882.53 2.448-.448 3.425-.122.494.164.684.612 1.224.612 1.181 0-1.903 7.148-2.325 7.464-.722.542-2.352.62-3.18.123-.128-.077-1.362-.964-1.47-.857-.34.341-.276 1.134-.61 1.469-.721.72-1.776.653-2.448 1.1-.301.202.41 1.06.123 1.347-.734.734-2.258-1.61-2.937-1.836-1.543-.514-5.216-2.093-4.405-4.527.292-.874 3.57-2.397 4.16-2.692.84-.42 2.524.507 3.182.244z" fill="#5a957e"/><path d="M191.061 107.736c.153-2.995 4.072-5.771 6.852-6.119.704-.088 4.02-.017 4.527.49 1.511 1.512 7.963 6.597 5.383 9.178-2.262 2.263-6.888.35-7.83.979-1.616 1.077.24 4.68-2.814 3.916-1.433-.359-7.862-6.026-7.341-7.587.128-.387.874-.595 1.223-.857z" fill="#609787"/><path d="M185.8 112.264c-.438-1.853.145-2.942 1.958-3.304 1.562-.313 3.034.67 4.16 1.346 1.17.702 2.777.434 3.548 1.59 1.884 2.828-4.446 4.555-6.362 3.916-.575-.191-1.759-1.514-2.203-1.957-.653-.654-1.1-.478-1.1-1.591z" fill="#4e6e59"/><path d="M163.777 112.753c5.005.375 7.264-4.91 11.256-6.24 3.715-1.24 9.948 6.287 8.198 9.789-2.115 4.23-7.685.433-9.788 1.835-3.297 2.199.218 5.724-1.59 6.241-1.297.37-4.273-.494-4.528-.367-4.962 2.482-3.684 2.842-5.995-2.937-.397-.991-1.725-2.532-1.346-3.67.67-2.008 3.347-2.418 3.793-4.65z" fill="#4d7d71"/><path d="M157.904 93.296c-.138-7.397 10.924-6.697 16.15-7.22 4.248-.424 8.586-.185 12.847-.612.857-.085 1.703-.489 2.57-.489 5.436 0 10.999-2.282 14.315 2.692 1.635 2.454 1.957 5.134 1.957 8.077 0 2.662.366 5.875-1.59 7.831-.616.616-2.547.49-3.304.49-5.22 0-5.511-.431-10.033-2.692-.503-.252-1.797 0-2.324 0-4.776 0-4.918 1.39-9.054 2.08-2.147.358-4.542-1.908-6.607-2.203-2.602-.371-4.798 1.398-7.463 1.102-1.756-.195-3.243-1.897-4.405-3.06-.721-.721-2.917-.097-3.303-.611-1.562-2.083-.348-3.904.244-5.385z" fill="#579283"/><path d="M207.28 89.617c-1.258-1.144-1.062-7.454 1.73-6.057.942.471 2.555 2.58 3.548 2.25.617-.206 1.42-2.149 1.643-2.596.483-.966 5.065-1.058 5.97-.606.103.052-.028.234 0 .346.36 1.445-.458 1.661-1.47 2.337-1.889 1.258.885 3.44-.087 4.413-.333.332-.78.561-.78 1.124 0 .231-.054.559 0 .78.126.5 3.017.79 1.212 2.595-.731.731-1.38.004-1.817-.433-.36-.359-3.689-1.934-3.893-1.73-.34.34-.318.642-.865.779-.503.125-1.08-.073-1.557.086-.483.161-1.487-.277-1.904 0-1.343.896-1.608 2.469-3.287 3.029-.7.233-1.304.571-1.99.865-.462.198-1.413-.203-1.644.26-.536 1.072-.63 2.03-2.336 1.817-.69-.087-4.115-2.905-4.758-3.548-.233-.233-.14-1.191 0-1.471.93-1.861 3.639-1.79 5.364-1.298.13.037 1.375.663 1.47.52 1.087-1.63-2.32-3.47.433-4.846.85-.425 3.695-.83 4.24.26.145.29.027.746.173 1.038.086.173.535.086.605.086z" fill="#678571"/><path d="M210.74 90.05c-2.193.378-1.977-.767-2.94-1.73-.251-.252-.796-2.58-.433-2.943.51-.51 2.901-1.38 3.547-.52.85 1.135 4.222 4.367 2.076 5.798-.387.259-.87.604-1.384.433-.387-.129-.483-.81-.865-1.038z" fill="#8caf9e"/><path d="M213.855 84.858c.629-.177 1.216-.405 1.817-.606 1.87-.623 2.62 2.85.52 3.375-.584.146-2.8.633-3.375.346-1.324-.662.492-2.75 1.038-3.115z" fill="#8caf9e"/><path d="M182.619 99.292c1.207-1.07 3.141-1.96 4.596-.825 1.292 1.077 2.907.538 4.27-.052 1.316-.63 2.792-.058 3.31 1.294.621 1.178 1.038 2.651.59 3.948-.617 1.037-1.446 1.953-2.287 2.812-1.28 1.053-3.085.254-4.52.922-1.106.709-1.003 2.459-1.514 3.552.407 1.434 1.423 2.652 1.44 4.207.493 1.614-1.287 2.28-2.535 2.488-1.65.192-2.443-1.713-2.645-3.06.004-2.089-2.021-2.993-3.364-4.187-1.643-2.246-3.584-4.804-3.162-7.768.125-1.63.912-3.638 2.753-3.874 1.07-.235 2.173-.078 3.068.543z" fill="#4d907f"/><path d="M222.28 118.66c-.92-1.865-3.277-2.635-4.701-4.058-.303-.303-.419-1.176-.773-1.353-.416-.208-2.667-.681-3.09-.258-.819.819 1.763 3.748 1.996 4.444.251.755-.735 2.937-.644 3.028.186.186 4.256.028 4.7-.194.687-.343 2.77 2.105 2.77-.773 0-.395-.001-.452-.258-.837z" fill="#52705b"/><path d="M207.984 136.757c.098-2.344-1.49-4.662-3.735-5.41-.232-.077-.54.077-.773 0-.27-.09-.449-.386-.772-.386-.213 0-1.833 1.266-2.512 1.417-.806.179-1.927.051-2.253 1.03-.194.581-.237 1.702.257 2.125 1.854 1.59 3.89-.862 5.087-.064 1.409.94 0 4.186 2.19 4.186.382 0 .996.12 1.352 0 1.06-.353 2.176-2.084 1.16-2.898z" fill="#3a554c"/><path d="M224.018 93.805c-.682.876-5.804-.825-4.636-2.085 1.897-2.048 11.932-.419 13.652.973.951.77 2.174 1.16 1.674 2.78-1.144 3.704-11.949 1.73-10.69-1.668z" fill="#617c69"/><path d="M304.61 232.563l5.882 4.154 7.83 6.835 16.135 9.086 6.359 7.571c7.777 9.587 13.405 17.574 18.6 25.224-4.404-4.035-8.789-8.648-13.193-9.562 7.6 10.035 13.641 20.078 15.4 30.112-2.567-3.494-4.422-4.168-6.36-5.148 2.833 5.114 5.365 10.95 5.624 22.497l-2.942-2.898c1.818 7.556 1.166 13.122-.26 18.084 3.272 10.174 1.332 18.784 2.726 29.637-2.482-6.87.156-9.35-4.672-17.393 1.483 12.572 2.478 24.84.736 35.477-1.107-6.497-2.486-12.578-4.888-17.133 4.456 13.198 2.108 22.143 1.73 32.319l-4.931-16.873c1.866 24.645-2.858 31.3-5.105 44.779l-2.206-16.138c1.443 8.666-3.386 15.246-7.613 22.022l-3.071-3.635a109.897 109.897 0 0 1-3.331 20.248l-1.471-13.974c1.122-5.302 2.13-11.01 3.244-16.354l5.364-18.864-1.946-10.037-9.3-10.773 9.56-19.296 1.47-9.302-1.47-18.604-5.624-9.301-3.677-11.033-.736-13.715-2.941-8.307-.476-15.185-5.883-9.778-9.776-11.725-1.73-14.97 2.941-8.047z" fill="#4b342e"/><path d="M33.719 244.302c-36.536 27.908-72.82 59.244-107.424 113.56l-32.79 49.927 27.652-38.424 25.204-23.006c6.534-7.861 14.867-13.474 19.086-24.23-3.321 3.064-6.224 6.966-10.767 7.588C-27.65 305.29-.585 282.417 11.94 270l24.47-22.761c-5.985 8.147-11.096 16.586-20.8 23.495 5.925 1.249 6.418-.959 8.81-1.958 11.825-8.077 20.192-17.885 29.609-27.166z" fill="#b3f5f2"/><path d="M241.626 72.484c-45.981-4.138-74.699 5.05-99.664 17.133l84.957-5.884z" fill="#365c5b"/><path d="M200.705 90.136c.28-1.993-2.69-2.219-2.163-4.326.41-1.638 6.457-1.573 7.7-.952.56.28-1.98 2.288-1.817 2.942.482 1.93-1.204 5.784-3.114 6.057-1.128.161-2.67-.207-2.163-1.73.274-.824 1.104-1.236 1.557-1.99z" fill="#8caf9e"/><path d="M278.006 165.763c3.164.367 2.147 5.205 1.557 7.355-1.681 2.552-.997 5.833.476 8.307 1.544 3.684 1.084 7.823 1.168 11.724-.202 5.926-.507 11.856-.649 17.782-.237 4.165-3.036 8.029-7.05 9.302-3.824 1.467-7.987 1.25-11.983 1.557-1.49.874-4.331 1-4.542-.649-3.334.303-2.622-2.258-1.947-4.672-4.121.084-11.251-2.107-13.063 2.942-1.33 4.802-7.66 3.331-11.507 3.98.52-6.382-8.26-.466-7.267-5.538-2.301.703-4.957-2.418-6.402-.346-4.62-1.286-9.588-1.175-14.189.606-4.388.862-7.425 4.436-11.766 5.278-1.172 3.807-4.034 4.525-7.656 4.716-4.337 3.517-7.996-.476-11.983-1.211-4.495 1.762-6.274-3.051-10.468-1.125-4.162 2.068-7.9 4.436-12.89 3.894-5.827 2.617-1.637-4.097.432-5.928 4.24-.703 5.393-4.64 8.392-7.009 3.48-2.46 7.018-5.474 11.247-6.36 4.823-1.196 7.121-6.298 11.81-7.7 5.005-2.211 9.518-4.885 13.755-8.264 4.054-1.916 7.689-4.647 11.723-6.62 6-1.956 10.31-6.652 15.4-9.95 4.506-1.289 7.154-6.157 12.111-6.23 4.177.083 7.669-2.232 11.55-3.289 1.899.014 2.786.854 3.158 2.077 4.534-.702 9.215-.74 13.583-2.293 5.596-1.208 11.254-2.373 17-2.336z" fill="#273534"/><path d="M206.355 187.093c2.636-.537 5.39-.265 8.011.126 2.172 1.046 4.037 3.055 3.44 5.637 1.91.165 4.06-2.173 6.375-1.522 1.755 2.04-2.616 3.273-4.068 4.136-3.08 1.399-6.105 2.95-8.815 4.983-2.3 1.318-4.534 2.796-7.155 3.375-2.452.875-4.692 2.24-7.204 2.97-2.252.975-4.01 2.877-6.428 3.541-2.723 1.479-5.905.444-8.815.952-.633-.397 2.835-2.885.16-2.624 1.678-2.299 5.359-3.178 6.024-6.4-1.674.809-4.065 3.035-5.778 2.332 1.359-3.912 5.441-5.832 7.944-8.907 2.176-1.935 4.203-4.099 6.953-5.23 2.954-1.413 5.88-4.028 9.356-3.369z" fill="#264446"/><path d="M262.303 196.134c.546-.543.778-.347 1.125.174 2.47 3.705-7.069 8.55-9.43 10.123-.405.27-.387-.01-.692.174-1.046.627-2.054 1.416-3.201 1.99-1.353.676-.514-2.412-.779-2.942-.033-.067-.409.027-.519 0-1.522-.38-1.904.779-3.2 1.298-.474.189.013-1.65-.866-1.298-.215.086-.397.414-.606.519-1.762.881-4.12 1.87-5.537 3.288-1.17 1.17-2.662 2.61-4.325 2.942-1.612.322.016-5.072-.087-5.278-.142-.284-2.597 1.529-2.941 1.644-1.072.357-1.494-1.254-1.817-1.039-.713.476-1.607 1.283-2.423 1.385-.628.079-3.807 1.989-3.893 1.904-.295-.296-.688-1.903-.692-1.904-.314-.105-.915.788-1.298.692-.806-.201-1.68-2.39-2.681-1.99-.71.284-1.23.871-1.99 1.125-1.735.578-1.292-.486-3.807.952-1.261.72-2.043 1.848-3.115 2.682-1.334 1.038-2.793 1.901-4.239 2.769-.21.127-.888-.911-.951-1.038-.22-.44-.894-.302-1.212-.78-.065-.097-.324-1.283-.692-1.038-.275.184-.597.672-.865.78-1.489.595-3.342.215-4.931.692-.795.238-3.267 2.518-4.326 2.941-.679.272-3.042.707-3.46 1.125-.627.627-2.31 1.337-2.769 2.164-.07.126.04.294 0 .432-.165.577-2.078 1.905-2.509 2.163-.773.464-1.948.629-2.595.952-.738.37-5.357-.03-6.489.346-.374.125-.58.502-.865.693-.542.36-1.782.282-2.423.346-.048.005-1.335-.097-1.384 0-.223.446-2.222 1.355-3.028.952-.458-.23.26-1.19.26-1.385 0-.21 3.212-.593 3.893-.779.993-.27 2.215-.702 2.855-1.47.224-.27.274-.58.606-.78.6-.36 1.387-.694 1.99-1.124.252-.181.405-.531.778-.606 1.283-.257 2.32-.925 3.374-1.558 1.652-.99 3.583-1.696 5.19-2.768 1.025-.683 2.006-1.604 2.942-2.423.539-.471 1.413-.72 1.904-1.212.854-.854 1.72-1.175 2.682-1.817.21-.14.353-.54.605-.692.595-.357 1.27-.635 1.904-.952 1.904-.952 3.88-1.711 5.796-2.596 2.115-.976 4.02-2.484 6.23-3.288 1.63-.593 3.148-1.346 4.758-1.99 1.646-.659 3.303-.989 5.017-1.384 2.552-.59 5.079-1.542 7.7-1.818 6.043-.636 12.277-.085 18.341-.692 1.13-.113 2.243-.464 3.374-.606 3.367-.42 6.978-.086 10.382-.086 1.447 0 3.803-.559 4.931.086z" fill="#264446"/><path d="M166.513 216.649c.944-.455 8.078-4.438 9.995-4.942 1.663-.437 11.105-2.482 12.92-1.369 3.725-3.059 3.107-.69 6.245-4.518 3.037-2.042 6.388-3.596 9.132-6.073 3.805-1.758 8-2.776 11.68-4.977 3.892-1.23 8.103-1.542 11.983-3.223 2-1.233 10.098-1.485 7.001 2.44-3.125 2.438 2.521.752 4.035.44 3.304-2.889 9.035-2.117 13.11-2.013 2.667 1.627 4.52 2.764 7.782 1.682 4.531-2.113 4.455 5.573 1.408 6.746-3.049.76-6.411 2.467-9.39 2.301-.225-2.856-2.852-5.302-3.939-1.315-1.935 1.831-6.896 2.565-5.668-1.282-2.957 1.91-9.057 7.093-11.378 1.59-1.981.838-5.432 2.216-8.39 1.756-3.46 1.124-6.3 5.194-10.359 2.745-3.869-1.916-5.503 3.035-8.777 3.778-4.862 1.66-10.605.945-14.645 4.648-3.555 3.057-7.14 6.693-12.043 7.262-3.693.813-6.978 3.427-10.812 3.477.299-3.728 6.539-3.526 8.004-6.517-2.949.41-5.632 2.15-8.873 1.096-4.148-.88-.96-2.143.979-3.732z" fill="#255a60"/><path d="M269.398 217.853c.381-2.652 2.251-4.773 2.597-7.395.283-3.735-1.477-7.112-.926-10.837.947-1.18 3.563-3.126 1.51-4.78-1.372-.532-4.305 1.472-4.798.141 2.898-3.326 6.525-6.025 9.057-9.664-.267-1.832-3.642-1.296-5.034-.83-2.69 1.024-5.182 2.655-7.943 3.426-1.023-2.934 5.254-3.162 3.804-6.267-.085-1.5-.425-3.407-2.439-2.428-3.754 1.3-.696-3.57.841-4.282 2.104-1.692 4.854-2.11 7.148-2.97 1.368-1.687 2.271-4.567 5-4.131 2.785.037 5.727.61 8.294-.832 4.578-1.712 9.207-3.771 14.163-3.93 3.505-.422 2.272 3.925 2.42 6.079-.07 4.253-1.32 8.475-3.827 11.937-2.51 3.945-2.002 8.871-1.587 13.303.327 2.577 1.532 5.331.142 7.81-1.831 3.638-4.969 6.729-8.89 8.009-2.944 1.473-5.598 3.497-8.65 4.786-3.804 1.687-7.667 3.459-11.793 4.173-1.852-.082.451-1.064.91-1.318z" fill="#26585a"/><path d="M296.044 173.377c.858-1.284 2.11-3.813.098-4.652-2.247-.69-4.477.473-6.554 1.149-2.784.045-5.45-1.455-8.245-.803-2.343.23-1.103-2.078.447-2.11 2.981-.978 6.178-1.18 9.063-2.494 3.303-1.153 6.466-3.307 10.106-2.978 1.932.127 3.883.156 5.77-.311 1.934 1.001.399 3.869.33 5.637-.616 2.602-1.949 5.515-4.724 6.343-2.399.755-1.834 3.653-1.632 5.568.46 2.212-2.155 3.18-2.5 5.196-1.22 2.533-2.843 5.154-2.323 8.096.4 3.398 1.522 7.06-.198 10.294-1.098 2.152-2.636 4.074-4.2 5.889-2.393 1.476-5.17 2.656-8.017 2.654-1.724-.487-1.95-2.794-1.935-4.343.149-2.91 1.854-5.381 2.896-8.01-.097-2.257-3.442.75-4.713-.573-.407-1.654.992-3.156 1.84-4.47.902-1.5 3.945-3.624 2.033-5.372-.656-.457-2.784.775-1.468-.65 1.517-1.773 4.153-2.814 4.467-5.4 1.204-2.21-3.716-.827-1.24-2.047 1.745-.787 2.588-2.367 2.675-4.234.788-2.502 3.762-3.15 5.244-5.074-.33-1.867.38-3.45 2.315-3.874 1.35-1.898 4.42-1.122 4.037 1.431.165 1.836.499 4.024-1.03 5.414-.646.941-2.979 2.49-2.43.328l-.058-.302-.054-.302z" fill="#333835"/><path d="M303.138 164.032c7.38-1.502 15.864-1.05 21.874 3.974 1.216 1.85 4.26 1.928 4.818 4.177-1.055 2.41-4.424 2.563-6.331 4.183-4.06 2.807-7.697 6.532-12.609 7.816-4.1 1.225-7.725 3.69-10.909 6.49-1.37 1.894-2.404 4.006-4.366 5.472-3.36 3.513-7.91 5.448-11.843 8.205-2.015 1.168-3.927 2.567-5.723 3.986 2.377-2.332 5.757-3.644 7.489-6.655.659-2.094 5.498-4.586 2.492-6.518-2.898-.168-2.595-3.453-1.234-5.229 1.037-1.814 1.584-4.565 4.173-4.502 2.595.257 4.327-3.547 1.116-4.027-2.407-1.173-.213-3.52.742-4.821-1.15-2.463.946-4.93 3.58-4.09 3.47.556-.343-4.538 3.142-4.152 1.533-.727 1.759-2.998 3.383-3.996l.206-.313z" fill="#352725"/><path d="M232.802 103.721c-.202-1.368.982-1.738 1.99-1.99 3.168-.792 5.269 3.38 2.422 5.278-1.863 1.243-6.599-1.1-4.412-3.288z" fill="#60847b"/><path d="M310.406 88.579c-6.473-4.641-39.494-19.937-87.12-17.047-.345.516-.894 5.734-.952 6.317-.101 1.007-.243 2.215.086 3.202 1.185 3.555 6.16 7.031 8.479 10.124.384.512.413 1.133.778 1.644.172.24.517.503.692.778.66 1.037.562 2.596 1.125 3.721 1.056 2.113 1.992 4.266 2.942 6.403 2.584 5.816 11.986 4.873 17.216 4.5 3.533-.253 7.104.11 10.641-.087 1.97-.11 3.933-.324 5.883-.519 1.78-.178 3.595-.007 5.364-.26.946-.135 8.728-.163 9.17-.605 1.925-1.925 1.434-5.224 2.51-7.615 2.344-5.21 7.56-7.719 12.977-8.653 2.984-.514 7.423-1.439 10.209-1.903z" fill="#365c5b"/><path d="M237.993 86.718c-.056-.363-.618-1.64.043-1.86.164-.055.477-.174.606-.303.12-.12-.016-.464.173-.606.853-.64 2.45-.379 3.417-.476.895-.089 2.113-.269 3.028-.086.745.149.529 1.268 1.341 1.384.558.08 2.079-.294 2.336.476.246.74-1.925 3.32-2.466 3.591-.067.034-.41.191-.432.26-.401 1.202-1.47 2.41-2.769 2.596-2.134.305-3.391-1.555-4.282-3.159-.25-.448-.457-2.14-.995-1.817zm-5.71-8.35c-.065-2.337-.516-2.51 1.557-3.547 1.356-.679 3.646.37 4.931.692 1.078.27 1.522-.727 2.423-.952 1.03-.258 1.462 2.604.865 3.202-.246.245-.62.676-.952.865-.552.315-10.017 3.318-8.824-.26zm3.201 20.594c-.682-.776-1.916-3.684-.692-4.5.64-.426 1.708.066 2.422-.172.535-.179 3.209-2.228 3.634-.952.599 1.798-2.886 3.343-1.73 4.5 1.575 1.575 3.135-.202 3.633 3.287.029.2.235.928.087 1.125-.348.464-1.344.433-1.904.433-1.667 0-3.52-.206-4.325-1.817-.134-.266-.138-.657-.346-.865-.445-.445-.624-.261-.78-1.039zm28.031-14.71V83.3c0-2.512 2.565-4.066 4.844-4.066.033 0 .586-.04.606 0 .386.772 1.29.937 1.73 1.817.945 1.89 1.162 5.332 0 7.268-1.244 2.074-5.044.757-5.796-1.125-.4-.998-.824-2.008-1.384-2.942z" fill="#426e67"/><path d="M246.644 95.847c-.795-.255-1.224-1.051-1.73-1.557-2.274-2.274 3.684-2.46 4.066-2.077.406.405.725.737 1.298.952.738.277 1.82.526 2.076 1.298.789 2.366-6.575 2.388-6.575 1.73 0-.322.733-.324.865-.346zm5.105 6.49c-.328-2.324.623-3.747 1.816-5.538.33-.493-.07-1.4.347-1.817.778-.779 5.898-.799 6.488.086.972 1.459.15 4.533-.173 6.144-.353 1.763-2.633 2.82-3.201 4.24-.135.337-.634 1.413-.865 1.47-.824.207-1.814.346-2.596.607-1.915.638-1.903-.394-1.903-2.164 0-1.016-.247-2.026.087-3.028z" fill="#518575"/><path d="M252.102 101.498c1.523-5.711 2.98-5.24 4.64-1.022.292.74.725.734.965 1.75.246 1.039.162 2.882.184 4.085.016.838.039 3.483-.138 4.23-.09.386-.252.195-.367.438-1.694 3.584-6.238-1.908-5.284-9.482z" fill="#45746c"/><path d="M240.124 83.568c.823-.83 1.44-1.858 2.752-1.53.837.21 1.155.482 1.836 1.163.675.675 1.827.181 2.57.367 1.148.287-1.52 1.325-1.591 1.468-.077.154-.488.015-.673.061-.88.22-4.801.623-5.567.367-1.667-.555.058-1.896.673-1.896z" fill="#4b766d"/><path d="M263.514 93.03c8.055-1.304 3.89 4.49.285 3.576-1.718-.435-2.406-3.172-.285-3.576z" fill="#4d6568"/><path d="M254.604 91.607c-.438-.256-1.45-1.828-.606-2.25.62-.31 1.472-.951 2.163-.951 4.768 0 2.33 6.054-.952 4.413-.14-.07-.436-1-.605-1.212z" fill="#5d786c"/><path d="M236.575 101.311c-.298-.993.748-1.461 1.591-1.04.243.122.408.51.612.612.406.203 1.09-.02 1.346.49.651 1.303-.23 1.986-1.53 2.202-1.045.175-1.957.819-1.957-1.223 0-.41-.258-.55-.062-1.04z" fill="#3c6660"/><path d="M237.906 104.067c-.048-1.094 1.306-2.076 2.336-2.076.489 0 .982-.029 1.384.173.661.33 3.444 3.842 3.028 4.672-.12.24-.467.215-.692.26-.846.17-1.925.492-2.855.26-1.317-.33-3.394-2.321-3.2-3.289z" fill="#4b7c6e"/><path d="M245.874 96.233c.582-.511 1.246-.49 2.019-.49 1.567 0 2.44.59 2.814 1.714.06.18.158.576 0 .734-.566.566-2.509-.061-3.12-.367-.312-.156-4.447.287-3.059-1.101.352-.352.872-.205 1.346-.49z" fill="#3a726f"/><path d="M249.413 98.27c.185-.725-.325-1.979.086-2.596.26-.39 1.03-.346 1.471-.346 2.853 0 2.597-.082 3.547 2.769.109.326.334.981.173 1.384-.624 1.56-3.117 2.076-4.672 1.558-.68-.227-.951-1.439-.951-1.99 0-.284.6-.652.346-.779-.173-.087-.173.346 0 0z" fill="#476f67"/><path d="M299.844 85.507c1.682-.01 3.194.105 4.31.402 2.122.565 4.355 1.408 6.684 2.413-.27 1.087-.95 2.209-2.199 3.395-8.305 1.378-13.465 7.872-19.173 13.494-1.38 1.25-2.88 1.94-4.353 2.145-.475-.742-.836-1.588-1.056-2.145-.088-.225-.113-.785-.263-.938-1.08-1.098-3.91-1.41-4.574-2.592-.356-.632-.088-2.128-.088-2.86 0-1.112.34-1.99.616-3.038.272-1.035.45-2.16 1.055-3.083.812-1.236 2.793-2.875 4.002-3.753.485-.352 1.018-.485 1.495-.849 1.931-1.322 8.5-2.56 13.544-2.591z" fill="#334c4d"/><path d="M256.853 104.414c-1.033-3.434-.152-5.852 3.028-7.442.262-.13.654-.491.952-.26.564.44 1.278 1.184 1.47 1.904.56 2.098.503 6.896-2.249 7.355-1.57.262-1.8-1.557-3.201-1.557zm32.273-15.36a11.978 11.978 0 0 1-1.39-2.033c-.693-1.251-1.33-2.452-.733-3.782.077-.17.535-.285.805-.285 2.206 0 2.663.793 3.66 1.79.774.774 1.232 2.41.878 3.293-.353.882-1.93 1.733-3.22 1.017z" fill="#3a464c"/><path d="M310.579 88.146c14.316 6.078 31.293 18.991 34.562 20.854.167.1.178.35.26.432.17.171.535.273.735.39-3.358-.672-6.927-.2-10.382-.693-.66-.094-1.153-.346-1.773-.519-1.91-.53-4.013-.993-5.97-1.254-.65-.087-1.17-.407-1.816-.52-3.869-.673-7.718-.735-11.637-.735-1.353 0-2.718-.112-4.066 0-.907.075-2.075.144-2.941.433-1.695.565-3.171 1.682-4.888 2.163-1.927.54-4.311.216-6.273.216-1.478 0-2.98.092-4.455 0-.706-.044-1.361-.314-2.033-.433-1.07-.188-2.204-.215-3.245-.562-.504-.168-.976-.714-1.384-1.341 1.45-.198 2.925-.867 4.283-2.077 5.614-5.444 10.69-11.732 18.86-13.066 1.228-1.149 1.896-2.235 2.163-3.288z" fill="#2f393c"/><path d="M275.98 122.74c-.056-.808-.292-1.897.155-2.644.502-.836 1.632-1.118 2.255-1.866.943-1.132 1.557-2.59 2.41-3.81.56-.801 1.444-1.343 1.944-2.178.71-1.182 1.427-4.569 1.711-5.988.118-.592-.29-1.81.156-2.256.436-.436 5.191-.165 6.064-.31 1.895-.316 3.746-.39 5.676-.39.608 0 1.475-.338 2.022-.155.384.128 1.252.161 1.555.389 1.526 1.145 1.384 2.895 1.089 4.666-.094.564.199 1.335 0 1.866-1.089 2.904-8.017 5.14-10.264 7.388-.963.963-1.19 2.29-1.944 3.422-.264.396-2.04 1.147-2.255 1.789-.393 1.18.083 2.468-.233 3.732-.254 1.018-4.347 2.1-5.443 2.256-1.377.196-2.92-.116-4.276.155-.237.048-.962.336-1.166.233-.277-.138.238-5.686.544-6.299z" fill="#333834"/><path d="M263.125 107.42c-1.046-1.773-.572-4.873 1.536-4.563 4.38-.177 8.77.115 13.155.117 3.011-.031 6.236.28 8.76 2.61.933 2.17.906 4.867.648 7.244-.855 2.526-3.038 3.544-4.736 4.943-1.858 1.296-3.863-.061-5.727-.537-1.78-.886-3.767-.95-5.552-1.886-1.66-1.18-3.8.543-5.2-1.25-1.547-1.833-1.71-4.65-2.884-6.677z" fill="#474f42"/><path d="M337.33 110c-1.272-5.188-7.366-3.104-10.899-4.33-3.491-2.771-7.692-2.767-11.88-2.705-3.885-.98-7.96-.723-11.29 1.69-4.266.16-7.837 1.512-6.407 6.703-1.02 3.413-6.317 1.743-7.246 6.056-3.23 1.63-6.907 6.63-1.014 7.535 5.114-.241 10.313.928 15.498.417 6.547-.263 12.96-1.772 19.524-1.771 7.406-.476 10.104-8.393 13.715-13.595z" fill="#25292a"/><path d="M335.884 113.153c-1.237-1.548-2.856-4.228-4.968-4.29-1.075.048-1.242.336-1.44 1.27-.586 2.173-1.905 3.776-3.085.37-1.026-3.349-4.771-4.237-7.832-4.567-2.373.363-4.027 2.8-6.198-.025-2.744-1.78-7.107-1.026-6.699 2.44-2.095-.245-7.103-3.545-6.152 1.078 1.076 2.305.453 9.302-3.134 6.58-3.302-1.933-2.17 4.853-5.77 3.94-2.78 1.227-3.334 4.744.58 3.677 3.495.804 6.972-.33 10.489-.124 4.91-.254 9.8-.817 14.724-.51 2.91.015 5.805-.388 8.65-.852 2.71-1.89 7.34-1.02 8.703-4.443.597-1.55.713-3.46 2.132-4.544z" fill="#4f3117"/><path d="M241.972 95.847c-.26-2.064 4.222-3.185 4.759-1.038 1.065 4.262-7.715 2.22-4.759 1.038z" fill="#528376"/><path d="M250.279 103.086c-.19-.551 1.16-3.613 2.08-2.692 1.327 1.327 1.138 4.98-.245 6.363-.738.738-1.671.697-2.63.857-.313.052-2.546.287-2.753.183-1.845-.922 4.124-7.595 3.548-4.711z" fill="#3a726f"/><path d="M243.53 106.144c-2.359-.562-2.25-3.871-2.25-5.797 0-.283-.14-1.063 0-1.298.887-1.478 3.042-2.164 4.672-2.164 1.283 0 2.124.01 3.288.433.568.207 1.093.315 1.557.779 1.063 1.063 1.793 4.696.606 5.884-1.532 1.531-5.823 4.624-7.873 2.163z" fill="#3b857f"/><path d="M339.41 114.222c-1.854-.611-4.937-1.6-4.281-4.222.06-.24.283-.483.367-.734.276-.829.696-1.966 1.59-2.264 1.87-.624 4.524.182 6.24.918.438.187.849.68 1.285.917.682.373 1.376.465 2.019.98.418.334.922.553 1.345.856.157.112.17.353.306.49.222.22.725.604.979.795 1.894 1.42 5.61 3.931 6.485 6.118.1.25.428.368.55.612.455.91 1.078 1.658.857 2.876-.204 1.12-1.196 2.225-1.836 3.12-.724 1.015-2.077 3.507-3.303 3.916-.612.204-1.846-.131-2.325-.55-.082-.073-.057-.218-.122-.306-.46-.633-1.262-1.035-1.59-1.775-.418-.94-.548-1.786-1.224-2.63-.796-.996-1.858-1.572-2.692-2.51-.889-1-1.459-2.237-2.263-3.242-.68-.85-2.017-2.259-2.386-3.365z" fill="#25292a"/><path d="M340.818 120.934c-1.073-.822-1.439-2.59-2.447-3.482-.577-.51-1.075-1.283-1.59-1.935-.483-.61-.469-2.046-1.893-3.633.014-.034 1.341.134 1.464.151.656.092 2.002.498 2.57.929.406.308.753.865 1.162 1.16 1.126.814 2.417 1.766 3.242 3.019.266.404.745 1.052.857 1.547.178.79 1.395 6.303-.184 5.804-.895-.283-2.398-3.362-3.181-3.56z" fill="#241c1c"/><path d="M341.001 115.935c.168-.784 1.059-.968 1.729-1.103.997-.248 1.903-.827 2.95-.886.852-.12 1.734-.11 2.567.124.716.537 1.624.705 2.392 1.147 1.213.492 2.588 1.148 3.006 2.5.614 1.576.501 3.309.244 4.945-.088.73-.077 1.574-.604 2.144-.813.724-1.923.946-2.946 1.21a5.793 5.793 0 0 1-4.47-.893c-.234-.241-.875-.964-.777-.18.177.344 0 1.07-.282.403-.763-1.227-1.506-2.478-1.972-3.854-.364-.873-.968-1.631-1.234-2.55-.246-.707-.39-1.444-.66-2.143-.127-.315.028-.82.057-.864z" fill="#292329"/><path d="M341.43 120.585c-1.525-2.974-3.513-5.408-5.614-7.678-.444-.334-.962-.51-1.47-.652-.54.046-.467.8-.372 1.23a8.96 8.96 0 0 0 1.208 3.347c.497.856 1.051 1.683 1.356 2.66.2.57.429 1.128.678 1.67.237.814.077 1.717.39 2.509.487.368.776-.517 1.039-.858.3-.565.72-1.07 1.278-1.296.522-.263 1.099-.452 1.507-.932z" fill="#4f3117"/><path d="M343.607 135.812c-1.065-5.727-2.667-10.293-5.428-16.7-1.546-3.587-2.89-6.139-6.139-8.393-.874-.763-1.122-.307-1.68.416-.474.884-.648 2.074-.662 3.445.422 4.22-.53 3.11-1.155.841-1.027-2.672-3.004-5.24-7.425-7.647-2.57-1.55-2.439-.963-2.8 1.4-.117 1.626.465 5.086-.899 2.865-1.334-1.692-3.31-3.579-6.535-5.725-4.725-3.849-2.9-.117-1.714 5.398.327 3.135.37 3.693-1.745.27-1.455-2.132-3.706-3.87-7.1-5.33-.612-.194-.393.254-.444.286 1.852 5.434 1.565 10.255 1.073 13.95-1.586-1.752-3.069-3.565-6.476-4.224l2.816 6.477c-3.644-.811-6.476-3.45-12.951 2.111l5.771 1.972c-10.386-.558-18.592 1.187-22.241 7.743 2.715 3.793 3.99 8.883 2.956 16.05 12.68.304 27.438 5.114 33.785-8.306 2.062 2.096 3.505 4.935 7.32 4.928z" fill="#e26c17"/><path d="M268.264 135.208c-1.047.085-2.435.03-2.758-1.216-.25-.93-1.34-2.266-.42-3.076.847-.452 1.938-.418 2.613-1.192.888-.872 1.64-2.095 3.001-2.229 1.926-.382 3.93-.354 5.868-.071 1.268-.09 1.086 1.302.054 1.55-1.47.718-3.507.607-4.448 2.16-.338 1.098-1.314 1.606-2.052 2.355-.483.7-.804 1.792-1.858 1.72z" fill="#271a14"/><path d="M276.156 128.723c-1.11.033-1.554-1.838-.46-2.229 1.406-.896 3.21-.115 4.628-.957.993-.043 1.896-.424 2.84-.651 1.619-.127 3.382-.461 4.847.449.823.675 1.742 1.181 2.614 1.782.923.23 2.217 1.319.667 1.784-1.524.25-3.065-.223-4.586-.293-3.038.274-6.084.402-9.132.475-.475.014-1.146.158-1.418-.36z" fill="#492a1d"/><path d="M338.432 130.497c-.577-1.13-.776-9.448-.245-10.157.205-.273.566-.58.796-.734.186-.125 1.589-.245 1.774-.184.353.118.714.436.979.612.17.113.949.13 1.162.184 1.022.255 2.17-.314 3.18-.061.715.178 1.045 1.103 1.591 1.468.507.337.936.43 1.469.734 1.146.656 2.462 2.29 2.324 3.671-.027.277-3.529 4.836-3.854 5.323-1.473 2.21-.954 3.61-3.303 5.568-.232.194-.403.607-.734.673-.825.165-1.468-.166-2.141-.55-2.103-1.202-1.652-2.264-2.325-4.283-.27-.808-.673-1.393-.673-2.264z" fill="#1c1816"/><path d="M338.31 126.581c.61-4.075-2.167-7.517-3.016-11.32-.046-1.887-3.263-4.5-4.049-2.865-.281.586.075 1.517.048 1.913.345 1.689-.315 4.977-2.65 3.422-1.313-1.543-1.997-3.65-4.041-4.482-1.72-1.942-4.43-1.493-4.415 1.237-1.272 1.972-2.852-1.855-4.593-1.554-2.105.71.182 3.56-.45 5.212.107 2.218-3.97 1.799-4.27-.116-.618-1.629-2.414-4.147-4.382-3.365-1.152 1.55 1.24 3.473-.107 4.991-1.956 1.463-3.606-1.748-5.56-1.205-1.047 1.236-.958 4.159-3.473 3.094-1.656-.578-3.866-.21-3.912 1.903-1.123 1.717.476 3.602 2.365 2.746 2.865-.05 5.707.47 8.576.454 3.533 0 7.01.65 10.527.85 3.697.18 7.459.315 11.066-.677 1.854-.5 3.741-1.072 5.685-.739 2.244.214 4.606 1.551 6.678 1.15-.074-.014.046-.634-.027-.649z" fill="#ee7c27"/><path d="M336.509 122.07c-.342-.438-.802-3.435-1.493-3.435-.263 0 .437 1.595-.581.836-.726-.542-1.455-.764-2.323-.279-.168.095.278 1.443-.249 1.207-.322-.144-1.958-2.171-1.99-2.135-.324.362 1.53 3.693-.332 4.735-.452.253-.917-1.403-.995-1.578-.043-.096-.267 1.651-1.245.557-.308-.346-.634-.617-.912-.929-.107-.12-.367-1.021-.498-1.021-.128 0 .327 1.12.083 1.393-.412.46-1.282-.279-1.659-.279-.546 0-.348 1.012-1.327.464-.88-.492-1.521-1.61-2.157-2.32-.048-.054.842 1.443.498 2.599-.173.579-.784.278-1.161.278-.308 0-.201.743-.747.743-.236 0-.664-.543-.664-.279 0 .105-.014.376-.331.465-.846.236-.77-.929-1.162-.929-.008 0 .052.76-.083.836-.227.127-3.56-.282-4.23.093-.029.016-.598.855-.664.928-.113.127-.508-1.613-.912-2.97-.078-.263-.16 3.434-.58 3.434-.068 0-2.157-4.084-2.157-2.506 0 .375-.788-1.207-.996-1.207-.05 0 .136.483-.166.371-.643-.24-1.588-1.018-2.24-.836-.436.123-1.008-.077-1.326.279-.388.434.01 1.065-.913.836-.47-.117-1.188-1.486-1.41-1.486-.043 0-.143 1.553-.664 2.135-.142.16-.548-.12-.663-.185-.135-.076-.175.698-.415.742-.568.106-1.168-.646-1.659-.37-.267.148-.639.807-.912 1.113-.38.425-1.45-.557-1.825-.557-.195 0-.747 1.787-.747 1.486 0-.571-2.232.936-1.493 1.763.888.994 4.09-1.213 5.06-1.485.501-.14 1.095.093 1.576.093.76 0 1.692.08 2.406-.186.602-.224 2.572-2.227 3.318-1.392 2.597 2.907 4.731 3.62 8.71 2.506.61-.17.971-.641 1.492-.835.983-.367 1.91.649 2.904.278 1.092-.407 2.302-.244 3.483-.464.648-.12.995-.557 1.494-.836.287-.16.855.021 1.16-.092 2.307-.86 4.391 1.61 6.056 1.3 1.838-.344 2.197-2.089 3.567-2.6.658-.246 1.363-.12 2.074-.279z" opacity=".978" fill="#c2511a"/><path d="M340.023 132.577c-2.341-1.376-.699-4.487-1.965-6.464-1.036-2.052-1.856-4.542-3.834-5.857-2.395-1.002-2.077 1.998-2.742 3.288-1.683 2.2-3.716-.198-5.376-.98-2.69-1.063-4.95 1.295-7.46 1.785-1.716.518-3.367-1.355-4.97-.089-1.481 1.517-4.098 2.141-5.353-.014-.4-1.989-2.67-4.477-4.57-2.405-.98 1.802-3.918.61-5.15 2.393-2.316-.142-4.73.177-6.227 2.061-2.128 1.134-1.24 3.43.764 3.916 2.192 1.336 4.821 1.984 7.372 1.567 5.164-.185 10.357-.206 15.482.522 5.139.473 10.303.61 15.449.973 2.875-.007 5.714-.544 8.58-.696z" fill="#8b2e1f"/><path d="M336.343 126.228c-.052-.13-.498-.788-.498-.746 0 .067-.027.609.083.83.16.32.028.755-.249.663-.464-.155-.65-1.424-.995-1.078-.218.217.355 2.127-.415 1.742-.214-.107-.823-1.079-.83-1.079-.034 0 .225 2.675-.829 2.323-.49-.163-.036-1.742-.58-1.742-.016 0-.228.89-.332.996-.563.562-.712-.083-1.162-.083-.421 0-.2 1.05-.995.415-.914-.732-1.54-1.853-1.99-2.904-.136-.315.092-.996-.25-.996-.157 0-.083 1.9-.083 2.24 0 .255-.27-.466-.497-.58-.18-.09-.076.4-.166.58-.138.276-.535-.064-.664 0-.208.104.088.527-.249.415-.274-.091-1.176-.693-1.244-.83 0-.003-.419.585-.498.664-.336.336-1.004-.46-1.244-.58-.208-.104-.535.165-.746.165-.318 0-.386-1.132-.581-1.327-.212-.212.192 1.605-.249 1.825-1.537.769.06-.64-1.244.664-.229.228-.815-.347-.996-.166-.06.06-.345.698-.414.664-.285-.143-1.22-1.245-1.328-1.245-.395 0-.152.778-.248 1.162-.093.369-.473-.154-.498-.166-.005-.004-.26.462-.332.497-.333.167-2.753-2.24-2.986-2.24-.17 0-.083.725-.083.83 0 .168-.251.498-.083.498.464 0-.887.561-1.327.415-.472-.158-1.07-1.328-1.327-1.328-.177 0-.241.367-.415.332-.437-.087-1.297-.664-1.576-.664-.02 0-.294.373-.664.25-.525-.176-1.522-1.245-1.907-1.245-.014 0 .206 2.514-1.162 2.24-.389-.078-.495-.296-.912-.415-.096-.027-.077-.293-.166-.249-.392.196-.212.621-.83.498-.432-.087-.999-.83-1.327-.83-.023 0-.482.68-1.078.581-1.291-.215-2.24-1.523-2.24-1.327 0 .91-.826.371-1.41.663-.792.396-1.059 1.26-1.908 1.826-.456.304-1.552-.522-1.576-.498-.79.79.691 1.207 1.41 1.327.836.14 1.502.473 2.323.747 1.523.508 5.595-.013 7.382.498 2.183.623 5.02.078 7.3.331 6.386.71 13.262.474 19.659-.165 1.961-.197 4.06.312 5.972-.166.19-.048.955-.126 1.079-.25 1.047-1.823.602-.668.633.247.266-1.952-1.842-2.714-2.458-4.229z" opacity=".978" fill="#561f1d"/><path d="M342.103 137.288c.27-2.36-1.233-4.445-2.803-6.041.243-1.552-1.032-2.701-2.447-2.957-.27-.05-.422 1.953-.693 1.973-.592.043-1.286-1.76-1.735-1.337-.928.638-1.77-.024-2.8.22-.52.123-1.18 1.433-1.737 1.315-.454-.097-1.148-1.252-1.583-1.368-.424-.112-.894 1.295-1.278 1.028-.676-.447-1.438-1.062-2.237-1.582-.32-.208-.645.823-.973.662-.377-.184-.757-1.55-1.136-1.624-.693-.135-1.382-.04-2.034.44-1.026.546-2.114 1.2-3.262 1.461-.38.013-.787-.586-1.126-.299-.418.354-.761 1.61-1.199 1.655-.546.056-1.207-1.053-1.747-1.018a6.329 6.329 0 0 1-1.717-.44c-.29-.114-.452.977-.731.833-.276-.143-.67-1.52-.934-1.682-.49-.298-.958-.62-1.399-.935-2.45-1.063-4.372 2.762-6.826 1.025-1.982-1.085-5.297-2.108-6.64.412-1.047 1.888.623 3.517 1.673 4.926 1.005 1.351 2.288 2.494 3.77 3.282 2.156 1.874 2.39 4.898 3.593 7.311 1.542 1.779 2.925 4.221 5.409 4.71 4.095.57 8.169-.442 12.062-1.63 2.88-.62 5.887-1.254 8.225-3.176 3.309-2.301 7.19-3.599 10.42-6.028.567-.498 1.317-.669 1.885-1.136z" fill="#2f141d"/><path d="M336.62 138.506c-.63-.532-.675-1.185-1.039-1.73-1.112-1.67.288 2.104-2.335-.52-.228-.228.054 1.18-.174.952-.062-.062-.774-.934-.865-.865-.314.236-.335 1.149-.778 1.038-.811-.203-1.613-1.628-2.336-1.99-.095-.047-.129.777-.173.865-.02.042-.532-.605-.692-.605-.21 0-.341.996-.52.951-1.075-.269-1.653-.44-2.681-1.211-.231-.173-.278.473-.346.52-.37.245-.487-.506-.78-.433-.396.099-.564.928-1.037.692-.308-.154-1.6-.997-1.904-.692-.221.221-1.38.082-1.384.086-.279.28-.14.537-.605.692-.342.114-.758-.252-1.039-.346-.154-.051-.461.23-.346.346.33.33-.928-.082-1.384-.173-.646-.13-1.54-1.644-1.99-1.644-.026 0 .04 1.018 0 1.039-.246.123-.958-.446-1.038-.606a16.456 16.456 0 0 1-.952-2.25c-.032-.099-.173-.364-.173-.26 0 .177.416 3.571-.173 3.375-.418-.14-.824-.998-1.124-1.298-.118-.118.386 2.09-.692 1.73-.261-.086-1.531-2.016-1.558-1.99-.36.361.36 1.803 0 2.164-.266.266-1.135-.457-1.384-.52-.342-.085-.088.522-.26.693-.215.216-.765-.235-.951-.173-.264.088-.06.807-.52.692-.767-.192-1.466-1.73-2.162-1.73-.108 0 .278 1.372.346 1.644.15.597.452 3.254 1.038 3.547.879.44 2.83-1.463 3.634-1.73 2.298-.767 10.046.674 13.15.519 4.977-.25 10.814-.779 15.227-.779z" opacity=".978" fill="#1a171a"/><path d="M304.725 144.482c-.043-1.493-.584-3.062.144-4.498 1.66-1.224 3.486-2.855 5.894-2.585 5.59.432 11.229 1.479 16.836.597 2.93-.408 6.34-.502 8.769 1.197 1.307.71 1.31 2.405.01 3.137-1.336.643-2.748 1.193-4.043 1.921-3.84 1.94-7.451 4.19-11.3 6.113-2.05.94-4.207 1.704-6.386 2.39-1.465.451-3.023.03-4.238-.714-2.65-1.548-5.083-3.754-5.59-6.557a5.646 5.646 0 0 1-.096-1z" fill="#1a171a"/><path d="M266.062 157.235c-.213-2.698 2.094-6.12 4.186-7.33 2.12.823 5.23-.204 7.819-.455 5.13-1.265 15-2.072 18.962-3.282 1.878-1.07 1.727-.56 3.151-2.293.766-.764-2.397-11.391-1.486-11.56 10.568 4.421 4.767 14.26 13.211 15.122 1.921.107.902 1.569-.111 2.155-1.943 1.884-4.315 3.212-6.45 4.845-1.642 1.34-3.761.844-5.687 1.134-4.448.524-8.795 1.805-13.289 1.943-1.888.422-3.729 1.126-5.695 1.07-4.124.236-8.257.111-12.383.271-.982-.12-1.532-1.036-2.228-1.62z" fill="#331c16"/><path d="M269.212 129.565c-.477-.03-1.392-.177-1.3-.822.124-.871 2.658-.54 3.2-.581 1.038-.08 2.18.219 3.011-.445.771-.616 1.049-.122 1.164.222.232.697-2.027.821-2.413.976-.917.366-1.693.77-2.704.77-.319.039-.638-.08-.958-.12z" fill="#2a241b"/><path d="M286.311 127.127a63.211 63.211 0 0 1 3.331.087c1.142.304 2.26.644 3.374 1.038 3.074.777 4.939 3.464 6.748 5.841 2.536 3.198 5.062 6.116 3.957 7.97-3.031 5.092-24.943 9.29-33.324 9.252 1.034-7.167.202-12.564-2.513-16.357 3.193-5.736 9.849-7.78 18.427-7.83z" fill="#553427"/><path d="M271.864 154.909s15.038-2.33 22.636-4.565c7.25-2.133 10.33-5.108 14.372-6.117 4.044-1.01 15.485-2.167 15.485-2.167l1.68 1.327-2.202 2.293-3.934 1.832-2.87 1.36-5.93 2-27.212 10.075z" fill="#231512"/><path d="M289.125 157.174c.672-.173 1.228-.668 1.562-1.265.569-.345 1.031-.87 1.683-1.07 1.03-.52 2.093-1.02 3.24-1.214.615-.433 1.405-.274 2.108-.36 1.121-.01 2.255-.07 3.366.092.502.175 1.347.58 1.168 1.215-.265.611-.925.905-1.492 1.172-.974.344-2.057.294-2.99.77-.537.125-1.112.054-1.619.306-.705.172-1.443.168-2.145.364-.876.17-1.715.56-2.622.53-.443-.017-.85.206-1.296.18-.356-.07-.927.196-1.088-.222-.02-.175.05-.345.125-.498z" fill="#40251a"/><path d="M249.802 120.465c-.255-.207-1.105-.245-1.263-.622-.344-.822.226-2.158.67-2.628.329-.347 1.367.144 1.886.202 1.31.045 2.643-.166 3.966-.088 1.38.103 2.83-.105 4.129.452 1.182.433 2.687.501 3.59-.525 1.437-1.325 2.623-3.309 4.758-3.508 3.16-.458 6.27.606 9.235 1.563 1.403.575 2.793 1.207 4.102 1.972 1.304.938.545 2.95-.94 3.13-1.328.483-3.014.632-3.788 1.987-1.384 1.549-3.642 1.304-5.515 1.267-1.534-.051-3.124.258-4.37 1.187-1.777.651-3.693.187-5.53.35-1.669-.033-3.189-.79-4.664-1.475-1.666-.63-3.064-1.781-4.668-2.542-.512-.282-1.036-.555-1.598-.722z" fill="#42503f"/><path d="M243.53 115.246c-.111-2.142-.77-2.492 1.352-3.671.425-.236 1.132-.806 1.61-.902.601-.12 2.301-.782 2.962-.451.507.254.777.888 1.224 1.224.479.36.993.564 1.288 1.095.326.586.456 1.357.901 1.803.296.296.874.423 1.224.773.238.239 2.329 1.682 1.48 2.318-1.098.825-6.073.444-7.404 0-.748-.249-1.32-.917-1.932-1.223-1.105-.553-3.133.744-2.705-.966z" fill="#537459"/><path d="M224.212 114.582c-1.031.19-3.33-1.558-4.321-2.267-1.131-.808-1.548-2.75-.837-3.993 1.036-1.813 3.094-.935 4.765-1.352 1.493-.374 3.026-1.61 4.572-1.61.398 0 1.112-.342 1.48-.194 1.073.43 1.94 5.017 1.031 5.926-.845.845-2.241.829-3.22 1.48-.336.225.806 1.125.58 1.804-.097.292-.663.387-.901.387-.93 0-1.238-.072-1.997-.451.264.927-2.043-.684-1.764-.22z" fill="#6c9579"/><path d="M232.39 112.54c.02-1.04-1.081-3.13.257-3.8.337-.167.77-.19 1.03-.321.257-.128.445-.633.773-.773.533-.229 1.03-.528 1.546-.837.852-.512 1.686-1.26 2.833-1.031 2.162.997 1.248 2.046 3.542.837h4.25c1.365 0 4.535.977 3.542 2.963-.86 1.718-2.962 1.513-4.443 2.254-.728.364-.8 1.708-1.095 2.448-.599 1.496-2.746 1.618-3.993 1.867-1.403.281-1.209-1.2-2.19-1.481-.61-.174-1.344-.229-1.995-.322-1.166-.167-3.726-.476-4.057-1.803z" fill="#5e856a"/><path d="M220.22 121.493c-.416.375-.839.322-1.353.322-.54 0-1.22.096-1.739-.064-1.034-.318-2.644-2.765-3.928-1.482-.905.905-.366 2.937.644 3.543.397.238 4.545.86 5.087.644.921-.369.302-1.848.837-2.383 0 0 .323-.323.451-.58z" fill="#48634f"/><path d="M222.86 116.276c-1.064-1-2.702-4.01-.451-4.573.385-.096.674.622.901.773.507.338.802 1.013 1.352 1.288.972.486 2.066.858 2.383 2.126.354 1.417-3.317 1.081-4.186.386z" fill="#5b7761"/><path d="M227.698 114.884c-2.442-4.67 3.46-1.473 2.508.432-.337.675-2.508.364-2.508-.432z" fill="#476f67"/><path d="M229.785 111.468c.139-.028.422.068.55-.06 1.843-1.844-1.905-1.712-3.12-1.408-1.324.33-1.77 3.122-.305 3.61 1.87.624 1.646-1.65 2.875-2.142z" fill="#5d7561"/><path d="M249.776 117.738c-.415-.006-1.036-.658-1.7-1.35-1.306-1.36-2.78-3.296-3.194-2.881-.59.59-3.248 2.424-3.863 1.932-.792-.634-3.142-4.654-3.478-4.766-.541-.18-3.362 3.37-3.606 2.963-.086-.144-2.067-3.858-2.576-3.35-.792.793.956 4.491-.257 4.895-1.856.619-4.66-2.523-6.053-3.22-1.057-.528 2.014 3.952 1.159 4.38-1.235.617-3.685-.54-4.25-.258-.208.104.462 3.121.257 3.735-.364 1.094-1.542 1.223-2.447 1.675-.092.046.079.566 0 .644-.627.628-1.44 1.748-1.803 2.834-.025.076 1.568 0 2.963 0 3.117 0 5.608-2.777 8.757-3.092 1.375-.137 3.319-.374 4.637-.901 1.596-.639 3.69.01 5.28-.387 2.093-.523 6.837.639 8.629-.257.699-.35 1.34-1.336 1.545-2.596z" fill="#738573"/><path d="M249.776 120.978c.019-1.78-2.569-1.533-3.22-2.834-.289-.58-.039-1.328-.514-1.803-.012-.011-.997.868-1.288 1.159-.75.749-2.003 1.288-3.091 1.288-3.311 0-5.718-.506-8.243-2.19-.279-.186-1.327 1.717-2.19 1.932-.966.242-2.526.46-3.734.258-.3-.05-.902-.432-.902-.129 0 3.456-5.795 1.4-5.795 4.895 0 .324 3.393.061 3.606 0 3.809-1.088 7.705-1.928 11.59-2.576 1.81-.302 13.536.184 13.781 0z" fill="#4f5649"/><path d="M244.914 120.205c1.33-.503 2.786-.433 4.184-.52 1.361-.018 2.744-.318 4.084.062 1.184.12 2.363.277 3.552.315.734.11 1.423.394 2.171.441 1.044.158 1.598 1.244 1.745 2.193.1 1.012.262 2.13-.271 3.055-.643.885-1.65 1.47-2.678 1.802-.94.305-1.94.213-2.906.365-1.013.151-2.033-.237-2.775-.922-.876-.79-1.576-1.752-2.292-2.682-.277-.534-.557-1.084-1.041-1.467-.65-.55-1.405-.955-2.108-1.43-.44-.293-.962-.401-1.445-.587-.241-.107-.46-.395-.22-.625z" fill="#625d57"/><path d="M215.325 126.967c-.542-1.58-5.432-3.624-6.182-2.125-.257.514.808.89 1.03 1.224.515.771.81 1.566 1.03 2.447.17.674-.136 2.893.452 3.285.107.071 1.075.06 1.159-.064.726-1.09 1.204-2.451 1.932-3.543.228-.342.777-.53.901-.901.048-.144-.203-.228-.322-.322z" fill="#42594b"/><path d="M252.873 127.257c.264-3.942-1.758-6.471-6.015-7.618-11.717-2.227-26.184.854-33.427 10.048-5.674 7.35-8.518 15.837-22.156 15.741 8.472 3.375 18.412 1.755 24.83 12.114l16.178 2.596 1.298-6.749 12.285-20.594z" fill="#3a443c"/><path d="M247.51 125.527c.318-1.948-1.78-2.687-4.672-3.029-11.838-1.02-19.68 4.776-25.42 12.343-2.773 4.452-5.874 8.108-10.397 10.068 4.873 1.845 7.122 3.53 11.63 8.766 1.308 1.517 5.262 4.854 6.71 6.377l6.057.952 4.585-5.192 7.786-11.682z" fill="#3b3a35"/><path d="M229.969 129.824c.14-1.43-1.777-1.914-2.808-1.295-2.577 1.228-6.193 4.79-7.944 7.505-1.456 1.65-3.357 3.333-3.367 5.715-.112 2.333 1.362 4.274 2.246 6.313.552 1.524 1.09 3.204 2.493 4.168.869.894 2.6.292 2.275-1.062.005-3.978-.376-8.048.712-11.929.274-1.053.718-2.069 1.512-2.836.88-.907 1.726-1.85 2.4-2.92.883-1.181 1.682-2.42 2.48-3.66z" fill="#322c2a"/><path d="M260.184 130.718c.62-.019 1.4.105 2.25.476l9.948 6.403-1.297 13.326c-2.436 5.907-5.753 7.473-8.782 8.653-2.178.752-3.265-.52-2.12-2.207.008-.005-.006-.038 0-.043 3.713-2.642 5.523-6.199 5.105-11.465-.318-4.009-2.494-8.658-6.834-12.114-.374-.61-.407-1.304-.087-1.99.143-.553.784-1.006 1.817-1.039z" fill="#706053"/><path d="M271.029 151.157c-1.137 2.63-2.353 4.538-3.635 5.96-.049.016-.053.055-.103.07-2.225.654-5.534 1.022-3.583-1.613.761-1.221 1.527-2.58 2.648-3.085.447-.202 3.515-1.278 4.673-1.332z" fill="#503c33"/><path d="M245.606 163.124c-8.187-1.346-15.875-4.658-23.973-6.379 1.95-3.263 6.094-1.164 8.875-.41 8.653 2.265 19.674-1.773 28.186 1.2 5.918 1.15 8.859-2.734 14.807-.868 3.85 1.16 7.898 1.138 11.862.745 2.517-.162 5.051-.314 7.567-.042-5.461 4.544-12.808 5.152-19.362 7.156-9.421 1.971-19.202 1.572-28.627-.159-.606-.422-.037-1.543.665-1.243z" fill="#40251a"/><path d="M240.848 127.214l-1.428 2.033-.822.693c-5.045 1.148-9.479 3.579-11.03 6.835-3.032 6.364-2.658 9.647.13 14.148 1.655 2.674 4.925 4.58 8.478 5.927l.216.26c-5.315.317-14.452-2.878-15.486-7.485-1.098-3.226-.697-5.526-.26-7.83l.13-.347c3.57-7.077 8.65-13.146 20.072-14.234z" fill="#73686e"/><path d="M235.397 157.975c-1.168-.127-2.364.24-3.512-.11-.491-.072-1.061-.038-1.432-.43-.483-.311-1.04-.488-1.505-.832-.472-.262-.983-.452-1.429-.761-.209-.137-.959-.371-.562-.65.372-.025.746.057 1.12.067 1.197.07 2.394.414 3.593.178 1.317-.253 2.682-.313 4.006-.081.556.082 1 .54 1.165 1.062.15.372.314.817.13 1.204-.357.52-1.057.254-1.574.353z" fill="#534a4b"/><path d="M255.512 127.17c1.055-.891 2.127-1.764 3.133-2.71.655-.538 1.44-.888 2.247-1.12 1.12-.564 2.376-.772 3.62-.776 1.783-.093 3.582-.15 5.36.041 1.217.252 2.527.462 3.472 1.346.797.556 1.862 1.01 2.112 2.049.238.912-.401 1.868-1.307 2.062-1.19.325-2.44.133-3.654.087-2.3-.193-4.612-.253-6.913-.04-1.818.157-3.639.29-5.463.31-.976.08-2.055-.116-2.739-.872-.121-.133-.038-.338.132-.376z" fill="#2e3023"/><path d="M259.222 128.39c1.577.151 3.11-.521 4.356-1.42.724-.453 1.592-.573 2.347-.96.65-.316 1.392-.345 2.103-.32.634.043 1.164.428 1.721.688.59.292.583 1.118.247 1.598-.478.923-1.438 1.432-2.162 2.136-.367.458-.472 1.092-.957 1.464-.483.463-1.18.635-1.84.576-.728.01-1.504-.102-2.084-.571-.684-.385-1.422-.738-1.908-1.372-.58-.632-1.145-1.284-1.823-1.819z" fill="#191923"/><path d="M256.29 127.733c.225-.568.95-.539 1.338-.934.985-.47 1.947-.986 2.924-1.474.562-.253 1.183-.32 1.782-.44 1.148-.171 2.315-.042 3.468-.153.802-.002 1.56.72 1.477 1.544-.037.966-.84 1.777-1.758 1.984-.494.243-.932.613-1.484.725-1.69.607-3.502.73-5.282.78-.51.06-1.137-.014-1.42-.505-.334-.419-.773-.746-1.075-1.191a.481.481 0 0 1 .03-.336z" fill="#181c0d"/><path d="M256.276 134.772c-2.97-6.486 2.833-7.43 4.224-5.395 4.629 3.317 4.909 8.783 6.006 11.555 1.134 2.88 1.391 6.028.909 9.06-.785 3.3-2.465 6.923-5.959 8.179-1.556.84-3.486-.434-2.948-2.181.984-4.257.86-8.666.578-12.988-.54-2.625-1.676-5.086-2.9-7.46a1.098 1.098 0 0 1 .09-.77z" fill="#493e34"/><path d="M259.624 156.79c.244-.836 1.093-1.567 1.507-1.334 1.11.038 1.848.835 2.775 1.243.753.113 1.375.576 2.275.306.801.088 1.749-.023 2.204.733.34.384-.348 1.454-.836 1.515-.857.45-1.693.629-2.329.362-.757-.1-1.674.231-2.395.035-.334-.1-.646-.248-1.023-.254-.948-.107-2.009-.07-2.617-.845-.205-.392.106-1.185.44-1.762z" fill="#32241f"/><path d="M241.873 159.398c-.943-.457-.548-1.871.553-1.417 2.277-.1 4.572-.32 6.838.04 3.15.185 6.3-.031 9.445-.159a9.802 9.802 0 0 1 4.477.982c1.258.428 2.569.016 3.782-.34 1.395-.207 2.876-.31 4.237.101 1.284.787.485 2.296-.926 2.306-3.133.628-19.396 2.001-28.406-1.513z" fill="#211515"/><path d="M257.934 134.136c-2.509-.432-4.473-2.329-7.01-2.731-3.177-1.07-6.508-1.98-9.875-1.722-1.28.1-4.27 1.839-4.675.39 1.866-1.108 3.189-3.223 5.588-3.253 3.436-.033 6.912-.837 10.308.014 3.855.13 3.513.278 6.679 2.36 2.878 2.577 5.718 12.786 3.008 10.264z" fill="#1d1610"/><path d="M256.247 128.036c.619-.003 1.955.747 2.899 1.384 2.405 2.455 4.702 9.866 3.633 10.384-.308-.085-.645-.282-.951-.52l-2.466-3.287c-.022-.061-.068-.11-.087-.173-.317-1.057-.382-2.237-.865-3.202-.459-.918-1.117-1.827-1.687-2.682-.28-.42-1.097-1.274-.735-1.817.053-.08.127-.086.26-.087z" fill="#322921"/><path d="M243.703 126.738c.03.015.057.026.086.043.593.34.06 1.877-.476 2.899a15.92 15.92 0 0 0-2.249 0c-.925.072-2.76.99-3.85.952.23-1.025.879-1.614 1.687-2.423.076-.076.112-.175.173-.26.837-.635 1.744-1.11 2.899-1.124.582-.006 1.146-.049 1.73-.087z" fill="#372f2d"/><path d="M265.305 145.841c-.436-5.485-4.415-12.081-12.542-15.332-8.127-3.25-22.152-.092-25.183 6.272-3.032 6.364-2.689 9.636.1 14.137 2.787 4.502 10.17 6.851 15.726 7.965 5.556 1.114 12.293 1.475 16.325-1.195 4.031-2.67 6.01-6.362 5.574-11.847z" stroke="#000" stroke-width=".2"/><path d="M245.822 129.204c1.472.036 2.894.231 4.24.52 1.583 2.225 2.319 5.107 1.73 8.176.122 5.228-2.72 9.745-6.704 12.336-1.237 6.366-6.037 6.879-14.665 3.542-1.108-.844-2.057-1.776-2.725-2.855-2.788-4.501-3.162-7.784-.13-14.148 2.274-4.772 10.74-7.756 18.254-7.57z" fill="#16131c"/><path d="M240.702 129.174c2.98-.053 6.381 1.181 7.642 4.088.401 1.373.33 2.835.443 4.25-.04 2.29-.849 4.522-2.09 6.431-.687 2.55-3.885 3.55-4.213 6.27.137 2.196-1.696 4.093-3.79 4.458-1.603.301-3.319.07-4.813-.561-1.888-1-2.878-2.986-4.224-4.547-2.96-.43-4.833-3.511-4.753-6.346-.4-3.841 1.603-7.418 3.87-10.357 1.284-2.014 3.864-2.41 6.064-2.46 1.729-.101 3.437-.513 4.99-1.28.268-.098.68-.261.874.054z" fill="#221d2b"/><path d="M240.588 131.194c2.79.286 5.321 2.489 5.71 5.322.155 1.258-.095 2.514-.216 3.764-.74 3.799-4.298 6.753-8.09 7.095-2.992-.095-5.874 1.45-8.867.736-1.032-.267-2.076-.861-2.466-1.904a7.262 7.262 0 0 1-.778-3.115c-.004-.03.003-.057 0-.086-.51-4.492 2.18-7.246 6.186-9.302a20.24 20.24 0 0 1 3.46-1.558 22.564 22.564 0 0 1 3.85-.952c.403-.042.813-.04 1.211 0z" fill="#2e283b"/><path d="M231.937 146.838c-3.357-2.878 1.71-7.001 5.505-5.91 4.4.692 3.028 4.612 2.679 7.16 2.14 3.062-1.265 6.06-4.995 5.147-3.663-.63-3.245-3.969-3.19-6.397z" fill="#2e283b"/><path d="M234.255 135.497c1.584-.978 3.249-1.7 5.028-1.614 1.943.588 3.074 3.75 2.174 6.064-.587 2.356-2.174 4.098-4.037 4.572-1.606.433-3.256.634-4.882.806-1.652-.513-1.92-3.297-1.829-5.154.244-2.74 1.935-3.67 3.546-4.674z" fill="#373046"/><path d="M234.979 143.61c-1.228.59-1.576-.98-1.576-1.867 0-1.165-.09-2.352.414-3.36.48-.959 3.26-2.374 3.775-.83.297.891-.1 2.282-.415 3.07-.172.429-.601.744-.705 1.161-.1.4-.335 2.18-.622 2.323-.304.152-.69-.317-.871-.498z" fill="#453c58"/><path d="M233.57 144.979c.49-2.993 5.804-2.518 4.577.85-.872 1.997-5.332 2.241-4.577-.85z" fill="#fff0ee"/><path d="M233.333 148.277c2.227-3.666 8.74 1.965 3.887 3.615-2.067.646-4.75-1.36-3.887-3.615z" fill="#fff0ee"/><path d="M87.89 202.192c-5.576-3.638-.447-10.496 3.36-13.319 7.017-7.61 28.878-27.263 39.966-29.017 6.856-1.868-.488 14.594-3.32 21.74-4.552 8.586-15.474 8.552-22.908 13.247-5.101 3.308-10.574 8.372-17.098 7.349z" fill="#295c71"/><path d="M151.002 151.226a16.6 16.6 0 0 1 1.558.173c10.278.575 21.667.768 30.15 7.355 3.634 3.046 13.4 3.447 12.151 3.28-4.138-.554-16.55 6.429-20.327 7.19-8.727 2.64-17.725 5.253-26.863 5.84-4.024 4.245-8.859 7.73-12.5 8.783-8.738 3.046-11.828 4.353-20.635 7.139-4.275.23-6.742-.81-4.046-5.512.532-.928 7.145-5.173 7.534-6.097 1.012-2.399-7.386-2.182-5.534-4.34 2.951-3.437 8.778-5.295 11.162-7.578 1.114-1.067-2.074-2.146-1.07-2.648 1.925-1.547 5.727-3.698 10.122-5.581 5.816-3.842 11.054-8.455 18.298-8.004z" fill="#2c4d5e"/><path d="M128.762 175.824c1.155-1.625-5.228.23-3.59-2.38 2.63-4.191 11.983-6.542 13.863-8.208 1.329-1.177-2.434-2.059-1.02-3.136 2.75-2.096 5.89-2.539 8.863-4.281 6.718-2.815 13.487 1.089 19.982 1.318 6.765-.626 10.374 8.882 1.9 9.041-7.497 2.194-14.217 6.547-22.016 7.878-7.094.727-13.034 6.1-20.347 5.59-1.267-1.227 2.416-4.2 2.365-5.822z" fill="#354354"/><path d="M171.748 159.03c5.19-.537 7.498 7.876.978 6.952-6.21 1.613-12.589 3.373-18.949 4.146-3.538.994-13.172-5.943-6.93-7.637 8.162-1.307 17.379-2.054 24.9-3.462z" fill="#545656"/><path d="M219.238 156.302c-10.656-1.147-18.62 2.917-28.576 5.584-6.186 1.658-12.748 2.511-20.132 4.42-6.846 2.206-16.409 3.181-23.27 5.544-1.404.483-.707 1.728-2.06 2.276-6.334 2.657-9.925 4.656-13.955 10.45-.542 2.579-4.333 10.205 1.707 8.202 9.74-1.157 16.554-9.25 24.839-13.708 7.084-4.142 15.84-3.551 23.165-7.264 7.672-2.657 15.393-5.141 22.256-9.626 5.072-3.418 11.066-2.285 16.026-5.878z" fill="#4c6055"/><path d="M32.688 244.143c-1.93-3.656-1.465-10.686.908-14.498 1.387-2.229 4.716-2.986 7.233-4.994 7.757-6.188 15.15-10.24 20.763-12.52 9.021-4.21 18.231-8.057 27.18-12.346 5.596-2.269 12.74-4.518 17.318-4.792-.008 2.125-5.646 4.931-8.764 7.683-6.28 2.95-12.904 5.458-19.178 8.612-10.116 4.46-20.635 7.733-30.593 12.57-5.556 2.102-9.341 21.059-10.919 19.125-1.314-2.791-2.888 4.054-3.948 1.16z" fill="#415866"/><path d="M84.424 203.82c8.52-5.63 18.785-10.94 29.336-15.225 3.174-1.481 9.26-3.326 11.909-5.14 1.916-1.311.096-1.808 2.409-2.717 3.575-1.405 9.34-1.762 12.862-3.45 5.596-2.27 12.827-4.778 17.405-5.053-.008 2.126-5.733 4.153-8.851 6.905-6.28 2.95-12.904 5.458-19.178 8.612-10.116 4.46-20.634 7.733-30.592 12.57-5.556 2.102-14.36 5.743-15.937 3.81l.637-.312z" fill="#415866"/><path d="M126.95 194.864c4.019-.707 7.249-4.628 6.006-6.006-1.066-1.183 4.265-3.199.305-2.031-.835.286-10.726 4.97-11.565 5.245-14.75 4.814-30.11 7.901-43.691 15.735-14.434 6.833-29.568 13.086-41.164 24.433-2.01 14.332-.015 9.997 19.713-1.116 9.994-9.616 23.418-13.718 35.835-19.077 9.854-4.606 20.148-8.262 29.91-12.81 1.764-1.287 4.264-2.115 4.65-4.373z" fill="#464c4c"/><path d="M219.324 156.562c-10.655-1.147-18.878 4.647-28.835 7.315-6.186 1.657-12.698 2.683-20.082 4.592-8.246 2.657-18.709 4.222-26.676 7.447-3.571 1.598-6.37 3.762-9.304 5.408-2.169 1.215-4.607 1.794-6.467 3.485-.542 2.578-1.048 12.74 4.992 10.738 9.74-1.157 16.554-9.25 24.839-13.708 7.084-4.142 15.84-3.551 23.165-7.265 7.672-2.656 15.393-5.14 22.256-9.625 5.072-3.418 11.153-4.794 16.112-8.387z" fill="#7c5a43"/><path d="M131.147 189.688c.254.216.783.449 1.99 1.168 2.809 1.674 11.26-.608 15.919 1.125 4.659 1.733 7.243 5.014 11.117 8.307 3.837 3.262 11.744 11.31 11.896 11.465 0 0-12.661 3.672-26.255 14.01-13.593 10.337-26.433 13.939-26.433 13.939l8.306-8.437c-29.545-4.163-30.75 12.967-48.319 19.167 3.297-4.745 7.571-8.904 9.17-14.667-6.227 5.915-11.925 11.92-20.287 17.479 2.916-4.2 6.524-7.937 8.435-12.807-5.239 2.044-8.366 5.778-11.81 9.26l1.818-6.318c-8.21.64-14.59 8.605-21.802 13.24l-5.061 1.124c1.696-5.587 4.557-9.135 7.743-12.114-2.654-.54-5.559-.755-15.486 8.047.461-2.85-.364-4.843 2.12-9.042 6.09-7.897 12.684-12.257 19.12-17.738 10.32-8.402 20.258-12.05 30.28-16.744l29.674-12.373 14.967-5.625 2.639-2.423z" fill="#fff"/><path d="M153.684 218.805c.651-.062 1.274.096 1.86.433-3.075 1.788-6.364 3.971-9.733 6.533-13.593 10.337-26.43 13.93-26.43 13.93l8.306-8.436c-29.545-4.163-30.75 12.967-48.319 19.167 3.297-4.745 7.571-8.904 9.17-14.667-6.227 5.915-11.925 11.92-20.287 17.479 2.916-4.2 6.524-7.937 8.435-12.807-5.239 2.044-8.366 5.778-11.81 9.26l1.818-6.318c-8.21.64-14.59 8.605-21.802 13.24l-5.061 1.124a25.735 25.735 0 0 1 3.287-6.965c4.467-3.011 10.133-4.157 13.41-8.826 4.933-3.067 11.028-1.354 16.395-2.942 1.734 2.858 5.826-1.611 8.694-.693 3.983-2.802 7.79-8.261 12.978-8.436-.296 2.232-4.949 7.892-1.466 6.345 5.873-2.028 13.4-5.047 17.867-9.038 5.62-3.595 8.364-2.33 13.75.313 6.387 1.3 8.896-5.082 15.46-4.204 3.673.518 10.163-4.175 13.478-4.492zM47.401 242.081c2.356-.004 4.302 1.657 1.254 3.721-.949 1.546-3.297 3.071-5.06 4.283 1.215-1.682 2.56-3.129 3.979-4.456-2.654-.54-5.559-.755-15.486 8.047.312-1.926.051-3.493.605-5.58 3.704-2.398 8.562-3.09 12.372-5.409.704-.407 1.55-.604 2.336-.606z" fill="#f5e3b1"/><path d="M262.928 168.691c.576.074 1.318.338 1.47.49.495.495-.49.14-1.19.14-1.542 0 2.63.174 1.26.42-15.754 1.02-28.652 6.43-43.248 10.99-.242-.242 21.745-9.792 24.913-11.06 1.123-.45 2.137-1.35 3.289-1.68 2.248-.642 12.472-1.52 13.226.49" fill="#7d4d24"/><path d="M267.31 164.111c12.69-1.765 24.462-7.336 36.802-10.295 9.022.834 4.76 8.578-3.073 11.054-14.283 3.51-28.183 4.317-43.91 4.52-17.09 1.458-32.579 9.602-47.543 17.367-10.616 5.949-20.225 13.49-30.359 20.207l-7.078 4.876c-7.7-7.088-14.425-15.836-24.132-20.273-4.943-1.33-17.937 3.25-15.891-5.584 5.654-8.047 16.422-8.734 25.125-11.361 20.594-5.094 41.32-10.09 61.019-18.103 9.396-.313 17.779 4.99 27.034 5.79 7.243 1.37 14.63 2.13 22.006 1.802z" fill="#ec6b0f"/><path d="M109.172 195.615a19.418 19.418 0 0 1 8.896-6.331c2.853-1.527 5.877-2.681 8.679-4.295 1.854-.642 8.725-3.398 10.634-2.51.524 1.894-5.559 5.519-6.224 7.203-1.98 1.08-4.22 1.68-6.148 2.942-3.263 1.479-6.994 1.799-10.096 3.652-1.878.502-4.778 1.574-5.939-.54l.198-.12z" fill="#4a3c53"/><path d="M158.226 177.4c2.503.034 4.992.467 7.484.65 2.164-.152 17.878-3.491 17.791-1.773-.072 1.424-15.603 7.894-17.142 8.35-2.691 1.016 2.645 2.326 3.85 2.076 2.483 1.58 2.787-.824 4.455-2.856.893-.53 7.322-2.966 8.346-3.032 2.354-.153-.507 2.762 1.82 2.643 1.324.643 10.61-1.255 11.984-.83 1.562.483-4.776 3.245-3.03 3.253 3.116.4 3.767 5.12.26 5.408-1.291 2.66 3.441.957 4.671 2.033-.029.11-.09.197-.13.303l-26.43 18.215s-8.108-8.259-11.982-11.552c-3.874-3.293-6.458-6.574-11.117-8.307-4.66-1.733-13.11.55-15.919-1.125-2.809-1.674-2.234-.651-1.947-3.072.288-2.42 2.699-4.624 7.873-7.614 1.358-.785 3.67-1.642 6.316-2.466 2.779.395 5.555.763 8.349.216.257-.073 4.019-1.954 4.278-2.01 1.233-.264-1.02 1.475.22 1.49z" fill="#e06413"/><path d="M577.36 95.366c-24.437-2.4-93.069 4.268-220.977 23.097-5.588 10.879-13.215 7.24-12.74 17.522-25.115 7.47-34.12 12.927-42.603 18.318v4.38l.398 4.381c13.63 2.295 22.79 5.507 27.87 9.558 30.95-6.086 55.206-8.561 58.839-5.362 90.052-29.454 173.004-57.63 189.213-71.894z" fill="#292929"/><path d="M543.132 99.958c1.323.06 7.5-1.224 7.768-.42.112.337-1.21.567-1.4.63-.186.063-.374.304-.56.35-1.296.325-2.641.585-3.919.84-.386.078-.722.56-1.12.56-.519 0-2.922.759-3.358 1.05-.449.3-3.467.251-4.06.42-.905.259-1.761.352-2.728.49-.878.125-1.757.561-2.59.7-1.081.18-2.266.399-3.359.49-.392.033-1.014-.059-1.4.07-1.465.489-3.169.953-4.828 1.19-.557.08-1.364-.105-1.89.07-1.013.338-2.008.51-3.009.91-.562.225-.994.46-1.47.84-.412.33-2.864.909-3.428 1.05-.202.05-.462.26-.63.28-2.83.314-5.718.555-8.538 1.12-.65.13-1.336.471-1.89.63-1.291.368-2.744.412-3.988.91-1.236.494-2.572 1.185-3.99 1.54-1.486.371-2.567.342-4.058.84-.612.203-1.435-.06-2.03.139-.965.322-1.944.532-2.869.84-.458.153-.756-.131-1.26.07-.66.264-1.492.606-2.309.77-.696.139-1.573-.013-2.24.21-.539.18-1.421.26-1.819.42a36.853 36.853 0 0 1-4.758 1.54c-.785.196-1.884.039-2.66.35-.97.388-2.293.87-3.289 1.12-1.877.469-3.884.641-5.738 1.26-.904.3-1.922.173-2.87.49-2.258-.05-4.66.13-6.788.84-.492.163-.777.581-1.19.839a9.004 9.004 0 0 1-2.519 1.05c-.503.126-1.097-.086-1.61 0-2.031.339-4.154.339-6.158.84-2.12.53-3.728 1.57-5.738 2.24-.693.23-1.371.23-2.03.56-.284.142-.912-.115-1.19.07-.354.236.219.062.07.21-.52.52-2.5.92-3.218 1.19-.455.17-.937.094-1.4.21-1.431.357-3.041.733-4.269 1.47-.585.35-1.355.229-1.89.63-.493.37-4.137.08-5.038.21-.868.123-1.608.95-2.45 1.119-.52.104-.968.476-1.469.56-.976.163-1.968.071-2.939.21-1.341.192-2.581.691-3.919.84-.59.065-4.137 1.234-4.199 1.05-.343-1.03 1.846-2.161 2.52-2.59.922-.587 2.028-.686 3.009-.98.505-.152.995-.581 1.47-.7.66-.165 1.367-.203 2.029-.35 1.049-.233 2.024-.788 3.079-.98.643-.117 1.326-.124 1.96-.35 1.37-.49 2.94-1.484 4.408-1.68 1.415-.188 1.937-.528 3.29-.98.274-.09.73.044.979-.07 1.458-.662 2.583-1.783 4.129-2.169.405-.101.913.042 1.33 0 .482-.048.918-.351 1.4-.42.265-.038.578.065.839 0 1.1-.275 1.926-.92 3.01-1.19 1.42-.355 2.977-.71 4.408-1.12 1.516-.433 2.947-1.07 4.549-1.47.628-.157 1.237-.564 1.89-.63 1.384-.138 2.73-.528 4.058-.77 1.548-.28 3.239-.053 4.759-.56.817-.272 1.65-.576 2.519-.77 1.507-.334 5.133-.832 6.298-1.61.507-.337 2.606-.193 3.36-.42 1.35-.405 2.68-1.193 4.058-1.469.405-.08.937.061 1.33-.07 1.21-.403 2.323-.473 3.569-.7.43-.078.84-.326 1.26-.42 1.789-.397 3.72-.492 5.528-.77 2.649-.407 5.299-1.47 7.908-1.47.301-.328.622-.136.98-.28.28-.112.494-.411.77-.49 1.286-.367 2.726-.16 4.058-.35.49-.07 1.022-.408 1.4-.56.75-.3 1.802-.363 2.59-.56.572-.143 1.252.022 1.819-.14 1.146-.327 2.126-.951 3.359-1.26.821-.205 2.107-.025 2.87-.28.443-.147.776-.35 1.329-.35.117.094.216.214.35.28.026.015 4.4-.837 5.248-1.05 1.248-.311 2.713.005 3.99-.28.633-.14 1.441-.51 1.959-.77.363-.18 1.136-.085 1.54-.21.71-.218 1.283-.709 1.959-.979.927-.37 1.874-.482 2.729-.91.52-.26 1.507.1 2.1-.07 1.784-.51 3.641-1.085 5.528-1.4.514-.085 1.106.126 1.61 0 1.366-.341 2.795-.349 4.198-.63 1.309-.261 2.548-.62 3.85-.91.296-.066.782.113 1.049 0z" fill="#4d4d4d"/><path d="M408.478 114.038c1.35-.115 2.735-.061 4.098-.061 1.158 0 5.309-.946 5.995.428.502 1.003-2.493 1.169-2.936 1.346-.687.275-1.49.375-2.202.612-1.074.358-2.335.863-3.243 1.407-1.317.79-6.747.745-8.258.367-.532-.133-1.295-1.2-.612-1.713.884-.663 6.304-2.727 7.158-2.386z" fill="#4a4e5c"/><path d="M425.816 118.69h4.24c.773 0 5.272-.291 5.71 0 .775.518 1.15 2.744.345 3.549-.489.489-2.011 1.006-2.768 1.384-.933.467-3.194-.154-4.153-.346-2.983-.597-6.957.89-9.603-.433-.65-.325.293-2.023.52-2.25.293-.293 3.773-1.892 4.325-2.076.483-.161.654.465 1.384.173z" fill="#55576a"/><path d="M254.344 163.643c2.947.315 5.905.538 8.868.562.248 1.528.403 3.56-.26 5.062-1.913.049-3.874.105-5.84.13a66.963 66.963 0 0 0-5.277.649c-.12-.008-.24.056-.346.086-.014.004-.029-.003-.043 0-.082.025-.135.029-.216.044-.084.014-.176-.015-.26 0-1.658-.415-3.613-.429-5.364-.173-3.16.46-7.738 2.197-7.96 1.644-.946-2.369 9.292-6.986 10.988-7.269.758-.126 1.504-.519 2.25-.519 1.146 0 2.31-.105 3.46-.216z" fill="#bc5818"/><path d="M303.009 154.081c2.792-.02 5.49.769 6.834 4.24.176 2.238.13 5.01-3.244 5.798 0 0-18.38 4.225-25.22 5.062-6.839.837-15.615.692-15.615.692-5.253-.721-11.013-.612-15.486-1.255-5.74-.447 2.862-3.148 5.19-3.245 2.125-.263 4.218-.626 6.273-1.211 1.96.06 3.862.08 5.58-.043 8.434-.712 34.476-9.994 34.476-9.994.4-.033.813-.04 1.212-.044z" fill="#5f2a1c"/><path d="M299.219 155.216c2.262-.402 4.738-.92 6.904.143 1.337.69 1.657 2.407 1.44 3.772-.338 1.302-1.392 2.286-2.447 3.045-1.042.714-2.308.949-3.545 1.004-1.666.22-3.084 1.224-4.726 1.526-1.91.422-3.94.629-5.624 1.709-1.221.564-2.598.563-3.876.933-1.187.165-1.607-1.414-.84-2.149.778-1.057 1.964-1.7 2.992-2.478 2.594-1.766 5.428-3.146 8.083-4.804.777-.753.81-1.987 1.639-2.701z" fill="#8f3d24"/><path d="M273.637 167.234c1.08-.2 2.265.106 3.263-.466 1.692-.277 3.403-.604 4.965-1.34 1.026-.203 2.12-.272 3.026-.849 2.918-.375 5.236-2.62 8.195-2.836.806-.525 2.576-.04 2.047 1.134-.572.937-1.72 1.262-2.466 2.033-1.067.853-2.438 1.145-3.548 1.926-1.182.68-2.666.503-3.848 1.205-3.677.982-7.522.957-11.297.808-.762.428-2.394.199-2.161-.946.3-.69 1.183-.706 1.824-.67z" fill="#702641"/><path d="M275.303 157.663c-.972-.058-1.561-.815-2.485-.98-.693-.553.14-1.474.993-1.451 1.25-.133 2.44-.503 3.705-.563 1.528-.116 3.05-.367 4.591-.252 2.089.11 4.18.24 6.275.19.868-.297 1.867-.305 2.762-.08.696-.195 1.746.161 1.728.822-.2.54-.756.944-1.23 1.342-1.464 1.122-3.44 1.702-5.417 1.931-1.484.164-2.752 1.004-4.29.952-1.118.006-2.241-.035-3.356-.018-1.099-.207-1.636-1.114-2.598-1.513-.227-.126-.456-.25-.678-.38z" fill="#492422"/><path d="M301.192 155.25c1.434-.013 2.887.243 4.023 1.168 1.39 2.116-.518 5.147-2.942 5.235-4.19.91-8.342 1.984-12.415 3.331-5.436 1.552-11.026 2.502-16.654 2.985-2.013.296-4.025.634-6.004 1.11-1.581.438-2.145.244-2.576-1.076.203-1.044 1.432-2.175 2.395-2.457.674-.538 1.376-1.115 2.076-1.644 7.63-1.249 22.663-6.31 29.199-8.566.49-.06.957-.076 1.47 0 .462-.041.95-.082 1.428-.087z" fill="#cf572f"/><path d="M576.166 96.362c-91.128 19.747-173.967 42-264.616 64.622l-1.732.242.208-2.207c90.858-22.23 170.034-45.2 266.14-62.657z" stroke="#000" stroke-width=".2"/><path d="M546.331 95.544l-14.145 5.019-123.846 17.522-54.158 3.894a22.188 22.188 0 0 0 2.206-3.504c47.448-6.985 86.708-12.3 118.612-16.095l1.081-.13 37.115-4.023c12.779-1.242 23.804-2.148 33.135-2.683z" opacity=".547" fill="#27374e"/><path d="M223.02 140.886c-.485.057-.72.554-.967.915-.532.663-.767 1.496-1.06 2.28-.173.776-.41 1.55-.451 2.347.018.855.255 1.712.675 2.456.347.53.724 1.052 1.188 1.484.396.302.838.543 1.203.885.375.277.867.525 1.34.384.535-.272.18-.928.158-1.376-.562-2.19-.502-4.371-.429-6.606.22-1.753-.54-3.078-1.658-2.77z" fill="#a29090"/><path d="M219.716 144.053c4.456-9.88 10.571-18.777 30.36-16.701 5.527.044 9.824 2.277 13.608 4.738 1.198.78 2.548 1.575 3.836 2.393.718.457 2.402 1.616 2.402 1.616l.132-.451s-2.204-1.599-2.336-1.728c-3.735-3.654-8.989-7.417-17.145-8.289-23.718-2.136-28.313 7.799-30.857 18.422z" fill="#29221c"/><path d="M221.598 146.27c.134-1.37.66-2.297 1.184-2.31.62-.014 1.033 1.03.636 2.855-.151.578.1 1.576-.197 1.844-.725.656-1.944-.193-1.623-2.389z" fill="#e3c8bf"/><path d="M201.958 87.885c.015.96.026 1.87.019 2.858-.291 1.88-1.35 2.518-3.759 1.81-3.633-1.398-3.357-4.157-1.141-6.305 2.392-1.375 4.891-.774 4.88 1.637z" fill="#78c1ba"/><path d="M201.31 98.01c-.266-2.296 1.352-1.837 3.029-2.076 1.192-.17 2.746-2.51 3.72-1.73 3.08 2.464-1.57 9.505-4.845 6.23-.826-.826-.955-1.665-1.903-2.424z" fill="#60847b"/><path d="M208.145 96.712c-.166-.713-.87-2.873-.086-3.46.65-.49 2.744-1.988 3.547-1.385.755.566.641 1.6.778 2.423.286 1.712.506 2.855-1.73 2.855-.275 0-.87.258-1.211.087-.584-.292-.62-.52-1.298-.52z" fill="#8caf9e"/><path d="M153.9 89.704c.49 3.052-1.272 2.918-3.786 3.275-9.614 1.218-7.311-1.816-.8-4.574 3.34-1.335 4.71-1.067 4.586 1.299z" fill="#78bcbf"/><path d="M169.084 78.8c.028.265.061.612.086.866.427 2.683.011 3.09-2.422 3.505-5.367.82-6.83-.104-5.926-1.601 2.68-.982 5.436-1.9 8.262-2.77zm17.296 24.49c.144 4.025-1.108 4.903-3.836 4.164-4.3-1.852-3.261-5.537.1-8.006 3.672-1.337 3.676-.525 3.736 3.842zm7.185-22.94c-.67 2.228-1.293 3.103-4.048 2.533-4.464-1.205-2.518-3.979 1.5-5.592 1.878-.661 3.136.041 2.548 3.058z" fill="#78bfa1"/><path d="M206.796 76.035c.017 2.186-.454 3.578-2.747 3.266-5.561-1.067-4.406-4.077-.753-5.956 3.804-1.93 3.74-.765 3.5 2.69zm-27.843 6.811c-.205 3.249-1.166 3.508-3.487 3.304-4.678-1.17-3.535-3.949-.13-5.743 3.723-1.863 3.859-1.072 3.617 2.44z" fill="#78bcbf"/><path d="M214.767 84.336c-.065 2.693-1.56 3.363-3.27 3.049-4.421-.963-3.873-3.135-1.093-4.673 3.346-1.503 4.284-1.919 4.363 1.624z" fill="#78c1ba"/><path d="M186.073 73.669c-.026.93-.004 1.607-.004 2.276.328 2.41-1.38 2.093-3.1 2.185-6.63.048-2.888-2.975 3.104-4.461z" fill="#78bcbf"/><path d="M196.769 72.874c-.456.69-1.463.564-2.423.346.81-.113 1.599-.244 2.423-.346z" fill="#78bfa1"/><path d="M199.116 101.731c-.397 3.697-2.086 3.86-5.183 2.984-4.5-1.652-3.257-5.323.25-7.536 3.707-2.842 4.776 1.182 4.933 4.552z" fill="#78c1ba"/><path d="M187.954 92.834c-1.225 2.494-3.105 1.823-5.699 1.494-4.32-.776-1.06-2.603 2.988-3.695 3.286-.747 4.064-.192 2.711 2.201z" fill="#78bfa1"/><path d="M295.07 87.666c.011.83.021 1.615.015 2.468-.25 1.622-1.164 2.174-3.244 1.563-3.137-1.208-2.898-3.59-.986-5.443 2.066-1.187 4.223-.669 4.214 1.412z" fill="#70998f"/><path d="M294.097 97.589c.007.5.013.973.01 1.487-.152.978-.702 1.31-1.956.942-1.89-.728-1.747-2.163-.594-3.28 1.245-.716 2.545-.404 2.54.85z" fill="#7faca0"/><path d="M284.186 90.124c.007.5.014.973.01 1.487-.151.978-.702 1.31-1.956.943-1.89-.728-1.746-2.164-.594-3.281 1.245-.716 2.546-.403 2.54.851z" fill="#b1f5e0"/><path d="M309.924 102.596c-.876.048-1.712-.757-1.712-1.652 0-2.032 6.668-4.228 6.668-1.285 0 .867-.061 1.04-.673 1.652-.63.63-1.364.927-2.203 1.347-.73.365-1.377.079-2.08-.062z" fill="#2d1e29"/><path d="M307.588 98.995c-.36-.561-.704-1.092-1.062-1.677-.52-1.213-.133-1.98 1.547-2.45 2.654-.513 3.506 1.213 2.992 3.294-.903 1.69-2.596 2.256-3.477.833zm-2.478-9.696c.007.418.01.814.008 1.243-.127.818-.587 1.096-1.635.788-1.58-.609-1.46-1.809-.496-2.743 1.04-.598 2.127-.337 2.123.712zm-3.063 6.716c.01.597.016 1.163.013 1.777-.181 1.167-.839 1.565-2.336 1.125-2.258-.87-2.086-2.584-.71-3.919 1.487-.855 3.04-.481 3.034 1.017zm16.102 3.102a61.06 61.06 0 0 1-.79-1.245c-.386-.901-.098-1.47 1.15-1.82 1.97-.38 2.603.901 2.222 2.446-.67 1.256-1.928 1.676-2.582.619z" fill="#7faca0"/><path d="M201.339 103.208c.58-1.752-1.858-4.945.244-5.996 1.774-.887 2.849 3.899 4.038 3.304 1.19-.595.244-3.304 1.346-3.671 5.89-1.964 6.425 5.276 3.18 7.71-1.463 1.097-2.421.544-4.16.978-.681.17-3.898 3.124-4.526.612-.256-1.024-.555-1.855-.122-2.937z" fill="#4a8177"/><path d="M209.169 108.715c.393-.526.158-1.191.367-1.713.471-1.179.3-1.836 1.835-1.836.072 0 .888-.09.98 0 .622.623.116 7.956-.246 8.077-2.023.674-2.555-2.502-3.67-3.06-1.201-.6 2.168-2.185.734-1.468z" fill="#74bda8"/><path d="M210.643 106.791c-.547 2.26-1.056 3.148-3.304 2.57-3.643-1.222-2.055-4.035 1.224-5.671 1.533-.67 2.56.042 2.08 3.101z" fill="#78c1ba"/><path d="M175.192 130.331c1.663-.467 2.623-.38 4.694 1.943 3.218 3.887.2 3.631-4.018 1.309-1.926-1.127-2.655-2.38-.676-3.252z" fill="#78bfa1"/><path d="M183.135 114.76c1.795-.618 2.831-.502 5.067 2.573 3.473 5.145.216 4.806-4.337 1.732-2.079-1.491-2.866-3.15-.73-4.305z" fill="#78c1ba"/><path d="M173.562 116.746c1.557.047 2.349.31 3.423 2.294 1.586 3.266-.91 2.45-3.815.007-1.306-1.16-1.555-2.147.392-2.3zm21.773-2.266c2.097.515 2.962 1.02 2.767 3.36-.571 3.797-3.311 2.218-5.242-1.137-.817-1.571-.327-2.65 2.474-2.222z" fill="#78bfa1"/><path d="M167.815 104.677c1.13-.525 3.355-.936 4.649-.612 2.902.725 4.417 6.849 1.468 7.832-1.981.66-3.96 1.18-5.506-.368-.115-.115.116.375 0 .49-.094.094-.686.555-.856.612-1.092.364-2.463 1.434-3.793 1.101-.925-.231-1.087-1.21-1.713-1.835-.412-.413-1.171-.412-1.468-.857-.324-.485-.73-2.702-.367-3.426.435-.872 1.923-.665 2.692-.857.336-.084 2.085-1.597 2.202-1.713.31-.31 2.144-.148 2.692-.367z" fill="#7ad3d0"/><path d="M173.202 106.861c1.63 3.095 1.138 4.185-.945 4.488-3.546-.057-4.265-3.268-2.987-6.28 1.915-2.228 2.227-1.596 3.932 1.792zm-7.977 1.849c2.662 2.317 2.886 3.518 1.649 4.556-2.398 1.228-4.51-1.527-5.186-4.818.147-2.785.676-2.304 3.537.262z" fill="#92e2df"/><path d="M157.731 115.8c2.133.931 2.927 1.654 2.032 4.322-1.73 4.288-4.25 2.025-5.373-2.158-.43-1.945.417-3.11 3.341-2.165zm-11.234 12.721c2.22.915 3.048 1.625 2.116 4.245-1.802 4.211-4.427 1.988-5.595-2.12-.45-1.909.433-3.053 3.479-2.125z" fill="#78bfa1"/><path d="M161.985 89.769c1.36-1.674 2.108-2.202 3.496-.717 2.128 2.648-.225 4.33-3.305 4.267-1.4-.111-1.843-1.169-.191-3.55zm8.828 4.983c1.089-1.524 1.687-2.005 2.798-.653 1.703 2.41-.18 3.942-2.645 3.884-1.12-.1-1.475-1.064-.153-3.231z" fill="#78c1ba"/><path d="M192.225 202.024c2.08-1.775 4.671-2.752 6.97-4.187 1.64 1.92-1.302 3.657-2.987 3.94-1.038.422-3.554 2.114-3.983.247z" fill="#355f61"/><path d="M209.227 188.78c10.487 1.291.92 5.366-4.196 6.879-2.873.843-4.757 3.434-7.743 3.504-1.864.854-4.254.67-5.883-.606l13.799-9.475c1.319-.264 2.672-.389 4.023-.302z" fill="#4a6c6a"/><path d="M271.148 169.594c-.837.405-4.306 2.732-4.137 3.182.23.609 6.003 1.16 6.403 1.958.459.915-1.666 2.812-2.174 3.488-.695.924.857 2.162.184 3.059-.734.977-2.911 2.509-3.401 3.487-.103.205.1.321.184.49.29.582 4.675-.643 4.894-.061.322.858-5.766 7.125-6.146 8.137-.238.635 5.381-.179 5.198.429-.315 1.049-5.29 3.314-5.29 4.405 0 .123-.115.718 0 .795.818.545 2.34.779 3.493 1.163.631.21-2.015 5.146-1.834 5.507.299.598 1.911.757 2.206 1.346.24.48 1.067 1.968.827 2.447-.28.559-1.228.9-1.563 1.346-.342.456-.157 3.646.184 4.1.093.124.927.313 1.103.489.217.216.415.814 1.011.734.586-.078 8.81-7.542 9.246-7.831.26-.174.393-.708.551-.918 1.943-2.586 1.471-5.491 1.471-8.383 0-3.587.152-7.192-.184-10.768-.367-3.908.362-7.988-.368-11.87-.207-1.104-.567-2.187-.735-3.304-.201-1.34-.103-2.412-.643-3.671-.176-.409-.47-.861-1.012-1.102-.715-.317-7.585.2-8.457.49-.2.066-.872.718-1.01.856z" opacity=".978" fill="#223d3f"/><path d="M287.167 159.254c2.51-.752 4.952-1.88 7.595-2.037 1.774-.658 3.517-1.773 5.49-1.5 1.365-.02 3.552.19 3.678 1.925-.12 1.662-1.888 2.615-3.36 2.878-2.447.32-4.53 1.8-6.906 2.381-3.744 1.257-7.578 2.235-11.4 3.211-1.402.315-2.85.065-4.255.266-1.506.31-3.06.83-4.6.412-2.011-.164-3.343 2.123-5.387 1.748-1.78-.534-1.016-2.78.153-3.566 1.306-1.248 3.196-1.369 4.902-1.34 4.296-.147 8.845.213 12.822-1.721.86-.553 1.553-1.602 1.268-2.657z" fill="#d8793b"/><path d="M300.76 156.201c.729.05 1.425.3 1.946.866.875 1.555-1.435 2.428-2.639 2.639-7.832 1.374-9.608 5.191-22.494 6.1-2.154-.088-4.37-.064-6.445.562-.873.405-2.532 2.113-3.158.78.11-1.354 1.307-2.191 1.817-3.375 3.791-.69 9.167-2.256 14.491-3.894 1.964-.281 3.925-.71 5.84-1.212 2.878-.54 5.757-1.187 8.478-2.293.685-.09 1.434-.223 2.163-.173z" fill="#e5a84b"/><path d="M280.323 162.616c1.353-.805 2.995-.845 4.461-1.27 1.091-.238 2.208-.5 3.33-.364.57.226.483 1.212-.12 1.33-1.544 1.047-8.392 2.167-11.067 2.197-2.164.025-1.028-.493 3.396-1.893z" fill="#ffe268"/><path d="M218.008 158.58c4.019.208 7.871 1.51 11.848 2.018 3.404.674 6.837 1.193 10.241 1.862 1.592-.504 3.787 1.363 2.653 2.954-1.038 1.499-2.953 1.914-4.244 3.12-2.745 1.652-5.987 2.25-8.684 3.997-2.967 1.522-6.48 2.994-9.81 1.79-2.495-.922-4.722-2.435-7.204-3.386-2.164-1.162-4.155-2.805-5.33-4.998-.367-1.713 1.318-2.897 2.717-3.42 2.764-.977 5.031-2.99 7.813-3.936z" fill="#da7421"/><path d="M218.873 159.879c1.907-.132 3.964-.54 5.747.38 2.695 1.317 5.771 1.116 8.658 1.626 1.55.161 3.224.203 4.586 1.036.788.853.284 2.364-.779 2.72-1.88 1.222-4.07 1.835-6.012 2.941-1.297.524-2.76.435-4.072.025-2.007-.24-4.196-.019-5.983-1.145-1.531-.954-2.35-2.767-2.428-4.53-.2-.899-.82-1.888-.267-2.782.117-.183.34-.27.55-.271z" fill="#e28633"/><path d="M222.68 161.61c1.407.483 2.865 1.018 4.38.862 1.632.016 3.26.253 4.895.154a1.72 1.72 0 0 1 1.348.551c.373.308.097.807-.33.823-.486.101-.985.127-1.474.218-1.509.181-3.061.167-4.543-.196a6.094 6.094 0 0 1-2.5-1.425c-.365-.312-.856-.343-1.278-.528-.205-.1-.397-.25-.498-.46z" fill="#f3af5c"/><path d="M146.2 182.203c3.466-1.356 7.241-1.659 10.929-1.509 1.85-.162 3.683-.533 5.548-.49 1.014-.037 2.029-.077 3.037-.194.95.756.132 2.177-.813 2.506-1.12.637-2.309 1.241-3.615 1.337-2.347.616-4.392 2.382-6.921 2.236-1.746-.098-3.52-.188-5.237.211-2.324.238-4.81.096-6.87-1.113-.938-.8-.207-2.444.938-2.558 1.005-.416 2.111-.639 3.199-.506l-.096.043-.098.037z" fill="#cf5c1b"/><path d="M143.086 184.886c-.281-.584.373-1.015.62-1.472.435-.509 1.161-.507 1.768-.625.748-.09 1.493-.206 2.224-.385.904-.122 1.817.096 2.721-.053 1.454-.124 2.975-.175 4.36.353.601.36.578 1.259.203 1.776-.562.766-1.546 1.018-2.42 1.236-1.872.41-3.791.139-5.676 0-.598.056-1.152-.162-1.72-.285-.592.086-.988-.317-1.448-.571a1.03 1.03 0 0 0-.632.027z" fill="#dc5e33"/><path d="M179.812 187.698c-4.736 5.945 7.34-.156 10.9.735 1.729.787 1.683 3.59 0 4.413-1.256 1.002-2.83 1.52-4.066 2.553-.828 1.805 1.747 2.46 2.163 3.937.103.296.183.57.217.865l-16.87 11.487s-1.576-1.419-2.64-2.488c-.132-.607-.301-1.22-.605-1.773-.66-2.075-.819-4.33-1.86-6.274-.56-1.7-1.993-2.95-2.466-4.672-.04-.769.66-1.85 1.514-1.298 1.957-.693 2.815-3.023 4.888-3.505 2.992-1.204 5.437-3.886 8.825-3.98z" fill="#d9560a"/><path d="M175.14 196.005c1.426 0 5.184-2.194 6.402-1.515-2.555 3.769.768 3.47 1.427 4.846.443 1.338.107 3.877-.302 5.235l-10.577 7.095s-2.382-2.326-5.212-5.105c-.061-.58-.113-1.159-.217-1.73-.304-1.407-.892-2.748-1.34-4.11-.305-1.447.794-2.954 2.249-3.159 1.31-.334 2.665.159 3.98 0 1.058-.37 1.786-1.464 2.984-1.47.209-.036.402-.088.606-.087z" fill="#af4223"/><path d="M172.934 199.076c.643.055 1.33 1.07 1.86 1.471.961.9 2.194-.587 2.898.476.605.776-2.24 2.759-1.211 4.586.594.583 2.077 1.105 1.99 1.904l-6.316 4.153s-2.015-1.871-4.455-4.283c-.054-.247-.119-.49-.173-.735-.26-1.5-.37-3.024-.433-4.543a10.977 10.977 0 0 1-.216-1.73c1.057-1.111 2.698-1.08 4.11-1.255.624-.042 1.302-.098 1.946-.043z" fill="#6a293c"/><path d="M166.469 218.36c4.118-1.295 7.076-4.794 11.16-6.163 2.24-.175 5.774-.712 6.737-.217 1.689.935.764 2.87-.637 3.303-1.333.54-2.772-.178-4.11-.174-2.479.065-4.95.43-7.197 1.543-1.933.724-3.893 1.447-5.953 1.707z" fill="#3aa9c5"/><path d="M131.493 189.904c.315.19.762.427 1.644.952 2.809 1.674 11.26-.608 15.919 1.125 1.51.562 2.79 1.286 3.98 2.12 1.46 1.551 2.86 3.207 4.844 4.11.738.683 1.471 1.378 2.293 2.077 3.15 2.677 8.157 7.706 10.252 9.82.098.736.127 1.47.043 2.164-1.095.372-2.566.948-4.888 1.947-.971-.334-2.016-.053-2.768-1.211 2.43-4.382-2.107-4.79-5.235-5.408 1.722-1.348 1.458-4.788-2.033-4.5.853-4.311-7.67-1.977-7.613-3.677 3.814-3.196-3.116-3.498-5.277-2.164 1.47-.999-.297-3.505-3.418-2.682-2.586.194-9.145-1.719-7.743-4.673z" opacity=".748" fill="#fbe5a7"/><path d="M131.32 188.606c.196-2.545 2.995-3.778 5.245-3.892 4.64-.22 9.051 2.11 13.71 1.47 3.407-.214 7.176.126 9.776 2.595 1.503 1.234 2.642 2.795 3.545 4.497 1.055 4.467 4.924 7.045 7.194 10.681 1.489 2.472 4.357 5.637 3.405 6.43-1.993 1.658-2.823 1.446-2.923 1.487-1.721-2.278-7.254-6.852-8.354-9.165-4.04-3.429-8.975-5.767-12.476-9.83-2.106-2.04-4.992-3.476-7.984-3.11-3.23.036-6.474.214-9.694.01-.642-.112-1.268-.513-1.444-1.173z" fill="#ffaa4d"/><path d="M131.407 190.077c-.506-2.187 2.081-4.303 4.129-3.406 4.333-.217 8.297 2.804 12.662 1.835 1.572-.33 1.353 1.265 2.835 1.847 1.636.642 4.945.357 6.016 1.793 1.91.7-1 1.373-.07 2.364.688.732 4.393 1.993 4.988 2.845 1.022 2.06 2.418 3.535 3.902 5.08.96.997-.516 1.3.356 2.363.69.846 2.709 1.986 3.422 2.67 2.275 2.182 2.68 4.383 2.329 4.295-.806.188-3.862 1.394-4.066 1.357-1.283-.229-2.1-2.72-2.369-3.817-.7-1.432-3.163-2.751-4.09-4.062-.625-.882 2.559-1.433-.498-2.488-1.07-.98-2.138-1.971-3.222-2.945-.894-.803-4.124-1.044-5.05-1.808-.71-.586.893-1.706.155-2.252a36.965 36.965 0 0 0-3.099-2.07c-1.5-.61-.85-1.98-2.427-2.096-4.015-.298-10.383 1.483-14.21 0-.676-.35-1.288-.852-1.693-1.504z" fill="#ffe17c"/><path d="M202.317 208.202c2.514-1.763 5.33-3.47 8.496-3.505.215 2.391-2.547 3.108-4.122 4.188-1.244 1.102-4.77 2.482-4.96-.147.046-.285.306-.502.586-.536z" fill="#2b7679"/><path d="M190.043 204.932c1.36-1.126 3.036-1.927 4.694-2.595 1.34.125.161 1.874-1.036 2.074-1.104.442-2.027 1.526-3.208 1.586-.62-.017-.845-.571-.45-1.065z" fill="#255a60"/><path d="M270.176 135.478c2.028-3.268 5.85-4.875 9.517-5.434 3.178-.695 6.471-1.554 9.73-.876 1.681.813 2.715 2.595 4.528 3.18 2.276 1.506 3.01 3.223 4.472 4.894 1.437 1.145 2.171 3.158 2.304 4.356-.734 4.292-14.788 7.636-18.518 7.131-3.089-.182-6.611-.056-9.064-2.262-1.753-1.66-2.793-3.86-3.482-6.154-.283-1.59-.23-3.099.513-4.835z" fill="#9a7456"/><path d="M271.214 140.323c-1.068-4.044 1.518-6.059 4.88-7.278 1.57-.604 5.104.181 6.777.099 6.37-.316 10.984 1.592 12.75 4.397 1.212.913 3.066 2.665 1.646 4.19-1.133 2.032-2.738 2.73-4.653 4.324-1.815 1.131-3.668 1.444-5.788 1.272-2.614 1.093-5.893-.735-8.514-1.095-2.771-.355-5.64-1.91-6.812-4.553-.155-.431-.347-.89-.286-1.356z" fill="#b8956c"/><path d="M130.801 189.731c-2.107 3.635-6.752 4.73-10.449 6.094-4.611 1.049-8.8 2.652-12.966 4.446-.688.296.428.934-.293 1.217-3.784 1.994-9.843 3.892-13.792 5.245-.844.368-.221 1.332-1.072 1.686-6.336 2.637-14.296 4.424-19.926 8.414-3.296 1.205-7.428 3.12-10.5 4.98-.758.46-.217 1.527-.971 1.991-3.221 1.985-7.176 3.256-10.217 5.488-1.058.776.196.928-.67 1.908-1.238 1.403-4.55 3.689-5.918 4.996-4.157 3.099-7.613 7.594-11.617 10.17-.887-2.563 4.127-4.719 5.398-7.21 6.035-6.636 12.578-13.117 20.772-17.02 5.614-3.703 11.454-7.103 17.8-9.392 4.276-1.809 9.64-3.354 12.378-4.947 1.612-.937-1.972-1.316 2.74-2.964 1.483-.519 7.624-2.514 9.076-3.15 4.908-2.147 10.265-3.992 15.237-5.979 4.747-1.523 11.576-3.584 14.99-5.973z" fill="#c6d6e0"/><path d="M152.643 163.292c7.53 1.712 14.833-4.049 22.304-1.423 2.04 4.861-8.727 3.278-11.928 3.446-3.517-.312-6.99-1.033-10.376-2.023z" fill="#b5915e"/><path d="M114.495 195.098c2.866-2.436 6.524-3.549 9.971-4.881.573-.254 1.22-.417 1.734-.758.923-.965 2.245-1.464 3.533-1.717.568-.082 1.51-.173 1.663.566-.015.61-.335 1.282-.845 1.623-3.488 2.206-7.44 3.494-11.337 4.764-1.162.441-2.308 1.204-3.602 1.05a1.813 1.813 0 0 1-1.117-.647z" fill="#5e3c75"/><path d="M240.848 127.214l-1.428 2.033-.822.693c-2.522.574-4.901 1.48-6.834 2.639.25-.225.477-.454.605-.779.894-1.273 1.894-2.52 3.072-3.548a29.382 29.382 0 0 1 5.407-1.038z" fill="#534a4b"/><path d="M268.36 123.19c-.265-.64-.043-1.543-.726-1.953-.625-.15-1.238-.377-1.757-.77-.574-.447-1.396-.823-1.452-1.65.032-.772.992-.943 1.598-1.084.851-.101 1.741-.114 2.574.108.817.293 1.564.75 2.387 1.031 1.406.54 2.642 1.518 4.151 1.769.856.01 1.675-.503 2.542-.307.888-.003 1.964-.077 2.59.683.417.829.176 1.782.091 2.657-.321 1.208-1.217 2.206-2.24 2.88a8.242 8.242 0 0 1-3.089.437 5.669 5.669 0 0 1-3.416-1.51c-1.048-.84-2.337-1.304-3.398-2.123-.185-.23-.178-1.125-.058-.996.076.274.075.57.203.828z" fill="#322e23"/><path d="M254.085 107.096c-1.794-2.913 2.087-4.367 4.325-3.807.892.223 2.157.947 2.942 1.47.475.318 1.384.866.865 1.558-1.414 1.885-6.153-.635-8.132.779z" fill="#474f42"/><path d="M256.031 118.258c-1.91-.647-3.149-2.359-4.816-3.4-.76-.775-1.17-1.812-1.883-2.624-.53-.887-.664-1.95-.612-2.967-.279-.92.12-2.25 1.21-2.355 1.46-.36 2.976-.123 4.458-.269 2.283-.031 4.573-.061 6.853-.028 1.169.229 2.578.082 3.435 1.076 1.001 1.1 1.429 2.57 2.293 3.766.74 1.218 1.06 2.76.597 4.133-.32.904-1.146 1.53-2.064 1.732-1.115.454-1.866 1.527-3.062 1.82-1.775.597-3.66.883-5.532.794-.71-.164-1.098-1.01-.877-1.678z" fill="#3f745a"/><path d="M255.123 114.71c.645-1.155 1.813-1.85 2.799-2.677 1.127-.536 2.353-.821 3.557-1.118.605-.063 1.295.355 1.301 1.01.204 1.35-.867 2.658-2.166 2.927-.97.268-1.94.582-2.94.705-.816.054-1.69-.022-2.404-.442a.471.471 0 0 1-.147-.404zm-3.72-2.768c-.776-.448-.886-1.418-1.227-2.164-.153-.636.346-1.392 1.03-1.375a14.052 14.052 0 0 1 2.924-.26c.891.283.894 1.736.051 2.083-.933.506-1.762 1.19-2.699 1.685l-.08.03z" fill="#5a957f"/><path d="M273.593 155.843c-.438-.044-.999.076-1.287-.336-.38-.386-.512-1.076-.071-1.47.56-.55 1.396-.687 2.155-.784 1.123-.102 2.256-.01 3.375-.156 1.186-.087 2.383-.23 3.571-.106.44.076 1.05.367.938.886-.146.456-.695.513-1.09.668a16.06 16.06 0 0 1-3.175.713c-.36.058-.72.123-1.082.175-.538.343-1.209.208-1.813.308-.505.05-1.012.102-1.521.102z" fill="#40211d"/><path d="M293.949 139.571c2.406 2.716.768 4.872-1.322 6.463-1.815 1.131-3.31 1.379-5.736 1.696-4.12.504-7.68-.55-9.988-2.397-2.2-2.111-3.393-3.676-2.849-5.22.78-2.214 4.357-4 7.12-4.02.993.105 2.652.803 4.06 1.006 1.995.29 3.775.118 4.918.456 1.595.483 2.71 1.21 3.797 2.016z" fill="#d3b287"/><path d="M288.299 142.765c.39-.167 1.468-.668 1.835-.735.899-.163 1.888-.614 2.876-.367.594.149.97 1.143.856 1.713-.042.21-.46.602-.612.735-.598.523-2.931 1.746-3.67 1.958-.537.153-1.126.07-1.652.244-4.391-.19-1.32-2.265.367-3.548zm-12.389-1.75c-.171-.438.038-.974.504-1.109.66-.24 1.382-.117 2.06-.034 1.592.258 3.131.816 4.56 1.56.544.289 1.061.673 1.37 1.218 1.098 1.224-.536 2.19-2.132 2.79-1.635.49-2.757-.004-3.994-1.17-.878-.938-1.662-2.033-2.368-3.255z" fill="#f1d3ac"/><path d="M313.068 112.203c-.403-.585-.233-1.217.348-1.156.744.14 1.354.622 1.992.968 1.78 1.077 3.324 2.676 3.571 4.81 1.238 4.408-2.16 5.513-2.488 4.992-.892-1.416-.291-3.265-1-5.399-.756-2.277-1.62-3.746-2.423-4.215zm10.661-1.04c1.388.736 3.134 3.616 1.903 6.187-.258.992-2.104-.653-3.864-2.281-1.227-1.534-2.143-2.945-2.322-4.416-.2-1.547.422-1.507 1.305-1.032 1.45.583 1.978.994 2.978 1.542zm7.971 1.608c.194-.766 1.65.072 1.94.669.683.833.397 1.293.841 2.25.1.867.19 2.012-.215 2.636-1.242.74-1.287.267-1.377-.9-.042-.534-.11-1.156-.264-1.709-.423-1.532-1.296-2.72-.925-2.946zm-25.72 5.439c-.707-3.001-3.465-8.656-1.92-8.66.302-.2 3.057 4.215 3.743 6.088.37 1.29.379 3.014-.877 3.828-.727.315-1.02-.732-.945-1.256z" fill="#e6ab51"/><path d="M350.387 124.018c-1.33-.203-2.394-.903-3.222-1.731-.628-.628-1.628-.63-2.432-1.09-.316-.181-.706-.768-.979-1.04-1.036-1.037-1.586-4.212.123-4.895.823-.33 3.015-.38 3.915-.123.81.232 3.952 1.848 4.343 2.631.746 1.491.145 2.787-.183 4.1-.26 1.039-.47 1.929-1.565 2.148z" fill="#2d1e29"/><path d="M263.515 105.971c.074-1.82-1.14-4.244.173-5.884.297-.372.717-.545 1.038-.865.218-.219.829-.624 1.211-.433 1.971.986 2.108 7.13-.519 7.788-.726.181-2.11.43-1.903-.606zm11.593-.086c-.718-1.049-1.274-3.717.778-3.375.835.139 1.618.6 2.423.779.627.139 1.22-.097 1.643.432 1.936 2.42-1.612 3.876-3.633 3.202-.42-.14-.787-.784-1.211-1.038z" fill="#3f745a"/><path d="M333.6 106.39c-.38-1.258 1.303-1.566 2.263-1.713.723-.111 1.382-.055 2.08.06.221.038.961.456 1.04.613.251.503 1.59.059 1.59 1.652 0 1.861-3.084 1.676-4.404 1.346-.142-.036-2.346-1.38-2.57-1.53-.103-.068-.008-.385 0-.428zm-5.262-3.549c-1.022.041-1.884-.461-2.63-1.101-1.103-.945-.871-2.57.734-2.57 1.524 0 5.261.429 6.24 1.652 1.222 1.529-.68 2.02-2.08 2.02h-2.264z" fill="#506966"/><path d="M262.91 93.597c-1.797-.475-1.695-2.516-1.904-3.98-.468-3.276-.38-4.497 2.855-5.884.861-.37 1.274-.774 2.076-.086.966.828 2.453 5.56 2.163 7.008-.314 1.572-1.513 3.375-3.201 3.375-.271 0-1.025.223-1.298.087-.27-.136-.308-.424-.692-.52zm6.055 12.114c-1.033-3.433-.152-5.85 3.028-7.441.262-.13.654-.491.952-.26.564.44 1.279 1.184 1.47 1.904.56 2.098.503 6.896-2.249 7.355-1.57.262-1.8-1.558-3.2-1.558zm10.901 1.039c.161-1.16-.722-3.056-.173-4.154.13-.261 1.184-.038 1.47-.086 2.015-.336 3.585 2.235 3.202 4.153-.311 1.555-3.239 2.645-4.413 1.471-.074-.074-.062-1.265-.086-1.384zm-2.942-14.018c-.67-1.403-1.194-2.864-1.643-4.326-.82-2.662-1.573-5.218-.865-8.048.09-.363.632-.605.951-.605 2.607 0 3.148 1.686 4.326 3.807.915 1.647 1.456 5.129 1.038 7.009-.417 1.876-2.283 3.687-3.807 2.163z" fill="#3a464c"/><path d="M248.288 78.541c.188-.542.625-1.033 1.298-.865 3.616.904 1.477 6.237-1.298 3.461-.885-.885-.52-1.557 0-2.596z" fill="#5d786c"/><path d="M244.049 84.339c-.936-1.283-2.08-2.519-2.769-4.067-.425-.957-.432-2.085-.432-3.115 0-3.197 1.504-2.596 4.412-2.596.968 0 2.298-.212 3.028.52.987.986 1.504 5.974.952 7.354-.668 1.67-3.53 2.568-5.191 1.904z" fill="#3a464c"/><path d="M244.827 90.396c-.034-1.158.586-2.144 1.298-2.856 1.446-1.446 3.52 5.016 3.46 5.106-1.205 1.809-5.25.211-4.758-2.25z" fill="#4d6568"/><path d="M247.077 89.27c-.727-6.155 7.035-4.867 5.71.434-.186.742-.342 1.588-.952 2.076-.355.284-.974.237-1.384.26-.658.036-1.839.31-2.509.086-1.556-.518-1.933-2-.865-2.855zm14.88-6.835c-.623-.864-1.049-1.875-1.384-2.769-.267-.713-1.45-2.67-.865-3.548.957-1.436 3.596.44 4.24 1.212.42.506 1.182 1.731 1.297 2.423.24 1.446-.74 3.733-2.595 3.115-.258-.086-.346-.294-.693-.433z" fill="#3a464c"/><path d="M228.476 87.627c-.295-1.173 2.403-5.384 3.893-3.894.751.751.81 2.084 1.125 3.029.15.45.432 1.817.173 2.336-.5 1.001-4.035 2.17-4.585.519-.327-.98-.137-1.053-.606-1.99z" fill="#416c66"/><path d="M227.438 86.589c0-.411.028-.464-.086-.866-.115-.4-.464-1.872-.087-2.25.69-.69 2.943-2.204 3.807-1.124.338.422.26 1.19.26 1.73 0 3.39-2.212 3.183-3.894 2.51z" fill="#528376"/><path d="M228.995 82.868c-.872-1.222-2.41-3.403-1.73-5.105.15-.377.564-.425.865-.606 2.31-1.387 4.684.02 5.97 2.163.434.724.432 1.601.432 2.423 0 .55.086 1.214-.086 1.73-.55 1.652-4.574.096-5.45-.605z" fill="#3a464c"/><path d="M240.415 94.722c-2.59-2.187 3.582-5.14 4.759-3.374 1.353 2.03-4.517 4.568-5.105 3.98-.164-.164.201-.424.346-.606z" fill="#476f67"/><path d="M217.489 71.49c1.863-.024 3.78.015 5.71.042-.016.208-.026.49-.043.693-.013 2.54-2.059 2.985-3.548 2.725-4.035-.678-4.488-2.098-3.028-3.418.31-.005.598-.04.909-.043zm22.667 5.701c1.897-.34 3.491.518 3.528 2.216.045 2.057-1.83 5.064-3.528 5.018-10.416-.736-6.646-5.959 0-7.234z" fill="#78bfa1"/><path d="M231.314 92.807c-2.44-3.075-8.42.256-10.644-.857-.514-.257-.113-1.686-.367-2.447-.526-1.58-.434-3.733.947-4.58 1.395-.854 4.089-.39 5.415.052.995.332 2.598 2.796 3.181 3.671.875 1.313 3.028 2.21 1.468 4.16z" fill="#6e8473"/><path d="M216.105 85.031c-.392-1.912 4.146-2.869 4.931-1.298.787 1.574-3.29 2.595-4.326 2.25-.378-.126-.39-.593-.605-.952z" fill="#60847b"/><path d="M217.748 83.3c-1.678-2.012-2.543-3.893 1.14-3.893.326 0 1.43-.125 1.709.086.17.13.16.71.228.865.882 2.011 1.082 3.574-3.077 2.942z" fill="#589277"/><path d="M221.235 81.068c-4.285-3.243 2.066-6.485 3.574-3.68 1.252 2.328-2.692 4.117-3.574 3.68z" fill="#4a8177"/><path d="M227.583 87.85c-.29-.006-.352-.308-.55-.428-1.763-1.057-.291-2.91 1.1-2.447 1.18.393 1.455 2.128 2.264 2.937.459.459 2.246 2.063 1.162 2.876-1.023.767-4.657-1.576-3.976-2.937z" fill="#5e7e71"/><path d="M224.017 85.961c-8.945-1.756-4.293-6.838 2.998-9.291 1.807-.44 1.828 2.92 1.468 5.975-.241 3.677-1.194 3.848-4.466 3.316z" fill="#78bfa1"/><path d="M239.377 71.221c3.889.106 1.013 5.207-.952 5.07-10.415-.586-5.693-4.055.952-5.07z" fill="#78bcbf"/><path d="M256.953 82.217c1.55-.25 2.853.38 2.883 1.625.037 1.51-1.496 3.715-2.883 3.682-8.512-.54-5.431-4.372 0-5.307zm-5.447-4.882c-1.52-.4-2.455-1.503-1.979-2.654.578-1.395 2.872-2.79 4.128-2.198 7.563 3.942 3.195 6.197-2.15 4.852zm23.09 11.529c-.065 2.693-1.56 3.362-3.27 3.048-4.421-.963-3.872-3.134-1.092-4.672 3.346-1.503 4.283-1.919 4.362 1.624zm-2.302-10.614c-.052 2.156-1.249 2.692-2.618 2.441-3.54-.77-3.1-2.51-.874-3.74 2.678-1.203 3.429-1.537 3.492 1.3zm9.126 5.081c-.27-.42-.527-.818-.796-1.256-.39-.91-.099-1.483 1.16-1.835 1.988-.385 2.627.908 2.242 2.467-.677 1.267-1.945 1.69-2.605.624z" fill="#78bfa1"/><path d="M203.545 191.704c5.704.703.501 2.919-2.282 3.742-1.563.459-2.587 1.868-4.212 1.906-1.013.464-2.313.364-3.2-.33l7.506-5.153a8.409 8.409 0 0 1 2.188-.165z" fill="#608c89"/><path d="M320.997 290.19c18.39 10.502 16.698 16.773 22.39 22.64l-18.475-16.643c-4.147-5.02-5.605-5.516-3.915-5.996zm3.671 12.85c5.474 3.496 8.747 9.635 12.724 14.929-2.874-2.182-5.748-5.393-8.621-7.479-2.496-2.351-6.692-8.11-4.103-7.45zm3.915 13.705c13.361 7.066 13.516 17.848 17.129 27.656-4.668-6.453-7.422-15.198-14.099-19.245-5.241-1.606-5.643-4.722-7.674-9.905zm-2.447 54.822c3.076 9.026 5.879 17.886 7.34 25.943 0 0-4.014-5.297-5.431-9.651-1.417-4.355-1.91-16.292-1.91-16.292zm26.672-67.304c-4.008-6.056-7.376-12.54-13.214-17.376 9.183 1.767 9.838 9.455 13.214 17.376z" fill="#3d2a25"/><path d="M285.332 107.858c.063-.905.85-1.767 1.768-1.82.795.245.795 1.289 1.081 1.939.666 2.356.364 5.057-1.135 7.042-.528.595-.878 1.3-1.269 1.987-.474.873-1.157 1.596-1.79 2.351-.85 1.099-1.55 2.365-2.702 3.186-.92.318-.914-1.065-1.474-1.447-.673-.26-1.184-.916-.88-1.65.334-1.061 1.367-1.634 2.217-2.237 1.16-.938 1.815-2.308 2.477-3.607.78-1.429 1.482-2.999 1.343-4.668-.001-.37-.185-1.006.364-1.076z" fill="#3d433b"/><path d="M278.664 122.543c.471-.412 1.741-1.502.979-2.264-.158-.158-.42-.176-.55-.306-.328-.327-.605-.745-1.163-.857-.809-.161-1.818.21-2.63-.06-.439-.147-.883-.417-1.285-.551-.73-.243-1.64-.157-2.386-.306-.426-.086-1.49-.472-1.652-.796-.069-.137-1.778-.306-2.08-.306-1.84 0-3.66-1-4.65.98-.19.381-.532.82-.672 1.1-.85 1.7 1.899 1.23 2.447 2.326.348.697.544 2.019 1.59 2.019.7 0 1.414.226 2.142.122 1.303-.186 2.588-.752 3.915-.918.986-.123 2.155.058 3.12-.183.926-.232 2.119-.303 2.875 0z" fill="#393e30"/><path d="M276.4 123.4c-2.014-.788 1.641-1.384 2.053-1.836.218-.24.315-1.229.582-1.346 1.435-.631 2.888.608 2.504 1.958-.215.756-1.63 3.282-2.416 2.937-.362.46-2.517-1.352-2.723-1.714z" fill="#322e23"/><path d="M263.294 107.83c-.428-.68-.581-1.44.118-1.997.8-.273 2.28-.67 2.715.296.035 1.203.45 2.47.823 3.389 1.08 1.51 2.372 3.064 2.599 4.975.099 1.033-.387 2.501-1.587 2.578-.755-.014-2.71.03-1.99-1.188.809-.868 1.087-2.197.18-3.102-.43-.663-.908-1.338-1.237-2.066-.435-.764-.857-1.994-1.62-2.886z" fill="#426550"/><path d="M261.957 118.95c.313-.989 1.073-1.77 1.907-2.354.602-.401 1.325-.725 2.064-.628.573.073 1.044.499 1.271 1.016-.072.287-.38.416-.598.58a12.056 12.056 0 0 1-3.248 1.392c-.437.086-.922.211-1.348.024l-.048-.03z" fill="#3d4e3d"/><path d="M273.377 113.759c.876-1.206 2.16-2.259 3.504-2.856 2.303-1.023 5.349.743 3.677 3.418-.46.735-1.188 1.13-1.773 1.774-.247.271-.593.832-.952.952-1.862.62-7.107-1.078-4.456-3.288z" fill="#426550"/><path d="M274.2 113.802c.724-.559 2.212-2.33 3.2-1.341 1.349 1.349-1.724 3.766-3.028 3.331-1.046-.349-1.334-2.426-.173-1.99z" fill="#3f745a"/><path d="M266.042 125.721c-.258-.376-.808-.809-.615-1.295.476-.19.991.085 1.456.209.823.32 1.667.578 2.506.85.734.28 1.55.566 2.014 1.241.34.63-.097 1.386-.596 1.79-.434.417-1.153.227-1.384-.309-.26-.555-.377-1.211-.89-1.612-.322-.33-.762-.532-1.23-.494-.43-.018-1.005.058-1.26-.38z" fill="#232423"/><path d="M267.059 120.13c.77-.461 1.658-1.21 2.613-1.21 2.471 0 3.305 2.95 1.065 3.51-1.079.27-3.343.64-4.38.12-1.264-.631-.038-2.142.702-2.42z" fill="#32372a"/><path d="M274.55 127.798c.403-.352.602-.918 1.115-1.147a4.974 4.974 0 0 1 1.576-.45c.711-.139 1.338-.62 2.083-.597.102.097.185.288.127.438-.142.306-.468.465-.747.626-.293.147-.585.297-.88.436-.664.27-1.42.327-2.014.755-.186.145-.322.344-.524.472-.147.177-.36.05-.465-.1-.11-.131-.18-.29-.272-.433z" fill="#3e2c20"/><path d="M449.578 136.16c-2.25-2.826-.4-2.307 1.583-2.969 1.252-.417.643-2.375 1.98-2.375 6.514 0-.125 9.644-3.563 5.345z" fill="#666"/><path d="M444.63 132.202c-.302-1.472-.371-1.016.197-1.584 1.266-1.266 4.419.267 3.563 1.98-.656 1.311-5.164 2.41-3.76-.396zm25.533-14.848c-.358-.336-1.62-2.34-1.386-2.574.198-.197 2.763-1.29 2.97-1.188 2.677 1.34.127 3.42-1.584 3.762zm-149.838 49.69c3.324-4.71 6.301.809 4.355 1.782-2.285 1.142-5.314.617-4.355-1.782z" fill="#fff"/><path d="M368.82 148.04c1.216-.158 2.162-1.052 3.167-1.387.932-.31 4.176-.434 3.167 1.584-1.08 2.158-5.478 1.23-6.334-.198z" fill="#666"/><path d="M376.737 147.841c2.18.155 4.331-.483 6.136-1.386.713-.356 1.957-.38 2.573-.792 1.12-.746 3.251-.677 4.157-1.583 1.435-1.435-1.35-1.782-2.177-1.782-2.388 0-16.207 2.232-10.689 5.543zm14.252-6.533c-.247 1.197 7.584-3.967 8.51-1.188.445 1.334-6.101 3.222-7.125 3.564-1.413.47-1.633-3.612-1.385-2.376zm11.48-3.365c1.36-.315 2.455-1.242 3.563-1.98.682-.455 1.465.04 2.177-.198 4.352-1.45-2.717 5.957-5.74 2.178zm9.897-3.168c.92-.607 2.013-.275 2.969-.594 2.318-.773 4.872-1.162 7.323-1.98 2.147-.715 5.03.454 7.126-.593.704-.352 2.173-1.386 3.365-1.386.354 0 5.496-1.028 6.136-1.188.487-.122 1.385-1.096 1.385-.594 0 1.902-3.13 1.704-4.552 2.178-2.141.714-4.181 2.085-6.136 2.573-2.818.705-12.846 1.366-14.647 3.168-.666.665-3.21 1.541-3.959.792-1.045-1.045-.01-1.626.99-2.376zm-28.651 3.469c3.34-1.22 5.039-4.748 8.62-5.311 7-1.102 2.352-.973 4.18-1.339 1.936-.387 6.835.19 8.475-.629.866-.433 2.152-.094 3.079-.28 1.001-.2 1.704-1.132 2.52-1.54 1.235-.618 3.077-1.47 4.478-1.82 1.377-.344 2.648-.523 4.059-.7.504-.062 1.035-.615 1.54-.7.852-.141 1.823.21 2.659 0 .47-.117 7.474-1.194 7.697-1.12.377.126.533.533.7.7.78.78-1.48 1.688-1.68 1.82-1.574 1.05-8.09 2.24-9.937 2.24-1.299 0-2.94 1.12-4.198 1.54-1.093.364-2.519-.28-3.64 0-3.207.802-6.365 2.887-9.937 3.78-.574.143-1.298.9-1.96 1.12-3.742 1.247-8.228 1.315-11.756 3.08-1.197.598-6.866 1.62-4.899-.84zm51.086-12.178c-1.234-4.766 5.954-3.503 7.418-4.48 2.62-1.746 6.873-2.104 10.218-3.22.931-.31 2.172.174 3.079-.28.492-.245 1.452-.992 1.96-1.12 1.545-.386 8.334-1.814 9.797-.84 2.723 1.817-4.78 3.78-5.879 3.78-2.585 0-5.535.619-7.838 1.54-2.131.853-4.614 1.007-6.858 1.68-2.274.682-4.521.71-6.718 1.26-1.667.417-3.155 2.017-5.179 1.68zm39.749-12.879c2.73-.698 5.468-.84 8.398-.84.74 0 2.832-.823 3.36-.56.358.18.382.486.56.84.431.864-1.08 1.52-1.68 1.82-3.08 1.54-6.406 2.232-9.798 3.08-1.577.394-1.871-1.193-1.54-2.52.232-.924.911-1.736.7-1.82-.233-.093-.186.467 0 0zm14.557-2.38c3.353 1.372 8.287-2.645 11.057-1.26.023.011 0 .383 0 .42 0 1.827-3.374 2.203-4.48 2.94-1.091.728-4.621.91-6.017.56-1.65-.413-.086-3.292-.56-2.66z" fill="#666"/><path d="M502.123 108.708c.037.335 9.705-3.498 10.357-1.54.2.597-.137 1.258-.56 1.54-.787.525-1.983.16-2.939.28-1.004.125-10.812 2.884-6.858-.28zm12.037-2.94c1.429-.078 2.83-1.148 4.339-1.4.796-.133 10.03-1.028 10.077-.98 1.137 1.138-2.088 1.26-2.52 1.26-1.341 0-2.964 1.567-4.338 1.96-1.828.522-4.015.607-5.879.98-2.082.416-3.79-.553-1.68-1.82zm16.375-3.5c2.145-1.042 9.262-.921 10.778-1.68 1.214-.607 3.85-1.422 5.598-.84.418.14-.715.527-1.12.7-.985.423-1.982.341-3.079.56-1.892.379-3.983 1.731-6.018 2.24-1.653.413-9.313 1.544-6.159-.98zm-84.257 24.218c.479-.137 1.057.12 1.54 0 1.197-.3 2.327-.687 3.499-.98 2.303-.576 5.194.19 7.418-.7.841-.337 1.753-.56 2.66-.56.66 0 6.663-1.583 7.417-1.96 1.454-.727 8.321-2.637 8.678-.14.189 1.321-1.306 2.177-2.24 2.8-2.071 1.381-4.783 2.462-6.858 3.5-1.69.845-19.591.49-21.694-.56-.258-.13-.379-1.195-.42-1.4zm32.332-6.58c.617-.613 1.716-.088 2.379-.42 4.678-2.339 10.731-.817 15.256-3.08 1.372-.685 3.622.298 4.758-.84.512-.511 3.032-.31 3.78-.56 1.654-.55 3.333-1.104 4.758-1.959.69-.414 12.037-2.969 12.037-2.38 0 1.31-5.837 3.253-6.998 3.64-2.118.706-4.416.78-6.578 1.26-1.382.307-3.546 1.026-4.34 1.82-.263.264-.757-.09-1.119 0-.574.143-1.48.731-2.1.98-2.014.806-4.233.571-6.298 1.26-2.751.917-8.21 2.52-11.057 2.52h-4.898c-.443 0-.42-1.703-.42-1.26 0 .68.76-.781.84-.98z" fill="#666"/><path d="M249.132 198.007c1.154-3.222 5.894-2.061 8.63-2.061 2.134 0 6.48-.3 2.962 3.22-1.196 1.196-3.88.265-5.152.902-1.796.898-2.694-1.221-3.993-1.546-1.02-.255-1.607-.347-2.447-.515z" fill="#2b7679"/><path d="M253.64 197.234c1.35.01 2.584-.515 3.864-.515.627 0 2.923-.683 3.348-.258 2.283 2.283-5.379 3.065-7.212.773z" fill="#3aa9c5"/><path d="M210.11 103.846c-.151-1.965-.506-4.27.386-6.054.585-1.172 2.768-1.417 3.734-2.061 4.031-2.688 9.252-2.498 13.652-1.03 2.338.779 4.474.586 6.44 2.06 1.5 1.125 1.341 3.199 2.06 4.637.83 1.661-2.001 1.964-2.962 1.804-1.104-.184-1.952-1.97-2.962-2.576-2.146-1.288-6.451-2.272-9.015-1.417-1.345.448-12.316 9.547-11.334 4.637z" fill="#589277"/><path d="M232.538 97.029c-.454-1.62.048-2.426 1.774-2.08 1.478.295 1.212 1.69 1.713 2.691.303.606.31 1.296.55 1.897.252.63.7 1.182.918 1.836.259.777-.6 1.757-1.468 1.468-.738-.246-.736-1.083-1.224-1.652-.74-.863-3.04-2.867-2.263-4.16z" fill="#4a7c6b"/><path d="M214.706 103.33c2.181.663 4.178.902 6.593.902 1.402 0 2.784-.128 4.157-.128 1.945 0 4.873-1.051 4.873 1.416 0 .23.123.912-.143 1.031-.17.077-4.717 1.198-5.447 1.417-1.267.38-2.46-.392-3.583-.644-2.39-.537-8.6 1.511-8.6-1.804 0-1.73.604-1.494 2.15-2.19z" fill="#6c9c80"/><path d="M217.178 96.528c-1.606-.347-3.086-1.43-3.32-2.157-.763-2.363 7.373-2.139 9.425-1.079 2.418 1.249-3.775 3.777-6.105 3.236z" fill="#517b6b"/><path d="M219.897 94.056c-2.427.553-5.725-3.578-3.09-4.895.95-.475 5.182-.967 5.795.258 1.895 3.791-1.655 7.262-2.705 4.637z" fill="#3a464c"/><path d="M212.685 96.761c-2.325-2.87-.086-6.283 2.962-4.25.36.239 1.412.634 1.546.901 1.237 2.475-3.078 4.303-4.508 3.35z" fill="#477765"/><path d="M231.681 113.12c-.006-1.083-.78-1.296-1.352-1.867-.362-.362-2.874-.733-3.22-.387-.114.115.038.637.065.773.144.72 1.926 3.121 2.64 3.478 1.747 1.186 2.625-.376 1.867-1.997z" fill="#4f5649"/><path d="M203.605 117.242c-.845-.486-1.782-.71-2.576-1.288-.61-.444-1.14-.908-1.674-1.352-1.511-1.26-2.25-2.567.129-2.963.424-.07.846-.282 1.288-.193.892.178 1.769.756 2.576 1.159.315.158.814.12 1.159.258 1.2.48 2.688-.274 3.735.773 3.415 3.415-1.74 4.765-4.637 3.606z" fill="#78c1ba"/><path d="M211.01 116.663c-.017-.692-.031-1.525.58-1.933.95-.632 4.076-.36 3.284 1.224-.846 1.694-4.749 2.48-3.863.709zm-14.81 15.393c-.737-.726-1.712-1.353-2.77-1.353-.783 0-1.483.026-2.253.129-1.995.266-1.935 2.607-.708 3.22 1.206.603 3.21-.014 4.443-.322.702-.175 1.755-.62 1.288-1.675zm5.151-4.896c.536-1.382 1.94-1.142 2.834-1.738.11-.074.592 0 .708 0 2.253 0 .26 2.897-.708 3.478-2.51 1.506-5.097-.607-2.834-1.74z" fill="#78ccae"/><path d="M159.351 135.131c-.326.07-3.987-2.566-3.288-5.364.352-1.406 2.819-1.15 3.98-1.731.894-.447 3.75-1.865 4.672-1.558.541.181 2.225 8.343 1.557 9.346-1.991 2.987-5.67 1.496-6.921-.693z" fill="#4ea5a8"/><path d="M159.834 128.832c2.337-1.34 3.685-.407 4.302 1.219 1.465 4.281-.676 4.936-3.431 3.354-3.018-2.085-3.86-2.671-.87-4.573z" fill="#50dfde"/><path d="M192.307 110.14c-1.342 1.291-6.386-.882-4.499-2.77 2.2-2.2 4.23-1.333 6.748.346.426.285 1.603 2.055.52 2.596-1.14.57-2.965-.27-2.77-.173z" fill="#4d6568"/><path d="M191.673 91.46c-1.206-1.046-2.803-2.779-3.304-4.282-.24-.72 6.065-2.065 7.097 0 1.124 2.25-2.61 7.239-3.793 4.283z" fill="#555f56"/><path d="M165.245 105.778c-.983.038-2.202-.77-2.202-1.836 0-1.642 5.032-2.676 6.24-1.468 1.4 1.4-.969 4.62-4.038 3.304z" fill="#38ad81"/><path d="M216.755 88.524c-1-2.798 2.978-5.22 4.404-3.794 1.942 1.943-1.168 5.952-4.404 3.794z" fill="#888f6f"/><path d="M203.908 90.237c-.5-.372-.979-1.163-.979-1.836 0-1.497.835-1.536 1.835-2.202.529-.353.989-1.233 1.469-1.713 1.193-1.194 3.593 4.944-.123 5.873-.837.21-1.274.435-2.202-.122z" fill="#667d67"/><path d="M176.869 91.583c4.604.52 2.865-2.866 4.404-4.405.23-.23.834-.1 1.101-.367 2.734-2.734 4.852 2.979 2.203 5.629-.378.377-.842.298-1.224.49-1.729.864-5.66 3.973-7.219.856-.512-1.025.089-1.557.735-2.203z" fill="#498269"/><path d="M188.16 98.876c-1.438.083-3.23-2.205-2.336-3.548.542-.813 1.09-.874 2.077-1.038 1.203-.201 3.256-.76 4.499-.346 2.712.904.78 5.191-2.596 5.191-.645 0-1.158.13-1.644-.26z" fill="#458476"/><path d="M180.288 98.876c.51-3.535-.059-4.627 4.066-5.452.754-.15 1.262-.52 1.817.173.642.803.408 1.657.692 2.51.978 2.934-4.786 4.712-6.922 3.288-.173-.115.217-.357.347-.52z" fill="#5ec9c6"/><path d="M147.015 100.76c.6-4.56-1.935-1.445-3.67-3.18-2.158-2.159 3.527-6.63 6.851-3.305.316 2.386.536 4.322.734 6.73-.727 1.455-3.556 1.55-3.915-.244zm-21.901 11.748c.05-1.094-.164-2.28.245-3.304.47-1.174 1.206-3.164 2.08-4.038 1.564-1.564 3.05 1.02 2.692 2.815-.28 1.395-2.589 3.134-1.836 5.017.53 1.324 3.355 3.742 1.958 5.14-.551.55-2.065.424-2.814.611-4.68 1.17-3.657-6.018-2.325-6.24z" fill="#4c6a67"/><path d="M128.54 103.942c.594-1.255 1.005-2.061 1.346-3.426.482-1.93.825-4.65 3.548-4.65.298 0 .642-.126.734.245.582 2.326-1.435 3.998-1.835 5.996-.2 1 1.13 1.411.734 2.203-1.406 2.811-3.392 1.524-4.527-.368zm8.584.138c2.956.161 5.242 1.282 5.242 5.247 0 2.94-.414 4.72-2.08 7.22-.227.34-3.17 4.928-4.038 2.325-1.184-3.552 1.133-5.714.612-8.322-1.417-4.05-2.677-5.877.264-6.47zm-19.595 14.302c.022-1.197 1.957-2.29 1.957-3.304 0-.829 1.662-3.691 2.08-4.528.61-1.219-1.006-5.255-2.447-4.894-2.345.586-1.435 3.287-2.692 3.916-1.777.889-7.753 3.29-6.729 6.363.42 1.257 5.785-5.194 6.73-3.304.89 1.78-2.512 5.751 1.1 5.751zm-12.969 9.79c.833-.386 1.29-1.758.978-2.692-.215-.646-.608-.735-1.223-.735-3.472 0-2.693 7.1.245 3.427zm7.952-3.059c-.375-1.503.205-2.653 1.101-3.55 2.104-2.103 6.725 1.85 5.873 4.406-.637 1.912-6.974 2.33-6.974-.856zm17.618 2.569c-1.404.696-4.912.282-3.792-1.958.316-.633 5.705-.657 6.484.123 3.011 3.011-3.18 6.46-3.18 3.916 0-.88-.096-1.35.489-2.08zm20.189-13.216c-.011-1.306.546-2.507 1.835-2.937.91-.303 1.788-.78 2.57 0 1.438 1.44-1.512 3.39-1.958 4.283-.52 1.041.652 2.91-.49 3.672-1.942 1.294-4.314-1.16-3.303-3.182.381-.763.917-.978 1.346-1.836zm5.138-7.831c-.58-.664-2.423-2.74-1.957-3.672.633-1.265 5.837.262 6.117 1.102.597 1.792-2.603 10.353-4.16 2.57z" fill="#4c6a67"/><path d="M156.191 100.638c.209-6.534 7.181-5.374 8.81-.489.714 2.142-5.933 5.496-7.341 4.65-.985-.59-3.658-4.598-1.469-4.16zm-2.447-10.278c.966-.836 2.71-1.073 3.67-1.714 2.12-1.412 2.57-.236 2.57 2.203 0 .682.246 2.018-.122 2.57-.766 1.148-3.134 1.533-4.527 1.223-1.575-.35-4.18-4.283-1.59-4.283zm13.948 1.468c-.907-2.816 3.455-6.993 5.506-3.916 1.438 2.157-.145 4.478-1.958 5.384-.633.317-1.91.82-2.569.49-.832-.416-.979-2.329-.979-1.958zm-19.82 32.917v-.978c0-3.785 5.516-4.864 6.117-3.06 1.85 5.551-9.737 5.486-6.117 4.038z" fill="#4c6a67"/><path d="M238.594 86.688c.644-.628 3.437-1.458 4.282-.612 1.016 1.016.54 4.176-.183 5.262-.293.44-1.822 1.767-2.08.734-.218-.871-.92-2.022-1.468-2.753-.56-.747-.55-1.696-.55-2.63z" fill="#4b766d"/><path d="M235.107 89.013c.268-.782 1.277-1.832 2.019-2.202.228-.114.575-.323.795-.368 4.246-.849.668 2.74.673 2.754.024.07.16.052.184.122.01.033-1.086.34-1.224.367-.792.159-2.996.7-2.447-.673z" fill="#48796a"/><path d="M230.726 92.559c-2.179-2.839 5.786-5.32 6.229-3.548.35 1.403-.985 6.593-1.99 7.096-1.91.955-3.53-2.366-4.24-3.548z" fill="#4a8177"/><path d="M236.782 91.001c-.398-1.391-.28-2.196 1.038-2.855.574-.287.978-.749 1.557-1.038 1.866-.933 1.557.555 1.557 2.682 0 1.284.793 1.134.346 2.25-.286.716-4.89 3.698-5.71 3.288-.498-.25.281-1.642.346-1.904.19-.755.582-1.57.866-2.423z" fill="#589277"/><path d="M236.759 95.407c-.968-.522.038-1.464.367-1.958.574-.862 4.228-1.245 3.548.796-.244.731-4.217 2.67-3.915 1.162z" fill="#497f74"/><path d="M253.565 91.607c.603-.278.988-.606 1.644-.606 2.444 0 3.722 1.036 2.596 3.289-.2.398-1.35.87-1.73 1.124-1.713 1.142-3.812-2.179-2.51-3.807z" fill="#579283"/><path d="M219.22 100.087c.858-1.007 2.622-1.298 3.979-1.298h2.682c1.087 0 4.227.21 3.633 1.99-.081.245-.315.548-.605.606-2.411.482-6.039-.087-8.825-.087-.36 0-1.403.188-1.644-.173-.092-.138.689-.925.78-1.038z" fill="#69a389"/><path d="M221.893 101.862c-.805.11-1.132-.516-.978-1.285.279-1.396 2.85-1.14 3.487-.183.807 1.21-1.664 1.89-2.509 1.468z" fill="#72b6a7"/><path d="M214.46 103.375c-.163-1.902.667-3.625 2.51-4.24.336-.112.965.053 1.384-.086.74-.247 1.89-.36 2.509.26 1.746 1.745.657 4.8-1.73 5.278-1.018.203-1.796.519-2.855.519-.874 0-1.065-1.28-1.817-1.73zm15.14.692c-1.162.279-2.403-.275-3.027-1.211-2.104-3.156 2.66-3.505 4.412-2.336 1.627 1.084.83 4.654-1.384 3.547z" fill="#81bba2"/><path d="M220.863 104.5c-.291-.349-1.88.282-1.903.26-.915-.915.862-1.986 1.21-2.51.777-1.164 5.673-2.073 6.316-1.644.59.393 1.463 1.29 1.99 1.817.464.464-.329 1.478-.605 1.644-.118.071-6.518 1.116-7.008.952-.164-.055-.034-.35 0-.519z" fill="#78c1ba"/><path d="M232.014 101.679c2.485-1.801 4.164 2.807 2.298 4.099-.726.502-1.743.83-2.298.061-.487-.675.252-1.68-.088-2.386-.327-.679-.293-1.114.088-1.774z" fill="#536f5c"/><path d="M229.6 104.943c-.142-.474-.086-.98-.086-1.47 0-.826 2.608-2.571 2.942-1.904.34.68.747 1.43.952 2.25.444 1.78-2.212 2.96-3.461 2.336-.167-.084-.255-.985-.346-1.212z" fill="#4f5649"/><path d="M230.466 109.173c-.96-.767-.756-2.36 0-3.115 1.589-1.59 6.999.966 5.71 3.115-.668 1.114-2.118 1.297-3.028 1.903-.81.54-2.942 1.963-2.942-.173 0-.778-.227-1 .26-1.73z" fill="#476f67"/><path d="M235.31 103.98c-.006-.335-.203-.858-.086-1.21.25-.75 1.827-.856 2.336-.347 2.61 2.611.209 6.302-1.47 2.942-.26-.519-.43-.801-.78-1.384zm-41.094-17.218c-.378-.335-1.34-1.428-.692-2.077 1.98-1.98 6.304-1.188 4.586 2.25-.6 1.199-4.775 2.03-3.894-.173z" fill="#4a8177"/><path d="M257.2 82.262c1.49-2.953-2.726-3.245-3.375-1.298-.764 2.291 2.362 2.564 3.374 1.298zm9.083-3.375c.026-.57-.142-1.452.433-1.644 1.434-.478 3.486 2.051 2.422 3.115-1.247 1.247-4.1-.475-2.855-1.47zm3.287 6.75c-.018-.638 1.09-1.166 1.731-.952.457.152.455.737.606 1.038 1.32 2.642-6.007 2.85-2.336-.086z" fill="#589277"/><path d="M252.97 107.063c-.2-.377.202-.333.551-.857.142-.213.142-.51.306-.673.268-.268.655-.137.979-.244 2.108-.703 4.038.795 6.056.795.742 0 2.272 1.035 1.713 1.407-1.474.983-6.541.245-8.626.245-.234 0-1.346-.059-1.346-.428 0-.147.253-.153.367-.245z" fill="#426450"/><path d="M222.2 104.677c.527-.089.952-.448 1.467-.551.476-.095 1.322-.358 1.775-.245.187.047 3.35.168 3.12.245-.838.28-6.309 2.364-6.73 1.101-.133-.398.142-.415.367-.55z" fill="#71ac99"/><path d="M225.686 95.56c-.338-.692-.366-1.778-.122-2.509.453-1.36 4.614-1.302 3.732 1.347-.657 1.97-3.822 2.222-3.61 1.162z" fill="#4d6c61"/><path d="M238.044 112.937c-.299-.705-.193-2.076.55-2.448 1.746-.873 3.314 2.122 2.63 3.488-.568 1.138-3.423-.069-3.18-1.04zM209.72 98.742c-.08-.462-.38-1.627.06-1.958.665-.499 1.08-1.42 1.958-1.713 2.53-.844 2.153 2.374.918 3.61-.399.398-.937.077-1.468.183-.49.098-1.024.145-1.468-.122zm31.933 8.688c-.818-.575-.183-1.224.245-1.652.447-.447 4.087-.25 3.731 1.53-.206 1.03-3.744 1.285-3.976.122zm18.228-10.458c-.527-.15-1.551-2.17-.952-2.769.499-.498 2.597-1.124 3.374-.606.545.364 1.55 2.87 1.212 3.548-.3.599-2.81 1.948-3.46 1.298-.313-.313-.174-1.076-.174-1.471z" fill="#5c6d5c"/><path d="M271.56 95.155c.785-.024 2.107.042 2.596-.692 1.34-2.012-3.361-2.61-3.98-1.99-.693.693-2.995 4.426-.173 3.72.741-.185.816-.742 1.558-1.038z" fill="#3a716e"/><path d="M271.734 98.53c-2.001.831-2.906-3.276-1.73-3.98.502-.302 1.716-.087 2.249-.087.349 0 1.523.11 1.816.346 3.036 2.428-2.335 6.115-2.335 3.72z" fill="#3f8e88"/><path d="M247.342 107.369c-1.21-.607-.847-.752-.367-1.713.557-1.115 2.628-2.388 3.854-1.775.598.299.493 2.492.367 3.12-.199.997-3.854 1.68-3.854.368z" fill="#426e67"/><path d="M242.51 99.354c.398-1.018 1.086-1.218 1.957-1.591 1.228-.527 4.413.438 3.365 1.835-.709.945-1.97.926-2.876 1.469-.714.429-1.303 1.373-1.957 1.59-.365.122-.738-.125-.979-.367-1.45-1.45-.323-1.84.245-2.692" fill="#47a099"/><path d="M249.196 102.51v-.433c0-1.961 3.062-2.571 3.331-2.033.841 1.682.795 3.829-.908 4.802-.745.426-1.799.244-2.25-.432-.249-.375-.302-1.035-.302-1.471 0-.151.259-.356.13-.433-.073-.043-.087.144 0 0z" fill="#3a7975"/><path d="M241.064 88.882c1.145-1.234 4.4-.743 3.677 1.427-.077.23-.363.744-.606.866-2.458 1.229-4.038.123-3.07-2.293zm-5.45-.13c-.813-.457-1.703-2.462-.303-2.812.624-.157 1.137.317 1.6.649 1.274.91 1.927 1.836.563 3.201-1.36 1.36-2.732-.69-1.86-1.038z" fill="#4c7d70"/><path d="M240.277 102.352c-.187-.851.626-1.786 1.529-1.56.221.055.222 1.527-.03 1.743-.51.437-1.937.474-1.5-.183z" fill="#426e67"/><path d="M240.46 103.698c.26-.22.148-.883.367-1.102.246-.245 1.14-.73 1.56-.52.459.23.786 1.636.49 2.08-.133.2-.393.542-.612.674-.18.107-.45.062-.643.03-.723-.12-1.162-.395-1.162-1.162z" fill="#468a81"/><path d="M238.553 95.664c-.378-1.34 1.89-1.267 2.798-1.086 1.403.28 2.699 3.152 1.637 4.207-1.554 1.546-4.776-1.663-4.776-2.918" fill="#3a464c"/><path d="M237.493 92.317c-.485-.64-.48-1.786.061-2.417.337-.393 1.133-.405 1.59-.428.498-.025.851-.106 1.285.184.29.192.14.599-.03.795-.386.446-.842.783-1.285 1.163-.73.626-.586.826-1.59.826m-9.514 5.208c.124-.664-.31-2.49.374-2.946.284-.189.592-.17.954-.207.538-.054 1.37-.262 1.908-.083 1.099.366 2.13 2.13 1.7 3.277-.502 1.34-5.267 1.618-4.935-.041z" fill="#5e9d83"/><path d="M215.32 97.938c-.451-.94-.113-1.512.58-2.033.558-.418 1.542-.31 2.24-.373.444-.04.91-.041 1.369-.041.25 0 .729-.06.912.124.682.682-.286 2.19-.83 2.613-.71.553-2.046.374-2.944.374-1.181 0-1.13.122-1.327-.664z" fill="#548671"/><path d="M512.527 103.828c3.47.084 12.639-5.777 15.595-2.82 1.025 1.025-1.164 2.655-1.825 2.82-2.35.588-5.157.226-7.466.996-1.715.572-7.334 2.568-9.394 2.568-2.894 0 .233-2.992 3.09-3.564z" fill="#505360"/><path d="M436.214 113.95c2.097-.246 4.031 0 6.138 0 1.754 0 4.147.236 4.147 2.323 0 .179.382.805 0 .995-1.976.989-11.174 1.977-13.77 1.328-1.418-.355-4.638-1.413-6.137-.664-1.35.675-7.485 2.304-8.793.996-.61-.61-3.168-3.801-1.825-5.144 1.473-1.474 10.872-3.357 12.94-2.323 1.654.827 5.424 2.864 7.3 2.489z" fill="#3e4352"/><path d="M395.9 114.945c4.202-1.564 26.72-7.613 28.203-4.645 1.233 2.466-2.428 3.484-3.981 3.484-2.117 0-4.15.522-6.305.83-2.631.376-5.712-.48-8.294.166-2.52.63-4.168 1.493-6.968 1.493-1.517 0-3.762.888-2.655-1.328z" fill="#2e383c"/><path d="M401.075 117.77c1.157-.37 2.345-.367 3.549-.367.847 0 4.649-.567 4.649.857 0 .194.037.452-.061.55-.24.24-.077.811-.367 1.102-.271.27-1.99-.895-2.325-.98-1.78-.444-3.863.641-5.69.184-1.005-.251-.563-1.022.245-1.346z" fill="#515c6d"/><path d="M407.513 118.098c1.139-.85 2.655-1.162 3.65-2.157 1.172-1.172 6.47-1.77 8.295-1.161.825.275.6 1.802.83 2.488.113.342.38 1.397.165 1.826-2.603 5.207-11.13 3.527-12.94-.996z" fill="#33365e"/><path d="M410.007 114.344c1.657.125 3.27-.187 4.894-.367.902-.1 2.596-.629 3.487-.184.197.099.329.293.55.367.222.074 1.14.808.796.98-.67.334-1.642.364-2.386.55-1.294.323-4.077-.122-5.567-.122-.164 0-1.11.113-1.223 0-.263-.263-.876-.345-1.102-.796-.291-.583.956-.428.551-.428z" fill="#31374e"/><path d="M507.66 98.746c2.453.817 3.98 1.968 1.34 3.288-3.692 1.846-20.977 3.637-24.137.476-.19-.19-.234-.713-.173-1.255 8.155-.934 15.853-1.788 22.97-2.51z" fill="#333758"/><path d="M526.433 97.015c3.422.007 7.354.41 7.354 2.207 0 .654-6.103.75-4.845.952 2.17.347-4.428.855-6.619 1.168-3.58.511-18.063 1.978-11.117-2.942 5.329-.526 10.363-.98 15.097-1.385.043-.004.088.004.13 0zm-42.436 4.327c.971.033 1.826.139 2.163.476.988.987-.855 2.462-1.514 2.682-.684.228-1.41.807-2.163.995-1.698.425-15.672.32-15.918-.173-.336-.67-.163-1.335.173-1.947 5.978-.73 11.718-1.401 17.216-2.033.014 0 .03.002.043 0z" fill="#333758"/><path d="M525.043 100.958c3.175-.903 5.506-.994 7.644-1.422 4.462-2.018 3.486-1.515 4.725-1.515 1.864 0 3.402.457 4.811 1.161.417.209.738.12 1.161.332.248.124 0 1.106 0 .83 0-.061-.77.106-1.161.498-.728.728-2.76.699-3.65.995-1.568.523-14.897 4.414-13.106.83.123-.245-.674-1.508-.424-1.709z" fill="#515459"/><path d="M565.451 94.895c.218.198.287.42 0 .563-2.306 1.153-7.05.519-9.776.908-.613.088-1.044.51-1.6.65-3.306.826-6.223-.782-9.863.432-.365.122-2.424.322-2.64 0-.562-.844 1.105-1.41 2.813-1.774 8.22-.5 15.27-.775 21.066-.779z" opacity=".978" fill="#373f5b"/><path d="M536.914 97.69c2.505-.02 4.983-.499 7.466-.499 1.488 0 3.149-1.161 4.479-1.161 1.36 0 2.788-.498 3.816-.498 4.065 0 2.322 2.323-.166 3.153-1.867.622-18.67 4.131-15.595-.996z" fill="#39405b"/><path d="M541.054 95.847c1.08.148 1.925.627 1.514 1.86-.102.305-.844.915-1.168.996-1.063.265-8.836.803-12.545.995-2.218.114-1.389-1.193.65-2.942 4.051-.333 7.945-.669 11.549-.909z" fill="#333758"/><path d="M549.576 95.371c.168.045.26.108.26.173 0 .363-5.852.995-6.1.995-.913 0-3.376.952-3.98.65-.204-.103-.01-.488-.173-.65-.213-.213-.3-.41-.303-.562 3.62-.25 7.06-.443 10.252-.606h.043z" fill="#333758"/><path d="M441.908 107.918c.428-.027.766.03.952.216 1.566 1.567-1.21 3.678-2.682 3.678-3.496 0-4.43.79-8.435 1.125-3.525.293-6.98-.13-10.469-.13-.309 0-5.297-.37-3.806-1.86.682-.683 1.18-.79 1.903-1.428.745-.102 1.553-.203 2.293-.303 2.188-.106 4.361-.26 6.575-.26 1.86 0 4.837-.13 5.97-.13h3.676c.702 0 2.738-.826 4.023-.908z" fill="#2b3068"/><path d="M399.218 115.443c1.32-.445 6.695-3.142 7.466-.83.858 2.576-10.982 2.237-7.466.83z" fill="#727785"/><path d="M443.016 111.13c3.621-.453 7.144-1.162 10.783-1.162 2.93 0 5.642-1.991 7.963-1.991 1.228 0 6.913.276 5.807 2.488-2.309 4.618-28.249 11.3-26.046 2.49.18-.725 1.129-.917 1.493-1.826z" fill="#3c3e58"/><path d="M442.41 110.792c.243-.392.661-.232 1.026-.323.29-.072.476-.01.733.117.15.076.347-.01.44.176.329.658 7.857.207 7.4 1.24-.347.782-8.575 3.153-9.072 3.278-.217.054-.429.285-.645.38a8.09 8.09 0 0 1-1.73.558c-.714.143-1.473.095-2.2.176-3.37.375-6.806.643-10.205.381-.753-.057-1.574.066-2.317-.058-1.041-.174-2.128-.351-3.197-.44-.394-.033-2.966-.424-3.08-.763-.506-1.52 2.13-1.357 2.933-1.437 1.118-.112 2.22-.387 3.344-.44 1.631-.078 3.267-.155 4.897-.235.85-.041 1.788-.113 2.64-.058.826.053 1.694.192 2.522.058.695-.113 2.37-.37 2.933-.616.695-.304 1.267-.945 1.906-1.349.442-.28.814-.494 1.32-.675.189-.067.448.088.351.03z" fill="#333949"/><path d="M415.476 114.282c4.1 0 3.99-1.584 7.134-1.825 1.538-.119 20.249-1.952 20.623-1.827.237.079 3.002.676 2.968 1.31-4.529 5.067-13.595 1.4-18.282 3.67-.475.316-.82.721-1.493.497-.886-.295-11.175-1.45-10.95-1.825z" fill="#28323e"/><path d="M446.493 111.898c-.884-.52-1.762.315-2.596.58-.821.537-1.78.603-2.737.567-3.084.004-6.205-.149-9.252.42-.691.238-1.378.509-2.119.512-1.012.302-2.082.356-3.11.615-1.662.277-3.362.492-5.047.38-.388-.225-1.738-.133-.897.38.754.206 1.564.111 2.297.428.916.325 1.91.013 2.83.348 1.242.149 2.571.392 3.765-.116 1.026-.314 2.115.122 3.143-.207 2.44-.453 4.977.054 7.387-.582 1.547-.505 3.11-.994 4.584-1.69.36-.769 1.64-.663 1.752-1.635z" fill="#2e3644"/><path d="M398.223 120.753c1.353-.251 1.533-1.66 2.82-1.66 12.985 0-.53 4.464-2.156 3.651-.427-.213-.59-1.625-.664-1.991z" fill="#5f6c7d"/><path d="M407.572 119.83c.876-.191 4.064-1.667 4.752-1.234 2.249 1.412 4.704.954 4.712 1.926.004.542-2.333.415-3.053.895-1.223.816-9.373.783-6.41-1.587z" fill="#5f6c7d"/><path d="M356.748 119.757c1.801-.217 3.637-.166 5.475-.166 2.099 0 7.747-1.127 6.802 2.655-.22.88-8.805 6.46-9.125 6.14-.104-.105-.079-.988-.166-1.162-1.412-2.826-2.986-4.201-2.986-7.467z" fill="#443565"/><path d="M455.88 104.716c1.758.035 3.609.26 5.061.26.993 0 7.188-.302 8.435.173 5.824 2.218-5.546 2.834-6.229 2.985-5.833 1.297-10.086 2.986-16.135 2.986-.122 0-.728.227-1.514.26-.936.038-2.096-.126-2.163-.26-.127-.255-4.4-.077-4.498-.303-.269-.618 3.71-1.574 3.2-2.337 3.277-1.312 6.783-2.03 10.08-3.244 1.247-.16 2.534-.365 3.763-.52z" fill="#293749"/><path d="M477.19 108.308c2.592-.487 5.272-.605 7.798-1.327 2.077-.594 10.676-2.985 10.783.166.05 1.48-2.687 2.634-3.483 3.153-.293.19-1.763 1.186-3.813 1.722-4.342 1.133-10.876 2.039-11.45 1.762-.858-.414-2.32-2.307-2.09-3.56.095-.52 1.527-.932 1.758-1.086" fill="#424455"/><path d="M480.84 105.654c1.911-.562 3.429-1.992 5.475-1.992 1.595 0 3.536-.314 4.977.166.683.228 5.27.053 5.585.683.658 1.315-6.58 3.484-12.041 4.277-2.208.32-4.959-.222-5.489-.148-1.401.196 1.151-2.13 1.494-2.986z" fill="#32374e"/><path d="M365.54 119.923c8.55-1.45 18.343-1.967 25.881-4.48 1.457-.486 3.154.041 4.645-.332 1.417-.354 5.549-.184 6.304 1.328 1.427 2.854-4.55 2.955-5.64 3.318-1.393.465-3.05.669-4.472 1.024-2.11.528-4.236 1.286-6.477 1.66-2.977.496-6.742 1.03-9.73 1.456-2.43.348-3.922-.655-6.529-.655-1.319 0-1.96-1.142-2.986-1.825-.016-.011-1.829-.323-1.659-.664.159-.317.443-.553.664-.83z" fill="#333c61"/><path d="M433.228 127.722c-.12-1.21 3.763-.555 5.308-1.328.826-.413 1.38-1.51 2.323-1.825 2.962-.987 6.814.243 9.622-1.161.512-.256 1.134-.525 1.659 0 .41.41-3.218 2.068-3.484 2.157-1.695.565-17.422 5.48-15.428 2.157z" fill="#54413f"/><path d="M435.55 118.264c.614.205 3.167-.136 3.484.498.489.978-6.795 1.038-7.631.83-3.999-1-7.588.15-11.116 1.327-2.125-1.03-3.318-1.149-2.807-1.854 2.38-3.281 16.03-1.47 18.07-.801z" fill="#43445f"/><path d="M434.223 120.09c2.585-.804 5.67-1.992 8.627-1.992 2.995 0 5.591-1.025 8.129-1.66 2.073-.518 4.901-1.719 7.133-1.16 1.822.455.987 2.546-.331 2.986-3.633 1.211-7.61 1.648-10.95 3.319-1.416.708-4.004-.576-5.64-.166-1.635.408-4.74 2.358-6.802 1.327-.145-.072-.498-1.568-.498-1.825" fill="#605e5d"/><path d="M457.534 115.15c1.59-1.237 4.522-2.394 6.385-2.86 1.09-.272 4.973-1.659 5.64-1.659 1.27 0 3.067-.518 4.441-.518 1.713 0 4.96 1.964 9.095 1.669.434-.031-5.458 1.402-5.904 1.67-2.437 1.462-5.492.423-7.963 1.66-3.126 1.562-10.402 6.156-10.286 2.488.004-.115-1.002-2.413-1.408-2.45z" fill="#55535a"/><path d="M475.226 110.234l5.954 2.523m-.176-.293l6.892-.44c-2.947-.038-8.12-2.555-12.613-1.824-1.689.274-3.628.84-3.957.944" fill="#4b4b57"/><path d="M460.27 108.64c2.705-.86 4.932-1.731 7.962-2.489.256-.064.113-.686 1.804-.634 6.45.2 15.17-1.098 15.453 1.088.042.322-2.471 1.52-3.35 1.81-1.552.515-3.656.735-5.114 1.22-4.267 1.423-9.687 2.89-13.272.499-1.42-.947-2.195.118-3.484-1.494z" fill="#313542"/><path d="M494.776 105.488c2.42-.622 4.82-.583 7.134-1.162 2.348-.587 15.516-4.584 15.516-.412 0 .384-4.225 1.169-5.562 1.965-1.095.651-.833.938-1.162 1.102-1.596.798-11.044 3.487-12.377 2.82-.526-.262-1.756-.317-3.453-1.422-1.986-1.293-5.924.472-5.924.472s4.73-2.705 5.828-3.363z" fill="#494d55"/><path d="M508.711 101.505c1.255.037 2.411-.154 3.65-.331.378-.054 11.989-.326 10.048.253-4.344 1.295-16.777 2.899-19.172 3.729-2.064.715-4.778.738-9.527.91.15-.301 1.926-1.423 2.227-1.574 1.138-.569 6.359-1.092 7.963-1.493 1.805-.452 3.256-.975 4.811-1.494z" fill="#41434e"/><path d="M467.569 115.443c4.807-1.62 9.991-1.837 14.433-3.318 1.624-.542 3.714.365 5.309-.166 1.411-.47 6.002-3.122 7.963-1.162 1.364 1.365-3.746 2.513-4.314 2.655-.964.241-2.607-.106-3.484.332-1.513.757-3.42 1.815-5.474 2.157-2.064.344-4.134-.17-6.138.332-1.931.483-7.34 3.298-9.623 2.157-1.475-.738 1.05-2.64 1.328-2.987z" fill="#7a767f"/><path d="M492.62 110.465c2.381-4.705 4.712-.243 6.967-.995.824-.275 1.672-1.162 2.489-1.162 1.586 0 2.04-.676 3.317-.995 1.25-.312 2.733.312 3.982 0 2.567-.642 5.761-1.825 8.46-1.825 1.015 0 3.319-.713 3.319.663 0 1.287-3.752 1.826-4.977 1.826-1.994 0-4.452 1.373-6.304 1.99-4.14 1.38-9.235.305-13.272 2.324-.415.207-2.884 1.263-3.484.663-.468-.468-.639-1.64-.498-2.489z" fill="#79737f"/><path d="M516.509 105.985c4.603-2.447 9.407-1.948 14.599-2.986 2.202-.44 4.309-1.494 6.802-1.494 1.543 0 2.642-.663 4.147-.663.608 0 1.825.608 1.825 0 0-.527.114.88 0 .995-.562.562-2.035 1.267-2.82 1.66-.693.346-2.052-.154-2.82 0-2.71.542-5.396 1.1-8.295 1.825-2.869.717-6.23 1.659-9.125 1.659-.9 0-2.495.577-3.318.166-.435-.218-1.67-2.06-.995-1.162z" fill="#6e6d6e"/><path d="M542.223 100.842c1.46-1.604 3.18-1.494 5.309-1.494 2.006 0 2.416.202 3.815-.497.887-.444 4.516-.203 3.65.663-.514.515-12.354 3.075-12.94 2.49-.276-.277.09-.779.166-1.162z" fill="#6e6d6e"/><path d="M554.665 98.685c.907-.233.987-.498 1.991-.498 8.662 0-3.426 4.087-1.99.498z" fill="#978e91"/><path d="M566.1 94.895c3.529.009 6.57.113 9.214.303.411.66.379 1.792-.736 2.163-1.872.625-22.861 2.791-20.59-.995 2.798-.934 6.134-.27 8.824-1.168.36-.12.753-.178 1.168-.26.682-.003 1.469-.044 2.12-.043z" fill="#464858"/><path d="M454.14 115.602c1.057-.271 2.369-.431 3.344-.821 1.105-.442 4.359-1.061 5.425-.528.371.186.37.531.44.88.039.193.191.798.059.997-.11.165-.862.328-1.056.41-.378.163-.653.495-1.056.646-.504.189-1.118.101-1.642.176-.662.095-1.23.492-1.848.616-.74.148-1.539.216-2.287.323-.386.055-.801.264-1.203.264-.376 0-1.446.342-1.583.205-.187-.187 1.138-1.371 1.32-1.613.367-.49-.185-1.01.087-1.555z" fill="#5a585b"/><path d="M435.384 123.574c2.465-2.002 5.563-2.157 9.125-2.157.157 0 8.534-2.858 9.124-3.153 2.083-1.042 5.601-.146 7.631-1.161.976-.488 4.48.087 4.48.497 0 2.52-3.512 1.342-5.143 2.157-1.436.719-2.864.457-4.48.996-2.376.792-4.946 1.98-7.465 2.82-1.387.463-2.96-.096-4.147.498-1.222.612-3.561 1.992-4.811 1.992-.73 0-3.726 1.085-4.314.497-.326-.326-.663-2.228-.663-2.323" fill="#b4aca6"/><path d="M457.29 117.727c.206-.218 2.566-.291 3.313-.587 3.19-1.26 10.132-2.833 10.781-1.365 1.254 2.835-9.41 4.76-13.525 4.491-2.148-.14-2.281-1.509-.57-2.54z" fill="#948f91"/><path d="M488.16 107.741c1.012-.42 2.061-.933 3.138-1.202.561-.14 1.25-.552 1.7-.616.262-.038.467-.26.734-.294.347-.043 2.799-.368 2.932-.234.143.142-.14.399-.234.44-.38.163-.833.058-1.232.146-.68.151-1.686.557-2.258.91-1.14.7-2.276 1.697-3.52 2.112-.486.162-1.248.088-1.759.088-.457 0-.93.074-1.378 0-.315-.053-1.216.015-1.437-.206-.113-.113.603-.34.645-.352.862-.246 1.736-.792 2.669-.792z" fill="#3a3e4f"/><path d="M466.986 111.29l13.96-2.64 1.319.235c-5.518 2.114-10.622 2.951-15.28 2.405z" fill="#632760"/><path d="M442.82 118.066c5.186-2.058 10.82-4.262 15.868-5.158 2.514-.483 4.647-1.104 7.274-.977-4.307 2.925-10.157 3.887-14.95 5.237-1.34.22-2.66.585-3.945 1.018-1.419.29-2.625.145-4.247-.12z" fill="#4b4b5a"/><path d="M459.624 108.65c.652.349-14.433 2.315-13.783 2.67 5.814 2.674 14.301-2.368 18.974.528.987.197 1.725-.211 2.64-.44.53-.133.634-.019 1.026-.41.363-.364-2.418-1.033-2.698-1.145-3.642-1.457-2.345-2.474-6.159-1.202z" fill="#373a4f"/><path d="M509.246 103.957c.538-.178 1.044-.625 1.645-.473.948-.138 1.904-.314 2.774-.73 2.339-.78 4.877-.42 7.226-1.152.577-.027 1.176-.147 1.722-.181-.036.391-.63.472-.899.738-.648.438-1.37.742-2.11.986-.462.122-.847.455-1.305.552-1.437.21-2.895.12-4.337.281-.913.075-1.838.061-2.737-.13-.657-.08-1.344-.111-1.98.11z" fill="#4b4e59"/><path d="M522.443 101.23c.679.075 1.146-.54 1.787-.669 1.035-.317 2.143-.35 3.152-.766.53-.057.925-.443 1.438-.553.909-.29 1.865-.265 2.802-.359.683-.291 1.452-.269 2.165-.475 1.428-.313 3.004-.502 4.377.12.539.24 1.185 1.074.607 1.58-.79.466-1.754.29-2.63.33-1.708.013-3.427.02-5.115.316-1.664.095-3.338.164-4.966.554-1.14.213-2.302.421-3.467.342-.277.001-.332-.247-.15-.42z" fill="#424658"/><path d="M518.04 97.708c-.417.285-1.178.546-1.383.648-1.953.977-6.81 1.558-9.257 1.558-2.393.358-4.632.039-6.792-.433 6.118-.648 12.005-1.267 17.433-1.773z" opacity=".978" fill="#373f5b"/><path d="M325.19 117.04c-.166-.93-.046-2.122-.587-2.934-.187-.28-.526-.526-.763-.762-1.018-1.018-.226.88-.586.88-.039 0-.52-.696-.587-.763-.144-.144-2.522-2.216-2.522-1.701 0 .375 3.742 4.802 4.106 5.045.329.22.558.387.938.234zm-7.743 3.46c.02-1.085.304-2.241.059-3.343-.274-1.234-.608-2.744-1.643-3.52-.655-.491-1.324-.787-1.29-.821.202-.202 1.444 2.457 1.525 2.698.583 1.748.36 3.543.821 4.928.057.171-.063.528.117.528.004 0-.003-.286 0-.293.069-.206.175-.176.411-.176zm-10.206-2.053c.068-1.769.06-3.576-1.231-4.869-.042-.041 0 .118 0 .176 0 .523.293.834.293 1.35 0 .505.723 2.806.938 3.343zm26.629-1.467c-.153-.49-.178-.967-.293-1.466-.148-.641-.162-.924-.645-1.408-.173-.173-.255-.372-.41-.528-.016-.015-.026.84.175 1.643.217.868.474 1.9 1.173 1.76z" opacity=".978" fill="#e5ca6b"/><path d="M278.786 168.86c.703-.455 1.51-.62 2.386-.795 3.412-.683 3.79 3.313 3.059 5.874-.454 1.587.121 4.514.245 6.18.11 1.483.244 2.933.428 4.405.105.84.84 1.908 1.1 2.692.374 1.118.062 2.877.062 4.038 0 2.09.048 4.406-.183 6.486-.153 1.37-.817 2.633-1.04 3.977-.153.915-.19 1.663-.55 2.386-.288.575-.588 1.656-1.224 2.08-.188.125-4.826 5.99-4.956 6.119-.068.068-.232.257-.367.122-.595-.595.512-2.097.184-2.753-.498-.873-1.748-.682-2.08-1.346-.707-1.415 1.059-2.716.55-3.733-.167-.334 2.907-2.629 2.753-2.936-.238-.477-2.458-1.92-2.691-2.387-.28-.558 1.786-3.67 1.651-4.344.26-1.825-4.004.094-4.16-.061-.667-.667 2.442-3.324 2.203-4.283-.218-.871 3.754-3.42 3.487-4.222-.351-1.053-2.87-.416-3.243-1.162-.383-.766.161-2.475.551-3.06.174-.261.634-.494.734-.795.272-.816-.66-1.7-1.04-2.08-.516-.516 1.343-1.983 1.53-2.448.464-1.162-3.445-.483-3.732-1.346-.347-1.041 3.412-2.956 3.67-3.732.47-1.407-.575-2.044.673-2.876z" opacity=".978" fill="#273534"/><path d="M282.763 169.288c.485.249 1.145 1.436.795 2.02-.644 1.073-1.182 1.1-1.59 2.325-.337 1.01 1.109 1.815 1.284 2.692.314 1.571-.717 1.374-1.223 2.386-.136.27-.172.588-.306.857-.288.576.852 1.326.428 1.835-.645.774-2.884 1.502-2.447 2.815.588 1.764 5.702-.208 6.423 1.958.362 1.085-5.395 3.116-4.649 3.365.735.245 1.39-.22 1.774.55.08.16-.27.392-.367.49-.614.614-1.61 3.69-1.835 4.589-.218.872 1.888.797 2.447.673 2.994-.663-1.31 4.068-1.774 5.017-.68 1.39.734 2.644.734 4.222 0 .295-.35 1.848.122 1.713.725-.207 4.106-2.243 4.527-2.876.237-.355.363-.745.612-1.1.23-.329.533-.505.795-.796.297-.33.343-.944.49-1.346.246-.68.595-1.48.795-2.08.317-.951-.6-5.445-.795-6.425-.135-.675.052-1.457 0-2.142-.196-2.537-.05-5.103-.184-7.648-.112-2.124-.77-4.147-.979-6.24-.144-1.445-.133-2.881-.367-4.284-.104-.626-.338-4.054-.917-4.344-.575-.287-4.916.37-3.793 1.774z" opacity=".978" fill="#223d3f"/><path d="M388.23 166.792c-.642 5.43-.582 11.203-3.422 15.584-1.213 1.873-1.29 3.445-2.25 5.365-.69 1.382-1.182 3.419-1.902 4.5-1.438 2.157-3.262 2.05-4.845 3.634-1.506 1.506-3.608 3.139-5.018 5.019-1.944 2.592-5.265 5.166-6.748 8.133-.171.342-1.107 2.792-2.596 3.288-1.488.497-4.921.75-5.883 3.635-.307.923.118 1.44-.692 2.25-.647.647-6.347.928-7.44 3.114-.814 1.628.877 4.482-.173 6.058-2.067 3.1-4.21 1.614-6.23 3.634-1.035 1.036.436 5.148-2.94 8.307-4.18 3.91-4.373 12.37-1.039 15.92 2.769 2.604 4.291 5.514 5.883 9.692-20.85-19.122-25.03-8.841-33.221-11.076-10.056-2.742-16.28-4.627-24.225-11.248-2.424-2.021-13.265-10.355-15.053-11.25-.095-2.083-14.68-.28-26.156.339-4.81.72-3.63-2.64-.805-3.895 9.684-3.922 19.861-6.385 27.48-10.98 1.41-.94 2.102-2.96 3.114-3.634 2.277-1.518 3.837-3.491 5.537-5.192 2.057-2.057 5.152-3.954 7.787-5.71 7.5-5.002 12.668-12.826 20.244-16.615 2.151-1.075 5.753-4.24 8.479-6.057 1.236-.824 2.377-2.942 3.883-3.222 3.904-.744 6.323-2.773 9.393-4.093 3.509-1.484 7.337-1.804 10.95-2.715 6.678-1.686 9.896-.657 19.63-2.388 4.451-.879 9.83-1.88 13.416-2.465 4.475-.687 14.841 2.068 14.841 2.068z" fill="#ded5a3"/><path d="M387.707 167.017c.286.013.416.129.475.303 0 .058.043.115.044.173 0 .055.01.111 0 .173-.149.93-1.472 2.623-2.077 3.375 1.837-4.115-1.842 2.203-4.11 5.797-1.237 1.857-1.289 3.445-2.249 5.365-.69 1.382-1.183 3.419-1.903 4.5-1.438 2.157-3.262 2.05-4.845 3.634-1.506 1.507-3.608 3.139-5.018 5.019-1.944 2.592-5.264 5.166-6.748 8.133-.17.342-1.107 2.792-2.595 3.289-1.489.496-4.922.75-5.883 3.634-.308.923.117 1.44-.692 2.25-.647.647-6.348.928-7.44 3.115-.814 1.627.876 4.482-.174 6.057-2.067 3.1-4.21 1.614-6.229 3.634-1.035 1.036.435 5.148-2.941 8.307-4.18 3.91-4.373 12.37-1.038 15.921.21.198.408.404.605.606.304 1.954 1.037 3.733 2.163 4.932a18.412 18.412 0 0 1 2.769 3.288c.117.296.228.556.346.865-18.493-16.96-30.82-5.899-32.92-9.085.111.849.248 1.768.347 2.942-8.815-2.451-14.748-4.512-22.105-10.643-.174-.146-.653-.487-.908-.693.79-8.896 5.613-22.993 10.771-23.882 7.87-1.356 2.066 4.548 11.333-.086.513-.257 3.559-1.074 7.527-8.61 3.497-6.639 9.99-19.376 15.14-21.805-1.787 5.099 2.75 7.73 9.863.303 4.508-4.707 12.242-4.024 12.242-4.024-1.937 3.752-3.486 4.97-4.153 5.062.465 1.308.328 4.598.909 5.884.447.992 1.958-.2 2.335-1.082 4.555-10.635 10.276-15.15 17.087-18.474-1.377 12.17-12.501 27.153-.995 11.12 1.047-1.46 8.168-12.547 9.603-13.975 1.445-1.438 3.188-.065 4.586-1.514 1.941-2.014 5.148-3.473 6.315-3.721.213-.045.42-.093.562-.087zm-1.601 4.067c-.024.054-.017.072-.043.13-.373.373-.256.242.043-.13z" fill="#c2b490"/><path d="M350.462 185.318l-6.662 13.326-11.939 11.94 1.471 14.105-14.621 22.93-4.758 6.447c-1.362.174-2.735.194-4.24-.217a215.868 215.868 0 0 1-6.056-1.73c-1.46-4.301-2.702-7.404-6.402-10.384-4.92-5.347-8.063-10.824-2.033-18.387 2.166-2.509 3.617-3.469 7.743-.692 5.585 2.793 6.835 2.216 10.944-2.77 3.046-3.749 5.426-8.41 7.354-12.935 1.081-2.547 1.616-6.89 3.72-9.13 3.045-2.948 4.629-2.638 4.629-2.638s-.59 8.128 2.509 7.658c1.271-.212 1.936-1.808 2.552-3.591 2.962-6.19 7.955-11.926 15.789-13.932z" fill="#a8967e"/><path d="M384.808 182.376c-1.237 1.857-1.29 3.445-2.25 5.365-.69 1.382-1.182 3.419-1.902 4.5-1.438 2.157-3.262 2.05-4.845 3.634-1.506 1.506-3.608 3.139-5.018 5.019-1.944 2.592-5.265 5.166-6.748 8.133-.171.342-1.107 2.792-2.596 3.288-1.488.497-4.921.75-5.883 3.635-.307.923.118 1.44-.692 2.25-.647.647-6.347.928-7.44 3.114-.814 1.628.877 4.482-.173 6.058-2.067 3.1-4.21 1.614-6.23 3.634-1.035 1.036.436 5.148-2.94 8.307-4.18 3.91-4.373 12.37-1.039 15.92 2.769 2.604 4.291 5.514 5.883 9.692-20.85-19.122-25.03-8.841-33.221-11.076-.939-.255-1.806-.49-2.682-.735-.027-.333-.045-.701-.087-.995-.43-3.012-1.757-6.458-3.114-9.172-3.594-7.189-14.356-7.394-7.787-18.344 3.264-5.441 5.252 2.304 10.424 3.676 1.34.356 3.498 1.355 4.58.814 1.08-.54 1.593-2.183 3.486-4.284a44.582 44.582 0 0 0 6.257-8.948c3.496-6.64 2.828-13.842 7.806-18.261-.49 3.888 2.092 11.033 6.796 3.09 9.28-15.67 15.145-15.27 15.145-15.27-2.883 5.584-1.29 9.544-.773 8.473 2.437-5.057 8.578-7.886 10.934-9.848 3.027-2.52 5.972-6.084 5.972-6.084.228 6.462-3.423 8.55-2.974 11.728 1.936-4.373 4.97-7.421 7.328-8.452 2.793-.972 4.841-6.083 7.14-8.37 1.444-1.437 2.695.41 4.093-1.04 1.941-2.014 3.694-4.214 4.861-4.462 3.401-.722-2.592 5.601-1.1 4.109 2.077-4.581 1.097 7.243-1.21 10.902z" fill="#8d766b"/><path d="M345.012 193.712l-.866 2.509-15.832 39.63-17.908 18.128c-.228-.044-.459-.066-.692-.13-.44-.12-.83-.229-1.255-.346-.939-2.597-2.604-7.381-2.898-9.864-.413-3.484-1.087-6.961.519-8.826 1.606-1.865 6.41 1.232 7.527.52 1.116-.714 1.942-4.174 3.157-5.625 2.405-2.87 5.11-4.432 6.013-7.182.904-2.75 1.21-6.353 1.817-9.475.423-2.148 1.112-7.024 4.326-6.88 5.018.578 10.813-6.763 16.092-12.46z" fill="#71605c"/><path d="M388.226 167.796c-.006 5.076-1.115 11.125-3.418 14.58-1.237 1.857-1.29 3.445-2.25 5.365-.69 1.382-1.182 3.419-1.902 4.5-1.438 2.157-3.262 2.05-4.845 3.634-1.506 1.506-3.608 3.139-5.018 5.019-1.944 2.592-5.265 5.166-6.748 8.133-.171.342-1.107 2.792-2.596 3.288-1.488.497-4.921.75-5.883 3.635-.307.923.118 1.44-.692 2.25-.647.647-6.347.928-7.44 3.114-.814 1.628.877 4.482-.173 6.058-2.067 3.1-4.21 1.614-6.23 3.634-1.035 1.036.436 5.148-2.94 8.307-4.18 3.91-4.373 12.37-1.039 15.92 2.769 2.604 4.291 5.514 5.883 9.692-20.85-19.122-25.03-8.841-33.221-11.076-.38-.103-.714-.201-1.082-.302-1.283-4.89-1.597-11.735-.822-14.061.733-2.2 5.3 3.154 7.613 1.038 2.365-2.164 3.042-8.92 6.23-11.422 9.011-7.074-.588-19.071 11.766-23.19 4.248-1.538 9.317-10.161 15.083-16.778-1.49 4.268-4.117 8.008-1.587 13.49 3.702-2.042 5.426-9.474 9.863-12.98 2.277-1.944 6.36-3.52 7.786-7.96-1.205 6.652-5.516 9.062-4.326 15.056 1.287 1.287 5.19-4.323 5.71-5.884 1.407-4.22 4.32-3.624 6.748-7.268 1.344-2.017 3.557-6.97 5.537-7.96 1.771-.887 3.28-1.03 4.499-2.25.648-.648 1.344-1.997 1.73-2.77.662-1.324 2.5-1.832 3.764-2.812z" fill="#54494c"/><path d="M332.553 224.905c1.822-.192 1.545 8.732 3.288 11.033 1.971.496 3.297 1.013 3.201 2.293a7.201 7.201 0 0 1-.952 1.082c-3.557 3.327-4.226 9.929-2.292 14.017-.338.125-.68.261-.995.346-.243 1.736-1.275 2.688-2.51 3.029-1.816-1.097-3.444-1.91-4.93-2.466 2.038-6.614-4.171-12.72-2.423-19.34 6.492 3.151 6.776-5.436 7.224-9.82.142-.099.268-.16.39-.174z" fill="#4d4f61"/><path d="M326.227 231.375c-.34-1.42-.552-2.584-1.027-5.82-2.087 5.081-.809 5.52-1.644 10.902-.891 1.337-2.44-3.311-2.769-3.201-1.254.418-1.887 3.603-1.47 5.364 2.423 6.927 8.545.603 11.333 12.98 2.46-7.461.11-10.084-1.543-12.85-1.483-2.848-2.27-4.872-2.88-7.375z" fill="#453c3f"/><path d="M331.948 228.843c.329 0 .169.635.26.951.308 1.08.641 2.26.864 3.375.621 3.104 2.085 5.852 3.072 8.74-2.195 4.293-1.8 10.44.908 13.325 1.53 1.438 2.686 2.972 3.677 4.759-.151.564-.418 1.067-.822 1.471-.108.108-.436.152-.778.173-2.87-2.37-5.386-4.133-7.614-5.408-.033-.02-.053-.068-.086-.087-.375-.332-.745-.668-.952-1.081-.233-.467.26-3.12.26-3.894 0-6.404-.538-6.44-3.201-11.768-.074-.147-2.595-4.586-1.817-4.586.081 0 3.155 4.24 4.499 4.24 1.333 0 1.557-7.175 1.557-8.22 0-.515.173-.926.173-1.385 0-.202-.202-.605 0-.605z" fill="#465574"/><path d="M340.696 260.088c-1.39-1.243-2.946-2.205-4.493-3.148.033-.815-.78-.795-1.265-1.126-.902-.548-.772-2.183-1.806-2.563-.87-.433-1.935.065-2.721-.624-.405-.58-.859-1.09-1.486-1.342-.618-.334-1.173-.806-1.781-1.154-1.068-.322-2.247-.663-3.265-.17-2.767 2.341-7.246-1.66-6.898-.882.757 1.575 8.659 6.133 9.963 6.99a9.366 9.366 0 0 1 2.335 1.854c.519.69 1.38.453 2.01.895.676.445 1.426.774 2.218.71 2.044 0 4.109-.668 6.139-.156.395.123.789.338 1.05.716z" fill="#493e44"/><path d="M387.88 171.17c.044.01.09.04.13.087v.044c-.389 4.144-1.414 8.394-3.202 11.075-1.237 1.857-1.29 3.445-2.25 5.365-.69 1.382-1.182 3.419-1.902 4.5-1.439 2.157-3.262 2.05-4.845 3.634-1.507 1.506-3.608 3.138-5.018 5.018-1.944 2.593-5.265 5.167-6.748 8.134-.171.342-1.107 2.792-2.596 3.288-1.488.497-4.922.75-5.883 3.635-.307.923.117 1.44-.692 2.25-.647.647-6.347.928-7.44 3.114-.814 1.628.877 4.482-.173 6.057-2.067 3.101-4.21 1.615-6.23 3.635-1.035 1.036.436 5.147-2.94 8.306a7.335 7.335 0 0 0-.52.52c-.075.084-.144.172-.216.26-.09.108-.174.231-.26.345.082-.78.496-1.831.563-2.163.69-3.45.59-11.157 4.758-12.547 4.694-1.564 1.932-5.567 4.931-8.566.88-.88 2.439-2.053 3.547-2.423.61-.203 1.564-.052 1.99-.692.563-.845.6-1.72 1.038-2.596.571-1.142 1.556-2.248 2.51-3.202 1.513-1.513 5.668-.783 6.748-2.942.382-.765 1.987-.282 2.45-.975 1.314-1.973 1.537-4.476 3.582-5.84.575-.382 1.733-4.447 5.36-7.746.992-.903 1.742-.47 2.676-1.862 1.598-2.38 4.308-5.178 5.75-7.229 3.173-4.515 4.16-10.045 4.752-10.44.048-.032.085-.052.13-.043z" fill="#4c4245"/><path d="M249.732 189.235c.65-.78 4.953-6.127 4.325-6.648-.559-.464-2.76.965-3.844.664-.71-.196-2.038-.65-2.243-1.33-.046-.15-.105-1.374 0-1.462.136-.113.493-.327.32-.399-.675-.28-1.682.166-2.402-.133-2.314-.96 1.838-2.694 1.602-2.792-2.05-.85-5.228 1.477-7.048 1.729-.904.125-1.99.265-2.883.265h-.801c.942 0 1.793-.107 2.403.4 1.128.936-3.403.43-3.845.797-.261.217-1.02.224-1.441.399-.408.17-.48 1.442-.48 1.064 0-.007 5.66-.243 6.246 0 1.863.773-.997 1.565-.64 1.861.197.165 3.997.272 2.242 1.729-1.063.882-3.168.458-2.883.93.598.994 7.692-1.018 8.97-.664.42.116.077 2.432 2.402 3.59z" fill="#223d3f"/><path d="M342.53 262.413c-.215-1.085-1.791-1.239-1.957-2.509-1.381-1.175-3.11-1.866-4.897-2.12-1.582-.158-2.368-1.614-3.255-2.73-.83-1.139-2.537.02-3.313-1.144-.96-.964-1.89-2.39-3.383-2.429-1.654-.093-3.349.217-4.973-.204-1.41-1.157-2.907-2.585-4.854-2.629-1.598-.428-2.52 1.176-2.76 2.515-.601 1.215-1.09 3.103-3.463 2.768-1.865.019.762 2.693 1.928 3.023 2.534 1.358 5.37 2.118 8.232 2.345 2.337.268 4.82.39 6.852 1.712 2.235.914 4.726 1.343 6.655 2.894 2.452 1.855 5.626 1.95 8.53 2.481 1.5.539 1.881-1.51 1.375-2.53-.226-.487-.52-.941-.716-1.443z" fill="#4b342e"/><path d="M337.27 170.512c3.364-1.9 6.247.108 3.915 4.773-.18.361-.255 1.356-.367 1.468-2.974 2.975-6.686 3.099-10.278 4.895-.86.43-2.217.226-3.18.612-.484.193-.642.749-1.102.979-1.563.781-3.736 1.028-5.139 2.08-2.973 2.23-5.358 4.68-7.585 7.465-.5.625-1.417.747-1.958 1.468-1.943 2.592-3.865 5.302-6.607 7.587-1.37 1.142-3.535 2.143-5.138 3.426-.82.657-1.934 2.126-3.06 2.448-1.264.361-8.317 1.956-8.808 2.447-2.024 2.024-11.138 3.427-13.704 3.427-.408 0 .69-.446.98-.735.321-.322.184-.816.61-1.1.432-.289.995-.139 1.47-.613.839-.84 7.037-4.941 7.83-5.14 1.87-.467 3.831-4.477 5.75-5.628 1.533-.92 3.072-1.842 4.772-2.693 1.78-.89 3.119-3.007 4.649-4.283 3.332-2.776 6.592-5.981 9.543-8.933 2.192-2.192 5.815-2.112 8.442-3.426 1.644-.822 3.001-2.051 4.527-2.814 1.517-.759 3.247-3.248 4.405-4.406 1.358-1.358 2.36-1.076 3.487-2.202.404-.404 3.065-.068 3.487-.49.262-.262 2.89-.584 3.059-.612z" opacity=".241" fill="#b3f5f2"/><path d="M336.29 170.512c.362-.078.777 0 1.224 0 1.034 0 1.433 2.923 1.102 3.916-.185.553-.879 1.123-1.346 1.59-3.831 3.833-11.443 4.358-16.762 6.486-2.873 1.15-5.966 3.406-8.565 5.262-3.791 2.71-6.575 6.69-9.176 10.157-1.778 2.37-6.615 4.532-9.299 5.874-3.787 1.894-7.248 3.47-11.378 4.65-.999.285-1.926.69-2.937.98-.685.195-1.957 1.568-1.957.856 0-.33 9.104-7.988 10.155-8.689 2.918-1.945 10.165-11.169 12.48-11.747 1.242-.311 2.612-1.905 3.792-2.692 1.435-.957 3.309-1.655 4.894-2.448 1.342-.67 2.271-2.132 3.67-2.692 2.778-1.111 6.177-2.752 8.932-4.405 1.325-.795 2.08-2.142 3.426-2.815 1.045-.522 2.352-.672 3.426-1.101 1.512-.605 1.139-1.928 2.325-2.325 1.48-.496 4.21-.486 5.995-.857z" opacity=".155" fill="#b3f5f2"/><path d="M287.718 203.185c3.818-4.079 9.961-5.313 13.703-9.055 1.006-1.007 1.794-2.773 2.692-3.671 5.004-5.006 13.44-9.051 20.31-10.769 2.194-.549 10.222-4.026 8.564-7.342-1.564-3.129-8.703 1.111-10.522 2.202-12.804 7.684-27.85 14.84-34.747 28.635z" fill="#b3f5f2"/><path d="M286.005 167.942c.486-.428 3.002-1.646 3.61-.734.883 1.325 3.068 3.061 3.16 6.298.032 1.093-2.953 5.188-2.243 5.327 2.195.432 2.251 2.405 1.835 4.406-.128.614.22 1.31.367 1.896.648 2.593-.142 5.655.367 8.2.19.952.163 4.357-.306 5.2-.304.547-2.531 1.252-3.18 1.469-1.24.413-1.518-1.488-1.04-2.203 1.43-2.147-.041-1.304-.307-2.631-.059-.297 0-.67 0-.98 0-.118.268-.22.184-.305-.584-.584-2.804 1.325-3.12.061-.047-.189 2.47-1.92 2.63-2.08.01-.01-2.263-1.237-2.263-1.775 0-.678 2.545-3.205 2.386-3.365-.297-.297-3.247 1.016-3.365.429-.104-.52-1.786-1.25-1.264-1.624.48-.344 3.175-.33 2.977-.824-.244-.61-.176-1.33-.367-1.713-.32-.639-2.073-1.072-1.957-1.59.263-1.188 2.933-3.318 2.691-4.529-.078-.39-2.815.118-2.875-.183-.208-1.04 2.75-1.607 2.57-2.509-.05-.245-.903-.872-1.102-.673-.014.015.004-.04 0-.06-.168-1.177 1.134-1.707.979-2.326-.087-.348-.382-.565-.612-.795-.647-.648-.1-1.697.245-2.387z" opacity=".978" fill="#273534"/><path d="M286.81 202.882c1.135.637 10.87-5.01 14.611-8.752 1.006-1.007 1.794-2.773 2.692-3.671 5.004-5.006 13.44-9.051 20.31-10.769 2.194-.549 10.222-4.026 8.564-7.342-1.564-3.129-11.795-.697-13.593.429-1.787 1.119-1.797 2.872-3.635 3.985-6.182 3.746-10.977 2.497-16.316 7.415-1.058.974-2.684 4.047-3.853 5.406-1.785 2.074-3.433 3.984-4.947 6.393-1.451 2.308-2.782 5.12-3.834 6.906z" opacity=".155" fill="#b3f5f2"/><path d="M287.718 203.185c3.818-4.079 9.961-5.313 13.703-9.055 1.006-1.007 1.794-2.773 2.692-3.671 5.004-5.006 13.44-9.051 20.31-10.769 2.194-.549 10.222-4.026 8.564-7.342-1.564-3.129-8.703 1.111-10.522 2.202-12.804 7.684-27.85 14.84-34.747 28.635z" fill="#b3f5f2"/><path d="M288.941 167.82c.61-.712 2.84-1.687 3.732-.795.567.566.228 1.74.55 2.386.339.676 1.283.597 1.408 1.468.224 1.574.478 4.936.306 6.486-.097.864-.34 2.009-.123 2.876.187.747.367 1.489.367 2.263 0 .743-1.892 4.593-2.753 3.733-.236-.236.037-.81-.06-1.102-.122-.363-1.016-.744-1.224-1.162-.458-.916 1.023-2.582.611-3.61-.14-.353-1.972-.242-2.08-.673-.189-.756 2.937-5.075 2.937-5.751 0-1.566-2.998.851-2.998-.674 0-.273-.187-.444-.244-.673-.207-.826.25-3.478-.123-4.038-.224-.336-.306-.213-.306-.734z" opacity=".978" fill="#223d3f"/><path d="M385.72 128.661c1.557-.167 3.134-.355 4.65-.734 3.513-.878 7.462-.53 10.644-1.59 1.492-.498 1.588-2.522.245-3.06-1.349-.54-12.836.768-14.07 1.59-1.319.88-4.055.785-4.65 2.57-.543 1.632 2.265 1.408 3.181 1.224" fill="#4a4b6a"/><path d="M394.62 122.895c2.315-.702 5.966-2.065 8.719-2.065 2.406 0 4.775-.367 7.219-.367h3.792c.33 0 2.636-.846 4.315-.576 1.757.283 1.684 1.848 1.803 2.778.118.927-1.76.532-2.57.734-2.36.59-17.29 4.312-18.765 3.206-1.003-.753-4.812-2.964-4.513-3.71zm-21.746 5.766c1.472-.839 12.692-2.42 13.091-1.223.884 2.651-5.14 2.42-6.362 2.692-1.164.258-5.135 1.551-6.118 1.224-1.597-.533-2.524-1.927-.611-2.693z" fill="#3f4857"/><path d="M376.445 128.13c1.651-.133 12.115-.861 11.478-2.773-.167-.5-11.083-.785-11.99.123-.825.824-3.07 2.823-.526 2.823z" fill="#4c4f62"/><path d="M376.3 125.357c.22-.213-.255-1.543 0-1.713 2.566-1.711 11.493-1.713 14.681-1.713.495 0 2.372-.687 2.815-.245.129.13 2.494 1.661 1.996 1.994-.928.618-4.255.228-5.3.576-1.315.439-3.397.979-4.772.979-3.137 0-6.271.122-9.42.122z" fill="#6f7486"/><path d="M388.167 121.686c1.356-1.592 13.308-2.605 12.603-.49-.435 1.305-1.846.863-2.815 1.347-1.045.522-1.972 1.155-3.286 1.21-2.247.096-4.958-.832-6.502-2.067z" fill="#575f6a"/><path d="M388.351 120.463c1.45.066 8.485-2.38 8.993-.857-.044.324.152.939-.184 1.162-1.08.721-3.102.626-4.404.735-1.105.092-5.647 1.444-4.405-1.04z" fill="#464e66"/><path d="M396.105 119.663c1.628-.568 3.557-.922 5.032-.922.815 0 2.236-.346 3.052-.346 1.197 0 3.876-.441 4.41 1.21.378 1.166-2.313 1.81-2.446 1.836-2.551.51-8.977.899-10.048-1.778z" fill="#6c798c"/><path d="M401.337 129.4c2.646-.516 5.129-2.065 7.82-2.486 1.871-.293 10.214 1.226 10.612-2.34.087-.785-3.63-1.011-4.133-.957-5.012.541-9.84.622-14.75 2.429-1.115.41-3.502 1.436-1.736 2.724.782.866 1.242.347 2.187.63z" fill="#7d7e89"/><path d="M402.482 125.051c1.077-.043 1.784-.763 2.753-.979.935-.207 6.547-.976 6.913-.244.31.62-1.095.864-1.468.917-2.292.328-4.672 1.163-7.035 1.163-.595 0-1.43-.189-1.163-.857z" fill="#646875"/><path d="M382.906 130.007c1.15-.432 1.923-1.223 3.065-1.487.749-.173 1.903-.206 2.563-.536 1.601-.8 3.98-.734 5.873-.734 1.179 0 2.874-.663 3.91-.663.812 0 4.32-.038 1.84 2.441-1.507 1.509-9.714 1.552-11.99 1.836-1.217.152-2.469.195-3.67.367-.525.075-2.12 0-1.59 0 .071 0-.113-.66 0-1.224z" fill="#8d8e96"/><path d="M418.19 123.12c2.33-.186 3.96-.577 6.315-.577 1.25 0 2.487-.245 3.793-.245 1.074 0 1.908-.245 2.937-.245 1.232 0 4.038 1.64 1.713 2.57-1.922.769-13.354 3.572-14.516 1.247-.163-.326-1.702-2.103-1.586-2.45z" fill="#606371"/><path d="M405.052 130.986c.507-.093 2.5.573 2.386.918-.187.561-1.303.411-1.774.49-1.413.235-2.892.528-4.038 1.101-.546.273-1.476-.079-2.08.122-.907.303-1.828.48-2.753.612-.618.089-2.968.03-3.365-.367-.175-.176.157-.505.184-.612.035-.14.426-.611.612-.673.858-.286 2.022.03 2.936-.122.978-.163 2.044.134 2.998-.184.792-.264 1.575-.939 2.386-1.101.812-.163 1.68-.046 2.508-.184z" fill="#767475"/><path d="M405.157 127.733c2.104-.683 5.836-1.274 8.092-1.274 1.991 0 3.822-.49 5.628-.49 1.064 0 .225-.05 1.09.239 1.65.55 1.14 2.698-.11 2.698-.977 0-2.413 1.093-3.427 1.346-1.648.412-3.45.453-5.138.734-4.12.687-13.874 2.94-6.135-3.253z" fill="#acaeaf"/><path d="M394.407 129.885c1.261.007 2.605.166 3.67-.367.245-.122.754.15.98 0 1.11-.74 3.72-2.308 5.138-1.836.994.332.575 3.544-.33 4.062-1.908 1.09-6.868 1.9-8.968 1.2-1.797-.599-1.623-2.152-.49-3.059z" fill="#8d888a"/><path d="M383.151 132.088c.912-.942 2.504-1.024 3.793-1.346 1.153-.289 2.624-.612 3.793-.612 1.14 0 4.037-1.2 4.037.618 0 .806-.018 2.33-.734 2.808-1.692 1.128-13.579 3.015-10.889-1.468z" fill="#69696f"/><path d="M375.076 131.476c1.05-.214 1.236-.98 2.316-.98 1.081 0 5.235-1.705 6.177-.763.252.252 1.42 1.26 1.42 1.57 0 .427-1.29 1.523-1.47 1.886-.94 1.877-8.443 2.34-8.443-1.713z" fill="#6c7380"/><path d="M416.186 122.849c1.155-.062 5.19-.99 5.995-.184.107.107-.607.219-.673.245-.592.237-1.609.385-2.019.795-.423.424-1.484.74-2.019.918-.37.124-6.81-.17-7.402-.367-.093-.031 1.19-.979 2.386-.979 1.268 0 2.422-.69 3.732-.428z" fill="#616672"/><path d="M403.584 127.805a18.055 18.055 0 0 1 3.731-1.346c1.492-.373 4.788-.899 6.424-.49.649.162 1.826.367 2.324.367.246 0-.624-.158-.734.062-.133.267-1.493.474-1.835.611-.867.347-3.057.857-3.976 1.04-1.393.28-6.84 1.628-8.137.98-.441-.221-.598-.449-.734-.857-.06-.179.066-.55-.122-.55h.917c.767 0 1.416.038 2.142.183z" fill="#96989e"/><path d="M397.833 126.642h1.224c.597 0 1.51.313 2.08.123.738-.246 1.27-1.346 2.14-1.346.263 0 .566-.245.857-.245.065 0 .184.126.184.061 0-.287-1.27-.144-1.469-.184-1.596-.319-3.214.551-4.894.551-.26 0-.8.79-.734.857.15.15.422.088.612.183z" fill="#636774"/><path d="M391.654 123.155c.785.071 1.552-.062 2.325-.062.832 0 3.08.418 2.325.796-.478.239-1.053.004-1.59.183-2.474.825-6.707 1.689-9.3 1.04-.126-.031-.579.094-.672 0-.405-.404 2.478-.88 2.569-.917.789-.316 3.582-1.193 4.343-1.04z" fill="#5a5d76"/><path d="M400.097 121.87c2.597-1.04 6.317-2.715 9.053-1.346.266.132.889-.09 1.102.122.438.439-2.13.918-2.325.918-.569 0-2.237.28-2.57.612-.205.206-4.396.384-5.077.612-.37.123-1.864-.278-1.713-.429.069-.068 1.307-.445 1.53-.49z" fill="#535e6f"/><path d="M393.306 129.763c.723-.215 3.898-.774 4.588-.429.217.109.766.703.673.796-.288.288-.88.39-1.162.673-.892.892-1.716 1.623-2.875 2.203-.634.316-2.694-.95-3.243-1.224-.349-.175-.417-.821-.734-.98-.166-.082-.795-.353-.795-.55 0-.154 3.07-.394 3.548-.49z" fill="#7a787d"/><path d="M404.685 128.883c.357-.027.682-.198 1.04-.198.416 0 1.517-.535 1.896-.263.202.145-.694 1.058-.918 1.25-.698.6-2.294 2.648-3.18 2.171-.657-.353-1.939-1.187-2.203-2.04-.073-.234-.014-.489-.122-.723-.021-.045-.256-.128-.061-.197 1.069-.384 2.384.417 3.548 0z" fill="#9c9a9b"/><path d="M406.642 118.26c1.16-1.078 2.928-1.311 3.548.55.057.17.345.372.184.612-.172.259-2.433.474-2.753.367-.287-.095-.297-.541-.49-.734-.157-.157-.496-.251-.672-.428-.097-.097.113-.25.183-.367z" fill="#525a77"/><path d="M407.621 119.545c.91.007 1.85-.026 2.692-.306.509-.17 1.945 1.242-.673 1.897-.863.215-4.75-.879-3.915-1.714.277-.277 1.723.123 1.896.123z" fill="#616d81"/><path d="M419.306 126.153c1.143-.24 2.249-.245 3.425-.245.565 0 1.19-.061 1.836-.061.447 0 3.651-.264 3.731-.184.26.26-.677.307-1.04.367-.895.15-1.655.981-2.385 1.346-.738.369-1.895.505-2.57.673-1.258.315-5.678 3.283-6.668 2.02 2.169-1.051 2.04-3.85 3.67-3.916z" fill="#808286"/><path d="M395.508 114.833c2.501.338 6.183-.974 8.014.857.389.388 1.21 1.183.734 1.897-.198.297-1.79.531-2.202.428-.432-.108-.879-.878-1.284-1.04-1.877-.75-3.596-1.142-5.262-2.142z" fill="#49506d"/><path d="M366.511 119.606c2.424.452 4.182-1.148 6.424-1.469 1.77-.252 3.561-.085 5.322-.305 1.709-.214 3.124-1.005 4.833-1.347 1.848-.37 3.808-.542 5.69-.856 1.126-.188 9.848-2.51 10.399-1.407.437.873-10.591 3.95-11.073 4.038-3.105.565-7.213 1.328-10.338 1.774-1.724.247-3.482-.612-5.2-.367-.944.135-1.917-.007-2.875.061-.26.019-4.793.845-3.182-.122z" fill="#2e3750"/><path d="M364.248 119.606c1.045-.209 2.096-.184 3.181-.184h2.814c.905 0 2.236.96 1.53 2.02-.488.731-1.294 1.288-2.203 1.651-1.214.486-5.647.982-6.3 0-.005-.824-.282-3.487.978-3.487z" fill="#3b3963"/><path d="M376.177 124.317c.645-.046 1.338.094 1.958-.061.991-.248 2.335.265 3.303-.122 1.69-.676 4.274-1.346 6.301-1.346.584 0 2.403-.761 1.958-1.652-.045-.09-.852-.551-1.53-.551-3.4 0-7.803 1.14-11.072 1.958-1.082.27-2.188 1.35-.918 1.774z" fill="#565d77"/><path d="M385.66 127.988c2.995-1.699 7.1-1.59 10.521-1.59.294 0 2.144-.178 2.264.06.185.37-2.582.943-2.875 1.04-1.021.341-2.123.851-3.243 1.225-.625.208-1.3.8-1.774.917-.643.161-5.217-.647-5.444-1.101-.076-.151.442-.464.55-.55z" fill="#6d6e81"/><path d="M417.042 115.629c.886-.203 1.626-.428 2.57-.428.645 0 .89.113 1.468.306.218.072 2.901 1.271 2.508 1.468-.88.44-2 .439-2.937.673-.536.134-1.848 1.003-2.508.673-.442-.22-1.301-2.292-1.1-2.692z" fill="#3d3f5b"/><path d="M413.127 118.933c1.181-.09 2.682-.715 3.242-1.836.1-.2.024-1.7.612-1.407.407.204.436.724.673 1.04.26.348.958 1.122.856 1.53-.041.166-.247.287-.367.367-.404.27-1.119.393-1.59.55-.599.2-1.165.828-1.713 1.102-.295.147-1.61-1.09-1.713-1.346z" fill="#373b5d"/><path d="M414.717 119.606c.551-.267.996-.552 1.53-.857.6-.343 1.62-1.336 2.324-1.101.455.152 1.347 1.896.918 2.325-.168.168-.712.34-.979.428-.45.15-6.132.609-3.793-.795z" fill="#3c405c"/><path d="M412.21 118.627c.376-.61 3.977 1.468 2.997 1.958-.415.207-1.425 0-1.897 0-1.036 0-2.708.14-1.59-.98.21-.21.243-.67.49-.978z" fill="#464e6c"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-kdenlive-bg.jpg b/data/assets/featured-kdenlive-bg.jpg
new file mode 100644
index 0000000..0169391
--- /dev/null
+++ b/data/assets/featured-kdenlive-bg.jpg
Binary files differ
diff --git a/data/assets/featured-klavaro-bg.jpg b/data/assets/featured-klavaro-bg.jpg
new file mode 100644
index 0000000..b71f187
--- /dev/null
+++ b/data/assets/featured-klavaro-bg.jpg
Binary files differ
diff --git a/data/assets/featured-maps-bg.svg b/data/assets/featured-maps-bg.svg
new file mode 100644
index 0000000..050e119
--- /dev/null
+++ b/data/assets/featured-maps-bg.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="featured-maps-bg.svg"
+ id="svg54"
+ version="1.1"
+ height="350"
+ width="758.03265">
+ <metadata
+ id="metadata60">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs58" />
+ <sodipodi:namedview
+ inkscape:current-layer="svg54"
+ inkscape:window-maximized="1"
+ inkscape:window-y="0"
+ inkscape:window-x="0"
+ inkscape:cy="330.91864"
+ inkscape:cx="582.74494"
+ inkscape:zoom="1.0296875"
+ fit-margin-bottom="0"
+ fit-margin-right="0"
+ fit-margin-left="0"
+ fit-margin-top="0"
+ showgrid="false"
+ id="namedview56"
+ inkscape:window-height="1043"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff" />
+ <path
+ id="path2"
+ fill="#c7ddf7"
+ style="fill:#c7ddf7;fill-opacity:1;stroke-width:0.704069;marker:none"
+ d="M 0,0 H 758.03266 V 350 H 0 Z" />
+ <path
+ id="path4"
+ fill="#f3ebe5"
+ style="marker:none"
+ d="M 171.726,151 H 757.614 V 278.279 H 171.726 Z" />
+ <path
+ id="path6"
+ fill="#f3ebe5"
+ style="marker:none"
+ d="M -32.324,-90.427 H 529.321 V 401.517 H -32.324 Z" />
+ <path
+ id="path8"
+ fill="#f3ebe5"
+ style="marker:none"
+ d="M 171.726,73.218 H 727.31 v 43.437 H 171.726 Z" />
+ <path
+ id="path10"
+ stroke-linecap="round"
+ stroke-width="6"
+ stroke="#ffa348"
+ fill="none"
+ style="marker:none"
+ d="m 288.864,-217.336 c 0,-23.504 -18.923,-42.426 -42.427,-42.426 H 130.27 c -23.505,0 -42.427,18.922 -42.427,42.426 V 150.36 c 0,23.504 18.922,42.426 42.427,42.426 h 116.167 c 23.504,0 42.427,-18.922 42.427,-42.426" />
+ <path
+ id="path12"
+ stroke-linecap="round"
+ stroke-width="6"
+ stroke="#f8e45c"
+ fill="none"
+ d="m 236.376,-60.122 c 0,-23.505 -18.922,-42.427 -42.426,-42.427 H 77.782 c -23.504,0 -42.426,18.922 -42.426,42.427 V 307.573 C 35.356,331.077 54.278,350 77.782,350 H 193.95 c 23.504,0 42.426,-18.923 42.426,-42.427"
+ style="marker:none" />
+ <path
+ id="path14"
+ stroke-linecap="round"
+ stroke-width="4"
+ stroke="#ffffff"
+ fill="none"
+ d="m 135.361,-102.549 c 0,-23.504 18.922,-42.426 42.426,-42.426 h 116.168 c 23.504,0 42.426,18.922 42.426,42.426 v 367.696 c 0,23.504 -18.922,42.426 -42.426,42.426 H 177.787 c -23.504,0 -42.426,-18.922 -42.426,-42.426"
+ style="marker:none" />
+ <path
+ id="path16"
+ stroke-linecap="round"
+ stroke-width="6"
+ stroke="#ffa348"
+ fill="none"
+ d="m 288.864,150.36 c 0,-23.504 18.922,-42.426 42.426,-42.426 h 116.167 c 23.505,0 42.427,18.922 42.427,42.426 v 367.695 c 0,23.505 -18.922,42.427 -42.427,42.427 H 331.29 c -23.504,0 -42.426,-18.922 -42.426,-42.426"
+ style="marker:none" />
+ <path
+ id="path18"
+ stroke-linecap="round"
+ stroke-width="4"
+ stroke="#ffffff"
+ fill="none"
+ style="marker:none"
+ d="m 135.361,265.147 c 0,-23.504 -18.922,-42.427 -42.426,-42.427 H -23.233 c -23.504,0 -42.426,18.923 -42.426,42.427 v 367.695 c 0,23.504 18.922,42.427 42.426,42.427 H 92.935 c 23.504,0 42.426,-18.922 42.426,-42.427 M 236.376,307.573 c 0,-23.504 18.922,-42.426 42.427,-42.426 H 394.97 c 23.504,0 42.427,18.922 42.427,42.426 v 367.696 c 0,23.504 -18.923,42.426 -42.427,42.426 H 278.804 c -23.505,0 -42.427,-18.922 -42.427,-42.426 M 336.886,6.043 c 23.505,0 42.427,18.922 42.427,42.426 v 116.168 c 0,23.504 -18.922,42.426 -42.427,42.426 H -30.809 c -23.504,0 -42.427,-18.922 -42.427,-42.426 V 48.469 c 0,-23.504 18.923,-42.426 42.427,-42.426" />
+ <path
+ id="path20"
+ stroke-width="4"
+ stroke="#ffffff"
+ fill="#f5c211"
+ d="m 489.853,217.955 -19.4,46.528 19.4,-8.414 18.671,9.405 z" />
+ <path
+ id="path22"
+ fill="#e5a50a"
+ d="m 489.853,253.819 0.006,-30.57 14.937,38.157 z" />
+ <path
+ id="path24"
+ fill="#1a5fb4"
+ style="marker:none"
+ d="m 168.234,177 h 44.193 v 38 h -44.193 z" />
+ <path
+ id="path26"
+ fill="#ffffff"
+ font-family="Cantarell"
+ aria-label="13"
+ font-weight="800"
+ font-size="22.952px"
+ letter-spacing="0"
+ word-spacing="0"
+ d="m 182.195,204.571 h 3.97 v -15.929 h -2.363 l -6.404,3.19 1.492,2.847 3.305,-1.377 z m 11.682,0.229 c 4.293,0 7.116,-1.859 7.116,-4.682 0,-2.02 -1.355,-3.534 -3.466,-3.947 1.584,-0.414 2.57,-1.699 2.57,-3.49 0,-2.662 -2.111,-4.268 -5.646,-4.268 -1.882,0 -3.764,0.459 -5.508,1.4 l 0.895,2.96 c 1.423,-0.619 2.662,-0.963 3.787,-0.963 1.423,0 2.341,0.55 2.341,1.469 0,1.055 -1.17,1.767 -2.915,1.767 h -1.101 v 2.984 h 1.101 c 2.318,0 3.81,0.757 3.81,1.905 0,0.94 -1.01,1.469 -2.823,1.469 -1.4,0 -2.96,-0.299 -4.292,-0.85 l -0.918,3.099 c 1.698,0.803 3.167,1.148 5.05,1.148 z" />
+ <path
+ id="path28"
+ fill="#1a5fb4"
+ style="marker:none"
+ d="m 121.234,330 h 32.193 v 38 h -32.193 z" />
+ <path
+ id="path30"
+ fill="#ffffff"
+ font-family="Cantarell"
+ d="m 136.962,341.413 c -3.672,0 -6.105,2.226 -6.105,5.554 0,2.984 1.905,4.912 4.751,4.912 1.515,0 2.8,-0.528 3.787,-1.56 -0.23,2.776 -1.584,4.268 -3.993,4.268 -1.033,0 -2.342,-0.275 -3.283,-0.688 l -1.01,2.96 c 1.217,0.597 2.732,0.942 4.453,0.942 5.073,0 7.758,-3.099 7.758,-8.584 0,-5.119 -2.318,-7.804 -6.358,-7.804 z m -2.249,5.256 c 0,-1.194 0.78,-1.974 1.974,-1.974 1.354,0 2.226,1.056 2.57,2.938 -0.642,0.688 -1.537,1.102 -2.41,1.102 -1.285,0 -2.134,-0.827 -2.134,-2.066 z"
+ aria-label="9"
+ font-weight="800"
+ font-size="22.952px"
+ letter-spacing="0"
+ word-spacing="0" />
+ <rect
+ id="rect32"
+ ry="22.223"
+ rx="22.223"
+ y="31.68"
+ x="-1192.733"
+ height="97.401001"
+ width="223.244"
+ style="marker:none" />
+ <text
+ id="text38"
+ fill="#ffffff"
+ font-family="Cantarell"
+ y="100.319"
+ x="-1121.363"
+ style="line-height:1.25;-inkscape-font-specification:'Cantarell, Ultra-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start"
+ font-weight="800"
+ font-size="48.162px"
+ letter-spacing="0"
+ word-spacing="0"><tspan
+ id="tspan36"
+ y="100.319"
+ x="-1121.363">852<tspan
+ id="tspan34"
+ style="-inkscape-font-specification:'Cantarell, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start"
+ font-weight="400"
+ font-size="48.163px">m</tspan></tspan></text>
+ <g
+ transform="translate(23.234)"
+ id="g44"
+ font-family="Sans"
+ color="#000000"
+ font-weight="400"
+ stroke-width="0.422"
+ fill="#ffffff">
+ <path
+ id="path40"
+ opacity="0.35"
+ d="m -1179.208,72.598 -5.035,5.035 9.478,9.55 5.035,-5.034 z"
+ style="line-height:normal;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-transform:none;marker:none"
+ overflow="visible" />
+ <path
+ id="path42"
+ d="m -1168.841,72.162 3.407,3.407 -10.516,10.511 v 14.504 h 7.109 V 89.042 l 8.442,-8.442 3.405,3.41 V 72.162 Z"
+ style="line-height:normal;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-transform:none;marker:none"
+ overflow="visible" />
+ </g>
+ <path
+ id="path46"
+ fill="#1a5fb4"
+ style="marker:none"
+ d="m -1080.996,177 h 44.192 v 38 h -44.193 z" />
+ <text
+ id="text50"
+ fill="#ffffff"
+ font-family="Cantarell"
+ style="line-height:1.25;-inkscape-font-specification:'Cantarell, Ultra-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start"
+ x="-1072.085"
+ y="204.571"
+ font-weight="800"
+ font-size="22.952px"
+ letter-spacing="0"
+ word-spacing="0"><tspan
+ id="tspan48"
+ x="-1072.085"
+ y="204.571">13</tspan></text>
+</svg>
diff --git a/data/assets/featured-maps-overlay.svg b/data/assets/featured-maps-overlay.svg
new file mode 100644
index 0000000..4163e3e
--- /dev/null
+++ b/data/assets/featured-maps-overlay.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="240" height="105"><g transform="translate(-8.801 -211.646)"><rect ry="20.88" rx="20.88" y="212.778" x="8.801" height="103.868" width="238.067" style="marker:none"/><g word-spacing="0" letter-spacing="0" font-size="48.162" font-weight="800" style="line-height:1.25;-inkscape-font-specification:'Cantarell, Ultra-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" aria-label="852m" font-family="Cantarell" fill="#fff" stroke-width=".248"><path d="M100.626 286.487c8.731 0 14.484-4.416 14.484-10.939 0-4.827-3.236-7.138-7.037-8.68 3.75-1.848 5.855-4.725 5.855-8.062 0-5.394-5.239-8.99-12.736-8.99-8.218 0-13.61 4.367-13.61 10.838 0 4.006 2.155 6.317 4.98 7.91-3.8 1.489-5.957 4.365-5.957 8.011 0 5.907 5.701 9.913 14.021 9.913zm-4.417-26.295c0-1.9 1.746-3.288 4.52-3.288 2.772 0 4.571 1.387 4.571 3.544 0 2.106-1.798 3.596-4.468 3.955-2.671-.976-4.623-2.106-4.623-4.212zm-.975 14.74c0-2.054 1.335-3.39 3.8-3.852 3.954 1.233 7.447 2.26 7.447 4.982 0 1.952-2.003 3.338-5.29 3.338-3.595 0-5.957-1.746-5.957-4.468zm34.257 11.555c9.399 0 15.407-4.622 15.407-12.325 0-6.78-4.828-10.581-13.456-10.581-.77 0-1.439.051-2.003.103l.256-5.598h13.303v-7.756h-21.982l-.925 20.903c2.209-.41 5.034-.718 7.14-.718 5.341 0 8.422 1.695 8.422 4.571 0 2.414-2.207 3.698-6.214 3.698-3.082 0-6.523-.72-9.09-1.952l-2.415 6.985c3.441 1.747 7.345 2.671 11.557 2.671zm19.26-.513h25.166v-7.703h-12.224c7.55-6.01 11.3-11.763 11.3-17.411 0-6.677-5.24-11.043-13.303-11.043-4.622 0-8.834 1.438-12.274 4.262l2.26 6.524c2.875-2.003 5.7-3.031 8.268-3.031 3.544 0 5.803 1.9 5.803 4.674 0 4.417-5.7 9.757-14.996 17.462z"/><path font-size="48.163" font-weight="400" style="-inkscape-font-specification:'Cantarell, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start" d="M180.234 285.974h4.109v-19.362c1.849-1.49 4.057-2.312 6.42-2.312 3.955 0 6.112 2.26 6.112 6.266v15.408h4.109v-16.23c0-1.027-.104-1.952-.36-2.824 1.9-1.696 4.263-2.62 6.78-2.62 3.954 0 6.111 2.26 6.111 6.266v15.408h4.109v-16.23c0-5.495-3.595-9.04-9.09-9.04-3.288 0-6.523 1.336-9.04 3.7-1.54-2.364-4.16-3.7-7.55-3.7-2.825 0-5.599.977-7.91 2.671l-.924-2.156h-2.876z"/></g><g fill="#fff" stroke-width=".105" font-weight="400" color="#000" font-family="Sans"><path overflow="visible" d="M48 256.413l-5.369 5.37 10.107 10.182 5.37-5.367z" style="line-height:normal;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration-line:none;text-transform:none;marker:none" opacity=".35"/><path overflow="visible" d="M59.056 255.948l3.633 3.633-11.214 11.21v15.466h7.58v-12.308l9.004-9.003 3.63 3.636v-12.634z" style="line-height:normal;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration-line:none;text-transform:none;marker:none"/></g></g></svg> \ No newline at end of file
diff --git a/data/assets/featured-marker-bg.jpg b/data/assets/featured-marker-bg.jpg
new file mode 100644
index 0000000..4bf98f3
--- /dev/null
+++ b/data/assets/featured-marker-bg.jpg
Binary files differ
diff --git a/data/assets/featured-mypaint.svg b/data/assets/featured-mypaint.svg
new file mode 100644
index 0000000..f9c3ba3
--- /dev/null
+++ b/data/assets/featured-mypaint.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="663" height="400" version="1.0"><defs><linearGradient id="b"><stop offset="0" stop-color="#a51d2d"/><stop offset="1" stop-color="#ce1921"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#d81d25"/><stop offset="1" stop-color="#f66151"/></linearGradient><linearGradient xlink:href="#c" id="h" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.68212 0 0 2.68212 3146.962 -907.275)" x1="953.275" y1="350.856" x2="944.207" y2="359.924"/><linearGradient id="c"><stop offset="0" stop-color="#e9b96e"/><stop offset="1" stop-color="#dc9321"/></linearGradient><linearGradient xlink:href="#d" id="i" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-2.68212 0 0 2.68212 1537.692 -338.666)" x1="418.838" y1="227" x2="433.35" y2="212.868"/><linearGradient id="d"><stop offset="0" stop-color="#9a9996"/><stop offset=".416" stop-color="#c0bfbc"/><stop offset="1" stop-color="#deddda"/></linearGradient><radialGradient xlink:href="#e" id="j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-4.68201 0 0 4.68201 2483.339 -845.13)" cx="450.948" cy="225.395" fx="450.948" fy="225.395" r="40"/><linearGradient id="e"><stop offset="0" stop-color="#5b5b5b"/><stop offset=".634" stop-color="#262e39"/><stop offset="1" stop-color="#113f78"/></linearGradient><linearGradient xlink:href="#f" id="k" gradientUnits="userSpaceOnUse" x1="19.25" y1="44" x2="54.82" y2="79.57"/><linearGradient id="f"><stop offset="0" stop-color="#a347ba"/><stop offset="1" stop-color="#103c72"/></linearGradient><radialGradient xlink:href="#g" id="l" gradientUnits="userSpaceOnUse" gradientTransform="matrix(5.6933 -.04662 .02655 3.24234 -78.001 -464.656)" cx="67.567" cy="250.281" fx="67.567" fy="250.281" r="11.077"/><linearGradient id="g"><stop offset="0" stop-color="#113f78" stop-opacity="0"/><stop offset=".786" stop-color="#113f78" stop-opacity=".106"/><stop offset="1" stop-color="#103c72"/></linearGradient></defs><path d="M637.014 38.903L358.86 317.069c-12.49 13.006-33.227 13.216-45.978.466-12.75-12.751-12.54-33.488.466-45.978l233.94-233.953c27.846-23.884 66.97-21.456 89.725 1.299z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="url(#h)"/><path d="M488.4 99.121c38.523.017 57.521 46.846 29.895 73.695L368.097 323.015c-16.719 16.998-44.087 17.112-60.946.252-16.86-16.858-16.746-44.227.252-60.946l150.199-150.198a42.918 42.918 0 0 1 30.797-13.002z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="url(#i)"/><path d="M364.024 152.649c62.82 0 113.746 50.926 113.746 113.746 0 62.82-50.926 113.746-113.746 113.746H250.278V266.395c0-62.82 50.926-113.746 113.746-113.746z" style="marker:none" fill="url(#j)"/><ellipse transform="scale(-1)" cy="-215.227" cx="-369.694" style="marker:none" rx="17.045" ry="17.045" color="#000" overflow="visible" opacity=".3" fill="#fff"/><path style="marker:none" d="M12 27.867v24a9.636 9.636 0 0 1 6.673-1.004 9.636 9.636 0 0 1 5.666 3.664c1.763 2.39 2.313 5.462 2.457 8.429.144 2.966-.067 5.96.395 8.894.629 4 2.54 7.794 5.41 10.65 2.87 2.857 6.687 4.753 10.703 5.27 2.61.337 5.255.202 7.887.212L56 88v-1.328V86a71.427 71.427 0 0 0-6.155-1.158c-1.343-.192-2.698-.348-3.999-.735-1.3-.387-2.56-1.027-3.46-2.042-.757-.854-1.226-1.94-1.43-3.063-.205-1.123-.152-2.282.05-3.405.404-2.247 1.39-4.339 2.13-6.498 2.397-6.988 2.17-14.797-.375-21.732-2.806-7.643-8.545-14.313-16.01-17.564A27.073 27.073 0 0 0 12 27.867z" transform="matrix(5.6873 0 0 5.6873 -68.21 -120.341)" fill="url(#k)"/><path style="marker:none" d="M198.56 359.52l24.365 20.519 118.35.102-23.367-22.483c-23.227-22.347-51.32-34.39-67.63-34.39 0 34.124-31.63 40.376-51.718 36.253z" fill="url(#l)"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-pdf-slicer.svg b/data/assets/featured-pdf-slicer.svg
new file mode 100644
index 0000000..b6edc98
--- /dev/null
+++ b/data/assets/featured-pdf-slicer.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512" version="1.0"><defs><linearGradient id="d"><stop offset="0" stop-color="#deddda" stop-opacity="0"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient xlink:href="#a" id="h" x1="22.053" y1="93.909" x2="60" y2="93.909" gradientUnits="userSpaceOnUse"/><linearGradient id="a"><stop offset="0" stop-color="#a51d2d"/><stop offset=".132" stop-color="#f66151"/><stop offset=".299" stop-color="#c01c28"/><stop offset=".46" stop-color="#ed333b"/><stop offset=".593" stop-color="#a51d2d"/><stop offset="1" stop-color="#a51d2d"/></linearGradient><linearGradient xlink:href="#b" id="f" x1="-78" y1="312" x2="-54" y2="312" gradientUnits="userSpaceOnUse" gradientTransform="translate(132)"/><linearGradient id="b"><stop offset="0" stop-color="#a51d2d"/><stop offset=".194" stop-color="#f66151"/><stop offset=".5" stop-color="#c01c28"/><stop offset=".682" stop-color="#e01b24"/><stop offset="1" stop-color="#a51d2d"/></linearGradient><linearGradient xlink:href="#c" id="e" x1="28" y1="-274" x2="116" y2="-274" gradientUnits="userSpaceOnUse" gradientTransform="translate(-585.193 930.254) scale(4.08475)"/><linearGradient id="c"><stop offset="0" stop-color="#c0bfbc"/><stop offset=".045" stop-color="#f6f5f4"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#f6f5f4"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient xlink:href="#d" id="i" gradientUnits="userSpaceOnUse" x1="60" y1="62" x2="64" y2="62"/></defs><g transform="translate(0 212)"><rect ry="32.678" y="21.492" x="111.362" height="241" width="359.458" rx="32.678" fill="#deddda"/><rect ry="32.678" rx="32.678" y="-262.492" x="-470.82" height="163.39" width="359.458" style="marker:none" transform="scale(-1)" fill="url(#e)"/><rect width="359.458" height="424.814" x="111.362" y="-195" rx="32.678" ry="32.678" fill="#f6f5f4"/><path style="marker:none" d="M144.04 82.763v40.847h261.424v-16.339h32.678V82.763z" color="#000" overflow="visible" fill="#deddda"/><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" d="M144.04-145.983v16.339h163.39v-16.339z" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="#deddda" fill-rule="evenodd"/><path style="marker:none" d="M144.04-23.44h294.102v73.525H225.735v16.339H144.04zm147.05-32.679v16.34H144.04v-73.526h294.102v57.186z" color="#000" overflow="visible" fill="#deddda"/><path d="M470.82 216.147c-.336 16.71-13.81 30.006-30.604 30.006h-2.042v4.084h2.042c13.169 0 24.598-7.304 30.484-18.086.055-.775.12-1.548.12-2.337zm-171.56 30.006l138.882 4.084v-4.084z" fill="#c0bfbc" fill-opacity=".272"/><g transform="translate(-52.028 -950.525) scale(4.08475)"><circle r="8.516" cy="152.028" cx="259.539" transform="rotate(45)" fill="none" stroke="#c01c28" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/><path d="M65.995 268.962h6v-72l-1.415-1.414s-6.585 5.061-6.585 17.414l.005 27.19.097 2.723 1.898 2.087z" fill="#9a9996" fill-rule="evenodd"/><path d="M66 300c-6.592 0-12 5.408-12 12s5.408 12 12 12 12-5.408 12-12-5.408-12-12-12zm0 2c3.35 0 8 2.65 8 6s-4.65 10-8 10c-3.35 0-8-6.65-8-10 0-3.35 4.65-6 8-6z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="url(#f)" transform="translate(9.995 -21.038)"/><use height="100%" width="100%" transform="scale(-1 1) rotate(-45 -.464 413.359)" xlink:href="#g"/><circle r="8.516" cy="169.669" cx="217.799" transform="rotate(45)" fill="none" stroke="#c01c28" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/><path d="M56.661 265.63l-4.242-4.242 50.836-51.29.075.378s5.657 5.657-5.656 16.971L76.95 248.105h-2.976z" fill="#77767b" fill-rule="evenodd"/><path transform="translate(0 177.713)" d="M53.832 79.434l-12.727 7.07.018.236c-4.684-3.429-11.351-3.045-15.574 1.178-4.661 4.661-4.661 12.31 0 16.97 4.661 4.662 12.31 4.662 16.97 0l16.971-16.97a2.55 2.55 0 0 0 .51-.752v-2.781zm-19.799 6.95c1.53 0 3.06.592 4.244 1.776 2.369 2.368 2.369 10.118 0 12.486a5.956 5.956 0 0 1-8.486 0c-2.368-2.368-2.368-10.118 0-12.486a5.979 5.979 0 0 1 4.242-1.775z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="url(#h)"/><g id="g" display="inline"><path d="M58 290h6v-72s-8 0-8 16l.046 29.26 2.104 2.104z" fill="#9a9996" fill-rule="evenodd" transform="scale(-1 1) rotate(-45 -31.3 415.202)"/><g transform="scale(-1 1) rotate(-45 -32.3 412.788)"><path d="M54 312v-24c0-2 2-2 2-2h6.037s1.918-.136 2.444 1.45l4.397 13.27z" fill="#ed333b" fill-rule="evenodd"/><circle transform="scale(-1 1)" cx="-66.05" cy="312.033" r="9.516" fill="none" stroke="#ed333b" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/><circle transform="scale(-1 1)" r="7" cy="312" cx="-66" fill="none" stroke="#e01b24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></g><path transform="scale(-1 1) rotate(-45 176.323 329.202)" d="M64 46s-1.872.535-4 2.037V90l4 2z" fill="url(#i)" fill-rule="evenodd"/></g><circle r="2" cy="125.865" cx="-223.446" transform="scale(-1 1) rotate(-45)" fill="#3d3846"/><path d="M72 250.128v1.879l-5.932 5.86-.068-1.739z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" opacity=".2" fill-rule="evenodd"/><path d="M74 246l-.025 2.105h2.976l.025-2.105z" opacity=".2" fill-rule="evenodd"/></g></g></svg> \ No newline at end of file
diff --git a/data/assets/featured-podcasts.svg b/data/assets/featured-podcasts.svg
new file mode 100644
index 0000000..31d8368
--- /dev/null
+++ b/data/assets/featured-podcasts.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="460" height="286" viewBox="0 0 920 572"><defs><linearGradient id="a"><stop offset="0" stop-color="#a51d2d"/><stop offset=".034" stop-color="#ed333b"/><stop offset=".071" stop-color="#c01c28"/><stop offset=".928" stop-color="#c01c28"/><stop offset=".964" stop-color="#ed333b"/><stop offset="1" stop-color="#c01c28"/></linearGradient><clipPath clipPathUnits="userSpaceOnUse" id="b"><path d="M208 4h96v48h-96z" fill="#949390" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-dashoffset="11.2"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="c"><path d="M208 4h96v48h-96z" fill="#949390" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-dashoffset="11.2"/></clipPath><linearGradient gradientTransform="translate(0 12)" xlink:href="#a" id="d" x1="8" y1="264" x2="120" y2="264" gradientUnits="userSpaceOnUse"/><clipPath clipPathUnits="userSpaceOnUse" id="e"><path d="M208 4h96v48h-96z" fill="#949390" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-dashoffset="11.2"/></clipPath></defs><g opacity=".371"><g transform="rotate(-15 -1322.8 3796.713) scale(2)"><rect ry="8" rx="8" y="521.2" x="623" height="49.8" width="232.4" fill="#c65f00"/><rect width="232.4" height="157.7" x="623" y="405" rx="8" ry="8" fill="#ff9533"/><path d="M681.1 558.55h116.2L789 537.8h-99.6z" fill="#949390" stroke="#949390" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/><g transform="translate(606.4 -1.7) scale(2.075)" fill="#424048" stroke-width=".482"><circle r="2" cy="202" cx="14"/><circle cx="14" cy="266" r="2"/><circle cx="114" cy="202" r="2"/><circle r="2" cy="266" cx="114"/></g><path d="M672.8 558.55h132.8V571H672.8z" fill="#6b696c"/><path d="M656.2 421.6h166l16.6 16.6v91.3H639.6v-91.3z" fill="#f6f5f4"/><g transform="translate(606.4 -1.7) scale(2.075)" stroke-width=".482"><path d="M16 218h96v28H16z" fill="#424048"/><circle r="6" cy="232" cx="40" fill="#f6f5f4"/><circle cx="88" cy="232" r="6" fill="#f6f5f4"/><path d="M52 226h24v12H52z" fill="#949390"/><path d="M272 28c0 61.856-50.144 112-112 112S48 89.856 48 28 98.144-84 160-84 272-33.856 272 28z" clip-path="url(#b)" transform="matrix(.25 0 0 .25 0 225)" opacity=".5" fill="#424048"/></g></g><g transform="rotate(-60 -214.597 439.48) scale(4.15)" stroke-width=".482"><rect ry="3.855" rx="3.855" y="252" x="8" height="24" width="112" fill="#241f31"/><rect width="112" height="76" x="8" y="196" rx="3.855" ry="3.855" fill="#424048"/><path d="M24 204h80l8 8v44H16v-44z" fill="#fff"/><path d="M16 222h96v24H16z"/><circle cx="40" cy="234" r="8" fill="#424048"/><circle r="8" cy="234" cx="88" fill="#424048"/><path d="M36 270h56l-4-10H40z" fill="#68676b" stroke="#68676b" stroke-width="3.855" stroke-linecap="round" stroke-linejoin="round"/><circle cx="14" cy="202" r="2" fill="#68676b"/><circle r="2" cy="266" cx="14" fill="#68676b"/><circle r="2" cy="202" cx="114" fill="#68676b"/><circle cx="114" cy="266" r="2" fill="#68676b"/><path d="M52 228h24v12H52z" fill="#949390"/><path transform="matrix(.25 0 0 .25 0 227)" clip-path="url(#c)" d="M272 28c0 61.856-50.144 112-112 112S48 89.856 48 28 98.144-84 160-84 272-33.856 272 28z" opacity=".5" fill="#424048"/><circle r="6" cy="234" cx="40" fill="#fff"/><circle cx="88" cy="234" r="6" fill="#fff"/><path d="M32 270h64v6H32z" fill="#424048"/><circle cx="40" cy="264" r="2" fill="#424048"/><circle r="2" cy="262" cx="48" fill="#424048"/><circle r="2" cy="264" cx="-88" transform="scale(-1 1)" fill="#424048"/><circle cx="-80" cy="262" r="2" transform="scale(-1 1)" fill="#424048"/><path d="M24 256v-37c0-7 6-7 6-7h14" fill="none" stroke="#f66151" stroke-width="3.855"/><path d="M25 256v-36c0-7 6-7 6-7h13" fill="none" stroke="#f9f06b" stroke-width="2.892"/><path d="M26 256v-35c0-7 6-7 6-7h12" fill="none" stroke="#33d17a" stroke-width="1.928"/><path d="M27 256v-34c0-6.75 6-7 6-7h11" fill="none" stroke="#3979cb" stroke-width=".964"/><path d="M48 208.5h56m-56 4h56m-56 4h56" fill="none" stroke="#d5d3cf"/></g></g><g transform="translate(-32.728 -818.2) scale(4.0909)" stroke-width=".489"><rect ry="3.911" rx="3.911" y="264" x="8" height="24" width="112" fill="url(#d)"/><rect width="112" height="84" x="8" y="200" rx="3.911" ry="4.323" fill="#ed333b"/><path d="M36 282h56l-4-10H40z" fill="#5e5c64" stroke="#5e5c64" stroke-width="3.911" stroke-linecap="round" stroke-linejoin="round"/><path d="M32 282h64v6H32z" fill="#424048"/><path d="M24 208h80l8 8v52H16v-52z" fill="#f6f5f4"/><g transform="translate(0 8)"><path d="M16 216h96v32H16z" fill="#424048"/><circle r="6" cy="232" cx="40" fill="#f6f5f4"/><circle cx="88" cy="232" r="6" fill="#f6f5f4"/><path d="M52 226h24v12H52z" fill="#949390"/><path d="M272 28c0 61.856-50.144 112-112 112S48 89.856 48 28 98.144-84 160-84 272-33.856 272 28z" clip-path="url(#e)" transform="matrix(.25 0 0 .25 0 225)" opacity=".5" fill="#424048"/></g></g></svg> \ No newline at end of file
diff --git a/data/assets/featured-polari.svg b/data/assets/featured-polari.svg
new file mode 100644
index 0000000..2229761
--- /dev/null
+++ b/data/assets/featured-polari.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="2000" height="470" viewBox="0 0 1875 440.626"><path style="marker:none" d="M1048.979 64.572c-46.19 0-83.374 37.185-83.374 83.374v15.159c0 46.189 37.185 83.374 83.374 83.374h621.341l45.479 45.478V246.48h7.578c46.189 0 83.374-37.185 83.374-83.374v-15.159c0-46.189-37.185-83.374-83.374-83.374z" color="#000" overflow="visible" fill="#33d17a"/><path style="marker:none" d="M965.604 155.526v7.58c0 46.189 37.185 83.374 83.374 83.374h621.343l45.477 45.476v-7.58l-45.477-45.476h-621.343c-46.19 0-83.374-37.185-83.374-83.374zm841.147 0c0 46.19-37.184 83.374-83.373 83.374h-7.58v7.58h7.58c46.189 0 83.373-37.185 83.373-83.374z" color="#000" overflow="visible" fill="#228f5d"/><path d="M175.444 155.527c-46.19 0-83.374 37.185-83.374 83.374v15.158c0 46.19 37.184 83.375 83.374 83.375h22.739v45.476l45.476-45.476h386.438c46.19 0 83.372-37.185 83.372-83.375v-15.158c0-46.19-37.183-83.374-83.372-83.374z" fill="#f6f5f4" fill-rule="evenodd"/><path d="M92.166 250.27a85.333 85.333 0 00-.096 3.79c0 46.188 37.184 83.373 83.373 83.373h22.739v-7.58h-22.739c-44.917 0-81.306-35.17-83.277-79.584zm621.208 0c0 41.7-38.36 79.584-83.278 79.584H243.658l-45.476 45.476v7.58l45.476-45.477h386.438c46.19 0 83.374-37.185 83.374-83.374 0-1.272-.04-2.532-.096-3.79z" fill="#deddda" fill-rule="evenodd"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-slack-bg.jpg b/data/assets/featured-slack-bg.jpg
new file mode 100644
index 0000000..0930165
--- /dev/null
+++ b/data/assets/featured-slack-bg.jpg
Binary files differ
diff --git a/data/assets/featured-sound-recorder.svg b/data/assets/featured-sound-recorder.svg
new file mode 100644
index 0000000..24ebf4b
--- /dev/null
+++ b/data/assets/featured-sound-recorder.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="872" height="512"><defs><radialGradient xlink:href="#a" id="i" gradientUnits="userSpaceOnUse" gradientTransform="matrix(22.22797 0 0 4.4603 -1219.105 -496.068)" cx="64.846" cy="194.19" fx="64.846" fy="194.19" r="44"/><linearGradient id="a"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity=".094"/></linearGradient><linearGradient xlink:href="#b" id="j" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-4.1143 0 0 4.1143 447.353 -779.735)" x1="22.472" y1="257" x2="100.444" y2="257"/><linearGradient id="b"><stop offset="0" stop-color="#57e389"/><stop offset="1" stop-color="#57e389" stop-opacity=".204"/></linearGradient><linearGradient xlink:href="#c" id="k" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.25 0 0 .25 -30 125.009)" x1="167.785" y1="619.964" x2="520.004" y2="620.196"/><linearGradient id="c"><stop offset="0" stop-color="#d5d3cf"/><stop offset=".046" stop-color="#e4e1de"/><stop offset=".091" stop-color="#d5d3cf"/><stop offset=".909" stop-color="#d5d3cf"/><stop offset=".955" stop-color="#e4e1de"/><stop offset="1" stop-color="#d5d3cf"/></linearGradient><linearGradient xlink:href="#d" id="l" gradientUnits="userSpaceOnUse" gradientTransform="translate(-8)" x1="36" y1="264" x2="36" y2="286"/><linearGradient id="d"><stop offset="0" stop-color="#e01b24"/><stop offset=".5" stop-color="#ce1e2b"/><stop offset=".682" stop-color="#ed333b"/><stop offset=".818" stop-color="#b31c2a"/><stop offset="1" stop-color="#7a1621"/></linearGradient><linearGradient xlink:href="#e" id="m" gradientUnits="userSpaceOnUse" gradientTransform="translate(2)" x1="36" y1="264" x2="36" y2="286"/><linearGradient id="e"><stop offset="0" stop-color="#5e5c64"/><stop offset=".5" stop-color="#5e5c64"/><stop offset=".682" stop-color="#77767b"/><stop offset=".818" stop-color="#5e5c64"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient xlink:href="#e" id="n" gradientUnits="userSpaceOnUse" gradientTransform="translate(12)" x1="36" y1="264" x2="36" y2="286"/><linearGradient xlink:href="#e" id="o" gradientUnits="userSpaceOnUse" gradientTransform="translate(22)" x1="36" y1="264" x2="36" y2="286"/><linearGradient xlink:href="#e" id="p" gradientUnits="userSpaceOnUse" gradientTransform="translate(32)" x1="36" y1="264" x2="36" y2="286"/><linearGradient xlink:href="#e" id="q" gradientUnits="userSpaceOnUse" gradientTransform="translate(42)" x1="36" y1="264" x2="36" y2="286"/><radialGradient xlink:href="#f" id="r" gradientUnits="userSpaceOnUse" gradientTransform="translate(-394.688 -39.563) scale(1.1875)" cx="185" cy="211" fx="185" fy="211" r="16"/><linearGradient id="f"><stop offset="0" stop-color="#deddda"/><stop offset="1" stop-color="#9a9996"/></linearGradient><linearGradient xlink:href="#g" id="s" gradientUnits="userSpaceOnUse" x1="163" y1="216" x2="197" y2="216"/><linearGradient id="g"><stop offset="0" stop-color="#c0bfbc"/><stop offset=".45" stop-color="#fff"/><stop offset=".75" stop-color="#c0bfbc"/><stop offset="1" stop-color="#9a9996"/></linearGradient><linearGradient xlink:href="#h" id="t" gradientUnits="userSpaceOnUse" x1="170.438" y1="254" x2="189.531" y2="254"/><linearGradient id="h"><stop offset="0" stop-color="#3d3846"/><stop offset=".448" stop-color="#9a9996"/><stop offset=".75" stop-color="#5e5c64"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient xlink:href="#g" id="u" gradientUnits="userSpaceOnUse" x1="166" y1="227.5" x2="194" y2="227.5"/></defs><rect style="marker:none" width="427.889" height="255.087" x="17.753" y="145.986" rx="16.457" ry="16.457" fill="#241f31"/><path d="M429.186 384.616H34.212V166.558h394.974z" style="marker:none" opacity=".05" fill="url(#i)"/><path d="M34.212 269.416h394.971v16.456H34.213z" opacity=".261" fill="#f8e45c"/><path d="M346.553 277.641H42.44" fill="none" stroke="url(#j)" stroke-width="16.457" stroke-linecap="round"/><g fill="none" stroke="#33d17a" stroke-width="16.457" stroke-linecap="round"><path d="M75.354 236.5v82.287m41.143-65.828v49.372m41.143-53.488v57.601m41.144-74.057V322.9m41.14-115.2v139.886m41.146-106.971v74.058m41.142-86.403v98.744"/><path d="M75.354 265.302v24.686m41.143-20.573v16.457m41.143-24.686v32.915m41.144-32.915v32.915m41.14-53.485v74.058m41.146-53.488v32.915m41.142-28.8v24.687" stroke="#f9f06b"/></g><g transform="translate(356.41 -731.252) scale(4.19485)"><rect ry="8" rx="8" y="180" x="16" height="110" width="80" style="marker:none" fill="#f6f5f4"/><path d="M16 272v12c0 4.432 3.568 8 8 8h64c4.432 0 8-3.568 8-8v-12c0 4.432-3.568 8-8 8H24c-4.432 0-8-3.568-8-8z" style="marker:none" fill="url(#k)"/><rect ry="2" rx="2" width="62" height="26" x="25" y="264" fill="#3d3846"/><rect ry="2" rx="2" width="62" height="24" x="25" y="262" fill="#c0bfbc"/><path d="M25 264h62v22H25z" fill="#9a9996"/><rect ry="4" rx="4" y="220" x="24" height="34" width="64" style="marker:none" fill="#c0bfbc" stroke="#c0bfbc" stroke-width=".011"/><rect ry="4" rx="4" style="marker:none" width="64" height="34" x="24" y="218" fill="#deddda"/><rect rx="2" style="marker:none" width="32" height="12" x="40" y="228" ry="2" fill="#77767b"/><g transform="translate(-8)" fill="#77767b"><circle cx="36" cy="192" r="2"/><circle r="2" cy="192" cx="44"/><circle r="2" cy="192" cx="52"/><circle cx="60" cy="192" r="2"/><circle r="2" cy="192" cx="68"/><circle cx="76" cy="192" r="2"/><circle cx="84" cy="192" r="2"/><circle r="2" cy="192" cx="92"/><circle r="2" cy="200" cx="36"/><circle cx="44" cy="200" r="2"/><circle cx="52" cy="200" r="2"/><circle r="2" cy="200" cx="60"/><circle cx="68" cy="200" r="2"/><circle r="2" cy="200" cx="76"/><circle r="2" cy="200" cx="84"/><circle cx="92" cy="200" r="2"/><circle cx="36" cy="208" r="2"/><circle r="2" cy="208" cx="44"/><circle r="2" cy="208" cx="52"/><circle cx="60" cy="208" r="2"/><circle r="2" cy="208" cx="68"/><circle cx="76" cy="208" r="2"/><circle cx="84" cy="208" r="2"/><circle r="2" cy="208" cx="92"/></g><rect rx="2" ry="2" y="229" x="40" height="12" width="32" style="marker:none" fill="#3d3846"/><circle r="3" cy="235" cx="47" fill="#deddda"/><circle cx="65" cy="235" r="3" fill="#deddda"/><path d="M53 233h6v4h-6z" style="marker:none" fill="#9a9996"/><path d="M26 264h10v22H26z" fill="url(#l)"/><path d="M36 264h10v22H36z" fill="#5e5c64"/><path d="M36 264h10v22H36z" fill="url(#m)"/><path d="M36 264h1v22h-1z" fill-opacity=".319"/><path d="M46 264h10v22H46z" fill="url(#n)"/><path d="M56 264h10v22H56z" fill="url(#o)"/><path d="M66 264h10v22H66z" fill="url(#p)"/><path d="M76 264h10v22H76z" fill="url(#q)"/><path d="M46 264h1v22h-1zm10 0h1v22h-1zm10 0h1v22h-1zm10 0h1v22h-1z" fill-opacity=".319"/><circle cx="29" cy="247" r="2" fill="#77767b"/><path d="M33 246h10v2H33z" fill="#77767b"/><g transform="translate(-77)"><circle cx="-180" cy="216" r="16" transform="scale(-1 1)" fill="url(#r)"/><path d="M163 214h34v4h-34z" fill="url(#s)"/><ellipse cx="180" cy="282" rx="8" ry="2" fill="#3d3846"/><path d="M168 227h24l-4 55h-16z" fill="url(#t)"/><path d="M166 225h28l-1 5h-26z" fill="url(#u)"/></g></g></svg> \ No newline at end of file
diff --git a/data/assets/featured-stellarium-bg.jpg b/data/assets/featured-stellarium-bg.jpg
new file mode 100644
index 0000000..ba91cfd
--- /dev/null
+++ b/data/assets/featured-stellarium-bg.jpg
Binary files differ
diff --git a/data/assets/featured-tetravex-bg.jpg b/data/assets/featured-tetravex-bg.jpg
new file mode 100644
index 0000000..9608b11
--- /dev/null
+++ b/data/assets/featured-tetravex-bg.jpg
Binary files differ
diff --git a/data/assets/featured-todo-bg.jpg b/data/assets/featured-todo-bg.jpg
new file mode 100644
index 0000000..38d1434
--- /dev/null
+++ b/data/assets/featured-todo-bg.jpg
Binary files differ
diff --git a/data/assets/featured-transmission.svg b/data/assets/featured-transmission.svg
new file mode 100644
index 0000000..42b8956
--- /dev/null
+++ b/data/assets/featured-transmission.svg
@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="800"
+ height="800"
+ version="1.1"
+ id="svg54"
+ sodipodi:docname="featured-transmission-overlay.svg"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14">
+ <metadata
+ id="metadata60">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs58">
+ <clipPath
+ id="clipPath987"
+ clipPathUnits="userSpaceOnUse">
+ <circle
+ style="display:inline;opacity:1;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:4.28571415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle989"
+ cx="63.999996"
+ cy="236"
+ r="60" />
+ </clipPath>
+ <clipPath
+ id="clipPath1106"
+ clipPathUnits="userSpaceOnUse">
+ <g
+ id="g1112"
+ transform="matrix(0.26785714,0,0,0.26785714,-4.57143,224.21429)"
+ style="display:inline;fill:#f5c211;stroke-width:0.93333334;enable-background:new">
+ <circle
+ r="224"
+ cy="43.999989"
+ cx="256"
+ id="circle1108"
+ style="display:inline;opacity:1;fill:#f5c211;fill-opacity:1;stroke:none;stroke-width:0.04218px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <circle
+ style="display:inline;opacity:1;fill:#f5c211;fill-opacity:1;stroke:none;stroke-width:0.04218px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1110"
+ cx="256"
+ cy="43.999989"
+ r="224" />
+ </g>
+ </clipPath>
+ <clipPath
+ id="clipPath2828"
+ clipPathUnits="userSpaceOnUse">
+ <circle
+ style="display:inline;opacity:1;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:4.28571415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle2826"
+ cx="63.999996"
+ cy="236"
+ r="60" />
+ </clipPath>
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect1931"
+ is_visible="true" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="3440"
+ inkscape:window-height="1376"
+ id="namedview56"
+ showgrid="false"
+ showborder="true"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ inkscape:zoom="1"
+ inkscape:cx="403.56877"
+ inkscape:cy="236.26192"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg54">
+ <inkscape:grid
+ type="xygrid"
+ id="grid10064" />
+ </sodipodi:namedview>
+ <g
+ style="display:inline;enable-background:new"
+ transform="matrix(5.8800314,0,0,5.8800314,-14.326346,-975.1427)"
+ id="g1987">
+ <g
+ style="display:inline;stroke-width:0.93333334;enable-background:new"
+ transform="matrix(0.26785714,0,0,0.26785714,-4.571444,224.21429)"
+ id="g1894" />
+ <path
+ style="display:inline;fill:#144788;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 105.99998,230 v 2 h 4 v -2 z"
+ id="path1900"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffa348;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:accumulate"
+ clip-path="url(#clipPath987)"
+ d="m 38,176 v 4 l 10,8 v 8 l 8,8 h 4 v -4 l 6,-6 v -4 l 4,-4 v -10 z m -4,16 H 4 c 0,0 0.5090211,40.4419 0,40 l 20,18 v -6 l -4,-4 6,-6 h 4 l 4,4 0.12494,-8.4018 L 40,224 h 4 v -4 l 4,-4 v -6 L 43.727619,206.12499 34,206 v 8 h -4 l -4,-4 v -4 l 6,-6 h 6 v -4 z m 60,2 -6,6 v 4 h 6 v -2.14287 h 4 v 4.26786 L 96,208 H 86 v 4 h -4 v 6 h -8 v 8 h 10 v -4 h 8 v 2 l 4,4 h 2 v -2 l -2,-2 v -2 h 4 l 6,6 h 6 v 2 l -2,2 h -4 l 18,18 V 194 H 96 Z m 12,38 H 94 l -2,-2 H 78 l -8,8 v 8 l 8,8 h 6 l 4,4 v 2 l 2,2 v 12 l 14,14 h 8 v -30 l 4,-4 v -8 l -10,-10 z m -2,-12 h 4 l 6,6 h -4 z m -74,28 -4,4 v 10 l 8.12494,8.14285 L 34,296 h 8 v -8 l 6,-6 v -4 l 6,-6 v -4 l 4,-4 v -8 l -4,-4 h -8 l -4,-4 z"
+ id="path1902"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+ transform="translate(-1.4e-5,-2.000005)" />
+ <circle
+ r="8"
+ cy="220"
+ cx="32"
+ id="circle1923"
+ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <circle
+ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1925"
+ cx="56.000008"
+ cy="260"
+ r="8" />
+ <circle
+ r="8"
+ cy="216"
+ cx="88"
+ id="circle1927"
+ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ inkscape:original-d="m 32,220 c 0,0 16.747844,-9.2127 26,-10 10.161317,-0.86466 30,6 30,6 0,0 -15.337006,9.32283 -20.610483,16.32219 C 61.386156,240.29032 56,260 56,260"
+ inkscape:path-effect="#path-effect1931"
+ sodipodi:nodetypes="cscsc"
+ inkscape:connector-curvature="0"
+ id="path1929"
+ d="m 32,220 c 7.561397,-5.58148 16.647249,-9.07604 26,-10 10.298226,-1.01737 20.88524,1.10004 30,6 -8.036636,3.69932 -15.168124,9.347 -20.610483,16.32219 C 61.175982,240.28575 57.191021,249.96966 56,260"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 9;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="translate(-1.4e-5,-5e-6)" />
+ <g
+ id="g1939"
+ transform="translate(-48.187334,-0.009295)"
+ style="display:inline;opacity:0.572;enable-background:new">
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:5.59042978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle1933"
+ cx="80.187325"
+ cy="220.00929"
+ r="11.204785" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:3.50909877;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle1935"
+ cx="80.187325"
+ cy="220.00929"
+ r="21.870481" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:1.74971068;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle1937"
+ cx="80.187325"
+ cy="220.00929"
+ r="30.937651" />
+ </g>
+ <g
+ style="display:inline;opacity:0.19800002;enable-background:new"
+ transform="translate(7.812666,-4.009295)"
+ id="g1947">
+ <circle
+ r="11.204785"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle1941"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:5.59042978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <circle
+ r="24.069067"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle1943"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:3.86186433;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <circle
+ r="35.009987"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle1945"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:1.9800266;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ </g>
+ <g
+ style="display:inline;opacity:0.325;enable-background:new"
+ transform="translate(-24.187334,39.99071)"
+ id="g1953">
+ <circle
+ r="11.204785"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle1949"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:5.59042978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <circle
+ r="21.063864"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle1951"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.73280537;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ </g>
+ </g>
+ <g
+ id="g10138"
+ transform="matrix(4.9384614,0,0,4.9384614,-3779.4321,-531.8153)"
+ style="display:inline;enable-background:new">
+ <path
+ style="display:inline;fill:#2967b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 39.524796,179.21985 1.5e-4,1.99902 4.010848,-0.15924 0.0908,-1.99747 z"
+ id="path10096"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="display:inline;fill:#164e93;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 4.125636,230.11768 1.5e-4,1.99902 4.01084,-0.15924 0.0908,-1.99747 z"
+ id="path10098"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g10102"
+ transform="matrix(0.26785714,0,0,0.26785714,-4.571444,224.21429)"
+ style="display:inline;stroke-width:0.93333334;enable-background:new">
+ <circle
+ style="display:inline;opacity:1;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:0.04218px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle10100"
+ cx="256"
+ cy="43.999989"
+ r="224" />
+ </g>
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path10104"
+ d="m 105.99998,230 v 2 h 4 v -2 z"
+ style="display:inline;fill:#144788;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
+ <path
+ transform="translate(-1.4e-5,-2.000005)"
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path10106"
+ d="m 38,176 v 4 l 10,8 v 8 l 8,8 h 4 v -4 l 6,-6 v -4 l 4,-4 v -10 z m -4,16 H 4 c 0,0 0.5090211,40.4419 0,40 l 20,18 v -6 l -4,-4 6,-6 h 4 l 4,4 0.12494,-8.4018 L 40,224 h 4 v -4 l 4,-4 v -6 L 43.727619,206.12499 34,206 v 8 h -4 l -4,-4 v -4 l 6,-6 h 6 v -4 z m 60,2 -6,6 v 4 h 6 v -2.14287 h 4 v 4.26786 L 96,208 H 86 v 4 h -4 v 6 h -8 v 8 h 10 v -4 h 8 v 2 l 4,4 h 2 v -2 l -2,-2 v -2 h 4 l 6,6 h 6 v 2 l -2,2 h -4 l 18,18 V 194 H 96 Z m 12,38 H 94 l -2,-2 H 78 l -8,8 v 8 l 8,8 h 6 l 4,4 v 2 l 2,2 v 12 l 14,14 h 8 v -30 l 4,-4 v -8 l -10,-10 z m -2,-12 h 4 l 6,6 h -4 z m -74,28 -4,4 v 10 l 8.12494,8.14285 L 34,296 h 8 v -8 l 6,-6 v -4 l 6,-6 v -4 l 4,-4 v -8 l -4,-4 h -8 l -4,-4 z"
+ clip-path="url(#clipPath987)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#99c1f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle10108"
+ cx="32"
+ cy="220"
+ r="8" />
+ <circle
+ r="8"
+ cy="260"
+ cx="56.000008"
+ id="circle10110"
+ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <circle
+ style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle10112"
+ cx="88"
+ cy="216"
+ r="8" />
+ <path
+ transform="translate(-1.4e-5,-5e-6)"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 9;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 32,220 c 7.561397,-5.58148 16.647249,-9.07604 26,-10 10.298226,-1.01737 20.88524,1.10004 30,6 -8.036636,3.69932 -15.168124,9.347 -20.610483,16.32219 C 61.175982,240.28575 57.191021,249.96966 56,260"
+ id="path10114"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscsc"
+ inkscape:path-effect="#path-effect1931"
+ inkscape:original-d="m 32,220 c 0,0 16.747844,-9.2127 26,-10 10.161317,-0.86466 30,6 30,6 0,0 -15.337006,9.32283 -20.610483,16.32219 C 61.386156,240.29032 56,260 56,260" />
+ <g
+ style="display:inline;opacity:0.572;enable-background:new"
+ transform="translate(-48.187334,-0.009295)"
+ id="g10122">
+ <circle
+ r="11.204785"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle10116"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:5.59042978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <circle
+ r="21.870481"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle10118"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:3.50909877;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <circle
+ r="30.937651"
+ cy="220.00929"
+ cx="80.187325"
+ id="circle10120"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:1.74971068;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ </g>
+ <g
+ id="g10130"
+ transform="translate(7.812666,-4.009295)"
+ style="display:inline;opacity:0.19800002;enable-background:new">
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:5.59042978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle10124"
+ cx="80.187325"
+ cy="220.00929"
+ r="11.204785" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:3.86186433;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle10126"
+ cx="80.187325"
+ cy="220.00929"
+ r="24.069067" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:1.9800266;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle10128"
+ cx="80.187325"
+ cy="220.00929"
+ r="35.009987" />
+ </g>
+ <g
+ id="g10136"
+ transform="translate(-24.187334,39.99071)"
+ style="display:inline;opacity:0.325;enable-background:new">
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;fill:none;stroke:#ffffff;stroke-width:5.59042978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle10132"
+ cx="80.187325"
+ cy="220.00929"
+ r="11.204785" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.66763006;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.73280537;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="circle10134"
+ cx="80.187325"
+ cy="220.00929"
+ r="21.063864" />
+ </g>
+ </g>
+ <g
+ inkscape:label="document-save"
+ transform="matrix(13.369231,0,0,13.369231,-5290.14,-6678.5819)"
+ id="g10148"
+ style="display:inline;enable-background:new">
+ <rect
+ width="16"
+ height="16"
+ x="538"
+ y="160"
+ id="rect10140"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none;enable-background:new"
+ transform="matrix(0,1,1,0,0,0)" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 167,539 v 7.5625 l -1.28125,-1.28125 C 165.53059,545.0931 165.2653,545.00001 165,545 h -1 v 1 c 1e-5,0.2653 0.0931,0.53058 0.28125,0.71875 l 3,3 L 167.5625,550 h 0.875 l 0.28125,-0.28125 3,-3 C 171.90694,546.53058 171.99999,546.2653 172,546 v -1 h -1 c -0.2653,10e-6 -0.53059,0.0931 -0.71875,0.28125 L 169,546.5625 V 539 Z"
+ id="path10142"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path10144"
+ d="m 161.99414,551.00001 0.006,2 h 12 l -0.006,-2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#1a5fb4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.54582262;marker:none;enable-background:accumulate"
+ d="m 162.35797,551.36119 0.003,1.27764 h 5.59656 l -0.003,-1.27764 z"
+ id="path10146"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ id="g10168"
+ transform="matrix(1.6904132,0,0,1.6904132,-55.196097,264.18532)">
+ <circle
+ r="98"
+ cy="83.629105"
+ cx="399.51904"
+ id="path10160"
+ style="opacity:1;vector-effect:none;fill:#ff7800;fill-opacity:1;stroke:none;stroke-width:2.52903223;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
+ <g
+ inkscape:label="document-save"
+ transform="matrix(8.4528041,0,0,8.4528041,-1018.7244,-4539.1775)"
+ id="g10158"
+ style="display:inline;enable-background:new">
+ <rect
+ width="16"
+ height="16"
+ x="538"
+ y="160"
+ id="rect10150"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none;enable-background:new"
+ transform="matrix(0,1,1,0,0,0)" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 167,539 v 7.5625 l -1.28125,-1.28125 C 165.53059,545.0931 165.2653,545.00001 165,545 h -1 v 1 c 1e-5,0.2653 0.0931,0.53058 0.28125,0.71875 l 3,3 L 167.5625,550 h 0.875 l 0.28125,-0.28125 3,-3 C 171.90694,546.53058 171.99999,546.2653 172,546 v -1 h -1 c -0.2653,10e-6 -0.53059,0.0931 -0.71875,0.28125 L 169,546.5625 V 539 Z"
+ id="path10152"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path10154"
+ d="m 161.99414,551.00001 0.006,2 h 12 l -0.006,-2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#1a5fb4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.54582262;marker:none;enable-background:accumulate"
+ d="m 162.35797,551.36119 0.003,1.27764 h 5.59656 l -0.003,-1.27764 z"
+ id="path10156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/data/assets/featured-uberwriter.svg b/data/assets/featured-uberwriter.svg
new file mode 100644
index 0000000..0f6b046
--- /dev/null
+++ b/data/assets/featured-uberwriter.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="812" height="500"><path d="M752.286 500H58.468A58.468 58.468 0 0 1 0 441.532V59.542A58.468 58.468 0 0 1 58.468 1.075h693.818a58.468 58.468 0 0 1 58.468 58.467v381.99A58.468 58.468 0 0 1 752.286 500zM194.893 383.064V231.048l77.957 97.446 77.957-97.446v152.016h77.957V118.01h-77.957l-77.957 97.447-77.957-97.447h-77.957v265.054zm522.312-132.527h-77.957V118.01h-77.957v132.527h-77.957L600.27 386.962z" fill="#fff"/></svg> \ No newline at end of file
diff --git a/data/assets/featured-vlc-bg.jpg b/data/assets/featured-vlc-bg.jpg
new file mode 100644
index 0000000..b513130
--- /dev/null
+++ b/data/assets/featured-vlc-bg.jpg
Binary files differ
diff --git a/data/assets/meson.build b/data/assets/meson.build
new file mode 100644
index 0000000..e7ebb44
--- /dev/null
+++ b/data/assets/meson.build
@@ -0,0 +1,41 @@
+install_data([
+ 'upgrade-bg.png',
+ 'featured-boxes.svg',
+ 'featured-bitwarden.svg',
+ 'featured-calibre-bg.jpg',
+ 'featured-darktable-bg.jpg',
+ 'featured-dropbox.png',
+ 'featured-FeedReader.svg',
+ 'featured-foliate.svg',
+ 'featured-foliate-bg.jpg',
+ 'featured-fondo-bg.jpg',
+ 'featured-gimp.png',
+ 'featured-gnome-sudoku.png',
+ 'featured-homebank-bg.jpg',
+ 'featured-inkscape.svg',
+ 'featured-kdenlive-bg.jpg',
+ 'featured-klavaro-bg.jpg',
+ 'featured-maps-bg.svg',
+ 'featured-maps-overlay.svg',
+ 'featured-marker-bg.jpg',
+ 'featured-mypaint.svg',
+ 'featured-pdf-slicer.svg',
+ 'featured-podcasts.svg',
+ 'featured-polari.svg',
+ 'featured-slack-bg.jpg',
+ 'featured-sound-recorder.svg',
+ 'featured-stellarium-bg.jpg',
+ 'featured-tetravex-bg.jpg',
+ 'featured-todo-bg.jpg',
+ 'featured-transmission.svg',
+ 'featured-uberwriter.svg',
+ 'featured-vlc-bg.jpg'
+ ],
+ install_dir : 'share/gnome-software'
+)
+
+if get_option('default_featured_apps')
+ install_data('org.gnome.Software.Featured.xml',
+ install_dir : join_paths(get_option('datadir'), 'app-info', 'xmls'),
+ )
+endif
diff --git a/data/assets/org.gnome.Software.Featured.xml b/data/assets/org.gnome.Software.Featured.xml
new file mode 100644
index 0000000..23d720d
--- /dev/null
+++ b/data/assets/org.gnome.Software.Featured.xml
@@ -0,0 +1,363 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components>
+ <component merge="append">
+ <id>inkscape.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #aaa;
+text-shadow: none;
+color: #333;
+background:
+ linear-gradient(to bottom, rgba(255,255,255,0.3), rgba(200,200,200,0.9)),
+ url('file://@datadir@/gnome-software/featured-inkscape.svg')
+ left 40% / 80% auto no-repeat;
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>mypaint.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #888;
+color: #333;
+text-shadow: 0 1px 12px rgba(255,255,255,0.05),
+ 0 -1px rgba(255,255,255,0.05),
+ 1px 0 rgba(255,255,255,0.1),
+ 0 1px rgba(255,255,255,0.3),
+ -1px 0 rgba(255,255,255,0.1);
+background:
+ url('file://@datadir@/gnome-software/featured-mypaint.svg')
+ left 90% / 300px auto no-repeat,
+ linear-gradient(to bottom, #ccc, #eee);
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.Maps.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #deddda;
+text-shadow: none;
+color: #613583;
+
+background: #c7ddf7,
+ url('file://@datadir@/gnome-software/featured-maps-overlay.svg')
+ 16px 16px / 20% auto no-repeat,
+ url('file://@datadir@/gnome-software/featured-maps-bg.svg')
+ 0 50% / contain no-repeat;
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.Polari.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #4e9a06;
+color: #fff;
+text-shadow: 0 1px #317e54,
+-1px 0 #317e54;
+outline: none;
+background:
+ linear-gradient(to bottom, rgba(105,108,116,0.3)),
+ url('file://@datadir@/gnome-software/featured-polari.svg')
+ center / 90% auto no-repeat, #43a570;
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>transmission-gtk.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #d65100;
+text-shadow: 0 1px 1px rgba(0,0,0,0.5);
+color: #ffffff;
+background:
+ url('file://@datadir@/gnome-software/featured-transmission.svg')
+ -20% center / 40% auto no-repeat, -gtk-gradient (radial,
+ center bottom, 0, center center, 0.8,
+ from(#ffa348), to(#e66100));
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.Podcasts</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #d7430a;
+background: #f7632a,
+ url('file://@datadir@/gnome-software/featured-podcasts.svg')
+ 10% 20% / 50% auto no-repeat;
+color: #fff;
+text-shadow: 0 1px 12px rgba(0,0,0,0.05),
+ 0 -1px rgba(0,0,0,0.05),
+ 1px 0 rgba(0,0,0,0.1),
+ 0 1px rgba(0,0,0,0.3),
+ -1px 0 rgba(0,0,0,0.1);</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.Boxes.desktop</id>
+ <categories>
+ <category>Featured</category>
+ </categories>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #ed8254;
+background: #fca937 url('file://@datadir@/gnome-software/featured-boxes.svg')
+ 150% center / 60% auto no-repeat;
+color: #fff;
+text-shadow: 0 1px 12px rgba(0,0,0,0.05),
+ 0 -1px rgba(0,0,0,0.05),
+ 1px 0 rgba(0,0,0,0.1),
+ 0 1px rgba(0,0,0,0.3),
+ -1px 0 rgba(0,0,0,0.1);</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.github.johnfactotum.Foliate</id>
+ <categories>
+ <category>Featured</category>
+ </categories>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #00aaaa;
+background: #00cccc,
+ url('file://@datadir@/gnome-software/featured-foliate.svg')
+ 10% 40% / 50% auto no-repeat,
+ url('file://@datadir@/gnome-software/featured-foliate-bg.jpg')
+ center bottom / cover no-repeat;
+color: #004444;
+text-shadow: none;
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.SoundRecorder.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #bbb;
+background: #443f51 url('file://@datadir@/gnome-software/featured-sound-recorder.svg')
+ 130% 40% / 50% auto no-repeat;
+color: #fff;
+text-shadow: none;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.kde.kdenlive</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #df321e;
+background: linear-gradient(to bottom, rgba(255,214,172,0.8), rgba(255,214,172,0.8)),
+ url('file://@datadir@/gnome-software/featured-kdenlive-bg.jpg')
+ center / cover no-repeat;
+color: #df321e;
+text-shadow: none;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gimp.GIMP</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #4a8c30;
+text-shadow: none;
+color: rgba(255,255,255,0.9);
+background:
+ url('file://@datadir@/gnome-software/featured-gimp.png')
+ -20% 50% / 50% auto no-repeat,
+ linear-gradient(to bottom, #8ac674, #cbddc3);
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.videolan.VLC</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #df321e;
+background: #fafafa url('file://@datadir@/gnome-software/featured-vlc-bg.jpg')
+ left 13% / 90% auto no-repeat;
+background-size: cover;
+color: #222;
+text-shadow: 0 0 2px #fff;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.spotify.Client</id>
+ <categories>
+ <category>Featured</category>
+ </categories>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #b47fba;
+text-shadow: 0 1px 1px rgba(0,0,0,0.5);
+color: #ffffff;
+background: url('http://people.gnome.org/~jimmac/gnome-software/spotify-logo.svg')
+ 10% / 200px auto no-repeat, -gtk-gradient (linear, left top, left bottom, from(#b47fba), to(#000));</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.slack.Slack</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #eee;
+background:
+ url('http://people.gnome.org/~jimmac/gnome-software/slack-logo.svg') 10% 48px / 200px auto no-repeat,
+ linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0.5)),
+ url('file://@datadir@/gnome-software/featured-slack-bg.jpg')
+ center / cover no-repeat;
+color: #fff;
+text-shadow: none;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.FeedReader</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #d65100;
+text-shadow: 0 1px 1px rgba(0,0,0,0.5);
+color: #ffffff;
+background: #f5c211
+ url('file://@datadir@/gnome-software/featured-FeedReader.svg')
+ 0 50% / contain no-repeat;
+</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.bitwarden.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #1c6d8c;
+background: #2ec27e
+ url('file://@datadir@/gnome-software/featured-bitwarden.svg')
+ 150% 80% / 60% auto no-repeat;
+color: #fff;
+text-shadow: 0 0 2px #26a269;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.dropbox.Client</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #a8c3d6;
+text-shadow: 0 1px rgba(255,255,255,0.8);
+background: #b8d3e6 url('file://@datadir@/gnome-software/featured-dropbox.png')
+ left 40% / 100% auto no-repeat;
+color: #47525d;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.github.calo001.fondo</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: -gtk-gradient (linear, left top, right top, from(rgba(0,0,0,0)), to(rgba(0,0,0,0.5))),
+url('file://@datadir@/gnome-software/featured-fondo-bg.jpg') center 20% no-repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.darktable.Darktable</id>
+ <categories>
+ <category>Featured</category>
+ </categories>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: url('file://@datadir@/gnome-software/featured-darktable-bg.jpg') center 45% no-repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.calibre_ebook.calibre</id>
+ <categories>
+ <category>Featured</category>
+ </categories>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: url('file://@datadir@/gnome-software/featured-calibre-bg.jpg') center 45% repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>fr.free.Homebank</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: url('file://@datadir@/gnome-software/featured-homebank-bg.jpg') center 45% repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>de.wolfvollprecht.UberWriter</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #0554c4;
+background: #3584e4,
+ url('file://@datadir@/gnome-software/featured-uberwriter.svg')
+ 10% center / 30% auto no-repeat;
+color: #fff;
+text-shadow: 0 0 3px #3584e4;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>net.sourceforge.Klavaro</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: url('file://@datadir@/gnome-software/featured-klavaro-bg.jpg') center 45% repeat;
+background-size: cover;
+color: #000;
+text-shadow: 0 0 4px #fff;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.github.junrrein.PDFSlicer</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #1c6d8c;
+background: #3c8dbc
+ url('file://@datadir@/gnome-software/featured-pdf-slicer.svg')
+ 12px 70% / 30% auto no-repeat;
+color: #fff;
+text-shadow: none;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.Todo.desktop</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: url('file://@datadir@/gnome-software/featured-todo-bg.jpg') center 40% repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.github.fabiocolacio.marker</id>
+ <categories>
+ <category>Featured</category>
+ </categories>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid #a88;
+background: url('file://@datadir@/gnome-software/featured-marker-bg.jpg') center 45% repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>com.valvesoftware.Steam</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border-color: #1b2838;
+text-shadow: 0 1px 1px rgba(0,0,0,0.5);
+color: #ffffff;
+background: #1b2838 url('http://people.gnome.org/~jimmac/gnome-software/steam-logo.svg')
+ 10% / 200px auto no-repeat;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.gnome.Tetravex</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: url('file://@datadir@/gnome-software/featured-tetravex-bg.jpg') center 45% repeat;
+background-size: cover;
+color: #000;
+text-shadow: 0 0 2px #fff;</value>
+ </custom>
+ </component>
+ <component merge="append">
+ <id>org.stellarium.Stellarium</id>
+ <custom>
+ <value key="GnomeSoftware::FeatureTile-css">border: 1px solid transparent;
+background: -gtk-gradient (linear, left top, right top, from(rgba(0,0,0,0)), to(rgba(0,0,0,0.9))),
+url('file://@datadir@/gnome-software/featured-stellarium-bg.jpg') center 20% no-repeat;
+background-size: cover;
+color: #fff;
+text-shadow: 0 1px 2px #000;</value>
+ </custom>
+ </component>
+</components>
diff --git a/data/assets/upgrade-bg.png b/data/assets/upgrade-bg.png
new file mode 100644
index 0000000..1e92fa6
--- /dev/null
+++ b/data/assets/upgrade-bg.png
Binary files differ
diff --git a/data/icons/hicolor/meson.build b/data/icons/hicolor/meson.build
new file mode 100644
index 0000000..8e232b8
--- /dev/null
+++ b/data/icons/hicolor/meson.build
@@ -0,0 +1,6 @@
+install_data('scalable/org.gnome.Software.svg',
+ install_dir : 'share/icons/hicolor/scalable/apps')
+install_data('symbolic/org.gnome.Software-symbolic.svg',
+ install_dir : 'share/icons/hicolor/symbolic/apps')
+install_data('scalable/software-installed-symbolic.svg',
+ install_dir : 'share/icons/hicolor/scalable/status')
diff --git a/data/icons/hicolor/scalable/org.gnome.Software.Devel.svg b/data/icons/hicolor/scalable/org.gnome.Software.Devel.svg
new file mode 100644
index 0000000..209ba54
--- /dev/null
+++ b/data/icons/hicolor/scalable/org.gnome.Software.Devel.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><clipPath id="a"><path d="M0 0h128v128H0z"/></clipPath><clipPath id="b"><path d="M0 0h128v128H0z"/></clipPath><clipPath id="h"><path d="M0 0h128v128H0z"/></clipPath><clipPath id="f"><path d="M0 0h128v128H0z"/></clipPath><g id="e" clip-path="url(#b)" filter="url(#c)"><use xlink:href="#d"/></g><g id="i" clip-path="url(#f)"><path d="M128 80.64V128H0V80.64zm0 0" fill="url(#g)"/><path d="M13.309 80.64L60.664 128H81.88l-47.36-47.36zm42.421 0L103.094 128h21.215L76.945 80.64zm42.43 0L128 110.48V89.27l-8.629-8.63zM0 88.548v21.215L18.238 128h21.215zm0 0"/></g><g id="d" clip-path="url(#a)"><path d="M20 72h88a8 8 0 018 8v28a8 8 0 01-8 8H20a8 8 0 01-8-8V80a8 8 0 018-8zm0 0" fill="#98c1f1"/><path d="M12 20h104v88H12zm0 0" fill="#e7f0fc"/><path d="M55 29a5 5 0 11-10 0 5 5 0 0110 0zm0 0M83 29a5 5 0 11-10 0 5 5 0 0110 0zm0 0" fill="#1a5fb4"/><path d="M50 28v-8c0-7.758 6.242-14 14-14s14 6.242 14 14v8" fill="none" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke="#62a0ea"/><path d="M64 44c-11.047 0-20 8.953-20 20s8.953 20 20 20 20-8.953 20-20-8.953-20-20-20zm-8 10a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm-16 8a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm-16 8a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm0 0" fill="#3584e4"/></g><g id="k" clip-path="url(#h)"><use xlink:href="#i" mask="url(#j)"/></g><mask id="l"><use xlink:href="#e"/></mask><mask id="j"><g filter="url(#c)"><path fill-opacity=".8" d="M0 0h128v128H0z"/></g></mask><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="300" y1="235" x2="428" y2="235" gradientTransform="matrix(0 .37 -.98462 0 295.385 -30.36)"><stop offset="0" stop-color="#f9f06b"/><stop offset="1" stop-color="#f5c211"/></linearGradient><filter id="c" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%"><feColorMatrix in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><path d="M20 72h88a8 8 0 018 8v28a8 8 0 01-8 8H20a8 8 0 01-8-8V80a8 8 0 018-8zm0 0" fill="#98c1f1"/><path d="M12 20h104v88H12zm0 0" fill="#e7f0fc"/><path d="M55 29a5 5 0 11-10 0 5 5 0 0110 0zm0 0M83 29a5 5 0 11-10 0 5 5 0 0110 0zm0 0" fill="#1a5fb4"/><path d="M50 28v-8c0-7.758 6.242-14 14-14s14 6.242 14 14v8" fill="none" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke="#62a0ea"/><path d="M64 44c-11.047 0-20 8.953-20 20s8.953 20 20 20 20-8.953 20-20-8.953-20-20-20zm-8 10a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm-16 8a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm-16 8a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm8 0a1.999 1.999 0 110 4 1.999 1.999 0 110-4zm0 0" fill="#3584e4"/><use xlink:href="#k" mask="url(#l)"/></svg> \ No newline at end of file
diff --git a/data/icons/hicolor/scalable/org.gnome.Software.svg b/data/icons/hicolor/scalable/org.gnome.Software.svg
new file mode 100644
index 0000000..be1b858
--- /dev/null
+++ b/data/icons/hicolor/scalable/org.gnome.Software.svg
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ viewBox="0 0 128 128"
+ style="display:inline;enable-background:new"
+ version="1.0"
+ id="svg11300"
+ height="128"
+ width="128">
+ <title
+ id="title4162">Adwaita Icon Template</title>
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient1494">
+ <stop
+ id="stop1490"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ id="stop1492"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="20"
+ x2="280"
+ y1="172"
+ x1="280"
+ id="linearGradient1496"
+ xlink:href="#linearGradient1494" />
+ </defs>
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>GNOME Design Team</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ <dc:title>Adwaita Icon Template</dc:title>
+ <dc:subject>
+ <rdf:Bag />
+ </dc:subject>
+ <dc:date />
+ <dc:rights>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:publisher>
+ <dc:identifier />
+ <dc:relation />
+ <dc:language />
+ <dc:coverage />
+ <dc:description />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-172)"
+ style="display:inline"
+ id="layer1">
+ <g
+ style="display:inline"
+ id="layer9">
+ <rect
+ style="opacity:1;vector-effect:none;fill:#98c1f1;fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.6732283"
+ id="rect1127"
+ width="104"
+ height="44"
+ x="12"
+ y="244"
+ rx="8"
+ ry="8" />
+ <g
+ transform="rotate(-30,403.50258,307.81151)"
+ id="g1710" />
+ <rect
+ style="opacity:1;vector-effect:none;fill:#e7f0fc;fill-opacity:1;stroke:none;stroke-width:27.71278;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect1051"
+ width="104"
+ height="88"
+ x="12"
+ y="192" />
+ <g
+ id="g1292">
+ <circle
+ style="opacity:1;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path1047"
+ cx="50"
+ cy="201"
+ r="5" />
+ <circle
+ r="5"
+ cy="201"
+ cx="78"
+ id="circle1049"
+ style="opacity:1;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ id="rect1044"
+ d="m 50,200 v -8 c 0,-7.756 6.244,-14 14,-14 7.756,0 14,6.244 14,14 v 8"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#62a0ea;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="display:inline;opacity:1;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:0.0112982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 64,216 a 20,20.000002 0 0 0 -20,20 20,20.000002 0 0 0 20,20 20,20.000002 0 0 0 20,-20 20,20.000002 0 0 0 -20,-20 z m -8,10 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m 8,0 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m 8,0 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m -16,8 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m 8,0 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m 8,0 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m -16,8 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m 8,0 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z m 8,0 a 1.9999997,2 0 0 1 2,2 1.9999997,2 0 0 1 -2,2 1.9999997,2 0 0 1 -2,-2 1.9999997,2 0 0 1 2,-2 z"
+ id="path920" />
+ </g>
+ <g
+ style="fill:url(#linearGradient1496);fill-opacity:1"
+ id="g1480" />
+ </g>
+</svg>
diff --git a/data/icons/hicolor/scalable/software-installed-symbolic.svg b/data/icons/hicolor/scalable/software-installed-symbolic.svg
new file mode 100644
index 0000000..3ebb155
--- /dev/null
+++ b/data/icons/hicolor/scalable/software-installed-symbolic.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="svg36018"
+ inkscape:version="0.92pre1 r"
+ sodipodi:docname="software-installed-symbolic.svg">
+ <defs
+ id="defs36012" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="-2.1503288"
+ inkscape:cy="-3.6096175"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ showborder="false"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="1440"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid36020" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata36015">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-292.76665)">
+ <g
+ id="g833"
+ transform="translate(2.4999999e-8,292.76665)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1"
+ inkscape:connector-curvature="0"
+ id="path8"
+ d="M 6.6919998,13.645333 2.4493333,9.3239998 a 0.33333333,0.33333333 0 0 1 0,-0.4706667 L 3.8799999,7.4506665 a 0.33333333,0.33333333 0 0 1 0.472,0 L 6.6373331,9.7826664 14.717333,1.0746666 A 3.9746666,3.9746666 0 0 0 12,-4.9999999e-8 H 3.9999999 A 3.9999999,3.9999999 0 0 0 -4.9999999e-8,3.9999999 V 12 A 3.9999999,3.9999999 0 0 0 3.9999999,16 H 12 a 3.9999999,3.9999999 0 0 0 4,-4 V 3.9999999 C 16,3.8813332 15.97467,3.7706666 15.96533,3.6546666 Z"
+ class="a" />
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/hicolor/symbolic/org.gnome.Software-symbolic.svg b/data/icons/hicolor/symbolic/org.gnome.Software-symbolic.svg
new file mode 100644
index 0000000..4fb6f83
--- /dev/null
+++ b/data/icons/hicolor/symbolic/org.gnome.Software-symbolic.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg6685"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="New document 2">
+ <defs
+ id="defs6687" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="44.395604"
+ inkscape:cx="11.771938"
+ inkscape:cy="7.6200625"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:snap-nodes="false"
+ inkscape:snap-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1021"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid6693" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata6690">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 8,-3.8e-7 c -1.65335,0 -3,1.34665008 -3,3.00000008 l 0,1 -1.90625,0 C 2.48781,3.9999997 2,4.4878097 2,5.0937497 L 2,14.90625 C 2,15.51219 2.48781,16 3.09375,16 l 9.8125,0 C 13.51219,16 14,15.51219 14,14.90625 l 0,-9.8125003 c 0,-0.60594 -0.48781,-1.09375 -1.09375,-1.09375 l -1.90625,0 0,-1 C 11,1.3466497 9.65335,-3.8e-7 8,-3.8e-7 z m 0,1 c 1.11665,0 1.9999999,0.88335008 1.9999999,2.00000008 l 0,1 -3.9999999,0 0,-1 C 6,1.8833497 6.88335,0.99999962 8,0.99999962 z M 5.46875,4.9999997 c 0.28679,0 0.53125,0.22386 0.53125,0.5 0,0.27614 -0.24446,0.5 -0.53125,0.5 -0.28679,0 -0.5,-0.22386 -0.5,-0.5 0,-0.27614 0.21321,-0.5 0.5,-0.5 z m 5,0 c 0.28679,0 0.53125,0.22386 0.53125,0.5 0,0.27614 -0.24446,0.5 -0.53125,0.5 -0.28679,0 -0.5000001,-0.22386 -0.5000001,-0.5 0,-0.27614 0.2132101,-0.5 0.5000001,-0.5 z"
+ id="rect43509-3-4-3"
+ inkscape:label="gnome-software" />
+ </g>
+</svg>
diff --git a/data/icons/meson.build b/data/icons/meson.build
new file mode 100644
index 0000000..13ca713
--- /dev/null
+++ b/data/icons/meson.build
@@ -0,0 +1 @@
+subdir('hicolor')
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..0657388
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,27 @@
+subdir('appdata')
+subdir('icons')
+subdir('assets')
+
+compiled_schemas = gnome.compile_schemas()
+install_data('org.gnome.software.gschema.xml',
+ install_dir : 'share/glib-2.0/schemas')
+
+if get_option('external_appstream')
+ # replace @libexecdir@
+ conf_data = configuration_data()
+ conf_data.set('libexecdir', join_paths(get_option('prefix'),
+ get_option('libexecdir')))
+ out = configure_file(
+ input : 'org.gnome.software.external-appstream.policy.in.in',
+ output : 'org.gnome.software.external-appstream.policy.in',
+ install: false,
+ configuration : conf_data,
+ )
+ i18n.merge_file(
+ input : out,
+ output : 'org.gnome.software.external-appstream.policy',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'polkit-1', 'actions'),
+ )
+endif
diff --git a/data/org.gnome.software.external-appstream.policy.in.in b/data/org.gnome.software.external-appstream.policy.in.in
new file mode 100644
index 0000000..69af72a
--- /dev/null
+++ b/data/org.gnome.software.external-appstream.policy.in.in
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE policyconfig PUBLIC
+ "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
+<policyconfig>
+ <vendor>GNOME</vendor>
+ <vendor_url>https://www.gnome.org/</vendor_url>
+
+ <action id="org.gnome.software.install-appstream">
+ <description>Install an appstream file into a system location</description>
+ <message>Installing an appstream file into a system location</message>
+ <defaults>
+ <allow_any>yes</allow_any>
+ <allow_active>yes</allow_active>
+ <allow_inactive>no</allow_inactive>
+ </defaults>
+ <annotate key="org.freedesktop.policykit.exec.path">@libexecdir@/gnome-software-install-appstream</annotate>
+ </action>
+</policyconfig>
diff --git a/data/org.gnome.software.gschema.xml b/data/org.gnome.software.gschema.xml
new file mode 100644
index 0000000..7719268
--- /dev/null
+++ b/data/org.gnome.software.gschema.xml
@@ -0,0 +1,150 @@
+<schemalist>
+ <schema id="org.gnome.software" path="/org/gnome/software/" gettext-domain="gnome-software">
+ <key name="compatible-projects" type="as">
+ <default>['GNOME', 'KDE', 'XFCE']</default>
+ <summary>A list of compatible projects</summary>
+ <description>This is a list of compatible projects we should show such as GNOME, KDE and XFCE.</description>
+ </key>
+ <key name="allow-updates" type="b">
+ <default>true</default>
+ <summary>Whether to manage updates and upgrades in GNOME Software</summary>
+ <description>If disabled, GNOME Software will hide the updates panel, not perform any automatic updates actions or prompt for upgrades.</description>
+ </key>
+ <key name="download-updates" type="b">
+ <default>true</default>
+ <summary>Automatically download and install updates</summary>
+ <description>If enabled, GNOME Software automatically downloads software updates in the background, also installing ones that do not require a reboot.</description>
+ </key>
+ <key name="download-updates-notify" type="b">
+ <default>true</default>
+ <summary>Notify the user about software updated in the background</summary>
+ <description>If enabled, GNOME Software notifies the user about updates that happened whilst the user was idle.</description>
+ </key>
+ <key name="refresh-when-metered" type="b">
+ <default>false</default>
+ <summary>Whether to automatically refresh when on a metered connection</summary>
+ <description>If enabled, GNOME Software automatically refreshes in the background even when using a metered connection (eventually downloading some metadata, checking for updates, etc., which may incur in costs for the user).</description>
+ </key>
+ <key name="first-run" type="b">
+ <default>true</default>
+ <summary>Whether it’s the very first run of GNOME Software</summary>
+ </key>
+ <key name="show-ratings" type="b">
+ <default>false</default>
+ <summary>Show star ratings next to applications</summary>
+ </key>
+ <key name="filter-default-branch" type="b">
+ <default>true</default>
+ <summary>Filter applications based on the default branch set for the remote</summary>
+ </key>
+ <key name="prompt-for-nonfree" type="b">
+ <default>true</default>
+ <summary>Non-free applications show a warning dialog before install</summary>
+ <description>When non-free applications are installed a warning dialog can be shown. This controls if that dialog is suppressed.</description>
+ </key>
+ <key name="popular-overrides" type="as">
+ <default>[]</default>
+ <summary>A list of popular applications</summary>
+ <description>A list of applications to use, overriding the system defined ones.</description>
+ </key>
+ <key name="check-timestamp" type="x">
+ <default>0</default>
+ <summary>The last update check timestamp</summary>
+ </key>
+ <key name="upgrade-notification-timestamp" type="x">
+ <default>0</default>
+ <summary>The last upgrade notification timestamp</summary>
+ </key>
+ <key name="security-timestamp" type="x">
+ <default>0</default>
+ <summary>The timestamp of the first security update, cleared after update</summary>
+ </key>
+ <key name="install-timestamp" type="x">
+ <default>0</default>
+ <summary>The last update timestamp</summary>
+ </key>
+ <key name="online-updates-timestamp" type="x">
+ <default>0</default>
+ <summary>The last timestamp when the system was online and got any updates</summary>
+ </key>
+ <key name="screenshot-cache-age-maximum" type="u">
+ <default>2592000</default>
+ <summary>The age in seconds to verify the upstream screenshot is still valid</summary>
+ <description>
+ Choosing a larger value will mean less round-trips to the remote server
+ but updates to the screenshots may take longer to show to the user.
+ A value of 0 means to never check the server if the image already exists
+ in the cache.
+ </description>
+ </key>
+ <key name="review-server" type="s">
+ <default>'https://odrs.gnome.org/1.0/reviews/api'</default>
+ <summary>The server to use for application reviews</summary>
+ </key>
+ <key name="review-karma-required" type="i">
+ <default>0</default>
+ <summary>The minimum karma score for reviews</summary>
+ <description>Reviews with karma less than this number will not be shown.</description>
+ </key>
+ <key name="official-repos" type="as">
+ <default>[]</default>
+ <summary>A list of official repositories that should not be considered 3rd party</summary>
+ </key>
+ <key name="free-repos" type="as">
+ <default>[]</default>
+ <summary>A list of official repositories that should be considered free software</summary>
+ </key>
+ <key name="free-repos-url" type="s">
+ <default>''</default>
+ <summary>The licence URL to use when an application should be considered free software</summary>
+ </key>
+ <key name="install-bundles-system-wide" type="b">
+ <default>true</default>
+ <summary>Install bundled applications for all users on the system where possible</summary>
+ </key>
+ <key name="enable-repos-dialog" type="b">
+ <default>true</default>
+ <summary>Allow access to the Software Repositories dialog</summary>
+ </key>
+ <key name="show-upgrade-prerelease" type="b">
+ <default>false</default>
+ <summary>Offer upgrades for pre-releases</summary>
+ </key>
+ <key name="show-nonfree-ui" type="b">
+ <default>true</default>
+ <summary>Show some UI elements informing the user that an app is non-free</summary>
+ </key>
+ <key name="show-nonfree-prompt" type="b">
+ <default>true</default>
+ <summary>Show the prompt to install nonfree software repositories</summary>
+ </key>
+ <key name="installed-page-show-size" type="b">
+ <default>true</default>
+ <summary>Show the installed size for apps in the list of installed applications</summary>
+ </key>
+ <key name="nonfree-software-uri" type="s">
+ <!-- Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''. -->
+ <default l10n="messages">'https://en.wikipedia.org/wiki/Proprietary_software'</default>
+ <summary>The URI that explains nonfree and proprietary software</summary>
+ </key>
+ <key name="external-appstream-urls" type="as">
+ <default>[]</default>
+ <summary>A list of URLs pointing to appstream files that will be downloaded into an app-info folder</summary>
+ </key>
+ <key name="external-appstream-system-wide" type="b">
+ <default>false</default>
+ <summary>Install the AppStream files to a system-wide location for all users</summary>
+ </key>
+ <key name="enable-shell-extensions-repo" type="b">
+ <default>true</default>
+ <summary>Enable GNOME Shell extensions repository</summary>
+ </key>
+ <child name="auth" schema="org.gnome.software.auth"/>
+ </schema>
+ <schema id="org.gnome.software.auth" gettext-domain="gnome-software">
+ <key name="account-id" type="s">
+ <default>''</default>
+ <summary>A string storing the gnome-online-account id used to login</summary>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/tests/os-release b/data/tests/os-release
new file mode 100644
index 0000000..79df6af
--- /dev/null
+++ b/data/tests/os-release
@@ -0,0 +1,16 @@
+NAME=Fedora
+VERSION="25 (Workstation Edition)"
+ID=fedora
+VERSION_ID=25
+PRETTY_NAME="Fedora 25 (Workstation Edition)"
+ANSI_COLOR="0;34"
+CPE_NAME="cpe:/o:fedoraproject:fedora:25"
+HOME_URL="https://fedoraproject.org/"
+BUG_REPORT_URL="https://bugzilla.redhat.com/"
+REDHAT_BUGZILLA_PRODUCT="Fedora"
+REDHAT_BUGZILLA_PRODUCT_VERSION=25
+REDHAT_SUPPORT_PRODUCT="Fedora"
+REDHAT_SUPPORT_PRODUCT_VERSION=25
+PRIVACY_POLICY_URL=https://fedoraproject.org/wiki/Legal:PrivacyPolicy
+VARIANT="Workstation Edition"
+VARIANT_ID=workstation
diff --git a/doc/api/gnome-software-docs.xml b/doc/api/gnome-software-docs.xml
new file mode 100644
index 0000000..fb43ff2
--- /dev/null
+++ b/doc/api/gnome-software-docs.xml
@@ -0,0 +1,617 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+]>
+<book id="index">
+ <bookinfo>
+ <title>GNOME Software Reference Manual</title>
+ </bookinfo>
+
+ <reference id="tutorial">
+ <title>GNOME Software Plugin Tutorial</title>
+ <partintro>
+ <para>
+ GNOME Software is a software installer designed to be easy to use.
+ </para>
+
+ <section>
+ <title>Introduction</title>
+ <para>
+ At the heart of gnome software the application is just a plugin loader
+ that has some GTK UI that gets created for various result types.
+ The idea is we have lots of small plugins that each do one thing and
+ then pass the result onto the other plugins.
+ These are ordered by dependencies against each other at runtime and
+ each one can do things like editing an existing application or adding a
+ new application to the result set.
+ This is how we can add support for things like firmware updating,
+ Steam, GNOME Shell web-apps and flatpak bundles without making big
+ changes all over the source tree.
+ </para>
+ <para>
+ There are broadly 3 types of plugin methods:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="strong">Actions</emphasis>: Do something on a specific GsApp</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong">Refine</emphasis>: Get details about a specific GsApp</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong">Adopt</emphasis>: Can this plugin handle this GsApp</para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ In general, building things out-of-tree isn't something that I think is
+ a very good idea; the API and ABI inside gnome-software is still
+ changing and there's a huge benefit to getting plugins upstream where
+ they can undergo review and be ported as the API adapts.
+ I'm also super keen to provide configurability in GSettings for doing
+ obviously-useful things, the sort of thing Fleet Commander can set for
+ groups of users.
+ </para>
+ <para>
+ However, now we're shipping gnome-software in enterprise-class distros
+ we might want to allow customers to ship their own plugins to make
+ various business-specific changes that don't make sense upstream.
+ This might involve querying a custom LDAP server and changing the
+ suggested apps to reflect what groups the user is in, or might involve
+ showing a whole new class of applications that does not conform to the
+ Linux-specific <emphasis>application is a desktop-file</emphasis> paradigm.
+ This is where a plugin makes sense.
+ </para>
+
+ <para>
+ The plugin only needs to define the vfuncs that are required, and the
+ plugin name is taken automatically from the suffix of the
+ <filename>.so</filename> file.
+ </para>
+ <example>
+ <title>A sample plugin</title>
+ <programlisting>
+/*
+ * Copyright (C) 2016 Richard Hughes
+ */
+
+#include &lt;gnome-software.h&gt;
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "appstream");
+}
+
+gboolean
+gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint i;
+ for (i = 0; values[i] != NULL; i++) {
+ if (g_strcmp0 (values[i], "fotoshop") == 0) {
+ g_autoptr(GsApp) app = gs_app_new ("gimp.desktop");
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ }
+ }
+ return TRUE;
+}
+ </programlisting>
+ </example>
+
+ <para>
+ We have to define when our plugin is run in reference to other plugins,
+ in this case, making sure we run before <code>appstream</code>.
+ As we're such a simple plugin we're relying on another plugin to run
+ after us to actually make the GsApp <emphasis>complete</emphasis>,
+ i.e. loading icons and setting a localised long description.
+ </para>
+ <para>
+ In this example we want to show GIMP as a result (from any provider,
+ e.g. flatpak or a distro package) when the user searches exactly for
+ <code>fotoshop</code>.
+ </para>
+ <para>
+ We can then build and install the plugin using:
+ </para>
+ <informalexample>
+ <programlisting>
+gcc -shared -o libgs_plugin_example.so gs-plugin-example.c -fPIC \
+ `pkg-config --libs --cflags gnome-software` \
+ -DI_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE &amp;&amp;
+ sudo cp libgs_plugin_example.so `pkg-config gnome-software --variable=plugindir`
+ </programlisting>
+ </informalexample>
+
+ <mediaobject id="gs-example-search">
+ <imageobject>
+ <imagedata format="PNG" fileref="gs-example-search.png" align="center"/>
+ </imageobject>
+ </mediaobject>
+
+ </section>
+
+ <section>
+ <title>Distribution Specific Functionality</title>
+ <para>
+ Some plugins should only run on specific distributions, for instance
+ the <code>fedora-pkgdb-collections</code> plugin should only be used on
+ Fedora systems.
+ This can be achieved with a simple runtime check using the helper
+ <code>gs_plugin_check_distro_id()</code> method or the <code>GsOsRelease</code>
+ object where more complicated rules are required.
+ </para>
+ <example>
+ <title>Self disabling on other distributions</title>
+ <programlisting>
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ if (!gs_plugin_check_distro_id (plugin, "ubuntu")) {
+ gs_plugin_set_enabled (plugin, FALSE);
+ return;
+ }
+ /* allocate private data etc. */
+}
+ </programlisting>
+ </example>
+
+ </section>
+
+ <section>
+ <title>Custom Applications in the Installed List</title>
+ <para>
+ Next is returning custom applications in the installed list.
+ The use case here is a proprietary software distribution method that
+ installs custom files into your home directory, but you can use your
+ imagination for how this could be useful.
+ The example here is all hardcoded, and a true plugin would have to
+ derive the details about the GsApp, for example reading in an XML
+ file or YAML config file somewhere.
+ </para>
+ <example>
+ <title>Example showing a custom installed application</title>
+ <programlisting>
+#include &lt;gnome-software.h&gt;
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "icons");
+}
+
+gboolean
+gs_plugin_add_installed (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *fn = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(AsIcon) icon = NULL;
+
+ /* check if the app exists */
+ fn = g_build_filename (g_get_home_dir (), "chiron", NULL);
+ if (!g_file_test (fn, G_FILE_TEST_EXISTS))
+ return TRUE;
+
+ /* the trigger exists, so create a fake app */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_management_plugin (app, "example");
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Chiron");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "A teaching application");
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL,
+ "Chiron is the name of an application.\n\n"
+ "It can be used to demo some of our features");
+
+ /* these are all optional, but make details page looks better */
+ gs_app_set_version (app, "1.2.3");
+ gs_app_set_size_installed (app, 2 * 1024 * 1024);
+ gs_app_set_size_download (app, 3 * 1024 * 1024);
+ gs_app_set_origin_hostname (app, "http://www.teaching-example.org/");
+ gs_app_add_category (app, "Game");
+ gs_app_add_category (app, "ActionGame");
+ gs_app_add_kudo (app, GS_APP_KUDO_INSTALLS_USER_DOCS);
+ gs_app_set_license (app, GS_APP_QUALITY_NORMAL, "GPL-2.0+ and LGPL-2.1+");
+
+ /* create a stock icon which will be loaded by the 'icons' plugin */
+ icon = as_icon_new ();
+ as_icon_set_kind (icon, AS_ICON_KIND_STOCK);
+ as_icon_set_name (icon, "input-gaming");
+ gs_app_add_icon (app, icon);
+
+ /* return new app */
+ gs_app_list_add (list, app);
+
+ return TRUE;
+}
+ </programlisting>
+ </example>
+ <para>
+ This shows a lot of the plugin architecture in action. Some notable points:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Setting the management plugin means we can check for this string
+ when working out if we can handle the install or remove action.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Most applications want a kind of <code>AS_APP_KIND_DESKTOP</code>
+ to be visible as an application.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The origin is where the application originated from -- usually
+ this will be something like <emphasis>Fedora Updates</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The <code>GS_APP_KUDO_INSTALLS_USER_DOCS</code> means we get the
+ blue "Documentation" award in the details page; there are many
+ kudos to award to deserving apps.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Setting the license means we don't get the non-free warning --
+ removing the 3rd party warning can be done using
+ <code>GS_APP_QUIRK_PROVENANCE</code>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The <code>icons</code> plugin will take the stock icon and convert
+ it to a pixbuf of the correct size.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ To show this fake application just compile and install the plugin,
+ <code>touch ~/chiron</code> and then restart gnome-software.
+ To avoid restarting <filename>gnome-software</filename> each time a
+ proper plugin would create a <code>GFileMonitor</code> object to
+ monitor files.
+ </para>
+
+ <mediaobject id="gs-example-installed">
+ <imageobject>
+ <imagedata format="PNG" fileref="gs-example-installed.png" align="center"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>
+ By filling in the optional details (which can also be filled in using
+ <code>gs_plugin_refine()</code> you can also make the details
+ page a much more exciting place.
+ Adding a set of screenshots is left as an exercise to the reader.
+ </para>
+
+ <mediaobject id="gs-example-details">
+ <imageobject>
+ <imagedata format="PNG" fileref="gs-example-details.png" align="center"/>
+ </imageobject>
+ </mediaobject>
+
+ </section>
+
+ <section>
+ <title>Downloading Metadata and Updates</title>
+
+ <para>
+ The plugin loader supports a <code>gs_plugin_refresh()</code> vfunc that
+ is called in various situations.
+ To ensure plugins have the minimum required metadata on disk it is
+ called at startup, but with a cache age of <emphasis>infinite</emphasis>.
+ This basically means the plugin must just ensure that
+ <emphasis role="strong">any</emphasis> data exists no matter what the age.
+ </para>
+ <para>
+ Usually once per hour, we'll call <code>gs_plugin_refresh()</code> but
+ with the correct cache age set (typically a little over 24 hours) which
+ allows the plugin to download new metadata or payload files from remote
+ servers.
+ The <code>gs_utils_get_file_age()</code> utility helper can help you
+ work out the cache age of file, or the plugin can handle it some other
+ way.
+ </para>
+ <para>
+ For the Flatpak plugin we just make sure the AppStream metadata exists
+ at startup, which allows us to show search results in the UI.
+ If the metadata did not exist (e.g. if the user had added a remote
+ using the command-line without gnome-software running) then we would
+ show a loading screen with a progress bar before showing the main UI.
+ On fast connections we should only show that for a couple of seconds,
+ but it's a good idea to try any avoid that if at all possible in the
+ plugin.
+ Once per day the <code>gs_plugin_get_updates()</code> method is called,
+ and then <code>gs_plugin_download_app()</code> may be called if the
+ user has configured automatic updates.
+ This is where the Flatpak plugin would download any ostree trees (but
+ not doing the deploy step) so that the applications can be updated live
+ in the details panel without having to wait for the download to complete.
+ In a similar way, the fwupd plugin downloads the tiny LVFS metadata with
+ <code>gs_plugin_refresh()</code> and then downloads the large firmware
+ files themselves when <code>gs_plugin_download_app()</code> or
+ <code>gs_plugin_download_app()</code> is called.
+ </para>
+ <para>
+ If the <code>@app</code> parameter is set for
+ <code>gs_plugin_download_file()</code> then the progress of the download
+ is automatically proxied to the UI elements associated with the
+ application, for instance the install button would show a progress bar
+ in the various different places in the UI.
+ For a refresh there's no relevant GsApp to use, so we'll leave it
+ <code>NULL</code> which means something is happening globally which the
+ UI can handle how it wants, for instance showing a loading page at startup.
+ </para>
+ <para>
+ Note, if the downloading fails it's okay to return <code>FALSE</code>;
+ the plugin loader continues to run all plugins and just logs an error
+ to the console. We'll be calling into <code>gs_plugin_refresh()</code>
+ again in only another hour, so there's no need to bother the user.
+ For actions like <code>gs_plugin_app_install</code> we also do the same
+ thing, but we also save the error on the GsApp itself so that the UI is
+ free to handle that how it wants, for instance showing a GtkDialog
+ window for example.
+ </para>
+ <example>
+ <title>Refresh example</title>
+ <programlisting>
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *metadata_fn = "/var/cache/example/metadata.xml";
+ const gchar *metadata_url = "http://www.example.com/new.xml";
+ g_autoptr(GFile) file = g_file_new_for_path (metadata_fn);
+
+ /* is the metadata missing or too old */
+ if (gs_utils_get_file_age (file) &gt; cache_age) {
+ if (!gs_plugin_download_file (plugin,
+ NULL,
+ metadata_url,
+ metadata_fn,
+ cancellable,
+ error)) {
+ /* it's okay to fail here */
+ return FALSE;
+ }
+ g_debug ("successfully downloaded new metadata");
+ }
+ return TRUE;
+}
+ </programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title>Adding Application Information Using Refine</title>
+
+ <para>
+ As previous examples have shown it's very easy to add a new
+ application to the search results, updates list or installed list.
+ Some plugins don't want to add more applications, but want to modify
+ existing applications to add more information depending on what is
+ required by the UI code.
+ The reason we don't just add everything at once is that for
+ search-as-you-type to work effectively we need to return results in
+ less than about 50ms and querying some data can take a long time.
+ For example, it might take a few hundred ms to work out the download
+ size for an application when a plugin has to also look at what
+ dependencies are already installed.
+ We only need this information once the user has clicked the search
+ results and when the user is in the details panel, so we can save a
+ ton of time not working out properties that are not useful.
+ </para>
+ <example>
+ <title>Refine example</title>
+ <programlisting>
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* not required */
+ if ((flags &amp; GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) == 0)
+ return TRUE;
+
+ for (guint i = 0; i &lt; gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+
+ /* already set */
+ if (gs_app_get_license (app) != NULL)
+ return TRUE;
+
+ /* FIXME, not just hardcoded! */
+ if (g_strcmp0 (gs_app_get_id (app, "chiron.desktop") == 0))
+ gs_app_set_license (app, "GPL-2.0 and LGPL-2.0+");
+ }
+
+ return TRUE;
+}
+ </programlisting>
+ </example>
+ <para>
+ This is a simple example, but shows what a plugin needs to do.
+ It first checks if the action is required, in this case
+ <code>GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE</code>.
+ This request is more common than you might expect as even the search
+ results shows a non-free label if the license is unspecified or
+ non-free.
+ It then checks if the license is already set, returning with success
+ if so.
+ If not, it checks the application ID and hardcodes a license; in the
+ real world this would be querying a database or parsing an additional
+ config file.
+ As mentioned before, if the license value is freely available without
+ any extra work then it's best just to set this at the same time as
+ when adding the app with <code>gs_app_list_add()</code>.
+ Think of refine as <emphasis>adding things that cost time to
+ calculate only when really required</emphasis>.
+ </para>
+ <para>
+ The UI in gnome-software is quite forgiving for missing data, hiding
+ sections or labels as required.
+ Some things are required however, and forgetting to assign an icon or
+ short description will get the application vetoed so that it's not
+ displayed at all.
+ Helpfully, running <code>gnome-software --verbose</code> on the
+ command line will tell you why an application isn't shown along with
+ any extra data.
+ </para>
+
+ </section>
+
+ <section>
+ <title>Adopting AppStream Applications</title>
+
+ <para>
+ There's a lot of flexibility in the gnome-software plugin structure;
+ a plugin can add custom applications and handle things like search and
+ icon loading in a totally custom way.
+ Most of the time you don't care about how search is implemented or how
+ icons are going to be loaded, and you can re-use a lot of the existing
+ code in the <code>appstream</code> plugin.
+ To do this you just save an AppStream-format XML file in either
+ <filename>/usr/share/app-info/xmls/</filename>,
+ <filename>/var/cache/app-info/xmls/</filename> or
+ <filename>~/.local/share/app-info/xmls/</filename>.
+ GNOME Software will immediately notice any new files, or changes to
+ existing files as it has set up the various inotify watches.
+ </para>
+ <para>
+ This allows plugins to care a lot less about how applications are
+ going to be shown.
+ For example, the <code>steam</code> plugin downloads and parses the
+ descriptions from a remote service during
+ <code>gs_plugin_refresh()</code>, and also finds the best icon types
+ and downloads them too.
+ Then it exports the data to an AppStream XML file, saving it to your
+ home directory.
+ This allows all the applications to be easily created (and then refined)
+ using something as simple as <code>gs_app_new("steam:foo.desktop")</code>.
+ All the search tokenisation and matching is done automatically,
+ so it makes the plugin much simpler and faster.
+ </para>
+ <para>
+ The only extra step the steam plugin needs to do is implement the
+ <code>gs_plugin_adopt_app()</code> function.
+ This is called when an application does not have a management plugin
+ set, and allows the plugin to <emphasis>claim</emphasis> the
+ application for itself so it can handle installation, removal and
+ updating.
+ </para>
+ <para>
+ Another good example is the <code>fwupd</code> that wants to handle
+ any firmware we've discovered in the AppStream XML.
+ This might be shipped by the vendor in a package using Satellite,
+ or downloaded from the LVFS. It wouldn't be kind to set a management
+ plugin explicitly in case XFCE or KDE want to handle this in a
+ different way. This adoption function in this case is trivial:
+ </para>
+
+ <informalexample>
+ <programlisting>
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_kind (app) == AS_APP_KIND_FIRMWARE)
+ gs_app_set_management_plugin (app, "fwupd");
+}
+ </programlisting>
+ </informalexample>
+ </section>
+
+ <section>
+ <title>Using The Plugin Cache</title>
+
+ <para>
+ GNOME Software used to provide a per-process plugin cache,
+ automatically de-duplicating applications and trying to be smarter
+ than the plugins themselves.
+ This involved merging applications created by different plugins and
+ really didn't work very well.
+ For versions 3.20 and later we moved to a per-plugin cache which
+ allows the plugin to control getting and adding applications to the
+ cache and invalidating it when it made sense.
+ This seems to work a lot better and is an order of magnitude less
+ complicated.
+ Plugins can trivially be ported to using the cache using something
+ like this:
+ </para>
+ <informalexample>
+ <programlisting>
+ /* create new object */
+ id = gs_plugin_flatpak_build_id (inst, xref);
+- app = gs_app_new (id);
++ app = gs_plugin_cache_lookup (plugin, id);
++ if (app == NULL) {
++ app = gs_app_new (id);
++ gs_plugin_cache_add (plugin, id, app);
++ }
+ </programlisting>
+ </informalexample>
+ <para>
+ Using the cache has two main benefits for plugins.
+ The first is that we avoid creating duplicate GsApp objects for the
+ same logical thing.
+ This means we can query the installed list, start installing an
+ application, then query it again before the install has finished.
+ The GsApp returned from the second <code>add_installed()</code>
+ request will be the same GObject, and thus all the signals connecting
+ up to the UI will still be correct.
+ This means we don't have to care about <emphasis>migrating</emphasis>
+ the UI widgets as the object changes and things like progress bars just
+ magically work.
+ </para>
+ <para>
+ The other benefit is more obvious.
+ If we know the application state from a previous request we don't have
+ to query a daemon or do another blocking library call to get it.
+ This does of course imply that the plugin is properly invalidating
+ the cache using <code>gs_plugin_cache_invalidate()</code> which it
+ should do whenever a change is detected.
+ Whether a plugin uses the cache for this reason is up to the plugin,
+ but if it does it is up to the plugin to make sure the cache doesn't
+ get out of sync.
+ </para>
+ </section>
+
+ </partintro>
+ </reference>
+
+ <reference id="api">
+ <partintro>
+ <para>
+ This documentation is auto-generated.
+ If you see any issues, please file bugs.
+ </para>
+ </partintro>
+ <title>GNOME Software Plugin API</title>
+ <xi:include href="xml/gs-app-list.xml"/>
+ <xi:include href="xml/gs-app.xml"/>
+ <xi:include href="xml/gs-category.xml"/>
+ <xi:include href="xml/gs-os-release.xml"/>
+ <xi:include href="xml/gs-plugin.xml"/>
+ <xi:include href="xml/gs-plugin-event.xml"/>
+ <xi:include href="xml/gs-plugin-vfuncs.xml"/>
+ <xi:include href="xml/gs-utils.xml"/>
+ </reference>
+
+</book>
diff --git a/doc/api/gnome-software.types b/doc/api/gnome-software.types
new file mode 100644
index 0000000..5f0a7b0
--- /dev/null
+++ b/doc/api/gnome-software.types
@@ -0,0 +1,6 @@
+gs_app_get_type
+gs_app_list_get_type
+gs_category_get_type
+gs_os_release_get_type
+gs_plugin_event_get_type
+gs_plugin_get_type
diff --git a/doc/api/gs-example-details.png b/doc/api/gs-example-details.png
new file mode 100644
index 0000000..88c29e4
--- /dev/null
+++ b/doc/api/gs-example-details.png
Binary files differ
diff --git a/doc/api/gs-example-installed.png b/doc/api/gs-example-installed.png
new file mode 100644
index 0000000..0cd424a
--- /dev/null
+++ b/doc/api/gs-example-installed.png
Binary files differ
diff --git a/doc/api/gs-example-search.png b/doc/api/gs-example-search.png
new file mode 100644
index 0000000..77611bd
--- /dev/null
+++ b/doc/api/gs-example-search.png
Binary files differ
diff --git a/doc/api/meson.build b/doc/api/meson.build
new file mode 100644
index 0000000..aa8f873
--- /dev/null
+++ b/doc/api/meson.build
@@ -0,0 +1,11 @@
+gnome.gtkdoc(
+ 'gnome-software',
+ src_dir : join_paths(meson.source_root(), 'lib'),
+ main_xml : 'gnome-software-docs.xml',
+ html_assets : [
+ 'gs-example-details.png',
+ 'gs-example-installed.png',
+ 'gs-example-search.png'
+ ],
+ install : true
+)
diff --git a/doc/design.svg b/doc/design.svg
new file mode 100644
index 0000000..4f9a181
--- /dev/null
+++ b/doc/design.svg
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="design.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.9899495"
+ inkscape:cx="290.74866"
+ inkscape:cy="1216.6706"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1200"
+ inkscape:window-height="1881"
+ inkscape:window-x="1600"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2985"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="opacity:0.97154475;fill:#c3cdee;fill-opacity:1;stroke:#000000;stroke-width:0.51179862;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5"
+ width="115.2915"
+ height="34.988201"
+ x="179.70259"
+ y="127.36808"
+ ry="1.8272164"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <rect
+ style="opacity:0.97154475;fill:#cef1d7;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5-5-5-3"
+ width="110"
+ height="210"
+ x="75"
+ y="127.36218"
+ ry="4.6491089"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <path
+ style="fill:#000000;fill-opacity:0.97695851;stroke:none"
+ d="m 295,145.69551 0,3.33334 65,0 0,3.33333 20,-5 -20,-5 0,3.33333 z"
+ id="path3757-0"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="240"
+ y="152.36218"
+ id="text3801-0"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8"
+ x="240"
+ y="152.36218"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">Plugins</tspan></text>
+ <rect
+ style="opacity:0.97154474999999996;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3900"
+ width="75"
+ height="75"
+ x="380"
+ y="92.362183"
+ ry="11.155499"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="130"
+ y="152.36218"
+ id="text3801-0-7"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-6"
+ x="130"
+ y="152.36218"
+ style="font-size:18px;text-align:center;text-anchor:middle;-inkscape-font-specification:Liberation Sans;font-family:Liberation Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">PackageKit</tspan></text>
+ <rect
+ style="opacity:0.97154475;fill:#cef1d7;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5-5-5"
+ width="110"
+ height="35"
+ x="75"
+ y="162.36218"
+ ry="0"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="130"
+ y="187.36218"
+ id="text3801-0-7-9"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-6-7"
+ x="130"
+ y="187.36218"
+ style="font-size:18px;text-align:center;text-anchor:middle;-inkscape-font-specification:Liberation Sans;font-family:Liberation Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">AppStream</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="130"
+ y="222.36218"
+ id="text3801-0-7-4"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-6-3"
+ x="130"
+ y="222.36218"
+ style="font-size:18px;text-align:center;text-anchor:middle;-inkscape-font-specification:Liberation Sans;font-family:Liberation Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">glick2</tspan></text>
+ <rect
+ style="opacity:0.97154475;fill:#cef1d7;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5-5-5-4"
+ width="110"
+ height="35"
+ x="75"
+ y="232.36218"
+ ry="0"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="130"
+ y="257.36218"
+ id="text3801-0-7-9-9"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-6-7-3"
+ x="130"
+ y="257.36218"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">epiphany</tspan></text>
+ <rect
+ style="opacity:0.97154475;fill:#cef1d7;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5-5-2"
+ width="110"
+ height="35"
+ x="75"
+ y="267.36218"
+ ry="0"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="130"
+ y="292.36218"
+ id="text3801-0-7-1"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-6-8"
+ x="130"
+ y="292.36218"
+ style="font-size:18px;text-align:center;text-anchor:middle;-inkscape-font-specification:Liberation Sans;font-family:Liberation Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">listaller</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="130"
+ y="327.36218"
+ id="text3801-0-7-9-7"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-6-7-2"
+ x="130"
+ y="327.36218"
+ style="font-size:18px;text-align:center;text-anchor:middle;font-weight:normal;-inkscape-font-specification:Liberation Sans;font-family:Liberation Sans;font-style:normal;font-stretch:normal;font-variant:normal">ostree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="190"
+ y="172.36218"
+ id="text3801-0-7-9-5"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ x="190"
+ y="172.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3913">list = Search(text)</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="186.11218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3951">list = AddInstalled()</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="199.86218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3917">list = AddUpdates()</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="213.61218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4121">list = AddPopular()</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="227.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3947">bool = AppInstall(app)</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="241.11218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3928">bool = AppUpdate(app)</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="254.86218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3930">bool = AppRemove(app)</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="268.61218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3934">bool = Refine(app)</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="282.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3941">bool = SetRating(app)</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="296.11218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3943">list = AddCategories()</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="309.86218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4050">:str name</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="323.61218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3044">:list deps</tspan><tspan
+ sodipodi:role="line"
+ x="190"
+ y="337.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3914">:bool enabled</tspan></text>
+ <rect
+ style="opacity:0.97154475;fill:#c3cdee;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5-6-0"
+ width="110"
+ height="35"
+ x="365"
+ y="197.36218"
+ ry="1.8278326"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <rect
+ style="opacity:0.97154475;fill:#c3cdee;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2987-5-6"
+ width="110"
+ height="35"
+ x="360"
+ y="202.36218"
+ ry="1.8278326"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="415"
+ y="225.36218"
+ id="text3801-0-3"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ id="tspan3803-8-7"
+ x="415"
+ y="225.36218"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:PakType Naqsh;-inkscape-font-specification:PakType Naqsh">Applications</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="360"
+ y="247.36218"
+ id="text3801-0-7-9-5-7"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957"><tspan
+ sodipodi:role="line"
+ x="360"
+ y="247.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4073">:str app-id (e.g. foo.desktop)</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="261.11218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4046">:ptr source (e.g. pkgname)</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="274.86218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4048">:str management_plugin</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="288.61218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4052">:str title (localized)</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="302.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4054">:str description (localized)</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="316.11218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4056">:str screenshots</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="329.86218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4058">:str icon_uri</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="343.61218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4093">:int rating</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="357.36218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan4064">:int state (e.g. installed)</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="371.11218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3037">:int app-kind (e.g. codec)</tspan><tspan
+ sodipodi:role="line"
+ x="360"
+ y="384.86218"
+ style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;font-family:Nimbus Mono L;-inkscape-font-specification:Nimbus Mono L"
+ id="tspan3959">:int install_date</tspan></text>
+ <path
+ style="fill:#000000;fill-opacity:0.97695851;stroke:none"
+ d="m 405,167.36218 -5,0 0.37902,15.83248 -3.33333,0 5,20 5,-20 -3.33333,0 z"
+ id="path3757-0-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc"
+ inkscape:export-filename="/home/hughsie/Code/gnome3/gnome-software/design.png"
+ inkscape:export-xdpi="120.03957"
+ inkscape:export-ydpi="120.03957" />
+ <image
+ y="96.362183"
+ x="385"
+ id="image3134"
+ xlink:href="file:///home/hughsie/Code/gnome3/gnome-software/data/icons/256x256/gnome-software.png"
+ height="66"
+ width="66" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3137"
+ style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Abyssinica SIL;font-style:normal;font-weight:normal;font-size:8px;line-height:125%;letter-spacing:0px;word-spacing:0px;-inkscape-font-specification:Abyssinica SIL;font-stretch:normal;font-variant:normal"><flowRegion
+ id="flowRegion3139"><rect
+ id="rect3141"
+ width="118.69292"
+ height="96.469566"
+ x="349.00769"
+ y="375.0549" /></flowRegion><flowPara
+ id="flowPara3143"></flowPara></flowRoot> </g>
+</svg>
diff --git a/doc/kudos.md b/doc/kudos.md
new file mode 100644
index 0000000..68a1d52
--- /dev/null
+++ b/doc/kudos.md
@@ -0,0 +1,73 @@
+Kudos used in Software
+======================
+
+As part of the AppStream generation process we explode various parts of the
+distro binary package and try to build metadata by merging various sources
+together, for example AppData, desktop files and icons.
+
+As part of this we also have access to the finished binary and libraries, and
+so can also run tools on them to get a metric of awesomeness. So far, the
+metrics of awesomeness (here-on known as "kudos") are:
+
+ * `HiDpiIcon` — installs a 128x128 or larger application icon
+ * `HighContrast` — uses hicontrast or scalable icons for visually impaired users
+ * `ModernToolkit` — uses a modern toolkit like Gtk-3 or QT-5
+ * `Notifications` — registers desktop notifications
+ * `SearchProvider` — provides a search provider for GNOME Shell or KDE Plasma
+ * `UserDocs` — provides user documentation
+
+These attempt to define how tightly the application is integrated with the
+platform, which is usually a pretty good metric of awesomeness. Of course,
+some applications like Blender are an island in terms of integration, but of
+course are awesome.
+
+There are some other "run-time" kudos used as well. These are not encoded by
+the builder as they require some user information or are too specific to
+GNOME Software. These include:
+
+ * `FeaturedRecommended` — One of the design team chose to feature this
+ * `HasKeywords` — there are keywords in the desktop file used for searching
+ * `HasScreenshots` — more than one screenshot is supplied
+ * `MyLanguage` — has a populated translation in my locale, or a locale fallback
+ * `PerfectScreenshots` — screenshots are perfectly sized, in 16:9 aspect
+ * `Popular` — lots of people have downloaded this (only available on Fedora)
+ * `RecentRelease` — there been an upstream release in the last year
+
+You can verify the kudos your application is getting by doing something like:
+
+ killall gnome-software
+ gnome-software --verbose
+
+and then navigating to the details for an application you'll see on the console:
+
+ id-kind: desktop
+ state: available
+ id: blender.desktop
+ kudo: recent-release
+ kudo: featured-recommended
+ kudo: has-screenshots
+ kudo: popular
+
+Manually Adding Kudos
+---------------------
+
+If the AppStream generator fails to detect a specific kudo then you can add them
+manually in the AppData file and they will be used in the AppStream metadata.
+To do this, just add something like:
+
+ <kudos>
+ <kudo>ModernToolkit</kudo>
+ <kudo>UserDocs</kudo>
+ </kudos>
+
+Although, please bear in mind any application that is found cheating, i.e.
+adding kudos artificially will have **all** the kudos manually removed
+with a blocklist rule in the AppStream builder.
+
+If you are a vendor, or a system distributor and just want to increase the
+number of kudos for your pet proprietary application that's essential to
+business function, a good kudo to manually add would be `FeaturedRecommended`,
+although, perhaps adding the desktop ID to the GSettings key
+`org.gnome.software.popular-overrides` would be a better idea.
+Adding application IDs to this key allows you to show any business-critical
+applications prominently in the GNOME Software application.
diff --git a/doc/meson.build b/doc/meson.build
new file mode 100644
index 0000000..1a1d9bf
--- /dev/null
+++ b/doc/meson.build
@@ -0,0 +1,3 @@
+if get_option('gtk_doc')
+ subdir('api')
+endif
diff --git a/doc/privacy-policy.html b/doc/privacy-policy.html
new file mode 100644
index 0000000..ad97cac
--- /dev/null
+++ b/doc/privacy-policy.html
@@ -0,0 +1,31 @@
+<html>
+<head>
+ <title>GNOME Software Privacy Policy</title>
+</head>
+<body>
+ <h1>Policy</h1>
+ <p>
+ GNOME Software can optionally use a ratings and reviews service offered by
+ your distribution.
+ If enabled, GNOME Software will notify a web service that a specific
+ application has been installed or removed.
+ This information about which software you use helps us provide other users
+ with more accurate recommendations and helps us to choose applications to
+ feature on the overview page.
+ </p>
+ <p>
+ When submitting ratings your IP address is sent along with the usage information.
+ This is exactly the same information submitted viewing this web page.
+ A one-way hash of this address is also stored in a database to prevent
+ duplicate entries being added by the same user, but this can not be used to
+ identify specific users or network addresses.
+ </p>
+ <p>
+ We will never share the list of applications or your IP address with third
+ parties other than the original distribution web-service used by GNOME Software.
+ </p>
+ <h1>History of Changes</h1>
+ <p>
+ Modified 2014-02-04 by Richard Hughes
+ </p>
+</html>
diff --git a/doc/update.sh b/doc/update.sh
new file mode 100755
index 0000000..5abf679
--- /dev/null
+++ b/doc/update.sh
@@ -0,0 +1 @@
+scp api/html/* hughsient@people.freedesktop.org:~/public_html/gnome-software
diff --git a/gnome-software.doap b/gnome-software.doap
new file mode 100644
index 0000000..92b4084
--- /dev/null
+++ b/gnome-software.doap
@@ -0,0 +1,38 @@
+<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:gnome="http://api.gnome.org/doap-extensions#"
+ xmlns="http://usefulinc.com/ns/doap#">
+
+ <name xml:lang="en">gnome-software</name>
+ <shortdesc xml:lang="en">GNOME Software Tools</shortdesc>
+ <category rdf:resource="http://api.gnome.org/doap-extensions#apps" />
+ <programming-language>C</programming-language>
+ <description xml:lang="en">
+ GNOME Software is for installing, removing and updating software.
+ </description>
+
+ <homepage rdf:resource="https://wiki.gnome.org/Apps/Software" />
+ <download-page rdf:resource="https://download.gnome.org/sources/gnome-software/" />
+ <bug-database rdf:resource="https://gitlab.gnome.org/GNOME/gnome-software/issues" />
+
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Richard Hughes</foaf:name>
+ <foaf:mbox rdf:resource="mailto:richard@hughsie.com" />
+ <foaf:homepage rdf:resource="http://www.hughsie.com/" />
+ <gnome:userid>rhughes</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Kalev Lember</foaf:name>
+ <foaf:mbox rdf:resource="mailto:kalevlember@gmail.com" />
+ <gnome:userid>klember</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+
+ <license rdf:resource="http://www.gnu.org/licenses/gpl-2.0.txt" />
+
+</Project>
diff --git a/lib/README.md b/lib/README.md
new file mode 100644
index 0000000..628c58e
--- /dev/null
+++ b/lib/README.md
@@ -0,0 +1,7 @@
+libgnomesoftware
+================
+
+This is a static library, and is not all API stable.
+
+Only the plugin headers installed into /usr/include/gnome-software should be
+considered API.
diff --git a/lib/gnome-software-private.h b/lib/gnome-software-private.h
new file mode 100644
index 0000000..4cff5c7
--- /dev/null
+++ b/lib/gnome-software-private.h
@@ -0,0 +1,23 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#ifndef I_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE
+#define I_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE
+#endif
+
+#include <gnome-software.h>
+
+#include <gs-app-list-private.h>
+#include <gs-app-private.h>
+#include <gs-category-private.h>
+#include <gs-os-release.h>
+#include <gs-plugin-loader.h>
+#include <gs-plugin-loader-sync.h>
+#include <gs-plugin-private.h>
diff --git a/lib/gnome-software.h b/lib/gnome-software.h
new file mode 100644
index 0000000..4ceeda1
--- /dev/null
+++ b/lib/gnome-software.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#ifndef I_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE
+#error You have to define I_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE
+#endif
+
+#include <gs-app.h>
+#include <gs-app-list.h>
+#include <gs-app-collation.h>
+#include <gs-autocleanups.h>
+#include <gs-category.h>
+#include <gs-metered.h>
+#include <gs-os-release.h>
+#include <gs-plugin.h>
+#include <gs-plugin-vfuncs.h>
+#include <gs-utils.h>
diff --git a/lib/gnome-software.pc.in b/lib/gnome-software.pc.in
new file mode 100644
index 0000000..cde7122
--- /dev/null
+++ b/lib/gnome-software.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+libdir=@libdir@
+includedir=@includedir@
+plugindir=@libdir@/gs-plugins-@GS_PLUGIN_API_VERSION@
+
+Name: gnome-software
+Description: GNOME Software is a software center for GNOME
+Version: @VERSION@
+Requires.private: gthread-2.0 atk
+Requires: gobject-2.0 gdk-3.0 appstream-glib libsoup-2.4 gio-unix-2.0
+Libs: -L${libdir}
+Cflags: -I${includedir}/gnome-software
diff --git a/lib/gs-app-collation.h b/lib/gs-app-collation.h
new file mode 100644
index 0000000..892c755
--- /dev/null
+++ b/lib/gs-app-collation.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-app-list.h"
+
+G_BEGIN_DECLS
+
+GsAppList *gs_app_get_related (GsApp *app);
+GsAppList *gs_app_get_addons (GsApp *app);
+GsAppList *gs_app_get_history (GsApp *app);
+
+G_END_DECLS
diff --git a/lib/gs-app-list-private.h b/lib/gs-app-list-private.h
new file mode 100644
index 0000000..ea92b13
--- /dev/null
+++ b/lib/gs-app-list-private.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-app-list.h"
+
+G_BEGIN_DECLS
+
+/**
+ * GsAppListFlags:
+ * @GS_APP_LIST_FLAG_NONE: No flags set
+ * @GS_APP_LIST_FLAG_IS_RANDOMIZED: List has been randomized
+ * @GS_APP_LIST_FLAG_IS_TRUNCATED: List has been truncated
+ * @GS_APP_LIST_FLAG_WATCH_APPS: Applications will be monitored
+ * @GS_APP_LIST_FLAG_WATCH_APPS_RELATED: Applications related apps will be monitored
+ * @GS_APP_LIST_FLAG_WATCH_APPS_ADDONS: Applications addon apps will be monitored
+ *
+ * Flags used to describe the list.
+ **/
+typedef enum {
+ GS_APP_LIST_FLAG_NONE = 0,
+ GS_APP_LIST_FLAG_IS_RANDOMIZED = 1 << 0,
+ GS_APP_LIST_FLAG_IS_TRUNCATED = 1 << 1,
+ GS_APP_LIST_FLAG_WATCH_APPS = 1 << 2,
+ GS_APP_LIST_FLAG_WATCH_APPS_RELATED = 1 << 3,
+ GS_APP_LIST_FLAG_WATCH_APPS_ADDONS = 1 << 4,
+ /*< private >*/
+ GS_APP_LIST_FLAG_LAST
+} GsAppListFlags;
+
+/**
+ * GsAppListFilterFlags:
+ * @GS_APP_LIST_FILTER_FLAG_NONE: No flags set
+ * @GS_APP_LIST_FILTER_FLAG_KEY_ID: Filter by ID
+ * @GS_APP_LIST_FILTER_FLAG_KEY_SOURCE: Filter by default source
+ * @GS_APP_LIST_FILTER_FLAG_KEY_VERSION: Filter by version
+ * @GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED: Prefer installed applications
+ * @GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES: Filter using the provides ID
+ *
+ * Flags to use when filtering. The priority of each #GsApp is used to choose
+ * which application object to keep.
+ **/
+typedef enum {
+ GS_APP_LIST_FILTER_FLAG_NONE = 0,
+ GS_APP_LIST_FILTER_FLAG_KEY_ID = 1 << 0,
+ GS_APP_LIST_FILTER_FLAG_KEY_SOURCE = 1 << 1,
+ GS_APP_LIST_FILTER_FLAG_KEY_VERSION = 1 << 2,
+ GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED= 1 << 3,
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES = 1 << 4,
+ /*< private >*/
+ GS_APP_LIST_FILTER_FLAG_LAST,
+ GS_APP_LIST_FILTER_FLAG_MASK = G_MAXUINT64
+} GsAppListFilterFlags;
+
+/* All the properties which use #GsAppListFilterFlags are guint64s. */
+G_STATIC_ASSERT (sizeof (GsAppListFilterFlags) == sizeof (guint64));
+
+GsAppList *gs_app_list_copy (GsAppList *list);
+guint gs_app_list_get_size_peak (GsAppList *list);
+void gs_app_list_filter_duplicates (GsAppList *list,
+ GsAppListFilterFlags flags);
+void gs_app_list_randomize (GsAppList *list);
+void gs_app_list_remove_all (GsAppList *list);
+void gs_app_list_truncate (GsAppList *list,
+ guint length);
+gboolean gs_app_list_has_flag (GsAppList *list,
+ GsAppListFlags flag);
+void gs_app_list_add_flag (GsAppList *list,
+ GsAppListFlags flag);
+AsAppState gs_app_list_get_state (GsAppList *list);
+guint gs_app_list_get_progress (GsAppList *list);
+
+G_END_DECLS
diff --git a/lib/gs-app-list.c b/lib/gs-app-list.c
new file mode 100644
index 0000000..f2f599b
--- /dev/null
+++ b/lib/gs-app-list.c
@@ -0,0 +1,963 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-app-list
+ * @title: GsAppList
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: An application list
+ *
+ * These functions provide a refcounted list of #GsApp objects.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gs-app-private.h"
+#include "gs-app-list-private.h"
+#include "gs-app-collation.h"
+
+struct _GsAppList
+{
+ GObject parent_instance;
+ GPtrArray *array;
+ GMutex mutex;
+ guint size_peak;
+ GsAppListFlags flags;
+ AsAppState state;
+ guint progress; /* 0–100 inclusive, or %GS_APP_PROGRESS_UNKNOWN */
+};
+
+G_DEFINE_TYPE (GsAppList, gs_app_list, G_TYPE_OBJECT)
+
+enum {
+ PROP_STATE = 1,
+ PROP_PROGRESS,
+ PROP_LAST
+};
+
+/**
+ * gs_app_list_get_state:
+ * @list: A #GsAppList
+ *
+ * Gets the state of the list.
+ *
+ * This method will only return a valid result if gs_app_list_add_flag() has
+ * been called with %GS_APP_LIST_FLAG_WATCH_APPS.
+ *
+ * Returns: the #AsAppState, e.g. %AS_APP_STATE_INSTALLED
+ *
+ * Since: 3.30
+ **/
+AsAppState
+gs_app_list_get_state (GsAppList *list)
+{
+ g_return_val_if_fail (GS_IS_APP_LIST (list), AS_APP_STATE_UNKNOWN);
+ return list->state;
+}
+
+/**
+ * gs_app_list_get_progress:
+ * @list: A #GsAppList
+ *
+ * Gets the average percentage completion of all apps in the list. If any of the
+ * apps in the list has progress %GS_APP_PROGRESS_UNKNOWN, or if the app list
+ * is empty, %GS_APP_PROGRESS_UNKNOWN will be returned.
+ *
+ * This method will only return a valid result if gs_app_list_add_flag() has
+ * been called with %GS_APP_LIST_FLAG_WATCH_APPS.
+ *
+ * Returns: the percentage completion (0–100 inclusive), or %GS_APP_PROGRESS_UNKNOWN for unknown
+ *
+ * Since: 3.30
+ **/
+guint
+gs_app_list_get_progress (GsAppList *list)
+{
+ g_return_val_if_fail (GS_IS_APP_LIST (list), GS_APP_PROGRESS_UNKNOWN);
+ return list->progress;
+}
+
+static void
+gs_app_list_add_watched_for_app (GsAppList *list, GPtrArray *apps, GsApp *app)
+{
+ if (list->flags & GS_APP_LIST_FLAG_WATCH_APPS)
+ g_ptr_array_add (apps, app);
+ if (list->flags & GS_APP_LIST_FLAG_WATCH_APPS_ADDONS) {
+ GsAppList *list2 = gs_app_get_addons (app);
+ for (guint i = 0; i < gs_app_list_length (list2); i++) {
+ GsApp *app2 = gs_app_list_index (list2, i);
+ g_ptr_array_add (apps, app2);
+ }
+ }
+ if (list->flags & GS_APP_LIST_FLAG_WATCH_APPS_RELATED) {
+ GsAppList *list2 = gs_app_get_related (app);
+ for (guint i = 0; i < gs_app_list_length (list2); i++) {
+ GsApp *app2 = gs_app_list_index (list2, i);
+ g_ptr_array_add (apps, app2);
+ }
+ }
+}
+
+static GPtrArray *
+gs_app_list_get_watched_for_app (GsAppList *list, GsApp *app)
+{
+ GPtrArray *apps = g_ptr_array_new ();
+ gs_app_list_add_watched_for_app (list, apps, app);
+ return apps;
+}
+
+static GPtrArray *
+gs_app_list_get_watched (GsAppList *list)
+{
+ GPtrArray *apps = g_ptr_array_new ();
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (list->array, i);
+ gs_app_list_add_watched_for_app (list, apps, app_tmp);
+ }
+ return apps;
+}
+
+static void
+gs_app_list_invalidate_progress (GsAppList *self)
+{
+ guint progress = 0;
+ g_autoptr(GPtrArray) apps = gs_app_list_get_watched (self);
+
+ /* find the average percentage complete of the list */
+ if (apps->len > 0) {
+ guint64 pc_cnt = 0;
+ gboolean unknown_seen = FALSE;
+
+ for (guint i = 0; i < apps->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (apps, i);
+ guint app_progress = gs_app_get_progress (app_tmp);
+
+ if (app_progress == GS_APP_PROGRESS_UNKNOWN) {
+ unknown_seen = TRUE;
+ break;
+ }
+ pc_cnt += gs_app_get_progress (app_tmp);
+ }
+
+ progress = (!unknown_seen) ? pc_cnt / apps->len : GS_APP_PROGRESS_UNKNOWN;
+ } else {
+ progress = GS_APP_PROGRESS_UNKNOWN;
+ }
+
+ if (self->progress != progress) {
+ self->progress = progress;
+ g_object_notify (G_OBJECT (self), "progress");
+ }
+}
+
+static void
+gs_app_list_invalidate_state (GsAppList *self)
+{
+ AsAppState state = AS_APP_STATE_UNKNOWN;
+ g_autoptr(GPtrArray) apps = gs_app_list_get_watched (self);
+
+ /* find any action state of the list */
+ for (guint i = 0; i < apps->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (apps, i);
+ AsAppState state_tmp = gs_app_get_state (app_tmp);
+ if (state_tmp == AS_APP_STATE_INSTALLING ||
+ state_tmp == AS_APP_STATE_REMOVING) {
+ state = state_tmp;
+ break;
+ }
+ }
+ if (self->state != state) {
+ self->state = state;
+ g_object_notify (G_OBJECT (self), "state");
+ }
+}
+
+static void
+gs_app_list_progress_notify_cb (GsApp *app, GParamSpec *pspec, GsAppList *self)
+{
+ gs_app_list_invalidate_progress (self);
+}
+
+static void
+gs_app_list_state_notify_cb (GsApp *app, GParamSpec *pspec, GsAppList *self)
+{
+ gs_app_list_invalidate_state (self);
+}
+
+static void
+gs_app_list_maybe_watch_app (GsAppList *list, GsApp *app)
+{
+ g_autoptr(GPtrArray) apps = gs_app_list_get_watched_for_app (list, app);
+ for (guint i = 0; i < apps->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (apps, i);
+ g_signal_connect_object (app_tmp, "notify::progress",
+ G_CALLBACK (gs_app_list_progress_notify_cb),
+ list, 0);
+ g_signal_connect_object (app_tmp, "notify::state",
+ G_CALLBACK (gs_app_list_state_notify_cb),
+ list, 0);
+ }
+}
+
+static void
+gs_app_list_maybe_unwatch_app (GsAppList *list, GsApp *app)
+{
+ g_autoptr(GPtrArray) apps = gs_app_list_get_watched_for_app (list, app);
+ for (guint i = 0; i < apps->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (apps, i);
+ g_signal_handlers_disconnect_by_data (app_tmp, list);
+ }
+}
+
+/**
+ * gs_app_list_get_size_peak:
+ * @list: A #GsAppList
+ *
+ * Returns the largest size the list has ever been.
+ *
+ * Returns: integer
+ *
+ * Since: 3.24
+ **/
+guint
+gs_app_list_get_size_peak (GsAppList *list)
+{
+ return list->size_peak;
+}
+
+static GsApp *
+gs_app_list_lookup_safe (GsAppList *list, const gchar *unique_id)
+{
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app = g_ptr_array_index (list->array, i);
+ if (as_utils_unique_id_equal (gs_app_get_unique_id (app), unique_id))
+ return app;
+ }
+ return NULL;
+}
+
+/**
+ * gs_app_list_lookup:
+ * @list: A #GsAppList
+ * @unique_id: A unique_id
+ *
+ * Finds the first matching application in the list using the usual wildcard
+ * rules allowed in unique_ids.
+ *
+ * Returns: (transfer none): a #GsApp, or %NULL if not found
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_app_list_lookup (GsAppList *list, const gchar *unique_id)
+{
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&list->mutex);
+ return gs_app_list_lookup_safe (list, unique_id);
+}
+
+/**
+ * gs_app_list_has_flag:
+ * @list: A #GsAppList
+ * @flag: A flag to test, e.g. %GS_APP_LIST_FLAG_IS_TRUNCATED
+ *
+ * Gets if a specific flag is set.
+ *
+ * Returns: %TRUE if the flag is set
+ *
+ * Since: 3.24
+ **/
+gboolean
+gs_app_list_has_flag (GsAppList *list, GsAppListFlags flag)
+{
+ return (list->flags & flag) > 0;
+}
+
+/**
+ * gs_app_list_add_flag:
+ * @list: A #GsAppList
+ * @flag: A flag to test, e.g. %GS_APP_LIST_FLAG_IS_TRUNCATED
+ *
+ * Gets if a specific flag is set.
+ *
+ * Returns: %TRUE if the flag is set
+ *
+ * Since: 3.30
+ **/
+void
+gs_app_list_add_flag (GsAppList *list, GsAppListFlags flag)
+{
+ if (list->flags & flag)
+ return;
+ list->flags |= flag;
+
+ /* turn this on for existing apps */
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app = g_ptr_array_index (list->array, i);
+ gs_app_list_maybe_watch_app (list, app);
+ }
+}
+
+static gboolean
+gs_app_list_check_for_duplicate (GsAppList *list, GsApp *app)
+{
+ GsApp *app_old;
+ const gchar *id;
+
+ /* adding a wildcard */
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD)) {
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (list->array, i);
+ if (!gs_app_has_quirk (app_tmp, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ /* not adding exactly the same wildcard */
+ if (g_strcmp0 (gs_app_get_unique_id (app_tmp),
+ gs_app_get_unique_id (app)) == 0)
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ /* does not exist */
+ id = gs_app_get_unique_id (app);
+ if (id == NULL) {
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app_tmp = g_ptr_array_index (list->array, i);
+ if (app_tmp == app)
+ return FALSE;
+ }
+ /* not much else we can do... */
+ return TRUE;
+ }
+
+ /* existing app is a wildcard */
+ app_old = gs_app_list_lookup_safe (list, id);
+ if (app_old == NULL)
+ return TRUE;
+ if (gs_app_has_quirk (app_old, GS_APP_QUIRK_IS_WILDCARD))
+ return TRUE;
+
+ /* already exists */
+ return FALSE;
+}
+
+typedef enum {
+ GS_APP_LIST_ADD_FLAG_NONE = 0,
+ GS_APP_LIST_ADD_FLAG_CHECK_FOR_DUPE = 1 << 0,
+ GS_APP_LIST_ADD_FLAG_LAST
+} GsAppListAddFlag;
+
+static void
+gs_app_list_add_safe (GsAppList *list, GsApp *app, GsAppListAddFlag flag)
+{
+ const gchar *id;
+
+ /* check for duplicate */
+ if ((flag & GS_APP_LIST_ADD_FLAG_CHECK_FOR_DUPE) > 0 &&
+ !gs_app_list_check_for_duplicate (list, app))
+ return;
+
+ /* if we're lazy-loading the ID then we can't use the ID hash */
+ id = gs_app_get_unique_id (app);
+ if (id == NULL) {
+ gs_app_list_maybe_watch_app (list, app);
+ g_ptr_array_add (list->array, g_object_ref (app));
+ return;
+ }
+
+ /* just use the ref */
+ gs_app_list_maybe_watch_app (list, app);
+ g_ptr_array_add (list->array, g_object_ref (app));
+
+ /* update the historical max */
+ if (list->array->len > list->size_peak)
+ list->size_peak = list->array->len;
+}
+
+/**
+ * gs_app_list_add:
+ * @list: A #GsAppList
+ * @app: A #GsApp
+ *
+ * If the application does not already exist in the list then it is added,
+ * incrementing the reference count.
+ * If the application already exists then a warning is printed to the console.
+ *
+ * Applications that have the application ID lazy-loaded will always be added
+ * to the list, and to clean these up the plugin loader will also call the
+ * gs_app_list_filter_duplicates() method when all plugins have run.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_add (GsAppList *list, GsApp *app)
+{
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&list->mutex);
+ gs_app_list_add_safe (list, app, GS_APP_LIST_ADD_FLAG_CHECK_FOR_DUPE);
+
+ /* recalculate global state */
+ gs_app_list_invalidate_state (list);
+ gs_app_list_invalidate_progress (list);
+}
+
+/**
+ * gs_app_list_remove:
+ * @list: A #GsAppList
+ * @app: A #GsApp
+ *
+ * Removes an application from the list. If the application does not exist the
+ * request is ignored.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_remove (GsAppList *list, GsApp *app)
+{
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&list->mutex);
+ g_ptr_array_remove (list->array, app);
+ gs_app_list_maybe_unwatch_app (list, app);
+
+ /* recalculate global state */
+ gs_app_list_invalidate_state (list);
+ gs_app_list_invalidate_progress (list);
+}
+
+/**
+ * gs_app_list_add_list:
+ * @list: A #GsAppList
+ * @donor: Another #GsAppList
+ *
+ * Adds all the applications in @donor to @list.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_add_list (GsAppList *list, GsAppList *donor)
+{
+ guint i;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ g_return_if_fail (GS_IS_APP_LIST (donor));
+ g_return_if_fail (list != donor);
+
+ locker = g_mutex_locker_new (&list->mutex);
+
+ /* add each app */
+ for (i = 0; i < donor->array->len; i++) {
+ GsApp *app = gs_app_list_index (donor, i);
+ gs_app_list_add_safe (list, app, GS_APP_LIST_ADD_FLAG_CHECK_FOR_DUPE);
+ }
+
+ /* recalculate global state */
+ gs_app_list_invalidate_state (list);
+ gs_app_list_invalidate_progress (list);
+}
+
+/**
+ * gs_app_list_index:
+ * @list: A #GsAppList
+ * @idx: An index into the list
+ *
+ * Gets an application at a specific position in the list.
+ *
+ * Returns: (transfer none): a #GsApp, or %NULL if invalid
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_app_list_index (GsAppList *list, guint idx)
+{
+ return GS_APP (g_ptr_array_index (list->array, idx));
+}
+
+/**
+ * gs_app_list_length:
+ * @list: A #GsAppList
+ *
+ * Gets the length of the application list.
+ *
+ * Returns: Integer
+ *
+ * Since: 3.22
+ **/
+guint
+gs_app_list_length (GsAppList *list)
+{
+ g_return_val_if_fail (GS_IS_APP_LIST (list), 0);
+ return list->array->len;
+}
+
+static void
+gs_app_list_remove_all_safe (GsAppList *list)
+{
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app = g_ptr_array_index (list->array, i);
+ gs_app_list_maybe_unwatch_app (list, app);
+ }
+ g_ptr_array_set_size (list->array, 0);
+ gs_app_list_invalidate_state (list);
+ gs_app_list_invalidate_progress (list);
+}
+
+/**
+ * gs_app_list_remove_all:
+ * @list: A #GsAppList
+ *
+ * Removes all applications from the list.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_remove_all (GsAppList *list)
+{
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ locker = g_mutex_locker_new (&list->mutex);
+ gs_app_list_remove_all_safe (list);
+}
+
+/**
+ * gs_app_list_filter:
+ * @list: A #GsAppList
+ * @func: A #GsAppListFilterFunc
+ * @user_data: the user pointer to pass to @func
+ *
+ * If func() returns TRUE for the GsApp, then the app is kept.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_filter (GsAppList *list, GsAppListFilterFunc func, gpointer user_data)
+{
+ guint i;
+ GsApp *app;
+ g_autoptr(GsAppList) old = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ g_return_if_fail (func != NULL);
+
+ locker = g_mutex_locker_new (&list->mutex);
+
+ /* deep copy to a temp list and clear the current one */
+ old = gs_app_list_copy (list);
+ gs_app_list_remove_all_safe (list);
+
+ /* see if any of the apps need filtering */
+ for (i = 0; i < old->array->len; i++) {
+ app = gs_app_list_index (old, i);
+ if (func (app, user_data))
+ gs_app_list_add_safe (list, app, GS_APP_LIST_ADD_FLAG_NONE);
+ }
+}
+
+typedef struct {
+ GsAppListSortFunc func;
+ gpointer user_data;
+} GsAppListSortHelper;
+
+static gint
+gs_app_list_sort_cb (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+ GsApp *app1 = GS_APP (*(GsApp **) a);
+ GsApp *app2 = GS_APP (*(GsApp **) b);
+ GsAppListSortHelper *helper = (GsAppListSortHelper *) user_data;
+ return helper->func (app1, app2, user_data);
+}
+
+/**
+ * gs_app_list_sort:
+ * @list: A #GsAppList
+ * @func: A #GCompareFunc
+ * @user_data: user data to pass to @func
+ *
+ * Sorts the application list.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_sort (GsAppList *list, GsAppListSortFunc func, gpointer user_data)
+{
+ g_autoptr(GMutexLocker) locker = NULL;
+ GsAppListSortHelper helper;
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ locker = g_mutex_locker_new (&list->mutex);
+ helper.func = func;
+ helper.user_data = user_data;
+ g_ptr_array_sort_with_data (list->array, gs_app_list_sort_cb, &helper);
+}
+
+/**
+ * gs_app_list_truncate:
+ * @list: A #GsAppList
+ * @length: the new length
+ *
+ * Truncates the application list. It is an error if @length is larger than the
+ * size of the list.
+ *
+ * Since: 3.24
+ **/
+void
+gs_app_list_truncate (GsAppList *list, guint length)
+{
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP_LIST (list));
+ g_return_if_fail (length <= list->array->len);
+
+ /* mark this list as unworthy */
+ list->flags |= GS_APP_LIST_FLAG_IS_TRUNCATED;
+
+ /* everything */
+ if (length == 0) {
+ gs_app_list_remove_all (list);
+ return;
+ }
+
+ /* remove the apps in the positions larger than the length */
+ locker = g_mutex_locker_new (&list->mutex);
+ g_ptr_array_set_size (list->array, length);
+}
+
+static gint
+gs_app_list_randomize_cb (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+ GsApp *app1 = GS_APP (*(GsApp **) a);
+ GsApp *app2 = GS_APP (*(GsApp **) b);
+ const gchar *k1;
+ const gchar *k2;
+ g_autofree gchar *key = NULL;
+
+ key = g_strdup_printf ("Plugin::sort-key[%p]", user_data);
+ k1 = gs_app_get_metadata_item (app1, key);
+ k2 = gs_app_get_metadata_item (app2, key);
+ return g_strcmp0 (k1, k2);
+}
+
+/**
+ * gs_app_list_randomize:
+ * @list: A #GsAppList
+ *
+ * Randomize the order of the list, but don't change the order until
+ * the next day.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_randomize (GsAppList *list)
+{
+ guint i;
+ GRand *rand;
+ GsApp *app;
+ gchar sort_key[] = { '\0', '\0', '\0', '\0' };
+ g_autoptr(GDateTime) date = NULL;
+ g_autofree gchar *key = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP_LIST (list));
+
+ locker = g_mutex_locker_new (&list->mutex);
+
+ /* mark this list as random */
+ list->flags |= GS_APP_LIST_FLAG_IS_RANDOMIZED;
+
+ key = g_strdup_printf ("Plugin::sort-key[%p]", list);
+ rand = g_rand_new ();
+ date = g_date_time_new_now_utc ();
+ g_rand_set_seed (rand, (guint32) g_date_time_get_day_of_year (date));
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ sort_key[0] = (gchar) g_rand_int_range (rand, (gint32) 'A', (gint32) 'Z');
+ sort_key[1] = (gchar) g_rand_int_range (rand, (gint32) 'A', (gint32) 'Z');
+ sort_key[2] = (gchar) g_rand_int_range (rand, (gint32) 'A', (gint32) 'Z');
+ gs_app_set_metadata (app, key, sort_key);
+ }
+ g_ptr_array_sort_with_data (list->array, gs_app_list_randomize_cb, list);
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ gs_app_set_metadata (app, key, NULL);
+ }
+ g_rand_free (rand);
+}
+
+static gboolean
+gs_app_list_filter_app_is_better (GsApp *app, GsApp *found, GsAppListFilterFlags flags)
+{
+ /* optional 1st layer sort */
+ if ((flags & GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED) > 0) {
+ if (gs_app_is_installed (app) && !gs_app_is_installed (found))
+ return TRUE;
+ if (!gs_app_is_installed (app) && gs_app_is_installed (found))
+ return FALSE;
+ }
+
+ /* 2nd layer, priority and bundle kind */
+ if (gs_app_compare_priority (app, found) < 0)
+ return TRUE;
+
+ /* assume is worse */
+ return FALSE;
+}
+
+static GPtrArray *
+gs_app_list_filter_app_get_keys (GsApp *app, GsAppListFilterFlags flags)
+{
+ GPtrArray *keys = g_ptr_array_new_with_free_func (g_free);
+ g_autoptr(GString) key = NULL;
+
+ /* just use the unique ID */
+ if (flags == GS_APP_LIST_FILTER_FLAG_NONE) {
+ if (gs_app_get_unique_id (app) != NULL)
+ g_ptr_array_add (keys, g_strdup (gs_app_get_unique_id (app)));
+ return keys;
+ }
+
+ /* use the ID and any provides */
+ if (flags & GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES) {
+ GPtrArray *provides = gs_app_get_provides (app);
+ g_ptr_array_add (keys, g_strdup (gs_app_get_id (app)));
+ for (guint i = 0; i < provides->len; i++) {
+ AsProvide *prov = g_ptr_array_index (provides, i);
+ if (as_provide_get_kind (prov) != AS_PROVIDE_KIND_ID)
+ continue;
+ g_ptr_array_add (keys, g_strdup (as_provide_get_value (prov)));
+ }
+ return keys;
+ }
+
+ /* specific compound type */
+ key = g_string_new (NULL);
+ if (flags & GS_APP_LIST_FILTER_FLAG_KEY_ID) {
+ const gchar *tmp = gs_app_get_id (app);
+ if (tmp != NULL)
+ g_string_append (key, gs_app_get_id (app));
+ }
+ if (flags & GS_APP_LIST_FILTER_FLAG_KEY_SOURCE) {
+ const gchar *tmp = gs_app_get_source_default (app);
+ if (tmp != NULL)
+ g_string_append_printf (key, ":%s", tmp);
+ }
+ if (flags & GS_APP_LIST_FILTER_FLAG_KEY_VERSION) {
+ const gchar *tmp = gs_app_get_version (app);
+ if (tmp != NULL)
+ g_string_append_printf (key, ":%s", tmp);
+ }
+ if (key->len == 0)
+ return keys;
+ g_ptr_array_add (keys, g_string_free (g_steal_pointer (&key), FALSE));
+ return keys;
+}
+
+/**
+ * gs_app_list_filter_duplicates:
+ * @list: A #GsAppList
+ * @flags: a #GsAppListFilterFlags, e.g. GS_APP_LIST_FILTER_KEY_ID
+ *
+ * Filter any duplicate applications from the list.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_list_filter_duplicates (GsAppList *list, GsAppListFilterFlags flags)
+{
+ g_autoptr(GHashTable) hash = NULL;
+ g_autoptr(GHashTable) kept_apps = NULL;
+ g_autoptr(GsAppList) old = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP_LIST (list));
+
+ locker = g_mutex_locker_new (&list->mutex);
+
+ /* a hash table to hold apps with unique app ids */
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ /* a hash table containing apps we want to keep */
+ kept_apps = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+ for (guint i = 0; i < list->array->len; i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsApp *found = NULL;
+ g_autoptr(GPtrArray) keys = NULL;
+
+ /* get all the keys used to identify this app */
+ keys = gs_app_list_filter_app_get_keys (app, flags);
+ for (guint j = 0; j < keys->len; j++) {
+ const gchar *key = g_ptr_array_index (keys, j);
+ found = g_hash_table_lookup (hash, key);
+ if (found != NULL)
+ break;
+ }
+
+ /* new app */
+ if (found == NULL) {
+ for (guint j = 0; j < keys->len; j++) {
+ const gchar *key = g_ptr_array_index (keys, j);
+ g_hash_table_insert (hash, g_strdup (key), app);
+ }
+ g_hash_table_add (kept_apps, app);
+ continue;
+ }
+
+ /* better? */
+ if (flags != GS_APP_LIST_FILTER_FLAG_NONE) {
+ if (gs_app_list_filter_app_is_better (app, found, flags)) {
+ for (guint j = 0; j < keys->len; j++) {
+ const gchar *key = g_ptr_array_index (keys, j);
+ g_hash_table_insert (hash, g_strdup (key), app);
+ }
+ g_hash_table_remove (kept_apps, found);
+ g_hash_table_add (kept_apps, app);
+ continue;
+ }
+ continue;
+ }
+ continue;
+ }
+
+ /* deep copy to a temp list and clear the current one */
+ old = gs_app_list_copy (list);
+ gs_app_list_remove_all_safe (list);
+
+ /* add back the apps we want to keep */
+ for (guint i = 0; i < old->array->len; i++) {
+ GsApp *app = gs_app_list_index (old, i);
+ if (g_hash_table_contains (kept_apps, app))
+ gs_app_list_add_safe (list, app, GS_APP_LIST_ADD_FLAG_NONE);
+ }
+}
+
+/**
+ * gs_app_list_copy:
+ * @list: A #GsAppList
+ *
+ * Returns a deep copy of the application list.
+ *
+ * Returns: A newly allocated #GsAppList
+ *
+ * Since: 3.22
+ **/
+GsAppList *
+gs_app_list_copy (GsAppList *list)
+{
+ GsAppList *new;
+ guint i;
+
+ g_return_val_if_fail (GS_IS_APP_LIST (list), NULL);
+
+ new = gs_app_list_new ();
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ gs_app_list_add_safe (new, app, GS_APP_LIST_ADD_FLAG_NONE);
+ }
+ return new;
+}
+
+static void
+gs_app_list_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GsAppList *self = GS_APP_LIST (object);
+ switch (prop_id) {
+ case PROP_STATE:
+ g_value_set_uint (value, self->state);
+ break;
+ case PROP_PROGRESS:
+ g_value_set_uint (value, self->progress);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_list_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_list_finalize (GObject *object)
+{
+ GsAppList *list = GS_APP_LIST (object);
+ g_ptr_array_unref (list->array);
+ g_mutex_clear (&list->mutex);
+ G_OBJECT_CLASS (gs_app_list_parent_class)->finalize (object);
+}
+
+static void
+gs_app_list_class_init (GsAppListClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->get_property = gs_app_list_get_property;
+ object_class->set_property = gs_app_list_set_property;
+ object_class->finalize = gs_app_list_finalize;
+
+ /**
+ * GsAppList:state:
+ */
+ pspec = g_param_spec_uint ("state", NULL, NULL,
+ AS_APP_STATE_UNKNOWN,
+ AS_APP_STATE_LAST,
+ AS_APP_STATE_UNKNOWN,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_STATE, pspec);
+
+ /**
+ * GsAppList:progress:
+ *
+ * A percentage (0–100, inclusive) indicating the progress through the
+ * current task on this app list. The value may otherwise be
+ * %GS_APP_PROGRESS_UNKNOWN if the progress is unknown or has a wide
+ * confidence interval on any app, or if the app list is empty.
+ */
+ pspec = g_param_spec_uint ("progress", NULL, NULL,
+ 0, GS_APP_PROGRESS_UNKNOWN, GS_APP_PROGRESS_UNKNOWN,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_PROGRESS, pspec);
+}
+
+static void
+gs_app_list_init (GsAppList *list)
+{
+ g_mutex_init (&list->mutex);
+ list->array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+}
+
+/**
+ * gs_app_list_new:
+ *
+ * Creates a new list.
+ *
+ * Returns: A newly allocated #GsAppList
+ *
+ * Since: 3.22
+ **/
+GsAppList *
+gs_app_list_new (void)
+{
+ GsAppList *list;
+ list = g_object_new (GS_TYPE_APP_LIST, NULL);
+ return GS_APP_LIST (list);
+}
diff --git a/lib/gs-app-list.h b/lib/gs-app-list.h
new file mode 100644
index 0000000..abb405b
--- /dev/null
+++ b/lib/gs-app-list.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-app.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_APP_LIST (gs_app_list_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsAppList, gs_app_list, GS, APP_LIST, GObject)
+
+typedef gboolean (*GsAppListSortFunc) (GsApp *app1,
+ GsApp *app2,
+ gpointer user_data);
+typedef gboolean (*GsAppListFilterFunc) (GsApp *app,
+ gpointer user_data);
+
+GsAppList *gs_app_list_new (void);
+void gs_app_list_add (GsAppList *list,
+ GsApp *app);
+void gs_app_list_add_list (GsAppList *list,
+ GsAppList *donor);
+void gs_app_list_remove (GsAppList *list,
+ GsApp *app);
+GsApp *gs_app_list_index (GsAppList *list,
+ guint idx);
+GsApp *gs_app_list_lookup (GsAppList *list,
+ const gchar *unique_id);
+guint gs_app_list_length (GsAppList *list);
+void gs_app_list_sort (GsAppList *list,
+ GsAppListSortFunc func,
+ gpointer user_data);
+void gs_app_list_filter (GsAppList *list,
+ GsAppListFilterFunc func,
+ gpointer user_data);
+
+G_END_DECLS
diff --git a/lib/gs-app-private.h b/lib/gs-app-private.h
new file mode 100644
index 0000000..1163bf3
--- /dev/null
+++ b/lib/gs-app-private.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-app.h"
+#include "gs-plugin-types.h"
+
+G_BEGIN_DECLS
+
+void gs_app_set_priority (GsApp *app,
+ guint priority);
+guint gs_app_get_priority (GsApp *app);
+void gs_app_set_unique_id (GsApp *app,
+ const gchar *unique_id);
+void gs_app_remove_addon (GsApp *app,
+ GsApp *addon);
+GCancellable *gs_app_get_cancellable (GsApp *app);
+GsPluginAction gs_app_get_pending_action (GsApp *app);
+void gs_app_set_pending_action (GsApp *app,
+ GsPluginAction action);
+gint gs_app_compare_priority (GsApp *app1,
+ GsApp *app2);
+
+G_END_DECLS
diff --git a/lib/gs-app.c b/lib/gs-app.c
new file mode 100644
index 0000000..4a9e6d2
--- /dev/null
+++ b/lib/gs-app.c
@@ -0,0 +1,4680 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-app
+ * @title: GsApp
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: An application that is either installed or that can be installed
+ *
+ * This object represents a 1:1 mapping to a .desktop file. The design is such
+ * so you can't have different GsApp's for different versions or architectures
+ * of a package. This rule really only applies to GsApps of kind %AS_APP_KIND_DESKTOP
+ * and %AS_APP_KIND_GENERIC. We allow GsApps of kind %AS_APP_KIND_OS_UPDATE or
+ * %AS_APP_KIND_GENERIC, which don't correspond to desktop files, but instead
+ * represent a system update and its individual components.
+ *
+ * The #GsPluginLoader de-duplicates the GsApp instances that are produced by
+ * plugins to ensure that there is a single instance of GsApp for each id, making
+ * the id the primary key for this object. This ensures that actions triggered on
+ * a #GsApp in different parts of gnome-software can be observed by connecting to
+ * signals on the #GsApp.
+ *
+ * Information about other #GsApp objects can be stored in this object, for
+ * instance in the gs_app_add_related() method or gs_app_get_history().
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include "gs-app-collation.h"
+#include "gs-app-private.h"
+#include "gs-os-release.h"
+#include "gs-plugin.h"
+#include "gs-utils.h"
+
+typedef struct
+{
+ GObject parent_instance;
+
+ GMutex mutex;
+ gchar *id;
+ gchar *unique_id;
+ gboolean unique_id_valid;
+ gchar *branch;
+ gchar *name;
+ GsAppQuality name_quality;
+ GPtrArray *icons;
+ GPtrArray *sources;
+ GPtrArray *source_ids;
+ gchar *project_group;
+ gchar *developer_name;
+ gchar *agreement;
+ gchar *version;
+ gchar *version_ui;
+ gchar *summary;
+ GsAppQuality summary_quality;
+ gchar *summary_missing;
+ gchar *description;
+ GsAppQuality description_quality;
+ GPtrArray *screenshots;
+ GPtrArray *categories;
+ GPtrArray *key_colors;
+ GHashTable *urls;
+ GHashTable *launchables;
+ gchar *license;
+ GsAppQuality license_quality;
+ gchar **menu_path;
+ gchar *origin;
+ gchar *origin_appstream;
+ gchar *origin_hostname;
+ gchar *update_version;
+ gchar *update_version_ui;
+ gchar *update_details;
+ AsUrgencyKind update_urgency;
+ GsAppPermissions update_permissions;
+ gchar *management_plugin;
+ guint match_value;
+ guint priority;
+ gint rating;
+ GArray *review_ratings;
+ GPtrArray *reviews; /* of AsReview */
+ GPtrArray *provides; /* of AsProvide */
+ guint64 size_installed;
+ guint64 size_download;
+ AsAppKind kind;
+ AsAppState state;
+ AsAppState state_recover;
+ AsAppScope scope;
+ AsBundleKind bundle_kind;
+ guint progress; /* integer 0–100 (inclusive), or %GS_APP_PROGRESS_UNKNOWN */
+ gboolean allow_cancel;
+ GHashTable *metadata;
+ GsAppList *addons;
+ GsAppList *related;
+ GsAppList *history;
+ guint64 install_date;
+ guint64 kudos;
+ gboolean to_be_installed;
+ GsAppQuirk quirk;
+ gboolean license_is_free;
+ GsApp *runtime;
+ GFile *local_file;
+ AsContentRating *content_rating;
+ GdkPixbuf *pixbuf; /* (nullable) (owned) */
+ AsScreenshot *action_screenshot; /* (nullable) (owned) */
+ GCancellable *cancellable;
+ GsPluginAction pending_action;
+ GsAppPermissions permissions;
+ gboolean is_update_downloaded;
+} GsAppPrivate;
+
+enum {
+ PROP_0,
+ PROP_ID,
+ PROP_NAME,
+ PROP_VERSION,
+ PROP_SUMMARY,
+ PROP_DESCRIPTION,
+ PROP_RATING,
+ PROP_KIND,
+ PROP_STATE,
+ PROP_PROGRESS,
+ PROP_CAN_CANCEL_INSTALLATION,
+ PROP_INSTALL_DATE,
+ PROP_QUIRK,
+ PROP_PENDING_ACTION,
+ PROP_KEY_COLORS,
+ PROP_IS_UPDATE_DOWNLOADED,
+ PROP_LAST
+};
+
+static GParamSpec *obj_props[PROP_LAST] = { NULL, };
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsApp, gs_app, G_TYPE_OBJECT)
+
+static gboolean
+_g_set_str (gchar **str_ptr, const gchar *new_str)
+{
+ if (*str_ptr == new_str || g_strcmp0 (*str_ptr, new_str) == 0)
+ return FALSE;
+ g_free (*str_ptr);
+ *str_ptr = g_strdup (new_str);
+ return TRUE;
+}
+
+static gboolean
+_g_set_strv (gchar ***strv_ptr, gchar **new_strv)
+{
+ if (*strv_ptr == new_strv)
+ return FALSE;
+ g_strfreev (*strv_ptr);
+ *strv_ptr = g_strdupv (new_strv);
+ return TRUE;
+}
+
+static gboolean
+_g_set_ptr_array (GPtrArray **array_ptr, GPtrArray *new_array)
+{
+ if (*array_ptr == new_array)
+ return FALSE;
+ if (*array_ptr != NULL)
+ g_ptr_array_unref (*array_ptr);
+ *array_ptr = g_ptr_array_ref (new_array);
+ return TRUE;
+}
+
+static gboolean
+_g_set_array (GArray **array_ptr, GArray *new_array)
+{
+ if (*array_ptr == new_array)
+ return FALSE;
+ if (*array_ptr != NULL)
+ g_array_unref (*array_ptr);
+ *array_ptr = g_array_ref (new_array);
+ return TRUE;
+}
+
+static void
+gs_app_kv_lpad (GString *str, const gchar *key, const gchar *value)
+{
+ gs_utils_append_key_value (str, 20, key, value);
+}
+
+static void
+gs_app_kv_size (GString *str, const gchar *key, guint64 value)
+{
+ g_autofree gchar *tmp = NULL;
+ if (value == GS_APP_SIZE_UNKNOWABLE) {
+ gs_app_kv_lpad (str, key, "unknowable");
+ return;
+ }
+ tmp = g_format_size (value);
+ gs_app_kv_lpad (str, key, tmp);
+}
+
+G_GNUC_PRINTF (3, 4)
+static void
+gs_app_kv_printf (GString *str, const gchar *key, const gchar *fmt, ...)
+{
+ va_list args;
+ g_autofree gchar *tmp = NULL;
+ va_start (args, fmt);
+ tmp = g_strdup_vprintf (fmt, args);
+ va_end (args);
+ gs_app_kv_lpad (str, key, tmp);
+}
+
+static const gchar *
+_as_app_quirk_flag_to_string (GsAppQuirk quirk)
+{
+ switch (quirk) {
+ case GS_APP_QUIRK_PROVENANCE:
+ return "provenance";
+ case GS_APP_QUIRK_COMPULSORY:
+ return "compulsory";
+ case GS_APP_QUIRK_HAS_SOURCE:
+ return "has-source";
+ case GS_APP_QUIRK_IS_WILDCARD:
+ return "is-wildcard";
+ case GS_APP_QUIRK_NEEDS_REBOOT:
+ return "needs-reboot";
+ case GS_APP_QUIRK_NOT_REVIEWABLE:
+ return "not-reviewable";
+ case GS_APP_QUIRK_HAS_SHORTCUT:
+ return "has-shortcut";
+ case GS_APP_QUIRK_NOT_LAUNCHABLE:
+ return "not-launchable";
+ case GS_APP_QUIRK_NEEDS_USER_ACTION:
+ return "needs-user-action";
+ case GS_APP_QUIRK_IS_PROXY:
+ return "is-proxy";
+ case GS_APP_QUIRK_REMOVABLE_HARDWARE:
+ return "removable-hardware";
+ case GS_APP_QUIRK_DEVELOPER_VERIFIED:
+ return "developer-verified";
+ case GS_APP_QUIRK_PARENTAL_FILTER:
+ return "parental-filter";
+ case GS_APP_QUIRK_NEW_PERMISSIONS:
+ return "new-permissions";
+ case GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE:
+ return "parental-not-launchable";
+ case GS_APP_QUIRK_HIDE_FROM_SEARCH:
+ return "hide-from-search";
+ case GS_APP_QUIRK_HIDE_EVERYWHERE:
+ return "hide-everywhere";
+ case GS_APP_QUIRK_DO_NOT_AUTO_UPDATE:
+ return "do-not-auto-update";
+ default:
+ return NULL;
+ }
+}
+
+/* mutex must be held */
+static const gchar *
+gs_app_get_unique_id_unlocked (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ /* invalid */
+ if (priv->id == NULL)
+ return NULL;
+
+ /* hmm, do what we can */
+ if (priv->unique_id == NULL || !priv->unique_id_valid) {
+ g_free (priv->unique_id);
+ priv->unique_id = as_utils_unique_id_build (priv->scope,
+ priv->bundle_kind,
+ priv->origin,
+ priv->kind,
+ priv->id,
+ priv->branch);
+ priv->unique_id_valid = TRUE;
+ }
+ return priv->unique_id;
+}
+
+/**
+ * gs_app_compare_priority:
+ * @app1: a #GsApp
+ * @app2: a #GsApp
+ *
+ * Compares two applications using their priority.
+ *
+ * Use `gs_plugin_add_rule(plugin,GS_PLUGIN_RULE_BETTER_THAN,"plugin-name")`
+ * to set the application priority values.
+ *
+ * Returns: a negative value if @app1 is less than @app2, a positive value if
+ * @app1 is greater than @app2, and zero if @app1 is equal to @app2
+ **/
+gint
+gs_app_compare_priority (GsApp *app1, GsApp *app2)
+{
+ GsAppPrivate *priv1 = gs_app_get_instance_private (app1);
+ GsAppPrivate *priv2 = gs_app_get_instance_private (app2);
+
+ /* prefer prio */
+ if (priv1->priority > priv2->priority)
+ return -1;
+ if (priv1->priority < priv2->priority)
+ return 1;
+
+ /* fall back to bundle kind */
+ if (priv1->bundle_kind < priv2->bundle_kind)
+ return -1;
+ if (priv1->bundle_kind > priv2->bundle_kind)
+ return 1;
+ return 0;
+}
+
+/**
+ * gs_app_quirk_to_string:
+ * @quirk: a #GsAppQuirk
+ *
+ * Returns the quirk bitfield as a string.
+ *
+ * Returns: (transfer full): a string
+ **/
+static gchar *
+gs_app_quirk_to_string (GsAppQuirk quirk)
+{
+ GString *str = g_string_new ("");
+ guint64 i;
+
+ /* nothing set */
+ if (quirk == GS_APP_QUIRK_NONE) {
+ g_string_append (str, "none");
+ return g_string_free (str, FALSE);
+ }
+
+ /* get flags */
+ for (i = 1; i < GS_APP_QUIRK_LAST; i *= 2) {
+ if ((quirk & i) == 0)
+ continue;
+ g_string_append_printf (str, "%s,",
+ _as_app_quirk_flag_to_string (i));
+ }
+
+ /* nothing recognised */
+ if (str->len == 0) {
+ g_string_append (str, "unknown");
+ return g_string_free (str, FALSE);
+ }
+
+ /* remove trailing comma */
+ g_string_truncate (str, str->len - 1);
+ return g_string_free (str, FALSE);
+}
+
+static gchar *
+gs_app_kudos_to_string (guint64 kudos)
+{
+ g_autoptr(GPtrArray) array = g_ptr_array_new ();
+ if ((kudos & GS_APP_KUDO_MY_LANGUAGE) > 0)
+ g_ptr_array_add (array, "my-language");
+ if ((kudos & GS_APP_KUDO_RECENT_RELEASE) > 0)
+ g_ptr_array_add (array, "recent-release");
+ if ((kudos & GS_APP_KUDO_FEATURED_RECOMMENDED) > 0)
+ g_ptr_array_add (array, "featured-recommended");
+ if ((kudos & GS_APP_KUDO_MODERN_TOOLKIT) > 0)
+ g_ptr_array_add (array, "modern-toolkit");
+ if ((kudos & GS_APP_KUDO_SEARCH_PROVIDER) > 0)
+ g_ptr_array_add (array, "search-provider");
+ if ((kudos & GS_APP_KUDO_INSTALLS_USER_DOCS) > 0)
+ g_ptr_array_add (array, "installs-user-docs");
+ if ((kudos & GS_APP_KUDO_USES_NOTIFICATIONS) > 0)
+ g_ptr_array_add (array, "uses-notifications");
+ if ((kudos & GS_APP_KUDO_HAS_KEYWORDS) > 0)
+ g_ptr_array_add (array, "has-keywords");
+ if ((kudos & GS_APP_KUDO_HAS_SCREENSHOTS) > 0)
+ g_ptr_array_add (array, "has-screenshots");
+ if ((kudos & GS_APP_KUDO_POPULAR) > 0)
+ g_ptr_array_add (array, "popular");
+ if ((kudos & GS_APP_KUDO_HIGH_CONTRAST) > 0)
+ g_ptr_array_add (array, "high-contrast");
+ if ((kudos & GS_APP_KUDO_HI_DPI_ICON) > 0)
+ g_ptr_array_add (array, "hi-dpi-icon");
+ if ((kudos & GS_APP_KUDO_SANDBOXED) > 0)
+ g_ptr_array_add (array, "sandboxed");
+ if ((kudos & GS_APP_KUDO_SANDBOXED_SECURE) > 0)
+ g_ptr_array_add (array, "sandboxed-secure");
+ g_ptr_array_add (array, NULL);
+ return g_strjoinv ("|", (gchar **) array->pdata);
+}
+
+/**
+ * gs_app_to_string:
+ * @app: a #GsApp
+ *
+ * Converts the application to a string.
+ * This is not designed to serialize the object but to produce a string suitable
+ * for debugging.
+ *
+ * Returns: A multi-line string
+ *
+ * Since: 3.22
+ **/
+gchar *
+gs_app_to_string (GsApp *app)
+{
+ GString *str = g_string_new ("GsApp:");
+ gs_app_to_string_append (app, str);
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 1);
+ return g_string_free (str, FALSE);
+}
+
+/**
+ * gs_app_to_string_append:
+ * @app: a #GsApp
+ * @str: a #GString
+ *
+ * Appends the application to an existing string.
+ *
+ * Since: 3.26
+ **/
+void
+gs_app_to_string_append (GsApp *app, GString *str)
+{
+ GsAppClass *klass = GS_APP_GET_CLASS (app);
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ AsImage *im;
+ GList *keys;
+ const gchar *tmp;
+ guint i;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (str != NULL);
+
+ g_string_append_printf (str, " [%p]\n", app);
+ gs_app_kv_lpad (str, "kind", as_app_kind_to_string (priv->kind));
+ gs_app_kv_lpad (str, "state", as_app_state_to_string (priv->state));
+ if (priv->quirk > 0) {
+ g_autofree gchar *qstr = gs_app_quirk_to_string (priv->quirk);
+ gs_app_kv_lpad (str, "quirk", qstr);
+ }
+ if (priv->progress == GS_APP_PROGRESS_UNKNOWN)
+ gs_app_kv_printf (str, "progress", "unknown");
+ else
+ gs_app_kv_printf (str, "progress", "%u%%", priv->progress);
+ if (priv->id != NULL)
+ gs_app_kv_lpad (str, "id", priv->id);
+ if (priv->unique_id != NULL)
+ gs_app_kv_lpad (str, "unique-id", gs_app_get_unique_id (app));
+ if (priv->scope != AS_APP_SCOPE_UNKNOWN)
+ gs_app_kv_lpad (str, "scope", as_app_scope_to_string (priv->scope));
+ if (priv->bundle_kind != AS_BUNDLE_KIND_UNKNOWN) {
+ gs_app_kv_lpad (str, "bundle-kind",
+ as_bundle_kind_to_string (priv->bundle_kind));
+ }
+ if (priv->kudos > 0) {
+ g_autofree gchar *kudo_str = NULL;
+ kudo_str = gs_app_kudos_to_string (priv->kudos);
+ gs_app_kv_lpad (str, "kudos", kudo_str);
+ }
+ gs_app_kv_printf (str, "kudo-percentage", "%u",
+ gs_app_get_kudos_percentage (app));
+ if (priv->name != NULL)
+ gs_app_kv_lpad (str, "name", priv->name);
+ if (priv->pixbuf != NULL)
+ gs_app_kv_printf (str, "pixbuf", "%p", priv->pixbuf);
+ if (priv->action_screenshot != NULL)
+ gs_app_kv_printf (str, "action-screenshot", "%p", priv->action_screenshot);
+ for (i = 0; i < priv->icons->len; i++) {
+ AsIcon *icon = g_ptr_array_index (priv->icons, i);
+ gs_app_kv_lpad (str, "icon-kind",
+ as_icon_kind_to_string (as_icon_get_kind (icon)));
+ if (as_icon_get_pixbuf (icon) != NULL) {
+ gs_app_kv_printf (str, "icon-pixbuf", "%p",
+ as_icon_get_pixbuf (icon));
+ }
+ if (as_icon_get_name (icon) != NULL)
+ gs_app_kv_lpad (str, "icon-name",
+ as_icon_get_name (icon));
+ if (as_icon_get_prefix (icon) != NULL)
+ gs_app_kv_lpad (str, "icon-prefix",
+ as_icon_get_prefix (icon));
+ if (as_icon_get_filename (icon) != NULL)
+ gs_app_kv_lpad (str, "icon-filename",
+ as_icon_get_filename (icon));
+ }
+ if (priv->match_value != 0)
+ gs_app_kv_printf (str, "match-value", "%05x", priv->match_value);
+ if (priv->priority != 0)
+ gs_app_kv_printf (str, "priority", "%u", priv->priority);
+ if (priv->version != NULL)
+ gs_app_kv_lpad (str, "version", priv->version);
+ if (priv->version_ui != NULL)
+ gs_app_kv_lpad (str, "version-ui", priv->version_ui);
+ if (priv->update_version != NULL)
+ gs_app_kv_lpad (str, "update-version", priv->update_version);
+ if (priv->update_version_ui != NULL)
+ gs_app_kv_lpad (str, "update-version-ui", priv->update_version_ui);
+ if (priv->update_details != NULL)
+ gs_app_kv_lpad (str, "update-details", priv->update_details);
+ if (priv->update_urgency != AS_URGENCY_KIND_UNKNOWN) {
+ gs_app_kv_printf (str, "update-urgency", "%u",
+ priv->update_urgency);
+ }
+ if (priv->summary != NULL)
+ gs_app_kv_lpad (str, "summary", priv->summary);
+ if (priv->description != NULL)
+ gs_app_kv_lpad (str, "description", priv->description);
+ for (i = 0; i < priv->screenshots->len; i++) {
+ AsScreenshot *ss = g_ptr_array_index (priv->screenshots, i);
+ g_autofree gchar *key = NULL;
+ tmp = as_screenshot_get_caption (ss, NULL);
+ im = as_screenshot_get_image (ss, 0, 0);
+ if (im == NULL)
+ continue;
+ key = g_strdup_printf ("screenshot-%02u", i);
+ gs_app_kv_printf (str, key, "%s [%s]",
+ as_image_get_url (im),
+ tmp != NULL ? tmp : "<none>");
+ }
+ for (i = 0; i < priv->sources->len; i++) {
+ g_autofree gchar *key = NULL;
+ tmp = g_ptr_array_index (priv->sources, i);
+ key = g_strdup_printf ("source-%02u", i);
+ gs_app_kv_lpad (str, key, tmp);
+ }
+ for (i = 0; i < priv->source_ids->len; i++) {
+ g_autofree gchar *key = NULL;
+ tmp = g_ptr_array_index (priv->source_ids, i);
+ key = g_strdup_printf ("source-id-%02u", i);
+ gs_app_kv_lpad (str, key, tmp);
+ }
+ if (priv->local_file != NULL) {
+ g_autofree gchar *fn = g_file_get_path (priv->local_file);
+ gs_app_kv_lpad (str, "local-filename", fn);
+ }
+ if (priv->content_rating != NULL) {
+ guint age = as_content_rating_get_minimum_age (priv->content_rating);
+ if (age != G_MAXUINT) {
+ g_autofree gchar *value = g_strdup_printf ("%u", age);
+ gs_app_kv_lpad (str, "content-age", value);
+ }
+ gs_app_kv_lpad (str, "content-rating",
+ as_content_rating_get_kind (priv->content_rating));
+ }
+ tmp = g_hash_table_lookup (priv->urls, as_url_kind_to_string (AS_URL_KIND_HOMEPAGE));
+ if (tmp != NULL)
+ gs_app_kv_lpad (str, "url{homepage}", tmp);
+ keys = g_hash_table_get_keys (priv->launchables);
+ for (GList *l = keys; l != NULL; l = l->next) {
+ g_autofree gchar *key = NULL;
+ key = g_strdup_printf ("launchable{%s}", (const gchar *) l->data);
+ tmp = g_hash_table_lookup (priv->launchables, l->data);
+ gs_app_kv_lpad (str, key, tmp);
+ }
+ g_list_free (keys);
+ if (priv->license != NULL) {
+ gs_app_kv_lpad (str, "license", priv->license);
+ gs_app_kv_lpad (str, "license-is-free",
+ gs_app_get_license_is_free (app) ? "yes" : "no");
+ }
+ if (priv->management_plugin != NULL)
+ gs_app_kv_lpad (str, "management-plugin", priv->management_plugin);
+ if (priv->summary_missing != NULL)
+ gs_app_kv_lpad (str, "summary-missing", priv->summary_missing);
+ if (priv->menu_path != NULL &&
+ priv->menu_path[0] != NULL &&
+ priv->menu_path[0][0] != '\0') {
+ g_autofree gchar *path = g_strjoinv (" → ", priv->menu_path);
+ gs_app_kv_lpad (str, "menu-path", path);
+ }
+ if (priv->branch != NULL)
+ gs_app_kv_lpad (str, "branch", priv->branch);
+ if (priv->origin != NULL && priv->origin[0] != '\0')
+ gs_app_kv_lpad (str, "origin", priv->origin);
+ if (priv->origin_appstream != NULL && priv->origin_appstream[0] != '\0')
+ gs_app_kv_lpad (str, "origin-appstream", priv->origin_appstream);
+ if (priv->origin_hostname != NULL && priv->origin_hostname[0] != '\0')
+ gs_app_kv_lpad (str, "origin-hostname", priv->origin_hostname);
+ if (priv->rating != -1)
+ gs_app_kv_printf (str, "rating", "%i", priv->rating);
+ if (priv->review_ratings != NULL) {
+ for (i = 0; i < priv->review_ratings->len; i++) {
+ guint32 rat = g_array_index (priv->review_ratings, guint32, i);
+ gs_app_kv_printf (str, "review-rating", "[%u:%u]",
+ i, rat);
+ }
+ }
+ if (priv->reviews != NULL)
+ gs_app_kv_printf (str, "reviews", "%u", priv->reviews->len);
+ if (priv->provides != NULL)
+ gs_app_kv_printf (str, "provides", "%u", priv->provides->len);
+ if (priv->install_date != 0) {
+ gs_app_kv_printf (str, "install-date", "%"
+ G_GUINT64_FORMAT "",
+ priv->install_date);
+ }
+ if (priv->size_installed != 0)
+ gs_app_kv_size (str, "size-installed", priv->size_installed);
+ if (priv->size_download != 0)
+ gs_app_kv_size (str, "size-download", gs_app_get_size_download (app));
+ for (i = 0; i < gs_app_list_length (priv->related); i++) {
+ GsApp *app_tmp = gs_app_list_index (priv->related, i);
+ const gchar *id = gs_app_get_unique_id (app_tmp);
+ if (id == NULL)
+ id = gs_app_get_source_default (app_tmp);
+ gs_app_kv_lpad (str, "related", id);
+ }
+ for (i = 0; i < gs_app_list_length (priv->history); i++) {
+ GsApp *app_tmp = gs_app_list_index (priv->history, i);
+ gs_app_kv_lpad (str, "history", gs_app_get_unique_id (app_tmp));
+ }
+ for (i = 0; i < priv->categories->len; i++) {
+ tmp = g_ptr_array_index (priv->categories, i);
+ gs_app_kv_lpad (str, "category", tmp);
+ }
+ for (i = 0; i < priv->key_colors->len; i++) {
+ GdkRGBA *color = g_ptr_array_index (priv->key_colors, i);
+ g_autofree gchar *key = NULL;
+ key = g_strdup_printf ("key-color-%02u", i);
+ gs_app_kv_printf (str, key, "%.0f,%.0f,%.0f",
+ color->red * 255.f,
+ color->green * 255.f,
+ color->blue * 255.f);
+ }
+ keys = g_hash_table_get_keys (priv->metadata);
+ for (GList *l = keys; l != NULL; l = l->next) {
+ GVariant *val;
+ const GVariantType *val_type;
+ g_autofree gchar *key = NULL;
+ g_autofree gchar *val_str = NULL;
+
+ key = g_strdup_printf ("{%s}", (const gchar *) l->data);
+ val = g_hash_table_lookup (priv->metadata, l->data);
+ val_type = g_variant_get_type (val);
+ if (g_variant_type_equal (val_type, G_VARIANT_TYPE_STRING)) {
+ val_str = g_variant_dup_string (val, NULL);
+ } else if (g_variant_type_equal (val_type, G_VARIANT_TYPE_BOOLEAN)) {
+ val_str = g_strdup (g_variant_get_boolean (val) ? "True" : "False");
+ } else if (g_variant_type_equal (val_type, G_VARIANT_TYPE_UINT32)) {
+ val_str = g_strdup_printf ("%" G_GUINT32_FORMAT,
+ g_variant_get_uint32 (val));
+ } else {
+ val_str = g_strdup_printf ("unknown type of %s",
+ g_variant_get_type_string (val));
+ }
+ gs_app_kv_lpad (str, key, val_str);
+ }
+ g_list_free (keys);
+
+ /* add subclassed info */
+ if (klass->to_string != NULL)
+ klass->to_string (app, str);
+
+ /* print runtime data too */
+ if (priv->runtime != NULL) {
+ g_string_append (str, "\n\tRuntime:\n\t");
+ gs_app_to_string_append (priv->runtime, str);
+ }
+ g_string_append_printf (str, "\n");
+}
+
+typedef struct {
+ GsApp *app;
+ GParamSpec *pspec;
+} AppNotifyData;
+
+static gboolean
+notify_idle_cb (gpointer data)
+{
+ AppNotifyData *notify_data = data;
+
+ g_object_notify_by_pspec (G_OBJECT (notify_data->app), notify_data->pspec);
+
+ g_object_unref (notify_data->app);
+ g_free (notify_data);
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_app_queue_notify (GsApp *app, GParamSpec *pspec)
+{
+ AppNotifyData *notify_data;
+
+ notify_data = g_new (AppNotifyData, 1);
+ notify_data->app = g_object_ref (app);
+ notify_data->pspec = pspec;
+
+ g_idle_add (notify_idle_cb, notify_data);
+}
+
+/**
+ * gs_app_get_id:
+ * @app: a #GsApp
+ *
+ * Gets the application ID.
+ *
+ * Returns: The whole ID, e.g. "gimp.desktop"
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_id (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->id;
+}
+
+/**
+ * gs_app_set_id:
+ * @app: a #GsApp
+ * @id: a application ID, e.g. "gimp.desktop"
+ *
+ * Sets the application ID.
+ */
+void
+gs_app_set_id (GsApp *app, const gchar *id)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (_g_set_str (&priv->id, id))
+ priv->unique_id_valid = FALSE;
+}
+
+/**
+ * gs_app_get_scope:
+ * @app: a #GsApp
+ *
+ * Gets the scope of the application.
+ *
+ * Returns: the #AsAppScope, e.g. %AS_APP_SCOPE_USER
+ *
+ * Since: 3.22
+ **/
+AsAppScope
+gs_app_get_scope (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), AS_APP_SCOPE_UNKNOWN);
+ return priv->scope;
+}
+
+/**
+ * gs_app_set_scope:
+ * @app: a #GsApp
+ * @scope: a #AsAppScope, e.g. AS_APP_SCOPE_SYSTEM
+ *
+ * This sets the scope of the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_scope (GsApp *app, AsAppScope scope)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ g_return_if_fail (GS_IS_APP (app));
+
+ /* same */
+ if (scope == priv->scope)
+ return;
+
+ priv->scope = scope;
+
+ /* no longer valid */
+ priv->unique_id_valid = FALSE;
+}
+
+/**
+ * gs_app_get_bundle_kind:
+ * @app: a #GsApp
+ *
+ * Gets the bundle kind of the application.
+ *
+ * Returns: the #AsAppScope, e.g. %AS_BUNDLE_KIND_FLATPAK
+ *
+ * Since: 3.22
+ **/
+AsBundleKind
+gs_app_get_bundle_kind (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), AS_BUNDLE_KIND_UNKNOWN);
+ return priv->bundle_kind;
+}
+
+/**
+ * gs_app_set_bundle_kind:
+ * @app: a #GsApp
+ * @bundle_kind: a #AsAppScope, e.g. AS_BUNDLE_KIND_FLATPAK
+ *
+ * This sets the bundle kind of the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_bundle_kind (GsApp *app, AsBundleKind bundle_kind)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ g_return_if_fail (GS_IS_APP (app));
+
+ /* same */
+ if (bundle_kind == priv->bundle_kind)
+ return;
+
+ priv->bundle_kind = bundle_kind;
+
+ /* no longer valid */
+ priv->unique_id_valid = FALSE;
+}
+
+/**
+ * gs_app_get_state:
+ * @app: a #GsApp
+ *
+ * Gets the state of the application.
+ *
+ * Returns: the #AsAppState, e.g. %AS_APP_STATE_INSTALLED
+ *
+ * Since: 3.22
+ **/
+AsAppState
+gs_app_get_state (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), AS_APP_STATE_UNKNOWN);
+ return priv->state;
+}
+
+/**
+ * gs_app_get_progress:
+ * @app: a #GsApp
+ *
+ * Gets the percentage completion.
+ *
+ * Returns: the percentage completion (0–100 inclusive), or %GS_APP_PROGRESS_UNKNOWN for unknown
+ *
+ * Since: 3.22
+ **/
+guint
+gs_app_get_progress (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), GS_APP_PROGRESS_UNKNOWN);
+ return priv->progress;
+}
+
+/**
+ * gs_app_get_allow_cancel:
+ * @app: a #GsApp
+ *
+ * Gets whether the app's installation or upgrade can be cancelled.
+ *
+ * Returns: TRUE if cancellation is possible, FALSE otherwise.
+ *
+ * Since: 3.26
+ **/
+gboolean
+gs_app_get_allow_cancel (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+ return priv->allow_cancel;
+}
+
+/**
+ * gs_app_set_state_recover:
+ * @app: a #GsApp
+ *
+ * Sets the application state to the last status value that was not
+ * transient.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_state_recover (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ if (priv->state_recover == AS_APP_STATE_UNKNOWN)
+ return;
+ if (priv->state_recover == priv->state)
+ return;
+
+ g_debug ("recovering state on %s from %s to %s",
+ priv->id,
+ as_app_state_to_string (priv->state),
+ as_app_state_to_string (priv->state_recover));
+
+ /* make sure progress gets reset when recovering state, to prevent
+ * confusing initial states when going through more than one attempt */
+ gs_app_set_progress (app, GS_APP_PROGRESS_UNKNOWN);
+
+ priv->state = priv->state_recover;
+ gs_app_queue_notify (app, obj_props[PROP_STATE]);
+}
+
+/* mutex must be held */
+static gboolean
+gs_app_set_state_internal (GsApp *app, AsAppState state)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ gboolean state_change_ok = FALSE;
+
+ /* same */
+ if (priv->state == state)
+ return FALSE;
+
+ /* check the state change is allowed */
+ switch (priv->state) {
+ case AS_APP_STATE_UNKNOWN:
+ /* unknown has to go into one of the stable states */
+ if (state == AS_APP_STATE_INSTALLED ||
+ state == AS_APP_STATE_QUEUED_FOR_INSTALL ||
+ state == AS_APP_STATE_AVAILABLE ||
+ state == AS_APP_STATE_AVAILABLE_LOCAL ||
+ state == AS_APP_STATE_UPDATABLE ||
+ state == AS_APP_STATE_UPDATABLE_LIVE ||
+ state == AS_APP_STATE_UNAVAILABLE)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_INSTALLED:
+ /* installed has to go into an action state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_REMOVING ||
+ state == AS_APP_STATE_UNAVAILABLE ||
+ state == AS_APP_STATE_UPDATABLE ||
+ state == AS_APP_STATE_UPDATABLE_LIVE)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_INSTALLING ||
+ state == AS_APP_STATE_AVAILABLE)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ /* available has to go into an action state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_QUEUED_FOR_INSTALL ||
+ state == AS_APP_STATE_INSTALLING)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_INSTALLING:
+ /* installing has to go into an stable state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_INSTALLED ||
+ state == AS_APP_STATE_UPDATABLE ||
+ state == AS_APP_STATE_UPDATABLE_LIVE ||
+ state == AS_APP_STATE_AVAILABLE)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_REMOVING:
+ /* removing has to go into an stable state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_AVAILABLE ||
+ state == AS_APP_STATE_INSTALLED)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ /* updatable has to go into an action state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_REMOVING ||
+ state == AS_APP_STATE_INSTALLING)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ /* updatable-live has to go into an action state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_REMOVING ||
+ state == AS_APP_STATE_INSTALLING)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_UNAVAILABLE:
+ /* updatable has to go into an action state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_AVAILABLE)
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ /* local has to go into an action state */
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_INSTALLING)
+ state_change_ok = TRUE;
+ break;
+ default:
+ g_warning ("state %s unhandled",
+ as_app_state_to_string (priv->state));
+ g_assert_not_reached ();
+ }
+
+ /* this state change was unexpected */
+ if (!state_change_ok) {
+ g_warning ("State change on %s from %s to %s is not OK",
+ gs_app_get_unique_id_unlocked (app),
+ as_app_state_to_string (priv->state),
+ as_app_state_to_string (state));
+ }
+
+ priv->state = state;
+
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == AS_APP_STATE_AVAILABLE_LOCAL ||
+ state == AS_APP_STATE_AVAILABLE)
+ priv->install_date = 0;
+
+ /* save this to simplify error handling in the plugins */
+ switch (state) {
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ /* transient, so ignore */
+ break;
+ default:
+ if (priv->state_recover != state)
+ priv->state_recover = state;
+ break;
+ }
+
+ return TRUE;
+}
+
+/**
+ * gs_app_set_progress:
+ * @app: a #GsApp
+ * @percentage: a percentage progress (0–100 inclusive), or %GS_APP_PROGRESS_UNKNOWN
+ *
+ * This sets the progress completion of the application. Use
+ * %GS_APP_PROGRESS_UNKNOWN if the progress is unknown or has a wide confidence
+ * interval.
+ *
+ * If called more than once with the same value then subsequent calls
+ * will be ignored.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_progress (GsApp *app, guint percentage)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (priv->progress == percentage)
+ return;
+ if (percentage != GS_APP_PROGRESS_UNKNOWN && percentage > 100) {
+ g_warning ("cannot set %u%% for %s, setting instead: 100%%",
+ percentage, gs_app_get_unique_id_unlocked (app));
+ percentage = 100;
+ }
+ priv->progress = percentage;
+ gs_app_queue_notify (app, obj_props[PROP_PROGRESS]);
+}
+
+/**
+ * gs_app_set_allow_cancel:
+ * @app: a #GsApp
+ * @allow_cancel: if the installation or upgrade can be cancelled or not
+ *
+ * This sets a flag indicating whether the operation can be cancelled or not.
+ * This is used by the UI to set the "Cancel" button insensitive as
+ * appropriate.
+ *
+ * Since: 3.26
+ **/
+void
+gs_app_set_allow_cancel (GsApp *app, gboolean allow_cancel)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (priv->allow_cancel == allow_cancel)
+ return;
+ priv->allow_cancel = allow_cancel;
+ gs_app_queue_notify (app, obj_props[PROP_CAN_CANCEL_INSTALLATION]);
+}
+
+static void
+gs_app_set_pending_action_internal (GsApp *app,
+ GsPluginAction action)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ if (priv->pending_action == action)
+ return;
+
+ priv->pending_action = action;
+ gs_app_queue_notify (app, obj_props[PROP_PENDING_ACTION]);
+}
+
+/**
+ * gs_app_set_state:
+ * @app: a #GsApp
+ * @state: a #AsAppState, e.g. AS_APP_STATE_UPDATABLE_LIVE
+ *
+ * This sets the state of the application.
+ * The following state diagram explains the typical states.
+ * All applications start in state %AS_APP_STATE_UNKNOWN,
+ * but the frontend is not supposed to see GsApps with this state.
+ *
+ * Plugins are responsible for changing the state to one of the other
+ * states before the GsApp is passed to the frontend.
+ *
+ * |[
+ * UPDATABLE --> INSTALLING --> INSTALLED
+ * UPDATABLE --> REMOVING --> AVAILABLE
+ * INSTALLED --> REMOVING --> AVAILABLE
+ * AVAILABLE --> INSTALLING --> INSTALLED
+ * AVAILABLE <--> QUEUED --> INSTALLING --> INSTALLED
+ * UNKNOWN --> UNAVAILABLE
+ * ]|
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_state (GsApp *app, AsAppState state)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ if (gs_app_set_state_internal (app, state)) {
+ /* since the state changed, and the pending-action refers to
+ * actions that usually change the state, we assign it to the
+ * appropriate action here */
+ GsPluginAction action = GS_PLUGIN_ACTION_UNKNOWN;
+ if (priv->state == AS_APP_STATE_QUEUED_FOR_INSTALL)
+ action = GS_PLUGIN_ACTION_INSTALL;
+ gs_app_set_pending_action_internal (app, action);
+
+ gs_app_queue_notify (app, obj_props[PROP_STATE]);
+ }
+}
+
+/**
+ * gs_app_get_kind:
+ * @app: a #GsApp
+ *
+ * Gets the kind of the application.
+ *
+ * Returns: the #AsAppKind, e.g. %AS_APP_KIND_UNKNOWN
+ *
+ * Since: 3.22
+ **/
+AsAppKind
+gs_app_get_kind (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), AS_APP_KIND_UNKNOWN);
+ return priv->kind;
+}
+
+/**
+ * gs_app_set_kind:
+ * @app: a #GsApp
+ * @kind: a #AsAppKind, e.g. #AS_APP_KIND_DESKTOP
+ *
+ * This sets the kind of the application.
+ * The following state diagram explains the typical states.
+ * All applications start with kind %AS_APP_KIND_UNKNOWN.
+ *
+ * |[
+ * PACKAGE --> NORMAL
+ * PACKAGE --> SYSTEM
+ * NORMAL --> SYSTEM
+ * ]|
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_kind (GsApp *app, AsAppKind kind)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ gboolean state_change_ok = FALSE;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* same */
+ if (priv->kind == kind)
+ return;
+
+ /* trying to change */
+ if (priv->kind != AS_APP_KIND_UNKNOWN &&
+ kind == AS_APP_KIND_UNKNOWN) {
+ g_warning ("automatically prevented from changing "
+ "kind on %s from %s to %s!",
+ gs_app_get_unique_id_unlocked (app),
+ as_app_kind_to_string (priv->kind),
+ as_app_kind_to_string (kind));
+ return;
+ }
+
+ /* check the state change is allowed */
+ switch (priv->kind) {
+ case AS_APP_KIND_UNKNOWN:
+ case AS_APP_KIND_GENERIC:
+ /* all others derive from generic */
+ state_change_ok = TRUE;
+ break;
+ case AS_APP_KIND_DESKTOP:
+ /* desktop has to be reset to override */
+ if (kind == AS_APP_KIND_UNKNOWN)
+ state_change_ok = TRUE;
+ break;
+ default:
+ /* this can never change state */
+ break;
+ }
+
+ /* this state change was unexpected */
+ if (!state_change_ok) {
+ g_warning ("Kind change on %s from %s to %s is not OK",
+ priv->id,
+ as_app_kind_to_string (priv->kind),
+ as_app_kind_to_string (kind));
+ return;
+ }
+
+ priv->kind = kind;
+ gs_app_queue_notify (app, obj_props[PROP_KIND]);
+
+ /* no longer valid */
+ priv->unique_id_valid = FALSE;
+}
+
+/**
+ * gs_app_get_unique_id:
+ * @app: a #GsApp
+ *
+ * Gets the unique application ID used for de-duplication.
+ * If nothing has been set the value from gs_app_get_id() will be used.
+ *
+ * Returns: The unique ID, e.g. `system/package/fedora/desktop/gimp.desktop/i386/master`, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_unique_id (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ locker = g_mutex_locker_new (&priv->mutex);
+ return gs_app_get_unique_id_unlocked (app);
+}
+
+/**
+ * gs_app_set_unique_id:
+ * @app: a #GsApp
+ * @unique_id: a unique application ID, e.g. `system/package/fedora/desktop/gimp.desktop/i386/master`
+ *
+ * Sets the unique application ID. Any #GsApp using the same ID will be
+ * deduplicated. This means that applications that can exist from more than
+ * one plugin should use this method.
+ */
+void
+gs_app_set_unique_id (GsApp *app, const gchar *unique_id)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* check for sanity */
+ if (!as_utils_unique_id_valid (unique_id))
+ g_warning ("unique_id %s not valid", unique_id);
+
+ g_free (priv->unique_id);
+ priv->unique_id = g_strdup (unique_id);
+ priv->unique_id_valid = TRUE;
+}
+
+/**
+ * gs_app_get_name:
+ * @app: a #GsApp
+ *
+ * Gets the application name.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_name (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->name;
+}
+
+/**
+ * gs_app_set_name:
+ * @app: a #GsApp
+ * @quality: A #GsAppQuality, e.g. %GS_APP_QUALITY_LOWEST
+ * @name: The short localized name, e.g. "Calculator"
+ *
+ * Sets the application name.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_name (GsApp *app, GsAppQuality quality, const gchar *name)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* only save this if the data is sufficiently high quality */
+ if (quality < priv->name_quality)
+ return;
+ priv->name_quality = quality;
+ if (_g_set_str (&priv->name, name))
+ g_object_notify_by_pspec (G_OBJECT (app), obj_props[PROP_NAME]);
+}
+
+/**
+ * gs_app_get_branch:
+ * @app: a #GsApp
+ *
+ * Gets the application branch.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_branch (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->branch;
+}
+
+/**
+ * gs_app_set_branch:
+ * @app: a #GsApp
+ * @branch: The branch, e.g. "master"
+ *
+ * Sets the application branch.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_branch (GsApp *app, const gchar *branch)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (_g_set_str (&priv->branch, branch))
+ priv->unique_id_valid = FALSE;
+}
+
+/**
+ * gs_app_get_source_default:
+ * @app: a #GsApp
+ *
+ * Gets the default source.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_source_default (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ if (priv->sources->len == 0)
+ return NULL;
+ return g_ptr_array_index (priv->sources, 0);
+}
+
+/**
+ * gs_app_add_source:
+ * @app: a #GsApp
+ * @source: a source name
+ *
+ * Adds a source name for the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_source (GsApp *app, const gchar *source)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ const gchar *tmp;
+ guint i;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (source != NULL);
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* check source doesn't already exist */
+ for (i = 0; i < priv->sources->len; i++) {
+ tmp = g_ptr_array_index (priv->sources, i);
+ if (g_strcmp0 (tmp, source) == 0)
+ return;
+ }
+ g_ptr_array_add (priv->sources, g_strdup (source));
+}
+
+/**
+ * gs_app_get_sources:
+ * @app: a #GsApp
+ *
+ * Gets the list of sources for the application.
+ *
+ * Returns: (element-type utf8) (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_sources (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->sources;
+}
+
+/**
+ * gs_app_set_sources:
+ * @app: a #GsApp
+ * @sources: The non-localized short names, e.g. ["gnome-calculator"]
+ *
+ * This name is used for the update page if the application is collected into
+ * the 'OS Updates' group.
+ * It is typically the package names, although this should not be relied upon.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_sources (GsApp *app, GPtrArray *sources)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_ptr_array (&priv->sources, sources);
+}
+
+/**
+ * gs_app_get_source_id_default:
+ * @app: a #GsApp
+ *
+ * Gets the default source ID.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_source_id_default (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ if (priv->source_ids->len == 0)
+ return NULL;
+ return g_ptr_array_index (priv->source_ids, 0);
+}
+
+/**
+ * gs_app_get_source_ids:
+ * @app: a #GsApp
+ *
+ * Gets the list of source IDs.
+ *
+ * Returns: (element-type utf8) (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_source_ids (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->source_ids;
+}
+
+/**
+ * gs_app_clear_source_ids:
+ * @app: a #GsApp
+ *
+ * Clear the list of source IDs.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_clear_source_ids (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_ptr_array_set_size (priv->source_ids, 0);
+}
+
+/**
+ * gs_app_set_source_ids:
+ * @app: a #GsApp
+ * @source_ids: The source-id, e.g. ["gnome-calculator;0.134;fedora"]
+ * or ["/home/hughsie/.local/share/applications/0ad.desktop"]
+ *
+ * This ID is used internally to the controlling plugin.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_source_ids (GsApp *app, GPtrArray *source_ids)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_ptr_array (&priv->source_ids, source_ids);
+}
+
+/**
+ * gs_app_add_source_id:
+ * @app: a #GsApp
+ * @source_id: a source ID, e.g. "gnome-calculator;0.134;fedora"
+ *
+ * Adds a source ID to the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_source_id (GsApp *app, const gchar *source_id)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ const gchar *tmp;
+ guint i;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (source_id != NULL);
+
+ /* only add if not already present */
+ for (i = 0; i < priv->source_ids->len; i++) {
+ tmp = g_ptr_array_index (priv->source_ids, i);
+ if (g_strcmp0 (tmp, source_id) == 0)
+ return;
+ }
+ g_ptr_array_add (priv->source_ids, g_strdup (source_id));
+}
+
+/**
+ * gs_app_get_project_group:
+ * @app: a #GsApp
+ *
+ * Gets a project group for the application.
+ * Applications belonging to other project groups may not be shown in
+ * this software center.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_project_group (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->project_group;
+}
+
+/**
+ * gs_app_get_developer_name:
+ * @app: a #GsApp
+ *
+ * Gets the developer name for the application.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_developer_name (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->developer_name;
+}
+
+/**
+ * gs_app_set_project_group:
+ * @app: a #GsApp
+ * @project_group: The non-localized project group, e.g. "GNOME" or "KDE"
+ *
+ * Sets a project group for the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_project_group (GsApp *app, const gchar *project_group)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_str (&priv->project_group, project_group);
+}
+
+/**
+ * gs_app_set_developer_name:
+ * @app: a #GsApp
+ * @developer_name: The developer name, e.g. "Richard Hughes"
+ *
+ * Sets a developer name for the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_developer_name (GsApp *app, const gchar *developer_name)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_str (&priv->developer_name, developer_name);
+}
+
+/**
+ * gs_app_get_pixbuf:
+ * @app: a #GsApp
+ *
+ * Gets a pixbuf to represent the application.
+ *
+ * Returns: (transfer none) (nullable): a #GdkPixbuf, or %NULL
+ *
+ * Since: 3.22
+ **/
+GdkPixbuf *
+gs_app_get_pixbuf (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->pixbuf;
+}
+
+/**
+ * gs_app_get_action_screenshot:
+ * @app: a #GsApp
+ *
+ * Gets a screenshot for the pending user action.
+ *
+ * Returns: (transfer none) (nullable): a #AsScreenshot, or %NULL
+ *
+ * Since: 3.38
+ **/
+AsScreenshot *
+gs_app_get_action_screenshot (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->action_screenshot;
+}
+
+/**
+ * gs_app_get_icons:
+ * @app: a #GsApp
+ *
+ * Gets the icons for the application.
+ *
+ * Returns: (transfer none) (element-type AsIcon): an array of icons
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_icons (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->icons;
+}
+
+/**
+ * gs_app_add_icon:
+ * @app: a #GsApp
+ * @icon: a #AsIcon, or %NULL to remove all icons
+ *
+ * Adds an icon to use for the application.
+ * If the first icon added cannot be loaded then the next one is tried.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_icon (GsApp *app, AsIcon *icon)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (icon == NULL) {
+ g_ptr_array_set_size (priv->icons, 0);
+ return;
+ }
+ g_ptr_array_add (priv->icons, g_object_ref (icon));
+}
+
+/**
+ * gs_app_get_use_drop_shadow:
+ * @app: a #GsApp
+ *
+ * Uses a heuristic to work out if the application pixbuf should have a drop
+ * shadow applied.
+ *
+ * Returns: %TRUE if a drop shadow should be applied
+ *
+ * Since: 3.34
+ **/
+gboolean
+gs_app_get_use_drop_shadow (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ AsIcon *ic;
+
+ /* guess */
+ if (priv->icons->len == 0)
+ return TRUE;
+
+ /* stock, and symbolic */
+ ic = g_ptr_array_index (priv->icons, 0);
+ return as_icon_get_kind (ic) != AS_ICON_KIND_STOCK ||
+ !g_str_has_suffix (as_icon_get_name (ic), "-symbolic");
+}
+
+/**
+ * gs_app_get_agreement:
+ * @app: a #GsApp
+ *
+ * Gets the agreement text for the application.
+ *
+ * Returns: a string in AppStream description format, or %NULL for unset
+ *
+ * Since: 3.28
+ **/
+const gchar *
+gs_app_get_agreement (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->agreement;
+}
+
+/**
+ * gs_app_set_agreement:
+ * @app: a #GsApp
+ * @agreement: The agreement text, e.g. "<p>Foobar</p>"
+ *
+ * Sets the application end-user agreement (e.g. a EULA) in AppStream
+ * description format.
+ *
+ * Since: 3.28
+ **/
+void
+gs_app_set_agreement (GsApp *app, const gchar *agreement)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_str (&priv->agreement, agreement);
+}
+
+/**
+ * gs_app_get_local_file:
+ * @app: a #GsApp
+ *
+ * Gets the file that backs this application, for instance this might
+ * be a local file in ~/Downloads that we are installing.
+ *
+ * Returns: (transfer none): a #GFile, or %NULL
+ *
+ * Since: 3.22
+ **/
+GFile *
+gs_app_get_local_file (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->local_file;
+}
+
+/**
+ * gs_app_set_local_file:
+ * @app: a #GsApp
+ * @local_file: a #GFile, or %NULL
+ *
+ * Sets the file that backs this application, for instance this might
+ * be a local file in ~/Downloads that we are installing.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_local_file (GsApp *app, GFile *local_file)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_set_object (&priv->local_file, local_file);
+}
+
+/**
+ * gs_app_get_content_rating:
+ * @app: a #GsApp
+ *
+ * Gets the content rating for this application.
+ *
+ * Returns: (transfer none): a #AsContentRating, or %NULL
+ *
+ * Since: 3.24
+ **/
+AsContentRating *
+gs_app_get_content_rating (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->content_rating;
+}
+
+/**
+ * gs_app_set_content_rating:
+ * @app: a #GsApp
+ * @content_rating: a #AsContentRating, or %NULL
+ *
+ * Sets the content rating for this application.
+ *
+ * Since: 3.24
+ **/
+void
+gs_app_set_content_rating (GsApp *app, AsContentRating *content_rating)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_set_object (&priv->content_rating, content_rating);
+}
+
+/**
+ * gs_app_get_runtime:
+ * @app: a #GsApp
+ *
+ * Gets the runtime for the installed application.
+ *
+ * Returns: (transfer none): a #GsApp, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_app_get_runtime (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->runtime;
+}
+
+/**
+ * gs_app_set_runtime:
+ * @app: a #GsApp
+ * @runtime: a #GsApp
+ *
+ * Sets the runtime that the installed application requires.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_runtime (GsApp *app, GsApp *runtime)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (app != runtime);
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_set_object (&priv->runtime, runtime);
+}
+
+/**
+ * gs_app_set_pixbuf:
+ * @app: a #GsApp
+ * @pixbuf: (transfer none) (nullable): a #GdkPixbuf, or %NULL
+ *
+ * Sets a pixbuf used to represent the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_pixbuf (GsApp *app, GdkPixbuf *pixbuf)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_set_object (&priv->pixbuf, pixbuf);
+}
+
+/**
+ * gs_app_set_action_screenshot:
+ * @app: a #GsApp
+ * @action_screenshot: (transfer none) (nullable): a #AsScreenshot, or %NULL
+ *
+ * Sets a screenshot used to represent the action.
+ *
+ * Since: 3.38
+ **/
+void
+gs_app_set_action_screenshot (GsApp *app, AsScreenshot *action_screenshot)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_set_object (&priv->action_screenshot, action_screenshot);
+}
+
+typedef enum {
+ GS_APP_VERSION_FIXUP_RELEASE = 1,
+ GS_APP_VERSION_FIXUP_DISTRO_SUFFIX = 2,
+ GS_APP_VERSION_FIXUP_GIT_SUFFIX = 4,
+ GS_APP_VERSION_FIXUP_LAST,
+} GsAppVersionFixup;
+
+/**
+ * gs_app_get_ui_version:
+ *
+ * convert 1:1.6.2-7.fc17 into "Version 1.6.2"
+ **/
+static gchar *
+gs_app_get_ui_version (const gchar *version, guint64 flags)
+{
+ guint i;
+ gchar *new;
+ gchar *f;
+
+ /* nothing set */
+ if (version == NULL)
+ return NULL;
+
+ /* first remove any epoch */
+ for (i = 0; version[i] != '\0'; i++) {
+ if (version[i] == ':') {
+ version = &version[i+1];
+ break;
+ }
+ if (!g_ascii_isdigit (version[i]))
+ break;
+ }
+
+ /* then remove any distro suffix */
+ new = g_strdup (version);
+ if ((flags & GS_APP_VERSION_FIXUP_DISTRO_SUFFIX) > 0) {
+ f = g_strstr_len (new, -1, ".fc");
+ if (f != NULL)
+ *f= '\0';
+ f = g_strstr_len (new, -1, ".el");
+ if (f != NULL)
+ *f= '\0';
+ }
+
+ /* then remove any release */
+ if ((flags & GS_APP_VERSION_FIXUP_RELEASE) > 0) {
+ f = g_strrstr_len (new, -1, "-");
+ if (f != NULL)
+ *f= '\0';
+ }
+
+ /* then remove any git suffix */
+ if ((flags & GS_APP_VERSION_FIXUP_GIT_SUFFIX) > 0) {
+ f = g_strrstr_len (new, -1, ".2012");
+ if (f != NULL)
+ *f= '\0';
+ f = g_strrstr_len (new, -1, ".2013");
+ if (f != NULL)
+ *f= '\0';
+ }
+
+ return new;
+}
+
+static void
+gs_app_ui_versions_invalidate (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_free (priv->version_ui);
+ g_free (priv->update_version_ui);
+ priv->version_ui = NULL;
+ priv->update_version_ui = NULL;
+}
+
+static void
+gs_app_ui_versions_populate (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ guint i;
+ guint64 flags[] = { GS_APP_VERSION_FIXUP_RELEASE |
+ GS_APP_VERSION_FIXUP_DISTRO_SUFFIX |
+ GS_APP_VERSION_FIXUP_GIT_SUFFIX,
+ GS_APP_VERSION_FIXUP_DISTRO_SUFFIX |
+ GS_APP_VERSION_FIXUP_GIT_SUFFIX,
+ GS_APP_VERSION_FIXUP_DISTRO_SUFFIX,
+ 0 };
+
+ /* try each set of bitfields in order */
+ for (i = 0; flags[i] != 0; i++) {
+ priv->version_ui = gs_app_get_ui_version (priv->version, flags[i]);
+ priv->update_version_ui = gs_app_get_ui_version (priv->update_version, flags[i]);
+ if (g_strcmp0 (priv->version_ui, priv->update_version_ui) != 0) {
+ gs_app_queue_notify (app, obj_props[PROP_VERSION]);
+ return;
+ }
+ gs_app_ui_versions_invalidate (app);
+ }
+
+ /* we tried, but failed */
+ priv->version_ui = g_strdup (priv->version);
+ priv->update_version_ui = g_strdup (priv->update_version);
+}
+
+/**
+ * gs_app_get_version:
+ * @app: a #GsApp
+ *
+ * Gets the exact version for the application.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_version (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->version;
+}
+
+/**
+ * gs_app_get_version_ui:
+ * @app: a #GsApp
+ *
+ * Gets a version string that can be displayed in a UI.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_version_ui (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+
+ /* work out the two version numbers */
+ if (priv->version != NULL &&
+ priv->version_ui == NULL) {
+ gs_app_ui_versions_populate (app);
+ }
+
+ return priv->version_ui;
+}
+
+/**
+ * gs_app_set_version:
+ * @app: a #GsApp
+ * @version: The version, e.g. "2:1.2.3.fc19"
+ *
+ * This saves the version after stripping out any non-friendly parts, such as
+ * distro tags, git revisions and that kind of thing.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_version (GsApp *app, const gchar *version)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ if (_g_set_str (&priv->version, version)) {
+ gs_app_ui_versions_invalidate (app);
+ gs_app_queue_notify (app, obj_props[PROP_VERSION]);
+ }
+}
+
+/**
+ * gs_app_get_summary:
+ * @app: a #GsApp
+ *
+ * Gets the single-line description of the application.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_summary (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->summary;
+}
+
+/**
+ * gs_app_set_summary:
+ * @app: a #GsApp
+ * @quality: a #GsAppQuality, e.g. %GS_APP_QUALITY_LOWEST
+ * @summary: a string, e.g. "A graphical calculator for GNOME"
+ *
+ * The medium length one-line localized name.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_summary (GsApp *app, GsAppQuality quality, const gchar *summary)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* only save this if the data is sufficiently high quality */
+ if (quality < priv->summary_quality)
+ return;
+ priv->summary_quality = quality;
+ if (_g_set_str (&priv->summary, summary))
+ g_object_notify_by_pspec (G_OBJECT (app), obj_props[PROP_SUMMARY]);
+}
+
+/**
+ * gs_app_get_description:
+ * @app: a #GsApp
+ *
+ * Gets the long multi-line description of the application.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_description (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->description;
+}
+
+/**
+ * gs_app_set_description:
+ * @app: a #GsApp
+ * @quality: a #GsAppQuality, e.g. %GS_APP_QUALITY_LOWEST
+ * @description: a string, e.g. "GNOME Calculator is a graphical calculator for GNOME..."
+ *
+ * Sets the long multi-line description of the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_description (GsApp *app, GsAppQuality quality, const gchar *description)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* only save this if the data is sufficiently high quality */
+ if (quality < priv->description_quality)
+ return;
+ priv->description_quality = quality;
+ _g_set_str (&priv->description, description);
+}
+
+/**
+ * gs_app_get_url:
+ * @app: a #GsApp
+ * @kind: a #AsUrlKind, e.g. %AS_URL_KIND_HOMEPAGE
+ *
+ * Gets a web address of a specific type.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_url (GsApp *app, AsUrlKind kind)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ locker = g_mutex_locker_new (&priv->mutex);
+ return g_hash_table_lookup (priv->urls, as_url_kind_to_string (kind));
+}
+
+/**
+ * gs_app_set_url:
+ * @app: a #GsApp
+ * @kind: a #AsUrlKind, e.g. %AS_URL_KIND_HOMEPAGE
+ * @url: a web URL, e.g. "http://www.hughsie.com/"
+ *
+ * Sets a web address of a specific type.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_url (GsApp *app, AsUrlKind kind, const gchar *url)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_hash_table_insert (priv->urls,
+ g_strdup (as_url_kind_to_string (kind)),
+ g_strdup (url));
+}
+
+/**
+ * gs_app_get_launchable:
+ * @app: a #GsApp
+ * @kind: a #AsLaunchableKind, e.g. %AS_LAUNCHABLE_KIND_DESKTOP_ID
+ *
+ * Gets a launchable of a specific type.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.28
+ **/
+const gchar *
+gs_app_get_launchable (GsApp *app, AsLaunchableKind kind)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return g_hash_table_lookup (priv->launchables,
+ as_launchable_kind_to_string (kind));
+}
+
+/**
+ * gs_app_set_launchable:
+ * @app: a #GsApp
+ * @kind: a #AsLaunchableKind, e.g. %AS_LAUNCHABLE_KIND_DESKTOP_ID
+ * @launchable: a way to launch, e.g. "org.gnome.Sysprof2.desktop"
+ *
+ * Sets a launchable of a specific type.
+ *
+ * Since: 3.28
+ **/
+void
+gs_app_set_launchable (GsApp *app, AsLaunchableKind kind, const gchar *launchable)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_hash_table_insert (priv->launchables,
+ g_strdup (as_launchable_kind_to_string (kind)),
+ g_strdup (launchable));
+}
+
+/**
+ * gs_app_get_license:
+ * @app: a #GsApp
+ *
+ * Gets the project license of the application.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_license (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->license;
+}
+
+/**
+ * gs_app_get_license_is_free:
+ * @app: a #GsApp
+ *
+ * Returns if the application is free software.
+ *
+ * Returns: %TRUE if the application is free software
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_get_license_is_free (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+ return priv->license_is_free;
+}
+
+static gboolean
+gs_app_get_license_token_is_nonfree (const gchar *token)
+{
+ /* grammar */
+ if (g_strcmp0 (token, "(") == 0)
+ return FALSE;
+ if (g_strcmp0 (token, ")") == 0)
+ return FALSE;
+
+ /* a token, but still nonfree */
+ if (g_str_has_prefix (token, "@LicenseRef-proprietary"))
+ return TRUE;
+
+ /* if it has a prefix, assume it is free */
+ return token[0] != '@';
+}
+
+/**
+ * gs_app_set_license:
+ * @app: a #GsApp
+ * @quality: a #GsAppQuality, e.g. %GS_APP_QUALITY_NORMAL
+ * @license: a SPDX license string, e.g. "GPL-3.0 AND LGPL-2.0+"
+ *
+ * Sets the project licenses used in the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_license (GsApp *app, GsAppQuality quality, const gchar *license)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ guint i;
+ g_auto(GStrv) tokens = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* only save this if the data is sufficiently high quality */
+ if (quality <= priv->license_quality)
+ return;
+ if (license == NULL)
+ return;
+ priv->license_quality = quality;
+
+ /* assume free software until we find a nonfree SPDX token */
+ priv->license_is_free = TRUE;
+ tokens = as_utils_spdx_license_tokenize (license);
+ for (i = 0; tokens[i] != NULL; i++) {
+ if (g_strcmp0 (tokens[i], "&") == 0 ||
+ g_strcmp0 (tokens[i], "+") == 0 ||
+ g_strcmp0 (tokens[i], "|") == 0)
+ continue;
+ if (gs_app_get_license_token_is_nonfree (tokens[i])) {
+ priv->license_is_free = FALSE;
+ break;
+ }
+ }
+ _g_set_str (&priv->license, license);
+}
+
+/**
+ * gs_app_get_summary_missing:
+ * @app: a #GsApp
+ *
+ * Gets the one-line summary to use when this application is missing.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_summary_missing (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->summary_missing;
+}
+
+/**
+ * gs_app_set_summary_missing:
+ * @app: a #GsApp
+ * @summary_missing: a string, or %NULL
+ *
+ * Sets the one-line summary to use when this application is missing.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_summary_missing (GsApp *app, const gchar *summary_missing)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_str (&priv->summary_missing, summary_missing);
+}
+
+/**
+ * gs_app_get_menu_path:
+ * @app: a #GsApp
+ *
+ * Returns the menu path which is an array of path elements.
+ * The resulting array is an internal structure and must not be
+ * modified or freed.
+ *
+ * Returns: a %NULL-terminated array of strings
+ *
+ * Since: 3.22
+ **/
+gchar **
+gs_app_get_menu_path (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->menu_path;
+}
+
+/**
+ * gs_app_set_menu_path:
+ * @app: a #GsApp
+ * @menu_path: a %NULL-terminated array of strings
+ *
+ * Sets the new menu path. The menu path is an array of path elements.
+ * This function creates a deep copy of the path.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_menu_path (GsApp *app, gchar **menu_path)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_strv (&priv->menu_path, menu_path);
+}
+
+/**
+ * gs_app_get_origin:
+ * @app: a #GsApp
+ *
+ * Gets the origin for the application, e.g. "fedora".
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_origin (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->origin;
+}
+
+/**
+ * gs_app_set_origin:
+ * @app: a #GsApp
+ * @origin: a string, or %NULL
+ *
+ * The origin is the original source of the application e.g. "fedora-updates"
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_origin (GsApp *app, const gchar *origin)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* same */
+ if (g_strcmp0 (origin, priv->origin) == 0)
+ return;
+
+ /* trying to change */
+ if (priv->origin != NULL && origin != NULL) {
+ g_warning ("automatically prevented from changing "
+ "origin on %s from %s to %s!",
+ gs_app_get_unique_id_unlocked (app),
+ priv->origin, origin);
+ return;
+ }
+
+ g_free (priv->origin);
+ priv->origin = g_strdup (origin);
+
+ /* no longer valid */
+ priv->unique_id_valid = FALSE;
+}
+
+/**
+ * gs_app_get_origin_appstream:
+ * @app: a #GsApp
+ *
+ * Gets the appstream origin for the application, e.g. "fedora".
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.28
+ **/
+const gchar *
+gs_app_get_origin_appstream (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->origin_appstream;
+}
+
+/**
+ * gs_app_set_origin_appstream:
+ * @app: a #GsApp
+ * @origin_appstream: a string, or %NULL
+ *
+ * The appstream origin is the appstream source of the application e.g. "fedora"
+ *
+ * Since: 3.28
+ **/
+void
+gs_app_set_origin_appstream (GsApp *app, const gchar *origin_appstream)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* same */
+ if (g_strcmp0 (origin_appstream, priv->origin_appstream) == 0)
+ return;
+
+ g_free (priv->origin_appstream);
+ priv->origin_appstream = g_strdup (origin_appstream);
+}
+
+/**
+ * gs_app_get_origin_hostname:
+ * @app: a #GsApp
+ *
+ * Gets the hostname of the origin used to install the application, e.g.
+ * "fedoraproject.org" or "sdk.gnome.org".
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_origin_hostname (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->origin_hostname;
+}
+
+/**
+ * gs_app_set_origin_hostname:
+ * @app: a #GsApp
+ * @origin_hostname: a string, or %NULL
+ *
+ * The origin is the hostname of the source used to install the application
+ * e.g. "fedoraproject.org"
+ *
+ * You can also use a full URL as @origin_hostname and this will be parsed and
+ * the hostname extracted. This process will also remove any unnecessary DNS
+ * prefixes like "download" or "mirrors".
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_origin_hostname (GsApp *app, const gchar *origin_hostname)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_autoptr(SoupURI) uri = NULL;
+ guint i;
+ const gchar *prefixes[] = { "download.", "mirrors.", NULL };
+
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* same */
+ if (g_strcmp0 (origin_hostname, priv->origin_hostname) == 0)
+ return;
+ g_free (priv->origin_hostname);
+
+ /* use libsoup to convert a URL */
+ uri = soup_uri_new (origin_hostname);
+ if (uri != NULL)
+ origin_hostname = soup_uri_get_host (uri);
+
+ /* remove some common prefixes */
+ for (i = 0; prefixes[i] != NULL; i++) {
+ if (g_str_has_prefix (origin_hostname, prefixes[i]))
+ origin_hostname += strlen (prefixes[i]);
+ }
+
+ /* fallback for localhost */
+ if (g_strcmp0 (origin_hostname, "") == 0)
+ origin_hostname = "localhost";
+
+ /* success */
+ priv->origin_hostname = g_strdup (origin_hostname);
+}
+
+/**
+ * gs_app_add_screenshot:
+ * @app: a #GsApp
+ * @screenshot: a #AsScreenshot
+ *
+ * Adds a screenshot to the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_screenshot (GsApp *app, AsScreenshot *screenshot)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (AS_IS_SCREENSHOT (screenshot));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_ptr_array_add (priv->screenshots, g_object_ref (screenshot));
+}
+
+/**
+ * gs_app_get_screenshots:
+ * @app: a #GsApp
+ *
+ * Gets the list of screenshots.
+ *
+ * Returns: (element-type AsScreenshot) (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_screenshots (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->screenshots;
+}
+
+/**
+ * gs_app_get_update_version:
+ * @app: a #GsApp
+ *
+ * Gets the newest update version.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_update_version (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->update_version;
+}
+
+/**
+ * gs_app_get_update_version_ui:
+ * @app: a #GsApp
+ *
+ * Gets the update version for the UI.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_update_version_ui (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+
+ /* work out the two version numbers */
+ if (priv->update_version != NULL &&
+ priv->update_version_ui == NULL) {
+ gs_app_ui_versions_populate (app);
+ }
+
+ return priv->update_version_ui;
+}
+
+static void
+gs_app_set_update_version_internal (GsApp *app, const gchar *update_version)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ if (_g_set_str (&priv->update_version, update_version))
+ gs_app_ui_versions_invalidate (app);
+}
+
+/**
+ * gs_app_set_update_version:
+ * @app: a #GsApp
+ * @update_version: a string, e.g. "0.1.2.3"
+ *
+ * Sets the new version number of the update.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_update_version (GsApp *app, const gchar *update_version)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ gs_app_set_update_version_internal (app, update_version);
+ gs_app_queue_notify (app, obj_props[PROP_VERSION]);
+}
+
+/**
+ * gs_app_get_update_details:
+ * @app: a #GsApp
+ *
+ * Gets the multi-line description for the update.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_update_details (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->update_details;
+}
+
+/**
+ * gs_app_set_update_details:
+ * @app: a #GsApp
+ * @update_details: a string
+ *
+ * Sets the multi-line description for the update.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_update_details (GsApp *app, const gchar *update_details)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_str (&priv->update_details, update_details);
+}
+
+/**
+ * gs_app_get_update_urgency:
+ * @app: a #GsApp
+ *
+ * Gets the update urgency.
+ *
+ * Returns: a #AsUrgencyKind, or %AS_URGENCY_KIND_UNKNOWN for unset
+ *
+ * Since: 3.22
+ **/
+AsUrgencyKind
+gs_app_get_update_urgency (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), AS_URGENCY_KIND_UNKNOWN);
+ return priv->update_urgency;
+}
+
+/**
+ * gs_app_set_update_urgency:
+ * @app: a #GsApp
+ * @update_urgency: a #AsUrgencyKind
+ *
+ * Sets the update urgency.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_update_urgency (GsApp *app, AsUrgencyKind update_urgency)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ if (update_urgency == priv->update_urgency)
+ return;
+ priv->update_urgency = update_urgency;
+}
+
+/**
+ * gs_app_get_management_plugin:
+ * @app: a #GsApp
+ *
+ * Gets the management plugin.
+ * This is some metadata about the application which is used to work out
+ * which plugin should handle the install, remove or upgrade actions.
+ *
+ * Typically plugins will just set this to the plugin name using
+ * gs_plugin_get_name().
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_management_plugin (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->management_plugin;
+}
+
+/**
+ * gs_app_set_management_plugin:
+ * @app: a #GsApp
+ * @management_plugin: a string, or %NULL, e.g. "fwupd"
+ *
+ * The management plugin is the plugin that can handle doing install and remove
+ * operations on the #GsApp.
+ * Typical values include "packagekit" and "flatpak"
+ *
+ * It is an error to attempt to change the management plugin once it has been
+ * previously set or to try to use this function on a wildcard application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_management_plugin (GsApp *app, const gchar *management_plugin)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* plugins cannot adopt wildcard packages */
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD)) {
+ g_warning ("plugins should not set the management plugin on "
+ "%s to %s -- create a new GsApp in refine()!",
+ gs_app_get_unique_id_unlocked (app),
+ management_plugin);
+ return;
+ }
+
+ /* same */
+ if (g_strcmp0 (priv->management_plugin, management_plugin) == 0)
+ return;
+
+ /* trying to change */
+ if (priv->management_plugin != NULL && management_plugin != NULL) {
+ g_warning ("automatically prevented from changing "
+ "management plugin on %s from %s to %s!",
+ gs_app_get_unique_id_unlocked (app),
+ priv->management_plugin,
+ management_plugin);
+ return;
+ }
+
+ g_free (priv->management_plugin);
+ priv->management_plugin = g_strdup (management_plugin);
+}
+
+/**
+ * gs_app_get_rating:
+ * @app: a #GsApp
+ *
+ * Gets the percentage rating of the application, where 100 is 5 stars.
+ *
+ * Returns: a percentage, or -1 for unset
+ *
+ * Since: 3.22
+ **/
+gint
+gs_app_get_rating (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), -1);
+ return priv->rating;
+}
+
+/**
+ * gs_app_set_rating:
+ * @app: a #GsApp
+ * @rating: a percentage, or -1 for invalid
+ *
+ * Gets the percentage rating of the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_rating (GsApp *app, gint rating)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (rating == priv->rating)
+ return;
+ priv->rating = rating;
+ gs_app_queue_notify (app, obj_props[PROP_RATING]);
+}
+
+/**
+ * gs_app_get_review_ratings:
+ * @app: a #GsApp
+ *
+ * Gets the review ratings.
+ *
+ * Returns: (element-type guint32) (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GArray *
+gs_app_get_review_ratings (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->review_ratings;
+}
+
+/**
+ * gs_app_set_review_ratings:
+ * @app: a #GsApp
+ * @review_ratings: (element-type guint32): a list
+ *
+ * Sets the review ratings.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_review_ratings (GsApp *app, GArray *review_ratings)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_array (&priv->review_ratings, review_ratings);
+}
+
+/**
+ * gs_app_get_reviews:
+ * @app: a #GsApp
+ *
+ * Gets all the user-submitted reviews for the application.
+ *
+ * Returns: (element-type AsReview) (transfer none): the list of reviews
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_reviews (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->reviews;
+}
+
+/**
+ * gs_app_add_review:
+ * @app: a #GsApp
+ * @review: a #AsReview
+ *
+ * Adds a user-submitted review to the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_review (GsApp *app, AsReview *review)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (AS_IS_REVIEW (review));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_ptr_array_add (priv->reviews, g_object_ref (review));
+}
+
+/**
+ * gs_app_remove_review:
+ * @app: a #GsApp
+ * @review: a #AsReview
+ *
+ * Removes a user-submitted review to the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_remove_review (GsApp *app, AsReview *review)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_ptr_array_remove (priv->reviews, review);
+}
+
+/**
+ * gs_app_get_provides:
+ * @app: a #GsApp
+ *
+ * Gets all the provides for the application.
+ *
+ * Returns: (element-type AsProvide) (transfer none): the list of provides
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_provides (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->provides;
+}
+
+/**
+ * gs_app_add_provide:
+ * @app: a #GsApp
+ * @provide: a #AsProvide
+ *
+ * Adds a provide to the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_provide (GsApp *app, AsProvide *provide)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (AS_IS_PROVIDE (provide));
+ locker = g_mutex_locker_new (&priv->mutex);
+ g_ptr_array_add (priv->provides, g_object_ref (provide));
+}
+
+/**
+ * gs_app_get_size_download:
+ * @app: A #GsApp
+ *
+ * Gets the size of the total download needed to either install an available
+ * application, or update an already installed one.
+ *
+ * If there is a runtime not yet installed then this is also added.
+ *
+ * Returns: number of bytes, 0 for unknown, or %GS_APP_SIZE_UNKNOWABLE for invalid
+ *
+ * Since: 3.22
+ **/
+guint64
+gs_app_get_size_download (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ guint64 sz;
+
+ g_return_val_if_fail (GS_IS_APP (app), G_MAXUINT64);
+
+ /* this app */
+ sz = priv->size_download;
+
+ /* add the runtime if this is not installed */
+ if (priv->runtime != NULL) {
+ if (gs_app_get_state (priv->runtime) == AS_APP_STATE_AVAILABLE)
+ sz += gs_app_get_size_installed (priv->runtime);
+ }
+
+ /* add related apps */
+ for (guint i = 0; i < gs_app_list_length (priv->related); i++) {
+ GsApp *app_related = gs_app_list_index (priv->related, i);
+ sz += gs_app_get_size_download (app_related);
+ }
+
+ return sz;
+}
+
+/**
+ * gs_app_set_size_download:
+ * @app: a #GsApp
+ * @size_download: size in bytes, or %GS_APP_SIZE_UNKNOWABLE for invalid
+ *
+ * Sets the download size of the application, not including any
+ * required runtime.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_size_download (GsApp *app, guint64 size_download)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ if (size_download == priv->size_download)
+ return;
+ priv->size_download = size_download;
+}
+
+/**
+ * gs_app_get_size_installed:
+ * @app: a #GsApp
+ *
+ * Gets the size on disk, either for an existing application of one that could
+ * be installed.
+ *
+ * Returns: size in bytes, 0 for unknown, or %GS_APP_SIZE_UNKNOWABLE for invalid.
+ *
+ * Since: 3.22
+ **/
+guint64
+gs_app_get_size_installed (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ guint64 sz;
+
+ g_return_val_if_fail (GS_IS_APP (app), G_MAXUINT64);
+
+ /* this app */
+ sz = priv->size_installed;
+
+ /* add related apps */
+ for (guint i = 0; i < gs_app_list_length (priv->related); i++) {
+ GsApp *app_related = gs_app_list_index (priv->related, i);
+ sz += gs_app_get_size_installed (app_related);
+ }
+
+ return sz;
+}
+
+/**
+ * gs_app_set_size_installed:
+ * @app: a #GsApp
+ * @size_installed: size in bytes, or %GS_APP_SIZE_UNKNOWABLE for invalid
+ *
+ * Sets the installed size of the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_size_installed (GsApp *app, guint64 size_installed)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ if (size_installed == priv->size_installed)
+ return;
+ priv->size_installed = size_installed;
+}
+
+/**
+ * gs_app_get_metadata_item:
+ * @app: a #GsApp
+ * @key: a string, e.g. "fwupd::device-id"
+ *
+ * Gets some metadata for the application.
+ * Is is expected that plugins namespace any plugin-specific metadata,
+ * for example `fwupd::device-id`.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_app_get_metadata_item (GsApp *app, const gchar *key)
+{
+ GVariant *tmp;
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+ tmp = gs_app_get_metadata_variant (app, key);
+ if (tmp == NULL)
+ return NULL;
+ return g_variant_get_string (tmp, NULL);
+}
+
+/**
+ * gs_app_set_metadata:
+ * @app: a #GsApp
+ * @key: a string, e.g. "fwupd::DeviceID"
+ * @value: a string, e.g. "fubar"
+ *
+ * Sets some metadata for the application.
+ * Is is expected that plugins namespace any plugin-specific metadata.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_metadata (GsApp *app, const gchar *key, const gchar *value)
+{
+ g_autoptr(GVariant) tmp = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (key != NULL);
+ if (value != NULL)
+ tmp = g_variant_new_string (value);
+ gs_app_set_metadata_variant (app, key, tmp);
+}
+
+/**
+ * gs_app_get_metadata_variant:
+ * @app: a #GsApp
+ * @key: a string, e.g. "fwupd::device-id"
+ *
+ * Gets some metadata for the application.
+ * Is is expected that plugins namespace any plugin-specific metadata.
+ *
+ * Returns: a string, or %NULL for unset
+ *
+ * Since: 3.26
+ **/
+GVariant *
+gs_app_get_metadata_variant (GsApp *app, const gchar *key)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+ return g_hash_table_lookup (priv->metadata, key);
+}
+
+/**
+ * gs_app_set_metadata_variant:
+ * @app: a #GsApp
+ * @key: a string, e.g. "fwupd::DeviceID"
+ * @value: a #GVariant
+ *
+ * Sets some metadata for the application.
+ * Is is expected that plugins namespace any plugin-specific metadata,
+ * for example `fwupd::device-id`.
+ *
+ * Since: 3.26
+ **/
+void
+gs_app_set_metadata_variant (GsApp *app, const gchar *key, GVariant *value)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ GVariant *found;
+
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* if no value, then remove the key */
+ if (value == NULL) {
+ g_hash_table_remove (priv->metadata, key);
+ return;
+ }
+
+ /* check we're not overwriting */
+ found = g_hash_table_lookup (priv->metadata, key);
+ if (found != NULL) {
+ if (g_variant_equal (found, value))
+ return;
+ if (g_variant_type_equal (g_variant_get_type (value), G_VARIANT_TYPE_STRING) &&
+ g_variant_type_equal (g_variant_get_type (found), G_VARIANT_TYPE_STRING)) {
+ g_debug ("tried overwriting %s key %s from %s to %s",
+ priv->id, key,
+ g_variant_get_string (found, NULL),
+ g_variant_get_string (value, NULL));
+ } else {
+ g_debug ("tried overwriting %s key %s (%s->%s)",
+ priv->id, key,
+ g_variant_get_type_string (found),
+ g_variant_get_type_string (value));
+ }
+ return;
+ }
+ g_hash_table_insert (priv->metadata, g_strdup (key), g_variant_ref (value));
+}
+
+/**
+ * gs_app_get_addons:
+ * @app: a #GsApp
+ *
+ * Gets the list of addons for the application.
+ *
+ * Returns: (transfer none): a list of addons
+ *
+ * Since: 3.22
+ **/
+GsAppList *
+gs_app_get_addons (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->addons;
+}
+
+/**
+ * gs_app_add_addon:
+ * @app: a #GsApp
+ * @addon: a #GsApp
+ *
+ * Adds an addon to the list of application addons.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_addon (GsApp *app, GsApp *addon)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (GS_IS_APP (addon));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+ gs_app_list_add (priv->addons, addon);
+}
+
+/**
+ * gs_app_remove_addon:
+ * @app: a #GsApp
+ * @addon: a #GsApp
+ *
+ * Removes an addon from the list of application addons.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_remove_addon (GsApp *app, GsApp *addon)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (GS_IS_APP (addon));
+ locker = g_mutex_locker_new (&priv->mutex);
+ gs_app_list_remove (priv->addons, addon);
+}
+
+/**
+ * gs_app_get_related:
+ * @app: a #GsApp
+ *
+ * Gets any related applications.
+ *
+ * Returns: (transfer none): a list of applications
+ *
+ * Since: 3.22
+ **/
+GsAppList *
+gs_app_get_related (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->related;
+}
+
+/**
+ * gs_app_add_related:
+ * @app: a #GsApp
+ * @app2: a #GsApp
+ *
+ * Adds a related application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_related (GsApp *app, GsApp *app2)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ GsAppPrivate *priv2 = gs_app_get_instance_private (app2);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (GS_IS_APP (app2));
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* if the app is updatable-live and any related app is not then
+ * degrade to the offline state */
+ if (priv->state == AS_APP_STATE_UPDATABLE_LIVE &&
+ priv2->state == AS_APP_STATE_UPDATABLE)
+ priv->state = priv2->state;
+
+ gs_app_list_add (priv->related, app2);
+}
+
+/**
+ * gs_app_get_history:
+ * @app: a #GsApp
+ *
+ * Gets the history of this application.
+ *
+ * Returns: (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GsAppList *
+gs_app_get_history (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->history;
+}
+
+/**
+ * gs_app_add_history:
+ * @app: a #GsApp
+ * @app2: a #GsApp
+ *
+ * Adds a history item for this package.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_history (GsApp *app, GsApp *app2)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (GS_IS_APP (app2));
+ locker = g_mutex_locker_new (&priv->mutex);
+ gs_app_list_add (priv->history, app2);
+}
+
+/**
+ * gs_app_get_install_date:
+ * @app: a #GsApp
+ *
+ * Gets the date that an application was installed.
+ *
+ * Returns: A UNIX epoch, or 0 for unset
+ *
+ * Since: 3.22
+ **/
+guint64
+gs_app_get_install_date (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), 0);
+ return priv->install_date;
+}
+
+/**
+ * gs_app_set_install_date:
+ * @app: a #GsApp
+ * @install_date: an epoch, or %GS_APP_INSTALL_DATE_UNKNOWN
+ *
+ * Sets the date that an application was installed.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_install_date (GsApp *app, guint64 install_date)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ if (install_date == priv->install_date)
+ return;
+ priv->install_date = install_date;
+}
+
+/**
+ * gs_app_is_installed:
+ * @app: a #GsApp
+ *
+ * Gets whether the app is installed or not.
+ *
+ * Returns: %TRUE if the app is installed, %FALSE otherwise.
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_is_installed (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+ return (priv->state == AS_APP_STATE_INSTALLED) ||
+ (priv->state == AS_APP_STATE_UPDATABLE) ||
+ (priv->state == AS_APP_STATE_UPDATABLE_LIVE) ||
+ (priv->state == AS_APP_STATE_REMOVING);
+}
+
+/**
+ * gs_app_is_updatable:
+ * @app: a #GsApp
+ *
+ * Gets whether the app is updatable or not.
+ *
+ * Returns: %TRUE if the app is updatable, %FALSE otherwise.
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_is_updatable (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+ if (priv->kind == AS_APP_KIND_OS_UPGRADE)
+ return TRUE;
+ return (priv->state == AS_APP_STATE_UPDATABLE) ||
+ (priv->state == AS_APP_STATE_UPDATABLE_LIVE);
+}
+
+/**
+ * gs_app_get_categories:
+ * @app: a #GsApp
+ *
+ * Gets the list of categories for an application.
+ *
+ * Returns: (element-type utf8) (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_categories (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->categories;
+}
+
+/**
+ * gs_app_has_category:
+ * @app: a #GsApp
+ * @category: a category ID, e.g. "AudioVideo"
+ *
+ * Checks if the application is in a specific category.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_has_category (GsApp *app, const gchar *category)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ const gchar *tmp;
+ guint i;
+
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+
+ /* find the category */
+ for (i = 0; i < priv->categories->len; i++) {
+ tmp = g_ptr_array_index (priv->categories, i);
+ if (g_strcmp0 (tmp, category) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * gs_app_set_categories:
+ * @app: a #GsApp
+ * @categories: a set of categories
+ *
+ * Set the list of categories for an application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_categories (GsApp *app, GPtrArray *categories)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (categories != NULL);
+ locker = g_mutex_locker_new (&priv->mutex);
+ _g_set_ptr_array (&priv->categories, categories);
+}
+
+/**
+ * gs_app_add_category:
+ * @app: a #GsApp
+ * @category: a category ID, e.g. "AudioVideo"
+ *
+ * Adds a category ID to an application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_category (GsApp *app, const gchar *category)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (category != NULL);
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (gs_app_has_category (app, category))
+ return;
+ g_ptr_array_add (priv->categories, g_strdup (category));
+}
+
+/**
+ * gs_app_remove_category:
+ * @app: a #GsApp
+ * @category: a category ID, e.g. "AudioVideo"
+ *
+ * Removes an category ID from an application, it exists.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.24
+ **/
+gboolean
+gs_app_remove_category (GsApp *app, const gchar *category)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ const gchar *tmp;
+ guint i;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ for (i = 0; i < priv->categories->len; i++) {
+ tmp = g_ptr_array_index (priv->categories, i);
+ if (g_strcmp0 (tmp, category) != 0)
+ continue;
+ g_ptr_array_remove_index_fast (priv->categories, i);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * gs_app_set_is_update_downloaded:
+ * @app: a #GsApp
+ * @is_update_downloaded: Whether a new update is already downloaded locally
+ *
+ * Sets if the new update is already downloaded for the app.
+ *
+ * Since: 3.36
+ **/
+void
+gs_app_set_is_update_downloaded (GsApp *app, gboolean is_update_downloaded)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ priv->is_update_downloaded = is_update_downloaded;
+}
+
+/**
+ * gs_app_get_is_update_downloaded:
+ * @app: a #GsApp
+ *
+ * Gets if the new update is already downloaded for the app and
+ * is locally available.
+ *
+ * Returns: (element-type gboolean): Whether a new update for the #GsApp is already downloaded.
+ *
+ * Since: 3.36
+ **/
+gboolean
+gs_app_get_is_update_downloaded (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+ return priv->is_update_downloaded;
+}
+
+/**
+ * gs_app_get_key_colors:
+ * @app: a #GsApp
+ *
+ * Gets the key colors used in the application icon.
+ *
+ * Returns: (element-type GdkRGBA) (transfer none): a list
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_app_get_key_colors (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+ return priv->key_colors;
+}
+
+/**
+ * gs_app_set_key_colors:
+ * @app: a #GsApp
+ * @key_colors: (element-type GdkRGBA): a set of key colors
+ *
+ * Sets the key colors used in the application icon.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_key_colors (GsApp *app, GPtrArray *key_colors)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (key_colors != NULL);
+ locker = g_mutex_locker_new (&priv->mutex);
+ if (_g_set_ptr_array (&priv->key_colors, key_colors))
+ gs_app_queue_notify (app, obj_props[PROP_KEY_COLORS]);
+}
+
+/**
+ * gs_app_add_key_color:
+ * @app: a #GsApp
+ * @key_color: a #GdkRGBA
+ *
+ * Adds a key colors used in the application icon.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_key_color (GsApp *app, GdkRGBA *key_color)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (key_color != NULL);
+ g_ptr_array_add (priv->key_colors, gdk_rgba_copy (key_color));
+ gs_app_queue_notify (app, obj_props[PROP_KEY_COLORS]);
+}
+
+/**
+ * gs_app_add_kudo:
+ * @app: a #GsApp
+ * @kudo: a #GsAppKudo, e.g. %GS_APP_KUDO_MY_LANGUAGE
+ *
+ * Adds a kudo to the application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_kudo (GsApp *app, GsAppKudo kudo)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ if (kudo & GS_APP_KUDO_SANDBOXED_SECURE)
+ kudo |= GS_APP_KUDO_SANDBOXED;
+ priv->kudos |= kudo;
+}
+
+/**
+ * gs_app_remove_kudo:
+ * @app: a #GsApp
+ * @kudo: a #GsAppKudo, e.g. %GS_APP_KUDO_MY_LANGUAGE
+ *
+ * Removes a kudo from the application.
+ *
+ * Since: 3.30
+ **/
+void
+gs_app_remove_kudo (GsApp *app, GsAppKudo kudo)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ priv->kudos &= ~kudo;
+}
+
+/**
+ * gs_app_has_kudo:
+ * @app: a #GsApp
+ * @kudo: a #GsAppKudo, e.g. %GS_APP_KUDO_MY_LANGUAGE
+ *
+ * Finds out if a kudo has been awarded by the application.
+ *
+ * Returns: %TRUE if the app has the specified kudo
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_has_kudo (GsApp *app, GsAppKudo kudo)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+ return (priv->kudos & kudo) > 0;
+}
+
+/**
+ * gs_app_get_kudos:
+ * @app: a #GsApp
+ *
+ * Gets all the kudos the application has been awarded.
+ *
+ * Returns: the kudos, as a bitfield
+ *
+ * Since: 3.22
+ **/
+guint64
+gs_app_get_kudos (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), 0);
+ return priv->kudos;
+}
+
+/**
+ * gs_app_get_kudos_percentage:
+ * @app: a #GsApp
+ *
+ * Gets the kudos, as a percentage value.
+ *
+ * Returns: a percentage, with 0 for no kudos and a maximum of 100.
+ *
+ * Since: 3.22
+ **/
+guint
+gs_app_get_kudos_percentage (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ guint percentage = 0;
+
+ g_return_val_if_fail (GS_IS_APP (app), 0);
+
+ if ((priv->kudos & GS_APP_KUDO_MY_LANGUAGE) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_RECENT_RELEASE) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_FEATURED_RECOMMENDED) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_MODERN_TOOLKIT) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_SEARCH_PROVIDER) > 0)
+ percentage += 10;
+ if ((priv->kudos & GS_APP_KUDO_INSTALLS_USER_DOCS) > 0)
+ percentage += 10;
+ if ((priv->kudos & GS_APP_KUDO_USES_NOTIFICATIONS) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_HAS_KEYWORDS) > 0)
+ percentage += 5;
+ if ((priv->kudos & GS_APP_KUDO_HAS_SCREENSHOTS) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_HIGH_CONTRAST) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_HI_DPI_ICON) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_SANDBOXED) > 0)
+ percentage += 20;
+ if ((priv->kudos & GS_APP_KUDO_SANDBOXED_SECURE) > 0)
+ percentage += 20;
+
+ /* popular apps should be at *least* 50% */
+ if ((priv->kudos & GS_APP_KUDO_POPULAR) > 0)
+ percentage = MAX (percentage, 50);
+
+ return MIN (percentage, 100);
+}
+
+/**
+ * gs_app_get_to_be_installed:
+ * @app: a #GsApp
+ *
+ * Gets if the application is queued for installation.
+ *
+ * This is only set for addons when the user has selected some addons to be
+ * installed before installing the main application.
+ * Plugins should check all the addons for this property when installing
+ * main applications so that the chosen set of addons is also installed at the
+ * same time. This is never set when applications do not have addons.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_get_to_be_installed (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+
+ return priv->to_be_installed;
+}
+
+/**
+ * gs_app_set_to_be_installed:
+ * @app: a #GsApp
+ * @to_be_installed: if the app is due to be installed
+ *
+ * Sets if the application is queued for installation.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_to_be_installed (GsApp *app, gboolean to_be_installed)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+
+ priv->to_be_installed = to_be_installed;
+}
+
+/**
+ * gs_app_has_quirk:
+ * @app: a #GsApp
+ * @quirk: a #GsAppQuirk, e.g. %GS_APP_QUIRK_COMPULSORY
+ *
+ * Finds out if an application has a specific quirk.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_app_has_quirk (GsApp *app, GsAppQuirk quirk)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), FALSE);
+
+ return (priv->quirk & quirk) > 0;
+}
+
+/**
+ * gs_app_add_quirk:
+ * @app: a #GsApp
+ * @quirk: a #GsAppQuirk, e.g. %GS_APP_QUIRK_COMPULSORY
+ *
+ * Adds a quirk to an application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_add_quirk (GsApp *app, GsAppQuirk quirk)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ /* same */
+ if ((priv->quirk & quirk) > 0)
+ return;
+
+ locker = g_mutex_locker_new (&priv->mutex);
+ priv->quirk |= quirk;
+ gs_app_queue_notify (app, obj_props[PROP_QUIRK]);
+}
+
+/**
+ * gs_app_remove_quirk:
+ * @app: a #GsApp
+ * @quirk: a #GsAppQuirk, e.g. %GS_APP_QUIRK_COMPULSORY
+ *
+ * Removes a quirk from an application.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_remove_quirk (GsApp *app, GsAppQuirk quirk)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_return_if_fail (GS_IS_APP (app));
+
+ /* same */
+ if ((priv->quirk & quirk) == 0)
+ return;
+
+ locker = g_mutex_locker_new (&priv->mutex);
+ priv->quirk &= ~quirk;
+ gs_app_queue_notify (app, obj_props[PROP_QUIRK]);
+}
+
+/**
+ * gs_app_set_match_value:
+ * @app: a #GsApp
+ * @match_value: a value
+ *
+ * Set a match quality value, where higher values correspond to a
+ * "better" search match, and should be shown above lower results.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_match_value (GsApp *app, guint match_value)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ priv->match_value = match_value;
+}
+
+/**
+ * gs_app_get_match_value:
+ * @app: a #GsApp
+ *
+ * Get a match quality value, where higher values correspond to a
+ * "better" search match, and should be shown above lower results.
+ *
+ * Note: This value is only valid when processing the result set
+ * and may be overwritten on subsequent searches if the plugin is using
+ * a cache.
+ *
+ * Returns: a value, where higher is better
+ *
+ * Since: 3.22
+ **/
+guint
+gs_app_get_match_value (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), 0);
+ return priv->match_value;
+}
+
+/**
+ * gs_app_set_priority:
+ * @app: a #GsApp
+ * @priority: a value
+ *
+ * Set a priority value.
+ *
+ * Since: 3.22
+ **/
+void
+gs_app_set_priority (GsApp *app, guint priority)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_if_fail (GS_IS_APP (app));
+ priv->priority = priority;
+}
+
+/**
+ * gs_app_get_priority:
+ * @app: a #GsApp
+ *
+ * Get a priority value, where higher values will be chosen where
+ * multiple #GsApp's match a specific rule.
+ *
+ * Returns: a value, where higher is better
+ *
+ * Since: 3.22
+ **/
+guint
+gs_app_get_priority (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_return_val_if_fail (GS_IS_APP (app), 0);
+ return priv->priority;
+}
+
+/**
+ * gs_app_get_cancellable:
+ * @app: a #GsApp
+ *
+ * Get a cancellable to be used with operations related to the #GsApp. This is a
+ * way for views to be able to cancel an on-going operation. If the #GCancellable
+ * is canceled, it will be unreferenced and renewed before returning it, i.e. the
+ * cancellable object will always be ready to use for new operations. So be sure
+ * to keep a reference to it if you do more than just passing the cancellable to
+ * a process.
+ *
+ * Returns: a #GCancellable
+ *
+ * Since: 3.28
+ **/
+GCancellable *
+gs_app_get_cancellable (GsApp *app)
+{
+ g_autoptr(GCancellable) cancellable = NULL;
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ if (priv->cancellable == NULL || g_cancellable_is_cancelled (priv->cancellable)) {
+ cancellable = g_cancellable_new ();
+ g_set_object (&priv->cancellable, cancellable);
+ }
+ return priv->cancellable;
+}
+
+/**
+ * gs_app_get_pending_action:
+ * @app: a #GsApp
+ *
+ * Get the pending action for this #GsApp, or %NULL if no action is pending.
+ *
+ * Returns: the #GsAppAction of the @app.
+ **/
+GsPluginAction
+gs_app_get_pending_action (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+ return priv->pending_action;
+}
+
+/**
+ * gs_app_set_pending_action:
+ * @app: a #GsApp
+ * @action: a #GsPluginAction
+ *
+ * Set an action that is pending on this #GsApp.
+ **/
+void
+gs_app_set_pending_action (GsApp *app,
+ GsPluginAction action)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+ gs_app_set_pending_action_internal (app, action);
+}
+
+static void
+gs_app_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GsApp *app = GS_APP (object);
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ switch (prop_id) {
+ case PROP_ID:
+ g_value_set_string (value, priv->id);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, priv->name);
+ break;
+ case PROP_VERSION:
+ g_value_set_string (value, priv->version);
+ break;
+ case PROP_SUMMARY:
+ g_value_set_string (value, priv->summary);
+ break;
+ case PROP_DESCRIPTION:
+ g_value_set_string (value, priv->description);
+ break;
+ case PROP_RATING:
+ g_value_set_int (value, priv->rating);
+ break;
+ case PROP_KIND:
+ g_value_set_uint (value, priv->kind);
+ break;
+ case PROP_STATE:
+ g_value_set_uint (value, priv->state);
+ break;
+ case PROP_PROGRESS:
+ g_value_set_uint (value, priv->progress);
+ break;
+ case PROP_CAN_CANCEL_INSTALLATION:
+ g_value_set_boolean (value, priv->allow_cancel);
+ break;
+ case PROP_INSTALL_DATE:
+ g_value_set_uint64 (value, priv->install_date);
+ break;
+ case PROP_QUIRK:
+ g_value_set_uint64 (value, priv->quirk);
+ break;
+ case PROP_KEY_COLORS:
+ g_value_set_boxed (value, priv->key_colors);
+ break;
+ case PROP_IS_UPDATE_DOWNLOADED:
+ g_value_set_boolean (value, priv->is_update_downloaded);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ GsApp *app = GS_APP (object);
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ switch (prop_id) {
+ case PROP_ID:
+ gs_app_set_id (app, g_value_get_string (value));
+ break;
+ case PROP_NAME:
+ gs_app_set_name (app,
+ GS_APP_QUALITY_UNKNOWN,
+ g_value_get_string (value));
+ break;
+ case PROP_VERSION:
+ gs_app_set_version (app, g_value_get_string (value));
+ break;
+ case PROP_SUMMARY:
+ gs_app_set_summary (app,
+ GS_APP_QUALITY_UNKNOWN,
+ g_value_get_string (value));
+ break;
+ case PROP_DESCRIPTION:
+ gs_app_set_description (app,
+ GS_APP_QUALITY_UNKNOWN,
+ g_value_get_string (value));
+ break;
+ case PROP_RATING:
+ gs_app_set_rating (app, g_value_get_int (value));
+ break;
+ case PROP_KIND:
+ gs_app_set_kind (app, g_value_get_uint (value));
+ break;
+ case PROP_STATE:
+ gs_app_set_state_internal (app, g_value_get_uint (value));
+ break;
+ case PROP_PROGRESS:
+ gs_app_set_progress (app, g_value_get_uint (value));
+ break;
+ case PROP_CAN_CANCEL_INSTALLATION:
+ priv->allow_cancel = g_value_get_boolean (value);
+ break;
+ case PROP_INSTALL_DATE:
+ gs_app_set_install_date (app, g_value_get_uint64 (value));
+ break;
+ case PROP_QUIRK:
+ priv->quirk = g_value_get_uint64 (value);
+ break;
+ case PROP_KEY_COLORS:
+ gs_app_set_key_colors (app, g_value_get_boxed (value));
+ break;
+ case PROP_IS_UPDATE_DOWNLOADED:
+ gs_app_set_is_update_downloaded (app, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_dispose (GObject *object)
+{
+ GsApp *app = GS_APP (object);
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ g_clear_object (&priv->runtime);
+
+ g_clear_pointer (&priv->addons, g_object_unref);
+ g_clear_pointer (&priv->history, g_object_unref);
+ g_clear_pointer (&priv->related, g_object_unref);
+ g_clear_pointer (&priv->screenshots, g_ptr_array_unref);
+ g_clear_pointer (&priv->review_ratings, g_array_unref);
+ g_clear_pointer (&priv->reviews, g_ptr_array_unref);
+ g_clear_pointer (&priv->provides, g_ptr_array_unref);
+ g_clear_pointer (&priv->icons, g_ptr_array_unref);
+
+ G_OBJECT_CLASS (gs_app_parent_class)->dispose (object);
+}
+
+static void
+gs_app_finalize (GObject *object)
+{
+ GsApp *app = GS_APP (object);
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ g_mutex_clear (&priv->mutex);
+ g_free (priv->id);
+ g_free (priv->unique_id);
+ g_free (priv->branch);
+ g_free (priv->name);
+ g_hash_table_unref (priv->urls);
+ g_hash_table_unref (priv->launchables);
+ g_free (priv->license);
+ g_strfreev (priv->menu_path);
+ g_free (priv->origin);
+ g_free (priv->origin_appstream);
+ g_free (priv->origin_hostname);
+ g_ptr_array_unref (priv->sources);
+ g_ptr_array_unref (priv->source_ids);
+ g_free (priv->project_group);
+ g_free (priv->developer_name);
+ g_free (priv->agreement);
+ g_free (priv->version);
+ g_free (priv->version_ui);
+ g_free (priv->summary);
+ g_free (priv->summary_missing);
+ g_free (priv->description);
+ g_free (priv->update_version);
+ g_free (priv->update_version_ui);
+ g_free (priv->update_details);
+ g_free (priv->management_plugin);
+ g_hash_table_unref (priv->metadata);
+ g_ptr_array_unref (priv->categories);
+ g_ptr_array_unref (priv->key_colors);
+ g_clear_object (&priv->cancellable);
+ if (priv->local_file != NULL)
+ g_object_unref (priv->local_file);
+ if (priv->content_rating != NULL)
+ g_object_unref (priv->content_rating);
+ if (priv->pixbuf != NULL)
+ g_object_unref (priv->pixbuf);
+ if (priv->action_screenshot != NULL)
+ g_object_unref (priv->action_screenshot);
+
+ G_OBJECT_CLASS (gs_app_parent_class)->finalize (object);
+}
+
+static void
+gs_app_class_init (GsAppClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = gs_app_dispose;
+ object_class->finalize = gs_app_finalize;
+ object_class->get_property = gs_app_get_property;
+ object_class->set_property = gs_app_set_property;
+
+ /**
+ * GsApp:id:
+ */
+ obj_props[PROP_ID] = g_param_spec_string ("id", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:name:
+ */
+ obj_props[PROP_NAME] = g_param_spec_string ("name", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:version:
+ */
+ obj_props[PROP_VERSION] = g_param_spec_string ("version", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:summary:
+ */
+ obj_props[PROP_SUMMARY] = g_param_spec_string ("summary", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:description:
+ */
+ obj_props[PROP_DESCRIPTION] = g_param_spec_string ("description", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:rating:
+ */
+ obj_props[PROP_RATING] = g_param_spec_int ("rating", NULL, NULL,
+ -1, 100, -1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:kind:
+ */
+ obj_props[PROP_KIND] = g_param_spec_uint ("kind", NULL, NULL,
+ AS_APP_KIND_UNKNOWN,
+ AS_APP_KIND_LAST,
+ AS_APP_KIND_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:state:
+ */
+ obj_props[PROP_STATE] = g_param_spec_uint ("state", NULL, NULL,
+ AS_APP_STATE_UNKNOWN,
+ AS_APP_STATE_LAST,
+ AS_APP_STATE_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:progress:
+ *
+ * A percentage (0–100, inclusive) indicating the progress through the
+ * current task on this app. The value may otherwise be
+ * %GS_APP_PROGRESS_UNKNOWN if the progress is unknown or has a wide
+ * confidence interval.
+ */
+ obj_props[PROP_PROGRESS] = g_param_spec_uint ("progress", NULL, NULL,
+ 0, GS_APP_PROGRESS_UNKNOWN, GS_APP_PROGRESS_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:allow-cancel:
+ */
+ obj_props[PROP_CAN_CANCEL_INSTALLATION] =
+ g_param_spec_boolean ("allow-cancel", NULL, NULL, TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:install-date:
+ */
+ obj_props[PROP_INSTALL_DATE] = g_param_spec_uint64 ("install-date", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:quirk:
+ */
+ obj_props[PROP_QUIRK] = g_param_spec_uint64 ("quirk", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ /**
+ * GsApp:pending-action:
+ */
+ obj_props[PROP_PENDING_ACTION] = g_param_spec_uint64 ("pending-action", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READABLE);
+
+ /**
+ * GsApp:key-colors:
+ */
+ obj_props[PROP_KEY_COLORS] = g_param_spec_boxed ("key-colors", NULL, NULL,
+ G_TYPE_PTR_ARRAY, G_PARAM_READWRITE);
+
+ /**
+ * GsApp:is-update-downloaded:
+ */
+ obj_props[PROP_IS_UPDATE_DOWNLOADED] = g_param_spec_boolean ("is-update-downloaded", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE);
+
+ g_object_class_install_properties (object_class, PROP_LAST, obj_props);
+}
+
+static void
+gs_app_init (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+ priv->rating = -1;
+ priv->sources = g_ptr_array_new_with_free_func (g_free);
+ priv->source_ids = g_ptr_array_new_with_free_func (g_free);
+ priv->categories = g_ptr_array_new_with_free_func (g_free);
+ priv->key_colors = g_ptr_array_new_with_free_func ((GDestroyNotify) gdk_rgba_free);
+ priv->addons = gs_app_list_new ();
+ priv->related = gs_app_list_new ();
+ priv->history = gs_app_list_new ();
+ priv->screenshots = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ priv->reviews = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ priv->provides = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ priv->icons = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ priv->metadata = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ (GDestroyNotify) g_variant_unref);
+ priv->urls = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_free);
+ priv->launchables = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_free);
+ priv->allow_cancel = TRUE;
+ g_mutex_init (&priv->mutex);
+}
+
+/**
+ * gs_app_new:
+ * @id: an application ID, or %NULL, e.g. "org.gnome.Software.desktop"
+ *
+ * Creates a new application object.
+ *
+ * The ID should only be set when the application ID (with optional prefix) is
+ * known; it is perfectly valid to use gs_app_new() with an @id of %NULL, and
+ * then relying on another plugin to set the @id using gs_app_set_id() based on
+ * some other information.
+ *
+ * For instance, a #GsApp is created with no ID when returning results from the
+ * packagekit plugin, but with the default source name set as the package name.
+ * The source name is read by the appstream plugin, and if matched in the
+ * AppStream XML the correct ID is set, along with other higher quality data
+ * like the application icon and long description.
+ *
+ * Returns: a new #GsApp
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_app_new (const gchar *id)
+{
+ GsApp *app;
+ app = g_object_new (GS_TYPE_APP,
+ "id", id,
+ NULL);
+ return GS_APP (app);
+}
+
+/**
+ * gs_app_set_from_unique_id:
+ * @app: a #GsApp
+ * @unique_id: an application unique ID, e.g.
+ * `system/flatpak/gnome/desktop/org.gnome.Software.desktop/master`
+ *
+ * Sets details on an application object.
+ *
+ * The unique ID will be parsed to set some information in the application such
+ * as the scope, bundle kind, id, etc.
+ *
+ * Since: 3.26
+ **/
+void
+gs_app_set_from_unique_id (GsApp *app, const gchar *unique_id)
+{
+ g_auto(GStrv) split = NULL;
+
+ g_return_if_fail (GS_IS_APP (app));
+ g_return_if_fail (unique_id != NULL);
+
+ split = g_strsplit (unique_id, "/", -1);
+ if (g_strv_length (split) != 6)
+ return;
+ if (g_strcmp0 (split[0], "*") != 0)
+ gs_app_set_scope (app, as_app_scope_from_string (split[0]));
+ if (g_strcmp0 (split[1], "*") != 0)
+ gs_app_set_bundle_kind (app, as_bundle_kind_from_string (split[1]));
+ if (g_strcmp0 (split[2], "*") != 0)
+ gs_app_set_origin (app, split[2]);
+ if (g_strcmp0 (split[3], "*") != 0)
+ gs_app_set_kind (app, as_app_kind_from_string (split[3]));
+ if (g_strcmp0 (split[4], "*") != 0)
+ gs_app_set_id (app, split[4]);
+ if (g_strcmp0 (split[5], "*") != 0)
+ gs_app_set_branch (app, split[5]);
+}
+
+/**
+ * gs_app_new_from_unique_id:
+ * @unique_id: an application unique ID, e.g.
+ * `system/flatpak/gnome/desktop/org.gnome.Software.desktop/master`
+ *
+ * Creates a new application object.
+ *
+ * The unique ID will be parsed to set some information in the application such
+ * as the scope, bundle kind, id, etc. Unlike gs_app_new(), it cannot take a
+ * %NULL argument.
+ *
+ * Returns: a new #GsApp
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_app_new_from_unique_id (const gchar *unique_id)
+{
+ GsApp *app;
+ g_return_val_if_fail (unique_id != NULL, NULL);
+ app = gs_app_new (NULL);
+ gs_app_set_from_unique_id (app, unique_id);
+ return app;
+}
+
+/**
+ * gs_app_get_origin_ui:
+ * @app: a #GsApp
+ *
+ * Gets the package origin that's suitable for UI use.
+ *
+ * Returns: The package origin for UI use
+ *
+ * Since: 3.32
+ **/
+gchar *
+gs_app_get_origin_ui (GsApp *app)
+{
+ /* use the distro name for official packages */
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_PROVENANCE)) {
+ g_autoptr(GsOsRelease) os_release = gs_os_release_new (NULL);
+ if (os_release != NULL)
+ return g_strdup (gs_os_release_get_name (os_release));
+ }
+
+ /* use "Local file" rather than the filename for local files */
+ if (gs_app_get_state (app) == AS_APP_STATE_AVAILABLE_LOCAL) {
+ /* TRANSLATORS: this is a locally downloaded package */
+ return g_strdup (_("Local file"));
+ }
+
+ /* capitalize "Flathub" and "Flathub Beta" */
+ if (g_strcmp0 (gs_app_get_origin (app), "flathub") == 0) {
+ return g_strdup ("Flathub");
+ } else if (g_strcmp0 (gs_app_get_origin (app), "flathub-beta") == 0) {
+ return g_strdup ("Flathub Beta");
+ }
+
+ /* fall back to origin */
+ return g_strdup (gs_app_get_origin (app));
+}
+
+/**
+ * gs_app_get_packaging_format:
+ * @app: a #GsApp
+ *
+ * Gets the packaging format, e.g. 'RPM' or 'Flatpak'.
+ *
+ * Returns: The packaging format
+ *
+ * Since: 3.32
+ **/
+gchar *
+gs_app_get_packaging_format (GsApp *app)
+{
+ AsBundleKind bundle_kind;
+ const gchar *bundle_kind_ui;
+ const gchar *packaging_format;
+
+ /* does the app have packaging format set? */
+ packaging_format = gs_app_get_metadata_item (app, "GnomeSoftware::PackagingFormat");
+ if (packaging_format != NULL)
+ return g_strdup (packaging_format);
+
+ /* fall back to bundle kind */
+ bundle_kind = gs_app_get_bundle_kind (app);
+ switch (bundle_kind) {
+ case AS_BUNDLE_KIND_UNKNOWN:
+ bundle_kind_ui = NULL;
+ break;
+ case AS_BUNDLE_KIND_LIMBA:
+ bundle_kind_ui = "Limba";
+ break;
+ case AS_BUNDLE_KIND_FLATPAK:
+ bundle_kind_ui = "Flatpak";
+ break;
+ case AS_BUNDLE_KIND_SNAP:
+ bundle_kind_ui = "Snap";
+ break;
+ case AS_BUNDLE_KIND_PACKAGE:
+ bundle_kind_ui = _("Package");
+ break;
+ case AS_BUNDLE_KIND_CABINET:
+ bundle_kind_ui = "Cabinet";
+ break;
+ case AS_BUNDLE_KIND_APPIMAGE:
+ bundle_kind_ui = "AppImage";
+ break;
+ default:
+ g_warning ("unhandled bundle kind %s", as_bundle_kind_to_string (bundle_kind));
+ bundle_kind_ui = as_bundle_kind_to_string (bundle_kind);
+ }
+
+ return g_strdup (bundle_kind_ui);
+}
+
+/**
+ * gs_app_subsume_metadata:
+ * @app: a #GsApp
+ * @donor: another #GsApp
+ *
+ * Copies any metadata from @donor to @app.
+ *
+ * Since: 3.32
+ **/
+void
+gs_app_subsume_metadata (GsApp *app, GsApp *donor)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (donor);
+ g_autoptr(GList) keys = g_hash_table_get_keys (priv->metadata);
+ for (GList *l = keys; l != NULL; l = l->next) {
+ const gchar *key = l->data;
+ GVariant *tmp = gs_app_get_metadata_variant (donor, key);
+ if (gs_app_get_metadata_variant (app, key) != NULL)
+ continue;
+ gs_app_set_metadata_variant (app, key, tmp);
+ }
+}
+
+GsAppPermissions
+gs_app_get_permissions (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ return priv->permissions;
+}
+
+void
+gs_app_set_permissions (GsApp *app, GsAppPermissions permissions)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ priv->permissions = permissions;
+}
+
+GsAppPermissions
+gs_app_get_update_permissions (GsApp *app)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ return priv->update_permissions;
+}
+
+void
+gs_app_set_update_permissions (GsApp *app, GsAppPermissions update_permissions)
+{
+ GsAppPrivate *priv = gs_app_get_instance_private (app);
+
+ priv->update_permissions = update_permissions;
+}
diff --git a/lib/gs-app.h b/lib/gs-app.h
new file mode 100644
index 0000000..4c199dc
--- /dev/null
+++ b/lib/gs-app.h
@@ -0,0 +1,405 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+#include <gdk/gdk.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <appstream-glib.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_APP (gs_app_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsApp, gs_app, GS, APP, GObject)
+
+struct _GsAppClass
+{
+ GObjectClass parent_class;
+ void (*to_string) (GsApp *app,
+ GString *str);
+ gpointer padding[30];
+};
+
+/**
+ * GsAppKudo:
+ * @GS_APP_KUDO_MY_LANGUAGE: Localised in my language
+ * @GS_APP_KUDO_RECENT_RELEASE: Released recently
+ * @GS_APP_KUDO_FEATURED_RECOMMENDED: Chosen for the front page
+ * @GS_APP_KUDO_MODERN_TOOLKIT: Uses a modern toolkit
+ * @GS_APP_KUDO_SEARCH_PROVIDER: Provides a search provider
+ * @GS_APP_KUDO_INSTALLS_USER_DOCS: Installs user docs
+ * @GS_APP_KUDO_USES_NOTIFICATIONS: Registers notifications
+ * @GS_APP_KUDO_HAS_KEYWORDS: Has at least 1 keyword
+ * @GS_APP_KUDO_HAS_SCREENSHOTS: Supplies screenshots
+ * @GS_APP_KUDO_POPULAR: Is popular
+ * @GS_APP_KUDO_HIGH_CONTRAST: Installs a high contrast icon
+ * @GS_APP_KUDO_HI_DPI_ICON: Installs a HiDPI icon
+ * @GS_APP_KUDO_SANDBOXED: Application is sandboxed
+ * @GS_APP_KUDO_SANDBOXED_SECURE: Application is sandboxed securely
+ *
+ * Any awards given to the application.
+ **/
+typedef enum {
+ GS_APP_KUDO_MY_LANGUAGE = 1 << 0,
+ GS_APP_KUDO_RECENT_RELEASE = 1 << 1,
+ GS_APP_KUDO_FEATURED_RECOMMENDED = 1 << 2,
+ GS_APP_KUDO_MODERN_TOOLKIT = 1 << 3,
+ GS_APP_KUDO_SEARCH_PROVIDER = 1 << 4,
+ GS_APP_KUDO_INSTALLS_USER_DOCS = 1 << 5,
+ GS_APP_KUDO_USES_NOTIFICATIONS = 1 << 6,
+ GS_APP_KUDO_HAS_KEYWORDS = 1 << 7,
+ GS_APP_KUDO_HAS_SCREENSHOTS = 1 << 9,
+ GS_APP_KUDO_POPULAR = 1 << 10,
+ GS_APP_KUDO_HIGH_CONTRAST = 1 << 13,
+ GS_APP_KUDO_HI_DPI_ICON = 1 << 14,
+ GS_APP_KUDO_SANDBOXED = 1 << 15,
+ GS_APP_KUDO_SANDBOXED_SECURE = 1 << 16,
+ /*< private >*/
+ GS_APP_KUDO_LAST
+} GsAppKudo;
+
+/**
+ * GsAppQuirk:
+ * @GS_APP_QUIRK_NONE: No special attributes
+ * @GS_APP_QUIRK_PROVENANCE: Installed by OS vendor
+ * @GS_APP_QUIRK_COMPULSORY: Cannot be removed
+ * @GS_APP_QUIRK_HAS_SOURCE: Has a source to allow staying up-to-date
+ * @GS_APP_QUIRK_IS_WILDCARD: Matches applications from any plugin
+ * @GS_APP_QUIRK_NEEDS_REBOOT: A reboot is required after the action
+ * @GS_APP_QUIRK_NOT_REVIEWABLE: The app is not reviewable
+ * @GS_APP_QUIRK_HAS_SHORTCUT: The app has a shortcut in the system
+ * @GS_APP_QUIRK_NOT_LAUNCHABLE: The app is not launchable (run-able)
+ * @GS_APP_QUIRK_NEEDS_USER_ACTION: The component requires some kind of user action
+ * @GS_APP_QUIRK_IS_PROXY: Is a proxy app that operates on other applications
+ * @GS_APP_QUIRK_REMOVABLE_HARDWARE: The device is unusable whilst the action is performed
+ * @GS_APP_QUIRK_DEVELOPER_VERIFIED: The app developer has been verified
+ * @GS_APP_QUIRK_PARENTAL_FILTER: The app has been filtered by parental controls, and should be hidden
+ * @GS_APP_QUIRK_NEW_PERMISSIONS: The update requires new permissions
+ * @GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE: The app cannot be run by the current user due to parental controls, and should not be launchable
+ * @GS_APP_QUIRK_HIDE_FROM_SEARCH: The app should not be shown in search results
+ * @GS_APP_QUIRK_HIDE_EVERYWHERE: The app should not be shown anywhere (it’s blocklisted)
+ * @GS_APP_QUIRK_DO_NOT_AUTO_UPDATE: The app should not be automatically updated
+ *
+ * The application attributes.
+ **/
+typedef enum {
+ GS_APP_QUIRK_NONE = 0, /* Since: 3.32 */
+ GS_APP_QUIRK_PROVENANCE = 1 << 0, /* Since: 3.32 */
+ GS_APP_QUIRK_COMPULSORY = 1 << 1, /* Since: 3.32 */
+ GS_APP_QUIRK_HAS_SOURCE = 1 << 2, /* Since: 3.32 */
+ GS_APP_QUIRK_IS_WILDCARD = 1 << 3, /* Since: 3.32 */
+ GS_APP_QUIRK_NEEDS_REBOOT = 1 << 4, /* Since: 3.32 */
+ GS_APP_QUIRK_NOT_REVIEWABLE = 1 << 5, /* Since: 3.32 */
+ GS_APP_QUIRK_HAS_SHORTCUT = 1 << 6, /* Since: 3.32 */
+ GS_APP_QUIRK_NOT_LAUNCHABLE = 1 << 7, /* Since: 3.32 */
+ GS_APP_QUIRK_NEEDS_USER_ACTION = 1 << 8, /* Since: 3.32 */
+ GS_APP_QUIRK_IS_PROXY = 1 << 9, /* Since: 3.32 */
+ GS_APP_QUIRK_REMOVABLE_HARDWARE = 1 << 10, /* Since: 3.32 */
+ GS_APP_QUIRK_DEVELOPER_VERIFIED = 1 << 11, /* Since: 3.32 */
+ GS_APP_QUIRK_PARENTAL_FILTER = 1 << 12, /* Since: 3.32 */
+ GS_APP_QUIRK_NEW_PERMISSIONS = 1 << 13, /* Since: 3.32 */
+ GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE = 1 << 14, /* Since: 3.32 */
+ GS_APP_QUIRK_HIDE_FROM_SEARCH = 1 << 15, /* Since: 3.32 */
+ GS_APP_QUIRK_HIDE_EVERYWHERE = 1 << 16, /* Since: 3.36 */
+ GS_APP_QUIRK_DO_NOT_AUTO_UPDATE = 1 << 17, /* Since: 3.36 */
+ /*< private >*/
+ GS_APP_QUIRK_LAST
+} GsAppQuirk;
+
+#define GS_APP_INSTALL_DATE_UNSET 0
+#define GS_APP_INSTALL_DATE_UNKNOWN 1 /* 1s past the epoch */
+#define GS_APP_SIZE_UNKNOWABLE G_MAXUINT64
+
+/**
+ * GsAppQuality:
+ * @GS_APP_QUALITY_UNKNOWN: The quality value is unknown
+ * @GS_APP_QUALITY_LOWEST: Lowest quality
+ * @GS_APP_QUALITY_NORMAL: Normal quality
+ * @GS_APP_QUALITY_HIGHEST: Highest quality
+ *
+ * Any awards given to the application.
+ **/
+typedef enum {
+ GS_APP_QUALITY_UNKNOWN,
+ GS_APP_QUALITY_LOWEST,
+ GS_APP_QUALITY_NORMAL,
+ GS_APP_QUALITY_HIGHEST,
+ /*< private >*/
+ GS_APP_QUALITY_LAST
+} GsAppQuality;
+
+typedef enum {
+ GS_APP_PERMISSIONS_UNKNOWN = 0,
+ GS_APP_PERMISSIONS_NONE = 1 << 0,
+ GS_APP_PERMISSIONS_NETWORK = 1 << 1,
+ GS_APP_PERMISSIONS_SYSTEM_BUS = 1 << 2,
+ GS_APP_PERMISSIONS_SESSION_BUS = 1 << 3,
+ GS_APP_PERMISSIONS_DEVICES = 1 << 4,
+ GS_APP_PERMISSIONS_HOME_FULL = 1 << 5,
+ GS_APP_PERMISSIONS_HOME_READ = 1 << 6,
+ GS_APP_PERMISSIONS_FILESYSTEM_FULL = 1 << 7,
+ GS_APP_PERMISSIONS_FILESYSTEM_READ = 1 << 8,
+ GS_APP_PERMISSIONS_DOWNLOADS_FULL = 1 << 9,
+ GS_APP_PERMISSIONS_DOWNLOADS_READ = 1 << 10,
+ GS_APP_PERMISSIONS_SETTINGS = 1 << 11,
+ GS_APP_PERMISSIONS_X11 = 1 << 12,
+ GS_APP_PERMISSIONS_ESCAPE_SANDBOX = 1 << 13,
+ /*< private >*/
+ GS_APP_PERMISSIONS_LAST
+} GsAppPermissions;
+
+#define LIMITED_PERMISSIONS (GS_APP_PERMISSIONS_SETTINGS | \
+ GS_APP_PERMISSIONS_NETWORK | \
+ GS_APP_PERMISSIONS_DOWNLOADS_READ | \
+ GS_APP_PERMISSIONS_DOWNLOADS_FULL)
+#define MEDIUM_PERMISSIONS (LIMITED_PERMISSIONS | \
+ GS_APP_PERMISSIONS_X11)
+
+/**
+ * GS_APP_PROGRESS_UNKNOWN:
+ *
+ * A value returned by gs_app_get_progress() if the app’s progress is unknown
+ * or has a wide confidence interval. Typically this would be represented in the
+ * UI using a pulsing progress bar or spinner.
+ *
+ * Since: 3.38
+ */
+#define GS_APP_PROGRESS_UNKNOWN G_MAXUINT
+
+GsApp *gs_app_new (const gchar *id);
+G_DEPRECATED_FOR(gs_app_set_from_unique_id)
+GsApp *gs_app_new_from_unique_id (const gchar *unique_id);
+void gs_app_set_from_unique_id (GsApp *app,
+ const gchar *unique_id);
+gchar *gs_app_to_string (GsApp *app);
+void gs_app_to_string_append (GsApp *app,
+ GString *str);
+
+const gchar *gs_app_get_id (GsApp *app);
+void gs_app_set_id (GsApp *app,
+ const gchar *id);
+AsAppKind gs_app_get_kind (GsApp *app);
+void gs_app_set_kind (GsApp *app,
+ AsAppKind kind);
+AsAppState gs_app_get_state (GsApp *app);
+void gs_app_set_state (GsApp *app,
+ AsAppState state);
+AsAppScope gs_app_get_scope (GsApp *app);
+void gs_app_set_scope (GsApp *app,
+ AsAppScope scope);
+AsBundleKind gs_app_get_bundle_kind (GsApp *app);
+void gs_app_set_bundle_kind (GsApp *app,
+ AsBundleKind bundle_kind);
+void gs_app_set_state_recover (GsApp *app);
+guint gs_app_get_progress (GsApp *app);
+void gs_app_set_progress (GsApp *app,
+ guint percentage);
+gboolean gs_app_get_allow_cancel (GsApp *app);
+void gs_app_set_allow_cancel (GsApp *app,
+ gboolean allow_cancel);
+const gchar *gs_app_get_unique_id (GsApp *app);
+const gchar *gs_app_get_branch (GsApp *app);
+void gs_app_set_branch (GsApp *app,
+ const gchar *branch);
+const gchar *gs_app_get_name (GsApp *app);
+void gs_app_set_name (GsApp *app,
+ GsAppQuality quality,
+ const gchar *name);
+const gchar *gs_app_get_source_default (GsApp *app);
+void gs_app_add_source (GsApp *app,
+ const gchar *source);
+GPtrArray *gs_app_get_sources (GsApp *app);
+void gs_app_set_sources (GsApp *app,
+ GPtrArray *sources);
+const gchar *gs_app_get_source_id_default (GsApp *app);
+void gs_app_add_source_id (GsApp *app,
+ const gchar *source_id);
+GPtrArray *gs_app_get_source_ids (GsApp *app);
+void gs_app_set_source_ids (GsApp *app,
+ GPtrArray *source_ids);
+void gs_app_clear_source_ids (GsApp *app);
+const gchar *gs_app_get_project_group (GsApp *app);
+void gs_app_set_project_group (GsApp *app,
+ const gchar *project_group);
+const gchar *gs_app_get_developer_name (GsApp *app);
+void gs_app_set_developer_name (GsApp *app,
+ const gchar *developer_name);
+const gchar *gs_app_get_agreement (GsApp *app);
+void gs_app_set_agreement (GsApp *app,
+ const gchar *agreement);
+const gchar *gs_app_get_version (GsApp *app);
+const gchar *gs_app_get_version_ui (GsApp *app);
+void gs_app_set_version (GsApp *app,
+ const gchar *version);
+const gchar *gs_app_get_summary (GsApp *app);
+void gs_app_set_summary (GsApp *app,
+ GsAppQuality quality,
+ const gchar *summary);
+const gchar *gs_app_get_summary_missing (GsApp *app);
+void gs_app_set_summary_missing (GsApp *app,
+ const gchar *summary_missing);
+const gchar *gs_app_get_description (GsApp *app);
+void gs_app_set_description (GsApp *app,
+ GsAppQuality quality,
+ const gchar *description);
+const gchar *gs_app_get_url (GsApp *app,
+ AsUrlKind kind);
+void gs_app_set_url (GsApp *app,
+ AsUrlKind kind,
+ const gchar *url);
+const gchar *gs_app_get_launchable (GsApp *app,
+ AsLaunchableKind kind);
+void gs_app_set_launchable (GsApp *app,
+ AsLaunchableKind kind,
+ const gchar *launchable);
+const gchar *gs_app_get_license (GsApp *app);
+gboolean gs_app_get_license_is_free (GsApp *app);
+void gs_app_set_license (GsApp *app,
+ GsAppQuality quality,
+ const gchar *license);
+gchar **gs_app_get_menu_path (GsApp *app);
+void gs_app_set_menu_path (GsApp *app,
+ gchar **menu_path);
+const gchar *gs_app_get_origin (GsApp *app);
+void gs_app_set_origin (GsApp *app,
+ const gchar *origin);
+const gchar *gs_app_get_origin_appstream (GsApp *app);
+void gs_app_set_origin_appstream (GsApp *app,
+ const gchar *origin_appstream);
+const gchar *gs_app_get_origin_hostname (GsApp *app);
+void gs_app_set_origin_hostname (GsApp *app,
+ const gchar *origin_hostname);
+GPtrArray *gs_app_get_screenshots (GsApp *app);
+void gs_app_add_screenshot (GsApp *app,
+ AsScreenshot *screenshot);
+AsScreenshot *gs_app_get_action_screenshot (GsApp *app);
+void gs_app_set_action_screenshot (GsApp *app,
+ AsScreenshot *screenshot);
+const gchar *gs_app_get_update_version (GsApp *app);
+const gchar *gs_app_get_update_version_ui (GsApp *app);
+void gs_app_set_update_version (GsApp *app,
+ const gchar *update_version);
+const gchar *gs_app_get_update_details (GsApp *app);
+void gs_app_set_update_details (GsApp *app,
+ const gchar *update_details);
+AsUrgencyKind gs_app_get_update_urgency (GsApp *app);
+void gs_app_set_update_urgency (GsApp *app,
+ AsUrgencyKind update_urgency);
+const gchar *gs_app_get_management_plugin (GsApp *app);
+void gs_app_set_management_plugin (GsApp *app,
+ const gchar *management_plugin);
+GdkPixbuf *gs_app_get_pixbuf (GsApp *app);
+void gs_app_set_pixbuf (GsApp *app,
+ GdkPixbuf *pixbuf);
+GPtrArray *gs_app_get_icons (GsApp *app);
+void gs_app_add_icon (GsApp *app,
+ AsIcon *icon);
+gboolean gs_app_get_use_drop_shadow (GsApp *app);
+GFile *gs_app_get_local_file (GsApp *app);
+void gs_app_set_local_file (GsApp *app,
+ GFile *local_file);
+AsContentRating *gs_app_get_content_rating (GsApp *app);
+void gs_app_set_content_rating (GsApp *app,
+ AsContentRating *content_rating);
+GsApp *gs_app_get_runtime (GsApp *app);
+void gs_app_set_runtime (GsApp *app,
+ GsApp *runtime);
+const gchar *gs_app_get_metadata_item (GsApp *app,
+ const gchar *key);
+GVariant *gs_app_get_metadata_variant (GsApp *app,
+ const gchar *key);
+void gs_app_set_metadata (GsApp *app,
+ const gchar *key,
+ const gchar *value);
+void gs_app_set_metadata_variant (GsApp *app,
+ const gchar *key,
+ GVariant *value);
+gint gs_app_get_rating (GsApp *app);
+void gs_app_set_rating (GsApp *app,
+ gint rating);
+GArray *gs_app_get_review_ratings (GsApp *app);
+void gs_app_set_review_ratings (GsApp *app,
+ GArray *review_ratings);
+GPtrArray *gs_app_get_reviews (GsApp *app);
+void gs_app_add_review (GsApp *app,
+ AsReview *review);
+void gs_app_remove_review (GsApp *app,
+ AsReview *review);
+GPtrArray *gs_app_get_provides (GsApp *app);
+void gs_app_add_provide (GsApp *app,
+ AsProvide *provide);
+guint64 gs_app_get_size_installed (GsApp *app);
+void gs_app_set_size_installed (GsApp *app,
+ guint64 size_installed);
+guint64 gs_app_get_size_download (GsApp *app);
+void gs_app_set_size_download (GsApp *app,
+ guint64 size_download);
+void gs_app_add_related (GsApp *app,
+ GsApp *app2);
+void gs_app_add_addon (GsApp *app,
+ GsApp *addon);
+void gs_app_add_history (GsApp *app,
+ GsApp *app2);
+guint64 gs_app_get_install_date (GsApp *app);
+void gs_app_set_install_date (GsApp *app,
+ guint64 install_date);
+GPtrArray *gs_app_get_categories (GsApp *app);
+void gs_app_set_categories (GsApp *app,
+ GPtrArray *categories);
+GPtrArray *gs_app_get_key_colors (GsApp *app);
+void gs_app_set_key_colors (GsApp *app,
+ GPtrArray *key_colors);
+void gs_app_add_key_color (GsApp *app,
+ GdkRGBA *key_color);
+void gs_app_set_is_update_downloaded (GsApp *app,
+ gboolean is_update_downloaded);
+gboolean gs_app_get_is_update_downloaded (GsApp *app);
+gboolean gs_app_has_category (GsApp *app,
+ const gchar *category);
+void gs_app_add_category (GsApp *app,
+ const gchar *category);
+gboolean gs_app_remove_category (GsApp *app,
+ const gchar *category);
+void gs_app_add_kudo (GsApp *app,
+ GsAppKudo kudo);
+void gs_app_remove_kudo (GsApp *app,
+ GsAppKudo kudo);
+gboolean gs_app_has_kudo (GsApp *app,
+ GsAppKudo kudo);
+guint64 gs_app_get_kudos (GsApp *app);
+guint gs_app_get_kudos_percentage (GsApp *app);
+gboolean gs_app_get_to_be_installed (GsApp *app);
+void gs_app_set_to_be_installed (GsApp *app,
+ gboolean to_be_installed);
+void gs_app_set_match_value (GsApp *app,
+ guint match_value);
+guint gs_app_get_match_value (GsApp *app);
+
+gboolean gs_app_has_quirk (GsApp *app,
+ GsAppQuirk quirk);
+void gs_app_add_quirk (GsApp *app,
+ GsAppQuirk quirk);
+void gs_app_remove_quirk (GsApp *app,
+ GsAppQuirk quirk);
+gboolean gs_app_is_installed (GsApp *app);
+gboolean gs_app_is_updatable (GsApp *app);
+gchar *gs_app_get_origin_ui (GsApp *app);
+gchar *gs_app_get_packaging_format (GsApp *app);
+void gs_app_subsume_metadata (GsApp *app,
+ GsApp *donor);
+GsAppPermissions gs_app_get_permissions (GsApp *app);
+void gs_app_set_permissions (GsApp *app,
+ GsAppPermissions permissions);
+GsAppPermissions gs_app_get_update_permissions (GsApp *app);
+void gs_app_set_update_permissions (GsApp *app,
+ GsAppPermissions update_permissions);
+
+G_END_DECLS
diff --git a/lib/gs-autocleanups.h b/lib/gs-autocleanups.h
new file mode 100644
index 0000000..aaba9e7
--- /dev/null
+++ b/lib/gs-autocleanups.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+G_BEGIN_DECLS
+
+#if !GLIB_CHECK_VERSION(2, 61, 1)
+
+/* Backported GRWLock autoptr support for older glib versions */
+
+typedef void GRWLockWriterLocker;
+
+static inline GRWLockWriterLocker *
+g_rw_lock_writer_locker_new (GRWLock *rw_lock)
+{
+ g_rw_lock_writer_lock (rw_lock);
+ return (GRWLockWriterLocker *) rw_lock;
+}
+
+static inline void
+g_rw_lock_writer_locker_free (GRWLockWriterLocker *locker)
+{
+ g_rw_lock_writer_unlock ((GRWLock *) locker);
+}
+
+typedef void GRWLockReaderLocker;
+
+static inline GRWLockReaderLocker *
+g_rw_lock_reader_locker_new (GRWLock *rw_lock)
+{
+ g_rw_lock_reader_lock (rw_lock);
+ return (GRWLockReaderLocker *) rw_lock;
+}
+
+static inline void
+g_rw_lock_reader_locker_free (GRWLockReaderLocker *locker)
+{
+ g_rw_lock_reader_unlock ((GRWLock *) locker);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRWLockWriterLocker, g_rw_lock_writer_locker_free)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRWLockReaderLocker, g_rw_lock_reader_locker_free)
+
+#endif
+
+G_END_DECLS
diff --git a/lib/gs-category-private.h b/lib/gs-category-private.h
new file mode 100644
index 0000000..1c9c292
--- /dev/null
+++ b/lib/gs-category-private.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-category.h"
+
+G_BEGIN_DECLS
+
+void gs_category_sort_children (GsCategory *category);
+void gs_category_set_size (GsCategory *category,
+ guint size);
+gchar *gs_category_to_string (GsCategory *category);
+
+G_END_DECLS
diff --git a/lib/gs-category.c b/lib/gs-category.c
new file mode 100644
index 0000000..9da2c73
--- /dev/null
+++ b/lib/gs-category.c
@@ -0,0 +1,527 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-category
+ * @short_description: An category that contains applications
+ *
+ * This object provides functionality that allows a plugin to create
+ * a tree structure of categories that each contain #GsApp's.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-category-private.h"
+
+struct _GsCategory
+{
+ GObject parent_instance;
+
+ gchar *id;
+ gchar *name;
+ gchar *icon;
+ gint score;
+ GPtrArray *desktop_groups;
+ GsCategory *parent;
+ guint size;
+ GPtrArray *children;
+};
+
+G_DEFINE_TYPE (GsCategory, gs_category, G_TYPE_OBJECT)
+
+/**
+ * gs_category_to_string:
+ * @category: a #GsCategory
+ *
+ * Returns a string representation of the category
+ *
+ * Returns: a string
+ *
+ * Since: 3.22
+ **/
+gchar *
+gs_category_to_string (GsCategory *category)
+{
+ guint i;
+ GString *str = g_string_new (NULL);
+ g_string_append_printf (str, "GsCategory[%p]:\n", category);
+ g_string_append_printf (str, " id: %s\n",
+ category->id);
+ if (category->name != NULL) {
+ g_string_append_printf (str, " name: %s\n",
+ category->name);
+ }
+ if (category->icon != NULL) {
+ g_string_append_printf (str, " icon: %s\n",
+ category->icon);
+ }
+ g_string_append_printf (str, " size: %u\n",
+ category->size);
+ g_string_append_printf (str, " desktop-groups: %u\n",
+ category->desktop_groups->len);
+ if (category->parent != NULL) {
+ g_string_append_printf (str, " parent: %s\n",
+ gs_category_get_id (category->parent));
+ }
+ g_string_append_printf (str, " score: %i\n", category->score);
+ if (category->children->len == 0) {
+ g_string_append_printf (str, " children: %u\n",
+ category->children->len);
+ } else {
+ g_string_append (str, " children:\n");
+ for (i = 0; i < category->children->len; i++) {
+ GsCategory *child = g_ptr_array_index (category->children, i);
+ g_string_append_printf (str, " - %s\n",
+ gs_category_get_id (child));
+ }
+ }
+ return g_string_free (str, FALSE);
+}
+
+/**
+ * gs_category_get_size:
+ * @category: a #GsCategory
+ *
+ * Returns how many applications the category could contain.
+ *
+ * NOTE: This may over-estimate the number if duplicate applications are
+ * filtered or core applications are not shown.
+ *
+ * Returns: the number of apps in the category
+ *
+ * Since: 3.22
+ **/
+guint
+gs_category_get_size (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), 0);
+ return category->size;
+}
+
+/**
+ * gs_category_set_size:
+ * @category: a #GsCategory
+ * @size: the number of applications
+ *
+ * Sets the number of applications in the category.
+ * Most plugins do not need to call this function.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_set_size (GsCategory *category, guint size)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ category->size = size;
+}
+
+/**
+ * gs_category_increment_size:
+ * @category: a #GsCategory
+ *
+ * Adds one to the size count if an application is available
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_increment_size (GsCategory *category)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ category->size++;
+}
+
+/**
+ * gs_category_get_id:
+ * @category: a #GsCategory
+ *
+ * Gets the category ID.
+ *
+ * Returns: the string, e.g. "other"
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_category_get_id (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), NULL);
+ return category->id;
+}
+
+/**
+ * gs_category_get_name:
+ * @category: a #GsCategory
+ *
+ * Gets the category name.
+ *
+ * Returns: the string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_category_get_name (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), NULL);
+
+ /* special case, we don't want translations in the plugins */
+ if (g_strcmp0 (category->id, "other") == 0) {
+ /* TRANSLATORS: this is where all applications that don't
+ * fit in other groups are put */
+ return _("Other");
+ }
+ if (g_strcmp0 (category->id, "all") == 0) {
+ /* TRANSLATORS: this is a subcategory matching all the
+ * different apps in the parent category, e.g. "Games" */
+ return _("All");
+ }
+ if (g_strcmp0 (category->id, "featured") == 0) {
+ /* TRANSLATORS: this is a subcategory of featured apps */
+ return _("Featured");
+ }
+
+ return category->name;
+}
+
+/**
+ * gs_category_set_name:
+ * @category: a #GsCategory
+ * @name: a category name, or %NULL
+ *
+ * Sets the category name.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_set_name (GsCategory *category, const gchar *name)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ g_free (category->name);
+ category->name = g_strdup (name);
+}
+
+/**
+ * gs_category_get_icon:
+ * @category: a #GsCategory
+ *
+ * Gets the category icon.
+ *
+ * Returns: the string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_category_get_icon (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), NULL);
+
+ /* special case */
+ if (g_strcmp0 (category->id, "other") == 0)
+ return "emblem-system-symbolic";
+ if (g_strcmp0 (category->id, "all") == 0)
+ return "emblem-default-symbolic";
+ if (g_strcmp0 (category->id, "featured") == 0)
+ return "emblem-favorite-symbolic";
+
+ return category->icon;
+}
+
+/**
+ * gs_category_set_icon:
+ * @category: a #GsCategory
+ * @icon: a category icon, or %NULL
+ *
+ * Sets the category icon.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_set_icon (GsCategory *category, const gchar *icon)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ g_free (category->icon);
+ category->icon = g_strdup (icon);
+}
+
+/**
+ * gs_category_get_score:
+ * @category: a #GsCategory
+ *
+ * Gets if the category score.
+ * Important categories may be shown before other categories, or tagged in a
+ * different way, for example with color or in a different section.
+ *
+ * Returns: the string, or %NULL
+ *
+ * Since: 3.22
+ **/
+gint
+gs_category_get_score (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), FALSE);
+ return category->score;
+}
+
+/**
+ * gs_category_set_score:
+ * @category: a #GsCategory
+ * @score: a category score, or %NULL
+ *
+ * Sets the category score, where larger numbers get sorted before lower
+ * numbers.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_set_score (GsCategory *category, gint score)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ category->score = score;
+}
+
+/**
+ * gs_category_get_desktop_groups:
+ * @category: a #GsCategory
+ *
+ * Gets the list of AppStream groups for the category.
+ *
+ * Returns: (element-type utf8) (transfer none): An array
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_category_get_desktop_groups (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), NULL);
+ return category->desktop_groups;
+}
+
+/**
+ * gs_category_has_desktop_group:
+ * @category: a #GsCategory
+ * @desktop_group: a group of categories found in AppStream, e.g. "AudioVisual::Player"
+ *
+ * Finds out if the category has the specific AppStream desktop group.
+ *
+ * Returns: %TRUE if found, %FALSE otherwise
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_category_has_desktop_group (GsCategory *category, const gchar *desktop_group)
+{
+ guint i;
+
+ g_return_val_if_fail (GS_IS_CATEGORY (category), FALSE);
+ g_return_val_if_fail (desktop_group != NULL, FALSE);
+
+ for (i = 0; i < category->desktop_groups->len; i++) {
+ const gchar *tmp = g_ptr_array_index (category->desktop_groups, i);
+ if (g_strcmp0 (tmp, desktop_group) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * gs_category_add_desktop_group:
+ * @category: a #GsCategory
+ * @desktop_group: a group of categories found in AppStream, e.g. "AudioVisual::Player"
+ *
+ * Adds a desktop group to the category.
+ * A desktop group is a set of category strings that all must exist.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_add_desktop_group (GsCategory *category, const gchar *desktop_group)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ g_return_if_fail (desktop_group != NULL);
+
+ /* add if not already found */
+ if (gs_category_has_desktop_group (category, desktop_group))
+ return;
+ g_ptr_array_add (category->desktop_groups, g_strdup (desktop_group));
+}
+
+/**
+ * gs_category_find_child:
+ * @category: a #GsCategory
+ * @id: a category ID, e.g. "other"
+ *
+ * Find a child category with a specific ID.
+ *
+ * Returns: (transfer none): the #GsCategory, or %NULL
+ *
+ * Since: 3.22
+ **/
+GsCategory *
+gs_category_find_child (GsCategory *category, const gchar *id)
+{
+ GsCategory *tmp;
+ guint i;
+
+ /* find the subcategory */
+ for (i = 0; i < category->children->len; i++) {
+ tmp = GS_CATEGORY (g_ptr_array_index (category->children, i));
+ if (g_strcmp0 (id, gs_category_get_id (tmp)) == 0)
+ return tmp;
+ }
+ return NULL;
+}
+
+/**
+ * gs_category_get_parent:
+ * @category: a #GsCategory
+ *
+ * Gets the parent category.
+ *
+ * Returns: the #GsCategory or %NULL
+ *
+ * Since: 3.22
+ **/
+GsCategory *
+gs_category_get_parent (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), NULL);
+ return category->parent;
+}
+
+/**
+ * gs_category_get_children:
+ * @category: a #GsCategory
+ *
+ * Gets the list if children for a category.
+ *
+ * Return value: (element-type GsApp) (transfer none): A list of children
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_category_get_children (GsCategory *category)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY (category), NULL);
+ return category->children;
+}
+
+/**
+ * gs_category_add_child:
+ * @category: a #GsCategory
+ * @subcategory: a #GsCategory
+ *
+ * Adds a child category to a parent category.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_add_child (GsCategory *category, GsCategory *subcategory)
+{
+ g_return_if_fail (GS_IS_CATEGORY (category));
+ g_return_if_fail (GS_IS_CATEGORY (subcategory));
+
+ /* FIXME: do we need this? */
+ subcategory->parent = category;
+ g_object_add_weak_pointer (G_OBJECT (subcategory->parent),
+ (gpointer *) &subcategory->parent);
+
+ g_ptr_array_add (category->children,
+ g_object_ref (subcategory));
+}
+
+static gchar *
+gs_category_get_sort_key (GsCategory *category)
+{
+ guint sort_order = 5;
+ if (g_strcmp0 (gs_category_get_id (category), "featured") == 0)
+ sort_order = 0;
+ else if (g_strcmp0 (gs_category_get_id (category), "all") == 0)
+ sort_order = 2;
+ else if (g_strcmp0 (gs_category_get_id (category), "other") == 0)
+ sort_order = 9;
+ return g_strdup_printf ("%u:%s",
+ sort_order,
+ gs_category_get_name (category));
+}
+
+static gint
+gs_category_sort_children_cb (gconstpointer a, gconstpointer b)
+{
+ GsCategory *ca = GS_CATEGORY (*(GsCategory **) a);
+ GsCategory *cb = GS_CATEGORY (*(GsCategory **) b);
+ g_autofree gchar *id_a = gs_category_get_sort_key (ca);
+ g_autofree gchar *id_b = gs_category_get_sort_key (cb);
+ return g_strcmp0 (id_a, id_b);
+}
+
+/**
+ * gs_category_sort_children:
+ * @category: a #GsCategory
+ *
+ * Sorts the list of children.
+ *
+ * Since: 3.22
+ **/
+void
+gs_category_sort_children (GsCategory *category)
+{
+ g_ptr_array_sort (category->children,
+ gs_category_sort_children_cb);
+}
+
+static void
+gs_category_finalize (GObject *object)
+{
+ GsCategory *category = GS_CATEGORY (object);
+
+ if (category->parent != NULL)
+ g_object_remove_weak_pointer (G_OBJECT (category->parent),
+ (gpointer *) &category->parent);
+ g_ptr_array_unref (category->children);
+ g_ptr_array_unref (category->desktop_groups);
+ g_free (category->id);
+ g_free (category->name);
+ g_free (category->icon);
+
+ G_OBJECT_CLASS (gs_category_parent_class)->finalize (object);
+}
+
+static void
+gs_category_class_init (GsCategoryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_category_finalize;
+}
+
+static void
+gs_category_init (GsCategory *category)
+{
+ category->children = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ category->desktop_groups = g_ptr_array_new_with_free_func (g_free);
+}
+
+/**
+ * gs_category_new:
+ * @id: an ID, e.g. "all"
+ *
+ * Creates a new category object.
+ *
+ * Returns: the new #GsCategory
+ *
+ * Since: 3.22
+ **/
+GsCategory *
+gs_category_new (const gchar *id)
+{
+ GsCategory *category;
+ category = g_object_new (GS_TYPE_CATEGORY, NULL);
+ category->id = g_strdup (id);
+ return GS_CATEGORY (category);
+}
diff --git a/lib/gs-category.h b/lib/gs-category.h
new file mode 100644
index 0000000..e60bef2
--- /dev/null
+++ b/lib/gs-category.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_CATEGORY (gs_category_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsCategory, gs_category, GS, CATEGORY, GObject)
+
+GsCategory *gs_category_new (const gchar *id);
+const gchar *gs_category_get_id (GsCategory *category);
+GsCategory *gs_category_get_parent (GsCategory *category);
+
+const gchar *gs_category_get_name (GsCategory *category);
+void gs_category_set_name (GsCategory *category,
+ const gchar *name);
+const gchar *gs_category_get_icon (GsCategory *category);
+void gs_category_set_icon (GsCategory *category,
+ const gchar *icon);
+gint gs_category_get_score (GsCategory *category);
+void gs_category_set_score (GsCategory *category,
+ gint score);
+
+GPtrArray *gs_category_get_desktop_groups (GsCategory *category);
+gboolean gs_category_has_desktop_group (GsCategory *category,
+ const gchar *desktop_group);
+void gs_category_add_desktop_group (GsCategory *category,
+ const gchar *desktop_group);
+
+GsCategory *gs_category_find_child (GsCategory *category,
+ const gchar *id);
+GPtrArray *gs_category_get_children (GsCategory *category);
+void gs_category_add_child (GsCategory *category,
+ GsCategory *subcategory);
+
+guint gs_category_get_size (GsCategory *category);
+void gs_category_increment_size (GsCategory *category);
+
+G_END_DECLS
diff --git a/lib/gs-cmd.c b/lib/gs-cmd.c
new file mode 100644
index 0000000..bc01c95
--- /dev/null
+++ b/lib/gs-cmd.c
@@ -0,0 +1,699 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <locale.h>
+
+#include "gnome-software-private.h"
+
+#include "gs-debug.h"
+
+typedef struct {
+ GsPluginLoader *plugin_loader;
+ guint64 refine_flags;
+ guint max_results;
+} GsCmdSelf;
+
+static void
+gs_cmd_show_results_apps (GsAppList *list)
+{
+ for (guint j = 0; j < gs_app_list_length (list); j++) {
+ GsApp *app = gs_app_list_index (list, j);
+ GsAppList *related = gs_app_get_related (app);
+ g_autofree gchar *tmp = gs_app_to_string (app);
+ g_print ("%s\n", tmp);
+ for (guint i = 0; i < gs_app_list_length (related); i++) {
+ g_autofree gchar *tmp_rel = NULL;
+ GsApp *app_rel = GS_APP (gs_app_list_index (related, i));
+ tmp_rel = gs_app_to_string (app_rel);
+ g_print ("\t%s\n", tmp_rel);
+ }
+ }
+}
+
+static gchar *
+gs_cmd_pad_spaces (const gchar *text, guint length)
+{
+ gsize i;
+ GString *str;
+ str = g_string_sized_new (length + 1);
+ g_string_append (str, text);
+ for (i = strlen (text); i < length; i++)
+ g_string_append_c (str, ' ');
+ return g_string_free (str, FALSE);
+}
+
+static void
+gs_cmd_show_results_categories (GPtrArray *list)
+{
+ for (guint i = 0; i < list->len; i++) {
+ GsCategory *cat = GS_CATEGORY (g_ptr_array_index (list, i));
+ GsCategory *parent = gs_category_get_parent (cat);
+ g_autofree gchar *tmp = NULL;
+ if (parent != NULL){
+ g_autofree gchar *id = NULL;
+ id = g_strdup_printf ("%s/%s [%u]",
+ gs_category_get_id (parent),
+ gs_category_get_id (cat),
+ gs_category_get_size (cat));
+ tmp = gs_cmd_pad_spaces (id, 32);
+ g_print ("%s : %s\n",
+ tmp, gs_category_get_name (cat));
+ } else {
+ GPtrArray *subcats = gs_category_get_children (cat);
+ tmp = gs_cmd_pad_spaces (gs_category_get_id (cat), 32);
+ g_print ("%s : %s\n",
+ tmp, gs_category_get_name (cat));
+ gs_cmd_show_results_categories (subcats);
+ }
+ }
+}
+
+static GsPluginRefineFlags
+gs_cmd_refine_flag_from_string (const gchar *flag, GError **error)
+{
+ if (g_strcmp0 (flag, "all") == 0)
+ return G_MAXINT32;
+ if (g_strcmp0 (flag, "license") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE;
+ if (g_strcmp0 (flag, "url") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL;
+ if (g_strcmp0 (flag, "description") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION;
+ if (g_strcmp0 (flag, "size") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE;
+ if (g_strcmp0 (flag, "rating") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING;
+ if (g_strcmp0 (flag, "version") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION;
+ if (g_strcmp0 (flag, "history") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY;
+ if (g_strcmp0 (flag, "setup-action") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION;
+ if (g_strcmp0 (flag, "update-details") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS;
+ if (g_strcmp0 (flag, "origin") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN;
+ if (g_strcmp0 (flag, "related") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED;
+ if (g_strcmp0 (flag, "menu-path") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH;
+ if (g_strcmp0 (flag, "upgrade-removed") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPGRADE_REMOVED;
+ if (g_strcmp0 (flag, "provenance") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE;
+ if (g_strcmp0 (flag, "reviews") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS;
+ if (g_strcmp0 (flag, "review-ratings") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS;
+ if (g_strcmp0 (flag, "key-colors") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS;
+ if (g_strcmp0 (flag, "icon") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON;
+ if (g_strcmp0 (flag, "permissions") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS;
+ if (g_strcmp0 (flag, "origin-hostname") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME;
+ if (g_strcmp0 (flag, "origin-ui") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_UI;
+ if (g_strcmp0 (flag, "runtime") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME;
+ if (g_strcmp0 (flag, "categories") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES;
+ if (g_strcmp0 (flag, "project-group") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP;
+ if (g_strcmp0 (flag, "developer-name") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME;
+ if (g_strcmp0 (flag, "kudos") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS;
+ if (g_strcmp0 (flag, "content-rating") == 0)
+ return GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING;
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "GsPluginRefineFlag '%s' not recognised", flag);
+ return 0;
+}
+
+static guint64
+gs_cmd_parse_refine_flags (const gchar *extra, GError **error)
+{
+ GsPluginRefineFlags tmp;
+ guint i;
+ guint64 refine_flags = GS_PLUGIN_REFINE_FLAGS_DEFAULT;
+ g_auto(GStrv) split = NULL;
+
+ if (extra == NULL)
+ return GS_PLUGIN_REFINE_FLAGS_DEFAULT;
+
+ split = g_strsplit (extra, ",", -1);
+ for (i = 0; split[i] != NULL; i++) {
+ tmp = gs_cmd_refine_flag_from_string (split[i], error);
+ if (tmp == 0)
+ return G_MAXUINT64;
+ refine_flags |= tmp;
+ }
+ return refine_flags;
+}
+
+static guint
+gs_cmd_prompt_for_number (guint maxnum)
+{
+ gint retval;
+ guint answer = 0;
+
+ do {
+ char buffer[64];
+
+ /* swallow the \n at end of line too */
+ if (!fgets (buffer, sizeof (buffer), stdin))
+ break;
+ if (strlen (buffer) == sizeof (buffer) - 1)
+ continue;
+
+ /* get a number */
+ retval = sscanf (buffer, "%u", &answer);
+
+ /* positive */
+ if (retval == 1 && answer > 0 && answer <= maxnum)
+ break;
+
+ /* TRANSLATORS: the user isn't reading the question */
+ g_print (_("Please enter a number from 1 to %u: "), maxnum);
+ } while (TRUE);
+ return answer;
+}
+
+static gboolean
+gs_cmd_action_exec (GsCmdSelf *self, GsPluginAction action, const gchar *name, GError **error)
+{
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) list_filtered = NULL;
+ g_autoptr(GsPluginJob) plugin_job2 = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ gboolean show_installed = TRUE;
+
+ /* ensure set */
+ self->refine_flags |= GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON;
+ self->refine_flags |= GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION;
+
+ /* do search */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", name,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job, NULL, error);
+ if (list == NULL)
+ return FALSE;
+ if (gs_app_list_length (list) == 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "no components matched '%s'",
+ name);
+ return FALSE;
+ }
+
+ /* filter */
+ if (action == GS_PLUGIN_ACTION_INSTALL)
+ show_installed = FALSE;
+ list_filtered = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app_tmp = gs_app_list_index (list, i);
+ if (gs_app_is_installed (app_tmp) == show_installed)
+ gs_app_list_add (list_filtered, app_tmp);
+ }
+
+ /* nothing */
+ if (gs_app_list_length (list_filtered) == 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "no components were in the correct state for '%s %s'",
+ gs_plugin_action_to_string (action), name);
+ return FALSE;
+ }
+
+ /* get one GsApp */
+ if (gs_app_list_length (list_filtered) == 1) {
+ app = g_object_ref (gs_app_list_index (list_filtered, 0));
+ } else {
+ guint idx;
+ /* TRANSLATORS: asking the user to choose an app from a list */
+ g_print ("%s\n", _("Choose an application:"));
+ for (guint i = 0; i < gs_app_list_length (list_filtered); i++) {
+ GsApp *app_tmp = gs_app_list_index (list_filtered, i);
+ g_print ("%u.\t%s\n",
+ i + 1,
+ gs_app_get_unique_id (app_tmp));
+ }
+ idx = gs_cmd_prompt_for_number (gs_app_list_length (list_filtered));
+ app = g_object_ref (gs_app_list_index (list_filtered, idx - 1));
+ }
+
+ /* install */
+ plugin_job2 = gs_plugin_job_newv (action, "app", app, NULL);
+ return gs_plugin_loader_job_action (self->plugin_loader, plugin_job2,
+ NULL, error);
+}
+
+static void
+gs_cmd_self_free (GsCmdSelf *self)
+{
+ if (self->plugin_loader != NULL)
+ g_object_unref (self->plugin_loader);
+ g_free (self);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsCmdSelf, gs_cmd_self_free)
+
+int
+main (int argc, char **argv)
+{
+ g_autoptr(GOptionContext) context = NULL;
+ gboolean prefer_local = FALSE;
+ gboolean ret;
+ gboolean show_results = FALSE;
+ gboolean verbose = FALSE;
+ gint i;
+ guint cache_age = 0;
+ gint repeat = 1;
+ g_auto(GStrv) plugin_blocklist = NULL;
+ g_auto(GStrv) plugin_allowlist = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GPtrArray) categories = NULL;
+ g_autoptr(GsDebug) debug = gs_debug_new ();
+ g_autofree gchar *plugin_blocklist_str = NULL;
+ g_autofree gchar *plugin_allowlist_str = NULL;
+ g_autofree gchar *refine_flags_str = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsCmdSelf) self = g_new0 (GsCmdSelf, 1);
+ const GOptionEntry options[] = {
+ { "show-results", '\0', 0, G_OPTION_ARG_NONE, &show_results,
+ "Show the results for the action", NULL },
+ { "refine-flags", '\0', 0, G_OPTION_ARG_STRING, &refine_flags_str,
+ "Set any refine flags required for the action", NULL },
+ { "repeat", '\0', 0, G_OPTION_ARG_INT, &repeat,
+ "Repeat the action this number of times", NULL },
+ { "cache-age", '\0', 0, G_OPTION_ARG_INT, &cache_age,
+ "Use this maximum cache age in seconds", NULL },
+ { "max-results", '\0', 0, G_OPTION_ARG_INT, &self->max_results,
+ "Return a maximum number of results", NULL },
+ { "prefer-local", '\0', 0, G_OPTION_ARG_NONE, &prefer_local,
+ "Prefer local file sources to AppStream", NULL },
+ { "plugin-blocklist", '\0', 0, G_OPTION_ARG_STRING, &plugin_blocklist_str,
+ "Do not load specific plugins", NULL },
+ { "plugin-allowlist", '\0', 0, G_OPTION_ARG_STRING, &plugin_allowlist_str,
+ "Only load specific plugins", NULL },
+ { "verbose", '\0', 0, G_OPTION_ARG_NONE, &verbose,
+ "Show verbose debugging information", NULL },
+ { NULL}
+ };
+
+ setlocale (LC_ALL, "");
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ gtk_init (&argc, &argv);
+
+ context = g_option_context_new (NULL);
+ g_option_context_set_summary (context, "GNOME Software Test Program");
+ g_option_context_add_main_entries (context, options, NULL);
+ g_option_context_add_group (context, gtk_get_option_group (TRUE));
+ ret = g_option_context_parse (context, &argc, &argv, &error);
+ if (!ret) {
+ g_print ("Failed to parse options: %s\n", error->message);
+ return EXIT_FAILURE;
+ }
+ if (verbose)
+ g_setenv ("GS_DEBUG", "1", TRUE);
+
+ /* prefer local sources */
+ if (prefer_local)
+ g_setenv ("GNOME_SOFTWARE_PREFER_LOCAL", "true", TRUE);
+
+ /* parse any refine flags */
+ self->refine_flags = gs_cmd_parse_refine_flags (refine_flags_str, &error);
+ if (self->refine_flags == G_MAXUINT64) {
+ g_print ("Flag unknown: %s\n", error->message);
+ return EXIT_FAILURE;
+ }
+
+ /* load plugins */
+ self->plugin_loader = gs_plugin_loader_new ();
+ if (g_file_test (LOCALPLUGINDIR, G_FILE_TEST_EXISTS))
+ gs_plugin_loader_add_location (self->plugin_loader, LOCALPLUGINDIR);
+ if (plugin_allowlist_str != NULL)
+ plugin_allowlist = g_strsplit (plugin_allowlist_str, ",", -1);
+ if (plugin_blocklist_str != NULL)
+ plugin_blocklist = g_strsplit (plugin_blocklist_str, ",", -1);
+ ret = gs_plugin_loader_setup (self->plugin_loader,
+ plugin_allowlist,
+ plugin_blocklist,
+ NULL,
+ &error);
+ if (!ret) {
+ g_print ("Failed to setup plugins: %s\n", error->message);
+ return EXIT_FAILURE;
+ }
+ gs_plugin_loader_dump_state (self->plugin_loader);
+
+ /* ensure that at least some metadata of any age is present, and also
+ * spin up the plugins enough as to prime caches */
+ if (g_getenv ("GS_CMD_NO_INITIAL_REFRESH") == NULL) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) G_MAXUINT,
+ NULL);
+ ret = gs_plugin_loader_job_action (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (!ret) {
+ g_print ("Failed to refresh plugins: %s\n", error->message);
+ return EXIT_FAILURE;
+ }
+ }
+
+ /* do action */
+ if (argc == 2 && g_strcmp0 (argv[1], "installed") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_INSTALLED,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 3 && g_strcmp0 (argv[1], "search") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", argv[2],
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job, NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 3 && g_strcmp0 (argv[1], "get-alternates") == 0) {
+ app = gs_app_new (argv[2]);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_ALTERNATES,
+ "app", app,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job, NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 4 && g_strcmp0 (argv[1], "action") == 0) {
+ GsPluginAction action = gs_plugin_action_from_string (argv[2]);
+ if (action == GS_PLUGIN_ACTION_UNKNOWN) {
+ ret = FALSE;
+ g_set_error (&error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Did not recognise action '%s'", argv[2]);
+ } else {
+ ret = gs_cmd_action_exec (self, action, argv[3], &error);
+ }
+ } else if (argc == 3 && g_strcmp0 (argv[1], "action-upgrade-download") == 0) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ app = gs_app_new (argv[2]);
+ gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (ret)
+ gs_app_list_add (list, app);
+ } else if (argc == 3 && g_strcmp0 (argv[1], "refine") == 0) {
+ app = gs_app_new (argv[2]);
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", self->refine_flags,
+ NULL);
+ ret = gs_plugin_loader_job_action (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (!ret)
+ break;
+ }
+ list = gs_app_list_new ();
+ gs_app_list_add (list, app);
+ } else if (argc == 3 && g_strcmp0 (argv[1], "launch") == 0) {
+ app = gs_app_new (argv[2]);
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_LAUNCH,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (!ret)
+ break;
+ }
+ } else if (argc == 3 && g_strcmp0 (argv[1], "filename-to-app") == 0) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ file = g_file_new_for_path (argv[2]);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ app = gs_plugin_loader_job_process_app (self->plugin_loader, plugin_job, NULL, &error);
+ if (app == NULL) {
+ ret = FALSE;
+ } else {
+ list = gs_app_list_new ();
+ gs_app_list_add (list, app);
+ }
+ } else if (argc == 3 && g_strcmp0 (argv[1], "url-to-app") == 0) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_URL_TO_APP,
+ "search", argv[2],
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ app = gs_plugin_loader_job_process_app (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (app == NULL) {
+ ret = FALSE;
+ } else {
+ list = gs_app_list_new ();
+ gs_app_list_add (list, app);
+ }
+ } else if (argc == 2 && g_strcmp0 (argv[1], "updates") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 2 && g_strcmp0 (argv[1], "upgrades") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 2 && g_strcmp0 (argv[1], "sources") == 0) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader,
+ plugin_job,
+ NULL,
+ &error);
+ if (list == NULL)
+ ret = FALSE;
+ } else if (argc == 2 && g_strcmp0 (argv[1], "popular") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_POPULAR,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 2 && g_strcmp0 (argv[1], "featured") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_FEATURED,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 2 && g_strcmp0 (argv[1], "recent") == 0) {
+ if (cache_age == 0)
+ cache_age = 60 * 60 * 24 * 60;
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_RECENT,
+ "age", (guint64) cache_age,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job,
+ NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 2 && g_strcmp0 (argv[1], "get-categories") == 0) {
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (categories != NULL)
+ g_ptr_array_unref (categories);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_CATEGORIES,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ categories = gs_plugin_loader_job_get_categories (self->plugin_loader,
+ plugin_job,
+ NULL, &error);
+ if (categories == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc == 3 && g_strcmp0 (argv[1], "get-category-apps") == 0) {
+ g_autoptr(GsCategory) category = NULL;
+ g_autoptr(GsCategory) parent = NULL;
+ g_auto(GStrv) split = NULL;
+ split = g_strsplit (argv[2], "/", 2);
+ if (g_strv_length (split) == 1) {
+ category = gs_category_new (split[0]);
+ } else {
+ parent = gs_category_new (split[0]);
+ category = gs_category_new (split[1]);
+ gs_category_add_child (parent, category);
+ }
+ for (i = 0; i < repeat; i++) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (list != NULL)
+ g_object_unref (list);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_CATEGORY_APPS,
+ "category", category,
+ "refine-flags", self->refine_flags,
+ "max-results", self->max_results,
+ NULL);
+ list = gs_plugin_loader_job_process (self->plugin_loader, plugin_job, NULL, &error);
+ if (list == NULL) {
+ ret = FALSE;
+ break;
+ }
+ }
+ } else if (argc >= 2 && g_strcmp0 (argv[1], "refresh") == 0) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) cache_age,
+ NULL);
+ ret = gs_plugin_loader_job_action (self->plugin_loader, plugin_job,
+ NULL, &error);
+ } else if (argc >= 1 && g_strcmp0 (argv[1], "user-hash") == 0) {
+ g_autofree gchar *user_hash = gs_utils_get_user_hash (&error);
+ if (user_hash == NULL) {
+ ret = FALSE;
+ } else {
+ g_print ("%s\n", user_hash);
+ ret = TRUE;
+ }
+ } else {
+ ret = FALSE;
+ g_set_error_literal (&error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Did not recognise option, use 'installed', "
+ "'updates', 'popular', 'get-categories', "
+ "'get-category-apps', 'get-alternates', 'filename-to-app', "
+ "'action install', 'action remove', "
+ "'sources', 'refresh', 'launch' or 'search'");
+ }
+ if (!ret) {
+ g_print ("Failed: %s\n", error->message);
+ return EXIT_FAILURE;
+ }
+
+ if (show_results) {
+ if (list != NULL)
+ gs_cmd_show_results_apps (list);
+ if (categories != NULL)
+ gs_cmd_show_results_categories (categories);
+ }
+ return EXIT_SUCCESS;
+}
diff --git a/lib/gs-debug.c b/lib/gs-debug.c
new file mode 100644
index 0000000..ad429a4
--- /dev/null
+++ b/lib/gs-debug.c
@@ -0,0 +1,190 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <unistd.h>
+
+#include "gs-debug.h"
+
+struct _GsDebug
+{
+ GObject parent_instance;
+ GMutex mutex;
+ gboolean use_time;
+};
+
+G_DEFINE_TYPE (GsDebug, gs_debug, G_TYPE_OBJECT)
+
+static GLogWriterOutput
+gs_log_writer_console (GLogLevelFlags log_level,
+ const GLogField *fields,
+ gsize n_fields,
+ gpointer user_data)
+{
+ GsDebug *debug = GS_DEBUG (user_data);
+ const gchar *log_domain = NULL;
+ const gchar *log_message = NULL;
+ g_autofree gchar *tmp = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_autoptr(GString) domain = NULL;
+
+ /* enabled */
+ if (g_getenv ("GS_DEBUG") == NULL &&
+ log_level == G_LOG_LEVEL_DEBUG)
+ return G_LOG_WRITER_HANDLED;
+
+ /* get data from arguments */
+ for (gsize i = 0; i < n_fields; i++) {
+ if (g_strcmp0 (fields[i].key, "MESSAGE") == 0) {
+ log_message = fields[i].value;
+ continue;
+ }
+ if (g_strcmp0 (fields[i].key, "GLIB_DOMAIN") == 0) {
+ log_domain = fields[i].value;
+ continue;
+ }
+ }
+
+ /* this is really verbose */
+ if (g_strcmp0 (log_domain, "dconf") == 0 &&
+ log_level == G_LOG_LEVEL_DEBUG)
+ return G_LOG_WRITER_HANDLED;
+
+ /* make threadsafe */
+ locker = g_mutex_locker_new (&debug->mutex);
+ g_assert (locker != NULL);
+
+ /* time header */
+ if (debug->use_time) {
+ g_autoptr(GDateTime) dt = g_date_time_new_now_utc ();
+ tmp = g_strdup_printf ("%02i:%02i:%02i:%04i",
+ g_date_time_get_hour (dt),
+ g_date_time_get_minute (dt),
+ g_date_time_get_second (dt),
+ g_date_time_get_microsecond (dt) / 1000);
+ }
+
+ /* make these shorter */
+ if (g_strcmp0 (log_domain, "PackageKit") == 0) {
+ log_domain = "PK";
+ } else if (g_strcmp0 (log_domain, "GsPlugin") == 0) {
+ log_domain = "Gs";
+ }
+
+ /* pad out domain */
+ domain = g_string_new (log_domain);
+ for (guint i = domain->len; i < 3; i++)
+ g_string_append (domain, " ");
+
+ switch (log_level) {
+ case G_LOG_LEVEL_ERROR:
+ case G_LOG_LEVEL_CRITICAL:
+ case G_LOG_LEVEL_WARNING:
+ /* to screen */
+ if (isatty (fileno (stderr)) == 1) {
+ /* critical in red */
+ if (tmp != NULL)
+ g_printerr ("%c[%dm%s ", 0x1B, 32, tmp);
+ g_printerr ("%s ", domain->str);
+ g_printerr ("%c[%dm%s\n%c[%dm", 0x1B, 31, log_message, 0x1B, 0);
+ } else { /* to file */
+ if (tmp != NULL)
+ g_print ("%s ", tmp);
+ g_print ("%s ", domain->str);
+ g_print ("%s\n", log_message);
+ }
+ break;
+ default:
+ /* to screen */
+ if (isatty (fileno (stdout)) == 1) {
+ /* debug in blue */
+ if (tmp != NULL)
+ g_print ("%c[%dm%s ", 0x1B, 32, tmp);
+ g_print ("%s ", domain->str);
+ g_print ("%c[%dm%s\n%c[%dm", 0x1B, 34, log_message, 0x1B, 0);
+ break;
+ } else { /* to file */
+ if (tmp != NULL)
+ g_print ("%s ", tmp);
+ g_print ("%s ", domain->str);
+ g_print ("%s\n", log_message);
+ }
+ }
+
+ /* success */
+ return G_LOG_WRITER_HANDLED;
+}
+
+static GLogWriterOutput
+gs_log_writer_journald (GLogLevelFlags log_level,
+ const GLogField *fields,
+ gsize n_fields,
+ gpointer user_data)
+{
+ /* important enough to force to the journal */
+ switch (log_level) {
+ case G_LOG_LEVEL_ERROR:
+ case G_LOG_LEVEL_CRITICAL:
+ case G_LOG_LEVEL_WARNING:
+ case G_LOG_LEVEL_INFO:
+ return g_log_writer_journald (log_level, fields, n_fields, user_data);
+ break;
+ default:
+ break;
+ }
+
+ return G_LOG_WRITER_UNHANDLED;
+}
+
+static GLogWriterOutput
+gs_debug_log_writer (GLogLevelFlags log_level,
+ const GLogField *fields,
+ gsize n_fields,
+ gpointer user_data)
+{
+ if (g_log_writer_is_journald (fileno (stderr)))
+ return gs_log_writer_journald (log_level, fields, n_fields, user_data);
+ else
+ return gs_log_writer_console (log_level, fields, n_fields, user_data);
+}
+
+static void
+gs_debug_finalize (GObject *object)
+{
+ GsDebug *debug = GS_DEBUG (object);
+
+ g_mutex_clear (&debug->mutex);
+
+ G_OBJECT_CLASS (gs_debug_parent_class)->finalize (object);
+}
+
+static void
+gs_debug_class_init (GsDebugClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_debug_finalize;
+}
+
+static void
+gs_debug_init (GsDebug *debug)
+{
+ g_mutex_init (&debug->mutex);
+ debug->use_time = g_getenv ("GS_DEBUG_NO_TIME") == NULL;
+ g_log_set_writer_func (gs_debug_log_writer,
+ g_object_ref (debug),
+ (GDestroyNotify) g_object_unref);
+}
+
+GsDebug *
+gs_debug_new (void)
+{
+ return GS_DEBUG (g_object_new (GS_TYPE_DEBUG, NULL));
+}
diff --git a/lib/gs-debug.h b/lib/gs-debug.h
new file mode 100644
index 0000000..6dd529d
--- /dev/null
+++ b/lib/gs-debug.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_DEBUG (gs_debug_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsDebug, gs_debug, GS, DEBUG, GObject)
+
+GsDebug *gs_debug_new (void);
+
+G_END_DECLS
diff --git a/lib/gs-ioprio.c b/lib/gs-ioprio.c
new file mode 100644
index 0000000..11b9fa6
--- /dev/null
+++ b/lib/gs-ioprio.c
@@ -0,0 +1,152 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2005, Novell, Inc.
+ * Copyright (C) 2006, Jamie McCracken <jamiemcc@gnome.org>
+ * Copyright (C) 2006, Anders Aagaard
+ *
+ * Based mostly on code by Robert Love <rml@novell.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "config.h"
+
+#ifdef __linux__
+
+#include <stdio.h>
+#include <errno.h>
+
+#ifdef HAVE_LINUX_UNISTD_H
+#include <linux/unistd.h>
+#endif
+
+#include <sys/syscall.h>
+#include <unistd.h>
+
+#include <glib/gstdio.h>
+
+#endif /* __linux__ */
+
+#include "gs-ioprio.h"
+
+/* We assume ALL linux architectures have the syscalls defined here */
+#ifdef __linux__
+
+/* Make sure the system call is supported */
+#ifndef __NR_ioprio_set
+
+#if defined(__i386__)
+#define __NR_ioprio_set 289
+#define __NR_ioprio_get 290
+#elif defined(__powerpc__) || defined(__powerpc64__)
+#define __NR_ioprio_set 273
+#define __NR_ioprio_get 274
+#elif defined(__x86_64__)
+#define __NR_ioprio_set 251
+#define __NR_ioprio_get 252
+#elif defined(__ia64__)
+#define __NR_ioprio_set 1274
+#define __NR_ioprio_get 1275
+#elif defined(__alpha__)
+#define __NR_ioprio_set 442
+#define __NR_ioprio_get 443
+#elif defined(__s390x__) || defined(__s390__)
+#define __NR_ioprio_set 282
+#define __NR_ioprio_get 283
+#elif defined(__SH4__)
+#define __NR_ioprio_set 288
+#define __NR_ioprio_get 289
+#elif defined(__SH5__)
+#define __NR_ioprio_set 316
+#define __NR_ioprio_get 317
+#elif defined(__sparc__) || defined(__sparc64__)
+#define __NR_ioprio_set 196
+#define __NR_ioprio_get 218
+#elif defined(__arm__)
+#define __NR_ioprio_set 314
+#define __NR_ioprio_get 315
+#else
+#error "Unsupported architecture!"
+#endif
+
+#endif /* __NR_ioprio_set */
+
+enum {
+ IOPRIO_CLASS_NONE,
+ IOPRIO_CLASS_RT,
+ IOPRIO_CLASS_BE,
+ IOPRIO_CLASS_IDLE,
+};
+
+enum {
+ IOPRIO_WHO_PROCESS = 1,
+ IOPRIO_WHO_PGRP,
+ IOPRIO_WHO_USER,
+};
+
+#define IOPRIO_CLASS_SHIFT 13
+
+static inline int
+ioprio_set (int which, int who, int ioprio_val)
+{
+ return syscall (__NR_ioprio_set, which, who, ioprio_val);
+}
+
+static int
+set_io_priority_idle (void)
+{
+ int ioprio, ioclass;
+
+ ioprio = 7; /* priority is ignored with idle class */
+ ioclass = IOPRIO_CLASS_IDLE << IOPRIO_CLASS_SHIFT;
+
+ return ioprio_set (IOPRIO_WHO_PROCESS, 0, ioprio | ioclass);
+}
+
+static int
+set_io_priority_best_effort (int ioprio_val)
+{
+ int ioclass;
+
+ ioclass = IOPRIO_CLASS_BE << IOPRIO_CLASS_SHIFT;
+
+ return ioprio_set (IOPRIO_WHO_PROCESS, 0, ioprio_val | ioclass);
+}
+
+void
+gs_ioprio_init (void)
+{
+ if (set_io_priority_idle () == -1) {
+ g_message ("Could not set idle IO priority, attempting best effort of 7");
+
+ if (set_io_priority_best_effort (7) == -1) {
+ g_message ("Could not set best effort IO priority either, giving up");
+ }
+ }
+}
+
+#else /* __linux__ */
+
+void
+gs_ioprio_init (void)
+{
+}
+
+#endif /* __linux__ */
diff --git a/lib/gs-ioprio.h b/lib/gs-ioprio.h
new file mode 100644
index 0000000..b876afe
--- /dev/null
+++ b/lib/gs-ioprio.h
@@ -0,0 +1,31 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2006, Anders Aagaard
+ * Copyright (C) 2008, Nokia <ivan.frade@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+void gs_ioprio_init (void);
+
+G_END_DECLS
diff --git a/lib/gs-metered.c b/lib/gs-metered.c
new file mode 100644
index 0000000..d4afec4
--- /dev/null
+++ b/lib/gs-metered.c
@@ -0,0 +1,267 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2019 Endless Mobile, Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-metered
+ * @title: Metered Data Utilities
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: Utility functions to help with metered data handling
+ *
+ * Metered data handling is provided by Mogwai, which implements a download
+ * scheduler to control when, and in which order, large downloads happen on
+ * the system.
+ *
+ * All large downloads from gs_plugin_download() or gs_plugin_download_app()
+ * calls should be scheduled using Mogwai, which will notify gnome-software
+ * when those downloads can start and stop, according to system policy.
+ *
+ * The functions in this file make interacting with the scheduling daemon a
+ * little simpler. Since all #GsPlugin method calls happen in worker threads,
+ * typically without a #GMainContext, all interaction with the scheduler should
+ * be blocking. libmogwai-schedule-client was designed to be asynchronous; so
+ * these helpers make it synchronous.
+ *
+ * Since: 2.34
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#ifdef HAVE_MOGWAI
+#include <libmogwai-schedule-client/scheduler.h>
+#endif
+
+#include "gs-metered.h"
+
+
+#ifdef HAVE_MOGWAI
+
+/* FIXME: Backported from https://gitlab.gnome.org/GNOME/glib/merge_requests/983.
+ * Drop once we can depend on a version of GLib which includes it .*/
+typedef void MainContextPusher;
+
+static inline MainContextPusher *
+main_context_pusher_new (GMainContext *main_context)
+{
+ g_main_context_push_thread_default (main_context);
+ return (MainContextPusher *) main_context;
+}
+
+static inline void
+main_context_pusher_free (MainContextPusher *pusher)
+{
+ g_main_context_pop_thread_default ((GMainContext *) pusher);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (MainContextPusher, main_context_pusher_free)
+
+
+typedef struct
+{
+ gboolean *out_download_now; /* (unowned) */
+ GMainContext *context; /* (unowned) */
+} DownloadNowData;
+
+static void
+download_now_cb (GObject *obj,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ DownloadNowData *data = user_data;
+ *data->out_download_now = mwsc_schedule_entry_get_download_now (MWSC_SCHEDULE_ENTRY (obj));
+ g_main_context_wakeup (data->context);
+}
+
+typedef struct
+{
+ GError **out_error; /* (unowned) */
+ GMainContext *context; /* (unowned) */
+} InvalidatedData;
+
+static void
+invalidated_cb (MwscScheduleEntry *entry,
+ const GError *error,
+ gpointer user_data)
+{
+ InvalidatedData *data = user_data;
+ *data->out_error = g_error_copy (error);
+ g_main_context_wakeup (data->context);
+}
+
+#endif /* HAVE_MOGWAI */
+
+/**
+ * gs_metered_block_on_download_scheduler:
+ * @parameters: (nullable): a #GVariant of type `a{sv}` specifying parameters
+ * for the schedule entry, or %NULL to pass no parameters
+ * @cancellable: (nullable): a #GCancellable, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Create a schedule entry with the given @parameters, and block until
+ * permission is given to download.
+ *
+ * FIXME: This will currently ignore later revocations of that download
+ * permission, and does not support creating a schedule entry per app.
+ *
+ * If a schedule entry cannot be created, or if @cancellable is cancelled,
+ * an error will be set and %FALSE returned.
+ *
+ * The keys understood by @parameters are listed in the documentation for
+ * mwsc_scheduler_schedule_async().
+ *
+ * This function will likely be called from a #GsPluginLoader worker thread.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ * Since: 2.34
+ */
+gboolean
+gs_metered_block_on_download_scheduler (GVariant *parameters,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef HAVE_MOGWAI
+ g_autoptr(MwscScheduler) scheduler = NULL;
+ g_autoptr(MwscScheduleEntry) schedule_entry = NULL;
+ g_autofree gchar *parameters_str = NULL;
+ g_autoptr(GMainContext) context = NULL;
+ g_autoptr(MainContextPusher) pusher = NULL;
+
+ parameters_str = (parameters != NULL) ? g_variant_print (parameters, TRUE) : g_strdup ("(none)");
+ g_debug ("%s: Waiting with parameters: %s", G_STRFUNC, parameters_str);
+
+ /* Push the context early so that the #MwscScheduler is created to run within it. */
+ context = g_main_context_new ();
+ pusher = main_context_pusher_new (context);
+
+ /* Wait until the download can be scheduled.
+ * FIXME: In future, downloads could be split up by app, so they can all
+ * be scheduled separately and, for example, higher priority ones could
+ * be scheduled with a higher priority. This would have to be aware of
+ * dependencies. */
+ scheduler = mwsc_scheduler_new (cancellable, error);
+ if (scheduler == NULL)
+ return FALSE;
+
+ /* Create a schedule entry for the group of downloads.
+ * FIXME: The underlying OSTree code supports resuming downloads
+ * (at a granularity of individual objects), so it should be
+ * possible to plumb through here. */
+ schedule_entry = mwsc_scheduler_schedule (scheduler, parameters, cancellable,
+ error);
+ if (schedule_entry == NULL)
+ return FALSE;
+
+ /* Wait until the download is allowed to proceed. */
+ if (!mwsc_schedule_entry_get_download_now (schedule_entry)) {
+ gboolean download_now = FALSE;
+ g_autoptr(GError) invalidated_error = NULL;
+ gulong notify_id, invalidated_id;
+ DownloadNowData download_now_data = { &download_now, context };
+ InvalidatedData invalidated_data = { &invalidated_error, context };
+
+ notify_id = g_signal_connect (schedule_entry, "notify::download-now",
+ (GCallback) download_now_cb, &download_now_data);
+ invalidated_id = g_signal_connect (schedule_entry, "invalidated",
+ (GCallback) invalidated_cb, &invalidated_data);
+
+ while (!download_now && invalidated_error == NULL &&
+ !g_cancellable_is_cancelled (cancellable))
+ g_main_context_iteration (context, TRUE);
+
+ g_signal_handler_disconnect (schedule_entry, invalidated_id);
+ g_signal_handler_disconnect (schedule_entry, notify_id);
+
+ if (!download_now && invalidated_error != NULL) {
+ g_propagate_error (error, g_steal_pointer (&invalidated_error));
+ return FALSE;
+ } else if (!download_now && g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ return FALSE;
+ }
+
+ g_assert (download_now);
+ }
+
+ g_debug ("%s: Allowed to download", G_STRFUNC);
+#else /* if !HAVE_MOGWAI */
+ g_debug ("%s: Allowed to download (Mogwai support compiled out)", G_STRFUNC);
+#endif /* !HAVE_MOGWAI */
+
+ return TRUE;
+}
+
+/**
+ * gs_metered_block_app_on_download_scheduler:
+ * @app: a #GsApp to get the scheduler parameters from
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Version of gs_metered_block_on_download_scheduler() which extracts the
+ * download parameters from the given @app.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ * Since: 2.34
+ */
+gboolean
+gs_metered_block_app_on_download_scheduler (GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_auto(GVariantDict) parameters_dict = G_VARIANT_DICT_INIT (NULL);
+ g_autoptr(GVariant) parameters = NULL;
+ guint64 download_size = gs_app_get_size_download (app);
+
+ /* Currently no plugins support resumable downloads. This may change in
+ * future, in which case this parameter should be refactored. */
+ g_variant_dict_insert (&parameters_dict, "resumable", "b", FALSE);
+
+ if (download_size != 0 && download_size != GS_APP_SIZE_UNKNOWABLE) {
+ g_variant_dict_insert (&parameters_dict, "size-minimum", "t", download_size);
+ g_variant_dict_insert (&parameters_dict, "size-maximum", "t", download_size);
+ }
+
+ parameters = g_variant_ref_sink (g_variant_dict_end (&parameters_dict));
+
+ return gs_metered_block_on_download_scheduler (parameters, cancellable, error);
+}
+
+/**
+ * gs_metered_block_app_list_on_download_scheduler:
+ * @app_list: a #GsAppList to get the scheduler parameters from
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Version of gs_metered_block_on_download_scheduler() which extracts the
+ * download parameters from the apps in the given @app_list.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ * Since: 2.34
+ */
+gboolean
+gs_metered_block_app_list_on_download_scheduler (GsAppList *app_list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_auto(GVariantDict) parameters_dict = G_VARIANT_DICT_INIT (NULL);
+ g_autoptr(GVariant) parameters = NULL;
+
+ /* Currently no plugins support resumable downloads. This may change in
+ * future, in which case this parameter should be refactored. */
+ g_variant_dict_insert (&parameters_dict, "resumable", "b", FALSE);
+
+ /* FIXME: Currently this creates a single Mogwai schedule entry for the
+ * entire app list. Eventually, we probably want one schedule entry per
+ * app being downloaded, so that they can be individually prioritised.
+ * However, that requires much deeper integration into the download
+ * code, and Mogwai does not currently support that level of
+ * prioritisation, so go with this simple implementation for now. */
+ parameters = g_variant_ref_sink (g_variant_dict_end (&parameters_dict));
+
+ return gs_metered_block_on_download_scheduler (parameters, cancellable, error);
+}
diff --git a/lib/gs-metered.h b/lib/gs-metered.h
new file mode 100644
index 0000000..f8cdc1f
--- /dev/null
+++ b/lib/gs-metered.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2019 Endless Mobile, Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+#include "gs-app.h"
+#include "gs-app-list.h"
+
+G_BEGIN_DECLS
+
+gboolean gs_metered_block_on_download_scheduler (GVariant *parameters,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_metered_block_app_on_download_scheduler (GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_metered_block_app_list_on_download_scheduler (GsAppList *app_list,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
diff --git a/lib/gs-os-release.c b/lib/gs-os-release.c
new file mode 100644
index 0000000..305c5bb
--- /dev/null
+++ b/lib/gs-os-release.c
@@ -0,0 +1,335 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: LGPL-2.1+
+ */
+
+/**
+ * SECTION:gs-os-release
+ * @title: GsOsRelease
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: Data from os-release
+ *
+ * This object allows plugins to parse /etc/os-release for distribution
+ * metadata information.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gs-os-release.h"
+
+struct _GsOsRelease
+{
+ GObject parent_instance;
+ gchar *name;
+ gchar *version;
+ gchar *id;
+ gchar **id_like;
+ gchar *version_id;
+ gchar *pretty_name;
+ gchar *cpe_name;
+ gchar *distro_codename;
+ gchar *home_url;
+};
+
+static void gs_os_release_initable_iface_init (GInitableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GsOsRelease, gs_os_release, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE(G_TYPE_INITABLE, gs_os_release_initable_iface_init))
+
+static gboolean
+gs_os_release_initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsOsRelease *os_release = GS_OS_RELEASE (initable);
+ const gchar *filename;
+ g_autofree gchar *data = NULL;
+ g_auto(GStrv) lines = NULL;
+ guint i;
+
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* get contents */
+ filename = g_getenv ("GS_SELF_TEST_OS_RELEASE_FILENAME");
+ if (filename == NULL) {
+ filename = "/etc/os-release";
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS))
+ filename = "/usr/lib/os-release";
+ }
+ if (!g_file_get_contents (filename, &data, NULL, error))
+ return FALSE;
+
+ /* parse */
+ lines = g_strsplit (data, "\n", -1);
+ for (i = 0; lines[i] != NULL; i++) {
+ gchar *tmp;
+
+ /* split the line up into two halves */
+ tmp = g_strstr_len (lines[i], -1, "=");
+ if (tmp == NULL)
+ continue;
+ *tmp = '\0';
+ tmp++;
+
+ /* ignore trailing quote */
+ if (tmp[0] == '\"')
+ tmp++;
+
+ /* ignore trailing quote */
+ g_strdelimit (tmp, "\"", '\0');
+
+ /* match fields we're interested in */
+ if (g_strcmp0 (lines[i], "NAME") == 0) {
+ os_release->name = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "VERSION") == 0) {
+ os_release->version = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "ID") == 0) {
+ os_release->id = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "ID_LIKE") == 0) {
+ os_release->id_like = g_strsplit (tmp, " ", 0);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "VERSION_ID") == 0) {
+ os_release->version_id = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "PRETTY_NAME") == 0) {
+ os_release->pretty_name = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "CPE_NAME") == 0) {
+ os_release->cpe_name = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "UBUNTU_CODENAME") == 0) {
+ os_release->distro_codename = g_strdup (tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "HOME_URL") == 0) {
+ os_release->home_url = g_strdup (tmp);
+ continue;
+ }
+ }
+ return TRUE;
+}
+
+/**
+ * gs_os_release_get_name:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the name from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_name (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->name;
+}
+
+/**
+ * gs_os_release_get_version:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the version from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_version (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->version;
+}
+
+/**
+ * gs_os_release_get_id:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the ID from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_id (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->id;
+}
+
+/**
+ * gs_os_release_get_id_like:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the ID_LIKE from the os-release parser. This is a list of operating
+ * systems that are "closely related" to the local operating system, possibly
+ * by being a derivative distribution.
+ *
+ * Returns: a %NULL terminated list
+ *
+ * Since: 3.26.2
+ **/
+const gchar * const *
+gs_os_release_get_id_like (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return (const gchar * const *) os_release->id_like;
+}
+
+/**
+ * gs_os_release_get_version_id:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the version ID from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_version_id (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->version_id;
+}
+
+/**
+ * gs_os_release_get_pretty_name:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the pretty name from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_pretty_name (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->pretty_name;
+}
+
+/**
+ * gs_os_release_get_cpe_name:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the pretty name from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_cpe_name (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->cpe_name;
+}
+
+/**
+ * gs_os_release_get_distro_codename:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the distro codename from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_distro_codename (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->distro_codename;
+}
+
+/**
+ * gs_os_release_get_home_url:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the home URL from the os-release parser.
+ *
+ * Returns: a string, or %NULL
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_os_release_get_home_url (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->home_url;
+}
+
+static void
+gs_os_release_finalize (GObject *object)
+{
+ GsOsRelease *os_release = GS_OS_RELEASE (object);
+ g_free (os_release->name);
+ g_free (os_release->version);
+ g_free (os_release->id);
+ g_strfreev (os_release->id_like);
+ g_free (os_release->version_id);
+ g_free (os_release->pretty_name);
+ g_free (os_release->cpe_name);
+ g_free (os_release->distro_codename);
+ g_free (os_release->home_url);
+ G_OBJECT_CLASS (gs_os_release_parent_class)->finalize (object);
+}
+
+static void
+gs_os_release_class_init (GsOsReleaseClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_os_release_finalize;
+}
+
+static void
+gs_os_release_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = gs_os_release_initable_init;
+}
+
+static void
+gs_os_release_init (GsOsRelease *os_release)
+{
+}
+
+/**
+ * gs_os_release_new:
+ * @error: a #GError, or %NULL
+ *
+ * Creates a new os_release.
+ *
+ * Returns: (transfer full): A newly allocated #GsOsRelease, or %NULL for error
+ *
+ * Since: 3.22
+ **/
+GsOsRelease *
+gs_os_release_new (GError **error)
+{
+ GsOsRelease *os_release;
+ os_release = g_initable_new (GS_TYPE_OS_RELEASE, NULL, error, NULL);
+ return GS_OS_RELEASE (os_release);
+}
diff --git a/lib/gs-os-release.h b/lib/gs-os-release.h
new file mode 100644
index 0000000..336f17c
--- /dev/null
+++ b/lib/gs-os-release.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: LGPL-2.1+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-app.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_OS_RELEASE (gs_os_release_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsOsRelease, gs_os_release, GS, OS_RELEASE, GObject)
+
+GsOsRelease *gs_os_release_new (GError **error);
+const gchar *gs_os_release_get_name (GsOsRelease *os_release);
+const gchar *gs_os_release_get_version (GsOsRelease *os_release);
+const gchar *gs_os_release_get_id (GsOsRelease *os_release);
+const gchar * const *gs_os_release_get_id_like (GsOsRelease *os_release);
+const gchar *gs_os_release_get_version_id (GsOsRelease *os_release);
+const gchar *gs_os_release_get_pretty_name (GsOsRelease *os_release);
+const gchar *gs_os_release_get_cpe_name (GsOsRelease *os_release);
+const gchar *gs_os_release_get_distro_codename (GsOsRelease *os_release);
+const gchar *gs_os_release_get_home_url (GsOsRelease *os_release);
+
+G_END_DECLS
diff --git a/lib/gs-plugin-event.c b/lib/gs-plugin-event.c
new file mode 100644
index 0000000..8d1fc83
--- /dev/null
+++ b/lib/gs-plugin-event.c
@@ -0,0 +1,313 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-plugin-event
+ * @title: GsPluginEvent
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: Information about a plugin event
+ *
+ * These functions provide a way for plugins to tell the UI layer about events
+ * that may require displaying to the user. Plugins should not assume that a
+ * specific event is actually shown to the user as it may be ignored
+ * automatically.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gs-plugin-private.h"
+#include "gs-plugin-event.h"
+
+struct _GsPluginEvent
+{
+ GObject parent_instance;
+ GsApp *app;
+ GsApp *origin;
+ GsPluginAction action;
+ GError *error;
+ GsPluginEventFlag flags;
+ gchar *unique_id;
+};
+
+G_DEFINE_TYPE (GsPluginEvent, gs_plugin_event, G_TYPE_OBJECT)
+
+/**
+ * gs_plugin_event_set_app:
+ * @event: A #GsPluginEvent
+ * @app: A #GsApp
+ *
+ * Set the application (or source, or whatever component) that caused the event
+ * to be created.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_event_set_app (GsPluginEvent *event, GsApp *app)
+{
+ g_return_if_fail (GS_IS_PLUGIN_EVENT (event));
+ g_return_if_fail (GS_IS_APP (app));
+ g_set_object (&event->app, app);
+}
+
+/**
+ * gs_plugin_event_get_app:
+ * @event: A #GsPluginEvent
+ *
+ * Gets an application that created the event.
+ *
+ * Returns: (transfer none): a #GsApp, or %NULL if unset
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_plugin_event_get_app (GsPluginEvent *event)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_EVENT (event), NULL);
+ return event->app;
+}
+
+/**
+ * gs_plugin_event_set_origin:
+ * @event: A #GsPluginEvent
+ * @origin: A #GsApp
+ *
+ * Set the origin that caused the event to be created.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_event_set_origin (GsPluginEvent *event, GsApp *origin)
+{
+ g_return_if_fail (GS_IS_PLUGIN_EVENT (event));
+ g_return_if_fail (GS_IS_APP (origin));
+ g_set_object (&event->origin, origin);
+}
+
+/**
+ * gs_plugin_event_get_origin:
+ * @event: A #GsPluginEvent
+ *
+ * Gets an origin that created the event.
+ *
+ * Returns: (transfer none): a #GsApp, or %NULL if unset
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_plugin_event_get_origin (GsPluginEvent *event)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_EVENT (event), NULL);
+ return event->origin;
+}
+
+/**
+ * gs_plugin_event_set_action:
+ * @event: A #GsPluginEvent
+ * @action: A #GsPluginAction, e.g. %GS_PLUGIN_ACTION_UPDATE
+ *
+ * Set the action that caused the event to be created.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_event_set_action (GsPluginEvent *event, GsPluginAction action)
+{
+ g_return_if_fail (GS_IS_PLUGIN_EVENT (event));
+ event->action = action;
+}
+
+/**
+ * gs_plugin_event_get_action:
+ * @event: A #GsPluginEvent
+ *
+ * Gets an action that created the event.
+ *
+ * Returns: (transfer none): a #GsPluginAction, e.g. %GS_PLUGIN_ACTION_UPDATE
+ *
+ * Since: 3.22
+ **/
+GsPluginAction
+gs_plugin_event_get_action (GsPluginEvent *event)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_EVENT (event), 0);
+ return event->action;
+}
+
+/**
+ * gs_plugin_event_get_unique_id:
+ * @event: A #GsPluginEvent
+ *
+ * Gets the unique ID for the event. In most cases (if an app has been set)
+ * this will just be the actual #GsApp unique-id. In the cases where only error
+ * has been set a virtual (but plausible) ID will be generated.
+ *
+ * Returns: a string, or %NULL for invalid
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_plugin_event_get_unique_id (GsPluginEvent *event)
+{
+ /* just proxy */
+ if (event->origin != NULL &&
+ gs_app_get_unique_id (event->origin) != NULL) {
+ return gs_app_get_unique_id (event->origin);
+ }
+ if (event->app != NULL &&
+ gs_app_get_unique_id (event->app) != NULL) {
+ return gs_app_get_unique_id (event->app);
+ }
+
+ /* generate from error */
+ if (event->error != NULL) {
+ if (event->unique_id == NULL) {
+ g_autofree gchar *id = NULL;
+ id = g_strdup_printf ("%s.error",
+ gs_plugin_error_to_string (event->error->code));
+ event->unique_id = as_utils_unique_id_build (AS_APP_SCOPE_UNKNOWN,
+ AS_BUNDLE_KIND_UNKNOWN,
+ NULL,
+ AS_APP_KIND_UNKNOWN,
+ id,
+ NULL);
+ }
+ return event->unique_id;
+ }
+
+ /* failed */
+ return NULL;
+}
+
+/**
+ * gs_plugin_event_get_kind:
+ * @event: A #GsPluginEvent
+ * @flag: A #GsPluginEventFlag, e.g. %GS_PLUGIN_EVENT_FLAG_INVALID
+ *
+ * Adds a flag to the event.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_event_add_flag (GsPluginEvent *event, GsPluginEventFlag flag)
+{
+ g_return_if_fail (GS_IS_PLUGIN_EVENT (event));
+ event->flags |= flag;
+}
+
+/**
+ * gs_plugin_event_set_kind:
+ * @event: A #GsPluginEvent
+ * @flag: A #GsPluginEventFlag, e.g. %GS_PLUGIN_EVENT_FLAG_INVALID
+ *
+ * Removes a flag from the event.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_event_remove_flag (GsPluginEvent *event, GsPluginEventFlag flag)
+{
+ g_return_if_fail (GS_IS_PLUGIN_EVENT (event));
+ event->flags &= ~flag;
+}
+
+/**
+ * gs_plugin_event_has_flag:
+ * @event: A #GsPluginEvent
+ * @flag: A #GsPluginEventFlag, e.g. %GS_PLUGIN_EVENT_FLAG_INVALID
+ *
+ * Finds out if the event has a specific flag.
+ *
+ * Returns: %TRUE if the flag is set
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_plugin_event_has_flag (GsPluginEvent *event, GsPluginEventFlag flag)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_EVENT (event), FALSE);
+ return ((event->flags & flag) > 0);
+}
+
+/**
+ * gs_plugin_event_set_error:
+ * @event: A #GsPluginEvent
+ * @error: A #GError
+ *
+ * Sets the event error.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_event_set_error (GsPluginEvent *event, const GError *error)
+{
+ g_clear_error (&event->error);
+ event->error = g_error_copy (error);
+}
+
+/**
+ * gs_plugin_event_get_error:
+ * @event: A #GsPluginEvent
+ *
+ * Gets the event error.
+ *
+ * Returns: a #GError, or %NULL for unset
+ *
+ * Since: 3.22
+ **/
+const GError *
+gs_plugin_event_get_error (GsPluginEvent *event)
+{
+ return event->error;
+}
+
+static void
+gs_plugin_event_finalize (GObject *object)
+{
+ GsPluginEvent *event = GS_PLUGIN_EVENT (object);
+ if (event->error != NULL)
+ g_error_free (event->error);
+ if (event->app != NULL)
+ g_object_unref (event->app);
+ if (event->origin != NULL)
+ g_object_unref (event->origin);
+ g_free (event->unique_id);
+ G_OBJECT_CLASS (gs_plugin_event_parent_class)->finalize (object);
+}
+
+static void
+gs_plugin_event_class_init (GsPluginEventClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_plugin_event_finalize;
+}
+
+static void
+gs_plugin_event_init (GsPluginEvent *event)
+{
+}
+
+/**
+ * gs_plugin_event_new:
+ *
+ * Creates a new event.
+ *
+ * Returns: A newly allocated #GsPluginEvent
+ *
+ * Since: 3.22
+ **/
+GsPluginEvent *
+gs_plugin_event_new (void)
+{
+ GsPluginEvent *event;
+ event = g_object_new (GS_TYPE_PLUGIN_EVENT, NULL);
+ return GS_PLUGIN_EVENT (event);
+}
diff --git a/lib/gs-plugin-event.h b/lib/gs-plugin-event.h
new file mode 100644
index 0000000..dc74486
--- /dev/null
+++ b/lib/gs-plugin-event.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-app.h"
+#include "gs-plugin-types.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PLUGIN_EVENT (gs_plugin_event_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsPluginEvent, gs_plugin_event, GS, PLUGIN_EVENT, GObject)
+
+/**
+ * GsPluginEventFlag:
+ * @GS_PLUGIN_EVENT_FLAG_NONE: No special flags set
+ * @GS_PLUGIN_EVENT_FLAG_INVALID: Event is no longer valid, e.g. was dismissed
+ * @GS_PLUGIN_EVENT_FLAG_VISIBLE: Event is is visible on the screen
+ * @GS_PLUGIN_EVENT_FLAG_WARNING: Event should be shown with more urgency
+ * @GS_PLUGIN_EVENT_FLAG_INTERACTIVE: The plugin job was created with interactive=True
+ *
+ * Any flags an event can have.
+ **/
+typedef enum {
+ GS_PLUGIN_EVENT_FLAG_NONE = 0, /* Since: 3.22 */
+ GS_PLUGIN_EVENT_FLAG_INVALID = 1 << 0, /* Since: 3.22 */
+ GS_PLUGIN_EVENT_FLAG_VISIBLE = 1 << 1, /* Since: 3.22 */
+ GS_PLUGIN_EVENT_FLAG_WARNING = 1 << 2, /* Since: 3.22 */
+ GS_PLUGIN_EVENT_FLAG_INTERACTIVE = 1 << 3, /* Since: 3.30 */
+ /*< private >*/
+ GS_PLUGIN_EVENT_FLAG_LAST
+} GsPluginEventFlag;
+
+GsPluginEvent *gs_plugin_event_new (void);
+
+const gchar *gs_plugin_event_get_unique_id (GsPluginEvent *event);
+
+void gs_plugin_event_set_app (GsPluginEvent *event,
+ GsApp *app);
+GsApp *gs_plugin_event_get_app (GsPluginEvent *event);
+void gs_plugin_event_set_origin (GsPluginEvent *event,
+ GsApp *origin);
+GsApp *gs_plugin_event_get_origin (GsPluginEvent *event);
+void gs_plugin_event_set_action (GsPluginEvent *event,
+ GsPluginAction action);
+GsPluginAction gs_plugin_event_get_action (GsPluginEvent *event);
+
+void gs_plugin_event_set_error (GsPluginEvent *event,
+ const GError *error);
+const GError *gs_plugin_event_get_error (GsPluginEvent *event);
+
+void gs_plugin_event_add_flag (GsPluginEvent *event,
+ GsPluginEventFlag flag);
+void gs_plugin_event_remove_flag (GsPluginEvent *event,
+ GsPluginEventFlag flag);
+gboolean gs_plugin_event_has_flag (GsPluginEvent *event,
+ GsPluginEventFlag flag);
+
+G_END_DECLS
diff --git a/lib/gs-plugin-job-private.h b/lib/gs-plugin-job-private.h
new file mode 100644
index 0000000..863d890
--- /dev/null
+++ b/lib/gs-plugin-job-private.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-plugin-job.h"
+
+G_BEGIN_DECLS
+
+GsPluginAction gs_plugin_job_get_action (GsPluginJob *self);
+GsPluginRefineFlags gs_plugin_job_get_filter_flags (GsPluginJob *self);
+GsAppListFilterFlags gs_plugin_job_get_dedupe_flags (GsPluginJob *self);
+GsPluginRefineFlags gs_plugin_job_get_refine_flags (GsPluginJob *self);
+gboolean gs_plugin_job_has_refine_flags (GsPluginJob *self,
+ GsPluginRefineFlags refine_flags);
+void gs_plugin_job_add_refine_flags (GsPluginJob *self,
+ GsPluginRefineFlags refine_flags);
+void gs_plugin_job_remove_refine_flags (GsPluginJob *self,
+ GsPluginRefineFlags refine_flags);
+gboolean gs_plugin_job_get_interactive (GsPluginJob *self);
+guint gs_plugin_job_get_max_results (GsPluginJob *self);
+guint gs_plugin_job_get_timeout (GsPluginJob *self);
+guint64 gs_plugin_job_get_age (GsPluginJob *self);
+GsAppListSortFunc gs_plugin_job_get_sort_func (GsPluginJob *self);
+gpointer gs_plugin_job_get_sort_func_data (GsPluginJob *self);
+const gchar *gs_plugin_job_get_search (GsPluginJob *self);
+GsApp *gs_plugin_job_get_app (GsPluginJob *self);
+GsAppList *gs_plugin_job_get_list (GsPluginJob *self);
+GFile *gs_plugin_job_get_file (GsPluginJob *self);
+GsPlugin *gs_plugin_job_get_plugin (GsPluginJob *self);
+GsCategory *gs_plugin_job_get_category (GsPluginJob *self);
+AsReview *gs_plugin_job_get_review (GsPluginJob *self);
+gchar *gs_plugin_job_to_string (GsPluginJob *self);
+void gs_plugin_job_set_action (GsPluginJob *self,
+ GsPluginAction action);
+
+G_END_DECLS
diff --git a/lib/gs-plugin-job.c b/lib/gs-plugin-job.c
new file mode 100644
index 0000000..1ce320f
--- /dev/null
+++ b/lib/gs-plugin-job.c
@@ -0,0 +1,618 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gs-plugin-private.h"
+#include "gs-plugin-job-private.h"
+
+struct _GsPluginJob
+{
+ GObject parent_instance;
+ GsPluginRefineFlags refine_flags;
+ GsPluginRefineFlags filter_flags;
+ GsAppListFilterFlags dedupe_flags;
+ gboolean interactive;
+ guint max_results;
+ guint timeout;
+ guint64 age;
+ GsPlugin *plugin;
+ GsPluginAction action;
+ GsAppListSortFunc sort_func;
+ gpointer sort_func_data;
+ gchar *search;
+ GsApp *app;
+ GsAppList *list;
+ GFile *file;
+ GsCategory *category;
+ AsReview *review;
+ gint64 time_created;
+};
+
+enum {
+ PROP_0,
+ PROP_ACTION,
+ PROP_AGE,
+ PROP_SEARCH,
+ PROP_REFINE_FLAGS,
+ PROP_FILTER_FLAGS,
+ PROP_DEDUPE_FLAGS,
+ PROP_INTERACTIVE,
+ PROP_APP,
+ PROP_LIST,
+ PROP_FILE,
+ PROP_CATEGORY,
+ PROP_REVIEW,
+ PROP_MAX_RESULTS,
+ PROP_TIMEOUT,
+ PROP_LAST
+};
+
+G_DEFINE_TYPE (GsPluginJob, gs_plugin_job, G_TYPE_OBJECT)
+
+gchar *
+gs_plugin_job_to_string (GsPluginJob *self)
+{
+ GString *str = g_string_new (NULL);
+ gint64 time_now = g_get_monotonic_time ();
+ g_string_append_printf (str, "running %s",
+ gs_plugin_action_to_string (self->action));
+ if (self->plugin != NULL) {
+ g_string_append_printf (str, " on plugin=%s",
+ gs_plugin_get_name (self->plugin));
+ }
+ if (self->filter_flags > 0) {
+ g_autofree gchar *tmp = gs_plugin_refine_flags_to_string (self->filter_flags);
+ g_string_append_printf (str, " with filter-flags=%s", tmp);
+ }
+ if (self->dedupe_flags > 0)
+ g_string_append_printf (str, " with dedupe-flags=%" G_GUINT64_FORMAT, self->dedupe_flags);
+ if (self->refine_flags > 0) {
+ g_autofree gchar *tmp = gs_plugin_refine_flags_to_string (self->refine_flags);
+ g_string_append_printf (str, " with refine-flags=%s", tmp);
+ }
+ if (self->interactive)
+ g_string_append_printf (str, " with interactive=True");
+ if (self->timeout > 0)
+ g_string_append_printf (str, " with timeout=%u", self->timeout);
+ if (self->max_results > 0)
+ g_string_append_printf (str, " with max-results=%u", self->max_results);
+ if (self->age != 0) {
+ if (self->age == G_MAXUINT) {
+ g_string_append (str, " with cache age=any");
+ } else {
+ g_string_append_printf (str, " with cache age=%" G_GUINT64_FORMAT,
+ self->age);
+ }
+ }
+ if (self->search != NULL) {
+ g_string_append_printf (str, " with search=%s",
+ self->search);
+ }
+ if (self->category != NULL) {
+ GsCategory *parent = gs_category_get_parent (self->category);
+ if (parent != NULL) {
+ g_string_append_printf (str, " with category=%s/%s",
+ gs_category_get_id (parent),
+ gs_category_get_id (self->category));
+ } else {
+ g_string_append_printf (str, " with category=%s",
+ gs_category_get_id (self->category));
+ }
+ }
+ if (self->review != NULL) {
+ g_string_append_printf (str, " with review=%s",
+ as_review_get_id (self->review));
+ }
+ if (self->file != NULL) {
+ g_autofree gchar *path = g_file_get_path (self->file);
+ g_string_append_printf (str, " with file=%s", path);
+ }
+ if (self->list != NULL && gs_app_list_length (self->list) > 0) {
+ g_autofree const gchar **unique_ids = NULL;
+ g_autofree gchar *unique_ids_str = NULL;
+ unique_ids = g_new0 (const gchar *, gs_app_list_length (self->list) + 1);
+ for (guint i = 0; i < gs_app_list_length (self->list); i++) {
+ GsApp *app = gs_app_list_index (self->list, i);
+ unique_ids[i] = gs_app_get_unique_id (app);
+ }
+ unique_ids_str = g_strjoinv (",", (gchar**) unique_ids);
+ g_string_append_printf (str, " on apps %s", unique_ids_str);
+ }
+ if (time_now - self->time_created > 1000) {
+ g_string_append_printf (str, ", elapsed time since creation %" G_GINT64_FORMAT "ms",
+ (time_now - self->time_created) / 1000);
+ }
+ return g_string_free (str, FALSE);
+}
+
+void
+gs_plugin_job_set_refine_flags (GsPluginJob *self, GsPluginRefineFlags refine_flags)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->refine_flags = refine_flags;
+}
+
+void
+gs_plugin_job_set_filter_flags (GsPluginJob *self, GsPluginRefineFlags filter_flags)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->filter_flags = filter_flags;
+}
+
+void
+gs_plugin_job_set_dedupe_flags (GsPluginJob *self, GsAppListFilterFlags dedupe_flags)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->dedupe_flags = dedupe_flags;
+}
+
+GsPluginRefineFlags
+gs_plugin_job_get_refine_flags (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->refine_flags;
+}
+
+GsPluginRefineFlags
+gs_plugin_job_get_filter_flags (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->filter_flags;
+}
+
+GsAppListFilterFlags
+gs_plugin_job_get_dedupe_flags (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->dedupe_flags;
+}
+
+gboolean
+gs_plugin_job_has_refine_flags (GsPluginJob *self, GsPluginRefineFlags refine_flags)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), FALSE);
+ return (self->refine_flags & refine_flags) > 0;
+}
+
+void
+gs_plugin_job_add_refine_flags (GsPluginJob *self, GsPluginRefineFlags refine_flags)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->refine_flags |= refine_flags;
+}
+
+void
+gs_plugin_job_remove_refine_flags (GsPluginJob *self, GsPluginRefineFlags refine_flags)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->refine_flags &= ~refine_flags;
+}
+
+void
+gs_plugin_job_set_interactive (GsPluginJob *self, gboolean interactive)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->interactive = interactive;
+}
+
+gboolean
+gs_plugin_job_get_interactive (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), FALSE);
+ return self->interactive;
+}
+
+void
+gs_plugin_job_set_max_results (GsPluginJob *self, guint max_results)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->max_results = max_results;
+}
+
+guint
+gs_plugin_job_get_max_results (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->max_results;
+}
+
+void
+gs_plugin_job_set_timeout (GsPluginJob *self, guint timeout)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->timeout = timeout;
+}
+
+guint
+gs_plugin_job_get_timeout (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->timeout;
+}
+
+void
+gs_plugin_job_set_age (GsPluginJob *self, guint64 age)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->age = age;
+}
+
+guint64
+gs_plugin_job_get_age (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->age;
+}
+
+void
+gs_plugin_job_set_action (GsPluginJob *self, GsPluginAction action)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->action = action;
+}
+
+GsPluginAction
+gs_plugin_job_get_action (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->action;
+}
+
+void
+gs_plugin_job_set_sort_func (GsPluginJob *self, GsAppListSortFunc sort_func)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->sort_func = sort_func;
+}
+
+GsAppListSortFunc
+gs_plugin_job_get_sort_func (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), 0);
+ return self->sort_func;
+}
+
+void
+gs_plugin_job_set_sort_func_data (GsPluginJob *self, gpointer sort_func_data)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ self->sort_func_data = sort_func_data;
+}
+
+gpointer
+gs_plugin_job_get_sort_func_data (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->sort_func_data;
+}
+
+void
+gs_plugin_job_set_search (GsPluginJob *self, const gchar *search)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ g_free (self->search);
+ self->search = g_strdup (search);
+}
+
+const gchar *
+gs_plugin_job_get_search (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->search;
+}
+
+void
+gs_plugin_job_set_app (GsPluginJob *self, GsApp *app)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ g_set_object (&self->app, app);
+
+ /* ensure we can always operate on a list object */
+ if (self->list != NULL && app != NULL && gs_app_list_length (self->list) == 0)
+ gs_app_list_add (self->list, self->app);
+}
+
+GsApp *
+gs_plugin_job_get_app (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->app;
+}
+
+void
+gs_plugin_job_set_list (GsPluginJob *self, GsAppList *list)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ if (list == NULL)
+ g_warning ("trying to set list to NULL, not a good idea");
+ g_set_object (&self->list, list);
+}
+
+GsAppList *
+gs_plugin_job_get_list (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->list;
+}
+
+void
+gs_plugin_job_set_file (GsPluginJob *self, GFile *file)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ g_set_object (&self->file, file);
+}
+
+GFile *
+gs_plugin_job_get_file (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->file;
+}
+
+void
+gs_plugin_job_set_plugin (GsPluginJob *self, GsPlugin *plugin)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ g_set_object (&self->plugin, plugin);
+}
+
+GsPlugin *
+gs_plugin_job_get_plugin (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->plugin;
+}
+
+void
+gs_plugin_job_set_category (GsPluginJob *self, GsCategory *category)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ g_set_object (&self->category, category);
+}
+
+GsCategory *
+gs_plugin_job_get_category (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->category;
+}
+
+void
+gs_plugin_job_set_review (GsPluginJob *self, AsReview *review)
+{
+ g_return_if_fail (GS_IS_PLUGIN_JOB (self));
+ g_set_object (&self->review, review);
+}
+
+AsReview *
+gs_plugin_job_get_review (GsPluginJob *self)
+{
+ g_return_val_if_fail (GS_IS_PLUGIN_JOB (self), NULL);
+ return self->review;
+}
+
+static void
+gs_plugin_job_get_property (GObject *obj, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GsPluginJob *self = GS_PLUGIN_JOB (obj);
+
+ switch (prop_id) {
+ case PROP_ACTION:
+ g_value_set_uint (value, self->action);
+ break;
+ case PROP_AGE:
+ g_value_set_uint64 (value, self->age);
+ break;
+ case PROP_REFINE_FLAGS:
+ g_value_set_uint64 (value, self->refine_flags);
+ break;
+ case PROP_FILTER_FLAGS:
+ g_value_set_uint64 (value, self->filter_flags);
+ break;
+ case PROP_DEDUPE_FLAGS:
+ g_value_set_uint64 (value, self->dedupe_flags);
+ break;
+ case PROP_INTERACTIVE:
+ g_value_set_boolean (value, self->interactive);
+ break;
+ case PROP_SEARCH:
+ g_value_set_string (value, self->search);
+ break;
+ case PROP_APP:
+ g_value_set_object (value, self->app);
+ break;
+ case PROP_LIST:
+ g_value_set_object (value, self->list);
+ break;
+ case PROP_FILE:
+ g_value_set_object (value, self->file);
+ break;
+ case PROP_CATEGORY:
+ g_value_set_object (value, self->category);
+ break;
+ case PROP_REVIEW:
+ g_value_set_object (value, self->review);
+ break;
+ case PROP_MAX_RESULTS:
+ g_value_set_uint (value, self->max_results);
+ break;
+ case PROP_TIMEOUT:
+ g_value_set_uint (value, self->timeout);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_plugin_job_set_property (GObject *obj, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ GsPluginJob *self = GS_PLUGIN_JOB (obj);
+
+ switch (prop_id) {
+ case PROP_ACTION:
+ gs_plugin_job_set_action (self, g_value_get_uint (value));
+ break;
+ case PROP_AGE:
+ gs_plugin_job_set_age (self, g_value_get_uint64 (value));
+ break;
+ case PROP_REFINE_FLAGS:
+ gs_plugin_job_set_refine_flags (self, g_value_get_uint64 (value));
+ break;
+ case PROP_FILTER_FLAGS:
+ gs_plugin_job_set_filter_flags (self, g_value_get_uint64 (value));
+ break;
+ case PROP_DEDUPE_FLAGS:
+ gs_plugin_job_set_dedupe_flags (self, g_value_get_uint64 (value));
+ break;
+ case PROP_INTERACTIVE:
+ gs_plugin_job_set_interactive (self, g_value_get_boolean (value));
+ break;
+ case PROP_SEARCH:
+ gs_plugin_job_set_search (self, g_value_get_string (value));
+ break;
+ case PROP_APP:
+ gs_plugin_job_set_app (self, g_value_get_object (value));
+ break;
+ case PROP_LIST:
+ gs_plugin_job_set_list (self, g_value_get_object (value));
+ break;
+ case PROP_FILE:
+ gs_plugin_job_set_file (self, g_value_get_object (value));
+ break;
+ case PROP_CATEGORY:
+ gs_plugin_job_set_category (self, g_value_get_object (value));
+ break;
+ case PROP_REVIEW:
+ gs_plugin_job_set_review (self, g_value_get_object (value));
+ break;
+ case PROP_MAX_RESULTS:
+ gs_plugin_job_set_max_results (self, g_value_get_uint (value));
+ break;
+ case PROP_TIMEOUT:
+ gs_plugin_job_set_timeout (self, g_value_get_uint (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_plugin_job_finalize (GObject *obj)
+{
+ GsPluginJob *self = GS_PLUGIN_JOB (obj);
+ g_free (self->search);
+ g_clear_object (&self->app);
+ g_clear_object (&self->list);
+ g_clear_object (&self->file);
+ g_clear_object (&self->plugin);
+ g_clear_object (&self->category);
+ g_clear_object (&self->review);
+ G_OBJECT_CLASS (gs_plugin_job_parent_class)->finalize (obj);
+}
+
+static void
+gs_plugin_job_class_init (GsPluginJobClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_plugin_job_finalize;
+ object_class->get_property = gs_plugin_job_get_property;
+ object_class->set_property = gs_plugin_job_set_property;
+
+ pspec = g_param_spec_uint ("action", NULL, NULL,
+ GS_PLUGIN_ACTION_UNKNOWN,
+ GS_PLUGIN_ACTION_LAST,
+ GS_PLUGIN_ACTION_UNKNOWN,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_ACTION, pspec);
+
+ pspec = g_param_spec_uint64 ("age", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_AGE, pspec);
+
+ pspec = g_param_spec_uint64 ("refine-flags", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_REFINE_FLAGS, pspec);
+
+ pspec = g_param_spec_uint64 ("filter-flags", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_FILTER_FLAGS, pspec);
+
+ pspec = g_param_spec_uint64 ("dedupe-flags", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_DEDUPE_FLAGS, pspec);
+
+ pspec = g_param_spec_boolean ("interactive", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE);
+
+ g_object_class_install_property (object_class, PROP_INTERACTIVE, pspec);
+
+ pspec = g_param_spec_string ("search", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_SEARCH, pspec);
+
+ pspec = g_param_spec_object ("app", NULL, NULL,
+ GS_TYPE_APP,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_APP, pspec);
+
+ pspec = g_param_spec_object ("list", NULL, NULL,
+ GS_TYPE_APP_LIST,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_LIST, pspec);
+
+ pspec = g_param_spec_object ("file", NULL, NULL,
+ G_TYPE_FILE,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_FILE, pspec);
+
+ pspec = g_param_spec_object ("category", NULL, NULL,
+ GS_TYPE_CATEGORY,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_CATEGORY, pspec);
+
+ pspec = g_param_spec_object ("review", NULL, NULL,
+ AS_TYPE_REVIEW,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_REVIEW, pspec);
+
+ pspec = g_param_spec_uint ("max-results", NULL, NULL,
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_MAX_RESULTS, pspec);
+
+ pspec = g_param_spec_uint ("timeout", NULL, NULL,
+ 0, G_MAXUINT, 60,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class, PROP_TIMEOUT, pspec);
+}
+
+static void
+gs_plugin_job_init (GsPluginJob *self)
+{
+ self->refine_flags = GS_PLUGIN_REFINE_FLAGS_DEFAULT;
+ self->filter_flags = GS_PLUGIN_REFINE_FLAGS_DEFAULT;
+ self->dedupe_flags = GS_APP_LIST_FILTER_FLAG_KEY_ID |
+ GS_APP_LIST_FILTER_FLAG_KEY_SOURCE |
+ GS_APP_LIST_FILTER_FLAG_KEY_VERSION;
+ self->list = gs_app_list_new ();
+ self->time_created = g_get_monotonic_time ();
+}
diff --git a/lib/gs-plugin-job.h b/lib/gs-plugin-job.h
new file mode 100644
index 0000000..885be1c
--- /dev/null
+++ b/lib/gs-plugin-job.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-app-list-private.h"
+#include "gs-category.h"
+#include "gs-plugin-types.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PLUGIN_JOB (gs_plugin_job_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsPluginJob, gs_plugin_job, GS, PLUGIN_JOB, GObject)
+
+void gs_plugin_job_set_refine_flags (GsPluginJob *self,
+ GsPluginRefineFlags refine_flags);
+void gs_plugin_job_set_filter_flags (GsPluginJob *self,
+ GsPluginRefineFlags filter_flags);
+void gs_plugin_job_set_dedupe_flags (GsPluginJob *self,
+ GsAppListFilterFlags dedupe_flags);
+void gs_plugin_job_set_interactive (GsPluginJob *self,
+ gboolean interactive);
+void gs_plugin_job_set_max_results (GsPluginJob *self,
+ guint max_results);
+void gs_plugin_job_set_timeout (GsPluginJob *self,
+ guint timeout);
+void gs_plugin_job_set_age (GsPluginJob *self,
+ guint64 age);
+void gs_plugin_job_set_sort_func (GsPluginJob *self,
+ GsAppListSortFunc sort_func);
+void gs_plugin_job_set_sort_func_data (GsPluginJob *self,
+ gpointer sort_func_data);
+void gs_plugin_job_set_search (GsPluginJob *self,
+ const gchar *search);
+void gs_plugin_job_set_app (GsPluginJob *self,
+ GsApp *app);
+void gs_plugin_job_set_list (GsPluginJob *self,
+ GsAppList *list);
+void gs_plugin_job_set_file (GsPluginJob *self,
+ GFile *file);
+void gs_plugin_job_set_plugin (GsPluginJob *self,
+ GsPlugin *plugin);
+void gs_plugin_job_set_category (GsPluginJob *self,
+ GsCategory *category);
+void gs_plugin_job_set_review (GsPluginJob *self,
+ AsReview *review);
+
+#define gs_plugin_job_newv(a,...) GS_PLUGIN_JOB(g_object_new(GS_TYPE_PLUGIN_JOB, "action", a, __VA_ARGS__))
+
+G_END_DECLS
diff --git a/lib/gs-plugin-loader-sync.c b/lib/gs-plugin-loader-sync.c
new file mode 100644
index 0000000..bf6f076
--- /dev/null
+++ b/lib/gs-plugin-loader-sync.c
@@ -0,0 +1,208 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-plugin-loader-sync.h"
+
+/* tiny helper to help us do the async operation */
+typedef struct {
+ GAsyncResult *res;
+ GMainContext *context;
+ GMainLoop *loop;
+} GsPluginLoaderHelper;
+
+static void
+_job_process_finish_sync (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsPluginLoaderHelper *helper)
+{
+ helper->res = g_object_ref (res);
+ g_main_loop_quit (helper->loop);
+}
+
+GsAppList *
+gs_plugin_loader_job_process (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderHelper helper;
+ GsAppList *list;
+
+ /* create temp object */
+ helper.res = NULL;
+ helper.context = g_main_context_new ();
+ helper.loop = g_main_loop_new (helper.context, FALSE);
+
+ g_main_context_push_thread_default (helper.context);
+
+ /* run async method */
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job,
+ cancellable,
+ (GAsyncReadyCallback) _job_process_finish_sync,
+ &helper);
+ g_main_loop_run (helper.loop);
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ helper.res,
+ error);
+
+ g_main_context_pop_thread_default (helper.context);
+
+ g_main_loop_unref (helper.loop);
+ g_main_context_unref (helper.context);
+ if (helper.res != NULL)
+ g_object_unref (helper.res);
+
+ return list;
+}
+
+static void
+_job_get_categories_finish_sync (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsPluginLoaderHelper *helper)
+{
+ helper->res = g_object_ref (res);
+ g_main_loop_quit (helper->loop);
+}
+
+GPtrArray *
+gs_plugin_loader_job_get_categories (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderHelper helper;
+ GPtrArray *catlist;
+
+ /* create temp object */
+ helper.res = NULL;
+ helper.context = g_main_context_new ();
+ helper.loop = g_main_loop_new (helper.context, FALSE);
+
+ g_main_context_push_thread_default (helper.context);
+
+ /* run async method */
+ gs_plugin_loader_job_get_categories_async (plugin_loader,
+ plugin_job,
+ cancellable,
+ (GAsyncReadyCallback) _job_get_categories_finish_sync,
+ &helper);
+ g_main_loop_run (helper.loop);
+ catlist = gs_plugin_loader_job_get_categories_finish (plugin_loader,
+ helper.res,
+ error);
+
+ g_main_context_pop_thread_default (helper.context);
+
+ g_main_loop_unref (helper.loop);
+ g_main_context_unref (helper.context);
+ if (helper.res != NULL)
+ g_object_unref (helper.res);
+
+ return catlist;
+}
+
+static void
+_job_action_finish_sync (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsPluginLoaderHelper *helper)
+{
+ helper->res = g_object_ref (res);
+ g_main_loop_quit (helper->loop);
+}
+
+gboolean
+gs_plugin_loader_job_action (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderHelper helper;
+ gboolean ret;
+
+ /* create temp object */
+ helper.res = NULL;
+ helper.context = g_main_context_new ();
+ helper.loop = g_main_loop_new (helper.context, FALSE);
+
+ g_main_context_push_thread_default (helper.context);
+
+ /* run async method */
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job,
+ cancellable,
+ (GAsyncReadyCallback) _job_action_finish_sync,
+ &helper);
+ g_main_loop_run (helper.loop);
+ ret = gs_plugin_loader_job_action_finish (plugin_loader,
+ helper.res,
+ error);
+
+ g_main_context_pop_thread_default (helper.context);
+
+ g_main_loop_unref (helper.loop);
+ g_main_context_unref (helper.context);
+ if (helper.res != NULL)
+ g_object_unref (helper.res);
+
+ return ret;
+}
+
+static void
+_job_process_app_finish_sync (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoaderHelper *helper = (GsPluginLoaderHelper *) user_data;
+
+ helper->res = g_object_ref (res);
+ g_main_loop_quit (helper->loop);
+}
+
+GsApp *
+gs_plugin_loader_job_process_app (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderHelper helper;
+ g_autoptr(GsAppList) list = NULL;
+ GsApp *app = NULL;
+
+ /* create temp object */
+ helper.res = NULL;
+ helper.context = g_main_context_new ();
+ helper.loop = g_main_loop_new (helper.context, FALSE);
+
+ g_main_context_push_thread_default (helper.context);
+
+ /* run async method */
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job,
+ cancellable,
+ _job_process_app_finish_sync,
+ &helper);
+ g_main_loop_run (helper.loop);
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ helper.res,
+ error);
+ if (list != NULL)
+ app = g_object_ref (gs_app_list_index (list, 0));
+
+ g_main_context_pop_thread_default (helper.context);
+
+ g_main_loop_unref (helper.loop);
+ g_main_context_unref (helper.context);
+ if (helper.res != NULL)
+ g_object_unref (helper.res);
+
+ return app;
+}
diff --git a/lib/gs-plugin-loader-sync.h b/lib/gs-plugin-loader-sync.h
new file mode 100644
index 0000000..b428ba9
--- /dev/null
+++ b/lib/gs-plugin-loader-sync.h
@@ -0,0 +1,34 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2007-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-plugin-loader.h"
+
+G_BEGIN_DECLS
+
+GsAppList *gs_plugin_loader_job_process (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error);
+GsApp *gs_plugin_loader_job_process_app (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_plugin_loader_job_action (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error);
+GPtrArray *gs_plugin_loader_job_get_categories (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
new file mode 100644
index 0000000..7783f77
--- /dev/null
+++ b/lib/gs-plugin-loader.c
@@ -0,0 +1,3968 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2007-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <locale.h>
+#include <glib/gi18n.h>
+#include <appstream-glib.h>
+#include <math.h>
+
+#ifdef HAVE_SYSPROF
+#include <sysprof-capture.h>
+#endif
+
+#include "gs-app-collation.h"
+#include "gs-app-private.h"
+#include "gs-app-list-private.h"
+#include "gs-category-private.h"
+#include "gs-ioprio.h"
+#include "gs-plugin-loader.h"
+#include "gs-plugin.h"
+#include "gs-plugin-event.h"
+#include "gs-plugin-job-private.h"
+#include "gs-plugin-private.h"
+#include "gs-utils.h"
+
+#define GS_PLUGIN_LOADER_UPDATES_CHANGED_DELAY 3 /* s */
+#define GS_PLUGIN_LOADER_RELOAD_DELAY 5 /* s */
+
+typedef struct
+{
+ GPtrArray *plugins;
+ GPtrArray *locations;
+ gchar *locale;
+ gchar *language;
+ gboolean plugin_dir_dirty;
+ SoupSession *soup_session;
+ GPtrArray *file_monitors;
+ GsPluginStatus global_status_last;
+
+ GMutex pending_apps_mutex;
+ GPtrArray *pending_apps;
+
+ GThreadPool *queued_ops_pool;
+
+ GSettings *settings;
+
+ GMutex events_by_id_mutex;
+ GHashTable *events_by_id; /* unique-id : GsPluginEvent */
+
+ gchar **compatible_projects;
+ guint scale;
+
+ guint updates_changed_id;
+ guint updates_changed_cnt;
+ guint reload_id;
+ GHashTable *disallow_updates; /* GsPlugin : const char *name */
+
+ GNetworkMonitor *network_monitor;
+ gulong network_changed_handler;
+ gulong network_available_notify_handler;
+ gulong network_metered_notify_handler;
+
+#ifdef HAVE_SYSPROF
+ SysprofCaptureWriter *sysprof_writer; /* (owned) (nullable) */
+#endif
+} GsPluginLoaderPrivate;
+
+static void gs_plugin_loader_monitor_network (GsPluginLoader *plugin_loader);
+static void add_app_to_install_queue (GsPluginLoader *plugin_loader, GsApp *app);
+static void gs_plugin_loader_process_in_thread_pool_cb (gpointer data, gpointer user_data);
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsPluginLoader, gs_plugin_loader, G_TYPE_OBJECT)
+
+enum {
+ SIGNAL_STATUS_CHANGED,
+ SIGNAL_PENDING_APPS_CHANGED,
+ SIGNAL_UPDATES_CHANGED,
+ SIGNAL_RELOAD,
+ SIGNAL_BASIC_AUTH_START,
+ SIGNAL_LAST
+};
+
+enum {
+ PROP_0,
+ PROP_EVENTS,
+ PROP_ALLOW_UPDATES,
+ PROP_NETWORK_AVAILABLE,
+ PROP_NETWORK_METERED,
+ PROP_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+typedef void (*GsPluginFunc) (GsPlugin *plugin);
+typedef gboolean (*GsPluginSetupFunc) (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginSearchFunc) (GsPlugin *plugin,
+ gchar **value,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginAlternatesFunc) (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginCategoryFunc) (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginGetRecentFunc) (GsPlugin *plugin,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginResultsFunc) (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginCategoriesFunc) (GsPlugin *plugin,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginActionFunc) (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginReviewFunc) (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginRefineFunc) (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginRefineAppFunc) (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginRefineWildcardFunc) (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginRefreshFunc) (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginFileToAppFunc) (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginUrlToAppFunc) (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error);
+typedef gboolean (*GsPluginUpdateFunc) (GsPlugin *plugin,
+ GsAppList *apps,
+ GCancellable *cancellable,
+ GError **error);
+typedef void (*GsPluginAdoptAppFunc) (GsPlugin *plugin,
+ GsApp *app);
+typedef gboolean (*GsPluginGetLangPacksFunc) (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *locale,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* async helper */
+typedef struct {
+ GsPluginLoader *plugin_loader;
+ GCancellable *cancellable;
+ GCancellable *cancellable_caller;
+ gulong cancellable_id;
+ const gchar *function_name;
+ const gchar *function_name_parent;
+ GPtrArray *catlist;
+ GsPluginJob *plugin_job;
+ gboolean anything_ran;
+ guint timeout_id;
+ gboolean timeout_triggered;
+ gchar **tokens;
+} GsPluginLoaderHelper;
+
+static GsPluginLoaderHelper *
+gs_plugin_loader_helper_new (GsPluginLoader *plugin_loader, GsPluginJob *plugin_job)
+{
+ GsPluginLoaderHelper *helper = g_slice_new0 (GsPluginLoaderHelper);
+ GsPluginAction action = gs_plugin_job_get_action (plugin_job);
+ helper->plugin_loader = g_object_ref (plugin_loader);
+ helper->plugin_job = g_object_ref (plugin_job);
+ helper->function_name = gs_plugin_action_to_function_name (action);
+ return helper;
+}
+
+static void
+reset_app_progress (GsApp *app)
+{
+ GsAppList *addons = gs_app_get_addons (app);
+ GsAppList *related = gs_app_get_related (app);
+
+ gs_app_set_progress (app, GS_APP_PROGRESS_UNKNOWN);
+
+ for (guint i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *app_addons = gs_app_list_index (addons, i);
+ gs_app_set_progress (app_addons, GS_APP_PROGRESS_UNKNOWN);
+ }
+ for (guint i = 0; i < gs_app_list_length (related); i++) {
+ GsApp *app_related = gs_app_list_index (related, i);
+ gs_app_set_progress (app_related, GS_APP_PROGRESS_UNKNOWN);
+ }
+}
+
+static void
+gs_plugin_loader_helper_free (GsPluginLoaderHelper *helper)
+{
+ /* reset progress */
+ switch (gs_plugin_job_get_action (helper->plugin_job)) {
+ case GS_PLUGIN_ACTION_INSTALL:
+ case GS_PLUGIN_ACTION_REMOVE:
+ case GS_PLUGIN_ACTION_UPDATE:
+ case GS_PLUGIN_ACTION_DOWNLOAD:
+ {
+ GsApp *app;
+ GsAppList *list;
+
+ app = gs_plugin_job_get_app (helper->plugin_job);
+ if (app != NULL)
+ reset_app_progress (app);
+
+ list = gs_plugin_job_get_list (helper->plugin_job);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app_tmp = gs_app_list_index (list, i);
+ reset_app_progress (app_tmp);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (helper->cancellable_id > 0) {
+ g_debug ("Disconnecting cancellable %p", helper->cancellable_caller);
+ g_cancellable_disconnect (helper->cancellable_caller,
+ helper->cancellable_id);
+ }
+ g_object_unref (helper->plugin_loader);
+ if (helper->timeout_id != 0)
+ g_source_remove (helper->timeout_id);
+ if (helper->plugin_job != NULL)
+ g_object_unref (helper->plugin_job);
+ if (helper->cancellable != NULL)
+ g_object_unref (helper->cancellable);
+ if (helper->cancellable_caller != NULL)
+ g_object_unref (helper->cancellable_caller);
+ if (helper->catlist != NULL)
+ g_ptr_array_unref (helper->catlist);
+ g_strfreev (helper->tokens);
+ g_slice_free (GsPluginLoaderHelper, helper);
+}
+
+static void
+gs_plugin_loader_job_debug (GsPluginLoaderHelper *helper)
+{
+ g_autofree gchar *str = gs_plugin_job_to_string (helper->plugin_job);
+ g_debug ("%s", str);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsPluginLoaderHelper, gs_plugin_loader_helper_free)
+
+static gint
+gs_plugin_loader_app_sort_name_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ return gs_utils_sort_strcmp (gs_app_get_name (app1), gs_app_get_name (app2));
+}
+
+GsPlugin *
+gs_plugin_loader_find_plugin (GsPluginLoader *plugin_loader,
+ const gchar *plugin_name)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ if (g_strcmp0 (gs_plugin_get_name (plugin), plugin_name) == 0)
+ return plugin;
+ }
+ return NULL;
+}
+
+static gboolean
+gs_plugin_loader_notify_idle_cb (gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+ g_object_notify (G_OBJECT (plugin_loader), "events");
+ return FALSE;
+}
+
+static void
+gs_plugin_loader_add_event (GsPluginLoader *plugin_loader, GsPluginEvent *event)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->events_by_id_mutex);
+
+ /* events should always have a unique ID, either constructed from the
+ * app they are processing or preferably from the GError message */
+ if (gs_plugin_event_get_unique_id (event) == NULL) {
+ g_warning ("failed to add event from action %s",
+ gs_plugin_action_to_string (gs_plugin_event_get_action (event)));
+ return;
+ }
+
+ g_hash_table_insert (priv->events_by_id,
+ g_strdup (gs_plugin_event_get_unique_id (event)),
+ g_object_ref (event));
+ g_idle_add (gs_plugin_loader_notify_idle_cb, plugin_loader);
+}
+
+static GsPluginEvent *
+gs_plugin_job_to_failed_event (GsPluginJob *plugin_job, const GError *error)
+{
+ GsPluginEvent *event;
+ g_autoptr(GError) error_copy = NULL;
+
+ g_return_val_if_fail (error != NULL, NULL);
+
+ /* invalid */
+ if (error->domain != GS_PLUGIN_ERROR) {
+ g_warning ("not GsPlugin error %s:%i: %s",
+ g_quark_to_string (error->domain),
+ error->code,
+ error->message);
+ g_set_error_literal (&error_copy,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ error->message);
+ } else {
+ error_copy = g_error_copy (error);
+ }
+
+ /* create plugin event */
+ event = gs_plugin_event_new ();
+ gs_plugin_event_set_error (event, error_copy);
+ gs_plugin_event_set_action (event, gs_plugin_job_get_action (plugin_job));
+ if (gs_plugin_job_get_app (plugin_job) != NULL)
+ gs_plugin_event_set_app (event, gs_plugin_job_get_app (plugin_job));
+ if (gs_plugin_job_get_interactive (plugin_job))
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ return event;
+}
+
+static gboolean
+gs_plugin_loader_is_error_fatal (const GError *err)
+{
+ if (g_error_matches (err, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_TIMED_OUT))
+ return TRUE;
+ if (g_error_matches (err, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_AUTH_REQUIRED))
+ return TRUE;
+ if (g_error_matches (err, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_AUTH_INVALID))
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+gs_plugin_error_handle_failure (GsPluginLoaderHelper *helper,
+ GsPlugin *plugin,
+ const GError *error_local,
+ GError **error)
+{
+ g_autofree gchar *app_id = NULL;
+ g_autofree gchar *origin_id = NULL;
+ g_autoptr(GsPluginEvent) event = NULL;
+
+ /* badly behaved plugin */
+ if (error_local == NULL) {
+ g_critical ("%s did not set error for %s",
+ gs_plugin_get_name (plugin),
+ helper->function_name);
+ return TRUE;
+ }
+
+ /* this is only ever informational */
+ if (g_error_matches (error_local, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) ||
+ g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ g_debug ("ignoring error cancelled: %s", error_local->message);
+ return TRUE;
+ }
+
+ /* find and strip any unique IDs from the error message */
+ for (guint i = 0; i < 2; i++) {
+ if (app_id == NULL)
+ app_id = gs_utils_error_strip_app_id (error_local);
+ if (origin_id == NULL)
+ origin_id = gs_utils_error_strip_origin_id (error_local);
+ }
+
+ /* fatal error */
+ if (gs_plugin_job_get_action (helper->plugin_job) == GS_PLUGIN_ACTION_SETUP ||
+ gs_plugin_loader_is_error_fatal (error_local) ||
+ g_getenv ("GS_SELF_TEST_PLUGIN_ERROR_FAIL_HARD") != NULL) {
+ if (error != NULL)
+ *error = g_error_copy (error_local);
+ return FALSE;
+ }
+
+ /* create event which is handled by the GsShell */
+ event = gs_plugin_job_to_failed_event (helper->plugin_job, error_local);
+
+ /* set the app and origin IDs if we managed to scrape them from the error above */
+ if (as_utils_unique_id_valid (app_id)) {
+ g_autoptr(GsApp) app = gs_plugin_cache_lookup (plugin, app_id);
+ if (app != NULL) {
+ g_debug ("found app %s in error", origin_id);
+ gs_plugin_event_set_app (event, app);
+ } else {
+ g_debug ("no unique ID found for app %s", app_id);
+ }
+ }
+ if (as_utils_unique_id_valid (origin_id)) {
+ g_autoptr(GsApp) origin = gs_plugin_cache_lookup (plugin, origin_id);
+ if (origin != NULL) {
+ g_debug ("found origin %s in error", origin_id);
+ gs_plugin_event_set_origin (event, origin);
+ } else {
+ g_debug ("no unique ID found for origin %s", origin_id);
+ }
+ }
+
+ /* add event to queue */
+ gs_plugin_loader_add_event (helper->plugin_loader, event);
+ return TRUE;
+}
+
+static void
+gs_plugin_loader_run_adopt (GsPluginLoader *plugin_loader, GsAppList *list)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ guint i;
+ guint j;
+
+ /* go through each plugin in order */
+ for (i = 0; i < priv->plugins->len; i++) {
+ GsPluginAdoptAppFunc adopt_app_func = NULL;
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ adopt_app_func = gs_plugin_get_symbol (plugin, "gs_plugin_adopt_app");
+ if (adopt_app_func == NULL)
+ continue;
+ for (j = 0; j < gs_app_list_length (list); j++) {
+ GsApp *app = gs_app_list_index (list, j);
+ if (gs_app_get_management_plugin (app) != NULL)
+ continue;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ adopt_app_func (plugin, app);
+ if (gs_app_get_management_plugin (app) != NULL) {
+ g_debug ("%s adopted %s",
+ gs_plugin_get_name (plugin),
+ gs_app_get_unique_id (app));
+ }
+ }
+ }
+ for (j = 0; j < gs_app_list_length (list); j++) {
+ GsApp *app = gs_app_list_index (list, j);
+ if (gs_app_get_management_plugin (app) != NULL)
+ continue;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ g_debug ("nothing adopted %s", gs_app_get_unique_id (app));
+ }
+}
+
+static gint
+gs_plugin_loader_review_score_sort_cb (gconstpointer a, gconstpointer b)
+{
+ AsReview *ra = *((AsReview **) a);
+ AsReview *rb = *((AsReview **) b);
+ if (as_review_get_priority (ra) < as_review_get_priority (rb))
+ return 1;
+ if (as_review_get_priority (ra) > as_review_get_priority (rb))
+ return -1;
+ return 0;
+}
+
+static gboolean
+gs_plugin_loader_call_vfunc (GsPluginLoaderHelper *helper,
+ GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+#ifdef HAVE_SYSPROF
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (helper->plugin_loader);
+#endif
+ GsPluginAction action = gs_plugin_job_get_action (helper->plugin_job);
+ gboolean ret = TRUE;
+ gpointer func = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GTimer) timer = g_timer_new ();
+#ifdef HAVE_SYSPROF
+ gint64 begin_time_nsec = SYSPROF_CAPTURE_CURRENT_TIME;
+#endif
+
+ /* load the possible symbol */
+ func = gs_plugin_get_symbol (plugin, helper->function_name);
+ if (func == NULL)
+ return TRUE;
+
+ /* fallback if unset */
+ if (app == NULL)
+ app = gs_plugin_job_get_app (helper->plugin_job);
+ if (list == NULL)
+ list = gs_plugin_job_get_list (helper->plugin_job);
+ if (refine_flags == GS_PLUGIN_REFINE_FLAGS_DEFAULT)
+ refine_flags = gs_plugin_job_get_refine_flags (helper->plugin_job);
+
+ /* set what plugin is running on the job */
+ gs_plugin_job_set_plugin (helper->plugin_job, plugin);
+
+ /* run the correct vfunc */
+ if (gs_plugin_job_get_interactive (helper->plugin_job))
+ gs_plugin_interactive_inc (plugin);
+ switch (action) {
+ case GS_PLUGIN_ACTION_INITIALIZE:
+ case GS_PLUGIN_ACTION_DESTROY:
+ {
+ GsPluginFunc plugin_func = func;
+ plugin_func (plugin);
+ }
+ break;
+ case GS_PLUGIN_ACTION_SETUP:
+ {
+ GsPluginSetupFunc plugin_func = func;
+ ret = plugin_func (plugin, cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_REFINE:
+ if (g_strcmp0 (helper->function_name, "gs_plugin_refine_wildcard") == 0) {
+ GsPluginRefineWildcardFunc plugin_func = func;
+ ret = plugin_func (plugin, app, list, refine_flags, cancellable, &error_local);
+ } else if (g_strcmp0 (helper->function_name, "gs_plugin_refine") == 0) {
+ GsPluginRefineFunc plugin_func = func;
+ ret = plugin_func (plugin, list, refine_flags, cancellable, &error_local);
+ } else {
+ g_critical ("function_name %s invalid for %s",
+ helper->function_name,
+ gs_plugin_action_to_string (action));
+ }
+ break;
+ case GS_PLUGIN_ACTION_UPDATE:
+ if (g_strcmp0 (helper->function_name, "gs_plugin_update_app") == 0) {
+ GsPluginActionFunc plugin_func = func;
+ ret = plugin_func (plugin, app, cancellable, &error_local);
+ } else if (g_strcmp0 (helper->function_name, "gs_plugin_update") == 0) {
+ GsPluginUpdateFunc plugin_func = func;
+ ret = plugin_func (plugin, list, cancellable, &error_local);
+ } else {
+ g_critical ("function_name %s invalid for %s",
+ helper->function_name,
+ gs_plugin_action_to_string (action));
+ }
+ break;
+ case GS_PLUGIN_ACTION_DOWNLOAD:
+ if (g_strcmp0 (helper->function_name, "gs_plugin_download_app") == 0) {
+ GsPluginActionFunc plugin_func = func;
+ ret = plugin_func (plugin, app, cancellable, &error_local);
+ } else if (g_strcmp0 (helper->function_name, "gs_plugin_download") == 0) {
+ GsPluginUpdateFunc plugin_func = func;
+ ret = plugin_func (plugin, list, cancellable, &error_local);
+ } else {
+ g_critical ("function_name %s invalid for %s",
+ helper->function_name,
+ gs_plugin_action_to_string (action));
+ }
+ break;
+ case GS_PLUGIN_ACTION_INSTALL:
+ case GS_PLUGIN_ACTION_REMOVE:
+ case GS_PLUGIN_ACTION_SET_RATING:
+ case GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD:
+ case GS_PLUGIN_ACTION_UPGRADE_TRIGGER:
+ case GS_PLUGIN_ACTION_LAUNCH:
+ case GS_PLUGIN_ACTION_UPDATE_CANCEL:
+ case GS_PLUGIN_ACTION_ADD_SHORTCUT:
+ case GS_PLUGIN_ACTION_REMOVE_SHORTCUT:
+ {
+ GsPluginActionFunc plugin_func = func;
+ ret = plugin_func (plugin, app, cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_REVIEW_SUBMIT:
+ case GS_PLUGIN_ACTION_REVIEW_UPVOTE:
+ case GS_PLUGIN_ACTION_REVIEW_DOWNVOTE:
+ case GS_PLUGIN_ACTION_REVIEW_REPORT:
+ case GS_PLUGIN_ACTION_REVIEW_REMOVE:
+ case GS_PLUGIN_ACTION_REVIEW_DISMISS:
+ {
+ GsPluginReviewFunc plugin_func = func;
+ ret = plugin_func (plugin, app,
+ gs_plugin_job_get_review (helper->plugin_job),
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_RECENT:
+ {
+ GsPluginGetRecentFunc plugin_func = func;
+ ret = plugin_func (plugin, list,
+ gs_plugin_job_get_age (helper->plugin_job),
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_UPDATES:
+ case GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL:
+ case GS_PLUGIN_ACTION_GET_DISTRO_UPDATES:
+ case GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS:
+ case GS_PLUGIN_ACTION_GET_SOURCES:
+ case GS_PLUGIN_ACTION_GET_INSTALLED:
+ case GS_PLUGIN_ACTION_GET_POPULAR:
+ case GS_PLUGIN_ACTION_GET_FEATURED:
+ {
+ GsPluginResultsFunc plugin_func = func;
+ ret = plugin_func (plugin, list, cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_SEARCH:
+ {
+ GsPluginSearchFunc plugin_func = func;
+ ret = plugin_func (plugin, helper->tokens, list,
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_SEARCH_FILES:
+ case GS_PLUGIN_ACTION_SEARCH_PROVIDES:
+ {
+ GsPluginSearchFunc plugin_func = func;
+ gchar *search[2] = { gs_plugin_job_get_search (helper->plugin_job), NULL };
+ ret = plugin_func (plugin, search, list,
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_ALTERNATES:
+ {
+ GsPluginAlternatesFunc plugin_func = func;
+ ret = plugin_func (plugin, app, list,
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_CATEGORIES:
+ {
+ GsPluginCategoriesFunc plugin_func = func;
+ ret = plugin_func (plugin, helper->catlist,
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_CATEGORY_APPS:
+ {
+ GsPluginCategoryFunc plugin_func = func;
+ ret = plugin_func (plugin,
+ gs_plugin_job_get_category (helper->plugin_job),
+ list,
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_REFRESH:
+ {
+ GsPluginRefreshFunc plugin_func = func;
+ ret = plugin_func (plugin,
+ gs_plugin_job_get_age (helper->plugin_job),
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_FILE_TO_APP:
+ {
+ GsPluginFileToAppFunc plugin_func = func;
+ ret = plugin_func (plugin, list,
+ gs_plugin_job_get_file (helper->plugin_job),
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_URL_TO_APP:
+ {
+ GsPluginUrlToAppFunc plugin_func = func;
+ ret = plugin_func (plugin, list,
+ gs_plugin_job_get_search (helper->plugin_job),
+ cancellable, &error_local);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_LANGPACKS:
+ {
+ GsPluginGetLangPacksFunc plugin_func = func;
+ ret = plugin_func (plugin, list,
+ gs_plugin_job_get_search (helper->plugin_job),
+ cancellable, &error_local);
+ }
+ break;
+ default:
+ g_critical ("no handler for %s", helper->function_name);
+ break;
+ }
+ if (gs_plugin_job_get_interactive (helper->plugin_job))
+ gs_plugin_interactive_dec (plugin);
+
+ /* plugin did not return error on cancellable abort */
+ if (ret && g_cancellable_set_error_if_cancelled (cancellable, &error_local)) {
+ g_debug ("plugin %s did not return error with cancellable set",
+ gs_plugin_get_name (plugin));
+ gs_utils_error_convert_gio (&error_local);
+ ret = FALSE;
+ }
+
+ /* failed */
+ if (!ret) {
+ /* we returned cancelled, but this was because of a timeout,
+ * so re-create error, throwing the plugin under the bus */
+ if (helper->timeout_triggered &&
+ g_error_matches (error_local, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("converting cancelled to timeout");
+ g_clear_error (&error_local);
+ g_set_error (&error_local,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_TIMED_OUT,
+ "Timeout was reached as %s took "
+ "too long to return results",
+ gs_plugin_get_name (plugin));
+ }
+ return gs_plugin_error_handle_failure (helper,
+ plugin,
+ error_local,
+ error);
+ }
+
+ /* add app to the pending installation queue if necessary */
+ if (action == GS_PLUGIN_ACTION_INSTALL &&
+ app != NULL && gs_app_get_state (app) == AS_APP_STATE_QUEUED_FOR_INSTALL) {
+ add_app_to_install_queue (helper->plugin_loader, app);
+ }
+
+#ifdef HAVE_SYSPROF
+ if (priv->sysprof_writer != NULL) {
+ g_autofree gchar *sysprof_name = NULL;
+ g_autofree gchar *sysprof_message = NULL;
+
+ sysprof_name = g_strconcat ("vfunc:", gs_plugin_action_to_string (action), NULL);
+ sysprof_message = gs_plugin_job_to_string (helper->plugin_job);
+ sysprof_capture_writer_add_mark (priv->sysprof_writer,
+ begin_time_nsec,
+ sched_getcpu (),
+ getpid (),
+ SYSPROF_CAPTURE_CURRENT_TIME - begin_time_nsec,
+ "gnome-software",
+ sysprof_name,
+ sysprof_message);
+ }
+#endif /* HAVE_SYSPROF */
+
+ /* check the plugin didn't take too long */
+ if (g_timer_elapsed (timer, NULL) > 1.0f) {
+ GLogLevelFlags log_level;
+
+ switch (action) {
+ case GS_PLUGIN_ACTION_INITIALIZE:
+ case GS_PLUGIN_ACTION_DESTROY:
+ case GS_PLUGIN_ACTION_SETUP:
+ if (g_getenv ("GS_SELF_TEST_PLUGIN_ERROR_FAIL_HARD") == NULL)
+ log_level = G_LOG_LEVEL_WARNING;
+ else
+ log_level = G_LOG_LEVEL_DEBUG;
+ break;
+ default:
+ log_level = G_LOG_LEVEL_DEBUG;
+ break;
+ }
+
+ g_log_structured_standard (G_LOG_DOMAIN, log_level,
+ __FILE__, G_STRINGIFY (__LINE__),
+ G_STRFUNC,
+ "plugin %s took %.1f seconds to do %s",
+ gs_plugin_get_name (plugin),
+ g_timer_elapsed (timer, NULL),
+ gs_plugin_action_to_string (action));
+ }
+
+ /* success */
+ helper->anything_ran = TRUE;
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_loader_app_is_non_wildcard (GsApp *app, gpointer user_data)
+{
+ return !gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+}
+
+static gboolean
+gs_plugin_loader_run_refine_filter (GsPluginLoaderHelper *helper,
+ GsAppList *list,
+ GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (helper->plugin_loader);
+
+ /* run each plugin */
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ g_autoptr(GsAppList) app_list = NULL;
+
+ /* run the batched plugin symbol then refine wildcards per-app */
+ helper->function_name = "gs_plugin_refine";
+ if (!gs_plugin_loader_call_vfunc (helper, plugin, NULL, list,
+ refine_flags, cancellable, error)) {
+ return FALSE;
+ }
+
+ if (gs_plugin_get_symbol (plugin, "gs_plugin_refine_wildcard") != NULL) {
+ /* use a copy of the list for the loop because a function called
+ * on the plugin may affect the list which can lead to problems
+ * (e.g. inserting an app in the list on every call results in
+ * an infinite loop) */
+ app_list = gs_app_list_copy (list);
+ helper->function_name = "gs_plugin_refine_wildcard";
+
+ for (guint j = 0; j < gs_app_list_length (app_list); j++) {
+ GsApp *app = gs_app_list_index (app_list, j);
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD) &&
+ !gs_plugin_loader_call_vfunc (helper, plugin, app, NULL,
+ refine_flags, cancellable, error)) {
+ return FALSE;
+ }
+ }
+ }
+
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_FINISHED);
+ }
+
+
+ /* filter any wildcard apps left in the list */
+ gs_app_list_filter (list, gs_plugin_loader_app_is_non_wildcard, NULL);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_loader_run_refine_internal (GsPluginLoaderHelper *helper,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* try to adopt each application with a plugin */
+ gs_plugin_loader_run_adopt (helper->plugin_loader, list);
+
+ /* run each plugin */
+ if (!gs_plugin_loader_run_refine_filter (helper, list,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ cancellable, error))
+ return FALSE;
+
+ /* ensure these are sorted by score */
+ if (gs_plugin_job_has_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS)) {
+ GPtrArray *reviews;
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ reviews = gs_app_get_reviews (app);
+ g_ptr_array_sort (reviews,
+ gs_plugin_loader_review_score_sort_cb);
+ }
+ }
+
+ /* refine addons one layer deep */
+ if (gs_plugin_job_has_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS)) {
+ g_autoptr(GsAppList) addons_list = NULL;
+ gs_plugin_job_remove_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS);
+ addons_list = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsAppList *addons = gs_app_get_addons (app);
+ for (guint j = 0; j < gs_app_list_length (addons); j++) {
+ GsApp *addon = gs_app_list_index (addons, j);
+ g_debug ("refining app %s addon %s",
+ gs_app_get_id (app),
+ gs_app_get_id (addon));
+ gs_app_list_add (addons_list, addon);
+ }
+ }
+ if (gs_app_list_length (addons_list) > 0) {
+ if (!gs_plugin_loader_run_refine_internal (helper,
+ addons_list,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+ }
+ }
+
+ /* also do runtime */
+ if (gs_plugin_job_has_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME)) {
+ g_autoptr(GsAppList) list2 = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *runtime;
+ GsApp *app = gs_app_list_index (list, i);
+ runtime = gs_app_get_runtime (app);
+ if (runtime != NULL)
+ gs_app_list_add (list2, runtime);
+ }
+ if (gs_app_list_length (list2) > 0) {
+ if (!gs_plugin_loader_run_refine_internal (helper,
+ list2,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+ }
+ }
+
+ /* also do related packages one layer deep */
+ if (gs_plugin_job_has_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED)) {
+ g_autoptr(GsAppList) related_list = NULL;
+ gs_plugin_job_remove_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED);
+ related_list = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsAppList *related = gs_app_get_related (app);
+ for (guint j = 0; j < gs_app_list_length (related); j++) {
+ GsApp *app2 = gs_app_list_index (related, j);
+ g_debug ("refining related: %s[%s]",
+ gs_app_get_id (app2),
+ gs_app_get_source_default (app2));
+ gs_app_list_add (related_list, app2);
+ }
+ }
+ if (gs_app_list_length (related_list) > 0) {
+ if (!gs_plugin_loader_run_refine_internal (helper,
+ related_list,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+app_thaw_notify_idle (gpointer data)
+{
+ GsApp *app = GS_APP (data);
+ g_object_thaw_notify (G_OBJECT (app));
+ g_object_unref (app);
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
+gs_plugin_loader_run_refine (GsPluginLoaderHelper *helper,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+ g_autoptr(GsAppList) freeze_list = NULL;
+ g_autoptr(GsPluginLoaderHelper) helper2 = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* nothing to do */
+ if (gs_app_list_length (list) == 0)
+ return TRUE;
+
+ /* freeze all apps */
+ freeze_list = gs_app_list_copy (list);
+ for (guint i = 0; i < gs_app_list_length (freeze_list); i++) {
+ GsApp *app = gs_app_list_index (freeze_list, i);
+ g_object_freeze_notify (G_OBJECT (app));
+ }
+
+ /* first pass */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "list", list,
+ "refine-flags", gs_plugin_job_get_refine_flags (helper->plugin_job),
+ NULL);
+ helper2 = gs_plugin_loader_helper_new (helper->plugin_loader, plugin_job);
+ helper2->function_name_parent = helper->function_name;
+ ret = gs_plugin_loader_run_refine_internal (helper2, list, cancellable, error);
+ if (!ret)
+ goto out;
+
+ /* remove any addons that have the same source as the parent app */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ g_autoptr(GPtrArray) to_remove = g_ptr_array_new ();
+ GsApp *app = gs_app_list_index (list, i);
+ GsAppList *addons = gs_app_get_addons (app);
+
+ /* find any apps with the same source */
+ const gchar *pkgname_parent = gs_app_get_source_default (app);
+ if (pkgname_parent == NULL)
+ continue;
+ for (guint j = 0; j < gs_app_list_length (addons); j++) {
+ GsApp *addon = gs_app_list_index (addons, j);
+ if (g_strcmp0 (gs_app_get_source_default (addon),
+ pkgname_parent) == 0) {
+ g_debug ("%s has the same pkgname of %s as %s",
+ gs_app_get_unique_id (app),
+ pkgname_parent,
+ gs_app_get_unique_id (addon));
+ g_ptr_array_add (to_remove, addon);
+ }
+ }
+
+ /* remove any addons with the same source */
+ for (guint j = 0; j < to_remove->len; j++) {
+ GsApp *addon = g_ptr_array_index (to_remove, j);
+ gs_app_remove_addon (app, addon);
+ }
+ }
+
+out:
+ /* now emit all the changed signals */
+ for (guint i = 0; i < gs_app_list_length (freeze_list); i++) {
+ GsApp *app = gs_app_list_index (freeze_list, i);
+ g_idle_add (app_thaw_notify_idle, g_object_ref (app));
+ }
+ return ret;
+}
+
+static void
+gs_plugin_loader_job_sorted_truncation_again (GsPluginLoaderHelper *helper)
+{
+ GsAppListSortFunc sort_func;
+ gpointer sort_func_data;
+
+ /* not valid */
+ if (gs_plugin_job_get_list (helper->plugin_job) == NULL)
+ return;
+
+ /* unset */
+ sort_func = gs_plugin_job_get_sort_func (helper->plugin_job);
+ if (sort_func == NULL)
+ return;
+ sort_func_data = gs_plugin_job_get_sort_func_data (helper->plugin_job);
+ gs_app_list_sort (gs_plugin_job_get_list (helper->plugin_job), sort_func, sort_func_data);
+}
+
+static void
+gs_plugin_loader_job_sorted_truncation (GsPluginLoaderHelper *helper)
+{
+ GsAppListSortFunc sort_func;
+ guint max_results;
+ GsAppList *list = gs_plugin_job_get_list (helper->plugin_job);
+
+ /* not valid */
+ if (list == NULL)
+ return;
+
+ /* unset */
+ max_results = gs_plugin_job_get_max_results (helper->plugin_job);
+ if (max_results == 0)
+ return;
+
+ /* already small enough */
+ if (gs_app_list_length (list) <= max_results)
+ return;
+
+ /* nothing set */
+ g_debug ("truncating results to %u from %u",
+ max_results, gs_app_list_length (list));
+ sort_func = gs_plugin_job_get_sort_func (helper->plugin_job);
+ if (sort_func == NULL) {
+ GsPluginAction action = gs_plugin_job_get_action (helper->plugin_job);
+ g_debug ("no ->sort_func() set for %s, using random!",
+ gs_plugin_action_to_string (action));
+ gs_app_list_randomize (list);
+ } else {
+ gpointer sort_func_data;
+ sort_func_data = gs_plugin_job_get_sort_func_data (helper->plugin_job);
+ gs_app_list_sort (list, sort_func, sort_func_data);
+ }
+ gs_app_list_truncate (list, max_results);
+}
+
+static gboolean
+gs_plugin_loader_run_results (GsPluginLoaderHelper *helper,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (helper->plugin_loader);
+#ifdef HAVE_SYSPROF
+ gint64 begin_time_nsec G_GNUC_UNUSED = SYSPROF_CAPTURE_CURRENT_TIME;
+#endif
+
+ /* run each plugin */
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ if (!gs_plugin_loader_call_vfunc (helper, plugin, NULL, NULL,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ cancellable, error)) {
+ return FALSE;
+ }
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_FINISHED);
+ }
+
+#ifdef HAVE_SYSPROF
+ if (priv->sysprof_writer != NULL) {
+ g_autofree gchar *sysprof_name = NULL;
+ g_autofree gchar *sysprof_message = NULL;
+
+ sysprof_name = g_strconcat ("run-results:",
+ gs_plugin_action_to_string (gs_plugin_job_get_action (helper->plugin_job)),
+ NULL);
+ sysprof_message = gs_plugin_job_to_string (helper->plugin_job);
+ sysprof_capture_writer_add_mark (priv->sysprof_writer,
+ begin_time_nsec,
+ sched_getcpu (),
+ getpid (),
+ SYSPROF_CAPTURE_CURRENT_TIME - begin_time_nsec,
+ "gnome-software",
+ sysprof_name,
+ sysprof_message);
+ }
+#endif /* HAVE_SYSPROF */
+
+ return TRUE;
+}
+
+static const gchar *
+gs_plugin_loader_get_app_str (GsApp *app)
+{
+ const gchar *id;
+
+ /* first try the actual id */
+ id = gs_app_get_unique_id (app);
+ if (id != NULL)
+ return id;
+
+ /* then try the source */
+ id = gs_app_get_source_default (app);
+ if (id != NULL)
+ return id;
+
+ /* lastly try the source id */
+ id = gs_app_get_source_id_default (app);
+ if (id != NULL)
+ return id;
+
+ /* urmmm */
+ return "<invalid>";
+}
+
+static gboolean
+gs_plugin_loader_app_set_prio (GsApp *app, gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+ GsPlugin *plugin;
+ const gchar *tmp;
+
+ /* if set, copy the priority */
+ tmp = gs_app_get_management_plugin (app);
+ if (tmp == NULL)
+ return TRUE;
+ plugin = gs_plugin_loader_find_plugin (plugin_loader, tmp);
+ if (plugin == NULL)
+ return TRUE;
+ gs_app_set_priority (app, gs_plugin_get_priority (plugin));
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_loader_app_is_valid_installed (GsApp *app, gpointer user_data)
+{
+ /* even without AppData, show things in progress */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ return TRUE;
+ break;
+ default:
+ break;
+ }
+
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_OS_UPGRADE:
+ case AS_APP_KIND_CODEC:
+ case AS_APP_KIND_FONT:
+ g_debug ("app invalid as %s: %s",
+ as_app_kind_to_string (gs_app_get_kind (app)),
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+
+ /* sanity check */
+ if (!gs_app_is_installed (app)) {
+ g_autofree gchar *tmp = gs_app_to_string (app);
+ g_warning ("ignoring non-installed app %s", tmp);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_loader_app_is_valid (GsApp *app, gpointer user_data)
+{
+ GsPluginLoaderHelper *helper = (GsPluginLoaderHelper *) user_data;
+
+ /* never show addons */
+ if (gs_app_get_kind (app) == AS_APP_KIND_ADDON) {
+ g_debug ("app invalid as addon %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* never show CLI apps */
+ if (gs_app_get_kind (app) == AS_APP_KIND_CONSOLE) {
+ g_debug ("app invalid as console %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show unknown state */
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN) {
+ g_debug ("app invalid as state unknown %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show unconverted unavailables */
+ if (gs_app_get_kind (app) == AS_APP_KIND_UNKNOWN &&
+ gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE) {
+ g_debug ("app invalid as unconverted unavailable %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show blocklisted apps */
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_HIDE_EVERYWHERE)) {
+ g_debug ("app invalid as blocklisted %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* Don’t show parentally filtered apps unless they’re already
+ * installed. See the comments in gs-details-page.c for details. */
+ if (!gs_app_is_installed (app) &&
+ gs_app_has_quirk (app, GS_APP_QUIRK_PARENTAL_FILTER)) {
+ g_debug ("app invalid as parentally filtered %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show apps with hide-from-search quirk, unless they are already installed */
+ if (!gs_app_is_installed (app) &&
+ gs_app_has_quirk (app, GS_APP_QUIRK_HIDE_FROM_SEARCH)) {
+ g_debug ("app invalid as hide-from-search quirk set %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show sources */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE) {
+ g_debug ("app invalid as source %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show unknown kind */
+ if (gs_app_get_kind (app) == AS_APP_KIND_UNKNOWN) {
+ g_debug ("app invalid as kind unknown %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show unconverted packages in the application view */
+ if (!gs_plugin_job_has_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES) &&
+ (gs_app_get_kind (app) == AS_APP_KIND_GENERIC)) {
+ g_debug ("app invalid as only a %s: %s",
+ as_app_kind_to_string (gs_app_get_kind (app)),
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* don't show apps that do not have the required details */
+ if (gs_app_get_name (app) == NULL) {
+ g_debug ("app invalid as no name %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+ if (gs_app_get_summary (app) == NULL) {
+ g_debug ("app invalid as no summary %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* ignore this crazy application */
+ if (g_strcmp0 (gs_app_get_id (app), "gnome-system-monitor-kde.desktop") == 0) {
+ g_debug ("Ignoring KDE version of %s", gs_app_get_id (app));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_loader_app_is_valid_updatable (GsApp *app, gpointer user_data)
+{
+ return gs_plugin_loader_app_is_valid (app, user_data) &&
+ gs_app_is_updatable (app);
+}
+
+static gboolean
+gs_plugin_loader_filter_qt_for_gtk (GsApp *app, gpointer user_data)
+{
+ /* hide the QT versions in preference to the GTK ones */
+ if (g_strcmp0 (gs_app_get_id (app), "transmission-qt.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "nntpgrab_qt.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "gimagereader-qt4.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "gimagereader-qt5.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "nntpgrab_server_qt.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "hotot-qt.desktop") == 0) {
+ g_debug ("removing QT version of %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* hide the KDE version in preference to the GTK one */
+ if (g_strcmp0 (gs_app_get_id (app), "qalculate_kde.desktop") == 0) {
+ g_debug ("removing KDE version of %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+
+ /* hide the KDE version in preference to the Qt one */
+ if (g_strcmp0 (gs_app_get_id (app), "kid3.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "kchmviewer.desktop") == 0) {
+ g_debug ("removing KDE version of %s",
+ gs_plugin_loader_get_app_str (app));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_loader_app_is_non_compulsory (GsApp *app, gpointer user_data)
+{
+ return !gs_app_has_quirk (app, GS_APP_QUIRK_COMPULSORY);
+}
+
+static gboolean
+gs_plugin_loader_get_app_is_compatible (GsApp *app, gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ const gchar *tmp;
+ guint i;
+
+ /* search for any compatible projects */
+ tmp = gs_app_get_project_group (app);
+ if (tmp == NULL)
+ return TRUE;
+ for (i = 0; priv->compatible_projects[i] != NULL; i++) {
+ if (g_strcmp0 (tmp, priv->compatible_projects[i]) == 0)
+ return TRUE;
+ }
+ g_debug ("removing incompatible %s from project group %s",
+ gs_app_get_id (app), gs_app_get_project_group (app));
+ return FALSE;
+}
+
+/******************************************************************************/
+
+static gboolean
+gs_plugin_loader_featured_debug (GsApp *app, gpointer user_data)
+{
+ if (g_strcmp0 (gs_app_get_id (app),
+ g_getenv ("GNOME_SOFTWARE_FEATURED")) == 0)
+ return TRUE;
+ return FALSE;
+}
+
+static gint
+gs_plugin_loader_app_sort_kind_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ if (gs_app_get_kind (app1) == AS_APP_KIND_DESKTOP)
+ return -1;
+ if (gs_app_get_kind (app2) == AS_APP_KIND_DESKTOP)
+ return 1;
+ return 0;
+}
+
+static gint
+gs_plugin_loader_app_sort_match_value_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ if (gs_app_get_match_value (app1) > gs_app_get_match_value (app2))
+ return -1;
+ if (gs_app_get_match_value (app1) < gs_app_get_match_value (app2))
+ return 1;
+ return 0;
+}
+
+static gint
+gs_plugin_loader_app_sort_prio_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ return gs_app_compare_priority (app1, app2);
+}
+
+static gint
+gs_plugin_loader_app_sort_version_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+#if AS_CHECK_VERSION(0,7,15)
+ return as_utils_vercmp_full (gs_app_get_version (app1),
+ gs_app_get_version (app2),
+ AS_VERSION_COMPARE_FLAG_NONE);
+#else
+ return as_utils_vercmp (gs_app_get_version (app1),
+ gs_app_get_version (app2));
+#endif
+}
+
+/******************************************************************************/
+
+/**
+ * gs_plugin_loader_job_process_finish:
+ * @plugin_loader: A #GsPluginLoader
+ * @res: a #GAsyncResult
+ * @error: A #GError, or %NULL
+ *
+ * Return value: (element-type GsApp) (transfer full): A list of applications
+ **/
+GsAppList *
+gs_plugin_loader_job_process_finish (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GError **error)
+{
+ GTask *task;
+ GsAppList *list = NULL;
+
+ g_return_val_if_fail (GS_IS_PLUGIN_LOADER (plugin_loader), NULL);
+ g_return_val_if_fail (G_IS_TASK (res), NULL);
+ g_return_val_if_fail (g_task_is_valid (res, plugin_loader), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ task = G_TASK (res);
+
+ /* Return cancelled if the task was cancelled and there is no other error set.
+ *
+ * This is needed because we set the task `check_cancellable` to FALSE,
+ * to be able to catch other errors such as timeout, but that means
+ * g_task_propagate_pointer() will ignore if the task was cancelled and only
+ * check if there was an error (i.e. g_task_return_*error*).
+ *
+ * We only do this if there is no error already set in the task (e.g.
+ * timeout) because in that case we want to return the existing error.
+ */
+ if (!g_task_had_error (task)) {
+ GCancellable *cancellable = g_task_get_cancellable (task);
+
+ if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_utils_error_convert_gio (error);
+ return NULL;
+ }
+ }
+ list = g_task_propagate_pointer (task, error);
+ gs_utils_error_convert_gio (error);
+ return list;
+}
+
+/**
+ * gs_plugin_loader_job_action_finish:
+ * @plugin_loader: A #GsPluginLoader
+ * @res: a #GAsyncResult
+ * @error: A #GError, or %NULL
+ *
+ * Return value: success
+ **/
+gboolean
+gs_plugin_loader_job_action_finish (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GError **error)
+{
+ g_autoptr(GsAppList) list = NULL;
+
+ g_return_val_if_fail (GS_IS_PLUGIN_LOADER (plugin_loader), FALSE);
+ g_return_val_if_fail (G_IS_TASK (res), FALSE);
+ g_return_val_if_fail (g_task_is_valid (res, plugin_loader), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ list = g_task_propagate_pointer (G_TASK (res), error);
+ return list != NULL;
+}
+
+/******************************************************************************/
+
+static gint
+gs_plugin_loader_category_sort_cb (gconstpointer a, gconstpointer b)
+{
+ GsCategory *cata = GS_CATEGORY (*(GsCategory **) a);
+ GsCategory *catb = GS_CATEGORY (*(GsCategory **) b);
+ if (gs_category_get_score (cata) < gs_category_get_score (catb))
+ return 1;
+ if (gs_category_get_score (cata) > gs_category_get_score (catb))
+ return -1;
+ return gs_utils_sort_strcmp (gs_category_get_name (cata),
+ gs_category_get_name (catb));
+}
+
+static void
+gs_plugin_loader_fix_category_all (GsCategory *category)
+{
+ GPtrArray *children;
+ GsCategory *cat_all;
+ guint i, j;
+
+ /* set correct size */
+ cat_all = gs_category_find_child (category, "all");
+ if (cat_all == NULL)
+ return;
+ gs_category_set_size (cat_all, gs_category_get_size (category));
+
+ /* add the desktop groups from all children */
+ children = gs_category_get_children (category);
+ for (i = 0; i < children->len; i++) {
+ GPtrArray *desktop_groups;
+ GsCategory *child;
+
+ /* ignore the all category */
+ child = g_ptr_array_index (children, i);
+ if (g_strcmp0 (gs_category_get_id (child), "all") == 0)
+ continue;
+
+ /* add all desktop groups */
+ desktop_groups = gs_category_get_desktop_groups (child);
+ for (j = 0; j < desktop_groups->len; j++) {
+ const gchar *tmp = g_ptr_array_index (desktop_groups, j);
+ gs_category_add_desktop_group (cat_all, tmp);
+ }
+ }
+}
+
+static void
+gs_plugin_loader_job_get_categories_thread_cb (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
+{
+ GError *error = NULL;
+ GsPluginLoaderHelper *helper = (GsPluginLoaderHelper *) task_data;
+#ifdef HAVE_SYSPROF
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (helper->plugin_loader);
+ gint64 begin_time_nsec G_GNUC_UNUSED = SYSPROF_CAPTURE_CURRENT_TIME;
+#endif
+
+ /* run each plugin */
+ if (!gs_plugin_loader_run_results (helper, cancellable, &error)) {
+ g_task_return_error (task, error);
+ return;
+ }
+
+ /* make sure 'All' has the right categories */
+ for (guint i = 0; i < helper->catlist->len; i++) {
+ GsCategory *cat = g_ptr_array_index (helper->catlist, i);
+ gs_plugin_loader_fix_category_all (cat);
+ }
+
+ /* sort by name */
+ g_ptr_array_sort (helper->catlist, gs_plugin_loader_category_sort_cb);
+ for (guint i = 0; i < helper->catlist->len; i++) {
+ GsCategory *cat = GS_CATEGORY (g_ptr_array_index (helper->catlist, i));
+ gs_category_sort_children (cat);
+ }
+
+#ifdef HAVE_SYSPROF
+ if (priv->sysprof_writer != NULL) {
+ g_autofree gchar *sysprof_message = gs_plugin_job_to_string (helper->plugin_job);
+ sysprof_capture_writer_add_mark (priv->sysprof_writer,
+ begin_time_nsec,
+ sched_getcpu (),
+ getpid (),
+ SYSPROF_CAPTURE_CURRENT_TIME - begin_time_nsec,
+ "gnome-software",
+ "get-categories",
+ sysprof_message);
+ }
+#endif /* HAVE_SYSPROF */
+
+ /* show elapsed time */
+ gs_plugin_loader_job_debug (helper);
+
+ /* success */
+ if (helper->catlist->len == 0)
+ g_task_return_new_error (task,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no categories to show");
+ else
+ g_task_return_pointer (task, g_ptr_array_ref (helper->catlist), (GDestroyNotify) g_ptr_array_unref);
+}
+
+/**
+ * gs_plugin_loader_job_get_categories_async:
+ * @plugin_loader: A #GsPluginLoader
+ * @plugin_job: job to process
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: function to call when complete
+ * @user_data: user data to pass to @callback
+ *
+ * This method calls all plugins that implement the gs_plugin_add_categories()
+ * function. The plugins return #GsCategory objects.
+ **/
+void
+gs_plugin_loader_job_get_categories_async (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GsPluginLoaderHelper *helper;
+ g_autoptr(GTask) task = NULL;
+
+ g_return_if_fail (GS_IS_PLUGIN_LOADER (plugin_loader));
+ g_return_if_fail (GS_IS_PLUGIN_JOB (plugin_job));
+ g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+ /* save helper */
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ helper->catlist = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+ /* run in a thread */
+ task = g_task_new (plugin_loader, cancellable, callback, user_data);
+ g_task_set_source_tag (task, gs_plugin_loader_job_get_categories_async);
+ g_task_set_task_data (task, helper, (GDestroyNotify) gs_plugin_loader_helper_free);
+ g_task_run_in_thread (task, gs_plugin_loader_job_get_categories_thread_cb);
+}
+
+/**
+ * gs_plugin_loader_job_get_categories_finish:
+ * @plugin_loader: A #GsPluginLoader
+ * @res: a #GAsyncResult
+ * @error: A #GError, or %NULL
+ *
+ * Return value: (element-type GsCategory) (transfer full): A list of applications
+ **/
+GPtrArray *
+gs_plugin_loader_job_get_categories_finish (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GError **error)
+{
+ GPtrArray *array;
+
+ g_return_val_if_fail (GS_IS_PLUGIN_LOADER (plugin_loader), NULL);
+ g_return_val_if_fail (G_IS_TASK (res), NULL);
+ g_return_val_if_fail (g_task_is_valid (res, plugin_loader), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ array = g_task_propagate_pointer (G_TASK (res), error);
+ gs_utils_error_convert_gio (error);
+ return array;
+}
+
+/******************************************************************************/
+
+static gboolean
+emit_pending_apps_idle (gpointer loader)
+{
+ g_signal_emit (loader, signals[SIGNAL_PENDING_APPS_CHANGED], 0);
+ g_object_unref (loader);
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_plugin_loader_pending_apps_add (GsPluginLoader *plugin_loader,
+ GsPluginLoaderHelper *helper)
+{
+ GsAppList *list = gs_plugin_job_get_list (helper->plugin_job);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->pending_apps_mutex);
+
+ g_assert (gs_app_list_length (list) > 0);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ g_ptr_array_add (priv->pending_apps, g_object_ref (app));
+ /* make sure the progress is properly initialized */
+ gs_app_set_progress (app, GS_APP_PROGRESS_UNKNOWN);
+ }
+ g_idle_add (emit_pending_apps_idle, g_object_ref (plugin_loader));
+}
+
+static void
+gs_plugin_loader_pending_apps_remove (GsPluginLoader *plugin_loader,
+ GsPluginLoaderHelper *helper)
+{
+ GsAppList *list = gs_plugin_job_get_list (helper->plugin_job);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->pending_apps_mutex);
+
+ g_assert (gs_app_list_length (list) > 0);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ g_ptr_array_remove (priv->pending_apps, app);
+
+ /* check the app is not still in an action helper */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ g_warning ("application %s left in %s helper",
+ gs_app_get_unique_id (app),
+ as_app_state_to_string (gs_app_get_state (app)));
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ break;
+ default:
+ break;
+ }
+
+ }
+ g_idle_add (emit_pending_apps_idle, g_object_ref (plugin_loader));
+}
+
+static gboolean
+load_install_queue (GsPluginLoader *plugin_loader, GError **error)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autofree gchar *contents = NULL;
+ g_autofree gchar *file = NULL;
+ g_auto(GStrv) names = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* load from file */
+ file = g_build_filename (g_get_user_data_dir (),
+ "gnome-software",
+ "install-queue",
+ NULL);
+ if (!g_file_test (file, G_FILE_TEST_EXISTS))
+ return TRUE;
+ g_debug ("loading install queue from %s", file);
+ if (!g_file_get_contents (file, &contents, NULL, error))
+ return FALSE;
+
+ /* add to GsAppList, deduplicating if required */
+ list = gs_app_list_new ();
+ names = g_strsplit (contents, "\n", 0);
+ for (guint i = 0; names[i] != NULL; i++) {
+ g_autoptr(GsApp) app = NULL;
+ if (strlen (names[i]) == 0)
+ continue;
+ app = gs_app_new (names[i]);
+ gs_app_set_state (app, AS_APP_STATE_QUEUED_FOR_INSTALL);
+ gs_app_list_add (list, app);
+ }
+
+ /* add to pending list */
+ g_mutex_lock (&priv->pending_apps_mutex);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ g_debug ("adding pending app %s", gs_app_get_unique_id (app));
+ g_ptr_array_add (priv->pending_apps, g_object_ref (app));
+ }
+ g_mutex_unlock (&priv->pending_apps_mutex);
+
+ /* refine */
+ if (gs_app_list_length (list) > 0) {
+ g_autoptr(GsPluginLoaderHelper) helper = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE, NULL);
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ if (!gs_plugin_loader_run_refine (helper, list, NULL, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void
+save_install_queue (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GPtrArray *pending_apps;
+ gboolean ret;
+ gint i;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GString) s = NULL;
+ g_autofree gchar *file = NULL;
+
+ s = g_string_new ("");
+ pending_apps = priv->pending_apps;
+ g_mutex_lock (&priv->pending_apps_mutex);
+ for (i = (gint) pending_apps->len - 1; i >= 0; i--) {
+ GsApp *app;
+ app = g_ptr_array_index (pending_apps, i);
+ if (gs_app_get_state (app) == AS_APP_STATE_QUEUED_FOR_INSTALL) {
+ g_string_append (s, gs_app_get_id (app));
+ g_string_append_c (s, '\n');
+ }
+ }
+ g_mutex_unlock (&priv->pending_apps_mutex);
+
+ /* save file */
+ file = g_build_filename (g_get_user_data_dir (),
+ "gnome-software",
+ "install-queue",
+ NULL);
+ if (!gs_mkdir_parent (file, &error)) {
+ g_warning ("failed to create dir for %s: %s",
+ file, error->message);
+ return;
+ }
+ g_debug ("saving install queue to %s", file);
+ ret = g_file_set_contents (file, s->str, (gssize) s->len, &error);
+ if (!ret)
+ g_warning ("failed to save install queue: %s", error->message);
+}
+
+static void
+add_app_to_install_queue (GsPluginLoader *plugin_loader, GsApp *app)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsAppList *addons;
+ guint i;
+ guint id;
+
+ /* queue the app itself */
+ g_mutex_lock (&priv->pending_apps_mutex);
+ g_ptr_array_add (priv->pending_apps, g_object_ref (app));
+ g_mutex_unlock (&priv->pending_apps_mutex);
+
+ gs_app_set_state (app, AS_APP_STATE_QUEUED_FOR_INSTALL);
+ id = g_idle_add (emit_pending_apps_idle, g_object_ref (plugin_loader));
+ g_source_set_name_by_id (id, "[gnome-software] emit_pending_apps_idle");
+ save_install_queue (plugin_loader);
+
+ /* recursively queue any addons */
+ addons = gs_app_get_addons (app);
+ for (i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *addon = gs_app_list_index (addons, i);
+ if (gs_app_get_to_be_installed (addon))
+ add_app_to_install_queue (plugin_loader, addon);
+ }
+}
+
+static gboolean
+remove_app_from_install_queue (GsPluginLoader *plugin_loader, GsApp *app)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsAppList *addons;
+ gboolean ret;
+ guint i;
+ guint id;
+
+ g_mutex_lock (&priv->pending_apps_mutex);
+ ret = g_ptr_array_remove (priv->pending_apps, app);
+ g_mutex_unlock (&priv->pending_apps_mutex);
+
+ if (ret) {
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ id = g_idle_add (emit_pending_apps_idle, g_object_ref (plugin_loader));
+ g_source_set_name_by_id (id, "[gnome-software] emit_pending_apps_idle");
+ save_install_queue (plugin_loader);
+
+ /* recursively remove any queued addons */
+ addons = gs_app_get_addons (app);
+ for (i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *addon = gs_app_list_index (addons, i);
+ remove_app_from_install_queue (plugin_loader, addon);
+ }
+ }
+
+ return ret;
+}
+
+/******************************************************************************/
+
+gboolean
+gs_plugin_loader_get_allow_updates (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GHashTableIter iter;
+ gpointer value;
+
+ /* nothing */
+ if (g_hash_table_size (priv->disallow_updates) == 0)
+ return TRUE;
+
+ /* list */
+ g_hash_table_iter_init (&iter, priv->disallow_updates);
+ while (g_hash_table_iter_next (&iter, NULL, &value)) {
+ const gchar *reason = value;
+ g_debug ("managed updates inhibited by %s", reason);
+ }
+ return FALSE;
+}
+
+GsAppList *
+gs_plugin_loader_get_pending (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsAppList *array;
+ guint i;
+
+ array = gs_app_list_new ();
+ g_mutex_lock (&priv->pending_apps_mutex);
+ for (i = 0; i < priv->pending_apps->len; i++) {
+ GsApp *app = g_ptr_array_index (priv->pending_apps, i);
+ gs_app_list_add (array, app);
+ }
+ g_mutex_unlock (&priv->pending_apps_mutex);
+
+ return array;
+}
+
+gboolean
+gs_plugin_loader_get_enabled (GsPluginLoader *plugin_loader,
+ const gchar *plugin_name)
+{
+ GsPlugin *plugin;
+ plugin = gs_plugin_loader_find_plugin (plugin_loader, plugin_name);
+ if (plugin == NULL)
+ return FALSE;
+ return gs_plugin_get_enabled (plugin);
+}
+
+/**
+ * gs_plugin_loader_get_events:
+ * @plugin_loader: A #GsPluginLoader
+ *
+ * Gets all plugin events, even ones that are not active or visible anymore.
+ *
+ * Returns: (transfer container) (element-type GsPluginEvent): events
+ **/
+GPtrArray *
+gs_plugin_loader_get_events (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GPtrArray *events = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->events_by_id_mutex);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ /* just add everything */
+ g_hash_table_iter_init (&iter, priv->events_by_id);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ const gchar *id = key;
+ GsPluginEvent *event = value;
+ if (event == NULL) {
+ g_warning ("failed to get event for '%s'", id);
+ continue;
+ }
+ g_ptr_array_add (events, g_object_ref (event));
+ }
+ return events;
+}
+
+/**
+ * gs_plugin_loader_get_event_default:
+ * @plugin_loader: A #GsPluginLoader
+ *
+ * Gets an active plugin event where active means that it was not been
+ * already dismissed by the user.
+ *
+ * Returns: (transfer full): a #GsPluginEvent, or %NULL for none
+ **/
+GsPluginEvent *
+gs_plugin_loader_get_event_default (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->events_by_id_mutex);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ /* just add everything */
+ g_hash_table_iter_init (&iter, priv->events_by_id);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ const gchar *id = key;
+ GsPluginEvent *event = value;
+ if (event == NULL) {
+ g_warning ("failed to get event for '%s'", id);
+ continue;
+ }
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INVALID))
+ return g_object_ref (event);
+ }
+ return NULL;
+}
+
+/**
+ * gs_plugin_loader_remove_events:
+ * @plugin_loader: A #GsPluginLoader
+ *
+ * Removes all plugin events from the loader. This function should only be
+ * called from the self tests.
+ **/
+void
+gs_plugin_loader_remove_events (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->events_by_id_mutex);
+ g_hash_table_remove_all (priv->events_by_id);
+}
+
+static void
+gs_plugin_loader_report_event_cb (GsPlugin *plugin,
+ GsPluginEvent *event,
+ GsPluginLoader *plugin_loader)
+{
+ if (gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE))
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE);
+ gs_plugin_loader_add_event (plugin_loader, event);
+}
+
+static void
+gs_plugin_loader_allow_updates_cb (GsPlugin *plugin,
+ gboolean allow_updates,
+ GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ gboolean changed = FALSE;
+
+ /* plugin now allowing gnome-software to show updates panel */
+ if (allow_updates) {
+ if (g_hash_table_remove (priv->disallow_updates, plugin)) {
+ g_debug ("plugin %s no longer inhibited managed updates",
+ gs_plugin_get_name (plugin));
+ changed = TRUE;
+ }
+
+ /* plugin preventing the updates panel from being shown */
+ } else {
+ if (g_hash_table_replace (priv->disallow_updates,
+ (gpointer) plugin,
+ (gpointer) gs_plugin_get_name (plugin))) {
+ g_debug ("plugin %s inhibited managed updates",
+ gs_plugin_get_name (plugin));
+ changed = TRUE;
+ }
+ }
+
+ /* notify display layer */
+ if (changed)
+ g_object_notify (G_OBJECT (plugin_loader), "allow-updates");
+}
+
+static void
+gs_plugin_loader_status_changed_cb (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginStatus status,
+ GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ /* nothing specific */
+ if (app == NULL || gs_app_get_id (app) == NULL) {
+ if (priv->global_status_last != status) {
+ g_debug ("emitting global %s",
+ gs_plugin_status_to_string (status));
+ g_signal_emit (plugin_loader,
+ signals[SIGNAL_STATUS_CHANGED],
+ 0, app, status);
+ priv->global_status_last = status;
+ }
+ return;
+ }
+
+ /* a specific app */
+ g_debug ("emitting %s(%s)",
+ gs_plugin_status_to_string (status),
+ gs_app_get_id (app));
+ g_signal_emit (plugin_loader,
+ signals[SIGNAL_STATUS_CHANGED],
+ 0, app, status);
+}
+
+static void
+gs_plugin_loader_basic_auth_start_cb (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data,
+ GsPluginLoader *plugin_loader)
+{
+ g_debug ("emitting basic-auth-start %s", realm);
+ g_signal_emit (plugin_loader,
+ signals[SIGNAL_BASIC_AUTH_START], 0,
+ remote,
+ realm,
+ callback,
+ user_data);
+}
+
+static gboolean
+gs_plugin_loader_job_actions_changed_delay_cb (gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ /* notify shells */
+ g_debug ("updates-changed");
+ g_signal_emit (plugin_loader, signals[SIGNAL_UPDATES_CHANGED], 0);
+ priv->updates_changed_id = 0;
+ priv->updates_changed_cnt = 0;
+
+ g_object_unref (plugin_loader);
+ return FALSE;
+}
+
+static void
+gs_plugin_loader_job_actions_changed_cb (GsPlugin *plugin, GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ priv->updates_changed_cnt++;
+}
+
+static void
+gs_plugin_loader_updates_changed (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ if (priv->updates_changed_id != 0)
+ return;
+ priv->updates_changed_id =
+ g_timeout_add_seconds (GS_PLUGIN_LOADER_UPDATES_CHANGED_DELAY,
+ gs_plugin_loader_job_actions_changed_delay_cb,
+ g_object_ref (plugin_loader));
+}
+
+static gboolean
+gs_plugin_loader_reload_delay_cb (gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ /* notify shells */
+ g_debug ("emitting ::reload");
+ g_signal_emit (plugin_loader, signals[SIGNAL_RELOAD], 0);
+ priv->reload_id = 0;
+
+ g_object_unref (plugin_loader);
+ return FALSE;
+}
+
+static void
+gs_plugin_loader_reload_cb (GsPlugin *plugin,
+ GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ if (priv->reload_id != 0)
+ return;
+ priv->reload_id =
+ g_timeout_add_seconds (GS_PLUGIN_LOADER_RELOAD_DELAY,
+ gs_plugin_loader_reload_delay_cb,
+ g_object_ref (plugin_loader));
+}
+
+static void
+gs_plugin_loader_open_plugin (GsPluginLoader *plugin_loader,
+ const gchar *filename)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsPlugin *plugin;
+ g_autoptr(GError) error = NULL;
+
+ /* create plugin from file */
+ plugin = gs_plugin_create (filename, &error);
+ if (plugin == NULL) {
+ g_warning ("Failed to load %s: %s", filename, error->message);
+ return;
+ }
+ g_signal_connect (plugin, "updates-changed",
+ G_CALLBACK (gs_plugin_loader_job_actions_changed_cb),
+ plugin_loader);
+ g_signal_connect (plugin, "reload",
+ G_CALLBACK (gs_plugin_loader_reload_cb),
+ plugin_loader);
+ g_signal_connect (plugin, "status-changed",
+ G_CALLBACK (gs_plugin_loader_status_changed_cb),
+ plugin_loader);
+ g_signal_connect (plugin, "basic-auth-start",
+ G_CALLBACK (gs_plugin_loader_basic_auth_start_cb),
+ plugin_loader);
+ g_signal_connect (plugin, "report-event",
+ G_CALLBACK (gs_plugin_loader_report_event_cb),
+ plugin_loader);
+ g_signal_connect (plugin, "allow-updates",
+ G_CALLBACK (gs_plugin_loader_allow_updates_cb),
+ plugin_loader);
+ gs_plugin_set_soup_session (plugin, priv->soup_session);
+ gs_plugin_set_locale (plugin, priv->locale);
+ gs_plugin_set_language (plugin, priv->language);
+ gs_plugin_set_scale (plugin, gs_plugin_loader_get_scale (plugin_loader));
+ gs_plugin_set_network_monitor (plugin, priv->network_monitor);
+ g_debug ("opened plugin %s: %s", filename, gs_plugin_get_name (plugin));
+
+ /* add to array */
+ g_ptr_array_add (priv->plugins, plugin);
+}
+
+void
+gs_plugin_loader_set_scale (GsPluginLoader *plugin_loader, guint scale)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ /* save globally, and update each plugin */
+ priv->scale = scale;
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ gs_plugin_set_scale (plugin, scale);
+ }
+}
+
+guint
+gs_plugin_loader_get_scale (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ return priv->scale;
+}
+
+void
+gs_plugin_loader_add_location (GsPluginLoader *plugin_loader, const gchar *location)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ for (guint i = 0; i < priv->locations->len; i++) {
+ const gchar *location_tmp = g_ptr_array_index (priv->locations, i);
+ if (g_strcmp0 (location_tmp, location) == 0)
+ return;
+ }
+ g_info ("adding plugin location %s", location);
+ g_ptr_array_add (priv->locations, g_strdup (location));
+}
+
+static gint
+gs_plugin_loader_plugin_sort_fn (gconstpointer a, gconstpointer b)
+{
+ GsPlugin *pa = *((GsPlugin **) a);
+ GsPlugin *pb = *((GsPlugin **) b);
+ if (gs_plugin_get_order (pa) < gs_plugin_get_order (pb))
+ return -1;
+ if (gs_plugin_get_order (pa) > gs_plugin_get_order (pb))
+ return 1;
+ return g_strcmp0 (gs_plugin_get_name (pa), gs_plugin_get_name (pb));
+}
+
+static void
+gs_plugin_loader_plugin_dir_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginEvent) event = gs_plugin_event_new ();
+ g_autoptr(GError) error = NULL;
+
+ /* already triggered */
+ if (priv->plugin_dir_dirty)
+ return;
+
+ /* add app */
+ gs_plugin_event_set_action (event, GS_PLUGIN_ACTION_SETUP);
+ app = gs_plugin_loader_app_create (plugin_loader,
+ "system/*/*/*/org.gnome.Software.desktop/*");
+ if (app != NULL)
+ gs_plugin_event_set_app (event, app);
+
+ /* add error */
+ g_set_error_literal (&error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_RESTART_REQUIRED,
+ "A restart is required");
+ gs_plugin_event_set_error (event, error);
+ gs_plugin_loader_add_event (plugin_loader, event);
+ priv->plugin_dir_dirty = TRUE;
+}
+
+void
+gs_plugin_loader_clear_caches (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ gs_plugin_cache_invalidate (plugin);
+ }
+}
+
+/**
+ * gs_plugin_loader_setup_again:
+ * @plugin_loader: a #GsPluginLoader
+ *
+ * Calls setup on each plugin. This should only be used from the self tests
+ * and in a controlled way.
+ */
+void
+gs_plugin_loader_setup_again (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsPluginAction actions[] = {
+ GS_PLUGIN_ACTION_DESTROY,
+ GS_PLUGIN_ACTION_INITIALIZE,
+ GS_PLUGIN_ACTION_SETUP,
+ GS_PLUGIN_ACTION_UNKNOWN };
+#ifdef HAVE_SYSPROF
+ gint64 begin_time_nsec G_GNUC_UNUSED = SYSPROF_CAPTURE_CURRENT_TIME;
+#endif
+
+ /* clear global cache */
+ gs_plugin_loader_clear_caches (plugin_loader);
+
+ /* remove any events */
+ gs_plugin_loader_remove_events (plugin_loader);
+
+ /* call in order */
+ for (guint j = 0; actions[j] != GS_PLUGIN_ACTION_UNKNOWN; j++) {
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsPluginLoaderHelper) helper = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ if (!gs_plugin_get_enabled (plugin))
+ continue;
+
+ plugin_job = gs_plugin_job_newv (actions[j], NULL);
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ if (!gs_plugin_loader_call_vfunc (helper, plugin, NULL, NULL,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ NULL, &error_local)) {
+ g_warning ("resetup of %s failed: %s",
+ gs_plugin_get_name (plugin),
+ error_local->message);
+ break;
+ }
+ if (actions[j] == GS_PLUGIN_ACTION_DESTROY)
+ gs_plugin_clear_data (plugin);
+ }
+ }
+
+#ifdef HAVE_SYSPROF
+ if (priv->sysprof_writer != NULL) {
+ sysprof_capture_writer_add_mark (priv->sysprof_writer,
+ begin_time_nsec,
+ sched_getcpu (),
+ getpid (),
+ SYSPROF_CAPTURE_CURRENT_TIME - begin_time_nsec,
+ "gnome-software",
+ "setup-again",
+ NULL);
+ }
+#endif /* HAVE_SYSPROF */
+}
+
+static gint
+gs_plugin_loader_path_sort_fn (gconstpointer a, gconstpointer b)
+{
+ const gchar *sa = *((const gchar **) a);
+ const gchar *sb = *((const gchar **) b);
+ return g_strcmp0 (sa, sb);
+}
+
+static GPtrArray *
+gs_plugin_loader_find_plugins (const gchar *path, GError **error)
+{
+ const gchar *fn_tmp;
+ g_autoptr(GPtrArray) fns = g_ptr_array_new_with_free_func (g_free);
+ g_autoptr(GDir) dir = g_dir_open (path, 0, error);
+ if (dir == NULL)
+ return NULL;
+ while ((fn_tmp = g_dir_read_name (dir)) != NULL) {
+ if (!g_str_has_suffix (fn_tmp, ".so"))
+ continue;
+ g_ptr_array_add (fns, g_build_filename (path, fn_tmp, NULL));
+ }
+ g_ptr_array_sort (fns, gs_plugin_loader_path_sort_fn);
+ return g_steal_pointer (&fns);
+}
+
+/**
+ * gs_plugin_loader_setup:
+ * @plugin_loader: a #GsPluginLoader
+ * @allowlist: list of plugin names, or %NULL
+ * @blocklist: list of plugin names, or %NULL
+ * @cancellable: A #GCancellable, or %NULL
+ * @error: A #GError, or %NULL
+ *
+ * Sets up the plugin loader ready for use.
+ *
+ * Returns: %TRUE for success
+ */
+gboolean
+gs_plugin_loader_setup (GsPluginLoader *plugin_loader,
+ gchar **allowlist,
+ gchar **blocklist,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ const gchar *plugin_name;
+ gboolean changes;
+ GPtrArray *deps;
+ GsPlugin *dep;
+ GsPlugin *plugin;
+ guint dep_loop_check = 0;
+ guint i;
+ guint j;
+ g_autoptr(GsPluginLoaderHelper) helper = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+#ifdef HAVE_SYSPROF
+ gint64 begin_time_nsec G_GNUC_UNUSED = SYSPROF_CAPTURE_CURRENT_TIME;
+#endif
+
+ /* use the default, but this requires a 'make install' */
+ if (priv->locations->len == 0) {
+ g_autofree gchar *filename = NULL;
+ filename = g_strdup_printf ("gs-plugins-%s", GS_PLUGIN_API_VERSION);
+ g_ptr_array_add (priv->locations, g_build_filename (LIBDIR, filename, NULL));
+ }
+
+ for (i = 0; i < priv->locations->len; i++) {
+ GFileMonitor *monitor;
+ const gchar *location = g_ptr_array_index (priv->locations, i);
+ g_autoptr(GFile) plugin_dir = g_file_new_for_path (location);
+ monitor = g_file_monitor_directory (plugin_dir,
+ G_FILE_MONITOR_NONE,
+ cancellable,
+ error);
+ if (monitor == NULL)
+ return FALSE;
+ g_signal_connect (monitor, "changed",
+ G_CALLBACK (gs_plugin_loader_plugin_dir_changed_cb), plugin_loader);
+ g_ptr_array_add (priv->file_monitors, monitor);
+ }
+
+ /* search for plugins */
+ for (i = 0; i < priv->locations->len; i++) {
+ const gchar *location = g_ptr_array_index (priv->locations, i);
+ g_autoptr(GPtrArray) fns = NULL;
+
+ /* search in the plugin directory for plugins */
+ g_debug ("searching for plugins in %s", location);
+ fns = gs_plugin_loader_find_plugins (location, error);
+ if (fns == NULL)
+ return FALSE;
+ for (j = 0; j < fns->len; j++) {
+ const gchar *fn = g_ptr_array_index (fns, j);
+ gs_plugin_loader_open_plugin (plugin_loader, fn);
+ }
+ }
+
+ /* optional allowlist */
+ if (allowlist != NULL) {
+ for (i = 0; i < priv->plugins->len; i++) {
+ gboolean ret;
+ plugin = g_ptr_array_index (priv->plugins, i);
+ if (!gs_plugin_get_enabled (plugin))
+ continue;
+ ret = g_strv_contains ((const gchar * const *) allowlist,
+ gs_plugin_get_name (plugin));
+ if (!ret) {
+ g_debug ("%s not in allowlist, disabling",
+ gs_plugin_get_name (plugin));
+ }
+ gs_plugin_set_enabled (plugin, ret);
+ }
+ }
+
+ /* optional blocklist */
+ if (blocklist != NULL) {
+ for (i = 0; i < priv->plugins->len; i++) {
+ gboolean ret;
+ plugin = g_ptr_array_index (priv->plugins, i);
+ if (!gs_plugin_get_enabled (plugin))
+ continue;
+ ret = g_strv_contains ((const gchar * const *) blocklist,
+ gs_plugin_get_name (plugin));
+ if (ret)
+ gs_plugin_set_enabled (plugin, FALSE);
+ }
+ }
+
+ /* run the plugins */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INITIALIZE, NULL);
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ if (!gs_plugin_loader_run_results (helper, cancellable, error))
+ return FALSE;
+
+ /* order by deps */
+ do {
+ changes = FALSE;
+ for (i = 0; i < priv->plugins->len; i++) {
+ plugin = g_ptr_array_index (priv->plugins, i);
+ deps = gs_plugin_get_rules (plugin, GS_PLUGIN_RULE_RUN_AFTER);
+ for (j = 0; j < deps->len && !changes; j++) {
+ plugin_name = g_ptr_array_index (deps, j);
+ dep = gs_plugin_loader_find_plugin (plugin_loader,
+ plugin_name);
+ if (dep == NULL) {
+ g_debug ("cannot find plugin '%s' "
+ "requested by '%s'",
+ plugin_name,
+ gs_plugin_get_name (plugin));
+ continue;
+ }
+ if (!gs_plugin_get_enabled (dep))
+ continue;
+ if (gs_plugin_get_order (plugin) <= gs_plugin_get_order (dep)) {
+ gs_plugin_set_order (plugin, gs_plugin_get_order (dep) + 1);
+ changes = TRUE;
+ }
+ }
+ }
+ for (i = 0; i < priv->plugins->len; i++) {
+ plugin = g_ptr_array_index (priv->plugins, i);
+ deps = gs_plugin_get_rules (plugin, GS_PLUGIN_RULE_RUN_BEFORE);
+ for (j = 0; j < deps->len && !changes; j++) {
+ plugin_name = g_ptr_array_index (deps, j);
+ dep = gs_plugin_loader_find_plugin (plugin_loader,
+ plugin_name);
+ if (dep == NULL) {
+ g_debug ("cannot find plugin '%s' "
+ "requested by '%s'",
+ plugin_name,
+ gs_plugin_get_name (plugin));
+ continue;
+ }
+ if (!gs_plugin_get_enabled (dep))
+ continue;
+ if (gs_plugin_get_order (plugin) >= gs_plugin_get_order (dep)) {
+ gs_plugin_set_order (dep, gs_plugin_get_order (plugin) + 1);
+ changes = TRUE;
+ }
+ }
+ }
+
+ /* check we're not stuck */
+ if (dep_loop_check++ > 100) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_PLUGIN_DEPSOLVE_FAILED,
+ "got stuck in dep loop");
+ return FALSE;
+ }
+ } while (changes);
+
+ /* check for conflicts */
+ for (i = 0; i < priv->plugins->len; i++) {
+ plugin = g_ptr_array_index (priv->plugins, i);
+ if (!gs_plugin_get_enabled (plugin))
+ continue;
+ deps = gs_plugin_get_rules (plugin, GS_PLUGIN_RULE_CONFLICTS);
+ for (j = 0; j < deps->len && !changes; j++) {
+ plugin_name = g_ptr_array_index (deps, j);
+ dep = gs_plugin_loader_find_plugin (plugin_loader,
+ plugin_name);
+ if (dep == NULL)
+ continue;
+ if (!gs_plugin_get_enabled (dep))
+ continue;
+ g_debug ("disabling %s as conflicts with %s",
+ gs_plugin_get_name (dep),
+ gs_plugin_get_name (plugin));
+ gs_plugin_set_enabled (dep, FALSE);
+ }
+ }
+
+ /* sort by order */
+ g_ptr_array_sort (priv->plugins,
+ gs_plugin_loader_plugin_sort_fn);
+
+ /* assign priority values */
+ do {
+ changes = FALSE;
+ for (i = 0; i < priv->plugins->len; i++) {
+ plugin = g_ptr_array_index (priv->plugins, i);
+ deps = gs_plugin_get_rules (plugin, GS_PLUGIN_RULE_BETTER_THAN);
+ for (j = 0; j < deps->len && !changes; j++) {
+ plugin_name = g_ptr_array_index (deps, j);
+ dep = gs_plugin_loader_find_plugin (plugin_loader,
+ plugin_name);
+ if (dep == NULL) {
+ g_debug ("cannot find plugin '%s' "
+ "requested by '%s'",
+ plugin_name,
+ gs_plugin_get_name (plugin));
+ continue;
+ }
+ if (!gs_plugin_get_enabled (dep))
+ continue;
+ if (gs_plugin_get_priority (plugin) <= gs_plugin_get_priority (dep)) {
+ gs_plugin_set_priority (plugin, gs_plugin_get_priority (dep) + 1);
+ changes = TRUE;
+ }
+ }
+ }
+
+ /* check we're not stuck */
+ if (dep_loop_check++ > 100) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_PLUGIN_DEPSOLVE_FAILED,
+ "got stuck in priority loop");
+ return FALSE;
+ }
+ } while (changes);
+
+ /* run setup */
+ gs_plugin_job_set_action (helper->plugin_job, GS_PLUGIN_ACTION_SETUP);
+ helper->function_name = "gs_plugin_setup";
+ for (i = 0; i < priv->plugins->len; i++) {
+ g_autoptr(GError) error_local = NULL;
+ plugin = g_ptr_array_index (priv->plugins, i);
+ if (!gs_plugin_loader_call_vfunc (helper, plugin, NULL, NULL,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ cancellable, &error_local)) {
+ g_debug ("disabling %s as setup failed: %s",
+ gs_plugin_get_name (plugin),
+ error_local->message);
+ gs_plugin_set_enabled (plugin, FALSE);
+ }
+ }
+
+ /* now we can load the install-queue */
+ if (!load_install_queue (plugin_loader, error))
+ return FALSE;
+
+#ifdef HAVE_SYSPROF
+ if (priv->sysprof_writer != NULL) {
+ sysprof_capture_writer_add_mark (priv->sysprof_writer,
+ begin_time_nsec,
+ sched_getcpu (),
+ getpid (),
+ SYSPROF_CAPTURE_CURRENT_TIME - begin_time_nsec,
+ "gnome-software",
+ "setup",
+ NULL);
+ }
+#endif /* HAVE_SYSPROF */
+
+ return TRUE;
+}
+
+void
+gs_plugin_loader_dump_state (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GString) str_enabled = g_string_new (NULL);
+ g_autoptr(GString) str_disabled = g_string_new (NULL);
+
+ /* print what the priorities are if verbose */
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ GString *str = gs_plugin_get_enabled (plugin) ? str_enabled : str_disabled;
+ g_string_append_printf (str, "%s, ", gs_plugin_get_name (plugin));
+ g_debug ("[%s]\t%u\t->\t%s",
+ gs_plugin_get_enabled (plugin) ? "enabled" : "disabld",
+ gs_plugin_get_order (plugin),
+ gs_plugin_get_name (plugin));
+ }
+ if (str_enabled->len > 2)
+ g_string_truncate (str_enabled, str_enabled->len - 2);
+ if (str_disabled->len > 2)
+ g_string_truncate (str_disabled, str_disabled->len - 2);
+ g_info ("enabled plugins: %s", str_enabled->str);
+ g_info ("disabled plugins: %s", str_disabled->str);
+}
+
+static void
+gs_plugin_loader_get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (object);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ switch (prop_id) {
+ case PROP_EVENTS:
+ g_value_set_pointer (value, priv->events_by_id);
+ break;
+ case PROP_ALLOW_UPDATES:
+ g_value_set_boolean (value, gs_plugin_loader_get_allow_updates (plugin_loader));
+ break;
+ case PROP_NETWORK_AVAILABLE:
+ g_value_set_boolean (value, gs_plugin_loader_get_network_available (plugin_loader));
+ break;
+ case PROP_NETWORK_METERED:
+ g_value_set_boolean (value, gs_plugin_loader_get_network_metered (plugin_loader));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_plugin_loader_set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_plugin_loader_dispose (GObject *object)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (object);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ if (priv->plugins != NULL) {
+ g_autoptr(GsPluginLoaderHelper) helper = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_DESTROY, NULL);
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ gs_plugin_loader_run_results (helper, NULL, NULL);
+ g_clear_pointer (&priv->plugins, g_ptr_array_unref);
+ }
+ if (priv->updates_changed_id != 0) {
+ g_source_remove (priv->updates_changed_id);
+ priv->updates_changed_id = 0;
+ }
+ if (priv->network_changed_handler != 0) {
+ g_signal_handler_disconnect (priv->network_monitor,
+ priv->network_changed_handler);
+ priv->network_changed_handler = 0;
+ }
+ if (priv->network_available_notify_handler != 0) {
+ g_signal_handler_disconnect (priv->network_monitor,
+ priv->network_available_notify_handler);
+ priv->network_available_notify_handler = 0;
+ }
+ if (priv->network_metered_notify_handler != 0) {
+ g_signal_handler_disconnect (priv->network_monitor,
+ priv->network_metered_notify_handler);
+ priv->network_metered_notify_handler = 0;
+ }
+ if (priv->queued_ops_pool != NULL) {
+ /* stop accepting more requests and wait until any currently
+ * running ones are finished */
+ g_thread_pool_free (priv->queued_ops_pool, TRUE, TRUE);
+ priv->queued_ops_pool = NULL;
+ }
+ g_clear_object (&priv->network_monitor);
+ g_clear_object (&priv->soup_session);
+ g_clear_object (&priv->settings);
+ g_clear_pointer (&priv->pending_apps, g_ptr_array_unref);
+#ifdef HAVE_SYSPROF
+ g_clear_pointer (&priv->sysprof_writer, sysprof_capture_writer_unref);
+#endif
+
+ G_OBJECT_CLASS (gs_plugin_loader_parent_class)->dispose (object);
+}
+
+static void
+gs_plugin_loader_finalize (GObject *object)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (object);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+
+ g_strfreev (priv->compatible_projects);
+ g_ptr_array_unref (priv->locations);
+ g_free (priv->locale);
+ g_free (priv->language);
+ g_ptr_array_unref (priv->file_monitors);
+ g_hash_table_unref (priv->events_by_id);
+ g_hash_table_unref (priv->disallow_updates);
+
+ g_mutex_clear (&priv->pending_apps_mutex);
+ g_mutex_clear (&priv->events_by_id_mutex);
+
+ G_OBJECT_CLASS (gs_plugin_loader_parent_class)->finalize (object);
+}
+
+static void
+gs_plugin_loader_class_init (GsPluginLoaderClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = gs_plugin_loader_get_property;
+ object_class->set_property = gs_plugin_loader_set_property;
+ object_class->dispose = gs_plugin_loader_dispose;
+ object_class->finalize = gs_plugin_loader_finalize;
+
+ pspec = g_param_spec_string ("events", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_EVENTS, pspec);
+
+ pspec = g_param_spec_boolean ("allow-updates", NULL, NULL,
+ TRUE,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_ALLOW_UPDATES, pspec);
+
+ pspec = g_param_spec_boolean ("network-available", NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_NETWORK_AVAILABLE, pspec);
+
+ pspec = g_param_spec_boolean ("network-metered", NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_NETWORK_METERED, pspec);
+
+ signals [SIGNAL_STATUS_CHANGED] =
+ g_signal_new ("status-changed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginLoaderClass, status_changed),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_UINT);
+ signals [SIGNAL_PENDING_APPS_CHANGED] =
+ g_signal_new ("pending-apps-changed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginLoaderClass, pending_apps_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals [SIGNAL_UPDATES_CHANGED] =
+ g_signal_new ("updates-changed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginLoaderClass, updates_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals [SIGNAL_RELOAD] =
+ g_signal_new ("reload",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginLoaderClass, reload),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals [SIGNAL_BASIC_AUTH_START] =
+ g_signal_new ("basic-auth-start",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginLoaderClass, basic_auth_start),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
+}
+
+static void
+gs_plugin_loader_allow_updates_recheck (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ if (g_settings_get_boolean (priv->settings, "allow-updates")) {
+ g_hash_table_remove (priv->disallow_updates, plugin_loader);
+ } else {
+ g_hash_table_insert (priv->disallow_updates,
+ (gpointer) plugin_loader,
+ (gpointer) "GSettings");
+ }
+}
+
+static void
+gs_plugin_loader_settings_changed_cb (GSettings *settings,
+ const gchar *key,
+ GsPluginLoader *plugin_loader)
+{
+ if (g_strcmp0 (key, "allow-updates") == 0)
+ gs_plugin_loader_allow_updates_recheck (plugin_loader);
+}
+
+static gint
+get_max_parallel_ops (void)
+{
+ guint mem_total = gs_utils_get_memory_total ();
+ if (mem_total == 0)
+ return 8;
+ /* allow 1 op per GB of memory */
+ return (gint) MAX (round((gdouble) mem_total / 1024), 1.0);
+}
+
+static void
+gs_plugin_loader_init (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ const gchar *tmp;
+ gchar *match;
+ gchar **projects;
+ guint i;
+
+#ifdef HAVE_SYSPROF
+ priv->sysprof_writer = sysprof_capture_writer_new_from_env (0);
+#endif /* HAVE_SYSPROF */
+
+ priv->scale = 1;
+ priv->plugins = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ priv->pending_apps = g_ptr_array_new_with_free_func ((GFreeFunc) g_object_unref);
+ priv->queued_ops_pool = g_thread_pool_new (gs_plugin_loader_process_in_thread_pool_cb,
+ NULL,
+ get_max_parallel_ops (),
+ FALSE,
+ NULL);
+ priv->file_monitors = g_ptr_array_new_with_free_func ((GFreeFunc) g_object_unref);
+ priv->locations = g_ptr_array_new_with_free_func (g_free);
+ priv->settings = g_settings_new ("org.gnome.software");
+ g_signal_connect (priv->settings, "changed",
+ G_CALLBACK (gs_plugin_loader_settings_changed_cb), plugin_loader);
+ priv->events_by_id = g_hash_table_new_full ((GHashFunc) as_utils_unique_id_hash,
+ (GEqualFunc) as_utils_unique_id_equal,
+ g_free,
+ (GDestroyNotify) g_object_unref);
+
+ /* share a soup session (also disable the double-compression) */
+ priv->soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
+ SOUP_SESSION_TIMEOUT, 10,
+ NULL);
+
+ /* get the locale */
+ tmp = g_getenv ("GS_SELF_TEST_LOCALE");
+ if (tmp != NULL) {
+ g_debug ("using self test locale of %s", tmp);
+ priv->locale = g_strdup (tmp);
+ } else {
+ priv->locale = g_strdup (setlocale (LC_MESSAGES, NULL));
+ }
+
+ /* the settings key sets the initial override */
+ priv->disallow_updates = g_hash_table_new (g_direct_hash, g_direct_equal);
+ gs_plugin_loader_allow_updates_recheck (plugin_loader);
+
+ /* get the language from the locale (i.e. strip the territory, codeset
+ * and modifier) */
+ priv->language = g_strdup (priv->locale);
+ match = strpbrk (priv->language, "._@");
+ if (match != NULL)
+ *match = '\0';
+
+ g_debug ("Using locale = %s, language = %s", priv->locale, priv->language);
+
+ g_mutex_init (&priv->pending_apps_mutex);
+ g_mutex_init (&priv->events_by_id_mutex);
+
+ /* monitor the network as the many UI operations need the network */
+ gs_plugin_loader_monitor_network (plugin_loader);
+
+ /* by default we only show project-less apps or compatible projects */
+ tmp = g_getenv ("GNOME_SOFTWARE_COMPATIBLE_PROJECTS");
+ if (tmp == NULL) {
+ projects = g_settings_get_strv (priv->settings,
+ "compatible-projects");
+ } else {
+ projects = g_strsplit (tmp, ",", -1);
+ }
+ for (i = 0; projects[i] != NULL; i++)
+ g_debug ("compatible-project: %s", projects[i]);
+ priv->compatible_projects = projects;
+}
+
+/**
+ * gs_plugin_loader_new:
+ *
+ * Return value: a new GsPluginLoader object.
+ **/
+GsPluginLoader *
+gs_plugin_loader_new (void)
+{
+ GsPluginLoader *plugin_loader;
+ plugin_loader = g_object_new (GS_TYPE_PLUGIN_LOADER, NULL);
+ return GS_PLUGIN_LOADER (plugin_loader);
+}
+
+static void
+gs_plugin_loader_app_installed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = GS_APP (user_data);
+
+ ret = gs_plugin_loader_job_action_finish (plugin_loader,
+ res,
+ &error);
+ if (!ret) {
+ remove_app_from_install_queue (plugin_loader, app);
+ g_warning ("failed to install %s: %s",
+ gs_app_get_unique_id (app), error->message);
+ }
+}
+
+gboolean
+gs_plugin_loader_get_network_available (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ if (priv->network_monitor == NULL) {
+ g_debug ("no network monitor, so returning network-available=TRUE");
+ return TRUE;
+ }
+ return g_network_monitor_get_network_available (priv->network_monitor);
+}
+
+gboolean
+gs_plugin_loader_get_network_metered (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ if (priv->network_monitor == NULL) {
+ g_debug ("no network monitor, so returning network-metered=FALSE");
+ return FALSE;
+ }
+ return g_network_monitor_get_network_metered (priv->network_monitor);
+}
+
+static void
+gs_plugin_loader_network_changed_cb (GNetworkMonitor *monitor,
+ gboolean available,
+ GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ gboolean metered = g_network_monitor_get_network_metered (priv->network_monitor);
+
+ g_debug ("network status change: %s [%s]",
+ available ? "online" : "offline",
+ metered ? "metered" : "unmetered");
+
+ g_object_notify (G_OBJECT (plugin_loader), "network-available");
+ g_object_notify (G_OBJECT (plugin_loader), "network-metered");
+
+ if (available && !metered) {
+ g_autoptr(GsAppList) queue = NULL;
+ g_mutex_lock (&priv->pending_apps_mutex);
+ queue = gs_app_list_new ();
+ for (guint i = 0; i < priv->pending_apps->len; i++) {
+ GsApp *app = g_ptr_array_index (priv->pending_apps, i);
+ if (gs_app_get_state (app) == AS_APP_STATE_QUEUED_FOR_INSTALL)
+ gs_app_list_add (queue, app);
+ }
+ g_mutex_unlock (&priv->pending_apps_mutex);
+ for (guint i = 0; i < gs_app_list_length (queue); i++) {
+ GsApp *app = gs_app_list_index (queue, i);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader, plugin_job,
+ NULL,
+ gs_plugin_loader_app_installed_cb,
+ g_object_ref (app));
+ }
+ }
+}
+
+static void
+gs_plugin_loader_network_available_notify_cb (GObject *obj,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GNetworkMonitor *monitor = G_NETWORK_MONITOR (obj);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+
+ gs_plugin_loader_network_changed_cb (monitor, g_network_monitor_get_network_available (monitor), plugin_loader);
+}
+
+static void
+gs_plugin_loader_network_metered_notify_cb (GObject *obj,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GNetworkMonitor *monitor = G_NETWORK_MONITOR (obj);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (user_data);
+
+ gs_plugin_loader_network_changed_cb (monitor, g_network_monitor_get_network_available (monitor), plugin_loader);
+}
+
+static void
+gs_plugin_loader_monitor_network (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GNetworkMonitor *network_monitor;
+
+ network_monitor = g_network_monitor_get_default ();
+ if (network_monitor == NULL || priv->network_changed_handler != 0)
+ return;
+ priv->network_monitor = g_object_ref (network_monitor);
+
+ priv->network_changed_handler =
+ g_signal_connect (priv->network_monitor, "network-changed",
+ G_CALLBACK (gs_plugin_loader_network_changed_cb), plugin_loader);
+ priv->network_available_notify_handler =
+ g_signal_connect (priv->network_monitor, "notify::network-available",
+ G_CALLBACK (gs_plugin_loader_network_available_notify_cb), plugin_loader);
+ priv->network_metered_notify_handler =
+ g_signal_connect (priv->network_monitor, "notify::network-metered",
+ G_CALLBACK (gs_plugin_loader_network_metered_notify_cb), plugin_loader);
+
+ gs_plugin_loader_network_changed_cb (priv->network_monitor,
+ g_network_monitor_get_network_available (priv->network_monitor),
+ plugin_loader);
+}
+
+/******************************************************************************/
+
+static AsIcon *
+_gs_app_get_icon_by_kind (GsApp *app, AsIconKind kind)
+{
+ GPtrArray *icons = gs_app_get_icons (app);
+ guint i;
+ for (i = 0; i < icons->len; i++) {
+ AsIcon *ic = g_ptr_array_index (icons, i);
+ if (as_icon_get_kind (ic) == kind)
+ return ic;
+ }
+ return NULL;
+}
+
+static void
+generic_update_cancelled_cb (GCancellable *cancellable, gpointer data)
+{
+ GCancellable *app_cancellable = G_CANCELLABLE (data);
+ g_cancellable_cancel (app_cancellable);
+}
+
+static gboolean
+gs_plugin_loader_generic_update (GsPluginLoader *plugin_loader,
+ GsPluginLoaderHelper *helper,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ guint cancel_handler_id = 0;
+ GsAppList *list;
+
+ /* run each plugin, per-app version */
+ list = gs_plugin_job_get_list (helper->plugin_job);
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPluginActionFunc plugin_app_func = NULL;
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ plugin_app_func = gs_plugin_get_symbol (plugin, helper->function_name);
+ if (plugin_app_func == NULL)
+ continue;
+
+ /* for each app */
+ for (guint j = 0; j < gs_app_list_length (list); j++) {
+ GCancellable *app_cancellable;
+ GsApp *app = gs_app_list_index (list, j);
+ gboolean ret;
+ g_autoptr(GError) error_local = NULL;
+
+ /* if the whole operation should be cancelled */
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return FALSE;
+
+ /* already installed? */
+ if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED)
+ continue;
+
+ /* make sure that the app update is cancelled when the whole op is cancelled */
+ app_cancellable = gs_app_get_cancellable (app);
+ cancel_handler_id = g_cancellable_connect (cancellable,
+ G_CALLBACK (generic_update_cancelled_cb),
+ g_object_ref (app_cancellable),
+ g_object_unref);
+
+ gs_plugin_job_set_app (helper->plugin_job, app);
+ ret = plugin_app_func (plugin, app, app_cancellable, &error_local);
+ g_cancellable_disconnect (cancellable, cancel_handler_id);
+
+ if (!ret) {
+ if (!gs_plugin_error_handle_failure (helper,
+ plugin,
+ error_local,
+ error)) {
+ return FALSE;
+ }
+ }
+ }
+ helper->anything_ran = TRUE;
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_FINISHED);
+ }
+
+ gs_utils_set_online_updates_timestamp (priv->settings);
+ return TRUE;
+}
+
+static void
+gs_plugin_loader_process_thread_cb (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
+{
+ GError *error = NULL;
+ GsPluginLoaderHelper *helper = (GsPluginLoaderHelper *) task_data;
+ GsAppListFilterFlags dedupe_flags;
+ GsAppList *list = gs_plugin_job_get_list (helper->plugin_job);
+ GsPluginAction action = gs_plugin_job_get_action (helper->plugin_job);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (object);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsPluginRefineFlags filter_flags;
+ GsPluginRefineFlags refine_flags;
+ gboolean add_to_pending_array = FALSE;
+ guint max_results;
+ GsAppListSortFunc sort_func;
+#ifdef HAVE_SYSPROF
+ gint64 begin_time_nsec G_GNUC_UNUSED = SYSPROF_CAPTURE_CURRENT_TIME;
+#endif
+
+ /* these change the pending count on the installed panel */
+ switch (action) {
+ case GS_PLUGIN_ACTION_INSTALL:
+ case GS_PLUGIN_ACTION_REMOVE:
+ add_to_pending_array = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ /* add to pending list */
+ if (add_to_pending_array)
+ gs_plugin_loader_pending_apps_add (plugin_loader, helper);
+
+ /* run each plugin */
+ if (action != GS_PLUGIN_ACTION_REFINE) {
+ if (!gs_plugin_loader_run_results (helper, cancellable, &error)) {
+ if (add_to_pending_array) {
+ gs_app_set_state_recover (gs_plugin_job_get_app (helper->plugin_job));
+ gs_plugin_loader_pending_apps_remove (plugin_loader, helper);
+ }
+ gs_utils_error_convert_gio (&error);
+ g_task_return_error (task, error);
+ return;
+ }
+ }
+
+ /* run per-app version */
+ if (action == GS_PLUGIN_ACTION_UPDATE) {
+ helper->function_name = "gs_plugin_update_app";
+ if (!gs_plugin_loader_generic_update (plugin_loader, helper,
+ cancellable, &error)) {
+ gs_utils_error_convert_gio (&error);
+ g_task_return_error (task, error);
+ return;
+ }
+ } else if (action == GS_PLUGIN_ACTION_DOWNLOAD) {
+ helper->function_name = "gs_plugin_download_app";
+ if (!gs_plugin_loader_generic_update (plugin_loader, helper,
+ cancellable, &error)) {
+ gs_utils_error_convert_gio (&error);
+ g_task_return_error (task, error);
+ return;
+ }
+ }
+
+ if (action == GS_PLUGIN_ACTION_UPGRADE_TRIGGER)
+ gs_utils_set_online_updates_timestamp (priv->settings);
+
+ /* remove from pending list */
+ if (add_to_pending_array)
+ gs_plugin_loader_pending_apps_remove (plugin_loader, helper);
+
+ /* some functions are really required for proper operation */
+ switch (action) {
+ case GS_PLUGIN_ACTION_DESTROY:
+ case GS_PLUGIN_ACTION_GET_INSTALLED:
+ case GS_PLUGIN_ACTION_GET_UPDATES:
+ case GS_PLUGIN_ACTION_INITIALIZE:
+ case GS_PLUGIN_ACTION_INSTALL:
+ case GS_PLUGIN_ACTION_DOWNLOAD:
+ case GS_PLUGIN_ACTION_LAUNCH:
+ case GS_PLUGIN_ACTION_REFRESH:
+ case GS_PLUGIN_ACTION_REMOVE:
+ case GS_PLUGIN_ACTION_SEARCH:
+ case GS_PLUGIN_ACTION_SETUP:
+ case GS_PLUGIN_ACTION_UPDATE:
+ if (!helper->anything_ran) {
+ g_set_error (&error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no plugin could handle %s",
+ gs_plugin_action_to_string (action));
+ g_task_return_error (task, error);
+ return;
+ }
+ break;
+ case GS_PLUGIN_ACTION_REFINE:
+ break;
+ default:
+ if (!helper->anything_ran) {
+ g_debug ("no plugin could handle %s",
+ gs_plugin_action_to_string (action));
+ }
+ break;
+ }
+
+ /* unstage addons */
+ if (add_to_pending_array) {
+ GsAppList *addons;
+ addons = gs_app_get_addons (gs_plugin_job_get_app (helper->plugin_job));
+ for (guint i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *addon = gs_app_list_index (addons, i);
+ if (gs_app_get_to_be_installed (addon))
+ gs_app_set_to_be_installed (addon, FALSE);
+ }
+ }
+
+ /* modify the local app */
+ switch (action) {
+ case GS_PLUGIN_ACTION_REVIEW_SUBMIT:
+ gs_app_add_review (gs_plugin_job_get_app (helper->plugin_job), gs_plugin_job_get_review (helper->plugin_job));
+ break;
+ case GS_PLUGIN_ACTION_REVIEW_REMOVE:
+ gs_app_remove_review (gs_plugin_job_get_app (helper->plugin_job), gs_plugin_job_get_review (helper->plugin_job));
+ break;
+ default:
+ break;
+ }
+
+ /* refine with enough data so that the sort_func in
+ * gs_plugin_loader_job_sorted_truncation() can do what it needs */
+ filter_flags = gs_plugin_job_get_filter_flags (helper->plugin_job);
+ max_results = gs_plugin_job_get_max_results (helper->plugin_job);
+ sort_func = gs_plugin_job_get_sort_func (helper->plugin_job);
+ if (filter_flags > 0 && max_results > 0 && sort_func != NULL) {
+ g_autoptr(GsPluginLoaderHelper) helper2 = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "list", list,
+ "refine-flags", filter_flags,
+ NULL);
+ helper2 = gs_plugin_loader_helper_new (helper->plugin_loader, plugin_job);
+ helper2->function_name_parent = helper->function_name;
+ g_debug ("running filter flags with early refine");
+ if (!gs_plugin_loader_run_refine_filter (helper2, list,
+ filter_flags,
+ cancellable, &error)) {
+ gs_utils_error_convert_gio (&error);
+ g_task_return_error (task, error);
+ return;
+ }
+ }
+
+ /* filter to reduce to a sane set */
+ gs_plugin_loader_job_sorted_truncation (helper);
+
+ /* set the local file on any of the returned results */
+ switch (action) {
+ case GS_PLUGIN_ACTION_FILE_TO_APP:
+ for (guint j = 0; j < gs_app_list_length (list); j++) {
+ GsApp *app = gs_app_list_index (list, j);
+ if (gs_app_get_local_file (app) == NULL)
+ gs_app_set_local_file (app, gs_plugin_job_get_file (helper->plugin_job));
+ }
+ default:
+ break;
+ }
+
+ /* pick up new source id */
+ switch (action) {
+ case GS_PLUGIN_ACTION_INSTALL:
+ case GS_PLUGIN_ACTION_REMOVE:
+ gs_plugin_job_add_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION);
+ break;
+ default:
+ break;
+ }
+
+ /* run refine() on each one if required */
+ if (gs_plugin_job_get_refine_flags (helper->plugin_job) != 0) {
+ if (!gs_plugin_loader_run_refine (helper, list, cancellable, &error)) {
+ gs_utils_error_convert_gio (&error);
+ g_task_return_error (task, error);
+ return;
+ }
+ } else {
+ g_debug ("no refine flags set for transaction");
+ }
+
+ /* check the local files have an icon set */
+ switch (action) {
+ case GS_PLUGIN_ACTION_URL_TO_APP:
+ case GS_PLUGIN_ACTION_FILE_TO_APP:
+ for (guint j = 0; j < gs_app_list_length (list); j++) {
+ GsApp *app = gs_app_list_index (list, j);
+ if (_gs_app_get_icon_by_kind (app, AS_ICON_KIND_STOCK) == NULL &&
+ _gs_app_get_icon_by_kind (app, AS_ICON_KIND_LOCAL) == NULL &&
+ _gs_app_get_icon_by_kind (app, AS_ICON_KIND_CACHED) == NULL) {
+ g_autoptr(AsIcon) ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_HAS_SOURCE))
+ as_icon_set_name (ic, "x-package-repository");
+ else
+ as_icon_set_name (ic, "application-x-executable");
+ gs_app_add_icon (app, ic);
+ }
+ }
+
+ /* run refine() on each one again to pick up any icons */
+ refine_flags = gs_plugin_job_get_refine_flags (helper->plugin_job);
+ gs_plugin_job_set_refine_flags (helper->plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON);
+ if (!gs_plugin_loader_run_refine (helper, list, cancellable, &error)) {
+ gs_utils_error_convert_gio (&error);
+ g_task_return_error (task, error);
+ return;
+ }
+ /* restore the refine flags so that gs_app_list_filter sees the right thing */
+ gs_plugin_job_set_refine_flags (helper->plugin_job, refine_flags);
+ break;
+ default:
+ break;
+ }
+
+ /* filter package list */
+ switch (action) {
+ case GS_PLUGIN_ACTION_URL_TO_APP:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ break;
+ case GS_PLUGIN_ACTION_SEARCH:
+ case GS_PLUGIN_ACTION_SEARCH_FILES:
+ case GS_PLUGIN_ACTION_SEARCH_PROVIDES:
+ case GS_PLUGIN_ACTION_GET_ALTERNATES:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ gs_app_list_filter (list, gs_plugin_loader_filter_qt_for_gtk, NULL);
+ gs_app_list_filter (list, gs_plugin_loader_get_app_is_compatible, plugin_loader);
+ break;
+ case GS_PLUGIN_ACTION_GET_CATEGORY_APPS:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ gs_app_list_filter (list, gs_plugin_loader_filter_qt_for_gtk, NULL);
+ gs_app_list_filter (list, gs_plugin_loader_get_app_is_compatible, plugin_loader);
+ break;
+ case GS_PLUGIN_ACTION_GET_INSTALLED:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid_installed, helper);
+ break;
+ case GS_PLUGIN_ACTION_GET_FEATURED:
+ if (g_getenv ("GNOME_SOFTWARE_FEATURED") != NULL) {
+ gs_app_list_filter (list, gs_plugin_loader_featured_debug, NULL);
+ } else {
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ gs_app_list_filter (list, gs_plugin_loader_get_app_is_compatible, plugin_loader);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_UPDATES:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid_updatable, helper);
+ break;
+ case GS_PLUGIN_ACTION_GET_RECENT:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_non_compulsory, NULL);
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ gs_app_list_filter (list, gs_plugin_loader_filter_qt_for_gtk, NULL);
+ gs_app_list_filter (list, gs_plugin_loader_get_app_is_compatible, plugin_loader);
+ break;
+ case GS_PLUGIN_ACTION_REFINE:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ break;
+ case GS_PLUGIN_ACTION_GET_POPULAR:
+ gs_app_list_filter (list, gs_plugin_loader_app_is_valid, helper);
+ gs_app_list_filter (list, gs_plugin_loader_filter_qt_for_gtk, NULL);
+ gs_app_list_filter (list, gs_plugin_loader_get_app_is_compatible, plugin_loader);
+ break;
+ default:
+ break;
+ }
+
+ /* only allow one result */
+ if (action == GS_PLUGIN_ACTION_URL_TO_APP ||
+ action == GS_PLUGIN_ACTION_FILE_TO_APP) {
+ if (gs_app_list_length (list) == 0) {
+ g_autofree gchar *str = gs_plugin_job_to_string (helper->plugin_job);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsPluginEvent) event = NULL;
+ g_set_error (&error_local,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no application was created for %s", str);
+ event = gs_plugin_job_to_failed_event (helper->plugin_job, error_local);
+ gs_plugin_loader_add_event (plugin_loader, event);
+ g_task_return_error (task, g_steal_pointer (&error_local));
+ return;
+ }
+ if (gs_app_list_length (list) > 1) {
+ g_autofree gchar *str = gs_plugin_job_to_string (helper->plugin_job);
+ g_debug ("more than one application was created for %s", str);
+ }
+ }
+
+ /* filter duplicates with priority, taking into account the source name
+ * & version, so we combine available updates with the installed app */
+ gs_app_list_filter (list, gs_plugin_loader_app_set_prio, plugin_loader);
+ dedupe_flags = gs_plugin_job_get_dedupe_flags (helper->plugin_job);
+ if (dedupe_flags != GS_APP_LIST_FILTER_FLAG_NONE)
+ gs_app_list_filter_duplicates (list, dedupe_flags);
+
+ /* sort these again as the refine may have added useful metadata */
+ gs_plugin_loader_job_sorted_truncation_again (helper);
+
+ /* if the plugin used updates-changed actually schedule it now */
+ if (priv->updates_changed_cnt > 0)
+ gs_plugin_loader_updates_changed (plugin_loader);
+
+#ifdef HAVE_SYSPROF
+ if (priv->sysprof_writer != NULL) {
+ g_autofree gchar *sysprof_name = g_strconcat ("process-thread:", gs_plugin_action_to_string (action), NULL);
+ g_autofree gchar *sysprof_message = gs_plugin_job_to_string (helper->plugin_job);
+ sysprof_capture_writer_add_mark (priv->sysprof_writer,
+ begin_time_nsec,
+ sched_getcpu (),
+ getpid (),
+ SYSPROF_CAPTURE_CURRENT_TIME - begin_time_nsec,
+ "gnome-software",
+ sysprof_name,
+ sysprof_message);
+ }
+#endif /* HAVE_SYSPROF */
+
+ /* show elapsed time */
+ gs_plugin_loader_job_debug (helper);
+
+ /* success */
+ g_task_return_pointer (task, g_object_ref (list), (GDestroyNotify) g_object_unref);
+}
+
+static void
+gs_plugin_loader_process_in_thread_pool_cb (gpointer data,
+ gpointer user_data)
+{
+ GTask *task = data;
+ gpointer source_object = g_task_get_source_object (task);
+ gpointer task_data = g_task_get_task_data (task);
+ GCancellable *cancellable = g_task_get_cancellable (task);
+
+ gs_ioprio_init ();
+
+ gs_plugin_loader_process_thread_cb (task, source_object, task_data, cancellable);
+ g_object_unref (task);
+}
+
+static gboolean
+gs_plugin_loader_job_timeout_cb (gpointer user_data)
+{
+ GsPluginLoaderHelper *helper = (GsPluginLoaderHelper *) user_data;
+
+ /* call the cancellable */
+ g_debug ("cancelling job %s as it took longer than %u seconds",
+ helper->function_name,
+ gs_plugin_job_get_timeout (helper->plugin_job));
+ g_cancellable_cancel (helper->cancellable);
+
+ /* failed */
+ helper->timeout_triggered = TRUE;
+ helper->timeout_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_plugin_loader_cancelled_cb (GCancellable *cancellable, GsPluginLoaderHelper *helper)
+{
+ /* just proxy this forward */
+ g_debug ("Cancelling job with cancellable %p", helper->cancellable);
+ g_cancellable_cancel (helper->cancellable);
+}
+
+static void
+gs_plugin_loader_schedule_task (GsPluginLoader *plugin_loader,
+ GTask *task)
+{
+ GsPluginLoaderHelper *helper = g_task_get_task_data (task);
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ GsApp *app = gs_plugin_job_get_app (helper->plugin_job);
+
+ if (app != NULL) {
+ /* set the pending-action to the app */
+ GsPluginAction action = gs_plugin_job_get_action (helper->plugin_job);
+ gs_app_set_pending_action (app, action);
+ }
+ g_thread_pool_push (priv->queued_ops_pool, g_object_ref (task), NULL);
+}
+
+/**
+ * gs_plugin_loader_job_process_async:
+ * @plugin_loader: A #GsPluginLoader
+ * @plugin_job: job to process
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: function to call when complete
+ * @user_data: user data to pass to @callback
+ *
+ * This method calls all plugins.
+ **/
+void
+gs_plugin_loader_job_process_async (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GsPluginAction action;
+ GsPluginLoaderHelper *helper;
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ g_autoptr(GTask) task = NULL;
+ g_autoptr(GCancellable) cancellable_job = g_cancellable_new ();
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_autofree gchar *task_name = NULL;
+#endif
+
+ g_return_if_fail (GS_IS_PLUGIN_LOADER (plugin_loader));
+ g_return_if_fail (GS_IS_PLUGIN_JOB (plugin_job));
+ g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+ action = gs_plugin_job_get_action (plugin_job);
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ task_name = g_strdup_printf ("%s %s", G_STRFUNC, gs_plugin_action_to_string (action));
+#endif
+
+ /* check job has valid action */
+ if (action == GS_PLUGIN_ACTION_UNKNOWN) {
+ g_autofree gchar *job_str = gs_plugin_job_to_string (plugin_job);
+ task = g_task_new (plugin_loader, cancellable_job, callback, user_data);
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_task_set_name (task, task_name);
+#endif
+ g_task_return_new_error (task,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "job has no valid action: %s", job_str);
+ return;
+ }
+
+ /* deal with the install queue */
+ if (action == GS_PLUGIN_ACTION_REMOVE) {
+ if (remove_app_from_install_queue (plugin_loader, gs_plugin_job_get_app (plugin_job))) {
+ GsAppList *list = gs_plugin_job_get_list (plugin_job);
+ task = g_task_new (plugin_loader, cancellable, callback, user_data);
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_task_set_name (task, task_name);
+#endif
+ g_task_return_pointer (task, g_object_ref (list), (GDestroyNotify) g_object_unref);
+ return;
+ }
+ }
+
+ /* hardcoded, so resolve a set list */
+ if (action == GS_PLUGIN_ACTION_GET_POPULAR) {
+ g_auto(GStrv) apps = NULL;
+ if (g_getenv ("GNOME_SOFTWARE_POPULAR") != NULL) {
+ apps = g_strsplit (g_getenv ("GNOME_SOFTWARE_POPULAR"), ",", 0);
+ } else {
+ apps = g_settings_get_strv (priv->settings, "popular-overrides");
+ }
+ if (apps != NULL && g_strv_length (apps) > 0) {
+ GsAppList *list = gs_plugin_job_get_list (plugin_job);
+ for (guint i = 0; apps[i] != NULL; i++) {
+ g_autoptr(GsApp) app = gs_app_new (apps[i]);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ }
+ gs_plugin_job_set_action (plugin_job, GS_PLUGIN_ACTION_REFINE);
+ }
+ }
+
+ /* FIXME: the plugins should specify this, rather than hardcoding */
+ if (gs_plugin_job_has_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS)) {
+ gs_plugin_job_add_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON);
+ }
+ if (gs_plugin_job_has_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_UI)) {
+ gs_plugin_job_add_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN);
+ }
+ if (gs_plugin_job_has_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH)) {
+ gs_plugin_job_add_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES);
+ }
+ if (gs_plugin_job_has_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME)) {
+ gs_plugin_job_add_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN);
+ }
+ if (gs_plugin_job_has_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE)) {
+ gs_plugin_job_add_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME);
+ }
+
+ /* FIXME: this is probably a bug */
+ if (action == GS_PLUGIN_ACTION_GET_DISTRO_UPDATES ||
+ action == GS_PLUGIN_ACTION_GET_SOURCES) {
+ gs_plugin_job_add_refine_flags (plugin_job,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION);
+ }
+
+ /* get alternates is unusual in that it needs an app input and a list
+ * output -- so undo the helpful app add in gs_plugin_job_set_app() */
+ if (action == GS_PLUGIN_ACTION_GET_ALTERNATES) {
+ GsAppList *list = gs_plugin_job_get_list (plugin_job);
+ gs_app_list_remove_all (list);
+ }
+
+ /* check required args */
+ task = g_task_new (plugin_loader, cancellable_job, callback, user_data);
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_task_set_name (task, task_name);
+#endif
+
+ switch (action) {
+ case GS_PLUGIN_ACTION_SEARCH:
+ case GS_PLUGIN_ACTION_SEARCH_FILES:
+ case GS_PLUGIN_ACTION_SEARCH_PROVIDES:
+ case GS_PLUGIN_ACTION_URL_TO_APP:
+ if (gs_plugin_job_get_search (plugin_job) == NULL) {
+ g_task_return_new_error (task,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no valid search terms");
+ return;
+ }
+ break;
+ case GS_PLUGIN_ACTION_REVIEW_SUBMIT:
+ case GS_PLUGIN_ACTION_REVIEW_UPVOTE:
+ case GS_PLUGIN_ACTION_REVIEW_DOWNVOTE:
+ case GS_PLUGIN_ACTION_REVIEW_REPORT:
+ case GS_PLUGIN_ACTION_REVIEW_REMOVE:
+ case GS_PLUGIN_ACTION_REVIEW_DISMISS:
+ if (gs_plugin_job_get_review (plugin_job) == NULL) {
+ g_task_return_new_error (task,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no valid review object");
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* sorting fallbacks */
+ switch (action) {
+ case GS_PLUGIN_ACTION_SEARCH:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_match_value_cb);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_RECENT:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_kind_cb);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_CATEGORY_APPS:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_name_cb);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_ALTERNATES:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_prio_cb);
+ }
+ break;
+ case GS_PLUGIN_ACTION_GET_DISTRO_UPDATES:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_version_cb);
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* save helper */
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ g_task_set_task_data (task, helper, (GDestroyNotify) gs_plugin_loader_helper_free);
+
+ /* let the task cancel itself */
+ g_task_set_check_cancellable (task, FALSE);
+ g_task_set_return_on_cancel (task, FALSE);
+
+ /* pre-tokenize search */
+ if (action == GS_PLUGIN_ACTION_SEARCH) {
+ const gchar *search = gs_plugin_job_get_search (plugin_job);
+ helper->tokens = as_utils_search_tokenize (search);
+ if (helper->tokens == NULL) {
+ g_task_return_new_error (task,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "failed to tokenize %s", search);
+ return;
+ }
+ }
+
+ /* jobs always have a valid cancellable, so proxy the caller */
+ helper->cancellable = g_object_ref (cancellable_job);
+ g_debug ("Chaining cancellation from %p to %p", cancellable, cancellable_job);
+ if (cancellable != NULL) {
+ helper->cancellable_caller = g_object_ref (cancellable);
+ helper->cancellable_id =
+ g_cancellable_connect (helper->cancellable_caller,
+ G_CALLBACK (gs_plugin_loader_cancelled_cb),
+ helper, NULL);
+ }
+
+ /* set up a hang handler */
+ switch (action) {
+ case GS_PLUGIN_ACTION_GET_ALTERNATES:
+ case GS_PLUGIN_ACTION_GET_CATEGORY_APPS:
+ case GS_PLUGIN_ACTION_GET_FEATURED:
+ case GS_PLUGIN_ACTION_GET_INSTALLED:
+ case GS_PLUGIN_ACTION_GET_POPULAR:
+ case GS_PLUGIN_ACTION_GET_RECENT:
+ case GS_PLUGIN_ACTION_SEARCH:
+ case GS_PLUGIN_ACTION_SEARCH_FILES:
+ case GS_PLUGIN_ACTION_SEARCH_PROVIDES:
+ helper->timeout_id =
+ g_timeout_add_seconds (gs_plugin_job_get_timeout (plugin_job),
+ gs_plugin_loader_job_timeout_cb,
+ helper);
+ break;
+ default:
+ break;
+ }
+
+ switch (action) {
+ case GS_PLUGIN_ACTION_INSTALL:
+ case GS_PLUGIN_ACTION_UPDATE:
+ case GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD:
+ /* these actions must be performed by the thread pool because we
+ * want to limit the number of them running in parallel */
+ gs_plugin_loader_schedule_task (plugin_loader, task);
+ return;
+ default:
+ break;
+ }
+
+ /* run in a thread */
+ g_task_run_in_thread (task, gs_plugin_loader_process_thread_cb);
+}
+
+/******************************************************************************/
+
+/**
+ * gs_plugin_loader_get_plugin_supported:
+ * @plugin_loader: A #GsPluginLoader
+ * @function_name: a function name
+ *
+ * This function returns TRUE if the symbol is found in any enabled plugin.
+ */
+gboolean
+gs_plugin_loader_get_plugin_supported (GsPluginLoader *plugin_loader,
+ const gchar *function_name)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ for (guint i = 0; i < priv->plugins->len; i++) {
+ GsPlugin *plugin = g_ptr_array_index (priv->plugins, i);
+ if (gs_plugin_get_symbol (plugin, function_name) != NULL)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * gs_plugin_loader_app_create:
+ * @plugin_loader: a #GsPluginLoader
+ * @unique_id: a unique_id
+ *
+ * Returns an application from the global cache, creating if required.
+ *
+ * Returns: (transfer full): a #GsApp
+ **/
+GsApp *
+gs_plugin_loader_app_create (GsPluginLoader *plugin_loader, const gchar *unique_id)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsAppList) list = gs_app_list_new ();
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GsPluginLoaderHelper) helper = NULL;
+
+ /* use the plugin loader to convert a wildcard app*/
+ app = gs_app_new (NULL);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_set_from_unique_id (app, unique_id);
+ gs_app_list_add (list, app);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE, NULL);
+ helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
+ if (!gs_plugin_loader_run_refine (helper, list, NULL, &error)) {
+ g_warning ("%s", error->message);
+ return NULL;
+ }
+
+ /* return the matching GsApp */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app_tmp = gs_app_list_index (list, i);
+ if (g_strcmp0 (unique_id, gs_app_get_unique_id (app_tmp)) == 0)
+ return g_object_ref (app_tmp);
+ }
+
+ /* return the first returned app that's not a wildcard */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app_tmp = gs_app_list_index (list, i);
+ if (!gs_app_has_quirk (app_tmp, GS_APP_QUIRK_IS_WILDCARD)) {
+ g_debug ("returning imperfect match: %s != %s",
+ unique_id, gs_app_get_unique_id (app_tmp));
+ return g_object_ref (app_tmp);
+ }
+ }
+
+ /* does not exist */
+ g_warning ("failed to create an app for %s", unique_id);
+ return NULL;
+}
+
+/**
+ * gs_plugin_loader_get_system_app:
+ * @plugin_loader: a #GsPluginLoader
+ *
+ * Returns the application that represents the currently installed OS.
+ *
+ * Returns: (transfer full): a #GsApp
+ **/
+GsApp *
+gs_plugin_loader_get_system_app (GsPluginLoader *plugin_loader)
+{
+ return gs_plugin_loader_app_create (plugin_loader, "*/*/*/*/system/*");
+}
+
+/**
+ * gs_plugin_loader_set_max_parallel_ops:
+ * @plugin_loader: a #GsPluginLoader
+ * @max_ops: the maximum number of parallel operations
+ *
+ * Sets the number of maximum number of queued operations (install/update/upgrade-download)
+ * to be processed at a time. If @max_ops is 0, then it will set the default maximum number.
+ */
+void
+gs_plugin_loader_set_max_parallel_ops (GsPluginLoader *plugin_loader,
+ guint max_ops)
+{
+ g_autoptr(GError) error = NULL;
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ if (max_ops == 0)
+ max_ops = get_max_parallel_ops ();
+ if (!g_thread_pool_set_max_threads (priv->queued_ops_pool, max_ops, &error))
+ g_warning ("Failed to set the maximum number of ops in parallel: %s",
+ error->message);
+}
+
+const gchar *
+gs_plugin_loader_get_locale (GsPluginLoader *plugin_loader)
+{
+ GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+ return priv->locale;
+}
diff --git a/lib/gs-plugin-loader.h b/lib/gs-plugin-loader.h
new file mode 100644
index 0000000..f729572
--- /dev/null
+++ b/lib/gs-plugin-loader.h
@@ -0,0 +1,100 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2007-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-app.h"
+#include "gs-category.h"
+#include "gs-plugin-event.h"
+#include "gs-plugin-private.h"
+#include "gs-plugin-job.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PLUGIN_LOADER (gs_plugin_loader_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsPluginLoader, gs_plugin_loader, GS, PLUGIN_LOADER, GObject)
+
+struct _GsPluginLoaderClass
+{
+ GObjectClass parent_class;
+ void (*status_changed) (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GsPluginStatus status);
+ void (*pending_apps_changed) (GsPluginLoader *plugin_loader);
+ void (*updates_changed) (GsPluginLoader *plugin_loader);
+ void (*reload) (GsPluginLoader *plugin_loader);
+ void (*basic_auth_start) (GsPluginLoader *plugin_loader,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data);
+};
+
+GsPluginLoader *gs_plugin_loader_new (void);
+void gs_plugin_loader_job_process_async (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GsAppList *gs_plugin_loader_job_process_finish (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GError **error);
+gboolean gs_plugin_loader_job_action_finish (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GError **error);
+void gs_plugin_loader_job_get_categories_async (GsPluginLoader *plugin_loader,
+ GsPluginJob *plugin_job,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GPtrArray *gs_plugin_loader_job_get_categories_finish (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GError **error);
+gboolean gs_plugin_loader_setup (GsPluginLoader *plugin_loader,
+ gchar **allowlist,
+ gchar **blocklist,
+ GCancellable *cancellable,
+ GError **error);
+void gs_plugin_loader_dump_state (GsPluginLoader *plugin_loader);
+gboolean gs_plugin_loader_get_enabled (GsPluginLoader *plugin_loader,
+ const gchar *plugin_name);
+void gs_plugin_loader_add_location (GsPluginLoader *plugin_loader,
+ const gchar *location);
+guint gs_plugin_loader_get_scale (GsPluginLoader *plugin_loader);
+void gs_plugin_loader_set_scale (GsPluginLoader *plugin_loader,
+ guint scale);
+GsAppList *gs_plugin_loader_get_pending (GsPluginLoader *plugin_loader);
+gboolean gs_plugin_loader_get_allow_updates (GsPluginLoader *plugin_loader);
+gboolean gs_plugin_loader_get_network_available (GsPluginLoader *plugin_loader);
+gboolean gs_plugin_loader_get_network_metered (GsPluginLoader *plugin_loader);
+gboolean gs_plugin_loader_get_plugin_supported (GsPluginLoader *plugin_loader,
+ const gchar *function_name);
+
+GPtrArray *gs_plugin_loader_get_events (GsPluginLoader *plugin_loader);
+GsPluginEvent *gs_plugin_loader_get_event_default (GsPluginLoader *plugin_loader);
+void gs_plugin_loader_remove_events (GsPluginLoader *plugin_loader);
+
+GsApp *gs_plugin_loader_app_create (GsPluginLoader *plugin_loader,
+ const gchar *unique_id);
+GsApp *gs_plugin_loader_get_system_app (GsPluginLoader *plugin_loader);
+
+/* only useful from the self tests */
+void gs_plugin_loader_setup_again (GsPluginLoader *plugin_loader);
+void gs_plugin_loader_clear_caches (GsPluginLoader *plugin_loader);
+GsPlugin *gs_plugin_loader_find_plugin (GsPluginLoader *plugin_loader,
+ const gchar *plugin_name);
+void gs_plugin_loader_set_max_parallel_ops (GsPluginLoader *plugin_loader,
+ guint max_ops);
+
+const gchar *gs_plugin_loader_get_locale (GsPluginLoader *plugin_loader);
+
+G_END_DECLS
diff --git a/lib/gs-plugin-private.h b/lib/gs-plugin-private.h
new file mode 100644
index 0000000..1defc98
--- /dev/null
+++ b/lib/gs-plugin-private.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <appstream-glib.h>
+#include <glib-object.h>
+#include <gmodule.h>
+#include <libsoup/soup.h>
+
+#include "gs-plugin.h"
+
+G_BEGIN_DECLS
+
+GsPlugin *gs_plugin_new (void);
+GsPlugin *gs_plugin_create (const gchar *filename,
+ GError **error);
+const gchar *gs_plugin_error_to_string (GsPluginError error);
+const gchar *gs_plugin_action_to_string (GsPluginAction action);
+GsPluginAction gs_plugin_action_from_string (const gchar *action);
+const gchar *gs_plugin_action_to_function_name (GsPluginAction action);
+
+void gs_plugin_clear_data (GsPlugin *plugin);
+void gs_plugin_set_scale (GsPlugin *plugin,
+ guint scale);
+guint gs_plugin_get_order (GsPlugin *plugin);
+void gs_plugin_set_order (GsPlugin *plugin,
+ guint order);
+guint gs_plugin_get_priority (GsPlugin *plugin);
+void gs_plugin_set_priority (GsPlugin *plugin,
+ guint priority);
+void gs_plugin_set_name (GsPlugin *plugin,
+ const gchar *name);
+void gs_plugin_set_locale (GsPlugin *plugin,
+ const gchar *locale);
+void gs_plugin_set_language (GsPlugin *plugin,
+ const gchar *language);
+void gs_plugin_set_auth_array (GsPlugin *plugin,
+ GPtrArray *auth_array);
+GPtrArray *gs_plugin_get_rules (GsPlugin *plugin,
+ GsPluginRule rule);
+gpointer gs_plugin_get_symbol (GsPlugin *plugin,
+ const gchar *function_name);
+void gs_plugin_interactive_inc (GsPlugin *plugin);
+void gs_plugin_interactive_dec (GsPlugin *plugin);
+gchar *gs_plugin_refine_flags_to_string (GsPluginRefineFlags refine_flags);
+void gs_plugin_set_network_monitor (GsPlugin *plugin,
+ GNetworkMonitor *monitor);
+
+G_END_DECLS
diff --git a/lib/gs-plugin-types.h b/lib/gs-plugin-types.h
new file mode 100644
index 0000000..b4a3e3b
--- /dev/null
+++ b/lib/gs-plugin-types.h
@@ -0,0 +1,280 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GsPluginStatus:
+ * @GS_PLUGIN_STATUS_UNKNOWN: Unknown status
+ * @GS_PLUGIN_STATUS_WAITING: Waiting
+ * @GS_PLUGIN_STATUS_FINISHED: Finished
+ * @GS_PLUGIN_STATUS_SETUP: Setup in progress
+ * @GS_PLUGIN_STATUS_DOWNLOADING: Downloading in progress
+ * @GS_PLUGIN_STATUS_QUERYING: Querying in progress
+ * @GS_PLUGIN_STATUS_INSTALLING: Installing in progress
+ * @GS_PLUGIN_STATUS_REMOVING: Removing in progress
+ *
+ * The ststus of the plugin.
+ **/
+typedef enum {
+ GS_PLUGIN_STATUS_UNKNOWN,
+ GS_PLUGIN_STATUS_WAITING,
+ GS_PLUGIN_STATUS_FINISHED,
+ GS_PLUGIN_STATUS_SETUP,
+ GS_PLUGIN_STATUS_DOWNLOADING,
+ GS_PLUGIN_STATUS_QUERYING,
+ GS_PLUGIN_STATUS_INSTALLING,
+ GS_PLUGIN_STATUS_REMOVING,
+ /*< private >*/
+ GS_PLUGIN_STATUS_LAST
+} GsPluginStatus;
+
+/**
+ * GsPluginFlags:
+ * @GS_PLUGIN_FLAGS_NONE: No flags set
+ * @GS_PLUGIN_FLAGS_INTERACTIVE: User initiated the job
+ *
+ * The flags for the plugin at this point in time.
+ **/
+#define GS_PLUGIN_FLAGS_NONE (0u)
+#define GS_PLUGIN_FLAGS_INTERACTIVE (1u << 4)
+typedef guint64 GsPluginFlags;
+
+/**
+ * GsPluginError:
+ * @GS_PLUGIN_ERROR_FAILED: Generic failure
+ * @GS_PLUGIN_ERROR_NOT_SUPPORTED: Action not supported
+ * @GS_PLUGIN_ERROR_CANCELLED: Action was cancelled
+ * @GS_PLUGIN_ERROR_NO_NETWORK: No network connection available
+ * @GS_PLUGIN_ERROR_NO_SECURITY: Security policy forbid action
+ * @GS_PLUGIN_ERROR_NO_SPACE: No disk space to allow action
+ * @GS_PLUGIN_ERROR_AUTH_REQUIRED: Authentication was required
+ * @GS_PLUGIN_ERROR_AUTH_INVALID: Provided authentication was invalid
+ * @GS_PLUGIN_ERROR_PLUGIN_DEPSOLVE_FAILED: The plugins installed are incompatible
+ * @GS_PLUGIN_ERROR_DOWNLOAD_FAILED: The download action failed
+ * @GS_PLUGIN_ERROR_WRITE_FAILED: The save-to-disk failed
+ * @GS_PLUGIN_ERROR_INVALID_FORMAT: The data format is invalid
+ * @GS_PLUGIN_ERROR_DELETE_FAILED: The delete action failed
+ * @GS_PLUGIN_ERROR_RESTART_REQUIRED: A restart is required
+ * @GS_PLUGIN_ERROR_AC_POWER_REQUIRED: AC power is required
+ * @GS_PLUGIN_ERROR_TIMED_OUT: The job timed out
+ * @GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW: The system battery level is too low
+ *
+ * The failure error types.
+ **/
+typedef enum {
+ GS_PLUGIN_ERROR_FAILED,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ GS_PLUGIN_ERROR_CANCELLED,
+ GS_PLUGIN_ERROR_NO_NETWORK,
+ GS_PLUGIN_ERROR_NO_SECURITY,
+ GS_PLUGIN_ERROR_NO_SPACE,
+ GS_PLUGIN_ERROR_AUTH_REQUIRED,
+ GS_PLUGIN_ERROR_AUTH_INVALID,
+ GS_PLUGIN_ERROR_PLUGIN_DEPSOLVE_FAILED,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ GS_PLUGIN_ERROR_WRITE_FAILED,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ GS_PLUGIN_ERROR_DELETE_FAILED,
+ GS_PLUGIN_ERROR_RESTART_REQUIRED,
+ GS_PLUGIN_ERROR_AC_POWER_REQUIRED,
+ GS_PLUGIN_ERROR_TIMED_OUT,
+ GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW,
+ /*< private >*/
+ GS_PLUGIN_ERROR_LAST
+} GsPluginError;
+
+/**
+ * GsPluginRefineFlags:
+ * @GS_PLUGIN_REFINE_FLAGS_DEFAULT: No explicit flags set
+ * @GS_PLUGIN_REFINE_FLAGS_USE_HISTORY: Get the historical view (unused)
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE: Require the license
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL: Require the URL
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION: Require the long description
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE: Require the installed and download sizes
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING: Require the rating
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION: Require the version
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY: Require the history
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION: Require enough to install or remove the package
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS: Require update details
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN: Require the origin
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED: Require related packages
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH: Require the menu path
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS: Require available addons
+ * @GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES: Allow packages to be returned
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY: Require update severity
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPGRADE_REMOVED: Require distro upgrades
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE: Require the provenance
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS: Require user-reviews
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS: Require user-ratings
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS: Require the key colors
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON: Require the icon to be loaded
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS: Require the needed permissions
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME: Require the origin hostname
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_UI: Require the origin for UI
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME: Require the runtime
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS: Require screenshot information
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES: Require categories
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP: Require project group
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME: Require developer name
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS: Require kudos
+ * @GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING: Require content rating
+ *
+ * The refine flags.
+ **/
+#define GS_PLUGIN_REFINE_FLAGS_DEFAULT ((guint64) 0)
+#define GS_PLUGIN_REFINE_FLAGS_USE_HISTORY ((guint64) 1 << 0) /* unused, TODO: perhaps ->STATE */
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE ((guint64) 1 << 1)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL ((guint64) 1 << 2)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION ((guint64) 1 << 3)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE ((guint64) 1 << 4)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING ((guint64) 1 << 5)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION ((guint64) 1 << 6)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY ((guint64) 1 << 7)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION ((guint64) 1 << 8)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS ((guint64) 1 << 9)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN ((guint64) 1 << 10)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED ((guint64) 1 << 11)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH ((guint64) 1 << 12)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS ((guint64) 1 << 13)
+#define GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES ((guint64) 1 << 14) /* TODO: move to request */
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY ((guint64) 1 << 15)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPGRADE_REMOVED ((guint64) 1 << 16)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE ((guint64) 1 << 17)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS ((guint64) 1 << 18)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS ((guint64) 1 << 19)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS ((guint64) 1 << 20)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON ((guint64) 1 << 21)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS ((guint64) 1 << 22)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME ((guint64) 1 << 23)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_UI ((guint64) 1 << 24)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME ((guint64) 1 << 25)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS ((guint64) 1 << 26)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES ((guint64) 1 << 27)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP ((guint64) 1 << 28)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME ((guint64) 1 << 29)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS ((guint64) 1 << 30)
+#define GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING ((guint64) 1 << 31)
+typedef guint64 GsPluginRefineFlags;
+
+/**
+ * GsPluginRule:
+ * @GS_PLUGIN_RULE_CONFLICTS: The plugin conflicts with another
+ * @GS_PLUGIN_RULE_RUN_AFTER: Order the plugin after another
+ * @GS_PLUGIN_RULE_RUN_BEFORE: Order the plugin before another
+ * @GS_PLUGIN_RULE_BETTER_THAN: Results are better than another
+ *
+ * The rules used for ordering plugins.
+ * Plugins are expected to add rules in gs_plugin_initialize().
+ **/
+typedef enum {
+ GS_PLUGIN_RULE_CONFLICTS,
+ GS_PLUGIN_RULE_RUN_AFTER,
+ GS_PLUGIN_RULE_RUN_BEFORE,
+ GS_PLUGIN_RULE_BETTER_THAN,
+ /*< private >*/
+ GS_PLUGIN_RULE_LAST
+} GsPluginRule;
+
+/**
+ * GsPluginAction:
+ * @GS_PLUGIN_ACTION_UNKNOWN: Action is unknown
+ * @GS_PLUGIN_ACTION_SETUP: Plugin setup (internal)
+ * @GS_PLUGIN_ACTION_INSTALL: Install an application
+ * @GS_PLUGIN_ACTION_REMOVE: Remove an application
+ * @GS_PLUGIN_ACTION_UPDATE: Update an application
+ * @GS_PLUGIN_ACTION_SET_RATING: Set rating on an application
+ * @GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD: Download a distro upgrade
+ * @GS_PLUGIN_ACTION_UPGRADE_TRIGGER: Trigger a distro upgrade
+ * @GS_PLUGIN_ACTION_LAUNCH: Launch an application
+ * @GS_PLUGIN_ACTION_UPDATE_CANCEL: Cancel the update
+ * @GS_PLUGIN_ACTION_ADD_SHORTCUT: Add a shortcut to an application
+ * @GS_PLUGIN_ACTION_REMOVE_SHORTCUT: Remove a shortcut to an application
+ * @GS_PLUGIN_ACTION_REVIEW_SUBMIT: Submit a new review
+ * @GS_PLUGIN_ACTION_REVIEW_UPVOTE: Upvote an existing review
+ * @GS_PLUGIN_ACTION_REVIEW_DOWNVOTE: Downvote an existing review
+ * @GS_PLUGIN_ACTION_REVIEW_REPORT: Report an existing review
+ * @GS_PLUGIN_ACTION_REVIEW_REMOVE: Remove a review written by the user
+ * @GS_PLUGIN_ACTION_REVIEW_DISMISS: Dismiss (ignore) a review when moderating
+ * @GS_PLUGIN_ACTION_GET_UPDATES: Get the list of updates
+ * @GS_PLUGIN_ACTION_GET_DISTRO_UPDATES: Get the list of distro updates
+ * @GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS: Get the list of moderatable reviews
+ * @GS_PLUGIN_ACTION_GET_SOURCES: Get the list of sources
+ * @GS_PLUGIN_ACTION_GET_INSTALLED: Get the list of installed applications
+ * @GS_PLUGIN_ACTION_GET_POPULAR: Get the list of popular applications
+ * @GS_PLUGIN_ACTION_GET_FEATURED: Get the list of featured applications
+ * @GS_PLUGIN_ACTION_SEARCH: Get the search results for a query
+ * @GS_PLUGIN_ACTION_SEARCH_FILES: Get the search results for a file query
+ * @GS_PLUGIN_ACTION_SEARCH_PROVIDES: Get the search results for a provide query
+ * @GS_PLUGIN_ACTION_GET_CATEGORIES: Get the list of categories
+ * @GS_PLUGIN_ACTION_GET_CATEGORY_APPS: Get the apps for a specific category
+ * @GS_PLUGIN_ACTION_REFINE: Refine the application
+ * @GS_PLUGIN_ACTION_REFRESH: Refresh all the sources
+ * @GS_PLUGIN_ACTION_FILE_TO_APP: Convert the file to an application
+ * @GS_PLUGIN_ACTION_URL_TO_APP: Convert the URI to an application
+ * @GS_PLUGIN_ACTION_GET_RECENT: Get the apps recently released
+ * @GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL: Get the list of historical updates
+ * @GS_PLUGIN_ACTION_INITIALIZE: Initialize the plugin
+ * @GS_PLUGIN_ACTION_DESTROY: Destroy the plugin
+ * @GS_PLUGIN_ACTION_DOWNLOAD: Download an application
+ * @GS_PLUGIN_ACTION_GET_ALTERNATES: Get the alternates for a specific application
+ * @GS_PLUGIN_ACTION_GET_LANGPACKS: Get appropriate language pack
+ *
+ * The plugin action.
+ **/
+typedef enum {
+ GS_PLUGIN_ACTION_UNKNOWN,
+ GS_PLUGIN_ACTION_SETUP,
+ GS_PLUGIN_ACTION_INSTALL,
+ GS_PLUGIN_ACTION_REMOVE,
+ GS_PLUGIN_ACTION_UPDATE,
+ GS_PLUGIN_ACTION_SET_RATING,
+ GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD,
+ GS_PLUGIN_ACTION_UPGRADE_TRIGGER,
+ GS_PLUGIN_ACTION_LAUNCH,
+ GS_PLUGIN_ACTION_UPDATE_CANCEL,
+ GS_PLUGIN_ACTION_ADD_SHORTCUT,
+ GS_PLUGIN_ACTION_REMOVE_SHORTCUT,
+ GS_PLUGIN_ACTION_REVIEW_SUBMIT,
+ GS_PLUGIN_ACTION_REVIEW_UPVOTE,
+ GS_PLUGIN_ACTION_REVIEW_DOWNVOTE,
+ GS_PLUGIN_ACTION_REVIEW_REPORT,
+ GS_PLUGIN_ACTION_REVIEW_REMOVE,
+ GS_PLUGIN_ACTION_REVIEW_DISMISS,
+ GS_PLUGIN_ACTION_GET_UPDATES,
+ GS_PLUGIN_ACTION_GET_DISTRO_UPDATES,
+ GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS,
+ GS_PLUGIN_ACTION_GET_SOURCES,
+ GS_PLUGIN_ACTION_GET_INSTALLED,
+ GS_PLUGIN_ACTION_GET_POPULAR,
+ GS_PLUGIN_ACTION_GET_FEATURED,
+ GS_PLUGIN_ACTION_SEARCH,
+ GS_PLUGIN_ACTION_SEARCH_FILES,
+ GS_PLUGIN_ACTION_SEARCH_PROVIDES,
+ GS_PLUGIN_ACTION_GET_CATEGORIES,
+ GS_PLUGIN_ACTION_GET_CATEGORY_APPS,
+ GS_PLUGIN_ACTION_REFINE,
+ GS_PLUGIN_ACTION_REFRESH,
+ GS_PLUGIN_ACTION_FILE_TO_APP,
+ GS_PLUGIN_ACTION_URL_TO_APP,
+ GS_PLUGIN_ACTION_GET_RECENT,
+ GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL,
+ GS_PLUGIN_ACTION_INITIALIZE,
+ GS_PLUGIN_ACTION_DESTROY,
+ GS_PLUGIN_ACTION_DOWNLOAD,
+ GS_PLUGIN_ACTION_GET_ALTERNATES,
+ GS_PLUGIN_ACTION_GET_LANGPACKS,
+ /*< private >*/
+ GS_PLUGIN_ACTION_LAST
+} GsPluginAction;
+
+G_END_DECLS
diff --git a/lib/gs-plugin-vfuncs.h b/lib/gs-plugin-vfuncs.h
new file mode 100644
index 0000000..05772f2
--- /dev/null
+++ b/lib/gs-plugin-vfuncs.h
@@ -0,0 +1,942 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+/**
+ * SECTION:gs-plugin-vfuncs
+ * @title: GsPlugin Exports
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: Vfuncs that plugins can implement
+ */
+
+#include <appstream-glib.h>
+#include <glib-object.h>
+#include <gmodule.h>
+#include <gio/gio.h>
+#include <libsoup/soup.h>
+
+#include "gs-app.h"
+#include "gs-app-list.h"
+#include "gs-category.h"
+
+G_BEGIN_DECLS
+
+/**
+ * gs_plugin_initialize:
+ * @plugin: a #GsPlugin
+ *
+ * Checks if the plugin should run, and if initializes it. If the plugin should
+ * not be run then gs_plugin_set_enabled() should be called.
+ * This is also the place to call gs_plugin_alloc_data() if private data is
+ * required for the plugin.
+ *
+ * NOTE: Do not do any failable actions in this function; use gs_plugin_setup()
+ * instead.
+ **/
+void gs_plugin_initialize (GsPlugin *plugin);
+
+/**
+ * gs_plugin_destroy:
+ * @plugin: a #GsPlugin
+ *
+ * Called when the plugin should destroy any private data.
+ **/
+void gs_plugin_destroy (GsPlugin *plugin);
+
+/**
+ * gs_plugin_adopt_app:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ *
+ * Called when an #GsApp has not been claimed (i.e. a management plugin has not
+ * been set).
+ *
+ * A claimed application means other plugins will not try to perform actions
+ * such as install, remove or update. Most applications are claimed when they
+ * are created.
+ *
+ * If a plugin can adopt this application then it should call
+ * gs_app_set_management_plugin() on @app.
+ **/
+void gs_plugin_adopt_app (GsPlugin *plugin,
+ GsApp *app);
+
+/**
+ * gs_plugin_add_search:
+ * @plugin: a #GsPlugin
+ * @values: a NULL terminated list of search terms, e.g. [ "gnome", "software" ]
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get search results for a specific query.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_search_files:
+ * @plugin: a #GsPlugin
+ * @values: a list of filenames, e.g. [ "/usr/share/help/gimp/index.html" ]
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Called when searching for an application that provides a specific filename
+ * on the filesystem.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_search_files (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_search_what_provides
+ * @plugin: a list of tags, e.g. [ "text/rtf" ]
+ * @values: a #GStrv
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Called when searching for an application that provides specific defined tags,
+ * for instance a codec string or mime-type.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_search_what_provides (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_alternates
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Called when trying to find alternates to a specific app, for instance
+ * finding a flatpak version of an existing distro packaged application.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_alternates (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_setup:
+ * @plugin: a #GsPlugin
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Called when the plugin should set up the initial state, and with the write
+ * lock held.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * This function will also not be called if gs_plugin_initialize() self-disabled.
+ *
+ * Returns: %TRUE for success
+ **/
+gboolean gs_plugin_setup (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_installed:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get the list of installed applications.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_installed (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_updates:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get the list of updates.
+ *
+ * NOTE: Actually downloading the updates can be done in gs_plugin_download_app()
+ * or in gs_plugin_download().
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_distro_upgrades:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get the list of distribution upgrades. Due to the download size, these
+ * should not be downloaded until the user has explicitly opted-in.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add() of type
+ * %AS_APP_KIND_OS_UPGRADE.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_distro_upgrades (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_sources:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get the list of sources, for example the repos listed in /etc/yum.repos.d
+ * or the remotes configured in flatpak.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add() of type
+ * %AS_APP_KIND_SOURCE.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_sources (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_updates_historical
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get the list of historical updates, i.e. the updates that have just been
+ * installed.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_updates_historical (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_categories:
+ * @plugin: a #GsPlugin
+ * @list: (element-type GsCategory): a #GPtrArray
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get the category tree, for instance Games->Action or Internet->Email.
+ *
+ * Plugins are expected to add new categories using g_ptr_array_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_categories (GsPlugin *plugin,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_category_apps:
+ * @plugin: a #GsPlugin
+ * @category: a #GsCategory
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get all the applications that match a specific category.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_category_apps (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_recent:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @age: a number of seconds
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Return all the applications that have had upstream releases recently.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_recent (GsPlugin *plugin,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_popular:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get popular applications that should be featured on the main page as
+ * "Editors Picks".
+ * This is expected to be a curated list of applications that are high quality
+ * and feature-complete.
+ *
+ * The returned list of popular applications are not sorted, but each #GsApp has
+ * to be valid, for instance having a known state and a valid icon.
+ * If an insufficient number of applications are added by plugins then the
+ * section on the overview shell may be hidden.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_popular (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_featured:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Get applications that should be featured as a large full-width banner on the
+ * overview page.
+ * This is expected to be a curated list of applications that are high quality
+ * and feature-complete.
+ *
+ * The returned list of popular applications are randomized in a way so that
+ * the same application is featured for the entire calendar day.
+ *
+ * NOTE: The UI code may expect that applications have additional metadata set on
+ * results, for instance <code>GnomeSoftware::FeatureTile-css</code>.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_featured (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_unvoted_reviews:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Gets the list of unvoted reviews. Only applications should be returned where
+ * there are reviews, and where the user has not previously moderated them.
+ * This function is supposed to be used to display a moderation panel for
+ * reviewers.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_unvoted_reviews (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_refine:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @flags: a #GsPluginRefineFlags, e.g. %GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Adds required information to a list of #GsApp's. It allows requests to be
+ * batched up, which allows better performance than individual calls per app.
+ *
+ * An example for when this is useful would be in the PackageKit plugin where
+ * we want to do one transaction of GetDetails with multiple source-ids rather
+ * than scheduling a large number of pending requests.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_refine_wildcard:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @list: a #GsAppList
+ * @flags: a #GsPluginRefineFlags, e.g. %GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Adds applications that match the wildcard specified in @app.
+ *
+ * The general idea is that plugins create and add *new* applications rather
+ * than all trying to fight over the wildcard application.
+ * This allows the plugin loader to filter using the #GsApp priority value.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_refine_wildcard (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_launch:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Launch the specified application using a plugin-specific method.
+ * This is normally setting some environment or launching a specific binary.
+ *
+ * Plugins can simply use gs_plugin_app_launch() if no plugin-specific
+ * functionality is required.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_launch (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_shortcut:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Adds a shortcut for the application in a desktop-defined location.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_shortcut (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_remove_shortcut:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Removes a shortcut for the application in a desktop-defined location.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_remove_shortcut (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_update_cancel:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Cancels the offline update of @app.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_update_cancel (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_app_install:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Install the application.
+ *
+ * Plugins are expected to send progress notifications to the UI using
+ * gs_app_set_progress() using the passed in @app.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * On failure the error message returned will usually only be shown on the
+ * console, but they can also be retrieved using gs_plugin_loader_get_events().
+ *
+ * NOTE: Once the action is complete, the plugin must set the new state of @app
+ * to %AS_APP_STATE_INSTALLED.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_app_remove:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Remove the application.
+ *
+ * Plugins are expected to send progress notifications to the UI using
+ * gs_app_set_progress() using the passed in @app.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * On failure the error message returned will usually only be shown on the
+ * console, but they can also be retrieved using gs_plugin_loader_get_events().
+ *
+ * NOTE: Once the action is complete, the plugin must set the new state of @app
+ * to %AS_APP_STATE_AVAILABLE or %AS_APP_STATE_UNKNOWN if not known.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_app_remove (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_app_set_rating:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Gets any ratings for the applications.
+ *
+ * Plugins are expected to call gs_app_set_rating() on @app.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_app_set_rating (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_update_app:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Update the application live.
+ *
+ * Plugins are expected to send progress notifications to the UI using
+ * gs_app_set_progress() using the passed in @app.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * On failure the error message returned will usually only be shown on the
+ * console, but they can also be retrieved using gs_plugin_loader_get_events().
+ *
+ * NOTE: Once the action is complete, the plugin must set the new state of @app
+ * to %AS_APP_STATE_INSTALLED or %AS_APP_STATE_UNKNOWN if not known.
+ *
+ * If %GS_APP_QUIRK_IS_PROXY is set on the application then the actual #GsApp
+ * set in @app will be the related application of the parent. Plugins do not
+ * need to manually iterate on the related list of applications.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_update_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_download_app:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Downloads the application and any dependencies ready to be installed or
+ * updated.
+ *
+ * Plugins are expected to schedule downloads using the system download
+ * scheduler if appropriate (if the download is not guaranteed to be under a few
+ * hundred kilobytes, for example), so that the user’s metered data preferences
+ * are honoured.
+ *
+ * Plugins are expected to send progress notifications to the UI using
+ * gs_app_set_progress() using the passed in @app.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * If the @app is already downloaded, do not return an error and return %TRUE.
+ *
+ * On failure the error message returned will usually only be shown on the
+ * console, but they can also be retrieved using gs_plugin_loader_get_events().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_download_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_download:
+ * @plugin: a #GsPlugin
+ * @apps: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Downloads a list of applications ready to be installed or updated.
+ *
+ * Plugins are expected to schedule downloads using the system download
+ * scheduler if appropriate (if the download is not guaranteed to be under a few
+ * hundred kilobytes, for example), so that the user’s metered data preferences
+ * are honoured.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_download (GsPlugin *plugin,
+ GsAppList *apps,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_app_upgrade_download:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp, with kind %AS_APP_KIND_OS_UPGRADE
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Starts downloading a distribution upgrade in the background.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_app_upgrade_download (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_app_upgrade_trigger:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp, with kind %AS_APP_KIND_OS_UPGRADE
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Triggers the distribution upgrade to be installed on next boot.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_app_upgrade_trigger (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_review_submit:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @review: a #AsReview
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Submits a new end-user application review.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_review_submit (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_review_upvote:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @review: a #AsReview
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Upvote a specific review to indicate the review is helpful.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_review_upvote (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_review_downvote:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @review: a #AsReview
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Downvote a specific review to indicate the review is unhelpful.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_review_downvote (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_review_report:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @review: a #AsReview
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Report a review that is not suitable in some way.
+ * It is expected that this action flags a review to be checked by a moderator
+ * and that the review won't be shown to any users until this happens.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_review_report (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_review_remove:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @review: a #AsReview
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Remove a review that the user wrote.
+ * NOTE: Users should only be able to remove reviews with %AS_REVIEW_FLAG_SELF.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_review_remove (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_review_dismiss:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @review: a #AsReview
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Dismisses a review, i.e. hide it from future moderated views.
+ * This action is useful when the moderator is unable to speak the language of
+ * the review for example.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_review_dismiss (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_refresh:
+ * @plugin: a #GsPlugin
+ * @cache_age: the acceptable cache age in seconds, or MAXUINT for "any"
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Refreshes the state of all the plugins. Plugins should make sure
+ * there's enough metadata to start the application, for example lists of
+ * available applications.
+ *
+ * All functions can block, but should sent progress notifications, e.g. using
+ * gs_app_set_progress() if they will take more than tens of milliseconds
+ * to complete.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_file_to_app:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @file: a #GFile
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Converts a local file to a #GsApp. It's expected that only one plugin will
+ * match the mimetype of @file and that a single #GsApp will be in the returned
+ * list. If no plugins can handle the file, the list will be empty.
+ *
+ * For example, the PackageKit plugin can turn a .rpm file into a application
+ * of kind %AS_APP_KIND_UNKNOWN but that in some cases it will be further refined
+ * into a %AS_APP_KIND_DESKTOP (with all the extra metadata) by the appstream
+ * plugin.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_file_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_url_to_app:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @url: a #URL, e.g. "apt://gimp"
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Converts a URL to a #GsApp. It's expected that only one plugin will
+ * match the scheme of @url and that a single #GsApp will be in the returned
+ * list. If no plugins can handle the file, the list will be empty.
+ *
+ * For example, the apt plugin can turn apt://gimp into a application.
+ *
+ * Plugins are expected to add new apps using gs_app_list_add().
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_url_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_update:
+ * @plugin: a #GsPlugin
+ * @apps: a #GsAppList
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Updates a list of applications, typically scheduling them for offline update.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_update (GsPlugin *plugin,
+ GsAppList *apps,
+ GCancellable *cancellable,
+ GError **error);
+
+/**
+ * gs_plugin_add_langpacks:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList
+ * @locale: a #LANGUAGE_CODE or #LOCALE, e.g. "ja" or "ja_JP"
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Returns a list of language packs, as per input language code or locale.
+ *
+ * Returns: %TRUE for success or if not relevant
+ **/
+gboolean gs_plugin_add_langpacks (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *locale,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
diff --git a/lib/gs-plugin.c b/lib/gs-plugin.c
new file mode 100644
index 0000000..c517de0
--- /dev/null
+++ b/lib/gs-plugin.c
@@ -0,0 +1,2069 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-plugin
+ * @title: GsPlugin Helpers
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: Runtime-loaded modules providing functionality
+ *
+ * Plugins are modules that are loaded at runtime to provide information
+ * about requests and to service user actions like installing, removing
+ * and updating.
+ * This allows different distributions to pick and choose how the
+ * application installer gathers data.
+ *
+ * Plugins also have a priority system where the largest number gets
+ * run first. That means if one plugin requires some property or
+ * metadata set by another plugin then it **must** depend on the other
+ * plugin to be run in the correct order.
+ *
+ * As a general rule, try to make plugins as small and self-contained
+ * as possible and remember to cache as much data as possible for speed.
+ * Memory is cheap, time less so.
+ */
+
+#include "config.h"
+
+#include <gio/gdesktopappinfo.h>
+#include <gdk/gdk.h>
+#include <string.h>
+
+#ifdef USE_VALGRIND
+#include <valgrind.h>
+#endif
+
+#include "gs-app-list-private.h"
+#include "gs-os-release.h"
+#include "gs-plugin-private.h"
+#include "gs-plugin.h"
+#include "gs-utils.h"
+
+typedef struct
+{
+ GHashTable *cache;
+ GMutex cache_mutex;
+ GModule *module;
+ GsPluginData *data; /* for gs-plugin-{name}.c */
+ GsPluginFlags flags;
+ SoupSession *soup_session;
+ GPtrArray *rules[GS_PLUGIN_RULE_LAST];
+ GHashTable *vfuncs; /* string:pointer */
+ GMutex vfuncs_mutex;
+ gboolean enabled;
+ guint interactive_cnt;
+ GMutex interactive_mutex;
+ gchar *locale; /* allow-none */
+ gchar *language; /* allow-none */
+ gchar *name;
+ gchar *appstream_id;
+ guint scale;
+ guint order;
+ guint priority;
+ guint timer_id;
+ GMutex timer_mutex;
+ GNetworkMonitor *network_monitor;
+} GsPluginPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsPlugin, gs_plugin, G_TYPE_OBJECT)
+
+G_DEFINE_QUARK (gs-plugin-error-quark, gs_plugin_error)
+
+enum {
+ PROP_0,
+ PROP_FLAGS,
+ PROP_LAST
+};
+
+enum {
+ SIGNAL_UPDATES_CHANGED,
+ SIGNAL_STATUS_CHANGED,
+ SIGNAL_RELOAD,
+ SIGNAL_REPORT_EVENT,
+ SIGNAL_ALLOW_UPDATES,
+ SIGNAL_BASIC_AUTH_START,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+typedef const gchar **(*GsPluginGetDepsFunc) (GsPlugin *plugin);
+
+/**
+ * gs_plugin_status_to_string:
+ * @status: a #GsPluginStatus, e.g. %GS_PLUGIN_STATUS_DOWNLOADING
+ *
+ * Converts the #GsPluginStatus enum to a string.
+ *
+ * Returns: the string representation, or "unknown"
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_plugin_status_to_string (GsPluginStatus status)
+{
+ if (status == GS_PLUGIN_STATUS_WAITING)
+ return "waiting";
+ if (status == GS_PLUGIN_STATUS_FINISHED)
+ return "finished";
+ if (status == GS_PLUGIN_STATUS_SETUP)
+ return "setup";
+ if (status == GS_PLUGIN_STATUS_DOWNLOADING)
+ return "downloading";
+ if (status == GS_PLUGIN_STATUS_QUERYING)
+ return "querying";
+ if (status == GS_PLUGIN_STATUS_INSTALLING)
+ return "installing";
+ if (status == GS_PLUGIN_STATUS_REMOVING)
+ return "removing";
+ return "unknown";
+}
+
+/**
+ * gs_plugin_set_name:
+ * @plugin: a #GsPlugin
+ * @name: a plugin name
+ *
+ * Sets the name of the plugin.
+ *
+ * Plugins are not required to set the plugin name as it is automatically set
+ * from the `.so` filename.
+ *
+ * Since: 3.26
+ **/
+void
+gs_plugin_set_name (GsPlugin *plugin, const gchar *name)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ if (priv->name != NULL)
+ g_free (priv->name);
+ priv->name = g_strdup (name);
+}
+
+/**
+ * gs_plugin_create:
+ * @filename: an absolute filename
+ * @error: a #GError, or %NULL
+ *
+ * Creates a new plugin from an external module.
+ *
+ * Returns: the #GsPlugin or %NULL
+ *
+ * Since: 3.22
+ **/
+GsPlugin *
+gs_plugin_create (const gchar *filename, GError **error)
+{
+ GsPlugin *plugin = NULL;
+ GsPluginPrivate *priv;
+ g_autofree gchar *basename = NULL;
+
+ /* get the plugin name from the basename */
+ basename = g_path_get_basename (filename);
+ if (!g_str_has_prefix (basename, "libgs_plugin_")) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "plugin filename has wrong prefix: %s",
+ filename);
+ return NULL;
+ }
+ g_strdelimit (basename, ".", '\0');
+
+ /* create new plugin */
+ plugin = gs_plugin_new ();
+ priv = gs_plugin_get_instance_private (plugin);
+ priv->module = g_module_open (filename, 0);
+ if (priv->module == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "failed to open plugin %s: %s",
+ filename, g_module_error ());
+ return NULL;
+ }
+ gs_plugin_set_name (plugin, basename + 13);
+ return plugin;
+}
+
+static void
+gs_plugin_finalize (GObject *object)
+{
+ GsPlugin *plugin = GS_PLUGIN (object);
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ guint i;
+
+ for (i = 0; i < GS_PLUGIN_RULE_LAST; i++)
+ g_ptr_array_unref (priv->rules[i]);
+
+ if (priv->timer_id > 0)
+ g_source_remove (priv->timer_id);
+ g_free (priv->name);
+ g_free (priv->appstream_id);
+ g_free (priv->data);
+ g_free (priv->locale);
+ g_free (priv->language);
+ if (priv->soup_session != NULL)
+ g_object_unref (priv->soup_session);
+ if (priv->network_monitor != NULL)
+ g_object_unref (priv->network_monitor);
+ g_hash_table_unref (priv->cache);
+ g_hash_table_unref (priv->vfuncs);
+ g_mutex_clear (&priv->cache_mutex);
+ g_mutex_clear (&priv->interactive_mutex);
+ g_mutex_clear (&priv->timer_mutex);
+ g_mutex_clear (&priv->vfuncs_mutex);
+#ifndef RUNNING_ON_VALGRIND
+ if (priv->module != NULL)
+ g_module_close (priv->module);
+#endif
+
+ G_OBJECT_CLASS (gs_plugin_parent_class)->finalize (object);
+}
+
+/**
+ * gs_plugin_get_data:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the private data for the plugin if gs_plugin_alloc_data() has
+ * been called.
+ *
+ * Returns: the #GsPluginData, or %NULL
+ *
+ * Since: 3.22
+ **/
+GsPluginData *
+gs_plugin_get_data (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_assert (priv->data != NULL);
+ return priv->data;
+}
+
+/**
+ * gs_plugin_alloc_data:
+ * @plugin: a #GsPlugin
+ * @sz: the size of data to allocate, e.g. `sizeof(FooPluginPrivate)`
+ *
+ * Allocates a private data area for the plugin which can be retrieved
+ * using gs_plugin_get_data().
+ * This is normally called in gs_plugin_initialize() and the data should
+ * not be manually freed.
+ *
+ * Returns: the #GsPluginData, cleared to NUL bytes
+ *
+ * Since: 3.22
+ **/
+GsPluginData *
+gs_plugin_alloc_data (GsPlugin *plugin, gsize sz)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_assert (priv->data == NULL);
+ priv->data = g_malloc0 (sz);
+ return priv->data;
+}
+
+/**
+ * gs_plugin_clear_data:
+ * @plugin: a #GsPlugin
+ *
+ * Clears and resets the private data. Only run this from the self tests.
+ **/
+void
+gs_plugin_clear_data (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ if (priv->data == NULL)
+ return;
+ g_clear_pointer (&priv->data, g_free);
+}
+
+/**
+ * gs_plugin_get_symbol: (skip)
+ * @plugin: a #GsPlugin
+ * @function_name: a symbol name
+ *
+ * Gets the symbol from the module that backs the plugin. If the plugin is not
+ * enabled then no symbol is returned.
+ *
+ * Returns: the pointer to the symbol, or %NULL
+ *
+ * Since: 3.22
+ **/
+gpointer
+gs_plugin_get_symbol (GsPlugin *plugin, const gchar *function_name)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ gpointer func = NULL;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->vfuncs_mutex);
+
+ g_return_val_if_fail (function_name != NULL, NULL);
+
+ /* disabled plugins shouldn't be checked */
+ if (!priv->enabled)
+ return NULL;
+
+ /* look up the symbol from the cache */
+ if (g_hash_table_lookup_extended (priv->vfuncs, function_name, NULL, &func))
+ return func;
+
+ /* look up the symbol using the elf headers */
+ g_module_symbol (priv->module, function_name, &func);
+ g_hash_table_insert (priv->vfuncs, g_strdup (function_name), func);
+
+ return func;
+}
+
+/**
+ * gs_plugin_get_enabled:
+ * @plugin: a #GsPlugin
+ *
+ * Gets if the plugin is enabled.
+ *
+ * Returns: %TRUE if enabled
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_plugin_get_enabled (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->enabled;
+}
+
+/**
+ * gs_plugin_set_enabled:
+ * @plugin: a #GsPlugin
+ * @enabled: the enabled state
+ *
+ * Enables or disables a plugin.
+ * This is normally only called from gs_plugin_initialize().
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_enabled (GsPlugin *plugin, gboolean enabled)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ priv->enabled = enabled;
+}
+
+void
+gs_plugin_interactive_inc (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->interactive_mutex);
+ priv->interactive_cnt++;
+ gs_plugin_add_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
+}
+
+void
+gs_plugin_interactive_dec (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->interactive_mutex);
+ if (priv->interactive_cnt > 0)
+ priv->interactive_cnt--;
+ if (priv->interactive_cnt == 0)
+ gs_plugin_remove_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
+}
+
+/**
+ * gs_plugin_get_name:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the plugin name.
+ *
+ * Returns: a string, e.g. "fwupd"
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_plugin_get_name (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->name;
+}
+
+/**
+ * gs_plugin_get_appstream_id:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the plugin AppStream ID.
+ *
+ * Returns: a string, e.g. `org.gnome.Software.Plugin.Epiphany`
+ *
+ * Since: 3.24
+ **/
+const gchar *
+gs_plugin_get_appstream_id (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->appstream_id;
+}
+
+/**
+ * gs_plugin_set_appstream_id:
+ * @plugin: a #GsPlugin
+ * @appstream_id: an appstream ID, e.g. `org.gnome.Software.Plugin.Epiphany`
+ *
+ * Sets the plugin AppStream ID.
+ *
+ * Since: 3.24
+ **/
+void
+gs_plugin_set_appstream_id (GsPlugin *plugin, const gchar *appstream_id)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_free (priv->appstream_id);
+ priv->appstream_id = g_strdup (appstream_id);
+}
+
+/**
+ * gs_plugin_get_scale:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the window scale factor.
+ *
+ * Returns: the factor, usually 1 for standard screens or 2 for HiDPI
+ *
+ * Since: 3.22
+ **/
+guint
+gs_plugin_get_scale (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->scale;
+}
+
+/**
+ * gs_plugin_set_scale:
+ * @plugin: a #GsPlugin
+ * @scale: the window scale factor, usually 1 for standard screens or 2 for HiDPI
+ *
+ * Sets the window scale factor.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_scale (GsPlugin *plugin, guint scale)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ priv->scale = scale;
+}
+
+/**
+ * gs_plugin_get_order:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the plugin order, where higher numbers are run after lower
+ * numbers.
+ *
+ * Returns: the integer value
+ *
+ * Since: 3.22
+ **/
+guint
+gs_plugin_get_order (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->order;
+}
+
+/**
+ * gs_plugin_set_order:
+ * @plugin: a #GsPlugin
+ * @order: a integer value
+ *
+ * Sets the plugin order, where higher numbers are run after lower
+ * numbers.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_order (GsPlugin *plugin, guint order)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ priv->order = order;
+}
+
+/**
+ * gs_plugin_get_priority:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the plugin priority, where higher values will be chosen where
+ * multiple #GsApp's match a specific rule.
+ *
+ * Returns: the integer value
+ *
+ * Since: 3.22
+ **/
+guint
+gs_plugin_get_priority (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->priority;
+}
+
+/**
+ * gs_plugin_set_priority:
+ * @plugin: a #GsPlugin
+ * @priority: a integer value
+ *
+ * Sets the plugin priority, where higher values will be chosen where
+ * multiple #GsApp's match a specific rule.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_priority (GsPlugin *plugin, guint priority)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ priv->priority = priority;
+}
+
+/**
+ * gs_plugin_get_locale:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the user locale. This is in the form documented in `man 3 setlocale`:
+ * ```
+ * language[_territory][.codeset][@modifier]
+ * ```
+ * where `language` is an
+ * [ISO 639 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes),
+ * `territory` is an
+ * [ISO 3166 country code](https://en.wikipedia.org/wiki/ISO_3166-1), and
+ * `codeset` is a character set or encoding identifier like `ISO-8859-1` or
+ * `UTF-8`. For a list of all supported locales, run `locale -a`.
+ *
+ * Returns: the locale string, e.g. `en_GB` or `uz_UZ.utf8@cyrillic`
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_plugin_get_locale (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->locale;
+}
+
+/**
+ * gs_plugin_get_language:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the user language from the locale. This is the first component of the
+ * locale.
+ *
+ * Typically you should use the full locale rather than the language, as the
+ * same language can be used quite differently in different territories.
+ *
+ * Returns: the language string, e.g. `fr`
+ *
+ * Since: 3.22
+ **/
+const gchar *
+gs_plugin_get_language (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->language;
+}
+
+/**
+ * gs_plugin_set_locale:
+ * @plugin: a #GsPlugin
+ * @locale: a locale string, e.g. "en_GB"
+ *
+ * Sets the plugin locale.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_locale (GsPlugin *plugin, const gchar *locale)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_free (priv->locale);
+ priv->locale = g_strdup (locale);
+}
+
+/**
+ * gs_plugin_set_language:
+ * @plugin: a #GsPlugin
+ * @language: a language string, e.g. "fr"
+ *
+ * Sets the plugin language.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_language (GsPlugin *plugin, const gchar *language)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_free (priv->language);
+ priv->language = g_strdup (language);
+}
+
+/**
+ * gs_plugin_get_soup_session:
+ * @plugin: a #GsPlugin
+ *
+ * Gets the soup session that this plugin can use when downloading.
+ *
+ * Returns: the #SoupSession
+ *
+ * Since: 3.22
+ **/
+SoupSession *
+gs_plugin_get_soup_session (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->soup_session;
+}
+
+/**
+ * gs_plugin_set_soup_session:
+ * @plugin: a #GsPlugin
+ * @soup_session: a #SoupSession
+ *
+ * Sets the soup session that this plugin will use when downloading.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_set_soup_session (GsPlugin *plugin, SoupSession *soup_session)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_set_object (&priv->soup_session, soup_session);
+}
+
+/**
+ * gs_plugin_set_network_monitor:
+ * @plugin: a #GsPlugin
+ * @monitor: a #GNetworkMonitor
+ *
+ * Sets the network monitor so that plugins can check the state of the network.
+ *
+ * Since: 3.28
+ **/
+void
+gs_plugin_set_network_monitor (GsPlugin *plugin, GNetworkMonitor *monitor)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_set_object (&priv->network_monitor, monitor);
+}
+
+/**
+ * gs_plugin_get_network_available:
+ * @plugin: a #GsPlugin
+ *
+ * Gets whether a network connectivity is available.
+ *
+ * Returns: %TRUE if a network is available.
+ *
+ * Since: 3.28
+ **/
+gboolean
+gs_plugin_get_network_available (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ if (priv->network_monitor == NULL) {
+ g_debug ("no network monitor, so returning network-available=TRUE");
+ return TRUE;
+ }
+ return g_network_monitor_get_network_available (priv->network_monitor);
+}
+
+/**
+ * gs_plugin_has_flags:
+ * @plugin: a #GsPlugin
+ * @flags: a #GsPluginFlags, e.g. %GS_PLUGIN_FLAGS_RUNNING_SELF
+ *
+ * Finds out if a plugin has a specific flag set.
+ *
+ * Returns: TRUE if the flag is set
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_plugin_has_flags (GsPlugin *plugin, GsPluginFlags flags)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return (priv->flags & flags) > 0;
+}
+
+/**
+ * gs_plugin_add_flags:
+ * @plugin: a #GsPlugin
+ * @flags: a #GsPluginFlags, e.g. %GS_PLUGIN_FLAGS_RUNNING_SELF
+ *
+ * Adds specific flags to the plugin.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_add_flags (GsPlugin *plugin, GsPluginFlags flags)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ priv->flags |= flags;
+}
+
+/**
+ * gs_plugin_remove_flags:
+ * @plugin: a #GsPlugin
+ * @flags: a #GsPluginFlags, e.g. %GS_PLUGIN_FLAGS_RUNNING_SELF
+ *
+ * Removes specific flags from the plugin.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_remove_flags (GsPlugin *plugin, GsPluginFlags flags)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ priv->flags &= ~flags;
+}
+
+/**
+ * gs_plugin_add_rule:
+ * @plugin: a #GsPlugin
+ * @rule: a #GsPluginRule, e.g. %GS_PLUGIN_RULE_CONFLICTS
+ * @name: a plugin name, e.g. "appstream"
+ *
+ * If the plugin name is found, the rule will be used to sort the plugin list,
+ * for example the plugin specified by @name will be ordered after this plugin
+ * when %GS_PLUGIN_RULE_RUN_AFTER is used.
+ *
+ * NOTE: The depsolver is iterative and may not solve overly-complicated rules;
+ * If depsolving fails then gnome-software will not start.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_add_rule (GsPlugin *plugin, GsPluginRule rule, const gchar *name)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_ptr_array_add (priv->rules[rule], g_strdup (name));
+}
+
+/**
+ * gs_plugin_get_rules:
+ * @plugin: a #GsPlugin
+ * @rule: a #GsPluginRule, e.g. %GS_PLUGIN_RULE_CONFLICTS
+ *
+ * Gets the plugin IDs that should be run after this plugin.
+ *
+ * Returns: (element-type utf8) (transfer none): the list of plugin names, e.g. ['appstream']
+ *
+ * Since: 3.22
+ **/
+GPtrArray *
+gs_plugin_get_rules (GsPlugin *plugin, GsPluginRule rule)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ return priv->rules[rule];
+}
+
+/**
+ * gs_plugin_check_distro_id:
+ * @plugin: a #GsPlugin
+ * @distro_id: a distro ID, e.g. "fedora"
+ *
+ * Checks if the distro is compatible.
+ *
+ * Returns: %TRUE if compatible
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_plugin_check_distro_id (GsPlugin *plugin, const gchar *distro_id)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+ const gchar *id = NULL;
+
+ /* load /etc/os-release */
+ os_release = gs_os_release_new (&error);
+ if (os_release == NULL) {
+ g_debug ("could not parse os-release: %s", error->message);
+ return FALSE;
+ }
+
+ /* check that we are running on Fedora */
+ id = gs_os_release_get_id (os_release);
+ if (id == NULL) {
+ g_debug ("could not get distro ID");
+ return FALSE;
+ }
+ if (g_strcmp0 (id, distro_id) != 0)
+ return FALSE;
+ return TRUE;
+}
+
+typedef struct {
+ GsPlugin *plugin;
+ GsApp *app;
+ GsPluginStatus status;
+ guint percentage;
+} GsPluginStatusHelper;
+
+static gboolean
+gs_plugin_status_update_cb (gpointer user_data)
+{
+ GsPluginStatusHelper *helper = (GsPluginStatusHelper *) user_data;
+ g_signal_emit (helper->plugin,
+ signals[SIGNAL_STATUS_CHANGED], 0,
+ helper->app,
+ helper->status);
+ if (helper->app != NULL)
+ g_object_unref (helper->app);
+ g_slice_free (GsPluginStatusHelper, helper);
+ return FALSE;
+}
+
+/**
+ * gs_plugin_status_update:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp, or %NULL
+ * @status: a #GsPluginStatus, e.g. %GS_PLUGIN_STATUS_DOWNLOADING
+ *
+ * Update the state of the plugin so any UI can be updated.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_status_update (GsPlugin *plugin, GsApp *app, GsPluginStatus status)
+{
+ GsPluginStatusHelper *helper;
+ g_autoptr(GSource) idle_source = NULL;
+
+ helper = g_slice_new0 (GsPluginStatusHelper);
+ helper->plugin = plugin;
+ helper->status = status;
+ if (app != NULL)
+ helper->app = g_object_ref (app);
+ idle_source = g_idle_source_new ();
+ g_source_set_callback (idle_source, gs_plugin_status_update_cb, helper, NULL);
+ g_source_attach (idle_source, NULL);
+}
+
+typedef struct {
+ GsPlugin *plugin;
+ gchar *remote;
+ gchar *realm;
+ GCallback callback;
+ gpointer user_data;
+} GsPluginBasicAuthHelper;
+
+static gboolean
+gs_plugin_basic_auth_start_cb (gpointer user_data)
+{
+ GsPluginBasicAuthHelper *helper = user_data;
+ g_signal_emit (helper->plugin,
+ signals[SIGNAL_BASIC_AUTH_START], 0,
+ helper->remote,
+ helper->realm,
+ helper->callback,
+ helper->user_data);
+ g_free (helper->remote);
+ g_free (helper->realm);
+ g_slice_free (GsPluginBasicAuthHelper, helper);
+ return FALSE;
+}
+
+/**
+ * gs_plugin_basic_auth_start:
+ * @plugin: a #GsPlugin
+ * @remote: a string
+ * @realm: a string
+ * @callback: callback to invoke to submit the user/password
+ * @user_data: callback data to pass to the callback
+ *
+ * Emit the basic-auth-start signal in the main thread.
+ *
+ * Since: 3.38
+ **/
+void
+gs_plugin_basic_auth_start (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data)
+{
+ GsPluginBasicAuthHelper *helper;
+ g_autoptr(GSource) idle_source = NULL;
+
+ helper = g_slice_new0 (GsPluginBasicAuthHelper);
+ helper->plugin = plugin;
+ helper->remote = g_strdup (remote);
+ helper->realm = g_strdup (realm);
+ helper->callback = callback;
+ helper->user_data = user_data;
+
+ idle_source = g_idle_source_new ();
+ g_source_set_callback (idle_source, gs_plugin_basic_auth_start_cb, helper, NULL);
+ g_source_attach (idle_source, NULL);
+}
+
+static gboolean
+gs_plugin_app_launch_cb (gpointer user_data)
+{
+ GAppInfo *appinfo = (GAppInfo *) user_data;
+ GdkDisplay *display;
+ g_autoptr(GAppLaunchContext) context = NULL;
+ g_autoptr(GError) error = NULL;
+
+ display = gdk_display_get_default ();
+ context = G_APP_LAUNCH_CONTEXT (gdk_display_get_app_launch_context (display));
+ if (!g_app_info_launch (appinfo, NULL, context, &error))
+ g_warning ("Failed to launch: %s", error->message);
+
+ return FALSE;
+}
+
+/**
+ * gs_plugin_app_launch:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp
+ * @error: a #GError, or %NULL
+ *
+ * Launches the application using #GAppInfo.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_plugin_app_launch (GsPlugin *plugin, GsApp *app, GError **error)
+{
+ const gchar *desktop_id;
+ g_autoptr(GAppInfo) appinfo = NULL;
+
+ desktop_id = gs_app_get_launchable (app, AS_LAUNCHABLE_KIND_DESKTOP_ID);
+ if (desktop_id == NULL)
+ desktop_id = gs_app_get_id (app);
+ if (desktop_id == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no such desktop file: %s",
+ desktop_id);
+ return FALSE;
+ }
+ appinfo = G_APP_INFO (gs_utils_get_desktop_app_info (desktop_id));
+ if (appinfo == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no such desktop file: %s",
+ desktop_id);
+ return FALSE;
+ }
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ gs_plugin_app_launch_cb,
+ g_object_ref (appinfo),
+ (GDestroyNotify) g_object_unref);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_updates_changed_cb (gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ g_signal_emit (plugin, signals[SIGNAL_UPDATES_CHANGED], 0);
+ return FALSE;
+}
+
+/**
+ * gs_plugin_updates_changed:
+ * @plugin: a #GsPlugin
+ *
+ * Emit a signal that tells the plugin loader that the list of updates
+ * may have changed.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_updates_changed (GsPlugin *plugin)
+{
+ g_idle_add (gs_plugin_updates_changed_cb, plugin);
+}
+
+static gboolean
+gs_plugin_reload_cb (gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ g_signal_emit (plugin, signals[SIGNAL_RELOAD], 0);
+ return FALSE;
+}
+
+/**
+ * gs_plugin_reload:
+ * @plugin: a #GsPlugin
+ *
+ * Plugins that call this function should expect that all panels will
+ * reload after a small delay, causing mush flashing, wailing and
+ * gnashing of teeth.
+ *
+ * Plugins should not call this unless absolutely required.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_reload (GsPlugin *plugin)
+{
+ g_debug ("emitting ::reload in idle");
+ g_idle_add (gs_plugin_reload_cb, plugin);
+}
+
+typedef struct {
+ GsPlugin *plugin;
+ GsApp *app;
+ GCancellable *cancellable;
+} GsPluginDownloadHelper;
+
+static void
+gs_plugin_download_chunk_cb (SoupMessage *msg, SoupBuffer *chunk,
+ GsPluginDownloadHelper *helper)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (helper->plugin);
+ guint percentage;
+ goffset header_size;
+ goffset body_length;
+
+ /* cancelled? */
+ if (g_cancellable_is_cancelled (helper->cancellable)) {
+ g_debug ("cancelling download of %s",
+ gs_app_get_id (helper->app));
+ soup_session_cancel_message (priv->soup_session,
+ msg,
+ SOUP_STATUS_CANCELLED);
+ return;
+ }
+
+ /* if it's returning "Found" or an error, ignore the percentage */
+ if (msg->status_code != SOUP_STATUS_OK) {
+ g_debug ("ignoring status code %u (%s)",
+ msg->status_code, msg->reason_phrase);
+ return;
+ }
+
+ /* get data */
+ body_length = msg->response_body->length;
+ header_size = soup_message_headers_get_content_length (msg->response_headers);
+
+ /* size is not known */
+ if (header_size < body_length)
+ return;
+
+ /* calculate percentage */
+ percentage = (guint) ((100 * body_length) / header_size);
+ g_debug ("%s progress: %u%%", gs_app_get_id (helper->app), percentage);
+ gs_app_set_progress (helper->app, percentage);
+ gs_plugin_status_update (helper->plugin,
+ helper->app,
+ GS_PLUGIN_STATUS_DOWNLOADING);
+}
+
+/**
+ * gs_plugin_download_data:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp, or %NULL
+ * @uri: a remote URI
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Downloads data.
+ *
+ * Returns: the downloaded data, or %NULL
+ *
+ * Since: 3.22
+ **/
+GBytes *
+gs_plugin_download_data (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *uri,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ GsPluginDownloadHelper helper;
+ guint status_code;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ g_return_val_if_fail (GS_IS_PLUGIN (plugin), NULL);
+ g_return_val_if_fail (uri != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* local */
+ if (g_str_has_prefix (uri, "file://")) {
+ gsize length = 0;
+ g_autofree gchar *contents = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_debug ("copying %s from plugin %s", uri, priv->name);
+ if (!g_file_get_contents (uri + 7, &contents, &length, &error_local)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "failed to copy %s: %s",
+ uri, error_local->message);
+ return NULL;
+ }
+ return g_bytes_new (contents, length);
+ }
+
+ /* remote */
+ g_debug ("downloading %s from plugin %s", uri, priv->name);
+ msg = soup_message_new (SOUP_METHOD_GET, uri);
+ if (app != NULL) {
+ helper.plugin = plugin;
+ helper.app = app;
+ helper.cancellable = cancellable;
+ g_signal_connect (msg, "got-chunk",
+ G_CALLBACK (gs_plugin_download_chunk_cb),
+ &helper);
+ }
+ status_code = soup_session_send_message (priv->soup_session, msg);
+ if (status_code != SOUP_STATUS_OK) {
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_string_append (str, soup_status_get_phrase (status_code));
+ if (msg->response_body->data != NULL) {
+ g_string_append (str, ": ");
+ g_string_append (str, msg->response_body->data);
+ }
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "failed to download %s: %s",
+ uri, str->str);
+ return NULL;
+ }
+ return g_bytes_new (msg->response_body->data,
+ (gsize) msg->response_body->length);
+}
+
+/**
+ * gs_plugin_download_file:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp, or %NULL
+ * @uri: a remote URI
+ * @filename: a local filename
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Downloads data and saves it to a file.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.22
+ **/
+gboolean
+gs_plugin_download_file (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *uri,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ GsPluginDownloadHelper helper;
+ guint status_code;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ g_return_val_if_fail (GS_IS_PLUGIN (plugin), FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* local */
+ if (g_str_has_prefix (uri, "file://")) {
+ gsize length = 0;
+ g_autofree gchar *contents = NULL;
+ g_debug ("copying %s from plugin %s", uri, priv->name);
+ if (!g_file_get_contents (uri + 7, &contents, &length, &error_local)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "failed to copy %s: %s",
+ uri, error_local->message);
+ return FALSE;
+ }
+ if (!g_file_set_contents (filename, contents, length, &error_local)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_WRITE_FAILED,
+ "Failed to save file: %s",
+ error_local->message);
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ /* remote */
+ g_debug ("downloading %s to %s from plugin %s", uri, filename, priv->name);
+ msg = soup_message_new (SOUP_METHOD_GET, uri);
+ if (msg == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "failed to parse URI %s", uri);
+ return FALSE;
+ }
+ if (app != NULL) {
+ helper.plugin = plugin;
+ helper.app = app;
+ helper.cancellable = cancellable;
+ g_signal_connect (msg, "got-chunk",
+ G_CALLBACK (gs_plugin_download_chunk_cb),
+ &helper);
+ }
+ status_code = soup_session_send_message (priv->soup_session, msg);
+ if (status_code != SOUP_STATUS_OK) {
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_string_append (str, soup_status_get_phrase (status_code));
+ if (msg->response_body->data != NULL) {
+ g_string_append (str, ": ");
+ g_string_append (str, msg->response_body->data);
+ }
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "failed to download %s: %s",
+ uri, str->str);
+ return FALSE;
+ }
+ if (!gs_mkdir_parent (filename, error))
+ return FALSE;
+ if (!g_file_set_contents (filename,
+ msg->response_body->data,
+ msg->response_body->length,
+ &error_local)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_WRITE_FAILED,
+ "Failed to save file: %s",
+ error_local->message);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gchar *
+gs_plugin_download_rewrite_resource_uri (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *uri,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *cachefn = NULL;
+
+ /* local files */
+ if (g_str_has_prefix (uri, "file://"))
+ uri += 7;
+ if (g_str_has_prefix (uri, "/")) {
+ if (!g_file_test (uri, G_FILE_TEST_EXISTS)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "Failed to find file: %s", uri);
+ return NULL;
+ }
+ return g_strdup (uri);
+ }
+
+ /* get cache location */
+ cachefn = gs_utils_get_cache_filename ("cssresource", uri,
+ GS_UTILS_CACHE_FLAG_WRITEABLE |
+ GS_UTILS_CACHE_FLAG_USE_HASH,
+ error);
+ if (cachefn == NULL)
+ return NULL;
+
+ /* already exists */
+ if (g_file_test (cachefn, G_FILE_TEST_EXISTS))
+ return g_steal_pointer (&cachefn);
+
+ /* download */
+ if (!gs_plugin_download_file (plugin, app, uri, cachefn,
+ cancellable, error)) {
+ return NULL;
+ }
+ return g_steal_pointer (&cachefn);
+}
+
+/**
+ * gs_plugin_download_rewrite_resource:
+ * @plugin: a #GsPlugin
+ * @app: a #GsApp, or %NULL
+ * @resource: the CSS resource
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a #GError, or %NULL
+ *
+ * Downloads remote assets and rewrites a CSS resource to use cached local URIs.
+ *
+ * Returns: %TRUE for success
+ *
+ * Since: 3.26
+ **/
+gchar *
+gs_plugin_download_rewrite_resource (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *resource,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint start = 0;
+ g_autoptr(GString) resource_str = g_string_new (resource);
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ g_return_val_if_fail (GS_IS_PLUGIN (plugin), NULL);
+ g_return_val_if_fail (resource != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* replace datadir */
+ as_utils_string_replace (resource_str, "@datadir@", DATADIR);
+ resource = resource_str->str;
+
+ /* look in string for any url() links */
+ for (guint i = 0; resource[i] != '\0'; i++) {
+ if (i > 4 && strncmp (resource + i - 4, "url(", 4) == 0) {
+ start = i;
+ continue;
+ }
+ if (start == 0) {
+ g_string_append_c (str, resource[i]);
+ continue;
+ }
+ if (resource[i] == ')') {
+ guint len;
+ g_autofree gchar *cachefn = NULL;
+ g_autofree gchar *uri = NULL;
+
+ /* remove optional single quotes */
+ if (resource[start] == '\'' || resource[start] == '"')
+ start++;
+ len = i - start;
+ if (i > 0 && (resource[i - 1] == '\'' || resource[i - 1] == '"'))
+ len--;
+ uri = g_strndup (resource + start, len);
+
+ /* download them to per-user cache */
+ cachefn = gs_plugin_download_rewrite_resource_uri (plugin,
+ app,
+ uri,
+ cancellable,
+ error);
+ if (cachefn == NULL)
+ return NULL;
+ g_string_append_printf (str, "'%s'", cachefn);
+ g_string_append_c (str, resource[i]);
+ start = 0;
+ }
+ }
+ return g_strdup (str->str);
+}
+
+/**
+ * gs_plugin_cache_lookup:
+ * @plugin: a #GsPlugin
+ * @key: a string
+ *
+ * Looks up an application object from the per-plugin cache
+ *
+ * Returns: (transfer full) (nullable): the #GsApp, or %NULL
+ *
+ * Since: 3.22
+ **/
+GsApp *
+gs_plugin_cache_lookup (GsPlugin *plugin, const gchar *key)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ GsApp *app;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_val_if_fail (GS_IS_PLUGIN (plugin), NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+
+ locker = g_mutex_locker_new (&priv->cache_mutex);
+ app = g_hash_table_lookup (priv->cache, key);
+ if (app == NULL)
+ return NULL;
+ return g_object_ref (app);
+}
+
+/**
+ * gs_plugin_cache_remove:
+ * @plugin: a #GsPlugin
+ * @key: a key which matches
+ *
+ * Removes an application from the per-plugin cache.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_cache_remove (GsPlugin *plugin, const gchar *key)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_PLUGIN (plugin));
+ g_return_if_fail (key != NULL);
+
+ locker = g_mutex_locker_new (&priv->cache_mutex);
+ g_hash_table_remove (priv->cache, key);
+}
+
+/**
+ * gs_plugin_cache_add:
+ * @plugin: a #GsPlugin
+ * @key: a string, or %NULL if the unique ID should be used
+ * @app: a #GsApp
+ *
+ * Adds an application to the per-plugin cache. This is optional,
+ * and the plugin can use the cache however it likes.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_cache_add (GsPlugin *plugin, const gchar *key, GsApp *app)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_PLUGIN (plugin));
+ g_return_if_fail (GS_IS_APP (app));
+
+ locker = g_mutex_locker_new (&priv->cache_mutex);
+
+ /* the user probably doesn't want to do this */
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD)) {
+ g_warning ("adding wildcard app %s to plugin cache",
+ gs_app_get_unique_id (app));
+ }
+
+ /* default */
+ if (key == NULL)
+ key = gs_app_get_unique_id (app);
+
+ g_return_if_fail (key != NULL);
+
+ if (g_hash_table_lookup (priv->cache, key) == app)
+ return;
+ g_hash_table_insert (priv->cache, g_strdup (key), g_object_ref (app));
+}
+
+/**
+ * gs_plugin_cache_invalidate:
+ * @plugin: a #GsPlugin
+ *
+ * Invalidate the per-plugin cache by marking all entries as invalid.
+ * This is optional, and the plugin can evict the cache whenever it
+ * likes. Using this function may mean the front-end and the plugin
+ * may be operating on a different GsApp with the same cache ID.
+ *
+ * Most plugins do not need to call this function; if a suitable cache
+ * key is being used the old cache item can remain.
+ *
+ * Since: 3.22
+ **/
+void
+gs_plugin_cache_invalidate (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_PLUGIN (plugin));
+
+ locker = g_mutex_locker_new (&priv->cache_mutex);
+ g_hash_table_remove_all (priv->cache);
+}
+
+/**
+ * gs_plugin_report_event:
+ * @plugin: a #GsPlugin
+ * @event: a #GsPluginEvent
+ *
+ * Report a non-fatal event to the UI. Plugins should not assume that a
+ * specific event is actually shown to the user as it may be ignored
+ * automatically.
+ *
+ * Since: 3.24
+ **/
+void
+gs_plugin_report_event (GsPlugin *plugin, GsPluginEvent *event)
+{
+ g_return_if_fail (GS_IS_PLUGIN (plugin));
+ g_return_if_fail (GS_IS_PLUGIN_EVENT (event));
+ g_signal_emit (plugin, signals[SIGNAL_REPORT_EVENT], 0, event);
+}
+
+/**
+ * gs_plugin_set_allow_updates:
+ * @plugin: a #GsPlugin
+ * @allow_updates: boolean
+ *
+ * This allows plugins to inhibit the showing of the updates panel.
+ * This will typically be used when the required permissions are not possible
+ * to obtain, or when a LiveUSB image is low on space.
+ *
+ * By default, the updates panel is shown so plugins do not need to call this
+ * function unless they called gs_plugin_set_allow_updates() with %FALSE.
+ *
+ * Since: 3.24
+ **/
+void
+gs_plugin_set_allow_updates (GsPlugin *plugin, gboolean allow_updates)
+{
+ g_return_if_fail (GS_IS_PLUGIN (plugin));
+ g_signal_emit (plugin, signals[SIGNAL_ALLOW_UPDATES], 0, allow_updates);
+}
+
+/**
+ * gs_plugin_error_to_string:
+ * @error: a #GsPluginError, e.g. %GS_PLUGIN_ERROR_NO_NETWORK
+ *
+ * Converts the enumerated error to a string.
+ *
+ * Returns: a string, or %NULL for invalid
+ **/
+const gchar *
+gs_plugin_error_to_string (GsPluginError error)
+{
+ if (error == GS_PLUGIN_ERROR_FAILED)
+ return "failed";
+ if (error == GS_PLUGIN_ERROR_NOT_SUPPORTED)
+ return "not-supported";
+ if (error == GS_PLUGIN_ERROR_CANCELLED)
+ return "cancelled";
+ if (error == GS_PLUGIN_ERROR_NO_NETWORK)
+ return "no-network";
+ if (error == GS_PLUGIN_ERROR_NO_SECURITY)
+ return "no-security";
+ if (error == GS_PLUGIN_ERROR_NO_SPACE)
+ return "no-space";
+ if (error == GS_PLUGIN_ERROR_AUTH_REQUIRED)
+ return "auth-required";
+ if (error == GS_PLUGIN_ERROR_AUTH_INVALID)
+ return "auth-invalid";
+ if (error == GS_PLUGIN_ERROR_PLUGIN_DEPSOLVE_FAILED)
+ return "plugin-depsolve-failed";
+ if (error == GS_PLUGIN_ERROR_DOWNLOAD_FAILED)
+ return "download-failed";
+ if (error == GS_PLUGIN_ERROR_WRITE_FAILED)
+ return "write-failed";
+ if (error == GS_PLUGIN_ERROR_INVALID_FORMAT)
+ return "invalid-format";
+ if (error == GS_PLUGIN_ERROR_DELETE_FAILED)
+ return "delete-failed";
+ if (error == GS_PLUGIN_ERROR_RESTART_REQUIRED)
+ return "restart-required";
+ if (error == GS_PLUGIN_ERROR_AC_POWER_REQUIRED)
+ return "ac-power-required";
+ if (error == GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW)
+ return "battery-level-too-low";
+ if (error == GS_PLUGIN_ERROR_TIMED_OUT)
+ return "timed-out";
+ return NULL;
+}
+
+/**
+ * gs_plugin_action_to_function_name: (skip)
+ * @action: a #GsPluginAction, e.g. %GS_PLUGIN_ERROR_NO_NETWORK
+ *
+ * Converts the enumerated action to the vfunc name.
+ *
+ * Returns: a string, or %NULL for invalid
+ **/
+const gchar *
+gs_plugin_action_to_function_name (GsPluginAction action)
+{
+ if (action == GS_PLUGIN_ACTION_REFRESH)
+ return "gs_plugin_refresh";
+ if (action == GS_PLUGIN_ACTION_REVIEW_SUBMIT)
+ return "gs_plugin_review_submit";
+ if (action == GS_PLUGIN_ACTION_REVIEW_UPVOTE)
+ return "gs_plugin_review_upvote";
+ if (action == GS_PLUGIN_ACTION_REVIEW_DOWNVOTE)
+ return "gs_plugin_review_downvote";
+ if (action == GS_PLUGIN_ACTION_REVIEW_REPORT)
+ return "gs_plugin_review_report";
+ if (action == GS_PLUGIN_ACTION_REVIEW_REMOVE)
+ return "gs_plugin_review_remove";
+ if (action == GS_PLUGIN_ACTION_REVIEW_DISMISS)
+ return "gs_plugin_review_dismiss";
+ if (action == GS_PLUGIN_ACTION_INSTALL)
+ return "gs_plugin_app_install";
+ if (action == GS_PLUGIN_ACTION_REMOVE)
+ return "gs_plugin_app_remove";
+ if (action == GS_PLUGIN_ACTION_SET_RATING)
+ return "gs_plugin_app_set_rating";
+ if (action == GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD)
+ return "gs_plugin_app_upgrade_download";
+ if (action == GS_PLUGIN_ACTION_UPGRADE_TRIGGER)
+ return "gs_plugin_app_upgrade_trigger";
+ if (action == GS_PLUGIN_ACTION_LAUNCH)
+ return "gs_plugin_launch";
+ if (action == GS_PLUGIN_ACTION_UPDATE_CANCEL)
+ return "gs_plugin_update_cancel";
+ if (action == GS_PLUGIN_ACTION_ADD_SHORTCUT)
+ return "gs_plugin_add_shortcut";
+ if (action == GS_PLUGIN_ACTION_REMOVE_SHORTCUT)
+ return "gs_plugin_remove_shortcut";
+ if (action == GS_PLUGIN_ACTION_REFINE)
+ return "gs_plugin_refine";
+ if (action == GS_PLUGIN_ACTION_UPDATE)
+ return "gs_plugin_update";
+ if (action == GS_PLUGIN_ACTION_DOWNLOAD)
+ return "gs_plugin_download";
+ if (action == GS_PLUGIN_ACTION_FILE_TO_APP)
+ return "gs_plugin_file_to_app";
+ if (action == GS_PLUGIN_ACTION_URL_TO_APP)
+ return "gs_plugin_url_to_app";
+ if (action == GS_PLUGIN_ACTION_GET_DISTRO_UPDATES)
+ return "gs_plugin_add_distro_upgrades";
+ if (action == GS_PLUGIN_ACTION_GET_SOURCES)
+ return "gs_plugin_add_sources";
+ if (action == GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS)
+ return "gs_plugin_add_unvoted_reviews";
+ if (action == GS_PLUGIN_ACTION_GET_INSTALLED)
+ return "gs_plugin_add_installed";
+ if (action == GS_PLUGIN_ACTION_GET_FEATURED)
+ return "gs_plugin_add_featured";
+ if (action == GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL)
+ return "gs_plugin_add_updates_historical";
+ if (action == GS_PLUGIN_ACTION_GET_UPDATES)
+ return "gs_plugin_add_updates";
+ if (action == GS_PLUGIN_ACTION_GET_POPULAR)
+ return "gs_plugin_add_popular";
+ if (action == GS_PLUGIN_ACTION_GET_RECENT)
+ return "gs_plugin_add_recent";
+ if (action == GS_PLUGIN_ACTION_SEARCH)
+ return "gs_plugin_add_search";
+ if (action == GS_PLUGIN_ACTION_SEARCH_FILES)
+ return "gs_plugin_add_search_files";
+ if (action == GS_PLUGIN_ACTION_SEARCH_PROVIDES)
+ return "gs_plugin_add_search_what_provides";
+ if (action == GS_PLUGIN_ACTION_GET_CATEGORY_APPS)
+ return "gs_plugin_add_category_apps";
+ if (action == GS_PLUGIN_ACTION_GET_CATEGORIES)
+ return "gs_plugin_add_categories";
+ if (action == GS_PLUGIN_ACTION_SETUP)
+ return "gs_plugin_setup";
+ if (action == GS_PLUGIN_ACTION_INITIALIZE)
+ return "gs_plugin_initialize";
+ if (action == GS_PLUGIN_ACTION_DESTROY)
+ return "gs_plugin_destroy";
+ if (action == GS_PLUGIN_ACTION_GET_ALTERNATES)
+ return "gs_plugin_add_alternates";
+ if (action == GS_PLUGIN_ACTION_GET_LANGPACKS)
+ return "gs_plugin_add_langpacks";
+ return NULL;
+}
+
+/**
+ * gs_plugin_action_to_string:
+ * @action: a #GsPluginAction, e.g. %GS_PLUGIN_ERROR_NO_NETWORK
+ *
+ * Converts the enumerated action to a string.
+ *
+ * Returns: a string, or %NULL for invalid
+ **/
+const gchar *
+gs_plugin_action_to_string (GsPluginAction action)
+{
+ if (action == GS_PLUGIN_ACTION_UNKNOWN)
+ return "unknown";
+ if (action == GS_PLUGIN_ACTION_SETUP)
+ return "setup";
+ if (action == GS_PLUGIN_ACTION_INSTALL)
+ return "install";
+ if (action == GS_PLUGIN_ACTION_DOWNLOAD)
+ return "download";
+ if (action == GS_PLUGIN_ACTION_REMOVE)
+ return "remove";
+ if (action == GS_PLUGIN_ACTION_UPDATE)
+ return "update";
+ if (action == GS_PLUGIN_ACTION_SET_RATING)
+ return "set-rating";
+ if (action == GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD)
+ return "upgrade-download";
+ if (action == GS_PLUGIN_ACTION_UPGRADE_TRIGGER)
+ return "upgrade-trigger";
+ if (action == GS_PLUGIN_ACTION_LAUNCH)
+ return "launch";
+ if (action == GS_PLUGIN_ACTION_UPDATE_CANCEL)
+ return "update-cancel";
+ if (action == GS_PLUGIN_ACTION_ADD_SHORTCUT)
+ return "add-shortcut";
+ if (action == GS_PLUGIN_ACTION_REMOVE_SHORTCUT)
+ return "remove-shortcut";
+ if (action == GS_PLUGIN_ACTION_REVIEW_SUBMIT)
+ return "review-submit";
+ if (action == GS_PLUGIN_ACTION_REVIEW_UPVOTE)
+ return "review-upvote";
+ if (action == GS_PLUGIN_ACTION_REVIEW_DOWNVOTE)
+ return "review-downvote";
+ if (action == GS_PLUGIN_ACTION_REVIEW_REPORT)
+ return "review-report";
+ if (action == GS_PLUGIN_ACTION_REVIEW_REMOVE)
+ return "review-remove";
+ if (action == GS_PLUGIN_ACTION_REVIEW_DISMISS)
+ return "review-dismiss";
+ if (action == GS_PLUGIN_ACTION_GET_UPDATES)
+ return "get-updates";
+ if (action == GS_PLUGIN_ACTION_GET_DISTRO_UPDATES)
+ return "get-distro-updates";
+ if (action == GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS)
+ return "get-unvoted-reviews";
+ if (action == GS_PLUGIN_ACTION_GET_SOURCES)
+ return "get-sources";
+ if (action == GS_PLUGIN_ACTION_GET_INSTALLED)
+ return "get-installed";
+ if (action == GS_PLUGIN_ACTION_GET_POPULAR)
+ return "get-popular";
+ if (action == GS_PLUGIN_ACTION_GET_FEATURED)
+ return "get-featured";
+ if (action == GS_PLUGIN_ACTION_SEARCH)
+ return "search";
+ if (action == GS_PLUGIN_ACTION_SEARCH_FILES)
+ return "search-files";
+ if (action == GS_PLUGIN_ACTION_SEARCH_PROVIDES)
+ return "search-provides";
+ if (action == GS_PLUGIN_ACTION_GET_CATEGORIES)
+ return "get-categories";
+ if (action == GS_PLUGIN_ACTION_GET_CATEGORY_APPS)
+ return "get-category-apps";
+ if (action == GS_PLUGIN_ACTION_REFINE)
+ return "refine";
+ if (action == GS_PLUGIN_ACTION_REFRESH)
+ return "refresh";
+ if (action == GS_PLUGIN_ACTION_FILE_TO_APP)
+ return "file-to-app";
+ if (action == GS_PLUGIN_ACTION_URL_TO_APP)
+ return "url-to-app";
+ if (action == GS_PLUGIN_ACTION_GET_RECENT)
+ return "get-recent";
+ if (action == GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL)
+ return "get-updates-historical";
+ if (action == GS_PLUGIN_ACTION_INITIALIZE)
+ return "initialize";
+ if (action == GS_PLUGIN_ACTION_DESTROY)
+ return "destroy";
+ if (action == GS_PLUGIN_ACTION_GET_ALTERNATES)
+ return "get-alternates";
+ if (action == GS_PLUGIN_ACTION_GET_LANGPACKS)
+ return "get-langpacks";
+ return NULL;
+}
+
+/**
+ * gs_plugin_action_from_string:
+ * @action: a #GsPluginAction, e.g. "install"
+ *
+ * Converts the string to an enumerated action.
+ *
+ * Returns: a GsPluginAction, e.g. %GS_PLUGIN_ACTION_INSTALL
+ *
+ * Since: 3.26
+ **/
+GsPluginAction
+gs_plugin_action_from_string (const gchar *action)
+{
+ if (g_strcmp0 (action, "setup") == 0)
+ return GS_PLUGIN_ACTION_SETUP;
+ if (g_strcmp0 (action, "install") == 0)
+ return GS_PLUGIN_ACTION_INSTALL;
+ if (g_strcmp0 (action, "download") == 0)
+ return GS_PLUGIN_ACTION_DOWNLOAD;
+ if (g_strcmp0 (action, "remove") == 0)
+ return GS_PLUGIN_ACTION_REMOVE;
+ if (g_strcmp0 (action, "update") == 0)
+ return GS_PLUGIN_ACTION_UPDATE;
+ if (g_strcmp0 (action, "set-rating") == 0)
+ return GS_PLUGIN_ACTION_SET_RATING;
+ if (g_strcmp0 (action, "upgrade-download") == 0)
+ return GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD;
+ if (g_strcmp0 (action, "upgrade-trigger") == 0)
+ return GS_PLUGIN_ACTION_UPGRADE_TRIGGER;
+ if (g_strcmp0 (action, "launch") == 0)
+ return GS_PLUGIN_ACTION_LAUNCH;
+ if (g_strcmp0 (action, "update-cancel") == 0)
+ return GS_PLUGIN_ACTION_UPDATE_CANCEL;
+ if (g_strcmp0 (action, "add-shortcut") == 0)
+ return GS_PLUGIN_ACTION_ADD_SHORTCUT;
+ if (g_strcmp0 (action, "remove-shortcut") == 0)
+ return GS_PLUGIN_ACTION_REMOVE_SHORTCUT;
+ if (g_strcmp0 (action, "review-submit") == 0)
+ return GS_PLUGIN_ACTION_REVIEW_SUBMIT;
+ if (g_strcmp0 (action, "review-upvote") == 0)
+ return GS_PLUGIN_ACTION_REVIEW_UPVOTE;
+ if (g_strcmp0 (action, "review-downvote") == 0)
+ return GS_PLUGIN_ACTION_REVIEW_DOWNVOTE;
+ if (g_strcmp0 (action, "review-report") == 0)
+ return GS_PLUGIN_ACTION_REVIEW_REPORT;
+ if (g_strcmp0 (action, "review-remove") == 0)
+ return GS_PLUGIN_ACTION_REVIEW_REMOVE;
+ if (g_strcmp0 (action, "review-dismiss") == 0)
+ return GS_PLUGIN_ACTION_REVIEW_DISMISS;
+ if (g_strcmp0 (action, "get-updates") == 0)
+ return GS_PLUGIN_ACTION_GET_UPDATES;
+ if (g_strcmp0 (action, "get-distro-updates") == 0)
+ return GS_PLUGIN_ACTION_GET_DISTRO_UPDATES;
+ if (g_strcmp0 (action, "get-unvoted-reviews") == 0)
+ return GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS;
+ if (g_strcmp0 (action, "get-sources") == 0)
+ return GS_PLUGIN_ACTION_GET_SOURCES;
+ if (g_strcmp0 (action, "get-installed") == 0)
+ return GS_PLUGIN_ACTION_GET_INSTALLED;
+ if (g_strcmp0 (action, "get-popular") == 0)
+ return GS_PLUGIN_ACTION_GET_POPULAR;
+ if (g_strcmp0 (action, "get-featured") == 0)
+ return GS_PLUGIN_ACTION_GET_FEATURED;
+ if (g_strcmp0 (action, "search") == 0)
+ return GS_PLUGIN_ACTION_SEARCH;
+ if (g_strcmp0 (action, "search-files") == 0)
+ return GS_PLUGIN_ACTION_SEARCH_FILES;
+ if (g_strcmp0 (action, "search-provides") == 0)
+ return GS_PLUGIN_ACTION_SEARCH_PROVIDES;
+ if (g_strcmp0 (action, "get-categories") == 0)
+ return GS_PLUGIN_ACTION_GET_CATEGORIES;
+ if (g_strcmp0 (action, "get-category-apps") == 0)
+ return GS_PLUGIN_ACTION_GET_CATEGORY_APPS;
+ if (g_strcmp0 (action, "refine") == 0)
+ return GS_PLUGIN_ACTION_REFINE;
+ if (g_strcmp0 (action, "refresh") == 0)
+ return GS_PLUGIN_ACTION_REFRESH;
+ if (g_strcmp0 (action, "file-to-app") == 0)
+ return GS_PLUGIN_ACTION_FILE_TO_APP;
+ if (g_strcmp0 (action, "url-to-app") == 0)
+ return GS_PLUGIN_ACTION_URL_TO_APP;
+ if (g_strcmp0 (action, "get-recent") == 0)
+ return GS_PLUGIN_ACTION_GET_RECENT;
+ if (g_strcmp0 (action, "get-updates-historical") == 0)
+ return GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL;
+ if (g_strcmp0 (action, "initialize") == 0)
+ return GS_PLUGIN_ACTION_INITIALIZE;
+ if (g_strcmp0 (action, "destroy") == 0)
+ return GS_PLUGIN_ACTION_DESTROY;
+ if (g_strcmp0 (action, "get-alternates") == 0)
+ return GS_PLUGIN_ACTION_GET_ALTERNATES;
+ if (g_strcmp0 (action, "get-langpacks") == 0)
+ return GS_PLUGIN_ACTION_GET_LANGPACKS;
+ return GS_PLUGIN_ACTION_UNKNOWN;
+}
+
+/**
+ * gs_plugin_refine_flags_to_string:
+ * @refine_flags: some #GsPluginRefineFlags, e.g. %GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE
+ *
+ * Converts the flags to a string.
+ *
+ * Returns: a string
+ **/
+gchar *
+gs_plugin_refine_flags_to_string (GsPluginRefineFlags refine_flags)
+{
+ g_autoptr(GPtrArray) cstrs = g_ptr_array_new ();
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_USE_HISTORY)
+ g_ptr_array_add (cstrs, "use-history");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE)
+ g_ptr_array_add (cstrs, "require-license");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL)
+ g_ptr_array_add (cstrs, "require-url");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION)
+ g_ptr_array_add (cstrs, "require-description");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE)
+ g_ptr_array_add (cstrs, "require-size");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING)
+ g_ptr_array_add (cstrs, "require-rating");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION)
+ g_ptr_array_add (cstrs, "require-version");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY)
+ g_ptr_array_add (cstrs, "require-history");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION)
+ g_ptr_array_add (cstrs, "require-setup-action");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS)
+ g_ptr_array_add (cstrs, "require-update-details");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN)
+ g_ptr_array_add (cstrs, "require-origin");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED)
+ g_ptr_array_add (cstrs, "require-related");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH)
+ g_ptr_array_add (cstrs, "require-menu-path");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS)
+ g_ptr_array_add (cstrs, "require-addons");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES)
+ g_ptr_array_add (cstrs, "require-allow-packages");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY)
+ g_ptr_array_add (cstrs, "require-update-severity");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPGRADE_REMOVED)
+ g_ptr_array_add (cstrs, "require-upgrade-removed");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE)
+ g_ptr_array_add (cstrs, "require-provenance");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS)
+ g_ptr_array_add (cstrs, "require-reviews");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS)
+ g_ptr_array_add (cstrs, "require-review-ratings");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS)
+ g_ptr_array_add (cstrs, "require-key-colors");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON)
+ g_ptr_array_add (cstrs, "require-icon");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS)
+ g_ptr_array_add (cstrs, "require-permissions");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME)
+ g_ptr_array_add (cstrs, "require-origin-hostname");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_UI)
+ g_ptr_array_add (cstrs, "require-origin-ui");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME)
+ g_ptr_array_add (cstrs, "require-runtime");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS)
+ g_ptr_array_add (cstrs, "require-screenshots");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES)
+ g_ptr_array_add (cstrs, "require-categories");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP)
+ g_ptr_array_add (cstrs, "require-project-group");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME)
+ g_ptr_array_add (cstrs, "require-developer-name");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS)
+ g_ptr_array_add (cstrs, "require-kudos");
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING)
+ g_ptr_array_add (cstrs, "content-rating");
+ if (cstrs->len == 0)
+ return g_strdup ("none");
+ g_ptr_array_add (cstrs, NULL);
+ return g_strjoinv (",", (gchar**) cstrs->pdata);
+}
+
+static void
+gs_plugin_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ GsPlugin *plugin = GS_PLUGIN (object);
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ switch (prop_id) {
+ case PROP_FLAGS:
+ priv->flags = g_value_get_uint64 (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_plugin_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GsPlugin *plugin = GS_PLUGIN (object);
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ switch (prop_id) {
+ case PROP_FLAGS:
+ g_value_set_uint64 (value, priv->flags);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_plugin_class_init (GsPluginClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = gs_plugin_set_property;
+ object_class->get_property = gs_plugin_get_property;
+ object_class->finalize = gs_plugin_finalize;
+
+ pspec = g_param_spec_uint64 ("flags", NULL, NULL,
+ 0, G_MAXUINT64, 0, G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_FLAGS, pspec);
+
+ signals [SIGNAL_UPDATES_CHANGED] =
+ g_signal_new ("updates-changed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, updates_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals [SIGNAL_STATUS_CHANGED] =
+ g_signal_new ("status-changed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, status_changed),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 2, GS_TYPE_APP, G_TYPE_UINT);
+
+ signals [SIGNAL_RELOAD] =
+ g_signal_new ("reload",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, reload),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals [SIGNAL_REPORT_EVENT] =
+ g_signal_new ("report-event",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, report_event),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 1, GS_TYPE_PLUGIN_EVENT);
+
+ signals [SIGNAL_ALLOW_UPDATES] =
+ g_signal_new ("allow-updates",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, allow_updates),
+ NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals [SIGNAL_BASIC_AUTH_START] =
+ g_signal_new ("basic-auth-start",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, basic_auth_start),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
+}
+
+static void
+gs_plugin_init (GsPlugin *plugin)
+{
+ GsPluginPrivate *priv = gs_plugin_get_instance_private (plugin);
+ guint i;
+
+ for (i = 0; i < GS_PLUGIN_RULE_LAST; i++)
+ priv->rules[i] = g_ptr_array_new_with_free_func (g_free);
+
+ priv->enabled = TRUE;
+ priv->scale = 1;
+ priv->cache = g_hash_table_new_full ((GHashFunc) as_utils_unique_id_hash,
+ (GEqualFunc) as_utils_unique_id_equal,
+ g_free,
+ (GDestroyNotify) g_object_unref);
+ priv->vfuncs = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, NULL);
+ g_mutex_init (&priv->cache_mutex);
+ g_mutex_init (&priv->interactive_mutex);
+ g_mutex_init (&priv->timer_mutex);
+ g_mutex_init (&priv->vfuncs_mutex);
+}
+
+/**
+ * gs_plugin_new:
+ *
+ * Creates a new plugin.
+ *
+ * Returns: a #GsPlugin
+ *
+ * Since: 3.22
+ **/
+GsPlugin *
+gs_plugin_new (void)
+{
+ GsPlugin *plugin;
+ plugin = g_object_new (GS_TYPE_PLUGIN, NULL);
+ return plugin;
+}
diff --git a/lib/gs-plugin.h b/lib/gs-plugin.h
new file mode 100644
index 0000000..e211931
--- /dev/null
+++ b/lib/gs-plugin.h
@@ -0,0 +1,132 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <appstream-glib.h>
+#include <glib-object.h>
+#include <gmodule.h>
+#include <gio/gio.h>
+#include <libsoup/soup.h>
+
+#include "gs-app.h"
+#include "gs-app-list.h"
+#include "gs-category.h"
+#include "gs-plugin-event.h"
+#include "gs-plugin-types.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PLUGIN (gs_plugin_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsPlugin, gs_plugin, GS, PLUGIN, GObject)
+
+struct _GsPluginClass
+{
+ GObjectClass parent_class;
+ void (*updates_changed) (GsPlugin *plugin);
+ void (*status_changed) (GsPlugin *plugin,
+ GsApp *app,
+ guint status);
+ void (*reload) (GsPlugin *plugin);
+ void (*report_event) (GsPlugin *plugin,
+ GsPluginEvent *event);
+ void (*allow_updates) (GsPlugin *plugin,
+ gboolean allow_updates);
+ void (*basic_auth_start) (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data);
+ gpointer padding[25];
+};
+
+typedef struct GsPluginData GsPluginData;
+
+/* helpers */
+#define GS_PLUGIN_ERROR gs_plugin_error_quark ()
+
+GQuark gs_plugin_error_quark (void);
+
+/* public getters and setters */
+GsPluginData *gs_plugin_alloc_data (GsPlugin *plugin,
+ gsize sz);
+GsPluginData *gs_plugin_get_data (GsPlugin *plugin);
+const gchar *gs_plugin_get_name (GsPlugin *plugin);
+const gchar *gs_plugin_get_appstream_id (GsPlugin *plugin);
+void gs_plugin_set_appstream_id (GsPlugin *plugin,
+ const gchar *appstream_id);
+gboolean gs_plugin_get_enabled (GsPlugin *plugin);
+void gs_plugin_set_enabled (GsPlugin *plugin,
+ gboolean enabled);
+gboolean gs_plugin_has_flags (GsPlugin *plugin,
+ GsPluginFlags flags);
+void gs_plugin_add_flags (GsPlugin *plugin,
+ GsPluginFlags flags);
+void gs_plugin_remove_flags (GsPlugin *plugin,
+ GsPluginFlags flags);
+guint gs_plugin_get_scale (GsPlugin *plugin);
+const gchar *gs_plugin_get_locale (GsPlugin *plugin);
+const gchar *gs_plugin_get_language (GsPlugin *plugin);
+SoupSession *gs_plugin_get_soup_session (GsPlugin *plugin);
+void gs_plugin_set_soup_session (GsPlugin *plugin,
+ SoupSession *soup_session);
+void gs_plugin_add_rule (GsPlugin *plugin,
+ GsPluginRule rule,
+ const gchar *name);
+
+/* helpers */
+GBytes *gs_plugin_download_data (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *uri,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_plugin_download_file (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *uri,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error);
+gchar *gs_plugin_download_rewrite_resource (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *resource,
+ GCancellable *cancellable,
+ GError **error);
+
+gboolean gs_plugin_check_distro_id (GsPlugin *plugin,
+ const gchar *distro_id);
+GsApp *gs_plugin_cache_lookup (GsPlugin *plugin,
+ const gchar *key);
+void gs_plugin_cache_add (GsPlugin *plugin,
+ const gchar *key,
+ GsApp *app);
+void gs_plugin_cache_remove (GsPlugin *plugin,
+ const gchar *key);
+void gs_plugin_cache_invalidate (GsPlugin *plugin);
+void gs_plugin_status_update (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginStatus status);
+gboolean gs_plugin_app_launch (GsPlugin *plugin,
+ GsApp *app,
+ GError **error);
+void gs_plugin_updates_changed (GsPlugin *plugin);
+void gs_plugin_reload (GsPlugin *plugin);
+const gchar *gs_plugin_status_to_string (GsPluginStatus status);
+void gs_plugin_report_event (GsPlugin *plugin,
+ GsPluginEvent *event);
+void gs_plugin_set_allow_updates (GsPlugin *plugin,
+ gboolean allow_updates);
+gboolean gs_plugin_get_network_available (GsPlugin *plugin);
+void gs_plugin_basic_auth_start (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data);
+
+G_END_DECLS
diff --git a/lib/gs-self-test.c b/lib/gs-self-test.c
new file mode 100644
index 0000000..c6c20ed
--- /dev/null
+++ b/lib/gs-self-test.c
@@ -0,0 +1,835 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static gboolean
+gs_app_list_filter_cb (GsApp *app, gpointer user_data)
+{
+ if (g_strcmp0 (gs_app_get_id (app), "a") == 0)
+ return FALSE;
+ if (g_strcmp0 (gs_app_get_id (app), "c") == 0)
+ return FALSE;
+ return TRUE;
+}
+
+static void
+gs_utils_url_func (void)
+{
+ g_autofree gchar *path1 = NULL;
+ g_autofree gchar *path2 = NULL;
+ g_autofree gchar *path3 = NULL;
+ g_autofree gchar *scheme1 = NULL;
+ g_autofree gchar *scheme2 = NULL;
+
+ scheme1 = gs_utils_get_url_scheme ("appstream://gimp.desktop");
+ g_assert_cmpstr (scheme1, ==, "appstream");
+ scheme2 = gs_utils_get_url_scheme ("appstream:gimp.desktop");
+ g_assert_cmpstr (scheme2, ==, "appstream");
+
+ path1 = gs_utils_get_url_path ("appstream://gimp.desktop");
+ g_assert_cmpstr (path1, ==, "gimp.desktop");
+ path2 = gs_utils_get_url_path ("appstream:gimp.desktop");
+ g_assert_cmpstr (path2, ==, "gimp.desktop");
+ path3 = gs_utils_get_url_path ("apt:/gimp");
+ g_assert_cmpstr (path3, ==, "gimp");
+}
+
+static void
+gs_utils_wilson_func (void)
+{
+ g_assert_cmpint ((gint64) gs_utils_get_wilson_rating (0, 0, 0, 0, 0), ==, -1);
+ g_assert_cmpint ((gint64) gs_utils_get_wilson_rating (0, 0, 0, 0, 400), ==, 100);
+ g_assert_cmpint ((gint64) gs_utils_get_wilson_rating (10, 0, 0, 0, 400), ==, 98);
+ g_assert_cmpint ((gint64) gs_utils_get_wilson_rating (0, 0, 0, 0, 1), ==, 76);
+ g_assert_cmpint ((gint64) gs_utils_get_wilson_rating (5, 4, 20, 100, 400), ==, 93);
+}
+
+static void
+gs_os_release_func (void)
+{
+ g_autofree gchar *fn = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+
+ fn = gs_test_get_filename (TESTDATADIR, "tests/os-release");
+ g_assert (fn != NULL);
+ g_setenv ("GS_SELF_TEST_OS_RELEASE_FILENAME", fn, TRUE);
+
+ os_release = gs_os_release_new (&error);
+ g_assert_no_error (error);
+ g_assert (os_release != NULL);
+ g_assert_cmpstr (gs_os_release_get_id (os_release), ==, "fedora");
+ g_assert_cmpstr (gs_os_release_get_name (os_release), ==, "Fedora");
+ g_assert_cmpstr (gs_os_release_get_version (os_release), ==, "25 (Workstation Edition)");
+ g_assert_cmpstr (gs_os_release_get_version_id (os_release), ==, "25");
+ g_assert_cmpstr (gs_os_release_get_pretty_name (os_release), ==, "Fedora 25 (Workstation Edition)");
+}
+
+static void
+gs_utils_append_kv_func (void)
+{
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ /* normal */
+ gs_utils_append_key_value (str, 5, "key", "val");
+ g_assert_cmpstr (str->str, ==, "key: val\n");
+
+ /* oversize */
+ g_string_truncate (str, 0);
+ gs_utils_append_key_value (str, 5, "longkey", "val");
+ g_assert_cmpstr (str->str, ==, "longkey: val\n");
+
+ /* null key */
+ g_string_truncate (str, 0);
+ gs_utils_append_key_value (str, 5, NULL, "val");
+ g_assert_cmpstr (str->str, ==, " val\n");
+
+ /* zero align key */
+ g_string_truncate (str, 0);
+ gs_utils_append_key_value (str, 0, "key", "val");
+ g_assert_cmpstr (str->str, ==, "key: val\n");
+}
+
+static void
+gs_utils_cache_func (void)
+{
+ g_autofree gchar *fn1 = NULL;
+ g_autofree gchar *fn2 = NULL;
+ g_autoptr(GError) error = NULL;
+
+ fn1 = gs_utils_get_cache_filename ("test",
+ "http://www.foo.bar/baz",
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (fn1, !=, NULL);
+ g_assert (g_str_has_prefix (fn1, g_get_user_cache_dir ()));
+ g_assert (g_str_has_suffix (fn1, "test/baz"));
+
+ fn2 = gs_utils_get_cache_filename ("test",
+ "http://www.foo.bar/baz",
+ GS_UTILS_CACHE_FLAG_WRITEABLE |
+ GS_UTILS_CACHE_FLAG_USE_HASH,
+ &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (fn2, !=, NULL);
+ g_assert (g_str_has_prefix (fn2, g_get_user_cache_dir ()));
+ g_assert (g_str_has_suffix (fn2, "test/295099f59d12b3eb0b955325fcb699cd23792a89-baz"));
+}
+
+static void
+gs_utils_error_func (void)
+{
+ g_autofree gchar *app_id = NULL;
+ g_autofree gchar *origin_id = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = gs_app_new ("gimp.desktop");
+ g_autoptr(GsApp) origin = gs_app_new ("gimp-repo");
+
+ for (guint i = 0; i < GS_PLUGIN_ERROR_LAST; i++)
+ g_assert (gs_plugin_error_to_string (i) != NULL);
+
+ /* noop */
+ gs_utils_error_add_app_id (&error, app);
+ gs_utils_error_add_origin_id (&error, origin);
+
+ g_set_error (&error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "failed");
+ g_assert_cmpstr (error->message, ==, "failed");
+ gs_utils_error_add_app_id (&error, app);
+ gs_utils_error_add_origin_id (&error, origin);
+ g_assert_cmpstr (error->message, ==, "[*/*/*/*/gimp-repo/*] {*/*/*/*/gimp.desktop/*} failed");
+
+ /* find and strip any unique IDs from the error message */
+ for (guint i = 0; i < 2; i++) {
+ if (app_id == NULL)
+ app_id = gs_utils_error_strip_app_id (error);
+ if (origin_id == NULL)
+ origin_id = gs_utils_error_strip_origin_id (error);
+ }
+
+ g_assert_cmpstr (app_id, ==, "*/*/*/*/gimp.desktop/*");
+ g_assert_cmpstr (origin_id, ==, "*/*/*/*/gimp-repo/*");
+ g_assert_cmpstr (error->message, ==, "failed");
+}
+
+static void
+gs_utils_parse_evr_func (void)
+{
+ gboolean ret;
+
+ {
+ g_autofree gchar *epoch = NULL;
+ g_autofree gchar *version = NULL;
+ g_autofree gchar *release = NULL;
+
+ ret = gs_utils_parse_evr ("3.26.0-1.fc27", &epoch, &version, &release);
+ g_assert (ret);
+ g_assert_cmpstr (epoch, ==, "0");
+ g_assert_cmpstr (version, ==, "3.26.0");
+ g_assert_cmpstr (release, ==, "1.fc27");
+ }
+
+ {
+ g_autofree gchar *epoch = NULL;
+ g_autofree gchar *version = NULL;
+ g_autofree gchar *release = NULL;
+
+ ret = gs_utils_parse_evr ("1:3.26.0-1.fc27", &epoch, &version, &release);
+ g_assert (ret);
+ g_assert_cmpstr (epoch, ==, "1");
+ g_assert_cmpstr (version, ==, "3.26.0");
+ g_assert_cmpstr (release, ==, "1.fc27");
+ }
+
+ {
+ g_autofree gchar *epoch = NULL;
+ g_autofree gchar *version = NULL;
+ g_autofree gchar *release = NULL;
+
+ ret = gs_utils_parse_evr ("234", &epoch, &version, &release);
+ g_assert (ret);
+ g_assert_cmpstr (epoch, ==, "0");
+ g_assert_cmpstr (version, ==, "234");
+ g_assert_cmpstr (release, ==, "0");
+ }
+
+ {
+ g_autofree gchar *epoch = NULL;
+ g_autofree gchar *version = NULL;
+ g_autofree gchar *release = NULL;
+
+ ret = gs_utils_parse_evr ("3:1.6~git20131207+dfsg-2ubuntu1~14.04.3", &epoch, &version, &release);
+ g_assert (ret);
+ g_assert_cmpstr (epoch, ==, "3");
+ g_assert_cmpstr (version, ==, "1.6~git20131207+dfsg");
+ g_assert_cmpstr (release, ==, "2ubuntu1~14.04.3");
+ }
+
+ {
+ g_autofree gchar *epoch = NULL;
+ g_autofree gchar *version = NULL;
+ g_autofree gchar *release = NULL;
+
+ ret = gs_utils_parse_evr ("1-2-3-4-5-6", &epoch, &version, &release);
+ g_assert (!ret);
+ }
+
+ {
+ g_autofree gchar *epoch = NULL;
+ g_autofree gchar *version = NULL;
+ g_autofree gchar *release = NULL;
+
+ ret = gs_utils_parse_evr ("", &epoch, &version, &release);
+ g_assert (!ret);
+ }
+}
+
+static void
+gs_plugin_download_rewrite_func (void)
+{
+ g_autofree gchar *css = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPlugin) plugin = NULL;
+ const gchar *resource = "background:\n"
+ " url('file://" DATADIR "/gnome-software/featured-maps.png')\n"
+ " url('file://" DATADIR "/gnome-software/featured-maps-bg.png')\n"
+ " bottom center / contain no-repeat;\n";
+
+ /* only when installed */
+ if (!g_file_test (DATADIR "/gnome-software/featured-maps.png", G_FILE_TEST_EXISTS)) {
+ g_test_skip ("not installed");
+ return;
+ }
+
+ /* test rewrite */
+ plugin = gs_plugin_new ();
+ gs_plugin_set_name (plugin, "self-test");
+ css = gs_plugin_download_rewrite_resource (plugin,
+ NULL, /* app */
+ resource,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (css != NULL);
+}
+
+static void
+gs_plugin_func (void)
+{
+ GsAppList *list;
+ GsAppList *list_dup;
+ GsAppList *list_remove;
+ GsApp *app;
+ g_autoptr(AsProvide) prov = as_provide_new ();
+
+ /* check enums converted */
+ for (guint i = 0; i < GS_PLUGIN_ACTION_LAST; i++) {
+ const gchar *tmp = gs_plugin_action_to_string (i);
+ if (tmp == NULL)
+ g_critical ("failed to convert %u", i);
+ g_assert_cmpint (gs_plugin_action_from_string (tmp), ==, i);
+ }
+ for (guint i = 1; i < GS_PLUGIN_ACTION_LAST; i++) {
+ const gchar *tmp = gs_plugin_action_to_function_name (i);
+ if (tmp == NULL)
+ g_critical ("failed to convert %u", i);
+ }
+
+ /* add a couple of duplicate IDs */
+ app = gs_app_new ("a");
+ list = gs_app_list_new ();
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+
+ /* test refcounting */
+ g_assert_cmpstr (gs_app_get_id (gs_app_list_index (list, 0)), ==, "a");
+ list_dup = gs_app_list_copy (list);
+ g_object_unref (list);
+ g_assert_cmpint (gs_app_list_length (list_dup), ==, 1);
+ g_assert_cmpstr (gs_app_get_id (gs_app_list_index (list_dup, 0)), ==, "a");
+ g_object_unref (list_dup);
+
+ /* test removing objects */
+ app = gs_app_new ("a");
+ list_remove = gs_app_list_new ();
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ app = gs_app_new ("b");
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ app = gs_app_new ("c");
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 3);
+ gs_app_list_filter (list_remove, gs_app_list_filter_cb, NULL);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 1);
+ g_assert_cmpstr (gs_app_get_id (gs_app_list_index (list_remove, 0)), ==, "b");
+
+ /* test removing duplicates at runtime */
+ app = gs_app_new ("b");
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ app = gs_app_new ("b");
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 1);
+ g_assert_cmpstr (gs_app_get_id (gs_app_list_index (list_remove, 0)), ==, "b");
+ g_object_unref (list_remove);
+
+ /* test removing duplicates when lazy-loading */
+ list_remove = gs_app_list_new ();
+ app = gs_app_new (NULL);
+ gs_app_list_add (list_remove, app);
+ gs_app_set_id (app, "e");
+ g_object_unref (app);
+ app = gs_app_new (NULL);
+ gs_app_list_add (list_remove, app);
+ gs_app_set_id (app, "e");
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 2);
+ gs_app_list_filter_duplicates (list_remove, GS_APP_LIST_FILTER_FLAG_NONE);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 1);
+ g_object_unref (list_remove);
+
+ /* test removing duplicates when some apps have no app ID */
+ list_remove = gs_app_list_new ();
+ app = gs_app_new (NULL);
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ app = gs_app_new (NULL);
+ gs_app_list_add (list_remove, app);
+ g_object_unref (app);
+ app = gs_app_new (NULL);
+ gs_app_list_add (list_remove, app);
+ gs_app_set_id (app, "e");
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 3);
+ gs_app_list_filter_duplicates (list_remove, GS_APP_LIST_FILTER_FLAG_NONE);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 3);
+ g_object_unref (list_remove);
+
+ /* remove lazy-loaded app */
+ list_remove = gs_app_list_new ();
+ app = gs_app_new (NULL);
+ gs_app_list_add (list_remove, app);
+ gs_app_list_remove (list_remove, app);
+ g_assert_cmpint (gs_app_list_length (list_remove), ==, 0);
+ g_object_unref (app);
+ g_object_unref (list_remove);
+
+ /* respect priority when deduplicating */
+ list = gs_app_list_new ();
+ app = gs_app_new ("e");
+ gs_app_set_unique_id (app, "user/foo/*/*/e/*");
+ gs_app_list_add (list, app);
+ gs_app_set_priority (app, 0);
+ g_object_unref (app);
+ app = gs_app_new ("e");
+ gs_app_set_unique_id (app, "user/bar/*/*/e/*");
+ gs_app_list_add (list, app);
+ gs_app_set_priority (app, 99);
+ g_object_unref (app);
+ app = gs_app_new ("e");
+ gs_app_set_unique_id (app, "user/baz/*/*/e/*");
+ gs_app_list_add (list, app);
+ gs_app_set_priority (app, 50);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list), ==, 3);
+ gs_app_list_filter_duplicates (list, GS_APP_LIST_FILTER_FLAG_KEY_ID);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ g_assert_cmpstr (gs_app_get_unique_id (gs_app_list_index (list, 0)), ==, "user/bar/*/*/e/*");
+ g_object_unref (list);
+
+ /* respect priority (using name and version) when deduplicating */
+ list = gs_app_list_new ();
+ app = gs_app_new ("e");
+ gs_app_add_source (app, "foo");
+ gs_app_set_version (app, "1.2.3");
+ gs_app_set_unique_id (app, "user/foo/repo/*/*/*");
+ gs_app_list_add (list, app);
+ gs_app_set_priority (app, 0);
+ g_object_unref (app);
+ app = gs_app_new ("e");
+ gs_app_add_source (app, "foo");
+ gs_app_set_version (app, "1.2.3");
+ gs_app_set_unique_id (app, "user/foo/repo-security/*/*/*");
+ gs_app_list_add (list, app);
+ gs_app_set_priority (app, 99);
+ g_object_unref (app);
+ app = gs_app_new ("e");
+ gs_app_add_source (app, "foo");
+ gs_app_set_version (app, "1.2.3");
+ gs_app_set_unique_id (app, "user/foo/repo-universe/*/*/*");
+ gs_app_list_add (list, app);
+ gs_app_set_priority (app, 50);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list), ==, 3);
+ gs_app_list_filter_duplicates (list, GS_APP_LIST_FILTER_FLAG_KEY_ID |
+ GS_APP_LIST_FILTER_FLAG_KEY_SOURCE |
+ GS_APP_LIST_FILTER_FLAG_KEY_VERSION);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ g_assert_cmpstr (gs_app_get_unique_id (gs_app_list_index (list, 0)), ==, "user/foo/repo-security/*/*/*");
+ g_object_unref (list);
+
+ /* prefer installed applications */
+ list = gs_app_list_new ();
+ app = gs_app_new ("e");
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_set_unique_id (app, "user/foo/*/*/e/*");
+ gs_app_set_priority (app, 0);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("e");
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_set_unique_id (app, "user/bar/*/*/e/*");
+ gs_app_set_priority (app, 100);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ gs_app_list_filter_duplicates (list,
+ GS_APP_LIST_FILTER_FLAG_KEY_ID |
+ GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ g_assert_cmpstr (gs_app_get_unique_id (gs_app_list_index (list, 0)), ==, "user/foo/*/*/e/*");
+ g_object_unref (list);
+
+ /* use the provides ID to dedupe */
+ list = gs_app_list_new ();
+ app = gs_app_new ("gimp.desktop");
+ gs_app_set_unique_id (app, "user/fedora/*/*/gimp.desktop/*");
+ gs_app_set_priority (app, 0);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("org.gimp.GIMP");
+ as_provide_set_kind (prov, AS_PROVIDE_KIND_ID);
+ as_provide_set_value (prov, "gimp.desktop");
+ gs_app_add_provide (app, prov);
+ gs_app_set_unique_id (app, "user/flathub/*/*/org.gimp.GIMP/*");
+ gs_app_set_priority (app, 100);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ gs_app_list_filter_duplicates (list, GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ g_assert_cmpstr (gs_app_get_unique_id (gs_app_list_index (list, 0)), ==,
+ "user/flathub/*/*/org.gimp.GIMP/*");
+ g_object_unref (list);
+
+ /* use globs when adding */
+ list = gs_app_list_new ();
+ app = gs_app_new ("b");
+ gs_app_set_unique_id (app, "a/b/c/d/e/f");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("b");
+ gs_app_set_unique_id (app, "a/b/c/*/e/f");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ g_assert_cmpstr (gs_app_get_id (gs_app_list_index (list, 0)), ==, "b");
+ g_object_unref (list);
+
+ /* lookup with a wildcard */
+ list = gs_app_list_new ();
+ app = gs_app_new ("b");
+ gs_app_set_unique_id (app, "a/b/c/d/e/f");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ g_assert (gs_app_list_lookup (list, "a/b/c/d/e/f") != NULL);
+ g_assert (gs_app_list_lookup (list, "a/b/c/d/e/*") != NULL);
+ g_assert (gs_app_list_lookup (list, "*/b/c/d/e/f") != NULL);
+ g_assert (gs_app_list_lookup (list, "x/x/x/x/x/x") == NULL);
+ g_object_unref (list);
+
+ /* allow duplicating a wildcard */
+ list = gs_app_list_new ();
+ app = gs_app_new ("gimp.desktop");
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("gimp.desktop");
+ gs_app_set_unique_id (app, "system/flatpak/*/*/gimp.desktop/stable");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list), ==, 2);
+ g_object_unref (list);
+
+ /* allow duplicating a wildcard */
+ list = gs_app_list_new ();
+ app = gs_app_new ("gimp.desktop");
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("gimp.desktop");
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ g_object_unref (list);
+
+ /* add a list to a list */
+ list = gs_app_list_new ();
+ list_dup = gs_app_list_new ();
+ app = gs_app_new ("a");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("b");
+ gs_app_list_add (list_dup, app);
+ g_object_unref (app);
+ gs_app_list_add_list (list, list_dup);
+ g_assert_cmpint (gs_app_list_length (list), ==, 2);
+ g_assert_cmpint (gs_app_list_length (list_dup), ==, 1);
+ g_object_unref (list);
+ g_object_unref (list_dup);
+
+ /* remove apps from the list */
+ list = gs_app_list_new ();
+ app = gs_app_new ("a");
+ gs_app_list_add (list, app);
+ gs_app_list_remove (list, app);
+ g_object_unref (app);
+ g_assert_cmpint (gs_app_list_length (list), ==, 0);
+ g_object_unref (list);
+
+ /* truncate list */
+ list = gs_app_list_new ();
+ app = gs_app_new ("a");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("b");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ app = gs_app_new ("c");
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+ g_assert (!gs_app_list_has_flag (list, GS_APP_LIST_FLAG_IS_TRUNCATED));
+ g_assert_cmpint (gs_app_list_get_size_peak (list), ==, 3);
+ gs_app_list_truncate (list, 3);
+ g_assert_cmpint (gs_app_list_length (list), ==, 3);
+ g_assert (gs_app_list_has_flag (list, GS_APP_LIST_FLAG_IS_TRUNCATED));
+ g_assert_cmpint (gs_app_list_get_size_peak (list), ==, 3);
+ gs_app_list_truncate (list, 2);
+ g_assert_cmpint (gs_app_list_length (list), ==, 2);
+ gs_app_list_truncate (list, 1);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ gs_app_list_truncate (list, 0);
+ g_assert_cmpint (gs_app_list_length (list), ==, 0);
+ g_assert_cmpint (gs_app_list_get_size_peak (list), ==, 3);
+ g_object_unref (list);
+}
+
+static gpointer
+gs_app_thread_cb (gpointer data)
+{
+ GsApp *app = GS_APP (data);
+ for (guint i = 0; i < 10000; i++) {
+ g_assert_cmpstr (gs_app_get_unique_id (app), !=, NULL);
+ gs_app_set_branch (app, "master");
+ g_assert_cmpstr (gs_app_get_unique_id (app), !=, NULL);
+ gs_app_set_branch (app, "stable");
+ }
+ return NULL;
+}
+
+static void
+gs_app_thread_func (void)
+{
+ GThread *thread1;
+ GThread *thread2;
+ g_autoptr(GsApp) app = gs_app_new ("gimp.desktop");
+
+ /* try really hard to cause a threading problem */
+ g_setenv ("G_MESSAGES_DEBUG", "", TRUE);
+ thread1 = g_thread_new ("thread1", gs_app_thread_cb, app);
+ thread2 = g_thread_new ("thread2", gs_app_thread_cb, app);
+ g_thread_join (thread1); /* consumes the reference */
+ g_thread_join (thread2);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+}
+
+static void
+gs_app_unique_id_func (void)
+{
+ g_autoptr(GsApp) app = gs_app_new (NULL);
+ const gchar *unique_id;
+
+ unique_id = "system/flatpak/gnome/desktop/org.gnome.Software.desktop/master";
+ gs_app_set_from_unique_id (app, unique_id);
+ g_assert (GS_IS_APP (app));
+ g_assert_cmpint (gs_app_get_scope (app), ==, AS_APP_SCOPE_SYSTEM);
+ g_assert_cmpint (gs_app_get_bundle_kind (app), ==, AS_BUNDLE_KIND_FLATPAK);
+ g_assert_cmpstr (gs_app_get_origin (app), ==, "gnome");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.gnome.Software.desktop");
+ g_assert_cmpstr (gs_app_get_branch (app), ==, "master");
+}
+
+static void
+gs_app_addons_func (void)
+{
+ g_autoptr(GsApp) app = gs_app_new ("test.desktop");
+ GsApp *addon;
+
+ /* create, add then drop ref, so @app has the only refcount of addon */
+ addon = gs_app_new ("test.desktop");
+ gs_app_add_addon (app, addon);
+ g_object_unref (addon);
+
+ gs_app_remove_addon (app, addon);
+}
+
+static void
+gs_app_func (void)
+{
+ g_autoptr(GsApp) app = NULL;
+
+ app = gs_app_new ("gnome-software.desktop");
+ g_assert (GS_IS_APP (app));
+ g_assert_cmpstr (gs_app_get_id (app), ==, "gnome-software.desktop");
+
+ /* check we clean up the version, but not at the expense of having
+ * the same string as the update version */
+ gs_app_set_version (app, "2.8.6-3.fc20");
+ gs_app_set_update_version (app, "2.8.6-4.fc20");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "2.8.6-3.fc20");
+ g_assert_cmpstr (gs_app_get_update_version (app), ==, "2.8.6-4.fc20");
+ g_assert_cmpstr (gs_app_get_version_ui (app), ==, "2.8.6-3");
+ g_assert_cmpstr (gs_app_get_update_version_ui (app), ==, "2.8.6-4");
+
+ /* check the quality stuff works */
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "dave");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "dave");
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, "brian");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "dave");
+ gs_app_set_name (app, GS_APP_QUALITY_HIGHEST, "hugh");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "hugh");
+
+ /* check non-transient state saving */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_REMOVING);
+ gs_app_set_state_recover (app); // simulate an error
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+
+ /* try again */
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_REMOVING);
+ gs_app_set_state_recover (app); // simulate an error
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+
+ /* correctly parse URL */
+ gs_app_set_origin_hostname (app, "https://mirrors.fedoraproject.org/metalink");
+ g_assert_cmpstr (gs_app_get_origin_hostname (app), ==, "fedoraproject.org");
+ gs_app_set_origin_hostname (app, "file:///home/hughsie");
+ g_assert_cmpstr (gs_app_get_origin_hostname (app), ==, "localhost");
+
+ /* check setting the progress */
+ gs_app_set_progress (app, 42);
+ g_assert_cmpuint (gs_app_get_progress (app), ==, 42);
+ gs_app_set_progress (app, 0);
+ g_assert_cmpuint (gs_app_get_progress (app), ==, 0);
+ gs_app_set_progress (app, GS_APP_PROGRESS_UNKNOWN);
+ g_assert_cmpuint (gs_app_get_progress (app), ==, GS_APP_PROGRESS_UNKNOWN);
+ g_assert_false ((gint) 0 <= (gint) GS_APP_PROGRESS_UNKNOWN && GS_APP_PROGRESS_UNKNOWN <= 100);
+
+ /* check pending action */
+ g_assert_cmpuint (gs_app_get_pending_action (app), ==, GS_PLUGIN_ACTION_UNKNOWN);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_pending_action (app, GS_PLUGIN_ACTION_UPDATE);
+ g_assert_cmpuint (gs_app_get_pending_action (app), ==, GS_PLUGIN_ACTION_UPDATE);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ g_assert_cmpuint (gs_app_get_pending_action (app), ==, GS_PLUGIN_ACTION_UNKNOWN);
+ gs_app_set_state_recover (app);
+}
+
+static void
+gs_app_progress_clamping_func (void)
+{
+ g_autoptr(GsApp) app = NULL;
+
+ if (g_test_subprocess ()) {
+ app = gs_app_new ("gnome-software.desktop");
+ gs_app_set_progress (app, 142);
+ g_assert_cmpuint (gs_app_get_progress (app), ==, 100);
+ } else {
+ g_test_trap_subprocess (NULL, 0, 0);
+ g_test_trap_assert_failed ();
+ g_test_trap_assert_stderr ("*WARNING*cannot set 142% for *, setting instead: 100%*");
+ }
+}
+
+static void
+gs_app_list_wildcard_dedupe_func (void)
+{
+ g_autoptr(GsAppList) list = gs_app_list_new ();
+ g_autoptr(GsApp) app1 = gs_app_new ("app");
+ g_autoptr(GsApp) app2 = gs_app_new ("app");
+
+ gs_app_add_quirk (app1, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app1);
+ gs_app_add_quirk (app2, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app2);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+}
+
+static void
+gs_app_list_func (void)
+{
+ g_autoptr(GsAppList) list = gs_app_list_new ();
+ g_autoptr(GsApp) app1 = gs_app_new ("app1");
+ g_autoptr(GsApp) app2 = gs_app_new ("app2");
+
+ /* turn on */
+ gs_app_list_add_flag (list, GS_APP_LIST_FLAG_WATCH_APPS);
+
+ g_assert_cmpint (gs_app_list_get_progress (list), ==, 0);
+ g_assert_cmpint (gs_app_list_get_state (list), ==, AS_APP_STATE_UNKNOWN);
+ gs_app_list_add (list, app1);
+ gs_app_set_progress (app1, 75);
+ gs_app_set_state (app1, AS_APP_STATE_AVAILABLE);
+ gs_app_set_state (app1, AS_APP_STATE_INSTALLING);
+ gs_test_flush_main_context ();
+ g_assert_cmpint (gs_app_list_get_progress (list), ==, 75);
+ g_assert_cmpint (gs_app_list_get_state (list), ==, AS_APP_STATE_INSTALLING);
+
+ gs_app_list_add (list, app2);
+ gs_app_set_progress (app2, 25);
+ gs_test_flush_main_context ();
+ g_assert_cmpint (gs_app_list_get_progress (list), ==, 50);
+ g_assert_cmpint (gs_app_list_get_state (list), ==, AS_APP_STATE_INSTALLING);
+
+ gs_app_list_remove (list, app1);
+ g_assert_cmpint (gs_app_list_get_progress (list), ==, 25);
+ g_assert_cmpint (gs_app_list_get_state (list), ==, AS_APP_STATE_UNKNOWN);
+}
+
+static void
+gs_app_list_performance_func (void)
+{
+ g_autoptr(GPtrArray) apps = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ g_autoptr(GsAppList) list = gs_app_list_new ();
+ g_autoptr(GTimer) timer = NULL;
+
+ /* create a few apps */
+ for (guint i = 0; i < 500; i++) {
+ g_autofree gchar *id = g_strdup_printf ("%03u.desktop", i);
+ g_ptr_array_add (apps, gs_app_new (id));
+ }
+
+ /* add them to the list */
+ timer = g_timer_new ();
+ for (guint i = 0; i < apps->len; i++) {
+ GsApp *app = g_ptr_array_index (apps, i);
+ gs_app_list_add (list, app);
+ }
+ g_print ("%.2fms ", g_timer_elapsed (timer, NULL) * 1000);
+}
+
+static void
+gs_app_list_related_func (void)
+{
+ g_autoptr(GsAppList) list = gs_app_list_new ();
+ g_autoptr(GsApp) app = gs_app_new ("app");
+ g_autoptr(GsApp) related = gs_app_new ("related");
+
+ /* turn on */
+ gs_app_list_add_flag (list,
+ GS_APP_LIST_FLAG_WATCH_APPS |
+ GS_APP_LIST_FLAG_WATCH_APPS_RELATED);
+ gs_app_add_related (app, related);
+ gs_app_list_add (list, app);
+
+ gs_app_set_progress (app, 75);
+ gs_app_set_progress (related, 25);
+ gs_test_flush_main_context ();
+ g_assert_cmpint (gs_app_list_get_progress (list), ==, 50);
+}
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* tests go here */
+ g_test_add_func ("/gnome-software/lib/utils{url}", gs_utils_url_func);
+ g_test_add_func ("/gnome-software/lib/utils{wilson}", gs_utils_wilson_func);
+ g_test_add_func ("/gnome-software/lib/utils{error}", gs_utils_error_func);
+ g_test_add_func ("/gnome-software/lib/utils{cache}", gs_utils_cache_func);
+ g_test_add_func ("/gnome-software/lib/utils{append-kv}", gs_utils_append_kv_func);
+ g_test_add_func ("/gnome-software/lib/utils{parse-evr}", gs_utils_parse_evr_func);
+ g_test_add_func ("/gnome-software/lib/os-release", gs_os_release_func);
+ g_test_add_func ("/gnome-software/lib/app", gs_app_func);
+ g_test_add_func ("/gnome-software/lib/app/progress-clamping", gs_app_progress_clamping_func);
+ g_test_add_func ("/gnome-software/lib/app{addons}", gs_app_addons_func);
+ g_test_add_func ("/gnome-software/lib/app{unique-id}", gs_app_unique_id_func);
+ g_test_add_func ("/gnome-software/lib/app{thread}", gs_app_thread_func);
+ g_test_add_func ("/gnome-software/lib/app{list}", gs_app_list_func);
+ g_test_add_func ("/gnome-software/lib/app{list-wildcard-dedupe}", gs_app_list_wildcard_dedupe_func);
+ g_test_add_func ("/gnome-software/lib/app{list-performance}", gs_app_list_performance_func);
+ g_test_add_func ("/gnome-software/lib/app{list-related}", gs_app_list_related_func);
+ g_test_add_func ("/gnome-software/lib/plugin", gs_plugin_func);
+ g_test_add_func ("/gnome-software/lib/plugin{download-rewrite}", gs_plugin_download_rewrite_func);
+
+ return g_test_run ();
+}
diff --git a/lib/gs-test.c b/lib/gs-test.c
new file mode 100644
index 0000000..1f79e6a
--- /dev/null
+++ b/lib/gs-test.c
@@ -0,0 +1,71 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <stdlib.h>
+
+#include "gs-test.h"
+
+gchar *
+gs_test_get_filename (const gchar *testdatadir, const gchar *filename)
+{
+ gchar *tmp;
+ char full_tmp[PATH_MAX];
+ g_autofree gchar *path = NULL;
+ path = g_build_filename (testdatadir, filename, NULL);
+ g_debug ("looking in %s", path);
+ tmp = realpath (path, full_tmp);
+ if (tmp == NULL)
+ return NULL;
+ return g_strdup (full_tmp);
+}
+
+void
+gs_test_flush_main_context (void)
+{
+ guint cnt = 0;
+ while (g_main_context_iteration (NULL, FALSE)) {
+ if (cnt == 0)
+ g_debug ("clearing pending events...");
+ cnt++;
+ }
+ if (cnt > 0)
+ g_debug ("cleared %u events", cnt);
+}
+
+/**
+ * gs_test_expose_icon_theme_paths:
+ *
+ * Calculate and set the `GS_SELF_TEST_ICON_THEME_PATH` environment variable
+ * to include the current system icon theme paths. This is designed to be called
+ * before calling `g_test_init()` with `G_TEST_OPTION_ISOLATE_DIRS`, which will
+ * clear the system icon theme paths.
+ *
+ * As this function calls `g_setenv()`, it must not be called after threads have
+ * been spawned.
+ *
+ * Calling this function is an explicit acknowledgement that the code under test
+ * should be accessing the icon theme.
+ *
+ * Since: 3.38
+ */
+void
+gs_test_expose_icon_theme_paths (void)
+{
+ const gchar * const *data_dirs;
+ g_autoptr(GString) data_dirs_str = NULL;
+ g_autofree gchar *data_dirs_joined = NULL;
+
+ data_dirs = g_get_system_data_dirs ();
+ data_dirs_str = g_string_new ("");
+ for (gsize i = 0; data_dirs[i] != NULL; i++)
+ g_string_append_printf (data_dirs_str, "%s%s/icons",
+ (data_dirs_str->len > 0) ? ":" : "",
+ data_dirs[i]);
+ data_dirs_joined = g_string_free (g_steal_pointer (&data_dirs_str), FALSE);
+ g_setenv ("GS_SELF_TEST_ICON_THEME_PATH", data_dirs_joined, TRUE);
+}
diff --git a/lib/gs-test.h b/lib/gs-test.h
new file mode 100644
index 0000000..82a33b4
--- /dev/null
+++ b/lib/gs-test.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-app.h"
+
+G_BEGIN_DECLS
+
+void gs_test_flush_main_context (void);
+gchar *gs_test_get_filename (const gchar *testdatadir,
+ const gchar *filename);
+void gs_test_expose_icon_theme_paths (void);
+
+G_END_DECLS
diff --git a/lib/gs-utils.c b/lib/gs-utils.c
new file mode 100644
index 0000000..1ba5976
--- /dev/null
+++ b/lib/gs-utils.c
@@ -0,0 +1,1226 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-utils
+ * @title: GsUtils
+ * @include: gnome-software.h
+ * @stability: Unstable
+ * @short_description: Utilities that plugins can use
+ *
+ * These functions provide useful functionality that makes it easy to
+ * add new plugin functions.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <fnmatch.h>
+#include <math.h>
+#include <string.h>
+#include <glib/gstdio.h>
+#include <json-glib/json-glib.h>
+
+#if defined(__linux__)
+#include <sys/sysinfo.h>
+#elif defined(__FreeBSD__)
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#endif
+
+#ifdef HAVE_POLKIT
+#include <polkit/polkit.h>
+#endif
+
+#include "gs-app.h"
+#include "gs-utils.h"
+#include "gs-plugin.h"
+
+#define MB_IN_BYTES (1024 * 1024)
+
+/**
+ * gs_mkdir_parent:
+ * @path: A full pathname
+ * @error: A #GError, or %NULL
+ *
+ * Creates any required directories, including any parent directories.
+ *
+ * Returns: %TRUE for success
+ **/
+gboolean
+gs_mkdir_parent (const gchar *path, GError **error)
+{
+ g_autofree gchar *parent = NULL;
+
+ parent = g_path_get_dirname (path);
+ if (g_mkdir_with_parents (parent, 0755) == -1) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Failed to create '%s': %s",
+ parent, g_strerror (errno));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_utils_get_file_age:
+ * @file: A #GFile
+ *
+ * Gets a file age.
+ *
+ * Returns: The time in seconds since the file was modified, or %G_MAXUINT for error
+ */
+guint
+gs_utils_get_file_age (GFile *file)
+{
+ guint64 now;
+ guint64 mtime;
+ g_autoptr(GFileInfo) info = NULL;
+
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ NULL);
+ if (info == NULL)
+ return G_MAXUINT;
+ mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ now = (guint64) g_get_real_time () / G_USEC_PER_SEC;
+ if (mtime > now)
+ return G_MAXUINT;
+ if (now - mtime > G_MAXUINT)
+ return G_MAXUINT;
+ return (guint) (now - mtime);
+}
+
+static gchar *
+gs_utils_filename_array_return_newest (GPtrArray *array)
+{
+ const gchar *filename_best = NULL;
+ guint age_lowest = G_MAXUINT;
+ guint i;
+ for (i = 0; i < array->len; i++) {
+ const gchar *fn = g_ptr_array_index (array, i);
+ g_autoptr(GFile) file = g_file_new_for_path (fn);
+ guint age_tmp = gs_utils_get_file_age (file);
+ if (age_tmp < age_lowest) {
+ age_lowest = age_tmp;
+ filename_best = fn;
+ }
+ }
+ return g_strdup (filename_best);
+}
+
+/**
+ * gs_utils_get_cache_filename:
+ * @kind: A cache kind, e.g. "fwupd" or "screenshots/123x456"
+ * @resource: A resource, e.g. "system.bin" or "http://foo.bar/baz.bin"
+ * @flags: Some #GsUtilsCacheFlags, e.g. %GS_UTILS_CACHE_FLAG_WRITEABLE
+ * @error: A #GError, or %NULL
+ *
+ * Returns a filename that points into the cache.
+ * This may be per-system or per-user, the latter being more likely
+ * when %GS_UTILS_CACHE_FLAG_WRITEABLE is specified in @flags.
+ *
+ * If %GS_UTILS_CACHE_FLAG_USE_HASH is set in @flags then the returned filename
+ * will contain the hashed version of @resource.
+ *
+ * If there is more than one match, the file that has been modified last is
+ * returned.
+ *
+ * If a plugin requests a file to be saved in the cache it is the plugins
+ * responsibility to remove the file when it is no longer valid or is too old
+ * -- gnome-software will not ever clean the cache for the plugin.
+ * For this reason it is a good idea to use the plugin name as @kind.
+ *
+ * Returns: The full path and filename, which may or may not exist, or %NULL
+ **/
+gchar *
+gs_utils_get_cache_filename (const gchar *kind,
+ const gchar *resource,
+ GsUtilsCacheFlags flags,
+ GError **error)
+{
+ const gchar *tmp;
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *cachedir = NULL;
+ g_autoptr(GFile) cachedir_file = NULL;
+ g_autoptr(GPtrArray) candidates = g_ptr_array_new_with_free_func (g_free);
+
+ /* in the self tests */
+ tmp = g_getenv ("GS_SELF_TEST_CACHEDIR");
+ if (tmp != NULL)
+ return g_build_filename (tmp, kind, resource, NULL);
+
+ /* get basename */
+ if (flags & GS_UTILS_CACHE_FLAG_USE_HASH) {
+ g_autofree gchar *basename_tmp = g_path_get_basename (resource);
+ g_autofree gchar *hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1,
+ resource, -1);
+ basename = g_strdup_printf ("%s-%s", hash, basename_tmp);
+ } else {
+ basename = g_path_get_basename (resource);
+ }
+
+ /* not writable, so try the system cache first */
+ if ((flags & GS_UTILS_CACHE_FLAG_WRITEABLE) == 0) {
+ g_autofree gchar *cachefn = NULL;
+ cachefn = g_build_filename (LOCALSTATEDIR,
+ "cache",
+ "gnome-software",
+ kind,
+ basename,
+ NULL);
+ if (g_file_test (cachefn, G_FILE_TEST_EXISTS)) {
+ g_ptr_array_add (candidates,
+ g_steal_pointer (&cachefn));
+ }
+ }
+
+ /* not writable, so try the system cache first */
+ if ((flags & GS_UTILS_CACHE_FLAG_WRITEABLE) == 0) {
+ g_autofree gchar *cachefn = NULL;
+ cachefn = g_build_filename (DATADIR,
+ "gnome-software",
+ "cache",
+ kind,
+ basename,
+ NULL);
+ if (g_file_test (cachefn, G_FILE_TEST_EXISTS)) {
+ g_ptr_array_add (candidates,
+ g_steal_pointer (&cachefn));
+ }
+ }
+
+ /* create the cachedir in a per-release location, creating
+ * if it does not already exist */
+ cachedir = g_build_filename (g_get_user_cache_dir (),
+ "gnome-software",
+ kind,
+ NULL);
+ cachedir_file = g_file_new_for_path (cachedir);
+ if (g_file_query_exists (cachedir_file, NULL) &&
+ flags & GS_UTILS_CACHE_FLAG_ENSURE_EMPTY) {
+ if (!gs_utils_rmtree (cachedir, error))
+ return NULL;
+ }
+ if (!g_file_query_exists (cachedir_file, NULL) &&
+ !g_file_make_directory_with_parents (cachedir_file, NULL, error))
+ return NULL;
+ g_ptr_array_add (candidates, g_build_filename (cachedir, basename, NULL));
+
+ /* common case: we only have one option */
+ if (candidates->len == 1)
+ return g_strdup (g_ptr_array_index (candidates, 0));
+
+ /* return the newest (i.e. one with least age) */
+ return gs_utils_filename_array_return_newest (candidates);
+}
+
+/**
+ * gs_utils_get_user_hash:
+ * @error: A #GError, or %NULL
+ *
+ * This SHA1 hash is composed of the contents of machine-id and your
+ * username and is also salted with a hardcoded value.
+ *
+ * This provides an identifier that can be used to identify a specific
+ * user on a machine, allowing them to cast only one vote or perform
+ * one review on each application.
+ *
+ * There is no known way to calculate the machine ID or username from
+ * the machine hash and there should be no privacy issue.
+ *
+ * Returns: The user hash, or %NULL on error
+ */
+gchar *
+gs_utils_get_user_hash (GError **error)
+{
+ g_autofree gchar *data = NULL;
+ g_autofree gchar *salted = NULL;
+
+ if (!g_file_get_contents ("/etc/machine-id", &data, NULL, error))
+ return NULL;
+
+ salted = g_strdup_printf ("gnome-software[%s:%s]",
+ g_get_user_name (), data);
+ return g_compute_checksum_for_string (G_CHECKSUM_SHA1, salted, -1);
+}
+
+/**
+ * gs_utils_get_permission:
+ * @id: A PolicyKit ID, e.g. "org.gnome.Desktop"
+ * @cancellable: A #GCancellable, or %NULL
+ * @error: A #GError, or %NULL
+ *
+ * Gets a permission object for an ID.
+ *
+ * Returns: a #GPermission, or %NULL if this if not possible.
+ **/
+GPermission *
+gs_utils_get_permission (const gchar *id, GCancellable *cancellable, GError **error)
+{
+#ifdef HAVE_POLKIT
+ g_autoptr(GPermission) permission = NULL;
+ permission = polkit_permission_new_sync (id, NULL, cancellable, error);
+ if (permission == NULL) {
+ g_prefix_error (error, "failed to create permission %s: ", id);
+ gs_utils_error_convert_gio (error);
+ return NULL;
+ }
+ return g_steal_pointer (&permission);
+#else
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no PolicyKit, so can't return GPermission for %s", id);
+ return NULL;
+#endif
+}
+
+/**
+ * gs_utils_get_content_type:
+ * @file: A GFile
+ * @cancellable: A #GCancellable, or %NULL
+ * @error: A #GError, or %NULL
+ *
+ * Gets the standard content type for a file.
+ *
+ * Returns: the content type, or %NULL, e.g. "text/plain"
+ */
+gchar *
+gs_utils_get_content_type (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *tmp;
+ g_autoptr(GFileInfo) info = NULL;
+
+ /* get content type */
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ G_FILE_QUERY_INFO_NONE,
+ cancellable,
+ error);
+ if (info == NULL)
+ return NULL;
+ tmp = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
+ if (tmp == NULL)
+ return NULL;
+ return g_strdup (tmp);
+}
+
+/**
+ * gs_utils_strv_fnmatch:
+ * @strv: A NUL-terminated list of strings
+ * @str: A string
+ *
+ * Matches a string against a list of globs.
+ *
+ * Returns: %TRUE if the list matches
+ */
+gboolean
+gs_utils_strv_fnmatch (gchar **strv, const gchar *str)
+{
+ guint i;
+
+ /* empty */
+ if (strv == NULL)
+ return FALSE;
+
+ /* look at each one */
+ for (i = 0; strv[i] != NULL; i++) {
+ if (fnmatch (strv[i], str, 0) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * gs_utils_sort_key:
+ * @str: A string to convert to a sort key
+ *
+ * Useful to sort strings in a locale-sensitive, presentational way.
+ * Case is ignored and utf8 collation is used (e.g. accents are ignored).
+ *
+ * Returns: a newly allocated string sort key
+ */
+gchar *
+gs_utils_sort_key (const gchar *str)
+{
+ g_autofree gchar *casefolded = g_utf8_casefold (str, -1);
+ return g_utf8_collate_key (casefolded, -1);
+}
+
+/**
+ * gs_utils_sort_strcmp:
+ * @str1: (nullable): A string to compare
+ * @str2: (nullable): A string to compare
+ *
+ * Compares two strings in a locale-sensitive, presentational way.
+ * Case is ignored and utf8 collation is used (e.g. accents are ignored). %NULL
+ * is sorted before all non-%NULL strings, and %NULLs compare equal.
+ *
+ * Returns: < 0 if str1 is before str2, 0 if equal, > 0 if str1 is after str2
+ */
+gint
+gs_utils_sort_strcmp (const gchar *str1, const gchar *str2)
+{
+ g_autofree gchar *key1 = (str1 != NULL) ? gs_utils_sort_key (str1) : NULL;
+ g_autofree gchar *key2 = (str2 != NULL) ? gs_utils_sort_key (str2) : NULL;
+ return g_strcmp0 (key1, key2);
+}
+
+/**
+ * gs_utils_get_desktop_app_info:
+ * @id: A desktop ID, e.g. "gimp.desktop"
+ *
+ * Gets a a #GDesktopAppInfo taking into account the kde4- prefix.
+ * If the given @id doesn not have a ".desktop" suffix, it will add one to it
+ * for convenience.
+ *
+ * Returns: a #GDesktopAppInfo for a specific ID, or %NULL
+ */
+GDesktopAppInfo *
+gs_utils_get_desktop_app_info (const gchar *id)
+{
+ GDesktopAppInfo *app_info;
+ g_autofree gchar *desktop_id = NULL;
+
+ /* for convenience, if the given id doesn't have the required .desktop
+ * suffix, we add it here */
+ if (!g_str_has_suffix (id, ".desktop")) {
+ desktop_id = g_strconcat (id, ".desktop", NULL);
+ id = desktop_id;
+ }
+
+ /* try to get the standard app-id */
+ app_info = g_desktop_app_info_new (id);
+
+ /* KDE is a special project because it believes /usr/share/applications
+ * isn't KDE enough. For this reason we support falling back to the
+ * "kde4-" prefixed ID to avoid educating various self-righteous
+ * upstreams about the correct ID to use in the AppData file. */
+ if (app_info == NULL) {
+ g_autofree gchar *kde_id = NULL;
+ kde_id = g_strdup_printf ("%s-%s", "kde4", id);
+ app_info = g_desktop_app_info_new (kde_id);
+ }
+
+ return app_info;
+}
+
+/**
+ * gs_utils_symlink:
+ * @target: the full path of the symlink to create
+ * @linkpath: where the symlink should point to
+ * @error: A #GError, or %NULL
+ *
+ * Creates a symlink that can cross filesystem boundaries.
+ * Any parent directories needed for target to exist are also created.
+ *
+ * Returns: %TRUE for success
+ **/
+gboolean
+gs_utils_symlink (const gchar *target, const gchar *linkpath, GError **error)
+{
+ if (!gs_mkdir_parent (target, error))
+ return FALSE;
+ if (symlink (target, linkpath) != 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_WRITE_FAILED,
+ "failed to create symlink from %s to %s",
+ linkpath, target);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_utils_unlink:
+ * @filename: A full pathname to delete
+ * @error: A #GError, or %NULL
+ *
+ * Deletes a file from disk.
+ *
+ * Returns: %TRUE for success
+ **/
+gboolean
+gs_utils_unlink (const gchar *filename, GError **error)
+{
+ if (g_unlink (filename) != 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DELETE_FAILED,
+ "failed to delete %s",
+ filename);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_utils_rmtree_real (const gchar *directory, GError **error)
+{
+ const gchar *filename;
+ g_autoptr(GDir) dir = NULL;
+
+ /* try to open */
+ dir = g_dir_open (directory, 0, error);
+ if (dir == NULL)
+ return FALSE;
+
+ /* find each */
+ while ((filename = g_dir_read_name (dir))) {
+ g_autofree gchar *src = NULL;
+ src = g_build_filename (directory, filename, NULL);
+ if (g_file_test (src, G_FILE_TEST_IS_DIR) &&
+ !g_file_test (src, G_FILE_TEST_IS_SYMLINK)) {
+ if (!gs_utils_rmtree_real (src, error))
+ return FALSE;
+ } else {
+ if (g_unlink (src) != 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DELETE_FAILED,
+ "Failed to delete: %s", src);
+ return FALSE;
+ }
+ }
+ }
+
+ if (g_rmdir (directory) != 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DELETE_FAILED,
+ "Failed to remove: %s", directory);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_utils_rmtree:
+ * @directory: A full directory pathname to delete
+ * @error: A #GError, or %NULL
+ *
+ * Deletes a directory from disk and all its contents.
+ *
+ * Returns: %TRUE for success
+ **/
+gboolean
+gs_utils_rmtree (const gchar *directory, GError **error)
+{
+ g_debug ("recursively removing directory '%s'", directory);
+ return gs_utils_rmtree_real (directory, error);
+}
+
+static gdouble
+pnormaldist (gdouble qn)
+{
+ static gdouble b[11] = { 1.570796288, 0.03706987906, -0.8364353589e-3,
+ -0.2250947176e-3, 0.6841218299e-5, 0.5824238515e-5,
+ -0.104527497e-5, 0.8360937017e-7, -0.3231081277e-8,
+ 0.3657763036e-10, 0.6936233982e-12 };
+ gdouble w1, w3;
+ guint i;
+
+ if (qn < 0 || qn > 1)
+ return 0; // This is an error case
+ if (qn == 0.5)
+ return 0;
+
+ w1 = qn;
+ if (qn > 0.5)
+ w1 = 1.0 - w1;
+ w3 = -log (4.0 * w1 * (1.0 - w1));
+ w1 = b[0];
+ for (i = 1; i < 11; i++)
+ w1 = w1 + (b[i] * pow (w3, i));
+
+ if (qn > 0.5)
+ return sqrt (w1 * w3);
+ else
+ return -sqrt (w1 * w3);
+}
+
+static gdouble
+wilson_score (gdouble value, gdouble n, gdouble power)
+{
+ gdouble z, phat;
+ if (value == 0)
+ return 0;
+ z = pnormaldist (1 - power / 2);
+ phat = value / n;
+ return (phat + z * z / (2 * n) -
+ z * sqrt ((phat * (1 - phat) + z * z / (4 * n)) / n)) /
+ (1 + z * z / n);
+}
+
+/**
+ * gs_utils_get_wilson_rating:
+ * @star1: The number of 1 star reviews
+ * @star2: The number of 2 star reviews
+ * @star3: The number of 3 star reviews
+ * @star4: The number of 4 star reviews
+ * @star5: The number of 5 star reviews
+ *
+ * Returns the lower bound of Wilson score confidence interval for a
+ * Bernoulli parameter. This ensures small numbers of ratings don't give overly
+ * high scores.
+ * See https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval
+ * for details.
+ *
+ * Returns: Wilson rating percentage, or -1 for error
+ **/
+gint
+gs_utils_get_wilson_rating (guint64 star1,
+ guint64 star2,
+ guint64 star3,
+ guint64 star4,
+ guint64 star5)
+{
+ gdouble val;
+ guint64 star_sum = star1 + star2 + star3 + star4 + star5;
+ if (star_sum == 0)
+ return -1;
+
+ /* get score */
+ val = (wilson_score ((gdouble) star1, (gdouble) star_sum, 0.2) * -2);
+ val += (wilson_score ((gdouble) star2, (gdouble) star_sum, 0.2) * -1);
+ val += (wilson_score ((gdouble) star4, (gdouble) star_sum, 0.2) * 1);
+ val += (wilson_score ((gdouble) star5, (gdouble) star_sum, 0.2) * 2);
+
+ /* normalize from -2..+2 to 0..5 */
+ val += 3;
+
+ /* multiply to a percentage */
+ val *= 20;
+
+ /* return rounded up integer */
+ return (gint) ceil (val);
+}
+
+/**
+ * gs_utils_error_add_app_id:
+ * @error: a #GError
+ * @app: a #GsApp
+ *
+ * Adds app unique ID prefix to the error.
+ *
+ * Since: 3.30
+ **/
+void
+gs_utils_error_add_app_id (GError **error, GsApp *app)
+{
+ g_return_if_fail (GS_APP (app));
+ if (error == NULL || *error == NULL)
+ return;
+ g_prefix_error (error, "{%s} ", gs_app_get_unique_id (app));
+}
+
+/**
+ * gs_utils_error_add_origin_id:
+ * @error: a #GError
+ * @origin: a #GsApp
+ *
+ * Adds origin unique ID prefix to the error.
+ *
+ * Since: 3.30
+ **/
+void
+gs_utils_error_add_origin_id (GError **error, GsApp *origin)
+{
+ g_return_if_fail (GS_APP (origin));
+ if (error == NULL || *error == NULL)
+ return;
+ g_prefix_error (error, "[%s] ", gs_app_get_unique_id (origin));
+}
+
+/**
+ * gs_utils_error_strip_app_id:
+ * @error: a #GError
+ *
+ * Removes a possible app ID prefix from the error, and returns the removed
+ * app ID.
+ *
+ * Returns: A newly allocated string with the app ID
+ *
+ * Since: 3.30
+ **/
+gchar *
+gs_utils_error_strip_app_id (GError *error)
+{
+ g_autofree gchar *app_id = NULL;
+ g_autofree gchar *msg = NULL;
+
+ if (error == NULL || error->message == NULL)
+ return FALSE;
+
+ if (g_str_has_prefix (error->message, "{")) {
+ const gchar *endp = strstr (error->message + 1, "} ");
+ if (endp != NULL) {
+ app_id = g_strndup (error->message + 1,
+ endp - (error->message + 1));
+ msg = g_strdup (endp + 2);
+ }
+ }
+
+ if (msg != NULL) {
+ g_free (error->message);
+ error->message = g_steal_pointer (&msg);
+ }
+
+ return g_steal_pointer (&app_id);
+}
+
+/**
+ * gs_utils_error_strip_origin_id:
+ * @error: a #GError
+ *
+ * Removes a possible origin ID prefix from the error, and returns the removed
+ * origin ID.
+ *
+ * Returns: A newly allocated string with the origin ID
+ *
+ * Since: 3.30
+ **/
+gchar *
+gs_utils_error_strip_origin_id (GError *error)
+{
+ g_autofree gchar *origin_id = NULL;
+ g_autofree gchar *msg = NULL;
+
+ if (error == NULL || error->message == NULL)
+ return FALSE;
+
+ if (g_str_has_prefix (error->message, "[")) {
+ const gchar *endp = strstr (error->message + 1, "] ");
+ if (endp != NULL) {
+ origin_id = g_strndup (error->message + 1,
+ endp - (error->message + 1));
+ msg = g_strdup (endp + 2);
+ }
+ }
+
+ if (msg != NULL) {
+ g_free (error->message);
+ error->message = g_steal_pointer (&msg);
+ }
+
+ return g_steal_pointer (&origin_id);
+}
+
+/**
+ * gs_utils_error_convert_gdbus:
+ * @perror: a pointer to a #GError, or %NULL
+ *
+ * Converts the #GDBusError to an error with a GsPluginError domain.
+ *
+ * Returns: %TRUE if the error was converted, or already correct
+ **/
+gboolean
+gs_utils_error_convert_gdbus (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return FALSE;
+ if (error->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+ if (error->domain != G_DBUS_ERROR)
+ return FALSE;
+ switch (error->code) {
+ case G_DBUS_ERROR_FAILED:
+ case G_DBUS_ERROR_NO_REPLY:
+ case G_DBUS_ERROR_TIMEOUT:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ case G_DBUS_ERROR_IO_ERROR:
+ case G_DBUS_ERROR_NAME_HAS_NO_OWNER:
+ case G_DBUS_ERROR_NOT_SUPPORTED:
+ case G_DBUS_ERROR_SERVICE_UNKNOWN:
+ case G_DBUS_ERROR_UNKNOWN_INTERFACE:
+ case G_DBUS_ERROR_UNKNOWN_METHOD:
+ case G_DBUS_ERROR_UNKNOWN_OBJECT:
+ case G_DBUS_ERROR_UNKNOWN_PROPERTY:
+ error->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ case G_DBUS_ERROR_NO_MEMORY:
+ error->code = GS_PLUGIN_ERROR_NO_SPACE;
+ break;
+ case G_DBUS_ERROR_ACCESS_DENIED:
+ case G_DBUS_ERROR_AUTH_FAILED:
+ error->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ break;
+ case G_DBUS_ERROR_NO_NETWORK:
+ error->code = GS_PLUGIN_ERROR_NO_NETWORK;
+ break;
+ case G_DBUS_ERROR_INVALID_FILE_CONTENT:
+ error->code = GS_PLUGIN_ERROR_INVALID_FORMAT;
+ break;
+ default:
+ g_warning ("can't reliably fixup error code %i in domain %s",
+ error->code, g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+/**
+ * gs_utils_error_convert_gio:
+ * @perror: a pointer to a #GError, or %NULL
+ *
+ * Converts the #GIOError to an error with a GsPluginError domain.
+ *
+ * Returns: %TRUE if the error was converted, or already correct
+ **/
+gboolean
+gs_utils_error_convert_gio (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return FALSE;
+ if (error->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+ if (error->domain != G_IO_ERROR)
+ return FALSE;
+ switch (error->code) {
+ case G_IO_ERROR_FAILED:
+ case G_IO_ERROR_NOT_FOUND:
+ case G_IO_ERROR_EXISTS:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ case G_IO_ERROR_TIMED_OUT:
+ error->code = GS_PLUGIN_ERROR_TIMED_OUT;
+ break;
+ case G_IO_ERROR_NOT_SUPPORTED:
+ error->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ case G_IO_ERROR_CANCELLED:
+ error->code = GS_PLUGIN_ERROR_CANCELLED;
+ break;
+ case G_IO_ERROR_NO_SPACE:
+ error->code = GS_PLUGIN_ERROR_NO_SPACE;
+ break;
+ case G_IO_ERROR_PERMISSION_DENIED:
+ error->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ break;
+ case G_IO_ERROR_HOST_NOT_FOUND:
+ case G_IO_ERROR_HOST_UNREACHABLE:
+ case G_IO_ERROR_CONNECTION_REFUSED:
+ case G_IO_ERROR_PROXY_FAILED:
+ case G_IO_ERROR_PROXY_AUTH_FAILED:
+ case G_IO_ERROR_PROXY_NOT_ALLOWED:
+ error->code = GS_PLUGIN_ERROR_DOWNLOAD_FAILED;
+ break;
+ case G_IO_ERROR_NETWORK_UNREACHABLE:
+ error->code = GS_PLUGIN_ERROR_NO_NETWORK;
+ break;
+ default:
+ g_warning ("can't reliably fixup error code %i in domain %s",
+ error->code, g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+/**
+ * gs_utils_error_convert_gresolver:
+ * @perror: a pointer to a #GError, or %NULL
+ *
+ * Converts the #GResolverError to an error with a GsPluginError domain.
+ *
+ * Returns: %TRUE if the error was converted, or already correct
+ **/
+gboolean
+gs_utils_error_convert_gresolver (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return FALSE;
+ if (error->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+ if (error->domain != G_RESOLVER_ERROR)
+ return FALSE;
+ switch (error->code) {
+ case G_RESOLVER_ERROR_INTERNAL:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ case G_RESOLVER_ERROR_NOT_FOUND:
+ case G_RESOLVER_ERROR_TEMPORARY_FAILURE:
+ error->code = GS_PLUGIN_ERROR_DOWNLOAD_FAILED;
+ break;
+ default:
+ g_warning ("can't reliably fixup error code %i in domain %s",
+ error->code, g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+/**
+ * gs_utils_error_convert_gdk_pixbuf:
+ * @perror: a pointer to a #GError, or %NULL
+ *
+ * Converts the #GdkPixbufError to an error with a GsPluginError domain.
+ *
+ * Returns: %TRUE if the error was converted, or already correct
+ **/
+gboolean
+gs_utils_error_convert_gdk_pixbuf (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return FALSE;
+ if (error->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+ if (error->domain != GDK_PIXBUF_ERROR)
+ return FALSE;
+ switch (error->code) {
+ case GDK_PIXBUF_ERROR_UNSUPPORTED_OPERATION:
+ case GDK_PIXBUF_ERROR_UNKNOWN_TYPE:
+ error->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ case GDK_PIXBUF_ERROR_FAILED:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ case GDK_PIXBUF_ERROR_CORRUPT_IMAGE:
+ error->code = GS_PLUGIN_ERROR_INVALID_FORMAT;
+ break;
+ default:
+ g_warning ("can't reliably fixup error code %i in domain %s",
+ error->code, g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+/**
+ * gs_utils_error_convert_json_glib:
+ * @perror: a pointer to a #GError, or %NULL
+ *
+ * Converts the #JsonParserError to an error with a GsPluginError domain.
+ *
+ * Returns: %TRUE if the error was converted, or already correct
+ **/
+gboolean
+gs_utils_error_convert_json_glib (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return FALSE;
+ if (error->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+ if (error->domain != JSON_PARSER_ERROR)
+ return FALSE;
+ switch (error->code) {
+ case JSON_PARSER_ERROR_UNKNOWN:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ default:
+ error->code = GS_PLUGIN_ERROR_INVALID_FORMAT;
+ break;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+/**
+ * gs_utils_error_convert_appstream:
+ * @perror: a pointer to a #GError, or %NULL
+ *
+ * Converts the various AppStream error types to an error with a GsPluginError
+ * domain.
+ *
+ * Returns: %TRUE if the error was converted, or already correct
+ **/
+gboolean
+gs_utils_error_convert_appstream (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return FALSE;
+ if (error->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+
+ /* custom to this plugin */
+ if (error->domain == AS_UTILS_ERROR) {
+ switch (error->code) {
+ case AS_UTILS_ERROR_INVALID_TYPE:
+ error->code = GS_PLUGIN_ERROR_INVALID_FORMAT;
+ break;
+ case AS_UTILS_ERROR_FAILED:
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else if (error->domain == AS_STORE_ERROR) {
+ switch (error->code) {
+ case AS_UTILS_ERROR_FAILED:
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else if (error->domain == AS_ICON_ERROR) {
+ switch (error->code) {
+ case AS_ICON_ERROR_FAILED:
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else if (error->domain == G_FILE_ERROR) {
+ switch (error->code) {
+ case G_FILE_ERROR_EXIST:
+ case G_FILE_ERROR_ACCES:
+ case G_FILE_ERROR_PERM:
+ error->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ break;
+ case G_FILE_ERROR_NOSPC:
+ error->code = GS_PLUGIN_ERROR_NO_SPACE;
+ break;
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else {
+ g_warning ("can't reliably fixup error from domain %s",
+ g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+/**
+ * gs_utils_get_url_scheme:
+ * @url: A URL, e.g. "appstream://gimp.desktop"
+ *
+ * Gets the scheme from the URL string.
+ *
+ * Returns: the URL scheme, e.g. "appstream"
+ */
+gchar *
+gs_utils_get_url_scheme (const gchar *url)
+{
+ g_autoptr(SoupURI) uri = NULL;
+
+ /* no data */
+ if (url == NULL)
+ return NULL;
+
+ /* create URI from URL */
+ uri = soup_uri_new (url);
+ if (!SOUP_URI_IS_VALID (uri))
+ return NULL;
+
+ /* success */
+ return g_strdup (soup_uri_get_scheme (uri));
+}
+
+/**
+ * gs_utils_get_url_path:
+ * @url: A URL, e.g. "appstream://gimp.desktop"
+ *
+ * Gets the path from the URL string, removing any leading slashes.
+ *
+ * Returns: the URL path, e.g. "gimp.desktop"
+ */
+gchar *
+gs_utils_get_url_path (const gchar *url)
+{
+ g_autoptr(SoupURI) uri = NULL;
+ const gchar *host;
+ const gchar *path;
+
+ uri = soup_uri_new (url);
+ if (!SOUP_URI_IS_VALID (uri))
+ return NULL;
+
+ /* foo://bar -> scheme: foo, host: bar, path: / */
+ /* foo:bar -> scheme: foo, host: (empty string), path: /bar */
+ host = soup_uri_get_host (uri);
+ path = soup_uri_get_path (uri);
+ if (host != NULL && (strlen (host) > 0))
+ path = host;
+
+ /* trim any leading slashes */
+ while (*path == '/')
+ path++;
+
+ /* success */
+ return g_strdup (path);
+}
+
+/**
+ * gs_user_agent:
+ *
+ * Gets the user agent to use for remote requests.
+ *
+ * Returns: the user-agent, e.g. "gnome-software/3.22.1"
+ */
+const gchar *
+gs_user_agent (void)
+{
+ return PACKAGE_NAME "/" PACKAGE_VERSION;
+}
+
+/**
+ * gs_utils_append_key_value:
+ * @str: A #GString
+ * @align_len: The alignment of the @value compared to the @key
+ * @key: The text to use as a title
+ * @value: The text to use as a value
+ *
+ * Adds a line to an existing string, padding the key to a set number of spaces.
+ *
+ * Since: 3.26
+ */
+void
+gs_utils_append_key_value (GString *str, gsize align_len,
+ const gchar *key, const gchar *value)
+{
+ gsize len = 0;
+
+ g_return_if_fail (str != NULL);
+ g_return_if_fail (value != NULL);
+
+ if (key != NULL) {
+ len = strlen (key) + 2;
+ g_string_append (str, key);
+ g_string_append (str, ": ");
+ }
+ for (gsize i = len; i < align_len + 1; i++)
+ g_string_append (str, " ");
+ g_string_append (str, value);
+ g_string_append (str, "\n");
+}
+
+guint
+gs_utils_get_memory_total (void)
+{
+#if defined(__linux__)
+ struct sysinfo si = { 0 };
+ sysinfo (&si);
+ if (si.mem_unit > 0)
+ return si.totalram / MB_IN_BYTES / si.mem_unit;
+ return 0;
+#elif defined(__FreeBSD__)
+ unsigned long physmem;
+ sysctl ((int[]){ CTL_HW, HW_PHYSMEM }, 2, &physmem, &(size_t){ sizeof (physmem) }, NULL, 0);
+ return physmem / MB_IN_BYTES;
+#else
+#error "Please implement gs_utils_get_memory_total for your system."
+#endif
+}
+
+/**
+ * gs_utils_parse_evr:
+ * @evr: an EVR version string
+ * @out_epoch: (out): return location for the epoch string
+ * @out_version: (out): return location for the version string
+ * @out_release: (out): return location for the release string
+ *
+ * Splits EVR into epoch-version-release strings.
+ *
+ * Returns: %TRUE for success
+ **/
+gboolean
+gs_utils_parse_evr (const gchar *evr,
+ gchar **out_epoch,
+ gchar **out_version,
+ gchar **out_release)
+{
+ const gchar *version_release;
+ g_auto(GStrv) split_colon = NULL;
+ g_auto(GStrv) split_dash = NULL;
+
+ /* split on : to get epoch */
+ split_colon = g_strsplit (evr, ":", -1);
+ switch (g_strv_length (split_colon)) {
+ case 1:
+ /* epoch is 0 when not set */
+ *out_epoch = g_strdup ("0");
+ version_release = split_colon[0];
+ break;
+ case 2:
+ /* epoch set */
+ *out_epoch = g_strdup (split_colon[0]);
+ version_release = split_colon[1];
+ break;
+ default:
+ /* error */
+ return FALSE;
+ }
+
+ /* split on - to get version and release */
+ split_dash = g_strsplit (version_release, "-", -1);
+ switch (g_strv_length (split_dash)) {
+ case 1:
+ /* all of the string is version */
+ *out_version = g_strdup (split_dash[0]);
+ *out_release = g_strdup ("0");
+ break;
+ case 2:
+ /* both version and release set */
+ *out_version = g_strdup (split_dash[0]);
+ *out_release = g_strdup (split_dash[1]);
+ break;
+ default:
+ /* error */
+ return FALSE;
+ }
+
+ g_assert (*out_epoch != NULL);
+ g_assert (*out_version != NULL);
+ g_assert (*out_release != NULL);
+ return TRUE;
+}
+
+/**
+ * gs_utils_set_online_updates_timestamp:
+ *
+ * Sets the value of online-updates-timestamp to current epoch. "online-updates-timestamp" represents
+ * the last time the system was online and got any updates.
+ *
+ **/
+void
+gs_utils_set_online_updates_timestamp (GSettings *settings)
+{
+ g_autoptr(GDateTime) now = NULL;
+
+ g_return_if_fail (settings != NULL);
+
+ now = g_date_time_new_now_local ();
+ g_settings_set (settings, "online-updates-timestamp", "x", g_date_time_to_unix (now));
+}
+
+/* vim: set noexpandtab: */
diff --git a/lib/gs-utils.h b/lib/gs-utils.h
new file mode 100644
index 0000000..3964f00
--- /dev/null
+++ b/lib/gs-utils.h
@@ -0,0 +1,96 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gio/gdesktopappinfo.h>
+#include <gtk/gtk.h>
+
+#include "gs-app.h"
+
+G_BEGIN_DECLS
+
+/**
+ * GsUtilsCacheFlags:
+ * @GS_UTILS_CACHE_FLAG_NONE: No flags set
+ * @GS_UTILS_CACHE_FLAG_WRITEABLE: A writable directory is required
+ * @GS_UTILS_CACHE_FLAG_USE_HASH: Prefix a hash to the filename
+ * @GS_UTILS_CACHE_FLAG_ENSURE_EMPTY: Clear existing cached items
+ *
+ * The cache flags.
+ **/
+typedef enum {
+ GS_UTILS_CACHE_FLAG_NONE = 0,
+ GS_UTILS_CACHE_FLAG_WRITEABLE = 1 << 0,
+ GS_UTILS_CACHE_FLAG_USE_HASH = 1 << 1,
+ GS_UTILS_CACHE_FLAG_ENSURE_EMPTY = 1 << 2,
+ /*< private >*/
+ GS_UTILS_CACHE_FLAG_LAST
+} GsUtilsCacheFlags;
+
+guint gs_utils_get_file_age (GFile *file);
+gchar *gs_utils_get_content_type (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_utils_symlink (const gchar *target,
+ const gchar *linkpath,
+ GError **error);
+gboolean gs_utils_unlink (const gchar *filename,
+ GError **error);
+gboolean gs_mkdir_parent (const gchar *path,
+ GError **error);
+gchar *gs_utils_get_cache_filename (const gchar *kind,
+ const gchar *resource,
+ GsUtilsCacheFlags flags,
+ GError **error);
+gchar *gs_utils_get_user_hash (GError **error);
+GPermission *gs_utils_get_permission (const gchar *id,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_utils_strv_fnmatch (gchar **strv,
+ const gchar *str);
+gchar *gs_utils_sort_key (const gchar *str);
+gint gs_utils_sort_strcmp (const gchar *str1,
+ const gchar *str2);
+GDesktopAppInfo *gs_utils_get_desktop_app_info (const gchar *id);
+gboolean gs_utils_rmtree (const gchar *directory,
+ GError **error);
+gint gs_utils_get_wilson_rating (guint64 star1,
+ guint64 star2,
+ guint64 star3,
+ guint64 star4,
+ guint64 star5);
+void gs_utils_error_add_app_id (GError **error,
+ GsApp *app);
+void gs_utils_error_add_origin_id (GError **error,
+ GsApp *origin);
+gchar *gs_utils_error_strip_app_id (GError *error);
+gchar *gs_utils_error_strip_origin_id (GError *error);
+gboolean gs_utils_error_convert_gio (GError **perror);
+gboolean gs_utils_error_convert_gresolver (GError **perror);
+gboolean gs_utils_error_convert_gdbus (GError **perror);
+gboolean gs_utils_error_convert_gdk_pixbuf(GError **perror);
+gboolean gs_utils_error_convert_json_glib (GError **perror);
+gboolean gs_utils_error_convert_appstream (GError **perror);
+
+gchar *gs_utils_get_url_scheme (const gchar *url);
+gchar *gs_utils_get_url_path (const gchar *url);
+const gchar *gs_user_agent (void);
+void gs_utils_append_key_value (GString *str,
+ gsize align_len,
+ const gchar *key,
+ const gchar *value);
+guint gs_utils_get_memory_total (void);
+gboolean gs_utils_parse_evr (const gchar *evr,
+ gchar **out_epoch,
+ gchar **out_version,
+ gchar **out_release);
+void gs_utils_set_online_updates_timestamp (GSettings *settings);
+
+G_END_DECLS
diff --git a/lib/meson.build b/lib/meson.build
new file mode 100644
index 0000000..0ef4936
--- /dev/null
+++ b/lib/meson.build
@@ -0,0 +1,142 @@
+cargs = ['-DG_LOG_DOMAIN="Gs"']
+cargs += ['-DLOCALPLUGINDIR=""']
+
+install_headers([
+ 'gnome-software.h',
+ 'gs-app.h',
+ 'gs-app-collation.h',
+ 'gs-app-list.h',
+ 'gs-autocleanups.h',
+ 'gs-category.h',
+ 'gs-ioprio.h',
+ 'gs-metered.h',
+ 'gs-os-release.h',
+ 'gs-plugin.h',
+ 'gs-plugin-event.h',
+ 'gs-plugin-job.h',
+ 'gs-plugin-loader.h',
+ 'gs-plugin-loader-sync.h',
+ 'gs-plugin-types.h',
+ 'gs-plugin-vfuncs.h',
+ 'gs-utils.h'
+ ],
+ subdir : 'gnome-software'
+)
+
+librarydeps = [
+ appstream_glib,
+ gio_unix,
+ glib,
+ gmodule,
+ goa,
+ gtk,
+ json_glib,
+ libm,
+ libsoup,
+ libsysprof_capture_dep,
+ valgrind,
+]
+
+if get_option('mogwai')
+ librarydeps += mogwai_schedule_client
+endif
+
+if get_option('polkit')
+ librarydeps += polkit
+endif
+
+libgnomesoftware = static_library(
+ 'gnomesoftware',
+ sources : [
+ 'gs-app.c',
+ 'gs-app-list.c',
+ 'gs-category.c',
+ 'gs-debug.c',
+ 'gs-ioprio.c',
+ 'gs-ioprio.h',
+ 'gs-metered.c',
+ 'gs-os-release.c',
+ 'gs-plugin.c',
+ 'gs-plugin-event.c',
+ 'gs-plugin-job.c',
+ 'gs-plugin-loader.c',
+ 'gs-plugin-loader-sync.c',
+ 'gs-test.c',
+ 'gs-utils.c',
+ ],
+ include_directories : [
+ include_directories('..'),
+ ],
+ dependencies : librarydeps,
+ c_args : cargs,
+ install: true,
+)
+
+pkg = import('pkgconfig')
+
+pkg.generate(
+ libgnomesoftware,
+ description : 'GNOME Software is a software center for GNOME',
+ filebase : 'gnome-software',
+ name : 'gnome-software',
+ subdirs : 'gnome-software',
+ variables : 'plugindir=${libdir}/gs-plugins-' + gs_plugin_api_version,
+)
+
+executable(
+ 'gnome-software-cmd',
+ sources : [
+ 'gs-cmd.c',
+ ],
+ include_directories : [
+ include_directories('..'),
+ ],
+ dependencies : [
+ appstream_glib,
+ gio_unix,
+ glib,
+ gmodule,
+ goa,
+ gtk,
+ json_glib,
+ libm,
+ libsoup,
+ valgrind,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ install : true,
+ install_dir : get_option('libexecdir')
+)
+
+if get_option('tests')
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), '..', 'data') + '"']
+ e = executable(
+ 'gs-self-test',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('..'),
+ ],
+ dependencies : [
+ appstream_glib,
+ gio_unix,
+ glib,
+ gmodule,
+ goa,
+ gtk,
+ json_glib,
+ libm,
+ libsoup
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs
+ )
+ test('gs-self-test-lib', e, suite: ['lib'], env: test_env, timeout : 120)
+endif
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..209e970
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,249 @@
+project('gnome-software', 'c',
+ version : '3.38.1',
+ license : 'GPL-2.0+',
+ default_options : ['warning_level=1', 'c_std=c99'],
+ meson_version : '>=0.47.0'
+)
+
+conf = configuration_data()
+conf.set_quoted('VERSION', meson.project_version())
+conf.set_quoted('PACKAGE_NAME', meson.project_name())
+conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+
+# this refers to the gnome-software plugin API version
+# this is not in any way related to a package or soname version
+gs_plugin_api_version = '13'
+conf.set_quoted('GS_PLUGIN_API_VERSION', gs_plugin_api_version)
+
+# install docs
+install_data('README.md', install_dir : 'share/doc/gnome-software')
+
+# get supported warning flags
+test_args = [
+ '-fstack-protector-strong',
+ '-Waggregate-return',
+ '-Warray-bounds',
+ '-Wcast-align',
+ '-Wclobbered',
+ '-Wdeclaration-after-statement',
+ '-Wempty-body',
+ '-Wextra',
+ '-Wformat=2',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Wformat-signedness',
+ '-Wignored-qualifiers',
+ '-Wimplicit-function-declaration',
+ '-Werror=implicit-function-declaration',
+ '-Winit-self',
+ '-Winline',
+ '-Wmissing-declarations',
+ '-Wmissing-format-attribute',
+ '-Wmissing-include-dirs',
+ '-Wmissing-noreturn',
+ '-Wmissing-parameter-type',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Werror=nested-externs',
+ '-Wno-discarded-qualifiers',
+ '-Wno-missing-field-initializers',
+ '-Wno-strict-aliasing',
+ '-Wno-suggest-attribute=format',
+ '-Wno-unused-parameter',
+ '-Wold-style-definition',
+ '-Woverride-init',
+ '-Wpacked',
+ '-Wpointer-arith',
+ '-Wredundant-decls',
+ '-Wreturn-type',
+ '-Wshadow',
+ '-Wsign-compare',
+ '-Wstrict-aliasing',
+ '-Wstrict-prototypes',
+ '-Wswitch-default',
+ '-Wtype-limits',
+ '-Wundef',
+ '-Wuninitialized',
+ '-Wunused-but-set-variable',
+ '-Wwrite-strings'
+]
+cc = meson.get_compiler('c')
+foreach arg: test_args
+ if cc.has_argument(arg)
+ add_project_arguments(arg, language : 'c')
+ endif
+endforeach
+
+# enable full RELRO where possible
+# FIXME: until https://github.com/mesonbuild/meson/issues/1140 is fixed
+global_link_args = []
+test_link_args = [
+ '-Wl,-z,relro',
+ '-Wl,-z,now',
+]
+foreach arg: test_link_args
+ if cc.has_link_argument(arg)
+ global_link_args += arg
+ endif
+endforeach
+add_global_link_arguments(
+ global_link_args,
+ language: 'c'
+)
+
+# Needed for PATH_MAX and symlink()
+add_project_arguments('-D_XOPEN_SOURCE=700', language : 'c')
+# Needed for syscall()
+add_project_arguments('-D_GNU_SOURCE', language : 'c')
+
+conf.set('HAVE_LINUX_UNISTD_H', cc.has_header('linux/unistd.h'))
+
+appstream_glib = dependency('appstream-glib', version : '>= 0.7.14')
+gdk_pixbuf = dependency('gdk-pixbuf-2.0', version : '>= 2.32.0')
+libxmlb = dependency('xmlb', version : '>= 0.1.7', fallback : ['libxmlb', 'libxmlb_dep'])
+gio_unix = dependency('gio-unix-2.0', version : '>= 2.56.0')
+gmodule = dependency('gmodule-2.0')
+goa = dependency('goa-1.0')
+gtk = dependency('gtk+-3.0', version : '>= 3.22.4')
+glib = dependency('glib-2.0', version : '>= 2.55.0')
+json_glib = dependency('json-glib-1.0', version : '>= 1.2.0')
+libm = cc.find_library('m', required: false)
+libsoup = dependency('libsoup-2.4', version : '>= 2.52.0')
+
+libsysprof_capture_dep = dependency('sysprof-capture-4',
+ required: get_option('sysprof'),
+ default_options: [
+ 'enable_examples=false',
+ 'enable_gtk=false',
+ 'enable_tests=false',
+ 'enable_tools=false',
+ 'libsysprof=false',
+ 'with_sysprofd=none',
+ 'help=false',
+ ],
+ fallback: ['sysprof', 'libsysprof_capture_dep'],
+)
+conf.set('HAVE_SYSPROF', libsysprof_capture_dep.found())
+
+if get_option('mogwai')
+ mogwai_schedule_client = dependency('mogwai-schedule-client-0', version : '>= 0.2.0')
+ conf.set('HAVE_MOGWAI', 1)
+endif
+
+if get_option('valgrind')
+ valgrind = dependency('valgrind')
+ conf.set('USE_VALGRIND', 1)
+else
+ message('Valgrind integration disabled')
+ valgrind = []
+endif
+
+if get_option('gnome_desktop')
+ gnome_desktop = dependency('gnome-desktop-3.0', version : '>= 3.18.0')
+ conf.set('HAVE_GNOME_DESKTOP', 1)
+endif
+
+if get_option('gspell')
+ gspell = dependency('gspell-1')
+ conf.set('HAVE_GSPELL', 1)
+endif
+
+if get_option('polkit')
+ polkit = dependency('polkit-gobject-1')
+ conf.set('HAVE_POLKIT', 1)
+endif
+
+if get_option('packagekit')
+ packagekit = dependency('packagekit-glib2', version : '>= 1.1.0')
+ conf.set('HAVE_PACKAGEKIT', '1')
+ add_project_arguments('-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE',
+ language : 'c')
+ if get_option('packagekit_autoremove')
+ conf.set('GS_PACKAGEKIT_AUTOREMOVE', 'TRUE')
+ else
+ conf.set('GS_PACKAGEKIT_AUTOREMOVE', 'FALSE')
+ endif
+endif
+
+if get_option('eos_updater')
+ ostree = dependency('ostree-1')
+endif
+
+if get_option('fwupd')
+ fwupd = dependency('fwupd', version : '>= 1.0.3')
+endif
+
+if get_option('flatpak')
+ flatpak = dependency('flatpak', version : '>= 1.0.4')
+ ostree = dependency('ostree-1')
+endif
+
+if get_option('malcontent')
+ malcontent = dependency('malcontent-0', version: '>= 0.3.0', fallback: ['malcontent', 'libmalcontent_dep'],)
+endif
+
+if get_option('rpm_ostree')
+ libdnf = dependency('libdnf')
+ ostree = dependency('ostree-1')
+ rpm = dependency('rpm')
+ rpm_ostree = dependency('rpm-ostree-1', version : '>= 2019.3')
+endif
+
+if get_option('gudev')
+ gudev = dependency('gudev-1.0')
+endif
+
+if get_option('snap')
+ snap = dependency('snapd-glib', version : '>= 1.50')
+endif
+
+gnome = import('gnome')
+i18n = import('i18n')
+
+conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+conf.set_quoted('LOCALEDIR',
+ join_paths(get_option('prefix'),
+ get_option('localedir')))
+conf.set_quoted('DATADIR',
+ join_paths(get_option('prefix'),
+ get_option('datadir')))
+conf.set_quoted('LIBDIR',
+ join_paths(get_option('prefix'),
+ get_option('libdir')))
+conf.set_quoted('BINDIR',
+ join_paths(get_option('prefix'),
+ get_option('bindir')))
+conf.set_quoted('SYSCONFDIR',
+ join_paths(get_option('prefix'),
+ get_option('sysconfdir')))
+conf.set_quoted('LOCALSTATEDIR',
+ join_paths(get_option('prefix'),
+ get_option('localstatedir')))
+conf.set_quoted('LIBEXECDIR',
+ join_paths(get_option('prefix'),
+ get_option('libexecdir')))
+configure_file(
+ output : 'config.h',
+ configuration : conf
+)
+
+add_project_arguments('-DI_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE',
+ language : 'c')
+
+test_env = [
+ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
+ 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
+ 'GSETTINGS_SCHEMA_DIR=@0@/data/'.format(meson.build_root()),
+ 'GSETTINGS_BACKEND=memory',
+ 'MALLOC_CHECK_=2',
+]
+
+subdir('data')
+subdir('lib')
+subdir('plugins')
+subdir('src')
+subdir('po')
+subdir('doc')
+
+# FIXME: remove when https://github.com/mesonbuild/meson/issues/837 fixed
+meson.add_install_script('meson_post_install.sh')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..8d4ad0d
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,22 @@
+option('tests', type : 'boolean', value : true, description : 'enable tests')
+option('gspell', type : 'boolean', value : true, description : 'enable gspell')
+option('gnome_desktop', type : 'boolean', value : true, description : 'enable gnome-desktop')
+option('man', type : 'boolean', value : true, description : 'enable man pages')
+option('packagekit', type : 'boolean', value : true, description : 'enable PackageKit support')
+option('packagekit_autoremove', type : 'boolean', value : false, description : 'autoremove packages in PackageKit')
+option('polkit', type : 'boolean', value : true, description : 'enable PolKit support')
+option('eos_updater', type : 'boolean', value : false, description : 'enable eos-updater support')
+option('fwupd', type : 'boolean', value : true, description : 'enable fwupd support')
+option('flatpak', type : 'boolean', value : true, description : 'enable Flatpak support')
+option('malcontent', type : 'boolean', value : true, description : 'enable parental controls support using libmalcontent')
+option('rpm_ostree', type : 'boolean', value : false, description : 'enable rpm-ostree support')
+option('odrs', type : 'boolean', value : true, description : 'enable ODRS support')
+option('gudev', type : 'boolean', value : true, description : 'enable GUdev support')
+option('snap', type : 'boolean', value : false, description : 'enable Snap support')
+option('external_appstream', type : 'boolean', value : false, description : 'enable external AppStream support')
+option('valgrind', type : 'boolean', value : true, description : 'enable Valgrind debugging integration')
+option('gtk_doc', type : 'boolean', value : true, description : 'enable API reference')
+option('hardcoded_popular', type : 'boolean', value : true, description : 'enable hardcoded-popular apps plugin')
+option('default_featured_apps', type : 'boolean', value : true, description : 'enable installation of default featured apps list')
+option('mogwai', type : 'boolean', value : false, description : 'enable metered data support using Mogwai')
+option('sysprof', type : 'feature', value : 'auto', description : 'enable sysprof-capture support for profiling')
diff --git a/meson_post_install.sh b/meson_post_install.sh
new file mode 100755
index 0000000..c523b15
--- /dev/null
+++ b/meson_post_install.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+if [ -z $MESON_INSTALL_PREFIX ]; then
+ echo 'This is meant to be ran from Meson only!'
+ exit 1
+fi
+
+if [ -z $DESTDIR ]; then
+ echo 'Compiling GSchema'
+ glib-compile-schemas "$MESON_INSTALL_PREFIX/share/glib-2.0/schemas"
+ echo 'Updating icon cache'
+ gtk-update-icon-cache -qtf "$MESON_INSTALL_PREFIX/share/icons/hicolor"
+ echo 'Updating desktop database'
+ update-desktop-database -q "$MESON_INSTALL_PREFIX/share/applications"
+fi
diff --git a/plugins/core/gs-appstream.c b/plugins/core/gs-appstream.c
new file mode 100644
index 0000000..d514cbf
--- /dev/null
+++ b/plugins/core/gs-appstream.c
@@ -0,0 +1,1581 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2018-2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <gnome-software.h>
+
+#include "gs-appstream.h"
+
+#define GS_APPSTREAM_MAX_SCREENSHOTS 5
+
+GsApp *
+gs_appstream_create_app (GsPlugin *plugin, XbSilo *silo, XbNode *component, GError **error)
+{
+ GsApp *app;
+ g_autoptr(GsApp) app_new = gs_app_new (NULL);
+
+ /* refine enough to get the unique ID */
+ if (!gs_appstream_refine_app (plugin, app_new, silo, component,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ error))
+ return NULL;
+
+ /* never add wildcard apps to the plugin cache */
+ if (gs_app_has_quirk (app_new, GS_APP_QUIRK_IS_WILDCARD))
+ return g_steal_pointer (&app_new);
+
+ /* no longer supported */
+ if (gs_app_get_kind (app_new) == AS_APP_KIND_SHELL_EXTENSION) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "shell extensions no longer supported");
+ return NULL;
+ }
+
+ /* look for existing object */
+ app = gs_plugin_cache_lookup (plugin, gs_app_get_unique_id (app_new));
+ if (app != NULL)
+ return app;
+
+ /* use the temp object we just created */
+ gs_app_set_metadata (app_new, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_plugin_cache_add (plugin, NULL, app_new);
+ return g_steal_pointer (&app_new);
+}
+
+static gchar *
+gs_appstream_format_description (XbNode *root, GError **error)
+{
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autoptr(XbNode) n = xb_node_get_child (root);
+
+ while (n != NULL) {
+ g_autoptr(XbNode) n2 = NULL;
+
+ /* support <p>, <ul>, <ol> and <li>, ignore all else */
+ if (g_strcmp0 (xb_node_get_element (n), "p") == 0) {
+ g_string_append_printf (str, "%s\n\n", xb_node_get_text (n));
+ } else if (g_strcmp0 (xb_node_get_element (n), "ul") == 0) {
+ g_autoptr(GPtrArray) children = xb_node_get_children (n);
+ for (guint i = 0; i < children->len; i++) {
+ XbNode *nc = g_ptr_array_index (children, i);
+ if (g_strcmp0 (xb_node_get_element (nc), "li") == 0) {
+ g_string_append_printf (str, " • %s\n",
+ xb_node_get_text (nc));
+ }
+ }
+ g_string_append (str, "\n");
+ } else if (g_strcmp0 (xb_node_get_element (n), "ol") == 0) {
+ g_autoptr(GPtrArray) children = xb_node_get_children (n);
+ for (guint i = 0; i < children->len; i++) {
+ XbNode *nc = g_ptr_array_index (children, i);
+ if (g_strcmp0 (xb_node_get_element (nc), "li") == 0) {
+ g_string_append_printf (str, " %u. %s\n",
+ i + 1,
+ xb_node_get_text (nc));
+ }
+ }
+ g_string_append (str, "\n");
+ }
+
+ n2 = xb_node_get_next (n);
+ g_set_object (&n, n2);
+ }
+
+ /* remove extra newlines */
+ while (str->len > 0 && str->str[str->len - 1] == '\n')
+ g_string_truncate (str, str->len - 1);
+
+ /* success */
+ return g_string_free (g_steal_pointer (&str), FALSE);
+}
+
+static gchar *
+gs_appstream_build_icon_prefix (XbNode *component)
+{
+ const gchar *origin;
+ const gchar *tmp;
+ gint npath;
+ g_auto(GStrv) path = NULL;
+ g_autoptr(XbNode) components = NULL;
+
+ /* no parent, e.g. AppData */
+ components = xb_node_get_parent (component);
+ if (components == NULL)
+ return NULL;
+
+ /* set explicitly */
+ tmp = xb_node_query_text (components, "info/icon-prefix", NULL);
+ if (tmp != NULL)
+ return g_strdup (tmp);
+
+ /* fall back to origin */
+ origin = xb_node_get_attr (components, "origin");
+ if (origin == NULL)
+ return NULL;
+
+ /* no metadata */
+ tmp = xb_node_query_text (components, "info/filename", NULL);
+ if (tmp == NULL)
+ return NULL;
+
+ /* check format */
+ path = g_strsplit (tmp, "/", -1);
+ npath = g_strv_length (path);
+ if (npath < 3 || !(g_strcmp0 (path[npath-2], "xmls") == 0 || g_strcmp0 (path[npath-2], "yaml") == 0))
+ return NULL;
+
+ /* fix the new path */
+ g_free (path[npath-1]);
+ g_free (path[npath-2]);
+ path[npath-1] = g_strdup (origin);
+ path[npath-2] = g_strdup ("icons");
+ return g_strjoinv ("/", path);
+}
+
+static AsIcon *
+gs_appstream_new_icon (XbNode *component, XbNode *n, AsIconKind icon_kind, guint sz)
+{
+ AsIcon *icon = as_icon_new ();
+ g_autofree gchar *icon_path = NULL;
+ as_icon_set_kind (icon, icon_kind);
+ switch (icon_kind) {
+ case AS_ICON_KIND_REMOTE:
+ as_icon_set_url (icon, xb_node_get_text (n));
+ break;
+ default:
+ as_icon_set_name (icon, xb_node_get_text (n));
+ }
+ if (sz == 0)
+ sz = xb_node_get_attr_as_uint (n, "width");
+ if (sz > 0) {
+ as_icon_set_width (icon, sz);
+ as_icon_set_height (icon, sz);
+ }
+ icon_path = gs_appstream_build_icon_prefix (component);
+ if (icon_path != NULL)
+ as_icon_set_prefix (icon, icon_path);
+ return icon;
+}
+
+static AsIcon *
+gs_appstream_get_icon_by_kind (XbNode *component, AsIconKind icon_kind)
+{
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(XbNode) icon = NULL;
+
+ xpath = g_strdup_printf ("icon[@type='%s']",
+ as_icon_kind_to_string (icon_kind));
+ icon = xb_node_query_first (component, xpath, NULL);
+ if (icon == NULL)
+ return NULL;
+ return gs_appstream_new_icon (component, icon, icon_kind, 0);
+}
+
+static AsIcon *
+gs_appstream_get_icon_by_kind_and_size (XbNode *component, AsIconKind icon_kind, guint sz)
+{
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(XbNode) icon = NULL;
+
+ xpath = g_strdup_printf ("icon[@type='%s'][@height='%u'][@width='%u']",
+ as_icon_kind_to_string (icon_kind), sz, sz);
+ icon = xb_node_query_first (component, xpath, NULL);
+ if (icon == NULL)
+ return NULL;
+ return gs_appstream_new_icon (component, icon, icon_kind, sz);
+}
+
+static void
+gs_appstream_refine_icon (GsPlugin *plugin, GsApp *app, XbNode *component)
+{
+ g_autoptr(AsIcon) icon = NULL;
+ g_autoptr(XbNode) n = NULL;
+
+ /* try a stock icon first */
+ icon = gs_appstream_get_icon_by_kind (component, AS_ICON_KIND_STOCK);
+ if (icon != NULL) {
+ /* the stock icon referenced by the AppStream data may not be present in the current
+ * theme (usually more stock icon entries are added to permit huge themes like Papirus
+ * to style all apps in the software center). Since we can not rely on the icon's presence,
+ * we also add other icons to the list and do not return here. */
+ gs_app_add_icon (app, icon);
+ }
+
+ /* if HiDPI get a 128px cached icon */
+ if (gs_plugin_get_scale (plugin) == 2) {
+ icon = gs_appstream_get_icon_by_kind_and_size (component,
+ AS_ICON_KIND_CACHED,
+ 128);
+ if (icon != NULL) {
+ gs_app_add_icon (app, icon);
+ return;
+ }
+ }
+
+ /* non-HiDPI cached icon */
+ icon = gs_appstream_get_icon_by_kind_and_size (component,
+ AS_ICON_KIND_CACHED,
+ 64);
+ if (icon != NULL) {
+ gs_app_add_icon (app, icon);
+ return;
+ }
+
+ /* prefer local */
+ icon = gs_appstream_get_icon_by_kind (component, AS_ICON_KIND_LOCAL);
+ if (icon != NULL) {
+ /* does not exist, so try to find using the icon theme */
+ if (as_icon_get_kind (icon) == AS_ICON_KIND_LOCAL &&
+ as_icon_get_filename (icon) == NULL) {
+ g_debug ("converting missing LOCAL icon %s to STOCK",
+ as_icon_get_name (icon));
+ as_icon_set_kind (icon, AS_ICON_KIND_STOCK);
+ }
+ gs_app_add_icon (app, icon);
+ return;
+ }
+
+ /* remote URL */
+ icon = gs_appstream_get_icon_by_kind (component, AS_ICON_KIND_REMOTE);
+ if (icon != NULL) {
+ gs_app_add_icon (app, icon);
+ return;
+ }
+
+ /* assume a stock icon */
+ n = xb_node_query_first (component, "icon", NULL);
+ if (n != NULL) {
+ icon = gs_appstream_new_icon (component, n, AS_ICON_KIND_STOCK, 0);
+ gs_app_add_icon (app, icon);
+ }
+}
+
+static gboolean
+gs_appstream_refine_add_addons (GsPlugin *plugin,
+ GsApp *app,
+ XbSilo *silo,
+ GError **error)
+{
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) addons = NULL;
+
+ /* get all components */
+ xpath = g_strdup_printf ("components/component/extends[text()='%s']/..",
+ gs_app_get_id (app));
+ addons = xb_silo_query (silo, xpath, 0, &error_local);
+ if (addons == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < addons->len; i++) {
+ XbNode *addon = g_ptr_array_index (addons, i);
+ g_autoptr(GsApp) app2 = NULL;
+ app2 = gs_appstream_create_app (plugin, silo, addon, error);
+ if (app2 == NULL)
+ return FALSE;
+ gs_app_add_addon (app, app2);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_refine_add_images (GsApp *app, AsScreenshot *ss, XbNode *screenshot, GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) images = NULL;
+
+ /* get all components */
+ images = xb_node_query (screenshot, "image", 0, &error_local);
+ if (images == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < images->len; i++) {
+ XbNode *image = g_ptr_array_index (images, i);
+ g_autoptr(AsImage) im = as_image_new ();
+ as_image_set_height (im, xb_node_get_attr_as_uint (image, "height"));
+ as_image_set_width (im, xb_node_get_attr_as_uint (image, "width"));
+ as_image_set_kind (im, as_image_kind_from_string (xb_node_get_attr (image, "type")));
+ as_image_set_url (im, xb_node_get_text (image));
+ as_screenshot_add_image (ss, im);
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_refine_add_screenshots (GsApp *app, XbNode *component, GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) screenshots = NULL;
+
+ /* get all components */
+ screenshots = xb_node_query (component, "screenshots/screenshot", 0, &error_local);
+ if (screenshots == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < screenshots->len; i++) {
+ XbNode *screenshot = g_ptr_array_index (screenshots, i);
+ g_autoptr(AsScreenshot) ss = as_screenshot_new ();
+ if (!gs_appstream_refine_add_images (app, ss, screenshot, error))
+ return FALSE;
+ gs_app_add_screenshot (app, ss);
+ }
+
+ /* FIXME: move into no refine flags section? */
+ if (screenshots ->len > 0)
+ gs_app_add_kudo (app, GS_APP_KUDO_HAS_SCREENSHOTS);
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_refine_add_provides (GsApp *app, XbNode *component, GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) provides = NULL;
+
+ /* get all components */
+ provides = xb_node_query (component, "provides/*", 0, &error_local);
+ if (provides == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < provides->len; i++) {
+ XbNode *provide = g_ptr_array_index (provides, i);
+ g_autoptr(AsProvide) pr = as_provide_new ();
+ as_provide_set_kind (pr, as_provide_kind_from_string (xb_node_get_element (provide)));
+ as_provide_set_value (pr, xb_node_get_text (provide));
+ gs_app_add_provide (app, pr);
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_is_recent_release (XbNode *component)
+{
+ guint64 ts;
+ guint64 secs;
+
+ /* get newest release */
+ ts = xb_node_query_attr_as_uint (component, "releases/release", "timestamp", NULL);
+ if (ts == G_MAXUINT64)
+ return FALSE;
+
+ /* is last build less than one year ago? */
+ secs = ((guint64) g_get_real_time () / G_USEC_PER_SEC) - ts;
+ return secs / (60 * 60 * 24) < 365;
+}
+
+static gboolean
+gs_appstream_copy_metadata (GsApp *app, XbNode *component, GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) values = NULL;
+
+ /* get all components */
+ values = xb_node_query (component, "custom/value", 0, &error_local);
+ if (values == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < values->len; i++) {
+ XbNode *value = g_ptr_array_index (values, i);
+ const gchar *key = xb_node_get_attr (value, "key");
+ if (key == NULL)
+ continue;
+ if (gs_app_get_metadata_item (app, key) != NULL)
+ continue;
+ gs_app_set_metadata (app, key, xb_node_get_text (value));
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_refine_app_updates (GsPlugin *plugin,
+ GsApp *app,
+ XbSilo *silo,
+ XbNode *component,
+ GError **error)
+{
+ AsUrgencyKind urgency_best = AS_URGENCY_KIND_UNKNOWN;
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GHashTable) installed = g_hash_table_new (g_str_hash, g_str_equal);
+ g_autoptr(GPtrArray) releases_inst = NULL;
+ g_autoptr(GPtrArray) releases = NULL;
+ g_autoptr(GPtrArray) updates_list = g_ptr_array_new ();
+
+ /* only for UPDATABLE apps */
+ if (!gs_app_is_updatable (app))
+ return TRUE;
+
+ /* find out which releases are already installed */
+ xpath = g_strdup_printf ("component/id[text()='%s']/../releases/*[@version]",
+ gs_app_get_id (app));
+ releases_inst = xb_silo_query (silo, xpath, 0, &error_local);
+ if (releases_inst == NULL) {
+ if (!g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND) &&
+ !g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT)) {
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ } else {
+ for (guint i = 0; i < releases_inst->len; i++) {
+ XbNode *release = g_ptr_array_index (releases_inst, i);
+ g_hash_table_insert (installed,
+ (gpointer) xb_node_get_attr (release, "version"),
+ (gpointer) release);
+ }
+ }
+ g_clear_error (&error_local);
+
+ /* get all components */
+ releases = xb_node_query (component, "releases/*", 0, &error_local);
+ if (releases == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < releases->len; i++) {
+ XbNode *release = g_ptr_array_index (releases, i);
+ const gchar *version = xb_node_get_attr (release, "version");
+ g_autoptr(XbNode) description = NULL;
+ AsUrgencyKind urgency_tmp;
+
+ /* ignore releases with no version */
+ if (version == NULL)
+ continue;
+
+ /* already installed */
+ if (g_hash_table_lookup (installed, version) != NULL)
+ continue;
+
+ /* limit this to three versions backwards if there has never
+ * been a detected installed version */
+ if (g_hash_table_size (installed) == 0 && i >= 3)
+ break;
+
+ /* use the 'worst' urgency, e.g. critical over enhancement */
+ urgency_tmp = as_urgency_kind_from_string (xb_node_get_attr (release, "urgency"));
+ if (urgency_tmp > urgency_best)
+ urgency_best = urgency_tmp;
+
+ /* add updates with a description */
+ description = xb_node_query_first (release, "description", NULL);
+ if (description == NULL)
+ continue;
+ g_ptr_array_add (updates_list, release);
+ }
+
+ /* only set if known */
+ if (urgency_best != AS_URGENCY_KIND_UNKNOWN)
+ gs_app_set_update_urgency (app, urgency_best);
+
+ /* no prefix on each release */
+ if (updates_list->len == 1) {
+ XbNode *release = g_ptr_array_index (updates_list, 0);
+ g_autoptr(XbNode) n = NULL;
+ g_autofree gchar *desc = NULL;
+ n = xb_node_query_first (release, "description", NULL);
+ desc = gs_appstream_format_description (n, NULL);
+ gs_app_set_update_details (app, desc);
+
+ /* get the descriptions with a version prefix */
+ } else if (updates_list->len > 1) {
+ g_autoptr(GString) update_desc = g_string_new ("");
+ for (guint i = 0; i < updates_list->len; i++) {
+ XbNode *release = g_ptr_array_index (updates_list, i);
+ g_autofree gchar *desc = NULL;
+ g_autoptr(XbNode) n = NULL;
+
+ n = xb_node_query_first (release, "description", NULL);
+ desc = gs_appstream_format_description (n, NULL);
+ g_string_append_printf (update_desc,
+ "Version %s:\n%s\n\n",
+ xb_node_get_attr (release, "version"),
+ desc);
+ }
+
+ /* remove trailing newlines */
+ if (update_desc->len > 2)
+ g_string_truncate (update_desc, update_desc->len - 2);
+ gs_app_set_update_details (app, update_desc->str);
+ }
+
+ /* if there is no already set update version use the newest */
+ if (gs_app_get_update_version (app) == NULL &&
+ updates_list->len > 0) {
+ XbNode *release = g_ptr_array_index (updates_list, 0);
+ gs_app_set_update_version (app, xb_node_get_attr (release, "version"));
+ }
+
+ /* success */
+ return TRUE;
+}
+
+/**
+ * _gs_utils_locale_has_translations:
+ * @locale: A locale, e.g. `en_GB` or `uz_UZ.utf8@cyrillic`
+ *
+ * Looks up if the locale is likely to have translations.
+ *
+ * Returns: %TRUE if the locale should have translations
+ **/
+static gboolean
+_gs_utils_locale_has_translations (const gchar *locale)
+{
+ g_autofree gchar *locale_copy = g_strdup (locale);
+ gchar *separator;
+
+ /* Strip off the codeset and modifier, if present. */
+ separator = strpbrk (locale_copy, ".@");
+ if (separator != NULL)
+ *separator = '\0';
+
+ if (g_strcmp0 (locale_copy, "C") == 0)
+ return FALSE;
+ if (g_strcmp0 (locale_copy, "en") == 0)
+ return FALSE;
+ if (g_strcmp0 (locale_copy, "en_US") == 0)
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_origin_valid (const gchar *origin)
+{
+ if (origin == NULL)
+ return FALSE;
+ if (g_strcmp0 (origin, "") == 0)
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_is_valid_project_group (const gchar *project_group)
+{
+ if (project_group == NULL)
+ return FALSE;
+ return as_utils_is_environment_id (project_group);
+}
+
+static gboolean
+gs_appstream_refine_app_content_rating (GsPlugin *plugin,
+ GsApp *app,
+ XbNode *content_rating,
+ GError **error)
+{
+ g_autoptr(AsContentRating) cr = as_content_rating_new ();
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) content_attributes = NULL;
+ const gchar *content_rating_kind = NULL;
+
+ /* get kind */
+ content_rating_kind = xb_node_get_attr (content_rating, "type");
+ /* we only really expect/support OARS 1.0 and 1.1 */
+ if (content_rating_kind == NULL ||
+ (g_strcmp0 (content_rating_kind, "oars-1.0") != 0 &&
+ g_strcmp0 (content_rating_kind, "oars-1.1") != 0)) {
+ return TRUE;
+ }
+
+ as_content_rating_set_kind (cr, content_rating_kind);
+
+ /* get attributes; no attributes being found (i.e.
+ * `<content_rating type="*"/>`) is OK: it means that all attributes have
+ * value `none`, as per the
+ * [OARS semantics](https://github.com/hughsie/oars/blob/master/specification/oars-1.1.md) */
+ content_attributes = xb_node_query (content_rating, "content_attribute", 0, &error_local);
+ if (content_attributes == NULL &&
+ g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) {
+ g_clear_error (&error_local);
+ } else if (content_attributes == NULL &&
+ g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT)) {
+ return TRUE;
+ } else if (content_attributes == NULL) {
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+
+ for (guint i = 0; content_attributes != NULL && i < content_attributes->len; i++) {
+ XbNode *content_attribute = g_ptr_array_index (content_attributes, i);
+ as_content_rating_add_attribute (cr,
+ xb_node_get_attr (content_attribute, "id"),
+ as_content_rating_value_from_string (xb_node_get_text (content_attribute)));
+ }
+
+ gs_app_set_content_rating (app, cr);
+ return TRUE;
+}
+
+static gboolean
+gs_appstream_refine_app_content_ratings (GsPlugin *plugin,
+ GsApp *app,
+ XbNode *component,
+ GError **error)
+{
+ g_autoptr(GPtrArray) content_ratings = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* find any content ratings */
+ content_ratings = xb_node_query (component, "content_rating", 0, &error_local);
+ if (content_ratings == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < content_ratings->len; i++) {
+ XbNode *content_rating = g_ptr_array_index (content_ratings, i);
+ if (!gs_appstream_refine_app_content_rating (plugin, app, content_rating, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_appstream_refine_app (GsPlugin *plugin,
+ GsApp *app,
+ XbSilo *silo,
+ XbNode *component,
+ GsPluginRefineFlags refine_flags,
+ GError **error)
+{
+ const gchar *tmp;
+ g_autoptr(GPtrArray) bundles = NULL;
+ g_autoptr(GPtrArray) launchables = NULL;
+ g_autoptr(XbNode) req = NULL;
+
+ /* is compatible */
+ req = xb_node_query_first (component,
+ "requires/id[@type='id']"
+ "[text()='org.gnome.Software.desktop']", NULL);
+ if (req != NULL) {
+#if AS_CHECK_VERSION(0,7,15)
+ gint rc = as_utils_vercmp_full (xb_node_get_attr (req, "version"),
+ PACKAGE_VERSION,
+ AS_VERSION_COMPARE_FLAG_NONE);
+#else
+ gint rc = as_utils_vercmp (xb_node_get_attr (req, "version"),
+ PACKAGE_VERSION);
+#endif
+ if (rc > 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "not for this gnome-software");
+ return FALSE;
+ }
+ }
+
+ /* types we can never launch */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_ADDON:
+ case AS_APP_KIND_CODEC:
+ case AS_APP_KIND_DRIVER:
+ case AS_APP_KIND_FIRMWARE:
+ case AS_APP_KIND_FONT:
+ case AS_APP_KIND_GENERIC:
+ case AS_APP_KIND_INPUT_METHOD:
+ case AS_APP_KIND_LOCALIZATION:
+ case AS_APP_KIND_OS_UPDATE:
+ case AS_APP_KIND_OS_UPGRADE:
+ case AS_APP_KIND_RUNTIME:
+ case AS_APP_KIND_SOURCE:
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ break;
+ default:
+ break;
+ }
+
+ /* check if the special metadata affects the not-launchable quirk */
+ tmp = gs_app_get_metadata_item (app, "GnomeSoftware::quirks::not-launchable");
+ if (tmp != NULL) {
+ if (g_strcmp0 (tmp, "true") == 0)
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ else if (g_strcmp0 (tmp, "false") == 0)
+ gs_app_remove_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ }
+
+ tmp = gs_app_get_metadata_item (app, "GnomeSoftware::quirks::hide-everywhere");
+ if (tmp != NULL) {
+ if (g_strcmp0 (tmp, "true") == 0)
+ gs_app_add_quirk (app, GS_APP_QUIRK_HIDE_EVERYWHERE);
+ else if (g_strcmp0 (tmp, "false") == 0)
+ gs_app_remove_quirk (app, GS_APP_QUIRK_HIDE_EVERYWHERE);
+ }
+
+ /* try to detect old-style AppStream 'override'
+ * files without the merge attribute */
+ if (xb_node_query_text (component, "name", NULL) == NULL &&
+ xb_node_query_text (component, "metadata_license", NULL) == NULL) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ }
+
+ /* set id */
+ tmp = xb_node_query_text (component, "id", NULL);
+ if (tmp != NULL && gs_app_get_id (app) == NULL)
+ gs_app_set_id (app, tmp);
+
+ /* set source */
+ tmp = xb_node_query_text (component, "../info/filename", NULL);
+ if (tmp != NULL && gs_app_get_metadata_item (app, "appstream::source-file") == NULL) {
+ gs_app_set_metadata (app, "appstream::source-file", tmp);
+ }
+
+ /* set scope */
+ tmp = xb_node_query_text (component, "../info/scope", NULL);
+ if (tmp != NULL)
+ gs_app_set_scope (app, as_app_scope_from_string (tmp));
+
+ /* set content rating */
+ if (TRUE) {
+ if (!gs_appstream_refine_app_content_ratings (plugin, app, component, error))
+ return FALSE;
+ }
+
+ /* set name */
+ tmp = xb_node_query_text (component, "name", NULL);
+ if (tmp != NULL)
+ gs_app_set_name (app, GS_APP_QUALITY_HIGHEST, tmp);
+
+ /* set summary */
+ tmp = xb_node_query_text (component, "summary", NULL);
+ if (tmp != NULL)
+ gs_app_set_summary (app, GS_APP_QUALITY_HIGHEST, tmp);
+
+ /* add urls */
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL) {
+ g_autoptr(GPtrArray) urls = NULL;
+ urls = xb_node_query (component, "url", 0, NULL);
+ if (urls != NULL) {
+ for (guint i = 0; i < urls->len; i++) {
+ XbNode *url = g_ptr_array_index (urls, i);
+ const gchar *kind = xb_node_get_attr (url, "type");
+ if (kind == NULL)
+ continue;
+ gs_app_set_url (app,
+ as_url_kind_from_string (kind),
+ xb_node_get_text (url));
+ }
+ }
+ }
+
+ /* add launchables */
+ launchables = xb_node_query (component, "launchable", 0, NULL);
+ if (launchables != NULL) {
+ for (guint i = 0; i < launchables->len; i++) {
+ XbNode *launchable = g_ptr_array_index (launchables, i);
+ const gchar *kind = xb_node_get_attr (launchable, "type");
+ if (g_strcmp0 (kind, "desktop-id") == 0) {
+ gs_app_set_launchable (app,
+ AS_LAUNCHABLE_KIND_DESKTOP_ID,
+ xb_node_get_text (launchable));
+ break;
+ } else if (g_strcmp0 (kind, "url") == 0) {
+ gs_app_set_launchable (app,
+ AS_LAUNCHABLE_KIND_URL,
+ xb_node_get_text (launchable));
+ }
+ }
+ }
+
+ /* set license */
+ if ((refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) > 0 &&
+ gs_app_get_license (app) == NULL) {
+ tmp = xb_node_query_text (component, "project_license", NULL);
+ if (tmp != NULL)
+ gs_app_set_license (app, GS_APP_QUALITY_HIGHEST, tmp);
+ }
+
+ /* set description */
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION) {
+ g_autofree gchar *description = NULL;
+ g_autoptr(XbNode) n = xb_node_query_first (component, "description", NULL);
+ if (n != NULL)
+ description = gs_appstream_format_description (n, NULL);
+ if (description != NULL)
+ gs_app_set_description (app, GS_APP_QUALITY_HIGHEST, description);
+ }
+
+ /* set icon */
+ if ((refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON) > 0 &&
+ gs_app_get_icons(app)->len == 0)
+ gs_appstream_refine_icon (plugin, app, component);
+
+ /* set categories */
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES) {
+ g_autoptr(GPtrArray) categories = NULL;
+ categories = xb_node_query (component, "categories/category", 0, NULL);
+ if (categories != NULL) {
+ for (guint i = 0; i < categories->len; i++) {
+ XbNode *category = g_ptr_array_index (categories, i);
+ gs_app_add_category (app, xb_node_get_text (category));
+
+ /* Special case: We used to use the `Blacklisted`
+ * category to hide apps from their .desktop
+ * file or appdata. We now use a quirk for that.
+ * This special case can be removed when all
+ * appstream files no longer use the `Blacklisted`
+ * category (including external-appstream files
+ * put together by distributions). */
+ if (g_strcmp0 (xb_node_get_text (category), "Blacklisted") == 0)
+ gs_app_add_quirk (app, GS_APP_QUIRK_HIDE_EVERYWHERE);
+ }
+ }
+ }
+
+ /* set project group */
+ if ((refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP) > 0 &&
+ gs_app_get_project_group (app) == NULL) {
+ tmp = xb_node_query_text (component, "project_group", NULL);
+ if (tmp != NULL && gs_appstream_is_valid_project_group (tmp))
+ gs_app_set_project_group (app, tmp);
+ }
+
+ /* set developer name */
+ if ((refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME) > 0 &&
+ gs_app_get_developer_name (app) == NULL) {
+ tmp = xb_node_query_text (component, "developer_name", NULL);
+ if (tmp != NULL)
+ gs_app_set_developer_name (app, tmp);
+ }
+
+ /* set id kind */
+ if (gs_app_get_kind (app) == AS_APP_KIND_UNKNOWN ||
+ gs_app_get_kind (app) == AS_APP_KIND_GENERIC) {
+ tmp = xb_node_get_attr (component, "type");
+ gs_app_set_kind (app, as_app_kind_from_string (tmp));
+ }
+
+ /* copy all the metadata */
+ if (!gs_appstream_copy_metadata (app, component, error))
+ return FALSE;
+
+ /* add bundles */
+ bundles = xb_node_query (component, "bundle", 0, NULL);
+ if (bundles != NULL && gs_app_get_sources(app)->len == 0) {
+ for (guint i = 0; i < bundles->len; i++) {
+ XbNode *bundle = g_ptr_array_index (bundles, i);
+ const gchar *kind = xb_node_get_attr (bundle, "type");
+ gs_app_add_source (app, xb_node_get_text (bundle));
+ gs_app_set_bundle_kind (app, as_bundle_kind_from_string (kind));
+
+ /* get the type/name/arch/branch */
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_FLATPAK) {
+ g_auto(GStrv) split = g_strsplit (xb_node_get_text (bundle), "/", -1);
+ if (g_strv_length (split) != 4) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "invalid ID %s for a flatpak ref",
+ xb_node_get_text (bundle));
+ return FALSE;
+ }
+
+ /* we only need the branch for the unique ID */
+ gs_app_set_branch (app, split[3]);
+ }
+ }
+ }
+
+ /* add legacy package names */
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_UNKNOWN) {
+ g_autoptr(GPtrArray) pkgnames = NULL;
+ pkgnames = xb_node_query (component, "pkgname", 0, NULL);
+ if (pkgnames != NULL && gs_app_get_sources(app)->len == 0) {
+ for (guint i = 0; i < pkgnames->len; i++) {
+ XbNode *pkgname = g_ptr_array_index (pkgnames, i);
+ tmp = xb_node_get_text (pkgname);
+ if (tmp != NULL && tmp[0] != '\0')
+ gs_app_add_source (app, tmp);
+ }
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ }
+ }
+
+ /* set origin for flatpaks */
+ if (gs_app_get_origin (app) == NULL &&
+ gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_FLATPAK) {
+ g_autoptr(XbNode) parent = xb_node_get_parent (component);
+ if (parent != NULL) {
+ tmp = xb_node_get_attr (parent, "origin");
+ gs_app_set_origin (app, tmp);
+ }
+ }
+
+ /* set addons */
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS) {
+ if (!gs_appstream_refine_add_addons (plugin, app, silo, error))
+ return FALSE;
+ }
+
+ /* set screenshots */
+ if ((refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS) > 0 &&
+ gs_app_get_screenshots(app)->len == 0) {
+ if (!gs_appstream_refine_add_screenshots (app, component, error))
+ return FALSE;
+ }
+
+ /* set provides */
+ if (!gs_appstream_refine_add_provides (app, component, error))
+ return FALSE;
+
+ /* add kudos */
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS) {
+ g_autoptr(GPtrArray) kudos = NULL;
+ tmp = gs_plugin_get_locale (plugin);
+ if (!_gs_utils_locale_has_translations (tmp)) {
+ gs_app_add_kudo (app, GS_APP_KUDO_MY_LANGUAGE);
+ } else {
+
+ g_autoptr(GString) xpath = g_string_new (NULL);
+ g_auto(GStrv) variants = g_get_locale_variants (tmp);
+
+ /* @variants includes @tmp */
+ for (gsize i = 0; variants[i] != NULL; i++)
+ xb_string_append_union (xpath, "languages/lang[text()='%s'][@percentage>50]", variants[i]);
+
+ if (xb_node_query_text (component, xpath->str, NULL) != NULL)
+ gs_app_add_kudo (app, GS_APP_KUDO_MY_LANGUAGE);
+ }
+
+ /* any keywords */
+ if (xb_node_query_text (component, "keywords/keyword", NULL) != NULL)
+ gs_app_add_kudo (app, GS_APP_KUDO_HAS_KEYWORDS);
+
+ /* HiDPI icon */
+ if (xb_node_query_text (component, "icon[@width='128']", NULL) != NULL)
+ gs_app_add_kudo (app, GS_APP_KUDO_HI_DPI_ICON);
+
+ /* was this application released recently */
+ if (gs_appstream_is_recent_release (component))
+ gs_app_add_kudo (app, GS_APP_KUDO_RECENT_RELEASE);
+
+ /* add a kudo to featured and popular apps */
+ if (xb_node_query_text (component, "kudos/kudo[text()='GnomeSoftware::popular']", NULL) != NULL)
+ gs_app_add_kudo (app, GS_APP_KUDO_FEATURED_RECOMMENDED);
+ if (xb_node_query_text (component, "categories/category[text()='Featured']", NULL) != NULL)
+ gs_app_add_kudo (app, GS_APP_KUDO_FEATURED_RECOMMENDED);
+
+ /* add new-style kudos */
+ kudos = xb_node_query (component, "kudos/kudo", 0, NULL);
+ for (guint i = 0; kudos != NULL && i < kudos->len; i++) {
+ XbNode *kudo = g_ptr_array_index (kudos, i);
+ switch (as_kudo_kind_from_string (xb_node_get_text (kudo))) {
+ case AS_KUDO_KIND_SEARCH_PROVIDER:
+ gs_app_add_kudo (app, GS_APP_KUDO_SEARCH_PROVIDER);
+ break;
+ case AS_KUDO_KIND_USER_DOCS:
+ gs_app_add_kudo (app, GS_APP_KUDO_INSTALLS_USER_DOCS);
+ break;
+ case AS_KUDO_KIND_MODERN_TOOLKIT:
+ gs_app_add_kudo (app, GS_APP_KUDO_MODERN_TOOLKIT);
+ break;
+ case AS_KUDO_KIND_NOTIFICATIONS:
+ gs_app_add_kudo (app, GS_APP_KUDO_USES_NOTIFICATIONS);
+ break;
+ case AS_KUDO_KIND_HIGH_CONTRAST:
+ gs_app_add_kudo (app, GS_APP_KUDO_HIGH_CONTRAST);
+ break;
+ case AS_KUDO_KIND_HI_DPI_ICON:
+ gs_app_add_kudo (app, GS_APP_KUDO_HI_DPI_ICON);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /* we have an origin in the XML */
+ if ((refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN) > 0 &&
+ gs_app_get_origin_appstream (app) == NULL) {
+ g_autoptr(XbNode) parent = xb_node_get_parent (component);
+ if (parent != NULL) {
+ tmp = xb_node_get_attr (parent, "origin");
+ if (gs_appstream_origin_valid (tmp))
+ gs_app_set_origin_appstream (app, tmp);
+ }
+ }
+
+ /* is there any update information */
+ if (refine_flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) {
+ if (!gs_appstream_refine_app_updates (plugin,
+ app,
+ silo,
+ component,
+ error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+typedef struct {
+ AsAppSearchMatch match_value;
+ XbQuery *query;
+} GsAppstreamSearchHelper;
+
+static void
+gs_appstream_search_helper_free (GsAppstreamSearchHelper *helper)
+{
+ g_object_unref (helper->query);
+ g_free (helper);
+}
+
+static guint16
+gs_appstream_silo_search_component2 (GPtrArray *array, XbNode *component, const gchar *search)
+{
+ guint16 match_value = 0;
+
+ /* do searches */
+ for (guint i = 0; i < array->len; i++) {
+ g_autoptr(GPtrArray) n = NULL;
+ GsAppstreamSearchHelper *helper = g_ptr_array_index (array, i);
+ xb_query_bind_str (helper->query, 0, search, NULL);
+ n = xb_node_query_full (component, helper->query, NULL);
+ if (n != NULL)
+ match_value |= helper->match_value;
+ }
+ return match_value;
+}
+
+static guint16
+gs_appstream_silo_search_component (GPtrArray *array, XbNode *component, const gchar * const *search)
+{
+ guint16 matches_sum = 0;
+
+ /* do *all* search keywords match */
+ for (guint i = 0; search[i] != NULL; i++) {
+ guint tmp = gs_appstream_silo_search_component2 (array, component, search[i]);
+ if (tmp == 0)
+ return 0;
+ matches_sum |= tmp;
+ }
+ return matches_sum;
+}
+
+gboolean
+gs_appstream_search (GsPlugin *plugin,
+ XbSilo *silo,
+ const gchar * const *values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) array = g_ptr_array_new_with_free_func ((GDestroyNotify) gs_appstream_search_helper_free);
+ g_autoptr(GPtrArray) components = NULL;
+ g_autoptr(GTimer) timer = g_timer_new ();
+ const struct {
+ AsAppSearchMatch match_value;
+ const gchar *xpath;
+ } queries[] = {
+ { AS_APP_SEARCH_MATCH_MIMETYPE, "mimetypes/mimetype[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_PKGNAME, "pkgname[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_COMMENT, "summary[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_NAME, "name[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_KEYWORD, "keywords/keyword[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_ID, "id[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_ID, "launchable[text()~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_ORIGIN, "../components[@origin~=stem(?)]" },
+ { AS_APP_SEARCH_MATCH_NONE, NULL }
+ };
+
+ /* add some weighted queries */
+ for (guint i = 0; queries[i].xpath != NULL; i++) {
+ g_autoptr(GError) error_query = NULL;
+ g_autoptr(XbQuery) query = xb_query_new (silo, queries[i].xpath, &error_query);
+ if (query != NULL) {
+ GsAppstreamSearchHelper *helper = g_new0 (GsAppstreamSearchHelper, 1);
+ helper->match_value = queries[i].match_value;
+ helper->query = g_steal_pointer (&query);
+ g_ptr_array_add (array, helper);
+ } else {
+ g_debug ("ignoring: %s", error_query->message);
+ }
+ }
+
+ /* get all components */
+ components = xb_silo_query (silo, "components/component", 0, &error_local);
+ if (components == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ guint16 match_value = gs_appstream_silo_search_component (array, component, values);
+ if (match_value != 0) {
+ g_autoptr(GsApp) app = gs_appstream_create_app (plugin, silo, component, error);
+ if (app == NULL)
+ return FALSE;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD)) {
+ g_debug ("not returning wildcard %s",
+ gs_app_get_unique_id (app));
+ continue;
+ }
+ g_debug ("add %s", gs_app_get_unique_id (app));
+ gs_app_set_match_value (app, match_value);
+ gs_app_list_add (list, app);
+ }
+ }
+ g_debug ("search took %fms", g_timer_elapsed (timer, NULL) * 1000);
+ return TRUE;
+}
+
+gboolean
+gs_appstream_add_category_apps (GsPlugin *plugin,
+ XbSilo *silo,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GPtrArray *desktop_groups;
+ g_autoptr(GError) error_local = NULL;
+
+ desktop_groups = gs_category_get_desktop_groups (category);
+ if (desktop_groups->len == 0) {
+ g_warning ("no desktop_groups for %s", gs_category_get_id (category));
+ return TRUE;
+ }
+ for (guint j = 0; j < desktop_groups->len; j++) {
+ const gchar *desktop_group = g_ptr_array_index (desktop_groups, j);
+ g_autofree gchar *xpath = NULL;
+ g_auto(GStrv) split = g_strsplit (desktop_group, "::", -1);
+ g_autoptr(GPtrArray) components = NULL;
+
+ /* generate query */
+ if (g_strv_length (split) == 1) {
+ xpath = g_strdup_printf ("components/component/categories/"
+ "category[text()='%s']/../..",
+ split[0]);
+ } else if (g_strv_length (split) == 2) {
+ xpath = g_strdup_printf ("components/component/categories/"
+ "category[text()='%s']/../"
+ "category[text()='%s']/../..",
+ split[0], split[1]);
+ }
+ components = xb_silo_query (silo, xpath, 0, &error_local);
+ if (components == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+
+ /* create app */
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ g_autoptr(GsApp) app = NULL;
+ const gchar *id = xb_node_query_text (component, "id", NULL);
+ if (id == NULL)
+ continue;
+ app = gs_app_new (id);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ }
+
+ }
+ return TRUE;
+}
+
+static guint
+gs_appstream_count_component_for_groups (GsPlugin *plugin, XbSilo *silo, const gchar *desktop_group)
+{
+ guint limit = 10;
+ g_autofree gchar *xpath = NULL;
+ g_auto(GStrv) split = g_strsplit (desktop_group, "::", -1);
+ g_autoptr(GPtrArray) array = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ if (g_strv_length (split) == 1) { /* "all" group for a parent category */
+ xpath = g_strdup_printf ("components/component/categories/"
+ "category[text()='%s']/../..",
+ split[0]);
+ } else if (g_strv_length (split) == 2) {
+ xpath = g_strdup_printf ("components/component/categories/"
+ "category[text()='%s']/../"
+ "category[text()='%s']/../..",
+ split[0], split[1]);
+ } else {
+ return 0;
+ }
+
+ array = xb_silo_query (silo, xpath, limit, &error_local);
+ if (array == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return 0;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return 0;
+ g_warning ("%s", error_local->message);
+ return 0;
+ }
+ return array->len;
+}
+
+/* we're not actually adding categories here, we're just setting the number of
+ * applications available in each category */
+gboolean
+gs_appstream_add_categories (GsPlugin *plugin,
+ XbSilo *silo,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint j = 0; j < list->len; j++) {
+ GsCategory *parent = GS_CATEGORY (g_ptr_array_index (list, j));
+ GPtrArray *children = gs_category_get_children (parent);
+
+ for (guint i = 0; i < children->len; i++) {
+ GsCategory *cat = g_ptr_array_index (children, i);
+ GPtrArray *groups = gs_category_get_desktop_groups (cat);
+ for (guint k = 0; k < groups->len; k++) {
+ const gchar *group = g_ptr_array_index (groups, k);
+ guint cnt = gs_appstream_count_component_for_groups (plugin, silo, group);
+ for (guint l = 0; l < cnt; l++) {
+ gs_category_increment_size (parent);
+ if (children->len > 1) {
+ /* Parent category has multiple groups, so increment
+ * each group's size too */
+ gs_category_increment_size (cat);
+ }
+ }
+ }
+ }
+ continue;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_appstream_add_popular (GsPlugin *plugin,
+ XbSilo *silo,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ /* find out how many packages are in each category */
+ array = xb_silo_query (silo,
+ "components/component/kudos/"
+ "kudo[text()='GnomeSoftware::popular']/../..",
+ 0, &error_local);
+ if (array == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < array->len; i++) {
+ g_autoptr(GsApp) app = NULL;
+ XbNode *component = g_ptr_array_index (array, i);
+ const gchar *component_id = xb_node_query_text (component, "id", NULL);
+ if (component_id == NULL)
+ continue;
+ app = gs_app_new (component_id);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_appstream_add_recent (GsPlugin *plugin,
+ XbSilo *silo,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint64 now = (guint64) g_get_real_time () / G_USEC_PER_SEC;
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ /* use predicate conditions to the max */
+ xpath = g_strdup_printf ("components/component/releases/"
+ "release[@timestamp>%" G_GUINT64_FORMAT "]/../..",
+ now - (30 * 24 * 60 * 60));
+ array = xb_silo_query (silo, xpath, 0, &error_local);
+ if (array == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < array->len; i++) {
+ XbNode *component = g_ptr_array_index (array, i);
+ g_autoptr(GsApp) app = gs_appstream_create_app (plugin, silo, component, error);
+ if (app == NULL)
+ return FALSE;
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_appstream_add_alternates (GsPlugin *plugin,
+ XbSilo *silo,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GPtrArray *sources = gs_app_get_sources (app);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) ids = NULL;
+ g_autoptr(GString) xpath = g_string_new (NULL);
+
+ /* probably a package we know nothing about */
+ if (gs_app_get_id (app) == NULL)
+ return TRUE;
+
+ /* actual ID */
+ xb_string_append_union (xpath, "components/component/id[text()='%s']",
+ gs_app_get_id (app));
+
+ /* new ID -> old ID */
+ xb_string_append_union (xpath, "components/component/id[text()='%s']/../provides/id",
+ gs_app_get_id (app));
+
+ /* old ID -> new ID */
+ xb_string_append_union (xpath, "components/component/provides/id[text()='%s']/../../id",
+ gs_app_get_id (app));
+
+ /* find apps that use the same pkgname */
+ for (guint j = 0; j < sources->len; j++) {
+ const gchar *source = g_ptr_array_index (sources, j);
+ g_autofree gchar *source_safe = xb_string_escape (source);
+ xb_string_append_union (xpath,
+ "components/component/pkgname[text()='%s']/../id",
+ source_safe);
+ }
+
+ /* do a big query, and return all the unique results */
+ ids = xb_silo_query (silo, xpath->str, 0, &error_local);
+ if (ids == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < ids->len; i++) {
+ XbNode *n = g_ptr_array_index (ids, i);
+ g_autoptr(GsApp) app2 = NULL;
+ app2 = gs_app_new (xb_node_get_text (n));
+ gs_app_add_quirk (app2, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_list_add (list, app2);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_appstream_add_featured (GsPlugin *plugin,
+ XbSilo *silo,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ /* find out how many packages are in each category */
+ array = xb_silo_query (silo,
+ "components/component/custom/"
+ "value[@key='GnomeSoftware::FeatureTile-css']/../..",
+ 0, &error_local);
+ if (array == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < array->len; i++) {
+ g_autoptr(GsApp) app = NULL;
+ XbNode *component = g_ptr_array_index (array, i);
+ const gchar *component_id = xb_node_query_text (component, "id", NULL);
+ if (component_id == NULL)
+ continue;
+ app = gs_app_new (component_id);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ if (!gs_appstream_copy_metadata (app, component, error))
+ return FALSE;
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+void
+gs_appstream_component_add_keyword (XbBuilderNode *component, const gchar *str)
+{
+ g_autoptr(XbBuilderNode) keyword = NULL;
+ g_autoptr(XbBuilderNode) keywords = NULL;
+
+ /* create <keywords> if it does not already exist */
+ keywords = xb_builder_node_get_child (component, "keywords", NULL);
+ if (keywords == NULL)
+ keywords = xb_builder_node_insert (component, "keywords", NULL);
+
+ /* create <keyword>str</keyword> if it does not already exist */
+ keyword = xb_builder_node_get_child (keywords, "keyword", str);
+ if (keyword == NULL) {
+ keyword = xb_builder_node_insert (keywords, "keyword", NULL);
+ xb_builder_node_set_text (keyword, str, -1);
+ }
+}
+
+void
+gs_appstream_component_add_provide (XbBuilderNode *component, const gchar *str)
+{
+ g_autoptr(XbBuilderNode) provide = NULL;
+ g_autoptr(XbBuilderNode) provides = NULL;
+
+ /* create <provides> if it does not already exist */
+ provides = xb_builder_node_get_child (component, "provides", NULL);
+ if (provides == NULL)
+ provides = xb_builder_node_insert (component, "provides", NULL);
+
+ /* create <id>str</id> if it does not already exist */
+ provide = xb_builder_node_get_child (provides, "id", str);
+ if (provide == NULL) {
+ provide = xb_builder_node_insert (provides, "id", NULL);
+ xb_builder_node_set_text (provide, str, -1);
+ }
+}
+
+void
+gs_appstream_component_add_category (XbBuilderNode *component, const gchar *str)
+{
+ g_autoptr(XbBuilderNode) category = NULL;
+ g_autoptr(XbBuilderNode) categories = NULL;
+
+ /* create <categories> if it does not already exist */
+ categories = xb_builder_node_get_child (component, "categories", NULL);
+ if (categories == NULL)
+ categories = xb_builder_node_insert (component, "categories", NULL);
+
+ /* create <category>str</category> if it does not already exist */
+ category = xb_builder_node_get_child (categories, "category", str);
+ if (category == NULL) {
+ category = xb_builder_node_insert (categories, "category", NULL);
+ xb_builder_node_set_text (category, str, -1);
+ }
+}
+
+void
+gs_appstream_component_add_icon (XbBuilderNode *component, const gchar *str)
+{
+ g_autoptr(XbBuilderNode) icon = NULL;
+
+ /* create <icon>str</icon> if it does not already exist */
+ icon = xb_builder_node_get_child (component, "icon", NULL);
+ if (icon == NULL) {
+ icon = xb_builder_node_insert (component, "icon",
+ "type", "stock",
+ NULL);
+ xb_builder_node_set_text (icon, str, -1);
+ }
+}
+
+void
+gs_appstream_component_add_extra_info (GsPlugin *plugin, XbBuilderNode *component)
+{
+ const gchar *kind = xb_builder_node_get_attr (component, "type");
+
+ /* add the gnome-software-specific 'Addon' group and ensure they
+ * all have an icon set */
+ switch (as_app_kind_from_string (kind)) {
+ case AS_APP_KIND_WEB_APP:
+ gs_appstream_component_add_keyword (component, kind);
+ break;
+ case AS_APP_KIND_FONT:
+ gs_appstream_component_add_category (component, "Addon");
+ gs_appstream_component_add_category (component, "Font");
+ break;
+ case AS_APP_KIND_DRIVER:
+ gs_appstream_component_add_category (component, "Addon");
+ gs_appstream_component_add_category (component, "Driver");
+ gs_appstream_component_add_icon (component, "application-x-firmware-symbolic");
+ break;
+ case AS_APP_KIND_LOCALIZATION:
+ gs_appstream_component_add_category (component, "Addon");
+ gs_appstream_component_add_category (component, "Localization");
+ gs_appstream_component_add_icon (component, "accessories-dictionary-symbolic");
+ break;
+ case AS_APP_KIND_CODEC:
+ gs_appstream_component_add_category (component, "Addon");
+ gs_appstream_component_add_category (component, "Codec");
+ gs_appstream_component_add_icon (component, "application-x-addon");
+ break;
+ case AS_APP_KIND_INPUT_METHOD:
+ gs_appstream_component_add_keyword (component, kind);
+ gs_appstream_component_add_category (component, "Addon");
+ gs_appstream_component_add_category (component, "InputSource");
+ gs_appstream_component_add_icon (component, "system-run-symbolic");
+ break;
+ case AS_APP_KIND_FIRMWARE:
+ gs_appstream_component_add_icon (component, "system-run-symbolic");
+ break;
+ default:
+ break;
+ }
+}
diff --git a/plugins/core/gs-appstream.h b/plugins/core/gs-appstream.h
new file mode 100644
index 0000000..d6e9a0b
--- /dev/null
+++ b/plugins/core/gs-appstream.h
@@ -0,0 +1,76 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gnome-software.h>
+#include <xmlb.h>
+
+G_BEGIN_DECLS
+
+GsApp *gs_appstream_create_app (GsPlugin *plugin,
+ XbSilo *silo,
+ XbNode *component,
+ GError **error);
+gboolean gs_appstream_refine_app (GsPlugin *plugin,
+ GsApp *app,
+ XbSilo *silo,
+ XbNode *component,
+ GsPluginRefineFlags flags,
+ GError **error);
+gboolean gs_appstream_search (GsPlugin *plugin,
+ XbSilo *silo,
+ const gchar * const *values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_appstream_add_categories (GsPlugin *plugin,
+ XbSilo *silo,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_appstream_add_category_apps (GsPlugin *plugin,
+ XbSilo *silo,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_appstream_add_popular (GsPlugin *plugin,
+ XbSilo *silo,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_appstream_add_featured (GsPlugin *plugin,
+ XbSilo *silo,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_appstream_add_alternates (GsPlugin *plugin,
+ XbSilo *silo,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_appstream_add_recent (GsPlugin *plugin,
+ XbSilo *silo,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error);
+void gs_appstream_component_add_extra_info (GsPlugin *plugin,
+ XbBuilderNode *component);
+void gs_appstream_component_add_keyword (XbBuilderNode *component,
+ const gchar *str);
+void gs_appstream_component_add_category (XbBuilderNode *component,
+ const gchar *str);
+void gs_appstream_component_add_icon (XbBuilderNode *component,
+ const gchar *str);
+void gs_appstream_component_add_provide (XbBuilderNode *component,
+ const gchar *str);
+
+G_END_DECLS
diff --git a/plugins/core/gs-desktop-common.c b/plugins/core/gs-desktop-common.c
new file mode 100644
index 0000000..27e11bd
--- /dev/null
+++ b/plugins/core/gs-desktop-common.c
@@ -0,0 +1,333 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-desktop-common.h"
+
+/* AudioVideo */
+static const GsDesktopMap map_audiovisual[] = {
+ { "all", NC_("Menu of Audio & Video", "All"),
+ { "AudioVideo",
+ NULL } },
+ { "featured", NC_("Menu of Audio & Video", "Featured"),
+ { "AudioVideo::Featured",
+ NULL} },
+ { "creation-editing", NC_("Menu of Audio & Video", "Audio Creation & Editing"),
+ { "AudioVideo::AudioVideoEditing",
+ "AudioVideo::Midi",
+ "AudioVideo::DiscBurning",
+ "AudioVideo::Sequencer",
+ NULL} },
+ { "music-players", NC_("Menu of Audio & Video", "Music Players"),
+ { "AudioVideo::Music",
+ "AudioVideo::Player",
+ NULL} },
+ { NULL }
+};
+
+/* Development */
+static const GsDesktopMap map_developertools[] = {
+ { "all", NC_("Menu of Developer Tools", "All"),
+ { "Development",
+ NULL } },
+ { "featured", NC_("Menu of Developer Tools", "Featured"),
+ { "Development::Featured",
+ NULL} },
+ { "debuggers", NC_("Menu of Developer Tools", "Debuggers"),
+ { "Development::Debugger",
+ NULL} },
+ { "ide", NC_("Menu of Developer Tools", "IDEs"),
+ { "Development::IDE",
+ "Development::GUIDesigner",
+ NULL} },
+ { NULL }
+};
+
+/* Education & Science */
+static const GsDesktopMap map_education_science[] = {
+ { "all", NC_("Menu of Education & Science", "All"),
+ { "Education",
+ "Science",
+ NULL } },
+ { "featured", NC_("Menu of Education & Science", "Featured"),
+ { "Education::Featured",
+ "Science::Featured",
+ NULL} },
+ { "artificial-intelligence", NC_("Menu of Education & Science", "Artificial Intelligence"),
+ { "Science::ArtificialIntelligence",
+ NULL} },
+ { "astronomy", NC_("Menu of Education & Science", "Astronomy"),
+ { "Education::Astronomy",
+ "Science::Astronomy",
+ NULL} },
+ { "chemistry", NC_("Menu of Education & Science", "Chemistry"),
+ { "Education::Chemistry",
+ "Science::Chemistry",
+ NULL} },
+ { "languages", NC_("Menu of Education & Science", "Languages"),
+ { "Education::Languages",
+ "Education::Literature",
+ NULL} },
+ { "math", NC_("Menu of Education & Science", "Math"),
+ { "Education::Math",
+ "Education::NumericalAnalysis",
+ "Science::Math",
+ "Science::Physics",
+ "Science::NumericalAnalysis",
+ NULL} },
+ { "robotics", NC_("Menu of Education & Science", "Robotics"),
+ { "Science::Robotics",
+ NULL} },
+
+ { NULL }
+};
+
+/* Games */
+static const GsDesktopMap map_games[] = {
+ { "all", NC_("Menu of Games", "All"),
+ { "Game",
+ NULL } },
+ { "featured", NC_("Menu of Games", "Featured"),
+ { "Game::Featured",
+ NULL} },
+ { "action", NC_("Menu of Games", "Action"),
+ { "Game::ActionGame",
+ NULL} },
+ { "adventure", NC_("Menu of Games", "Adventure"),
+ { "Game::AdventureGame",
+ NULL} },
+ { "arcade", NC_("Menu of Games", "Arcade"),
+ { "Game::ArcadeGame",
+ NULL} },
+ { "blocks", NC_("Menu of Games", "Blocks"),
+ { "Game::BlocksGame",
+ NULL} },
+ { "board", NC_("Menu of Games", "Board"),
+ { "Game::BoardGame",
+ NULL} },
+ { "card", NC_("Menu of Games", "Card"),
+ { "Game::CardGame",
+ NULL} },
+ { "emulator", NC_("Menu of Games", "Emulators"),
+ { "Game::Emulator",
+ NULL} },
+ { "kids", NC_("Menu of Games", "Kids"),
+ { "Game::KidsGame",
+ NULL} },
+ { "logic", NC_("Menu of Games", "Logic"),
+ { "Game::LogicGame",
+ NULL} },
+ { "role-playing", NC_("Menu of Games", "Role Playing"),
+ { "Game::RolePlaying",
+ NULL} },
+ { "sports", NC_("Menu of Games", "Sports"),
+ { "Game::SportsGame",
+ "Game::Simulation",
+ NULL} },
+ { "strategy", NC_("Menu of Games", "Strategy"),
+ { "Game::StrategyGame",
+ NULL} },
+ { NULL }
+};
+
+/* Graphics */
+static const GsDesktopMap map_graphics[] = {
+ { "all", NC_("Menu of Graphics & Photography", "All"),
+ { "Graphics",
+ NULL } },
+ { "featured", NC_("Menu of Graphics & Photography", "Featured"),
+ { "Graphics::Featured",
+ NULL} },
+ { "3d", NC_("Menu of Graphics & Photography", "3D Graphics"),
+ { "Graphics::3DGraphics",
+ NULL} },
+ { "photography", NC_("Menu of Graphics & Photography", "Photography"),
+ { "Graphics::Photography",
+ NULL} },
+ { "scanning", NC_("Menu of Graphics & Photography", "Scanning"),
+ { "Graphics::Scanning",
+ NULL} },
+ { "vector", NC_("Menu of Graphics & Photography", "Vector Graphics"),
+ { "Graphics::VectorGraphics",
+ NULL} },
+ { "viewers", NC_("Menu of Graphics & Photography", "Viewers"),
+ { "Graphics::Viewer",
+ NULL} },
+ { NULL }
+};
+
+/* Office */
+static const GsDesktopMap map_productivity[] = {
+ { "all", NC_("Menu of Productivity", "All"),
+ { "Office",
+ NULL } },
+ { "featured", NC_("Menu of Productivity", "Featured"),
+ { "Office::Featured",
+ NULL} },
+ { "calendar", NC_("Menu of Productivity", "Calendar"),
+ { "Office::Calendar",
+ "Office::ProjectManagement",
+ NULL} },
+ { "database", NC_("Menu of Productivity", "Database"),
+ { "Office::Database",
+ NULL} },
+ { "finance", NC_("Menu of Productivity", "Finance"),
+ { "Office::Finance",
+ "Office::Spreadsheet",
+ NULL} },
+ { "word-processor", NC_("Menu of Productivity", "Word Processor"),
+ { "Office::WordProcessor",
+ "Office::Dictionary",
+ NULL} },
+ { NULL }
+};
+
+/* Addons */
+static const GsDesktopMap map_addons[] = {
+ { "fonts", NC_("Menu of Add-ons", "Fonts"),
+ { "Addon::Font",
+ NULL} },
+ { "codecs", NC_("Menu of Add-ons", "Codecs"),
+ { "Addon::Codec",
+ NULL} },
+ { "input-sources", NC_("Menu of Add-ons", "Input Sources"),
+ { "Addon::InputSource",
+ NULL} },
+ { "language-packs", NC_("Menu of Add-ons", "Language Packs"),
+ { "Addon::LanguagePack",
+ NULL} },
+ { "localization", NC_("Menu of Add-ons", "Localization"),
+ { "Addon::Localization",
+ NULL} },
+ { "drivers", NC_("Menu of Add-ons", "Hardware Drivers"),
+ { "Addon::Driver",
+ NULL} },
+ { NULL }
+};
+
+/* Communication */
+static const GsDesktopMap map_communication[] = {
+ { "all", NC_("Menu of Communication & News", "All"),
+ { "Network",
+ NULL } },
+ { "featured", NC_("Menu of Communication & News", "Featured"),
+ { "Network::Featured",
+ NULL} },
+ { "chat", NC_("Menu of Communication & News", "Chat"),
+ { "Network::Chat",
+ "Network::IRCClient",
+ "Network::Telephony",
+ "Network::VideoConference",
+ "Network::Email",
+ NULL} },
+ { "news", NC_("Menu of Communication & News", "News"),
+ { "Network::Feed",
+ "Network::News",
+ NULL} },
+ { "web-browsers", NC_("Menu of Communication & News", "Web Browsers"),
+ { "Network::WebBrowser",
+ NULL} },
+ { NULL }
+};
+
+/* Utility */
+static const GsDesktopMap map_utilities[] = {
+ { "all", NC_("Menu of Utilities", "All"),
+ { "Utility",
+ NULL } },
+ { "featured", NC_("Menu of Utilities", "Featured"),
+ { "Utility::Featured",
+ NULL} },
+ { "text-editors", NC_("Menu of Utilities", "Text Editors"),
+ { "Utility::TextEditor",
+ NULL} },
+ { NULL }
+};
+
+/* Reference */
+static const GsDesktopMap map_reference[] = {
+ { "all", NC_("Menu of Reference", "All"),
+ { "Reference",
+ NULL } },
+ { "featured", NC_("Menu of Reference", "Featured"),
+ { "Reference::Featured",
+ NULL} },
+ { "art", NC_("Menu of Art", "Art"),
+ { "Reference::Art",
+ NULL} },
+ { "biography", NC_("Menu of Reference", "Biography"),
+ { "Reference::Biography",
+ NULL} },
+ { "comics", NC_("Menu of Reference", "Comics"),
+ { "Reference::Comics",
+ NULL} },
+ { "fiction", NC_("Menu of Reference", "Fiction"),
+ { "Reference::Fiction",
+ NULL} },
+ { "health", NC_("Menu of Reference", "Health"),
+ { "Reference::Health",
+ NULL} },
+ { "history", NC_("Menu of Reference", "History"),
+ { "Reference::History",
+ NULL} },
+ { "lifestyle", NC_("Menu of Reference", "Lifestyle"),
+ { "Reference::Lifestyle",
+ NULL} },
+ { "politics", NC_("Menu of Reference", "Politics"),
+ { "Reference::Politics",
+ NULL} },
+ { "sports", NC_("Menu of Reference", "Sports"),
+ { "Reference::Sports",
+ NULL} },
+ { NULL }
+};
+
+/* main categories */
+/* Please keep category name and subcategory context synchronized!!! */
+static const GsDesktopData msdata[] = {
+ /* TRANSLATORS: this is the menu spec main category for Audio & Video */
+ { "audio-video", map_audiovisual, N_("Audio & Video"),
+ "folder-music-symbolic", 100 },
+ /* TRANSLATORS: this is the menu spec main category for Development */
+ { "developer-tools", map_developertools, N_("Developer Tools"),
+ "applications-engineering-symbolic", 40 },
+ /* TRANSLATORS: this is the menu spec main category for Education & Science */
+ { "education-science", map_education_science, N_("Education & Science"),
+ "system-help-symbolic", 30 },
+ /* TRANSLATORS: this is the menu spec main category for Game */
+ { "games", map_games, N_("Games"),
+ "applications-games-symbolic", 70 },
+ /* TRANSLATORS: this is the menu spec main category for Graphics */
+ { "graphics", map_graphics, N_("Graphics & Photography"),
+ "applications-graphics-symbolic", 60 },
+ /* TRANSLATORS: this is the menu spec main category for Office */
+ { "productivity", map_productivity, N_("Productivity"),
+ "text-editor-symbolic", 80 },
+ /* TRANSLATORS: this is the menu spec main category for Add-ons */
+ { "addons", map_addons, N_("Add-ons"),
+ "application-x-addon-symbolic", 50 },
+ /* TRANSLATORS: this is the menu spec main category for Communication */
+ { "communication", map_communication, N_("Communication & News"),
+ "user-available-symbolic", 90 },
+ /* TRANSLATORS: this is the menu spec main category for Reference */
+ { "reference", map_reference, N_("Reference"),
+ "view-dual-symbolic", 0 },
+ /* TRANSLATORS: this is the menu spec main category for Utilities */
+ { "utilities", map_utilities, N_("Utilities"),
+ "applications-utilities-symbolic", 10 },
+ { NULL }
+};
+
+const GsDesktopData *
+gs_desktop_get_data (void)
+{
+ return msdata;
+}
diff --git a/plugins/core/gs-desktop-common.h b/plugins/core/gs-desktop-common.h
new file mode 100644
index 0000000..3f5d378
--- /dev/null
+++ b/plugins/core/gs-desktop-common.h
@@ -0,0 +1,31 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2011-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct {
+ const gchar *id;
+ const gchar *name;
+ const gchar *fdo_cats[16];
+} GsDesktopMap;
+
+typedef struct {
+ const gchar *id;
+ const GsDesktopMap *mapping;
+ const gchar *name;
+ const gchar *icon;
+ gint score;
+} GsDesktopData;
+
+const GsDesktopData *gs_desktop_get_data (void);
+
+G_END_DECLS
diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c
new file mode 100644
index 0000000..6a28577
--- /dev/null
+++ b/plugins/core/gs-plugin-appstream.c
@@ -0,0 +1,1092 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2014 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <gnome-software.h>
+#include <xmlb.h>
+
+#include "gs-appstream.h"
+
+/*
+ * SECTION:
+ * Uses offline AppStream data to populate and refine package results.
+ *
+ * This plugin calls UpdatesChanged() if any of the AppStream stores are
+ * changed in any way.
+ *
+ * Methods: | AddCategory
+ * Refines: | [source]->[name,summary,pixbuf,id,kind]
+ */
+
+struct GsPluginData {
+ XbSilo *silo;
+ GRWLock silo_lock;
+ GSettings *settings;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ /* XbSilo needs external locking as we destroy the silo and build a new
+ * one when something changes */
+ g_rw_lock_init (&priv->silo_lock);
+
+ /* need package name */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "dpkg");
+
+ /* require settings */
+ priv->settings = g_settings_new ("org.gnome.software");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_object_unref (priv->silo);
+ g_object_unref (priv->settings);
+ g_rw_lock_clear (&priv->silo_lock);
+}
+
+static const gchar *
+gs_plugin_appstream_convert_component_kind (const gchar *kind)
+{
+ if (g_strcmp0 (kind, "web-application") == 0)
+ return "webapp";
+ if (g_strcmp0 (kind, "console-application") == 0)
+ return "console";
+ return kind;
+}
+
+static gboolean
+gs_plugin_appstream_upgrade_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "application") == 0) {
+ g_autoptr(XbBuilderNode) id = xb_builder_node_get_child (bn, "id", NULL);
+ g_autofree gchar *kind = NULL;
+ if (id != NULL) {
+ kind = g_strdup (xb_builder_node_get_attr (id, "type"));
+ xb_builder_node_remove_attr (id, "type");
+ }
+ if (kind != NULL)
+ xb_builder_node_set_attr (bn, "type", kind);
+ xb_builder_node_set_element (bn, "component");
+ } else if (g_strcmp0 (xb_builder_node_get_element (bn), "metadata") == 0) {
+ xb_builder_node_set_element (bn, "custom");
+ } else if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0) {
+ const gchar *type_old = xb_builder_node_get_attr (bn, "type");
+ const gchar *type_new = gs_plugin_appstream_convert_component_kind (type_old);
+ if (type_old != type_new)
+ xb_builder_node_set_attr (bn, "type", type_new);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_add_icons_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") != 0)
+ return TRUE;
+ gs_appstream_component_add_extra_info (plugin, bn);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_add_origin_keyword_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "components") == 0) {
+ const gchar *origin = xb_builder_node_get_attr (bn, "origin");
+ GPtrArray *components = xb_builder_node_get_children (bn);
+ if (origin == NULL || origin[0] == '\0')
+ return TRUE;
+ g_debug ("origin %s has %u components", origin, components->len);
+ if (components->len < 200) {
+ for (guint i = 0; i < components->len; i++) {
+ XbBuilderNode *component = g_ptr_array_index (components, i);
+ gs_appstream_component_add_keyword (component, origin);
+ }
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_load_appdata_fn (GsPlugin *plugin,
+ XbBuilder *builder,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GFile) file = g_file_new_for_path (filename);
+ g_autoptr(XbBuilderFixup) fixup = NULL;
+ g_autoptr(XbBuilderNode) info = NULL;
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+
+ /* add source */
+ if (!xb_builder_source_load_file (source, file,
+#if LIBXMLB_CHECK_VERSION(0, 2, 0)
+ XB_BUILDER_SOURCE_FLAG_WATCH_DIRECTORY,
+#else
+ XB_BUILDER_SOURCE_FLAG_WATCH_FILE,
+#endif
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+
+ /* fix up any legacy installed files */
+ fixup = xb_builder_fixup_new ("AppStreamUpgrade2",
+ gs_plugin_appstream_upgrade_cb,
+ plugin, NULL);
+ xb_builder_fixup_set_max_depth (fixup, 3);
+ xb_builder_source_add_fixup (source, fixup);
+
+ /* add metadata */
+ info = xb_builder_node_insert (NULL, "info", NULL);
+ xb_builder_node_insert_text (info, "filename", filename, NULL);
+ xb_builder_source_set_info (source, info);
+
+ /* success */
+ xb_builder_import_source (builder, source);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_load_appdata (GsPlugin *plugin,
+ XbBuilder *builder,
+ const gchar *path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *fn;
+ g_autoptr(GDir) dir = NULL;
+ g_autoptr(GFile) parent = g_file_new_for_path (path);
+ if (!g_file_query_exists (parent, cancellable))
+ return TRUE;
+
+ dir = g_dir_open (path, 0, error);
+ if (dir == NULL)
+ return FALSE;
+
+ while ((fn = g_dir_read_name (dir)) != NULL) {
+ if (g_str_has_suffix (fn, ".appdata.xml") ||
+ g_str_has_suffix (fn, ".metainfo.xml")) {
+ g_autofree gchar *filename = g_build_filename (path, fn, NULL);
+ g_autoptr(GError) error_local = NULL;
+ if (!gs_plugin_appstream_load_appdata_fn (plugin,
+ builder,
+ filename,
+ cancellable,
+ &error_local)) {
+ g_debug ("ignoring %s: %s", filename, error_local->message);
+ continue;
+ }
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static GInputStream *
+gs_plugin_appstream_load_desktop_cb (XbBuilderSource *self,
+ XbBuilderSourceCtx *ctx,
+ gpointer user_data,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GString *xml;
+ g_autoptr(AsApp) app = as_app_new ();
+ g_autoptr(GBytes) bytes = NULL;
+ bytes = xb_builder_source_ctx_get_bytes (ctx, cancellable, error);
+ if (bytes == NULL)
+ return NULL;
+ as_app_set_id (app, xb_builder_source_ctx_get_filename (ctx));
+ if (!as_app_parse_data (app, bytes, AS_APP_PARSE_FLAG_USE_FALLBACKS, error))
+ return NULL;
+ xml = as_app_to_xml (app, error);
+ if (xml == NULL)
+ return NULL;
+ g_string_prepend (xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ return g_memory_input_stream_new_from_data (g_string_free (xml, FALSE), -1, g_free);
+}
+
+static gboolean
+gs_plugin_appstream_load_desktop_fn (GsPlugin *plugin,
+ XbBuilder *builder,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GFile) file = g_file_new_for_path (filename);
+ g_autoptr(XbBuilderFixup) fixup = NULL;
+ g_autoptr(XbBuilderNode) info = NULL;
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+
+ /* add support for desktop files */
+ xb_builder_source_add_adapter (source, "application/x-desktop",
+ gs_plugin_appstream_load_desktop_cb, NULL, NULL);
+
+ /* add source */
+ if (!xb_builder_source_load_file (source, file,
+#if LIBXMLB_CHECK_VERSION(0, 2, 0)
+ XB_BUILDER_SOURCE_FLAG_WATCH_DIRECTORY,
+#else
+ XB_BUILDER_SOURCE_FLAG_WATCH_FILE,
+#endif
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+
+ /* add metadata */
+ info = xb_builder_node_insert (NULL, "info", NULL);
+ xb_builder_node_insert_text (info, "filename", filename, NULL);
+ xb_builder_source_set_info (source, info);
+
+ /* success */
+ xb_builder_import_source (builder, source);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_load_desktop (GsPlugin *plugin,
+ XbBuilder *builder,
+ const gchar *path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *fn;
+ g_autoptr(GDir) dir = NULL;
+ g_autoptr(GFile) parent = g_file_new_for_path (path);
+ if (!g_file_query_exists (parent, cancellable))
+ return TRUE;
+
+ dir = g_dir_open (path, 0, error);
+ if (dir == NULL)
+ return FALSE;
+
+ while ((fn = g_dir_read_name (dir)) != NULL) {
+ if (g_str_has_suffix (fn, ".desktop")) {
+ g_autofree gchar *filename = g_build_filename (path, fn, NULL);
+ g_autoptr(GError) error_local = NULL;
+ if (g_strcmp0 (fn, "mimeinfo.cache") == 0)
+ continue;
+ if (!gs_plugin_appstream_load_desktop_fn (plugin,
+ builder,
+ filename,
+ cancellable,
+ &error_local)) {
+ g_debug ("ignoring %s: %s", filename, error_local->message);
+ continue;
+ }
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static GInputStream *
+gs_plugin_appstream_load_dep11_cb (XbBuilderSource *self,
+ XbBuilderSourceCtx *ctx,
+ gpointer user_data,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GString *xml;
+ g_autoptr(AsStore) store = as_store_new ();
+ g_autoptr(GBytes) bytes = NULL;
+ bytes = xb_builder_source_ctx_get_bytes (ctx, cancellable, error);
+ if (bytes == NULL)
+ return NULL;
+ if (!as_store_from_bytes (store, bytes, cancellable, error))
+ return FALSE;
+ xml = as_store_to_xml (store, AS_NODE_INSERT_FLAG_NONE);
+ if (xml == NULL)
+ return NULL;
+ g_string_prepend (xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ return g_memory_input_stream_new_from_data (g_string_free (xml, FALSE), -1, g_free);
+}
+
+static gboolean
+gs_plugin_appstream_load_appstream_fn (GsPlugin *plugin,
+ XbBuilder *builder,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GFile) file = g_file_new_for_path (filename);
+ g_autoptr(XbBuilderNode) info = NULL;
+ g_autoptr(XbBuilderFixup) fixup1 = NULL;
+ g_autoptr(XbBuilderFixup) fixup2 = NULL;
+ g_autoptr(XbBuilderFixup) fixup3 = NULL;
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+
+ /* add support for DEP-11 files */
+ xb_builder_source_add_adapter (source,
+ "application/x-yaml",
+ gs_plugin_appstream_load_dep11_cb,
+ NULL, NULL);
+
+ /* add source */
+ if (!xb_builder_source_load_file (source, file,
+#if LIBXMLB_CHECK_VERSION(0, 2, 0)
+ XB_BUILDER_SOURCE_FLAG_WATCH_DIRECTORY,
+#else
+ XB_BUILDER_SOURCE_FLAG_WATCH_FILE,
+#endif
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+
+ /* add metadata */
+ info = xb_builder_node_insert (NULL, "info", NULL);
+ xb_builder_node_insert_text (info, "scope", "system", NULL);
+ xb_builder_node_insert_text (info, "filename", filename, NULL);
+ xb_builder_source_set_info (source, info);
+
+ /* add missing icons as required */
+ fixup1 = xb_builder_fixup_new ("AddIcons",
+ gs_plugin_appstream_add_icons_cb,
+ plugin, NULL);
+ xb_builder_fixup_set_max_depth (fixup1, 2);
+ xb_builder_source_add_fixup (source, fixup1);
+
+ /* fix up any legacy installed files */
+ fixup2 = xb_builder_fixup_new ("AppStreamUpgrade2",
+ gs_plugin_appstream_upgrade_cb,
+ plugin, NULL);
+ xb_builder_fixup_set_max_depth (fixup2, 3);
+ xb_builder_source_add_fixup (source, fixup2);
+
+ /* add the origin as a search keyword for small repos */
+ fixup3 = xb_builder_fixup_new ("AddOriginKeyword",
+ gs_plugin_appstream_add_origin_keyword_cb,
+ plugin, NULL);
+ xb_builder_fixup_set_max_depth (fixup3, 1);
+ xb_builder_source_add_fixup (source, fixup3);
+
+ /* success */
+ xb_builder_import_source (builder, source);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_load_appstream (GsPlugin *plugin,
+ XbBuilder *builder,
+ const gchar *path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *fn;
+ g_autoptr(GDir) dir = NULL;
+ g_autoptr(GFile) parent = g_file_new_for_path (path);
+
+ /* parent patch does not exist */
+ if (!g_file_query_exists (parent, cancellable))
+ return TRUE;
+ dir = g_dir_open (path, 0, error);
+ if (dir == NULL)
+ return FALSE;
+ while ((fn = g_dir_read_name (dir)) != NULL) {
+ if (g_str_has_suffix (fn, ".xml") ||
+ g_str_has_suffix (fn, ".yml") ||
+ g_str_has_suffix (fn, ".yml.gz") ||
+ g_str_has_suffix (fn, ".xml.gz")) {
+ g_autofree gchar *filename = g_build_filename (path, fn, NULL);
+ g_autoptr(GError) error_local = NULL;
+ if (!gs_plugin_appstream_load_appstream_fn (plugin,
+ builder,
+ filename,
+ cancellable,
+ &error_local)) {
+ g_debug ("ignoring %s: %s", filename, error_local->message);
+ continue;
+ }
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_appstream_check_silo (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *locale;
+ const gchar *test_xml;
+ g_autofree gchar *blobfn = NULL;
+ g_autoptr(XbBuilder) builder = xb_builder_new ();
+ g_autoptr(XbNode) n = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GRWLockReaderLocker) reader_locker = NULL;
+ g_autoptr(GRWLockWriterLocker) writer_locker = NULL;
+ g_autoptr(GPtrArray) parent_appdata = g_ptr_array_new_with_free_func (g_free);
+ g_autoptr(GPtrArray) parent_appstream = g_ptr_array_new_with_free_func (g_free);
+
+
+ reader_locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ /* everything is okay */
+ if (priv->silo != NULL && xb_silo_is_valid (priv->silo))
+ return TRUE;
+ g_clear_pointer (&reader_locker, g_rw_lock_reader_locker_free);
+
+ /* drat! silo needs regenerating */
+ writer_locker = g_rw_lock_writer_locker_new (&priv->silo_lock);
+ g_clear_object (&priv->silo);
+
+ /* verbose profiling */
+ if (g_getenv ("GS_XMLB_VERBOSE") != NULL) {
+ xb_builder_set_profile_flags (builder,
+ XB_SILO_PROFILE_FLAG_XPATH |
+ XB_SILO_PROFILE_FLAG_DEBUG);
+ }
+
+ /* add current locales */
+ locale = g_getenv ("GS_SELF_TEST_LOCALE");
+ if (locale == NULL) {
+ const gchar *const *locales = g_get_language_names ();
+ for (guint i = 0; locales[i] != NULL; i++)
+ xb_builder_add_locale (builder, locales[i]);
+ } else {
+ xb_builder_add_locale (builder, locale);
+ }
+
+ /* only when in self test */
+ test_xml = g_getenv ("GS_SELF_TEST_APPSTREAM_XML");
+ if (test_xml != NULL) {
+ g_autoptr(XbBuilderFixup) fixup1 = NULL;
+ g_autoptr(XbBuilderFixup) fixup2 = NULL;
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+ if (!xb_builder_source_load_xml (source, test_xml,
+ XB_BUILDER_SOURCE_FLAG_NONE,
+ error))
+ return FALSE;
+ fixup1 = xb_builder_fixup_new ("AddOriginKeywords",
+ gs_plugin_appstream_add_origin_keyword_cb,
+ plugin, NULL);
+ xb_builder_fixup_set_max_depth (fixup1, 1);
+ xb_builder_source_add_fixup (source, fixup1);
+ fixup2 = xb_builder_fixup_new ("AddIcons",
+ gs_plugin_appstream_add_icons_cb,
+ plugin, NULL);
+ xb_builder_fixup_set_max_depth (fixup2, 2);
+ xb_builder_source_add_fixup (source, fixup2);
+ xb_builder_import_source (builder, source);
+ } else {
+ /* add search paths */
+ g_ptr_array_add (parent_appstream,
+ g_build_filename (DATADIR, "app-info", "xmls", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename (DATADIR, "app-info", "yaml", NULL));
+ g_ptr_array_add (parent_appdata,
+ g_build_filename (DATADIR, "appdata", NULL));
+ g_ptr_array_add (parent_appdata,
+ g_build_filename (DATADIR, "metainfo", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename (LOCALSTATEDIR, "cache", "app-info", "xmls", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename (LOCALSTATEDIR, "cache", "app-info", "yaml", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename (LOCALSTATEDIR, "lib", "app-info", "xmls", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename (LOCALSTATEDIR, "lib", "app-info", "yaml", NULL));
+
+ /* Add the normal system directories if the installation prefix
+ * is different from normal — typically this happens when doing
+ * development builds. It’s useful to still list the system apps
+ * during development. */
+ if (g_strcmp0 (DATADIR, "/usr/share") != 0) {
+ g_ptr_array_add (parent_appstream,
+ g_build_filename ("/usr/share", "app-info", "xmls", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename ("/usr/share", "app-info", "yaml", NULL));
+ g_ptr_array_add (parent_appdata,
+ g_build_filename ("/usr/share", "appdata", NULL));
+ g_ptr_array_add (parent_appdata,
+ g_build_filename ("/usr/share", "metainfo", NULL));
+ }
+ if (g_strcmp0 (LOCALSTATEDIR, "/var") != 0) {
+ g_ptr_array_add (parent_appstream,
+ g_build_filename ("/var", "cache", "app-info", "xmls", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename ("/var", "cache", "app-info", "yaml", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename ("/var", "lib", "app-info", "xmls", NULL));
+ g_ptr_array_add (parent_appstream,
+ g_build_filename ("/var", "lib", "app-info", "yaml", NULL));
+ }
+
+ /* import all files */
+ for (guint i = 0; i < parent_appstream->len; i++) {
+ const gchar *fn = g_ptr_array_index (parent_appstream, i);
+ if (!gs_plugin_appstream_load_appstream (plugin, builder, fn,
+ cancellable, error))
+ return FALSE;
+ }
+ for (guint i = 0; i < parent_appdata->len; i++) {
+ const gchar *fn = g_ptr_array_index (parent_appdata, i);
+ if (!gs_plugin_appstream_load_appdata (plugin, builder, fn,
+ cancellable, error))
+ return FALSE;
+ }
+ if (!gs_plugin_appstream_load_desktop (plugin, builder,
+ DATADIR "/applications",
+ cancellable, error)) {
+ return FALSE;
+ }
+ if (g_strcmp0 (DATADIR, "/usr/share") != 0 &&
+ !gs_plugin_appstream_load_desktop (plugin, builder,
+ "/usr/share/applications",
+ cancellable, error)) {
+ return FALSE;
+ }
+ }
+
+ /* regenerate with each minor release */
+ xb_builder_append_guid (builder, PACKAGE_VERSION);
+
+ /* create per-user cache */
+ blobfn = gs_utils_get_cache_filename ("appstream", "components.xmlb",
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (blobfn == NULL)
+ return FALSE;
+ file = g_file_new_for_path (blobfn);
+ g_debug ("ensuring %s", blobfn);
+ priv->silo = xb_builder_ensure (builder, file,
+ XB_BUILDER_COMPILE_FLAG_IGNORE_INVALID |
+ XB_BUILDER_COMPILE_FLAG_SINGLE_LANG,
+ NULL, error);
+ if (priv->silo == NULL)
+ return FALSE;
+
+ /* watch all directories too */
+ for (guint i = 0; i < parent_appstream->len; i++) {
+ const gchar *fn = g_ptr_array_index (parent_appstream, i);
+ g_autoptr(GFile) file_tmp = g_file_new_for_path (fn);
+ if (!xb_silo_watch_file (priv->silo, file_tmp, cancellable, error))
+ return FALSE;
+ }
+ for (guint i = 0; i < parent_appdata->len; i++) {
+ const gchar *fn = g_ptr_array_index (parent_appdata, i);
+ g_autoptr(GFile) file_tmp = g_file_new_for_path (fn);
+ if (!xb_silo_watch_file (priv->silo, file_tmp, cancellable, error))
+ return FALSE;
+ }
+
+ /* test we found something */
+ n = xb_silo_query_first (priv->silo, "components/component", NULL);
+ if (n == NULL) {
+ g_warning ("No AppStream data, try 'make install-sample-data' in data/");
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "No AppStream data found");
+ return FALSE;
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ /* set up silo, compiling if required */
+ return gs_plugin_appstream_check_silo (plugin, cancellable, error);
+}
+
+gboolean
+gs_plugin_url_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *path = NULL;
+ g_autofree gchar *scheme = NULL;
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(XbNode) component = NULL;
+
+ /* check silo is valid */
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ /* not us */
+ scheme = gs_utils_get_url_scheme (url);
+ if (g_strcmp0 (scheme, "appstream") != 0)
+ return TRUE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ /* create app */
+ path = gs_utils_get_url_path (url);
+ xpath = g_strdup_printf ("components/component/id[text()='%s']", path);
+ component = xb_silo_query_first (priv->silo, xpath, NULL);
+ if (component == NULL)
+ return TRUE;
+ app = gs_appstream_create_app (plugin, priv->silo, component, error);
+ if (app == NULL)
+ return FALSE;
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_list_add (list, app);
+ return TRUE;
+}
+
+static void
+gs_plugin_appstream_set_compulsory_quirk (GsApp *app, XbNode *component)
+{
+ g_autoptr(GPtrArray) array = NULL;
+ const gchar *current_desktop;
+
+ /*
+ * Set the core applications for the current desktop that cannot be
+ * removed.
+ *
+ * If XDG_CURRENT_DESKTOP contains ":", indicating that it is made up
+ * of multiple components per the Desktop Entry Specification, an app
+ * is compulsory if any of the components in XDG_CURRENT_DESKTOP match
+ * any value in <compulsory_for_desktops />. In that way,
+ * "GNOME-Classic:GNOME" shares compulsory apps with GNOME.
+ *
+ * As a special case, if the <compulsory_for_desktop /> value contains
+ * a ":", we match the entire XDG_CURRENT_DESKTOP. This lets people set
+ * compulsory apps for such compound desktops if they want.
+ *
+ */
+ array = xb_node_query (component, "compulsory_for_desktop", 0, NULL);
+ if (array == NULL)
+ return;
+ current_desktop = g_getenv ("XDG_CURRENT_DESKTOP");
+ if (current_desktop != NULL) {
+ g_auto(GStrv) xdg_current_desktops = g_strsplit (current_desktop, ":", 0);
+ for (guint i = 0; i < array->len; i++) {
+ XbNode *n = g_ptr_array_index (array, i);
+ const gchar *tmp = xb_node_get_text (n);
+ /* if the value has a :, check the whole string */
+ if (g_strstr_len (tmp, -1, ":")) {
+ if (g_strcmp0 (current_desktop, tmp) == 0) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_COMPULSORY);
+ break;
+ }
+ /* otherwise check if any element matches this one */
+ } else if (g_strv_contains ((const gchar * const *) xdg_current_desktops, tmp)) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_COMPULSORY);
+ break;
+ }
+ }
+ }
+}
+
+static gboolean
+gs_plugin_appstream_refine_state (GsPlugin *plugin, GsApp *app, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(XbNode) component = NULL;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ xpath = g_strdup_printf ("component/id[text()='%s']", gs_app_get_id (app));
+ component = xb_silo_query_first (priv->silo, xpath, &error_local);
+ if (component == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_refine_from_id (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ gboolean *found,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *id;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(GString) xpath = g_string_new (NULL);
+ g_autoptr(GPtrArray) components = NULL;
+
+ /* not enough info to find */
+ id = gs_app_get_id (app);
+ if (id == NULL)
+ return TRUE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ /* look in AppStream then fall back to AppData */
+ xb_string_append_union (xpath, "components/component/id[text()='%s']/../pkgname/..", id);
+ xb_string_append_union (xpath, "components/component[@type='webapp']/id[text()='%s']/..", id);
+ xb_string_append_union (xpath, "component/id[text()='%s']/..", id);
+ components = xb_silo_query (priv->silo, xpath->str, 0, &error_local);
+ if (components == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ if (!gs_appstream_refine_app (plugin, app, priv->silo,
+ component, flags, error))
+ return FALSE;
+ gs_plugin_appstream_set_compulsory_quirk (app, component);
+ }
+
+ /* if an installed desktop or appdata file exists set to installed */
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN) {
+ if (!gs_plugin_appstream_refine_state (plugin, app, error))
+ return FALSE;
+ }
+
+ /* success */
+ *found = TRUE;
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_refine_from_pkgname (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GPtrArray *sources = gs_app_get_sources (app);
+ g_autoptr(GError) error_local = NULL;
+
+ /* not enough info to find */
+ if (sources->len == 0)
+ return TRUE;
+
+ /* find all apps when matching any prefixes */
+ for (guint j = 0; j < sources->len; j++) {
+ const gchar *pkgname = g_ptr_array_index (sources, j);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(GString) xpath = g_string_new (NULL);
+ g_autoptr(XbNode) component = NULL;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ /* prefer actual apps and then fallback to anything else */
+ xb_string_append_union (xpath, "components/component[@type='desktop']/pkgname[text()='%s']/..", pkgname);
+ xb_string_append_union (xpath, "components/component[@type='console']/pkgname[text()='%s']/..", pkgname);
+ xb_string_append_union (xpath, "components/component[@type='webapp']/pkgname[text()='%s']/..", pkgname);
+ xb_string_append_union (xpath, "components/component/pkgname[text()='%s']/..", pkgname);
+ component = xb_silo_query_first (priv->silo, xpath->str, &error_local);
+ if (component == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ continue;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ continue;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ if (!gs_appstream_refine_app (plugin, app, priv->silo, component, flags, error))
+ return FALSE;
+ gs_plugin_appstream_set_compulsory_quirk (app, component);
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean found = FALSE;
+
+ /* check silo is valid */
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+
+ /* not us */
+ if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_PACKAGE &&
+ gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_UNKNOWN)
+ return TRUE;
+
+ /* find by ID then fall back to package name */
+ if (!gs_plugin_refine_from_id (plugin, app, flags, &found, error))
+ return FALSE;
+ if (!found) {
+ if (!gs_plugin_refine_from_pkgname (plugin, app, flags, error))
+ return FALSE;
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine_wildcard (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *id;
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(GPtrArray) components = NULL;
+
+ /* check silo is valid */
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ /* not enough info to find */
+ id = gs_app_get_id (app);
+ if (id == NULL)
+ return TRUE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ /* find all app with package names when matching any prefixes */
+ xpath = g_strdup_printf ("components/component/id[text()='%s']/../pkgname/..", id);
+ components = xb_silo_query (priv->silo, xpath, 0, &error_local);
+ if (components == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ g_autoptr(GsApp) new = NULL;
+
+ /* new app */
+ new = gs_appstream_create_app (plugin, priv->silo, component, error);
+ if (new == NULL)
+ return FALSE;
+ gs_app_set_scope (new, AS_APP_SCOPE_SYSTEM);
+ gs_app_subsume_metadata (new, app);
+ if (!gs_appstream_refine_app (plugin, new, priv->silo, component,
+ refine_flags, error))
+ return FALSE;
+ gs_app_list_add (list, new);
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_category_apps (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_add_category_apps (plugin,
+ priv->silo,
+ category,
+ list,
+ cancellable,
+ error);
+}
+
+gboolean
+gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_search (plugin,
+ priv->silo,
+ (const gchar * const *) values,
+ list,
+ cancellable,
+ error);
+}
+
+gboolean
+gs_plugin_add_installed (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(GPtrArray) components = NULL;
+
+ /* check silo is valid */
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ /* get all installed appdata files (notice no 'components/' prefix...) */
+ components = xb_silo_query (priv->silo, "component/description/..", 0, NULL);
+ if (components == NULL)
+ return TRUE;
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ g_autoptr(GsApp) app = gs_appstream_create_app (plugin, priv->silo, component, error);
+ if (app == NULL)
+ return FALSE;
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_categories (GsPlugin *plugin,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_add_categories (plugin, priv->silo, list,
+ cancellable, error);
+}
+
+gboolean
+gs_plugin_add_popular (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_add_popular (plugin, priv->silo, list, cancellable, error);
+}
+
+gboolean
+gs_plugin_add_featured (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_add_featured (plugin, priv->silo, list, cancellable, error);
+}
+
+gboolean
+gs_plugin_add_recent (GsPlugin *plugin,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_add_recent (plugin, priv->silo, list, age,
+ cancellable, error);
+}
+
+gboolean
+gs_plugin_add_alternates (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+ return gs_appstream_add_alternates (plugin, priv->silo, app, list,
+ cancellable, error);
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return gs_plugin_appstream_check_silo (plugin, cancellable, error);
+}
diff --git a/plugins/core/gs-plugin-desktop-categories.c b/plugins/core/gs-plugin-desktop-categories.c
new file mode 100644
index 0000000..f90788d
--- /dev/null
+++ b/plugins/core/gs-plugin-desktop-categories.c
@@ -0,0 +1,106 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2011-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+#include <glib/gi18n.h>
+
+#include "gs-desktop-common.h"
+
+/*
+ * SECTION:
+ * Adds categories from a hardcoded list based on the the desktop menu
+ * specification.
+ */
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ /* need categories */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "appstream");
+}
+
+gboolean
+gs_plugin_add_categories (GsPlugin *plugin,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const GsDesktopData *msdata;
+ guint i, j, k;
+
+ msdata = gs_desktop_get_data ();
+ for (i = 0; msdata[i].id != NULL; i++) {
+ GsCategory *category;
+ g_autofree gchar *msgctxt = NULL;
+
+ /* add parent category */
+ category = gs_category_new (msdata[i].id);
+ gs_category_set_icon (category, msdata[i].icon);
+ gs_category_set_name (category, gettext (msdata[i].name));
+ gs_category_set_score (category, msdata[i].score);
+ g_ptr_array_add (list, category);
+ msgctxt = g_strdup_printf ("Menu of %s", msdata[i].name);
+
+ /* add subcategories */
+ for (j = 0; msdata[i].mapping[j].id != NULL; j++) {
+ const GsDesktopMap *map = &msdata[i].mapping[j];
+ g_autoptr(GsCategory) sub = gs_category_new (map->id);
+ for (k = 0; map->fdo_cats[k] != NULL; k++)
+ gs_category_add_desktop_group (sub, map->fdo_cats[k]);
+ gs_category_set_name (sub, g_dpgettext2 (GETTEXT_PACKAGE,
+ msgctxt,
+ map->name));
+ gs_category_add_child (category, sub);
+ }
+ }
+ return TRUE;
+}
+
+/* most of this time this won't be required, unless the user creates a
+ * GsCategory manually and uses it to get results, for instance in the
+ * overview page or `gnome-software-cmd get-category-apps games/featured` */
+gboolean
+gs_plugin_add_category_apps (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GPtrArray *desktop_groups;
+ GsCategory *parent;
+ const GsDesktopData *msdata;
+ guint i, j, k;
+
+ /* already set */
+ desktop_groups = gs_category_get_desktop_groups (category);
+ if (desktop_groups->len > 0)
+ return TRUE;
+
+ /* not valid */
+ parent = gs_category_get_parent (category);
+ if (parent == NULL)
+ return TRUE;
+
+ /* find desktop_groups for a parent::child category */
+ msdata = gs_desktop_get_data ();
+ for (i = 0; msdata[i].id != NULL; i++) {
+ if (g_strcmp0 (gs_category_get_id (parent), msdata[i].id) != 0)
+ continue;
+ for (j = 0; msdata[i].mapping[j].id != NULL; j++) {
+ const GsDesktopMap *map = &msdata[i].mapping[j];
+ if (g_strcmp0 (gs_category_get_id (category), map->id) != 0)
+ continue;
+ for (k = 0; map->fdo_cats[k] != NULL; k++)
+ gs_category_add_desktop_group (category, map->fdo_cats[k]);
+ }
+ }
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-desktop-menu-path.c b/plugins/core/gs-plugin-desktop-menu-path.c
new file mode 100644
index 0000000..2ec73b5
--- /dev/null
+++ b/plugins/core/gs-plugin-desktop-menu-path.c
@@ -0,0 +1,111 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2011-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+
+#include <gnome-software.h>
+
+#include "gs-desktop-common.h"
+
+/*
+ * SECTION:
+ * Adds categories from a hardcoded list based on the the desktop menu
+ * specification.
+ */
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ /* need categories */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+}
+
+static gboolean
+_gs_app_has_desktop_group (GsApp *app, const gchar *desktop_group)
+{
+ guint i;
+ g_auto(GStrv) split = g_strsplit (desktop_group, "::", -1);
+ for (i = 0; split[i] != NULL; i++) {
+ if (!gs_app_has_category (app, split[i]))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/* adds the menu-path for applications */
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *strv[] = { "", NULL, NULL };
+ const GsDesktopData *msdata;
+ gboolean found = FALSE;
+ guint i, j, k;
+
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH) == 0)
+ return TRUE;
+ if (gs_app_get_menu_path (app) != NULL)
+ return TRUE;
+
+ /* find a top level category the app has */
+ msdata = gs_desktop_get_data ();
+ for (i = 0; !found && msdata[i].id != NULL; i++) {
+ const GsDesktopData *data = &msdata[i];
+ for (j = 0; !found && data->mapping[j].id != NULL; j++) {
+ const GsDesktopMap *map = &data->mapping[j];
+ g_autofree gchar *msgctxt = NULL;
+
+ if (g_strcmp0 (map->id, "all") == 0)
+ continue;
+ if (g_strcmp0 (map->id, "featured") == 0)
+ continue;
+ msgctxt = g_strdup_printf ("Menu of %s", data->name);
+ for (k = 0; !found && map->fdo_cats[k] != NULL; k++) {
+ const gchar *tmp = msdata[i].mapping[j].fdo_cats[k];
+ if (_gs_app_has_desktop_group (app, tmp)) {
+ strv[0] = g_dgettext (GETTEXT_PACKAGE, msdata[i].name);
+ strv[1] = g_dpgettext2 (GETTEXT_PACKAGE, msgctxt,
+ msdata[i].mapping[j].name);
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ }
+
+ /* always set something to avoid keep searching for this */
+ gs_app_set_menu_path (app, (gchar **) strv);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH) == 0)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-generic-updates.c b/plugins/core/gs-plugin-generic-updates.c
new file mode 100644
index 0000000..8ca56e1
--- /dev/null
+++ b/plugins/core/gs-plugin-generic-updates.c
@@ -0,0 +1,106 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <gnome-software.h>
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refine");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "rpm-ostree");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "icons");
+}
+
+static gboolean
+gs_plugin_generic_updates_merge_os_update (GsApp *app)
+{
+ /* this is only for grouping system-installed packages */
+ if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_PACKAGE ||
+ gs_app_get_scope (app) != AS_APP_SCOPE_SYSTEM)
+ return FALSE;
+
+ if (gs_app_get_kind (app) == AS_APP_KIND_GENERIC)
+ return TRUE;
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return TRUE;
+
+ return FALSE;
+}
+
+static GsApp *
+gs_plugin_generic_updates_get_os_update (GsPlugin *plugin)
+{
+ GsApp *app;
+ const gchar *id = "org.gnome.Software.OsUpdate";
+ g_autoptr(AsIcon) ic = NULL;
+
+ /* create new */
+ app = gs_app_new (id);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_PROXY);
+ gs_app_set_management_plugin (app, "");
+ gs_app_set_kind (app, AS_APP_KIND_OS_UPDATE);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_name (app,
+ GS_APP_QUALITY_NORMAL,
+ /* TRANSLATORS: this is a group of updates that are not
+ * packages and are not shown in the main list */
+ _("OS Updates"));
+ gs_app_set_summary (app,
+ GS_APP_QUALITY_NORMAL,
+ /* TRANSLATORS: this is a longer description of the
+ * "OS Updates" string */
+ _("Includes performance, stability and security improvements."));
+ gs_app_set_description (app,
+ GS_APP_QUALITY_NORMAL,
+ gs_app_get_summary (app));
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "software-update-available-symbolic");
+ gs_app_add_icon (app, ic);
+ return app;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsAppList) os_updates = gs_app_list_new ();
+
+ /* not from get_updates() */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) == 0)
+ return TRUE;
+
+ /* do we have any packages left that are not apps? */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app_tmp = gs_app_list_index (list, i);
+ if (gs_app_has_quirk (app_tmp, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ if (gs_plugin_generic_updates_merge_os_update (app_tmp))
+ gs_app_list_add (os_updates, app_tmp);
+ }
+ if (gs_app_list_length (os_updates) == 0)
+ return TRUE;
+
+ /* create new meta object */
+ app = gs_plugin_generic_updates_get_os_update (plugin);
+ for (guint i = 0; i < gs_app_list_length (os_updates); i++) {
+ GsApp *app_tmp = gs_app_list_index (os_updates, i);
+ gs_app_add_related (app, app_tmp);
+ gs_app_list_remove (list, app_tmp);
+ }
+ gs_app_list_add (list, app);
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-hardcoded-blocklist.c b/plugins/core/gs-plugin-hardcoded-blocklist.c
new file mode 100644
index 0000000..f993535
--- /dev/null
+++ b/plugins/core/gs-plugin-hardcoded-blocklist.c
@@ -0,0 +1,78 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <fnmatch.h>
+#include <gnome-software.h>
+
+/*
+ * SECTION:
+ * Blocklists some applications based on a hardcoded list.
+ */
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ /* need ID */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint i;
+ const gchar *app_globs[] = {
+ "freeciv-server.desktop",
+ "links.desktop",
+ "nm-connection-editor.desktop",
+ "plank.desktop",
+ "*release-notes*.desktop",
+ "*Release_Notes*.desktop",
+ "Rodent-*.desktop",
+ "rygel-preferences.desktop",
+ "system-config-keyboard.desktop",
+ "tracker-preferences.desktop",
+ "Uninstall*.desktop",
+ "wine-*.desktop",
+ NULL };
+
+ /* not set yet */
+ if (gs_app_get_id (app) == NULL)
+ return TRUE;
+
+ /* search */
+ for (i = 0; app_globs[i] != NULL; i++) {
+ if (fnmatch (app_globs[i], gs_app_get_id (app), 0) == 0) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_HIDE_EVERYWHERE);
+ break;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-hardcoded-popular.c b/plugins/core/gs-plugin-hardcoded-popular.c
new file mode 100644
index 0000000..2431274
--- /dev/null
+++ b/plugins/core/gs-plugin-hardcoded-popular.c
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ /* let appstream add applications first */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+}
+
+gboolean
+gs_plugin_add_popular (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint i;
+ const gchar *apps[] = {
+ "org.gnome.Builder.desktop",
+ "org.gnome.Calculator.desktop",
+ "org.gnome.clocks.desktop",
+ "org.gnome.Dictionary.desktop",
+ "org.gnome.Documents.desktop",
+ "org.gnome.Evince",
+ "org.gnome.gedit.desktop",
+ "org.gnome.Maps.desktop",
+ "org.gnome.Weather",
+ NULL };
+
+ /* we've already got enough popular apps */
+ if (gs_app_list_length (list) >= 9)
+ return TRUE;
+
+ /* just add all */
+ g_debug ("using hardcoded as only %u apps", gs_app_list_length (list));
+ for (i = 0; apps[i] != NULL; i++) {
+ g_autoptr(GsApp) app = NULL;
+
+ /* look in the cache */
+ app = gs_plugin_cache_lookup (plugin, apps[i]);
+ if (app != NULL) {
+ gs_app_list_add (list, app);
+ continue;
+ }
+
+ /* create new */
+ app = gs_app_new (apps[i]);
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+
+ /* save in the cache */
+ gs_plugin_cache_add (plugin, apps[i], app);
+ }
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-icons.c b/plugins/core/gs-plugin-icons.c
new file mode 100644
index 0000000..112f1d2
--- /dev/null
+++ b/plugins/core/gs-plugin-icons.c
@@ -0,0 +1,348 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2014 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <gnome-software.h>
+
+/*
+ * SECTION:
+ * Loads remote icons and converts them into local cached ones.
+ *
+ * It is provided so that each plugin handling icons does not
+ * have to handle the download and caching functionality.
+ */
+
+struct GsPluginData {
+ GtkIconTheme *icon_theme;
+ GMutex icon_theme_lock;
+ GHashTable *icon_theme_paths;
+};
+
+static void gs_plugin_icons_add_theme_path (GsPlugin *plugin, const gchar *path);
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ const gchar *test_search_path;
+
+ priv->icon_theme = gtk_icon_theme_new ();
+ gtk_icon_theme_set_screen (priv->icon_theme, gdk_screen_get_default ());
+ priv->icon_theme_paths = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ g_mutex_init (&priv->icon_theme_lock);
+
+ test_search_path = g_getenv ("GS_SELF_TEST_ICON_THEME_PATH");
+ if (test_search_path != NULL) {
+ g_auto(GStrv) dirs = g_strsplit (test_search_path, ":", -1);
+
+ /* add_theme_path() prepends, so we have to iterate in reverse to preserve order */
+ for (gsize i = g_strv_length (dirs); i > 0; i--)
+ gs_plugin_icons_add_theme_path (plugin, dirs[i - 1]);
+ }
+
+ /* needs remote icons downloaded */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "epiphany");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_object_unref (priv->icon_theme);
+ g_hash_table_unref (priv->icon_theme_paths);
+ g_mutex_clear (&priv->icon_theme_lock);
+}
+
+static gboolean
+gs_plugin_icons_download (GsPlugin *plugin,
+ const gchar *uri,
+ const gchar *filename,
+ GError **error)
+{
+ guint status_code;
+ g_autoptr(GdkPixbuf) pixbuf_new = NULL;
+ g_autoptr(GdkPixbuf) pixbuf = NULL;
+ g_autoptr(GInputStream) stream = NULL;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ /* create the GET data */
+ msg = soup_message_new (SOUP_METHOD_GET, uri);
+ if (msg == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "%s is not a valid URL", uri);
+ return FALSE;
+ }
+
+ /* set sync request */
+ status_code = soup_session_send_message (gs_plugin_get_soup_session (plugin), msg);
+ if (status_code != SOUP_STATUS_OK) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "Failed to download icon %s: %s",
+ uri, soup_status_get_phrase (status_code));
+ return FALSE;
+ }
+
+ /* we're assuming this is a 64x64 png file, resize if not */
+ stream = g_memory_input_stream_new_from_data (msg->response_body->data,
+ msg->response_body->length,
+ NULL);
+ pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, error);
+ if (pixbuf == NULL) {
+ gs_utils_error_convert_gdk_pixbuf (error);
+ return FALSE;
+ }
+ if (gdk_pixbuf_get_height (pixbuf) == 64 &&
+ gdk_pixbuf_get_width (pixbuf) == 64) {
+ pixbuf_new = g_object_ref (pixbuf);
+ } else {
+ pixbuf_new = gdk_pixbuf_scale_simple (pixbuf, 64, 64,
+ GDK_INTERP_BILINEAR);
+ }
+
+ /* write file */
+ if (!gdk_pixbuf_save (pixbuf_new, filename, "png", error, NULL)) {
+ gs_utils_error_convert_gdk_pixbuf (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static GdkPixbuf *
+gs_plugin_icons_load_local (GsPlugin *plugin, AsIcon *icon, GError **error)
+{
+ GdkPixbuf *pixbuf;
+ gint size;
+ if (as_icon_get_filename (icon) == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "icon has no filename");
+ return NULL;
+ }
+ size = (gint) (64 * gs_plugin_get_scale (plugin));
+ pixbuf = gdk_pixbuf_new_from_file_at_size (as_icon_get_filename (icon),
+ size, size, error);
+ if (pixbuf == NULL) {
+ gs_utils_error_convert_gdk_pixbuf (error);
+ return NULL;
+ }
+ return pixbuf;
+}
+
+static gchar *
+gs_plugin_icons_get_cache_fn (AsIcon *icon)
+{
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *checksum = NULL;
+ checksum = g_compute_checksum_for_string (G_CHECKSUM_SHA1,
+ as_icon_get_url (icon),
+ -1);
+ basename = g_path_get_basename (as_icon_get_url (icon));
+ return g_strdup_printf ("%s-%s", checksum, basename);
+}
+
+static GdkPixbuf *
+gs_plugin_icons_load_remote (GsPlugin *plugin, AsIcon *icon, GError **error)
+{
+ const gchar *fn;
+ gchar *found;
+
+ /* not applicable for remote */
+ if (as_icon_get_url (icon) == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "icon has no URL");
+ return NULL;
+ }
+
+ /* set cache filename if not already set */
+ if (as_icon_get_filename (icon) == NULL) {
+ g_autofree gchar *fn_cache = NULL;
+ g_autofree gchar *fn_basename = NULL;
+
+ /* use a hash-prefixed filename to avoid cache clashes */
+ fn_basename = gs_plugin_icons_get_cache_fn (icon);
+ fn_cache = gs_utils_get_cache_filename ("icons",
+ fn_basename,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (fn_cache == NULL)
+ return NULL;
+ as_icon_set_filename (icon, fn_cache);
+ }
+
+ /* already in cache */
+ if (g_file_test (as_icon_get_filename (icon), G_FILE_TEST_EXISTS))
+ return gs_plugin_icons_load_local (plugin, icon, error);
+
+ /* a REMOTE that's really LOCAL */
+ if (g_str_has_prefix (as_icon_get_url (icon), "file://")) {
+ as_icon_set_filename (icon, as_icon_get_url (icon) + 7);
+ as_icon_set_kind (icon, AS_ICON_KIND_LOCAL);
+ return gs_plugin_icons_load_local (plugin, icon, error);
+ }
+
+ /* convert filename from jpg to png */
+ fn = as_icon_get_filename (icon);
+ found = g_strstr_len (fn, -1, ".jpg");
+ if (found != NULL)
+ memcpy (found, ".png", 4);
+
+ /* create runtime dir and download */
+ if (!gs_mkdir_parent (fn, error))
+ return NULL;
+ if (!gs_plugin_icons_download (plugin, as_icon_get_url (icon), fn, error))
+ return NULL;
+ as_icon_set_kind (icon, AS_ICON_KIND_LOCAL);
+ return gs_plugin_icons_load_local (plugin, icon, error);
+}
+
+static void
+gs_plugin_icons_add_theme_path (GsPlugin *plugin, const gchar *path)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (path == NULL)
+ return;
+ if (!g_hash_table_contains (priv->icon_theme_paths, path)) {
+ gtk_icon_theme_prepend_search_path (priv->icon_theme, path);
+ g_hash_table_add (priv->icon_theme_paths, g_strdup (path));
+ }
+}
+
+static GdkPixbuf *
+gs_plugin_icons_load_stock (GsPlugin *plugin, AsIcon *icon, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GdkPixbuf *pixbuf;
+ gint size;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->icon_theme_lock);
+
+ /* required */
+ if (as_icon_get_name (icon) == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "icon has no name");
+ return NULL;
+ }
+ gs_plugin_icons_add_theme_path (plugin, as_icon_get_prefix (icon));
+ size = (gint) (64 * gs_plugin_get_scale (plugin));
+ pixbuf = gtk_icon_theme_load_icon (priv->icon_theme,
+ as_icon_get_name (icon),
+ size,
+ GTK_ICON_LOOKUP_USE_BUILTIN |
+ GTK_ICON_LOOKUP_FORCE_SIZE,
+ error);
+ if (pixbuf == NULL) {
+ gs_utils_error_convert_gdk_pixbuf (error);
+ return NULL;
+ }
+ return pixbuf;
+}
+
+static GdkPixbuf *
+gs_plugin_icons_load_cached (GsPlugin *plugin, AsIcon *icon, GError **error)
+{
+ if (!as_icon_load (icon, AS_ICON_LOAD_FLAG_SEARCH_SIZE, error)) {
+ gs_utils_error_convert_gdk_pixbuf (error);
+ gs_utils_error_convert_appstream (error);
+ return NULL;
+ }
+ return g_object_ref (as_icon_get_pixbuf (icon));
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GPtrArray *icons;
+ guint i;
+
+ /* not required */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON) == 0)
+ return TRUE;
+
+ /* invalid */
+ if (gs_app_get_pixbuf (app) != NULL)
+ return TRUE;
+
+ /* process all icons */
+ icons = gs_app_get_icons (app);
+ for (i = 0; i < icons->len; i++) {
+ AsIcon *icon = g_ptr_array_index (icons, i);
+ g_autoptr(GdkPixbuf) pixbuf = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* handle different icon types */
+ switch (as_icon_get_kind (icon)) {
+ case AS_ICON_KIND_LOCAL:
+ pixbuf = gs_plugin_icons_load_local (plugin, icon, &error_local);
+ break;
+ case AS_ICON_KIND_STOCK:
+ pixbuf = gs_plugin_icons_load_stock (plugin, icon, &error_local);
+ break;
+ case AS_ICON_KIND_REMOTE:
+ pixbuf = gs_plugin_icons_load_remote (plugin, icon, &error_local);
+ break;
+ case AS_ICON_KIND_CACHED:
+ pixbuf = gs_plugin_icons_load_cached (plugin, icon, &error_local);
+ break;
+ default:
+ g_set_error (&error_local,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "icon kind '%s' unknown",
+ as_icon_kind_to_string (as_icon_get_kind (icon)));
+ break;
+ }
+ if (pixbuf != NULL) {
+ gs_app_set_pixbuf (app, pixbuf);
+ break;
+ }
+
+ /* we failed, but keep going */
+ g_debug ("failed to load icon for %s: %s",
+ gs_app_get_id (app),
+ error_local->message);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON) == 0)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-key-colors-metadata.c b/plugins/core/gs-plugin-key-colors-metadata.c
new file mode 100644
index 0000000..2b8fa21
--- /dev/null
+++ b/plugins/core/gs-plugin-key-colors-metadata.c
@@ -0,0 +1,89 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "key-colors");
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GPtrArray *key_colors;
+ const gchar *keys[] = {
+ "GnomeSoftware::AppTile-css",
+ "GnomeSoftware::FeatureTile-css",
+ "GnomeSoftware::UpgradeBanner-css",
+ NULL };
+
+ /* not set */
+ key_colors = gs_app_get_key_colors (app);
+ if (key_colors->len == 0)
+ return TRUE;
+
+ /* rewrite URIs */
+ for (guint i = 0; keys[i] != NULL; i++) {
+ const gchar *css;
+ g_autoptr(GString) css_new = NULL;
+
+ /* metadata is not set */
+ css = gs_app_get_metadata_item (app, keys[i]);
+ if (css == NULL)
+ continue;
+ if (g_strstr_len (css, -1, "@keycolor") == NULL)
+ continue;
+
+ /* replace key color values */
+ css_new = g_string_new (css);
+ for (guint j = 0; j < key_colors->len; j++) {
+ GdkRGBA *color = g_ptr_array_index (key_colors, j);
+ g_autofree gchar *key = NULL;
+ g_autofree gchar *value = NULL;
+ key = g_strdup_printf ("@keycolor-%02u@", j);
+ value = g_strdup_printf ("rgb(%.0f,%.0f,%.0f)",
+ color->red * 255.f,
+ color->green * 255.f,
+ color->blue * 255.f);
+ as_utils_string_replace (css_new, key, value);
+ }
+
+ /* only replace if it's different */
+ if (g_strcmp0 (css, css_new->str) != 0) {
+ gs_app_set_metadata (app, keys[i], NULL);
+ gs_app_set_metadata (app, keys[i], css_new->str);
+ }
+
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-key-colors.c b/plugins/core/gs-plugin-key-colors.c
new file mode 100644
index 0000000..08bf7a8
--- /dev/null
+++ b/plugins/core/gs-plugin-key-colors.c
@@ -0,0 +1,195 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ /* need icon */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "icons");
+}
+
+typedef struct {
+ guint8 R;
+ guint8 G;
+ guint8 B;
+} CdColorRGB8;
+
+static guint32
+cd_color_rgb8_to_uint32 (CdColorRGB8 *rgb)
+{
+ return (guint32) rgb->R |
+ (guint32) rgb->G << 8 |
+ (guint32) rgb->B << 16;
+}
+
+typedef struct {
+ GdkRGBA color;
+ guint cnt;
+} GsColorBin;
+
+static gint
+gs_color_bin_sort_cb (gconstpointer a, gconstpointer b)
+{
+ GsColorBin *s1 = (GsColorBin *) a;
+ GsColorBin *s2 = (GsColorBin *) b;
+ if (s1->cnt < s2->cnt)
+ return 1;
+ if (s1->cnt > s2->cnt)
+ return -1;
+ return 0;
+}
+
+/* convert range of 0..255 to 0..1 */
+static inline gdouble
+_convert_from_rgb8 (guchar val)
+{
+ return (gdouble) val / 255.f;
+}
+
+static void
+gs_plugin_key_colors_set_for_pixbuf (GsApp *app, GdkPixbuf *pb, guint number)
+{
+ gint rowstride, n_channels;
+ gint x, y, width, height;
+ guchar *pixels, *p;
+ guint bin_size = 200;
+ guint i;
+ guint number_of_bins;
+
+ /* go through each pixel */
+ n_channels = gdk_pixbuf_get_n_channels (pb);
+ rowstride = gdk_pixbuf_get_rowstride (pb);
+ pixels = gdk_pixbuf_get_pixels (pb);
+ width = gdk_pixbuf_get_width (pb);
+ height = gdk_pixbuf_get_height (pb);
+
+ for (bin_size = 250; bin_size > 0; bin_size -= 2) {
+ g_autoptr(GHashTable) hash = NULL;
+ hash = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL, g_free);
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ CdColorRGB8 tmp;
+ GsColorBin *s;
+ gpointer key;
+
+ /* disregard any with alpha */
+ p = pixels + y * rowstride + x * n_channels;
+ if (p[3] != 255)
+ continue;
+
+ /* find in cache */
+ tmp.R = (guint8) (p[0] / bin_size);
+ tmp.G = (guint8) (p[1] / bin_size);
+ tmp.B = (guint8) (p[2] / bin_size);
+ key = GUINT_TO_POINTER (cd_color_rgb8_to_uint32 (&tmp));
+ s = g_hash_table_lookup (hash, key);
+ if (s != NULL) {
+ s->color.red += _convert_from_rgb8 (p[0]);
+ s->color.green += _convert_from_rgb8 (p[1]);
+ s->color.blue += _convert_from_rgb8 (p[2]);
+ s->cnt++;
+ continue;
+ }
+
+ /* add to hash table */
+ s = g_new0 (GsColorBin, 1);
+ s->color.red = _convert_from_rgb8 (p[0]);
+ s->color.green = _convert_from_rgb8 (p[1]);
+ s->color.blue = _convert_from_rgb8 (p[2]);
+ s->color.alpha = 1.0;
+ s->cnt = 1;
+ g_hash_table_insert (hash, key, s);
+ }
+ }
+
+ number_of_bins = g_hash_table_size (hash);
+// g_debug ("number of colors: %i", number_of_bins);
+ if (number_of_bins >= number) {
+ g_autoptr(GList) values = NULL;
+
+ /* order by most popular */
+ values = g_hash_table_get_values (hash);
+ values = g_list_sort (values, gs_color_bin_sort_cb);
+ for (GList *l = values; l != NULL; l = l->next) {
+ GsColorBin *s = l->data;
+ g_autofree GdkRGBA *color = g_new0 (GdkRGBA, 1);
+ color->red = s->color.red / s->cnt;
+ color->green = s->color.green / s->cnt;
+ color->blue = s->color.blue / s->cnt;
+ gs_app_add_key_color (app, color);
+ }
+ return;
+ }
+ }
+
+ /* the algorithm failed, so just return a monochrome ramp */
+ for (i = 0; i < 3; i++) {
+ g_autofree GdkRGBA *color = g_new0 (GdkRGBA, 1);
+ color->red = (gdouble) i / 3.f;
+ color->green = color->red;
+ color->blue = color->red;
+ color->alpha = 1.0f;
+ gs_app_add_key_color (app, color);
+ }
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GdkPixbuf *pb;
+ g_autoptr(GdkPixbuf) pb_small = NULL;
+
+ /* add a rating */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS) == 0)
+ return TRUE;
+
+ /* already set */
+ if (gs_app_get_key_colors(app)->len > 0)
+ return TRUE;
+
+ /* no pixbuf */
+ pb = gs_app_get_pixbuf (app);
+ if (pb == NULL) {
+ g_debug ("no pixbuf, so no key colors");
+ return TRUE;
+ }
+
+ /* get a list of key colors */
+ pb_small = gdk_pixbuf_scale_simple (pb, 32, 32, GDK_INTERP_BILINEAR);
+ gs_plugin_key_colors_set_for_pixbuf (app, pb_small, 10);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS) == 0)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-os-release.c b/plugins/core/gs-plugin-os-release.c
new file mode 100644
index 0000000..3ae902f
--- /dev/null
+++ b/plugins/core/gs-plugin-os-release.c
@@ -0,0 +1,112 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+struct GsPluginData {
+ GsApp *app_system;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ priv->app_system = gs_app_new ("system");
+ gs_app_set_kind (priv->app_system, AS_APP_KIND_OS_UPGRADE);
+ gs_app_set_state (priv->app_system, AS_APP_STATE_INSTALLED);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_object_unref (priv->app_system);
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *cpe_name;
+ const gchar *home_url;
+ const gchar *name;
+ const gchar *version;
+ g_autoptr(GsOsRelease) os_release = NULL;
+
+ /* parse os-release, wherever it may be */
+ os_release = gs_os_release_new (error);
+ if (os_release == NULL)
+ return FALSE;
+ cpe_name = gs_os_release_get_cpe_name (os_release);
+ if (cpe_name != NULL)
+ gs_app_set_metadata (priv->app_system, "GnomeSoftware::CpeName", cpe_name);
+ name = gs_os_release_get_name (os_release);
+ if (name != NULL)
+ gs_app_set_name (priv->app_system, GS_APP_QUALITY_LOWEST, name);
+ version = gs_os_release_get_version_id (os_release);
+ if (version != NULL)
+ gs_app_set_version (priv->app_system, version);
+
+ /* use libsoup to convert a URL */
+ home_url = gs_os_release_get_home_url (os_release);
+ if (home_url != NULL) {
+ g_autoptr(SoupURI) uri = NULL;
+
+ /* homepage */
+ gs_app_set_url (priv->app_system, AS_URL_KIND_HOMEPAGE, home_url);
+
+ /* build ID from the reverse-DNS URL and the name version */
+ uri = soup_uri_new (home_url);
+ if (uri != NULL) {
+ g_auto(GStrv) split = NULL;
+ const gchar *home_host = soup_uri_get_host (uri);
+ split = g_strsplit_set (home_host, ".", -1);
+ if (g_strv_length (split) >= 2) {
+ g_autofree gchar *id = NULL;
+ id = g_strdup_printf ("%s.%s.%s-%s",
+ split[1],
+ split[0],
+ name,
+ version);
+ gs_app_set_id (priv->app_system, id);
+ }
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine_wildcard (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* match meta-id */
+ if (g_strcmp0 (gs_app_get_id (app), "system") == 0) {
+ /* copy over interesting metadata */
+ if (gs_app_get_install_date (app) != 0 &&
+ gs_app_get_install_date (priv->app_system) == 0) {
+ gs_app_set_install_date (priv->app_system,
+ gs_app_get_install_date (app));
+ }
+
+ gs_app_list_add (list, priv->app_system);
+ return TRUE;
+ }
+
+ /* success */
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-provenance-license.c b/plugins/core/gs-plugin-provenance-license.c
new file mode 100644
index 0000000..1103a6d
--- /dev/null
+++ b/plugins/core/gs-plugin-provenance-license.c
@@ -0,0 +1,152 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016 Matthias Klumpp <mak@debian.org>
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+/*
+ * SECTION:
+ * Marks the application as Free Software if it comes from an origin
+ * that is recognized as being DFSGish-free.
+ */
+
+struct GsPluginData {
+ GSettings *settings;
+ gchar **sources;
+ gchar *license_id;
+};
+
+static gchar **
+gs_plugin_provenance_license_get_sources (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *tmp;
+
+ tmp = g_getenv ("GS_SELF_TEST_PROVENANCE_LICENSE_SOURCES");
+ if (tmp != NULL) {
+ g_debug ("using custom provenance_license sources of %s", tmp);
+ return g_strsplit (tmp, ",", -1);
+ }
+ return g_settings_get_strv (priv->settings, "free-repos");
+}
+
+static gchar *
+gs_plugin_provenance_license_get_id (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *tmp;
+ g_autofree gchar *url = NULL;
+
+ tmp = g_getenv ("GS_SELF_TEST_PROVENANCE_LICENSE_URL");
+ if (tmp != NULL) {
+ g_debug ("using custom license generic sources of %s", tmp);
+ url = g_strdup (tmp);
+ } else {
+ url = g_settings_get_string (priv->settings, "free-repos-url");
+ if (url == NULL)
+ return g_strdup ("LicenseRef-free");
+ }
+ return g_strdup_printf ("LicenseRef-free=%s", url);
+}
+
+static void
+gs_plugin_provenance_license_changed_cb (GSettings *settings,
+ const gchar *key,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (g_strcmp0 (key, "free-repos") == 0) {
+ g_strfreev (priv->sources);
+ priv->sources = gs_plugin_provenance_license_get_sources (plugin);
+ }
+ if (g_strcmp0 (key, "free-repos-url") == 0) {
+ g_free (priv->license_id);
+ priv->license_id = gs_plugin_provenance_license_get_id (plugin);
+ }
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ priv->settings = g_settings_new ("org.gnome.software");
+ g_signal_connect (priv->settings, "changed",
+ G_CALLBACK (gs_plugin_provenance_license_changed_cb), plugin);
+ priv->sources = gs_plugin_provenance_license_get_sources (plugin);
+ priv->license_id = gs_plugin_provenance_license_get_id (plugin);
+
+ /* need this set */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "provenance");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_strfreev (priv->sources);
+ g_free (priv->license_id);
+ g_object_unref (priv->settings);
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *origin;
+
+ /* not required */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) == 0)
+ return TRUE;
+
+ /* no provenance */
+ if (!gs_app_has_quirk (app, GS_APP_QUIRK_PROVENANCE))
+ return TRUE;
+
+ /* nothing to search */
+ if (priv->sources == NULL || priv->sources[0] == NULL)
+ return TRUE;
+
+ /* simple case */
+ origin = gs_app_get_origin (app);
+ if (origin != NULL && gs_utils_strv_fnmatch (priv->sources, origin))
+ gs_app_set_license (app, GS_APP_QUALITY_NORMAL, priv->license_id);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) == 0)
+ return TRUE;
+ /* nothing to search */
+ if (priv->sources == NULL || priv->sources[0] == NULL)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-provenance.c b/plugins/core/gs-plugin-provenance.c
new file mode 100644
index 0000000..03a854b
--- /dev/null
+++ b/plugins/core/gs-plugin-provenance.c
@@ -0,0 +1,141 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+/*
+ * SECTION:
+ * Sets the package provenance to TRUE if installed by an official
+ * software source.
+ */
+
+struct GsPluginData {
+ GSettings *settings;
+ gchar **sources;
+};
+
+static gchar **
+gs_plugin_provenance_get_sources (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *tmp;
+ tmp = g_getenv ("GS_SELF_TEST_PROVENANCE_SOURCES");
+ if (tmp != NULL) {
+ g_debug ("using custom provenance sources of %s", tmp);
+ return g_strsplit (tmp, ",", -1);
+ }
+ return g_settings_get_strv (priv->settings, "official-repos");
+}
+
+static void
+gs_plugin_provenance_settings_changed_cb (GSettings *settings,
+ const gchar *key,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (g_strcmp0 (key, "official-repos") == 0) {
+ g_strfreev (priv->sources);
+ priv->sources = gs_plugin_provenance_get_sources (plugin);
+ }
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ priv->settings = g_settings_new ("org.gnome.software");
+ g_signal_connect (priv->settings, "changed",
+ G_CALLBACK (gs_plugin_provenance_settings_changed_cb), plugin);
+ priv->sources = gs_plugin_provenance_get_sources (plugin);
+
+ /* after the package source is set */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "dummy");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refine");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "rpm-ostree");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_strfreev (priv->sources);
+ g_object_unref (priv->settings);
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *origin;
+ gchar **sources;
+
+ /* not required */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE) == 0)
+ return TRUE;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_PROVENANCE))
+ return TRUE;
+
+ /* nothing to search */
+ sources = priv->sources;
+ if (sources == NULL || sources[0] == NULL)
+ return TRUE;
+
+ /* simple case */
+ origin = gs_app_get_origin (app);
+ if (origin != NULL && gs_utils_strv_fnmatch (sources, origin)) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ return TRUE;
+ }
+
+ /* this only works for packages */
+ origin = gs_app_get_source_id_default (app);
+ if (origin == NULL)
+ return TRUE;
+ origin = g_strrstr (origin, ";");
+ if (origin == NULL)
+ return TRUE;
+ if (g_str_has_prefix (origin + 1, "installed:"))
+ origin += 10;
+ if (gs_utils_strv_fnmatch (sources, origin + 1)) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ return TRUE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE) == 0)
+ return TRUE;
+ /* nothing to search */
+ if (priv->sources == NULL || priv->sources[0] == NULL)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-plugin-rewrite-resource.c b/plugins/core/gs-plugin-rewrite-resource.c
new file mode 100644
index 0000000..2856a3e
--- /dev/null
+++ b/plugins/core/gs-plugin-rewrite-resource.c
@@ -0,0 +1,73 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <gnome-software.h>
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ /* let appstream add metadata first */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *keys[] = {
+ "GnomeSoftware::AppTile-css",
+ "GnomeSoftware::FeatureTile-css",
+ "GnomeSoftware::UpgradeBanner-css",
+ NULL };
+
+ /* rewrite URIs */
+ for (guint i = 0; keys[i] != NULL; i++) {
+ const gchar *css = gs_app_get_metadata_item (app, keys[i]);
+ if (css != NULL) {
+ g_autofree gchar *css_new = NULL;
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
+ gs_app_set_summary_missing (app_dl,
+ /* TRANSLATORS: status text when downloading */
+ _("Downloading featured images…"));
+ css_new = gs_plugin_download_rewrite_resource (plugin,
+ app,
+ css,
+ cancellable,
+ error);
+ if (css_new == NULL)
+ return FALSE;
+ if (g_strcmp0 (css, css_new) != 0) {
+ gs_app_set_metadata (app, keys[i], NULL);
+ gs_app_set_metadata (app, keys[i], css_new);
+ }
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/core/gs-self-test.c b/plugins/core/gs-self-test.c
new file mode 100644
index 0000000..5aabbdf
--- /dev/null
+++ b/plugins/core/gs-self-test.c
@@ -0,0 +1,277 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Joaquim Rocha <jrocha@endlessm.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gstdio.h>
+
+#include "gnome-software-private.h"
+
+#include "gs-appstream.h"
+#include "gs-test.h"
+
+static void
+gs_plugins_core_search_repo_name_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app_tmp = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* force this app to be installed */
+ app_tmp = gs_plugin_loader_app_create (plugin_loader, "*/*/yellow/desktop/arachne.desktop/*");
+ gs_app_set_state (app_tmp, AS_APP_STATE_INSTALLED);
+
+ /* get search result based on addon keyword */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "yellow",
+ NULL);
+ gs_plugin_job_set_refine_flags (plugin_job, GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there is one entry, the parent app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "arachne.desktop");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+}
+
+static void
+gs_plugins_core_os_release_func (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsApp) app3 = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* refine system application */
+ app = gs_plugin_loader_get_system_app (plugin_loader);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* make sure there is valid content */
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.fedoraproject.Fedora-25");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_OS_UPGRADE);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_name (app), ==, "Fedora");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "25");
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==,
+ "https://fedoraproject.org/");
+ g_assert_cmpstr (gs_app_get_metadata_item (app, "GnomeSoftware::CpeName"), ==,
+ "cpe:/o:fedoraproject:fedora:25");
+
+ /* this comes from appstream */
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Fedora Workstation");
+
+ /* check we can get this by the old name too */
+ app3 = gs_plugin_loader_get_system_app (plugin_loader);
+ g_assert (app3 != NULL);
+ g_assert (app3 == app);
+}
+
+static void
+gs_plugins_core_generic_updates_func (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ GsApp *os_update;
+ GsAppList *related;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GsPluginJob) plugin_job2 = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app1 = NULL;
+ g_autoptr(GsApp) app2 = NULL;
+ g_autoptr(GsApp) app_wildcard = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) list_wildcard = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* create a list with generic apps */
+ list = gs_app_list_new ();
+ app1 = gs_app_new ("package1");
+ app2 = gs_app_new ("package2");
+ gs_app_set_kind (app1, AS_APP_KIND_GENERIC);
+ gs_app_set_kind (app2, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app1, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_bundle_kind (app2, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app1, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_scope (app2, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_state (app1, AS_APP_STATE_UPDATABLE);
+ gs_app_set_state (app2, AS_APP_STATE_UPDATABLE);
+ gs_app_add_source (app1, "package1");
+ gs_app_add_source (app2, "package2");
+ gs_app_list_add (list, app1);
+ gs_app_list_add (list, app2);
+
+ /* refine to make the generic-updates plugin merge them into a single OsUpdate item */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "list", list,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* make sure there is one entry, the os update */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ os_update = gs_app_list_index (list, 0);
+
+ /* make sure the os update is valid */
+ g_assert_cmpstr (gs_app_get_id (os_update), ==, "org.gnome.Software.OsUpdate");
+ g_assert_cmpint (gs_app_get_kind (os_update), ==, AS_APP_KIND_OS_UPDATE);
+ g_assert (gs_app_has_quirk (os_update, GS_APP_QUIRK_IS_PROXY));
+
+ /* must have two related apps, the ones we added earlier */
+ related = gs_app_get_related (os_update);
+ g_assert_cmpint (gs_app_list_length (related), ==, 2);
+
+ /* another test to make sure that we don't get an OsUpdate item created for wildcard apps */
+ list_wildcard = gs_app_list_new ();
+ app_wildcard = gs_app_new ("nosuchapp.desktop");
+ gs_app_add_quirk (app_wildcard, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_set_kind (app_wildcard, AS_APP_KIND_GENERIC);
+ gs_app_list_add (list_wildcard, app_wildcard);
+ plugin_job2 = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "list", list_wildcard,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job2, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* no OsUpdate item created */
+ for (guint i = 0; i < gs_app_list_length (list_wildcard); i++) {
+ GsApp *app_tmp = gs_app_list_index (list_wildcard, i);
+ g_assert_cmpint (gs_app_get_kind (app_tmp), !=, AS_APP_KIND_OS_UPDATE);
+ g_assert (!gs_app_has_quirk (app_tmp, GS_APP_QUIRK_IS_PROXY));
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ g_autofree gchar *tmp_root = NULL;
+ gboolean ret;
+ int retval;
+ g_autofree gchar *os_release_filename = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *xml;
+ const gchar *allowlist[] = {
+ "appstream",
+ "generic-updates",
+ "icons",
+ "os-release",
+ NULL
+ };
+
+ /* While we use %G_TEST_OPTION_ISOLATE_DIRS to create temporary directories
+ * for each of the tests, we want to use the system MIME registry, assuming
+ * that it exists and correctly has shared-mime-info installed. */
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_content_type_set_mime_dirs (NULL);
+#endif
+
+ /* Similarly, add the system-wide icon theme path before it’s
+ * overwritten by %G_TEST_OPTION_ISOLATE_DIRS. */
+ gs_test_expose_icon_theme_paths ();
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* Use a common cache directory for all tests, since the appstream
+ * plugin uses it and cannot be reinitialised for each test. */
+ tmp_root = g_dir_make_tmp ("gnome-software-core-test-XXXXXX", NULL);
+ g_assert (tmp_root != NULL);
+ g_setenv ("GS_SELF_TEST_CACHEDIR", tmp_root, TRUE);
+
+ os_release_filename = gs_test_get_filename (TESTDATADIR, "os-release");
+ g_assert (os_release_filename != NULL);
+ g_setenv ("GS_SELF_TEST_OS_RELEASE_FILENAME", os_release_filename, TRUE);
+
+ /* fake some data */
+ xml = "<?xml version=\"1.0\"?>\n"
+ "<components origin=\"yellow\" version=\"0.9\">\n"
+ " <component type=\"desktop\">\n"
+ " <id>arachne.desktop</id>\n"
+ " <name>test</name>\n"
+ " <summary>Test</summary>\n"
+ " <icon type=\"stock\">system-file-manager</icon>\n"
+ " <pkgname>arachne</pkgname>\n"
+ " </component>\n"
+ " <component type=\"os-upgrade\">\n"
+ " <id>org.fedoraproject.Fedora-25</id>\n"
+ " <name>Fedora</name>\n"
+ " <summary>Fedora Workstation</summary>\n"
+ " <pkgname>fedora-release</pkgname>\n"
+ " </component>\n"
+ " <info>\n"
+ " <scope>user</scope>\n"
+ " </info>\n"
+ "</components>\n";
+ g_setenv ("GS_SELF_TEST_APPSTREAM_XML", xml, TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/core/search-repo-name",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_core_search_repo_name_func);
+ g_test_add_data_func ("/gnome-software/plugins/core/os-release",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_core_os_release_func);
+ g_test_add_data_func ("/gnome-software/plugins/core/generic-updates",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_core_generic_updates_func);
+ retval = g_test_run ();
+
+ /* Clean up. */
+ gs_utils_rmtree (tmp_root, NULL);
+
+ return retval;
+}
diff --git a/plugins/core/meson.build b/plugins/core/meson.build
new file mode 100644
index 0000000..10c43f3
--- /dev/null
+++ b/plugins/core/meson.build
@@ -0,0 +1,250 @@
+cargs = ['-DG_LOG_DOMAIN="GsPlugin"']
+
+shared_module(
+ 'gs_plugin_generic-updates',
+ sources : 'gs-plugin-generic-updates.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_key-colors',
+ sources : 'gs-plugin-key-colors.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_key-colors-metadata',
+ sources : 'gs-plugin-key-colors-metadata.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_provenance',
+ sources : 'gs-plugin-provenance.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_provenance-license',
+ sources : 'gs-plugin-provenance-license.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+
+shared_module(
+ 'gs_plugin_icons',
+ sources : 'gs-plugin-icons.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_appstream',
+ sources : [
+ 'gs-appstream.c',
+ 'gs-plugin-appstream.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [
+ plugin_libs,
+ libxmlb,
+ ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_desktop-categories',
+ sources : [
+ 'gs-plugin-desktop-categories.c',
+ 'gs-desktop-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_desktop-menu-path',
+ sources : [
+ 'gs-plugin-desktop-menu-path.c',
+ 'gs-desktop-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_hardcoded-blocklist',
+ sources : 'gs-plugin-hardcoded-blocklist.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('hardcoded_popular')
+ shared_module(
+ 'gs_plugin_hardcoded-popular',
+ sources : 'gs-plugin-hardcoded-popular.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+ )
+endif
+
+shared_module(
+ 'gs_plugin_rewrite-resource',
+ sources : 'gs-plugin-rewrite-resource.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_os-release',
+ sources : 'gs-plugin-os-release.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+ e = executable(
+ 'gs-self-test-core',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c',
+ 'gs-appstream.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ libxmlb,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-core', e, suite: ['plugins', 'core'], env: test_env)
+endif
diff --git a/plugins/core/tests/os-release b/plugins/core/tests/os-release
new file mode 120000
index 0000000..1efe264
--- /dev/null
+++ b/plugins/core/tests/os-release
@@ -0,0 +1 @@
+../../../data/tests/os-release \ No newline at end of file
diff --git a/plugins/dpkg/gs-plugin-dpkg.c b/plugins/dpkg/gs-plugin-dpkg.c
new file mode 100644
index 0000000..48fb72a
--- /dev/null
+++ b/plugins/dpkg/gs-plugin-dpkg.c
@@ -0,0 +1,111 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2011-2013 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <gnome-software.h>
+
+#define DPKG_DEB_BINARY "/usr/bin/dpkg-deb"
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ if (!g_file_test (DPKG_DEB_BINARY, G_FILE_TEST_EXISTS)) {
+ g_debug ("disabling '%s' as no %s available",
+ gs_plugin_get_name (plugin), DPKG_DEB_BINARY);
+ gs_plugin_set_enabled (plugin, FALSE);
+ }
+}
+
+gboolean
+gs_plugin_file_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint i;
+ g_autofree gchar *content_type = NULL;
+ g_autofree gchar *output = NULL;
+ g_auto(GStrv) argv = NULL;
+ g_auto(GStrv) tokens = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GString) str = NULL;
+ const gchar *mimetypes[] = {
+ "application/vnd.debian.binary-package",
+ NULL };
+
+ /* does this match any of the mimetypes we support */
+ content_type = gs_utils_get_content_type (file, cancellable, error);
+ if (content_type == NULL)
+ return FALSE;
+ if (!g_strv_contains (mimetypes, content_type))
+ return TRUE;
+
+ /* exec sync */
+ argv = g_new0 (gchar *, 5);
+ argv[0] = g_strdup (DPKG_DEB_BINARY);
+ argv[1] = g_strdup ("--showformat=${Package}\\n"
+ "${Version}\\n"
+ "${Installed-Size}\\n"
+ "${Homepage}\\n"
+ "${Description}");
+ argv[2] = g_strdup ("-W");
+ argv[3] = g_file_get_path (file);
+ if (!g_spawn_sync (NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL, NULL, &output, NULL, NULL, error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+
+ /* parse output */
+ tokens = g_strsplit (output, "\n", 0);
+ if (g_strv_length (tokens) < 5) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "dpkg-deb output format incorrect:\n\"%s\"\n", output);
+ return FALSE;
+ }
+
+ /* create app */
+ app = gs_app_new (NULL);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+ gs_app_add_source (app, tokens[0]);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, tokens[0]);
+ gs_app_set_version (app, tokens[1]);
+ gs_app_set_size_installed (app, 1024 * g_ascii_strtoull (tokens[2], NULL, 10));
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, tokens[3]);
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, tokens[4]);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+
+ /* multiline text */
+ str = g_string_new ("");
+ for (i = 5; tokens[i] != NULL; i++) {
+ if (g_strcmp0 (tokens[i], " .") == 0) {
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 1);
+ g_string_append (str, "\n");
+ continue;
+ }
+ g_strstrip (tokens[i]);
+ g_string_append_printf (str, "%s ", tokens[i]);
+ }
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 1);
+ gs_app_set_description (app, GS_APP_QUALITY_LOWEST, str->str);
+
+ /* success */
+ gs_app_list_add (list, app);
+ return TRUE;
+}
diff --git a/plugins/dpkg/gs-self-test.c b/plugins/dpkg/gs-self-test.c
new file mode 100644
index 0000000..e3a76b2
--- /dev/null
+++ b/plugins/dpkg/gs-self-test.c
@@ -0,0 +1,97 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static void
+gs_plugins_dpkg_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autofree gchar *fn = NULL;
+ g_autoptr(GFile) file = NULL;
+
+ /* no dpkg, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "dpkg")) {
+ g_test_skip ("not enabled");
+ return;
+ }
+
+ /* load local file */
+ fn = gs_test_get_filename (TESTDATADIR, "chiron-1.1-1.deb");
+ g_assert (fn != NULL);
+ file = g_file_new_for_path (fn);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (app != NULL);
+ g_assert_cmpstr (gs_app_get_source_default (app), ==, "chiron");
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://127.0.0.1/");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "chiron");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.1-1");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Single line synopsis");
+ g_assert_cmpstr (gs_app_get_description (app), ==,
+ "This is the first paragraph in the example "
+ "package control file.\nThis is the second paragraph.");
+ g_assert (gs_app_get_local_file (app) != NULL);
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "dpkg",
+ NULL
+ };
+
+ /* While we use %G_TEST_OPTION_ISOLATE_DIRS to create temporary directories
+ * for each of the tests, we want to use the system MIME registry, assuming
+ * that it exists and correctly has shared-mime-info installed. */
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_content_type_set_mime_dirs (NULL);
+#endif
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/dpkg",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dpkg_func);
+
+ return g_test_run ();
+}
diff --git a/plugins/dpkg/meson.build b/plugins/dpkg/meson.build
new file mode 100644
index 0000000..ffae636
--- /dev/null
+++ b/plugins/dpkg/meson.build
@@ -0,0 +1,41 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginDpkg"']
+
+shared_module(
+ 'gs_plugin_dpkg',
+ sources : 'gs-plugin-dpkg.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+ e = executable(
+ 'gs-self-test-dpkg',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-dpkg', e, suite: ['plugins', 'dpkg'], env: test_env)
+endif
diff --git a/plugins/dpkg/tests/build-deb.sh b/plugins/dpkg/tests/build-deb.sh
new file mode 100755
index 0000000..cbf50f6
--- /dev/null
+++ b/plugins/dpkg/tests/build-deb.sh
@@ -0,0 +1 @@
+dpkg-deb --build debian chiron-1.1-1.deb
diff --git a/plugins/dpkg/tests/chiron-1.1-1.deb b/plugins/dpkg/tests/chiron-1.1-1.deb
new file mode 100644
index 0000000..f4f921a
--- /dev/null
+++ b/plugins/dpkg/tests/chiron-1.1-1.deb
Binary files differ
diff --git a/plugins/dpkg/tests/debian/DEBIAN/control b/plugins/dpkg/tests/debian/DEBIAN/control
new file mode 100644
index 0000000..ad5d9c6
--- /dev/null
+++ b/plugins/dpkg/tests/debian/DEBIAN/control
@@ -0,0 +1,13 @@
+Package: chiron
+Version: 1.1-1
+Section: base
+Priority: optional
+Architecture: all
+Homepage: http://127.0.0.1/
+Maintainer: Richard Hughes <richard@hughsie.com>
+Description: Single line synopsis
+ This is the first
+ paragraph in the example package
+ control file.
+ .
+ This is the second paragraph.
diff --git a/plugins/dpkg/tests/debian/usr/bin/chiron b/plugins/dpkg/tests/debian/usr/bin/chiron
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/dpkg/tests/debian/usr/bin/chiron
diff --git a/plugins/dummy/gs-plugin-dummy.c b/plugins/dummy/gs-plugin-dummy.c
new file mode 100644
index 0000000..824baae
--- /dev/null
+++ b/plugins/dummy/gs-plugin-dummy.c
@@ -0,0 +1,938 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2011-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+/*
+ * SECTION:
+ * Provides some dummy data that is useful in self test programs.
+ */
+
+struct GsPluginData {
+ guint quirk_id;
+ guint allow_updates_id;
+ gboolean allow_updates_inhibit;
+ GsApp *cached_origin;
+ GHashTable *installed_apps; /* id:1 */
+ GHashTable *available_apps; /* id:1 */
+};
+
+/* just flip-flop this every few seconds */
+static gboolean
+gs_plugin_dummy_allow_updates_cb (gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ gs_plugin_set_allow_updates (plugin, priv->allow_updates_inhibit);
+ priv->allow_updates_inhibit = !priv->allow_updates_inhibit;
+ return G_SOURCE_CONTINUE;
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ if (g_getenv ("GS_SELF_TEST_DUMMY_ENABLE") == NULL) {
+ g_debug ("disabling '%s' as not in self test",
+ gs_plugin_get_name (plugin));
+ gs_plugin_set_enabled (plugin, FALSE);
+ return;
+ }
+
+ /* toggle this */
+ if (g_getenv ("GS_SELF_TEST_TOGGLE_ALLOW_UPDATES") != NULL) {
+ priv->allow_updates_id = g_timeout_add_seconds (10,
+ gs_plugin_dummy_allow_updates_cb, plugin);
+ }
+
+ /* add source */
+ priv->cached_origin = gs_app_new (gs_plugin_get_name (plugin));
+ gs_app_set_kind (priv->cached_origin, AS_APP_KIND_SOURCE);
+ gs_app_set_origin_hostname (priv->cached_origin, "http://www.bbc.co.uk/");
+
+ /* add the source to the plugin cache which allows us to match the
+ * unique ID to a GsApp when creating an event */
+ gs_plugin_cache_add (plugin, NULL, priv->cached_origin);
+
+ /* keep track of what apps are installed */
+ priv->installed_apps = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ priv->available_apps = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ g_hash_table_insert (priv->available_apps,
+ g_strdup ("chiron.desktop"),
+ GUINT_TO_POINTER (1));
+ g_hash_table_insert (priv->available_apps,
+ g_strdup ("zeus.desktop"),
+ GUINT_TO_POINTER (1));
+ g_hash_table_insert (priv->available_apps,
+ g_strdup ("zeus-spell.addon"),
+ GUINT_TO_POINTER (1));
+ g_hash_table_insert (priv->available_apps,
+ g_strdup ("com.hughski.ColorHug2.driver"),
+ GUINT_TO_POINTER (1));
+
+ /* need help from appstream */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "os-release");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "odrs");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (priv->installed_apps != NULL)
+ g_hash_table_unref (priv->installed_apps);
+ if (priv->available_apps != NULL)
+ g_hash_table_unref (priv->available_apps);
+ if (priv->quirk_id > 0)
+ g_source_remove (priv->quirk_id);
+ if (priv->cached_origin != NULL)
+ g_object_unref (priv->cached_origin);
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_id (app) != NULL &&
+ g_str_has_prefix (gs_app_get_id (app), "dummy:")) {
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ return;
+ }
+ if (g_strcmp0 (gs_app_get_id (app), "mate-spell.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "zeus.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "com.hughski.ColorHug2.driver") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "zeus-spell.addon") == 0 ||
+ g_strcmp0 (gs_app_get_source_default (app), "chiron") == 0)
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+}
+
+static gboolean
+gs_plugin_dummy_delay (GsPlugin *plugin,
+ GsApp *app,
+ guint timeout_ms,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = TRUE;
+ guint i;
+ guint timeout_us = timeout_ms * 10;
+
+ /* do blocking delay in 1% increments */
+ for (i = 0; i < 100; i++) {
+ g_usleep (timeout_us);
+ if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_utils_error_convert_gio (error);
+ ret = FALSE;
+ break;
+ }
+ if (app != NULL)
+ gs_app_set_progress (app, i);
+ gs_plugin_status_update (plugin, app,
+ GS_PLUGIN_STATUS_DOWNLOADING);
+ }
+ return ret;
+}
+
+static gboolean
+gs_plugin_dummy_poll_cb (gpointer user_data)
+{
+ g_autoptr(GsApp) app = NULL;
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+
+ /* find the app in the per-plugin cache -- this assumes that we can
+ * calculate the same key as used when calling gs_plugin_cache_add() */
+ app = gs_plugin_cache_lookup (plugin, "chiron");
+ if (app == NULL) {
+ g_warning ("app not found in cache!");
+ return FALSE;
+ }
+
+ /* toggle this to animate the hide/show the 3rd party banner */
+ if (!gs_app_has_quirk (app, GS_APP_QUIRK_PROVENANCE)) {
+ g_debug ("about to make app distro-provided");
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ } else {
+ g_debug ("about to make app 3rd party");
+ gs_app_remove_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ }
+
+ /* continue polling */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_url_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *path = NULL;
+ g_autofree gchar *scheme = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* not us */
+ scheme = gs_utils_get_url_scheme (url);
+ if (g_strcmp0 (scheme, "dummy") != 0)
+ return TRUE;
+
+ /* create app */
+ path = gs_utils_get_url_path (url);
+ app = gs_app_new (path);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ return TRUE;
+}
+
+typedef struct {
+ GMainLoop *loop;
+ GCancellable *cancellable;
+ guint timer_id;
+ gulong cancellable_id;
+} GsPluginDummyTimeoutHelper;
+
+static gboolean
+gs_plugin_dummy_timeout_hang_cb (gpointer user_data)
+{
+ GsPluginDummyTimeoutHelper *helper = (GsPluginDummyTimeoutHelper *) user_data;
+ helper->timer_id = 0;
+ g_debug ("timeout hang");
+ g_main_loop_quit (helper->loop);
+ return FALSE;
+}
+
+static void
+gs_plugin_dummy_timeout_cancelled_cb (GCancellable *cancellable, gpointer user_data)
+{
+ GsPluginDummyTimeoutHelper *helper = (GsPluginDummyTimeoutHelper *) user_data;
+ g_debug ("calling cancel");
+ g_main_loop_quit (helper->loop);
+}
+
+static void
+gs_plugin_dummy_timeout_helper_free (GsPluginDummyTimeoutHelper *helper)
+{
+ if (helper->cancellable_id != 0)
+ g_signal_handler_disconnect (helper->cancellable, helper->cancellable_id);
+ if (helper->timer_id != 0)
+ g_source_remove (helper->timer_id);
+ if (helper->cancellable != NULL)
+ g_object_unref (helper->cancellable);
+ g_main_loop_unref (helper->loop);
+ g_free (helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsPluginDummyTimeoutHelper, gs_plugin_dummy_timeout_helper_free)
+
+static void
+gs_plugin_dummy_timeout_add (guint timeout_ms, GCancellable *cancellable)
+{
+ g_autoptr(GsPluginDummyTimeoutHelper) helper = g_new0 (GsPluginDummyTimeoutHelper, 1);
+ helper->loop = g_main_loop_new (NULL, TRUE);
+ if (cancellable != NULL) {
+ helper->cancellable = g_object_ref (cancellable);
+ helper->cancellable_id =
+ g_signal_connect (cancellable, "cancelled",
+ G_CALLBACK (gs_plugin_dummy_timeout_cancelled_cb),
+ helper);
+ }
+ helper->timer_id = g_timeout_add (timeout_ms,
+ gs_plugin_dummy_timeout_hang_cb,
+ helper);
+ g_main_loop_run (helper->loop);
+}
+
+gboolean
+gs_plugin_add_alternates (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ if (g_strcmp0 (gs_app_get_id (app), "zeus.desktop") == 0) {
+ g_autoptr(GsApp) app2 = gs_app_new ("chiron.desktop");
+ gs_app_list_add (list, app2);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(AsIcon) ic = NULL;
+
+ /* hang the plugin for 5 seconds */
+ if (g_strcmp0 (values[0], "hang") == 0) {
+ gs_plugin_dummy_timeout_add (5000, cancellable);
+ if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ /* we're very specific */
+ if (g_strcmp0 (values[0], "chiron") != 0)
+ return TRUE;
+
+ /* does the app already exist? */
+ app = gs_plugin_cache_lookup (plugin, "chiron");
+ if (app != NULL) {
+ g_debug ("using %s fom the cache", gs_app_get_id (app));
+ gs_app_list_add (list, app);
+ return TRUE;
+ }
+
+ /* set up a timeout to emulate getting a GFileMonitor callback */
+ priv->quirk_id =
+ g_timeout_add_seconds (1, gs_plugin_dummy_poll_cb, plugin);
+
+ /* use a generic stock icon */
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "drive-harddisk");
+
+ /* add a live updatable normal application */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Chiron");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "A teaching application");
+ gs_app_add_icon (app, ic);
+ gs_app_set_size_installed (app, 42 * 1024 * 1024);
+ gs_app_set_size_download (app, 50 * 1024 * 1024);
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+
+ /* add to cache so it can be found by the flashing callback */
+ gs_plugin_cache_add (plugin, NULL, app);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsApp *app;
+ GsApp *proxy;
+ g_autoptr(AsIcon) ic = NULL;
+
+ /* update UI as this might take some time */
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
+
+ /* spin */
+ if (!gs_plugin_dummy_delay (plugin, NULL, 2000, cancellable, error))
+ return FALSE;
+
+ /* use a generic stock icon */
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "drive-harddisk");
+
+ /* add a live updatable normal application */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Chiron");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "A teaching application");
+ gs_app_set_update_details (app, "Do not crash when using libvirt.");
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_HIGH);
+ gs_app_add_icon (app, ic);
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+
+ /* add a offline OS update */
+ app = gs_app_new (NULL);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "libvirt-glib-devel");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "Development files for libvirt");
+ gs_app_set_update_details (app, "Fix several memory leaks.");
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_LOW);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ gs_app_add_source (app, "libvirt-glib-devel");
+ gs_app_add_source_id (app, "libvirt-glib-devel;0.0.1;noarch;fedora");
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+
+ /* add a live OS update */
+ app = gs_app_new (NULL);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "chiron-libs");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "library for chiron");
+ gs_app_set_update_details (app, "Do not crash when using libvirt.");
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_HIGH);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_add_source (app, "chiron-libs");
+ gs_app_add_source_id (app, "chiron-libs;0.0.1;i386;updates-testing");
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ g_object_unref (app);
+
+ /* add a proxy app update */
+ proxy = gs_app_new ("proxy.desktop");
+ gs_app_set_name (proxy, GS_APP_QUALITY_NORMAL, "Proxy");
+ gs_app_set_summary (proxy, GS_APP_QUALITY_NORMAL, "A proxy app");
+ gs_app_set_update_details (proxy, "Update all related apps.");
+ gs_app_set_update_urgency (proxy, AS_URGENCY_KIND_HIGH);
+ gs_app_add_icon (proxy, ic);
+ gs_app_set_kind (proxy, AS_APP_KIND_DESKTOP);
+ gs_app_add_quirk (proxy, GS_APP_QUIRK_IS_PROXY);
+ gs_app_set_state (proxy, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_management_plugin (proxy, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, proxy);
+ g_object_unref (proxy);
+
+ /* add a proxy related app */
+ app = gs_app_new ("proxy-related-app.desktop");
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Related app");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "A related app");
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_related (proxy, app);
+ g_object_unref (app);
+
+ /* add another proxy related app */
+ app = gs_app_new ("proxy-another-related-app.desktop");
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Another Related app");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "A related app");
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_related (proxy, app);
+ g_object_unref (app);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_installed (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *packages[] = { "zeus", "zeus-common", NULL };
+ const gchar *app_ids[] = { "Uninstall Zeus.desktop", NULL };
+ guint i;
+
+ /* add all packages */
+ for (i = 0; packages[i] != NULL; i++) {
+ g_autoptr(GsApp) app = gs_app_new (NULL);
+ gs_app_add_source (app, packages[i]);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_origin (app, "london-west");
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ }
+
+ /* add all app-ids */
+ for (i = 0; app_ids[i] != NULL; i++) {
+ g_autoptr(GsApp) app = gs_app_new (app_ids[i]);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_popular (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsApp) app1 = NULL;
+ g_autoptr(GsApp) app2 = NULL;
+
+ /* add wildcard */
+ app1 = gs_app_new ("zeus.desktop");
+ gs_app_add_quirk (app1, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_set_metadata (app1, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app1);
+
+ /* add again, this time with a prefix so it gets deduplicated */
+ app2 = gs_app_new ("zeus.desktop");
+ gs_app_set_scope (app2, AS_APP_SCOPE_USER);
+ gs_app_set_bundle_kind (app2, AS_BUNDLE_KIND_SNAP);
+ gs_app_set_metadata (app2, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app2);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_remove (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* remove app */
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0) {
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ if (!gs_plugin_dummy_delay (plugin, app, 500, cancellable, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ }
+
+ /* keep track */
+ g_hash_table_remove (priv->installed_apps, gs_app_get_id (app));
+ g_hash_table_insert (priv->available_apps,
+ g_strdup (gs_app_get_id (app)),
+ GUINT_TO_POINTER (1));
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* install app */
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "zeus.desktop") == 0) {
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ if (!gs_plugin_dummy_delay (plugin, app, 500, cancellable, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ }
+
+ /* keep track */
+ g_hash_table_insert (priv->installed_apps,
+ g_strdup (gs_app_get_id (app)),
+ GUINT_TO_POINTER (1));
+ g_hash_table_remove (priv->available_apps, gs_app_get_id (app));
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ if (!g_str_has_prefix (gs_app_get_id (app), "proxy")) {
+ /* always fail */
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "no network connection is available");
+ gs_utils_error_add_origin_id (error, priv->cached_origin);
+ return FALSE;
+ }
+
+ /* simulate an update for 4 seconds */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ for (guint i = 1; i <= 4; ++i) {
+ gs_app_set_progress (app, 25 * i);
+ sleep (1);
+ }
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ return TRUE;
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* make the local system EOL */
+ if (gs_app_get_metadata_item (app, "GnomeSoftware::CpeName") != NULL)
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+
+ /* state */
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN) {
+ if (g_hash_table_lookup (priv->installed_apps,
+ gs_app_get_id (app)) != NULL)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ if (g_hash_table_lookup (priv->available_apps,
+ gs_app_get_id (app)) != NULL)
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ }
+
+ /* kind */
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "mate-spell.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "com.hughski.ColorHug2.driver") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "zeus.desktop") == 0) {
+ if (gs_app_get_kind (app) == AS_APP_KIND_UNKNOWN)
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ }
+
+ /* license */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) {
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0 ||
+ g_strcmp0 (gs_app_get_id (app), "zeus.desktop") == 0)
+ gs_app_set_license (app, GS_APP_QUALITY_HIGHEST, "GPL-2.0+");
+ }
+
+ /* homepage */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL) {
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0) {
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE,
+ "http://www.test.org/");
+ }
+ }
+
+ /* origin */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN) {
+ if (g_strcmp0 (gs_app_get_id (app), "zeus-spell.addon") == 0)
+ gs_app_set_origin (app, "london-east");
+ }
+
+ /* default */
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0) {
+ if (gs_app_get_name (app) == NULL)
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "tmp");
+ if (gs_app_get_summary (app) == NULL)
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "tmp");
+ if (gs_app_get_icons(app)->len == 0) {
+ g_autoptr(AsIcon) ic = NULL;
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "drive-harddisk");
+ gs_app_add_icon (app, ic);
+ }
+ }
+
+ /* description */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION) {
+ if (g_strcmp0 (gs_app_get_id (app), "chiron.desktop") == 0) {
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL,
+ "long description!");
+ }
+ }
+
+ /* add fake review */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS) {
+ g_autoptr(AsReview) review1 = NULL;
+ g_autoptr(AsReview) review2 = NULL;
+ g_autoptr(GDateTime) dt = NULL;
+
+ dt = g_date_time_new_now_utc ();
+
+ /* set first review */
+ review1 = as_review_new ();
+ as_review_set_rating (review1, 50);
+ as_review_set_reviewer_name (review1, "Angela Avery");
+ as_review_set_summary (review1, "Steep learning curve, but worth it");
+ as_review_set_description (review1, "Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used overall 3D application I've ever used.");
+ as_review_set_version (review1, "3.16.4");
+ as_review_set_date (review1, dt);
+ gs_app_add_review (app, review1);
+
+ /* set self review */
+ review2 = as_review_new ();
+ as_review_set_rating (review2, 100);
+ as_review_set_reviewer_name (review2, "Just Myself");
+ as_review_set_summary (review2, "I like this application");
+ as_review_set_description (review2, "I'm not very wordy myself.");
+ as_review_set_version (review2, "3.16.3");
+ as_review_set_date (review2, dt);
+ as_review_set_flags (review2, AS_REVIEW_FLAG_SELF);
+ gs_app_add_review (app, review2);
+ }
+
+ /* add fake ratings */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS) {
+ g_autoptr(GArray) ratings = NULL;
+ const gint data[] = { 0, 10, 20, 30, 15, 2 };
+ ratings = g_array_sized_new (FALSE, FALSE, sizeof (gint), 6);
+ g_array_append_vals (ratings, data, 6);
+ gs_app_set_review_ratings (app, ratings);
+ }
+
+ /* add a rating */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING) {
+ gs_app_set_rating (app, 66);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_category_apps (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsApp) app = gs_app_new ("chiron.desktop");
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Chiron");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "View and use virtual machines");
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, "http://www.box.org");
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_set_pixbuf (app, gdk_pixbuf_new_from_file ("/usr/share/icons/hicolor/48x48/apps/chiron.desktop.png", NULL));
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_recent (GsPlugin *plugin,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsApp) app = gs_app_new ("chiron.desktop");
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Chiron");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "View and use virtual machines");
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, "http://www.box.org");
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_set_pixbuf (app, gdk_pixbuf_new_from_file ("/usr/share/icons/hicolor/48x48/apps/chiron.desktop.png", NULL));
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_distro_upgrades (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(AsIcon) ic = NULL;
+
+ /* use stock icon */
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "application-x-addon");
+
+ /* get existing item from the cache */
+ app = gs_plugin_cache_lookup (plugin, "user/*/*/os-upgrade/org.fedoraproject.release-rawhide.upgrade/*");
+ if (app != NULL) {
+ gs_app_list_add (list, app);
+ return TRUE;
+ }
+
+ app = gs_app_new ("org.fedoraproject.release-rawhide.upgrade");
+ gs_app_set_scope (app, AS_APP_SCOPE_USER);
+ gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, "Fedora");
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL,
+ "A major upgrade, with new features and added polish.");
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE,
+ "https://fedoraproject.org/wiki/Releases/24/Schedule");
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_REVIEWABLE);
+ gs_app_set_version (app, "25");
+ gs_app_set_size_installed (app, 256 * 1024 * 1024);
+ gs_app_set_size_download (app, 1024 * 1024 * 1024);
+ gs_app_set_license (app, GS_APP_QUALITY_LOWEST, "LicenseRef-free");
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_set_metadata (app, "GnomeSoftware::UpgradeBanner-css",
+ "background: url('" DATADIR "/gnome-software/upgrade-bg.png');"
+ "background-size: 100% 100%;");
+ gs_app_add_icon (app, ic);
+ gs_app_list_add (list, app);
+
+ gs_plugin_cache_add (plugin, NULL, app);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_download_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return gs_plugin_dummy_delay (plugin, app, 5100, cancellable, error);
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsApp) app = gs_app_new (NULL);
+ return gs_plugin_dummy_delay (plugin, app, 3100, cancellable, error);
+}
+
+gboolean
+gs_plugin_app_upgrade_download (GsPlugin *plugin, GsApp *app,
+ GCancellable *cancellable, GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ g_debug ("starting download");
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ if (!gs_plugin_dummy_delay (plugin, app, 5000, cancellable, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_upgrade_trigger (GsPlugin *plugin, GsApp *app,
+ GCancellable *cancellable, GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* NOP */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update_cancel (GsPlugin *plugin, GsApp *app,
+ GCancellable *cancellable, GError **error)
+{
+ return TRUE;
+}
+
+gboolean
+gs_plugin_review_submit (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_debug ("Submitting dummy review");
+ return TRUE;
+}
+
+gboolean
+gs_plugin_review_report (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_debug ("Reporting dummy review");
+ as_review_add_flags (review, AS_REVIEW_FLAG_VOTED);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_review_upvote (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_debug ("Upvoting dummy review");
+ as_review_add_flags (review, AS_REVIEW_FLAG_VOTED);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_review_downvote (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_debug ("Downvoting dummy review");
+ as_review_add_flags (review, AS_REVIEW_FLAG_VOTED);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_review_remove (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* all okay */
+ g_debug ("Removing dummy self-review");
+ return TRUE;
+}
diff --git a/plugins/dummy/gs-self-test.c b/plugins/dummy/gs-self-test.c
new file mode 100644
index 0000000..30360cc
--- /dev/null
+++ b/plugins/dummy/gs-self-test.c
@@ -0,0 +1,898 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gstdio.h>
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static guint _status_changed_cnt = 0;
+
+typedef struct {
+ GError *error;
+ GMainLoop *loop;
+} GsDummyTestHelper;
+
+static GsDummyTestHelper *
+gs_dummy_test_helper_new (void)
+{
+ return g_new0 (GsDummyTestHelper, 1);
+}
+
+static void
+gs_dummy_test_helper_free (GsDummyTestHelper *helper)
+{
+ if (helper->error != NULL)
+ g_error_free (helper->error);
+ if (helper->loop != NULL)
+ g_main_loop_unref (helper->loop);
+ g_free (helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsDummyTestHelper, gs_dummy_test_helper_free)
+
+static void
+gs_plugin_loader_status_changed_cb (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GsPluginStatus status,
+ gpointer user_data)
+{
+ _status_changed_cnt++;
+}
+
+static void
+gs_plugins_dummy_install_func (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* install */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_management_plugin (app, "dummy");
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+
+ /* remove */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+}
+
+static void
+gs_plugins_dummy_error_func (GsPluginLoader *plugin_loader)
+{
+ const GError *app_error;
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GPtrArray) events = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginEvent) event = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* update, which should cause an error to be emitted */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_management_plugin (app, "dummy");
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* get last active event */
+ event = gs_plugin_loader_get_event_default (plugin_loader);
+ g_assert (event != NULL);
+ g_assert (gs_plugin_event_get_app (event) == app);
+
+ /* check all the events */
+ events = gs_plugin_loader_get_events (plugin_loader);
+ g_assert_cmpint (events->len, ==, 1);
+ event = g_ptr_array_index (events, 0);
+ g_assert (gs_plugin_event_get_app (event) == app);
+ app_error = gs_plugin_event_get_error (event);
+ g_assert (app_error != NULL);
+ g_assert_error (app_error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED);
+}
+
+static void
+gs_plugins_dummy_refine_func (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get the extra bits */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_management_plugin (app, "dummy");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ g_assert_cmpstr (gs_app_get_license (app), ==, "GPL-2.0+");
+ g_assert_cmpstr (gs_app_get_description (app), !=, NULL);
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://www.test.org/");
+}
+
+static void
+gs_plugins_dummy_metadata_quirks (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get the extra bits */
+ app = gs_app_new ("chiron.desktop");
+ gs_app_set_management_plugin (app, "dummy");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ g_assert_cmpstr (gs_app_get_description (app), !=, NULL);
+
+ /* check the not-launchable quirk */
+
+ g_assert (!gs_app_has_quirk(app, GS_APP_QUIRK_NOT_LAUNCHABLE));
+
+ gs_app_set_metadata (app, "GnomeSoftware::quirks::not-launchable", "true");
+
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ g_assert (gs_app_has_quirk(app, GS_APP_QUIRK_NOT_LAUNCHABLE));
+
+ gs_app_set_metadata (app, "GnomeSoftware::quirks::not-launchable", NULL);
+ gs_app_set_metadata (app, "GnomeSoftware::quirks::not-launchable", "false");
+
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ g_assert (!gs_app_has_quirk(app, GS_APP_QUIRK_NOT_LAUNCHABLE));
+}
+
+static void
+gs_plugins_dummy_key_colors_func (GsPluginLoader *plugin_loader)
+{
+ GPtrArray *array;
+ gboolean ret;
+ guint i;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* get the extra bits */
+ app = gs_app_new ("zeus.desktop");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_KEY_COLORS,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ array = gs_app_get_key_colors (app);
+ g_assert_cmpint (array->len, >=, 3);
+
+ /* check values are in range */
+ for (i = 0; i < array->len; i++) {
+ GdkRGBA *kc = g_ptr_array_index (array, i);
+ g_assert_cmpfloat (kc->red, >=, 0.f);
+ g_assert_cmpfloat (kc->red, <=, 1.f);
+ g_assert_cmpfloat (kc->green, >=, 0.f);
+ g_assert_cmpfloat (kc->green, <=, 1.f);
+ g_assert_cmpfloat (kc->blue, >=, 0.f);
+ g_assert_cmpfloat (kc->blue, <=, 1.f);
+ g_assert_cmpfloat (kc->alpha, >=, 0.f);
+ g_assert_cmpfloat (kc->alpha, <=, 1.f);
+ }
+}
+
+static void
+gs_plugins_dummy_updates_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get the updates list */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there are three entries */
+ g_assert_cmpint (gs_app_list_length (list), ==, 3);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "chiron.desktop");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE_LIVE);
+ g_assert_cmpstr (gs_app_get_update_details (app), ==, "Do not crash when using libvirt.");
+ g_assert_cmpint (gs_app_get_update_urgency (app), ==, AS_URGENCY_KIND_HIGH);
+
+ /* get the virtual non-apps OS update */
+ app = gs_app_list_index (list, 2);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.gnome.Software.OsUpdate");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "OS Updates");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Includes performance, stability and security improvements.");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_OS_UPDATE);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE);
+ g_assert_cmpint (gs_app_list_length (gs_app_get_related (app)), ==, 2);
+
+ /* get the virtual non-apps OS update */
+ app = gs_app_list_index (list, 1);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "proxy.desktop");
+ g_assert (gs_app_has_quirk (app, GS_APP_QUIRK_IS_PROXY));
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE_LIVE);
+ g_assert_cmpint (gs_app_list_length (gs_app_get_related (app)), ==, 2);
+}
+
+static void
+gs_plugins_dummy_distro_upgrades_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get the updates list */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES, NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there is one entry */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.fedoraproject.release-rawhide.upgrade");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_OS_UPGRADE);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+
+ /* this should be set with a higher priority by AppStream */
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Release specific tagline");
+
+ /* download the update */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE);
+
+ /* trigger the update */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPGRADE_TRIGGER,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE);
+}
+
+static void
+gs_plugins_dummy_installed_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ GsApp *addon;
+ GsAppList *addons;
+ g_autofree gchar *menu_path = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get installed packages */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_INSTALLED,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there is one entry */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "zeus.desktop");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_name (app), ==, "Zeus");
+ g_assert_cmpstr (gs_app_get_source_default (app), ==, "zeus");
+ g_assert (gs_app_get_pixbuf (app) != NULL);
+
+ /* check various bitfields */
+ g_assert (gs_app_has_quirk (app, GS_APP_QUIRK_PROVENANCE));
+ g_assert_cmpstr (gs_app_get_license (app), ==, "GPL-2.0+");
+ g_assert (gs_app_get_license_is_free (app));
+
+ /* check kudos */
+ g_assert_true (gs_app_has_kudo (app, GS_APP_KUDO_MY_LANGUAGE));
+
+ /* check categories */
+ g_assert (gs_app_has_category (app, "Player"));
+ g_assert (gs_app_has_category (app, "AudioVideo"));
+ g_assert (!gs_app_has_category (app, "ImageProcessing"));
+ g_assert (gs_app_get_menu_path (app) != NULL);
+ menu_path = g_strjoinv ("->", gs_app_get_menu_path (app));
+ g_assert_cmpstr (menu_path, ==, "Audio & Video->Music Players");
+
+ /* check addon */
+ addons = gs_app_get_addons (app);
+ g_assert_cmpint (gs_app_list_length (addons), ==, 1);
+ addon = gs_app_list_index (addons, 0);
+ g_assert_cmpstr (gs_app_get_id (addon), ==, "zeus-spell.addon");
+ g_assert_cmpint (gs_app_get_kind (addon), ==, AS_APP_KIND_ADDON);
+ g_assert_cmpint (gs_app_get_state (addon), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpstr (gs_app_get_name (addon), ==, "Spell Check");
+ g_assert_cmpstr (gs_app_get_source_default (addon), ==, "zeus-spell");
+ g_assert_cmpstr (gs_app_get_license (addon), ==,
+ "LicenseRef-free=https://www.debian.org/");
+ g_assert (gs_app_get_pixbuf (addon) == NULL);
+}
+
+static void
+gs_plugins_dummy_search_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get search result based on addon keyword */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "zeus",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there is one entry, the parent app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "zeus.desktop");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+}
+
+static void
+gs_plugins_dummy_search_alternate_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app_tmp;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get search result based on addon keyword */
+ app = gs_app_new ("zeus.desktop");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_ALTERNATES,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there is the original app, and the alternate */
+ g_assert_cmpint (gs_app_list_length (list), ==, 2);
+ app_tmp = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app_tmp), ==, "chiron.desktop");
+ g_assert_cmpint (gs_app_get_kind (app_tmp), ==, AS_APP_KIND_DESKTOP);
+ app_tmp = gs_app_list_index (list, 1);
+ g_assert_cmpstr (gs_app_get_id (app_tmp), ==, "zeus.desktop");
+ g_assert_cmpint (gs_app_get_kind (app_tmp), ==, AS_APP_KIND_DESKTOP);
+}
+
+static void
+gs_plugins_dummy_hang_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GCancellable) cancellable = g_cancellable_new ();
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* get search result based on addon keyword */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "hang",
+ "timeout", 1, /* seconds */
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, cancellable, &error);
+ gs_test_flush_main_context ();
+ g_assert_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_TIMED_OUT);
+ g_assert (list == NULL);
+}
+
+static void
+gs_plugins_dummy_search_invalid_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get search result based on addon keyword */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "X",
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_NOT_SUPPORTED);
+ g_assert (list == NULL);
+}
+
+static void
+gs_plugins_dummy_url_to_app_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_URL_TO_APP,
+ "search", "dummy://chiron.desktop",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (app != NULL);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "chiron.desktop");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+}
+
+static void
+gs_plugins_dummy_plugin_cache_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app1;
+ GsApp *app2;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list1 = NULL;
+ g_autoptr(GsAppList) list2 = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* ensure we get the same results back from calling the methods twice */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES, NULL);
+ list1 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list1 != NULL);
+ g_assert_cmpint (gs_app_list_length (list1), ==, 1);
+ app1 = gs_app_list_index (list1, 0);
+
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES, NULL);
+ list2 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list2 != NULL);
+ g_assert_cmpint (gs_app_list_length (list2), ==, 1);
+ app2 = gs_app_list_index (list2, 0);
+
+ /* make sure there is one GObject */
+ g_assert_cmpstr (gs_app_get_id (app1), ==, gs_app_get_id (app2));
+ g_assert (app1 == app2);
+}
+
+static void
+gs_plugins_dummy_wildcard_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list1 = NULL;
+ g_autoptr(GsAppList) list2 = NULL;
+ const gchar *popular_override = "chiron.desktop,zeus.desktop";
+ g_auto(GStrv) apps = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* use the plugin's add_popular function */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_POPULAR,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list1 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list1 != NULL);
+ g_assert_cmpint (gs_app_list_length (list1), ==, 1);
+
+ /* override the popular list (do not use the add_popular function) */
+ g_setenv ("GNOME_SOFTWARE_POPULAR", popular_override, TRUE);
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_POPULAR,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list2 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list2 != NULL);
+
+ apps = g_strsplit (popular_override, ",", 0);
+ g_assert_cmpint (gs_app_list_length (list2), ==, g_strv_length (apps));
+
+ for (guint i = 0; i < gs_app_list_length (list2); ++i) {
+ GsApp *app = gs_app_list_index (list2, i);
+ g_assert (g_strv_contains ((const gchar * const *) apps, gs_app_get_id (app)));
+ }
+}
+
+static void
+plugin_job_action_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsDummyTestHelper *helper = (GsDummyTestHelper *) user_data;
+
+ gs_plugin_loader_job_action_finish (plugin_loader, res, &helper->error);
+ if (helper->loop != NULL)
+ g_main_loop_quit (helper->loop);
+}
+
+static void
+gs_plugins_dummy_limit_parallel_ops_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GsAppList) list = NULL;
+ GsApp *app1 = NULL;
+ g_autoptr(GsApp) app2 = NULL;
+ g_autoptr(GsApp) app3 = NULL;
+ g_autoptr(GsPluginJob) plugin_job1 = NULL;
+ g_autoptr(GsPluginJob) plugin_job2 = NULL;
+ g_autoptr(GsPluginJob) plugin_job3 = NULL;
+ g_autoptr(GMainContext) context = NULL;
+ g_autoptr(GsDummyTestHelper) helper1 = gs_dummy_test_helper_new ();
+ g_autoptr(GsDummyTestHelper) helper2 = gs_dummy_test_helper_new ();
+ g_autoptr(GsDummyTestHelper) helper3 = gs_dummy_test_helper_new ();
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* get the updates list */
+ plugin_job1 = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES, NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job1, NULL, &helper3->error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (helper3->error);
+ g_assert (list != NULL);
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app1 = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app1), ==, "org.fedoraproject.release-rawhide.upgrade");
+ g_assert_cmpint (gs_app_get_kind (app1), ==, AS_APP_KIND_OS_UPGRADE);
+ g_assert_cmpint (gs_app_get_state (app1), ==, AS_APP_STATE_AVAILABLE);
+
+ /* allow only one operation at a time */
+ gs_plugin_loader_set_max_parallel_ops (plugin_loader, 1);
+
+ app2 = gs_app_new ("chiron.desktop");
+ gs_app_set_management_plugin (app2, "dummy");
+ gs_app_set_state (app2, AS_APP_STATE_AVAILABLE);
+
+ /* use "proxy" prefix so the update function succeeds... */
+ app3 = gs_app_new ("proxy-zeus.desktop");
+ gs_app_set_management_plugin (app3, "dummy");
+ gs_app_set_state (app3, AS_APP_STATE_UPDATABLE_LIVE);
+
+ context = g_main_context_new ();
+ helper3->loop = g_main_loop_new (context, FALSE);
+ g_main_context_push_thread_default (context);
+
+ /* call a few operations at the "same time" */
+
+ /* download an upgrade */
+ g_object_unref (plugin_job1);
+ plugin_job1 = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD,
+ "app", app1,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job1,
+ NULL,
+ plugin_job_action_cb,
+ helper1);
+
+ /* install an app */
+ plugin_job2 = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app2,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job2,
+ NULL,
+ plugin_job_action_cb,
+ helper2);
+
+ /* update an app */
+ plugin_job3 = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "app", app3,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job3,
+ NULL,
+ plugin_job_action_cb,
+ helper3);
+
+ /* since we have only 1 parallel installation op possible,
+ * verify the last operations are pending */
+ g_assert_cmpint (gs_app_get_state (app2), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpint (gs_app_get_pending_action (app2), ==, GS_PLUGIN_ACTION_INSTALL);
+ g_assert_cmpint (gs_app_get_state (app3), ==, AS_APP_STATE_UPDATABLE_LIVE);
+ g_assert_cmpint (gs_app_get_pending_action (app3), ==, GS_PLUGIN_ACTION_UPDATE);
+
+ /* wait for the 2nd installation to finish, it means the 1st should have been
+ * finished too */
+ g_main_loop_run (helper3->loop);
+ g_main_context_pop_thread_default (context);
+
+ gs_test_flush_main_context ();
+ g_assert_no_error (helper1->error);
+ g_assert_no_error (helper2->error);
+ g_assert_no_error (helper3->error);
+
+ g_assert_cmpint (gs_app_get_state (app1), ==, AS_APP_STATE_UPDATABLE);
+ g_assert_cmpint (gs_app_get_state (app2), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpint (gs_app_get_state (app3), ==, AS_APP_STATE_INSTALLED);
+
+ /* set the default max parallel ops */
+ gs_plugin_loader_set_max_parallel_ops (plugin_loader, 0);
+}
+
+int
+main (int argc, char **argv)
+{
+ g_autofree gchar *tmp_root = NULL;
+ gboolean ret;
+ int retval;
+ g_autofree gchar *xml = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "appstream",
+ "dummy",
+ "generic-updates",
+ "hardcoded-blocklist",
+ "desktop-categories",
+ "desktop-menu-path",
+ "icons",
+ "key-colors",
+ "provenance",
+ "provenance-license",
+ NULL
+ };
+
+ /* While we use %G_TEST_OPTION_ISOLATE_DIRS to create temporary directories
+ * for each of the tests, we want to use the system MIME registry, assuming
+ * that it exists and correctly has shared-mime-info installed. */
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_content_type_set_mime_dirs (NULL);
+#endif
+
+ /* Similarly, add the system-wide icon theme path before it’s
+ * overwritten by %G_TEST_OPTION_ISOLATE_DIRS. */
+ gs_test_expose_icon_theme_paths ();
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+ g_setenv ("GS_XMLB_VERBOSE", "1", TRUE);
+
+ /* set all the things required as a dummy test harness */
+ g_setenv ("GS_SELF_TEST_LOCALE", "en_GB", TRUE);
+ g_setenv ("GS_SELF_TEST_DUMMY_ENABLE", "1", TRUE);
+ g_setenv ("GS_SELF_TEST_PROVENANCE_SOURCES", "london*,boston", TRUE);
+ g_setenv ("GS_SELF_TEST_PROVENANCE_LICENSE_SOURCES", "london*,boston", TRUE);
+ g_setenv ("GS_SELF_TEST_PROVENANCE_LICENSE_URL", "https://www.debian.org/", TRUE);
+ g_setenv ("GNOME_SOFTWARE_POPULAR", "", TRUE);
+
+ /* Use a common cache directory for all tests, since the appstream
+ * plugin uses it and cannot be reinitialised for each test. */
+ tmp_root = g_dir_make_tmp ("gnome-software-dummy-test-XXXXXX", NULL);
+ g_assert (tmp_root != NULL);
+ g_setenv ("GS_SELF_TEST_CACHEDIR", tmp_root, TRUE);
+
+ xml = g_strdup ("<?xml version=\"1.0\"?>\n"
+ "<components version=\"0.9\">\n"
+ " <component type=\"desktop\">\n"
+ " <id>chiron.desktop</id>\n"
+ " <name>Chiron</name>\n"
+ " <pkgname>chiron</pkgname>\n"
+ " </component>\n"
+ " <component type=\"desktop\">\n"
+ " <id>zeus.desktop</id>\n"
+ " <name>Zeus</name>\n"
+ " <summary>A teaching application</summary>\n"
+ " <pkgname>zeus</pkgname>\n"
+ " <icon type=\"stock\">drive-harddisk</icon>\n"
+ " <categories>\n"
+ " <category>AudioVideo</category>\n"
+ " <category>Player</category>\n"
+ " </categories>\n"
+ " <languages>\n"
+ " <lang percentage=\"100\">en_GB</lang>\n"
+ " </languages>\n"
+ " </component>\n"
+ " <component type=\"desktop\">\n"
+ " <id>mate-spell.desktop</id>\n"
+ " <name>Spell</name>\n"
+ " <summary>A spelling application for MATE</summary>\n"
+ " <pkgname>mate-spell</pkgname>\n"
+ " <icon type=\"stock\">drive-harddisk</icon>\n"
+ " <project_group>MATE</project_group>\n"
+ " </component>\n"
+ " <component type=\"addon\">\n"
+ " <id>zeus-spell.addon</id>\n"
+ " <extends>zeus.desktop</extends>\n"
+ " <name>Spell Check</name>\n"
+ " <summary>Check the spelling when teaching</summary>\n"
+ " <pkgname>zeus-spell</pkgname>\n"
+ " </component>\n"
+ " <component type=\"desktop\">\n"
+ " <id>Uninstall Zeus.desktop</id>\n"
+ " <name>Uninstall Zeus</name>\n"
+ " <summary>Uninstall the teaching application</summary>\n"
+ " <icon type=\"stock\">drive-harddisk</icon>\n"
+ " </component>\n"
+ " <component type=\"os-upgrade\">\n"
+ " <id>org.fedoraproject.release-rawhide.upgrade</id>\n"
+ " <name>Fedora Rawhide</name>\n"
+ " <summary>Release specific tagline</summary>\n"
+ " <pkgname>fedora-release</pkgname>\n"
+ " </component>\n"
+ " <info>\n"
+ " <scope>user</scope>\n"
+ " </info>\n"
+ "</components>\n");
+ g_setenv ("GS_SELF_TEST_APPSTREAM_XML", xml, TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ g_signal_connect (plugin_loader, "status-changed",
+ G_CALLBACK (gs_plugin_loader_status_changed_cb), NULL);
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR_CORE);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert (!gs_plugin_loader_get_enabled (plugin_loader, "notgoingtoexist"));
+ g_assert (gs_plugin_loader_get_enabled (plugin_loader, "appstream"));
+ g_assert (gs_plugin_loader_get_enabled (plugin_loader, "dummy"));
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/dummy/wildcard",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_wildcard_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/plugin-cache",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_plugin_cache_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/key-colors",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_key_colors_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/search",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_search_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/search-alternate",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_search_alternate_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/hang",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_hang_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/search{invalid}",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_search_invalid_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/url-to-app",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_url_to_app_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/install",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_install_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/error",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_error_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/installed",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_installed_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/refine",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_refine_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/updates",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_updates_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/distro-upgrades",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_distro_upgrades_func);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/metadata-quirks",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_metadata_quirks);
+ g_test_add_data_func ("/gnome-software/plugins/dummy/limit-parallel-ops",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_dummy_limit_parallel_ops_func);
+ retval = g_test_run ();
+
+ /* Clean up. */
+ gs_utils_rmtree (tmp_root, NULL);
+
+ return retval;
+}
diff --git a/plugins/dummy/meson.build b/plugins/dummy/meson.build
new file mode 100644
index 0000000..9235f4e
--- /dev/null
+++ b/plugins/dummy/meson.build
@@ -0,0 +1,41 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginDummy"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+
+shared_module(
+ 'gs_plugin_dummy',
+ sources : 'gs-plugin-dummy.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [appstream_glib, gio_unix, goa, gtk, libsoup],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ e = executable(
+ 'gs-self-test-dummy',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-dummy', e, suite: ['plugins', 'dummy'], env: test_env)
+endif
diff --git a/plugins/eos-updater/com.endlessm.Updater.xml b/plugins/eos-updater/com.endlessm.Updater.xml
new file mode 100644
index 0000000..641c7f4
--- /dev/null
+++ b/plugins/eos-updater/com.endlessm.Updater.xml
@@ -0,0 +1,292 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+ <!--
+ com.endlessm.Updater:
+ @short_description: Endless OS updater control interface
+
+ Interface to query the state of the OS updater, and to control it: checking
+ for, downloading and applying updates.
+
+ The updater moves through a series of states (see the `State` property and
+ `StateChanged` signal), with state transitions triggered by the appropriate
+ method call, or by an error in an operation. It will return a
+ `com.endlessm.Updater.Error.WrongState` error if you attempt to perform an
+ invalid state transition.
+ -->
+ <interface name="com.endlessm.Updater">
+ <!--
+ Poll:
+
+ Check for updates. This may be performed from the `Ready`,
+ `UpdateAvailable`, `UpdateReady` or `Error` states. It will immediately
+ transition to the `Polling` state. If an update is then successfully
+ found, it will transition to the `UpdateAvailable` state. If no update is
+ available, it will transition to the `Ready` state. If there is an error
+ checking for an update, it will transition to the `Error` state.
+
+ If an update is found, its details will be reported through the updater’s
+ properties once the updater reaches the `UpdateAvailable` state. In
+ particular, through the `UpdateID`, `UpdateRefspec`, `UpdateLabel` and
+ `UpdateMessage` properties.
+ -->
+ <method name="Poll"></method>
+
+ <!--
+ PollVolume:
+ @path: Absolute path to the root directory of a volume to check.
+
+ Like `Poll`, except this polls a specific removable volume (such as a USB
+ stick), rather than the internet.
+
+ If a `.ostree/repo` directory is available beneath @path, and it contains
+ a valid OSTree repository, that repository will be checked for updates.
+ If no such directory exists, the updater will transition to state `Ready`
+ as no update is available.
+ -->
+ <method name="PollVolume">
+ <arg name="path" type="s" direction="in"/>
+ </method>
+
+ <!--
+ Fetch:
+
+ Download an update. This may be performed from the `UpdateAvailable` state
+ only. It will immediately transition to the `Fetching` state. If the
+ update is successfully downloaded, it will transition to the `UpdateReady`
+ state; if there was an error it will transition to `Error`.
+
+ Download progress will be reported through the updater’s properties; in
+ particular, `DownloadedBytes`.
+ -->
+ <method name="Fetch"></method>
+
+ <!--
+ FetchFull:
+ @options: Potentially empty dictionary of options.
+
+ Like `Fetch`, except options may be provided to affect its behaviour.
+ Currently, the following options are supported (unsupported options are
+ ignored):
+
+ * `force` (type: `b`): If true, force the download without scheduling
+ it through the system’s metered data scheduler. Typically, this would
+ be true in response to an explicit user action, and false otherwise.
+ * `scheduling-timeout-seconds` (type: `u`): Number of seconds to wait
+ for permission to download from the system’s metered data scheduler,
+ before returning a `com.endlessm.Updater.Error.MeteredConnection`
+ error and cancelling the download. Pass zero to disable the timeout.
+ -->
+ <method name="FetchFull">
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ <!--
+ Apply:
+
+ Apply a downloaded update so that it’s available to boot into on the next
+ boot. This may be performed from the `UpdateReady` state only. It will
+ immediately transition to the `Applying` state. If the update is
+ successfully applied, it will transition to the `UpdateApplied` state; if
+ there was an error it will transition to `Error`.
+ -->
+ <method name="Apply"></method>
+
+ <!--
+ Cancel:
+
+ Cancel the ongoing poll, fetch or apply operation. This may be performed
+ from the `Polling`, `Fetching` or `ApplyingUpdate` states. It will cancel
+ the operation then transition to the `Error` state, with the error
+ `com.endlessm.Updater.Error.Cancelled`.
+ -->
+ <method name="Cancel"></method>
+
+ <!--
+ State:
+
+ Current state of the updater. This will be one of the following:
+
+ * `0` (`None`): No state.
+ * `1` (`Ready`): Ready to perform an action.
+ * `2` (`Error`): An error occurred. See the `ErrorName` and
+ `ErrorMessage` properties for details.
+ * `3` (`Polling`): Checking for updates.
+ * `4` (`UpdateAvailable`): An update is available. See the `UpdateID`,
+ `UpdateRefspec`, `UpdateLabel` and `UpdateMessage` properties for
+ details.
+ * `5` (`Fetching`): Downloading an update. See the `DownloadedBytes`
+ property for progress updates.
+ * `6` (`UpdateReady`): Update downloaded and ready to apply.
+ * `7` (`ApplyingUpdate`): Applying an update.
+ * `8` (`UpdateApplied`): Update applied and ready to reboot into.
+
+ State changes are notified using the `StateChanged` signal.
+ -->
+ <property name="State" type="u" access="read"/>
+
+ <!--
+ UpdateID:
+
+ Checksum of the OSTree commit available as an update, or the empty string
+ if no update is available.
+ -->
+ <property name="UpdateID" type="s" access="read"/>
+
+ <!--
+ UpdateRefspec:
+
+ Refspec (remote name and branch name) of the OSTree commit available as an
+ update, or the empty string if no update is available.
+ -->
+ <property name="UpdateRefspec" type="s" access="read"/>
+
+ <!--
+ OriginalRefspec:
+
+ Refspec (remote name and branch name) of the currently booted OSTree
+ commit.
+ -->
+ <property name="OriginalRefspec" type="s" access="read"/>
+
+ <!--
+ CurrentID:
+
+ Checksum of the currently booted OSTree commit.
+ -->
+ <property name="CurrentID" type="s" access="read"/>
+
+ <!--
+ UpdateLabel:
+
+ Subject of the OSTree commit available as an update, or the empty string
+ if it’s not set or if no update is available. This is the title of the
+ update.
+ -->
+ <property name="UpdateLabel" type="s" access="read"/>
+
+ <!--
+ UpdateMessage:
+
+ Description body of the OSTree commit available as an update, or the empty
+ string if it’s not set or if no update is available. This is the
+ description of the update.
+ -->
+ <property name="UpdateMessage" type="s" access="read"/>
+
+ <!--
+ Version:
+
+ Version number of the OSTree commit available as an update, or the empty
+ string if it’s not set or if no update is available.
+ -->
+ <property name="Version" type="s" access="read"/>
+
+ <!--
+ DownloadSize:
+
+ Size (in bytes) of the update when downloaded, or `-1` if an update is
+ available but its download size is unknown. `0` if no update is available.
+ -->
+ <property name="DownloadSize" type="x" access="read"/>
+
+ <!--
+ DownloadedBytes:
+
+ Number of bytes of the update which have already been downloaded. This
+ will be `0` before a download starts, and could be `-1` if the
+ `DownloadSize` is unknown.
+ -->
+ <property name="DownloadedBytes" type="x" access="read"/>
+
+ <!--
+ UnpackedSize:
+
+ Size (in bytes) of the update when unpacked, or `-1` if an update is
+ available but its unpacked size is unknown. `0` if no update is available.
+ -->
+ <property name="UnpackedSize" type="x" access="read"/>
+
+ <!--
+ FullDownloadSize:
+
+ Version of `DownloadSize` which also includes the sizes of parts of the
+ update which are already present locally (and hence which don’t need to
+ be downloaded again).
+ -->
+ <property name="FullDownloadSize" type="x" access="read"/>
+
+ <!--
+ FullUnpackedSize:
+
+ Version of `UnpackedSize` which also includes the sizes of parts of the
+ update which are already unpacked locally (and hence which won’t occupy
+ further disk space once the update is applied).
+ -->
+ <property name="FullUnpackedSize" type="x" access="read"/>
+
+ <!--
+ ErrorCode:
+
+ Error code of the current error, or `0` if no error has been reported.
+ This is in an unspecified error doman, and hence is useless.
+
+ Deprecated: Use `ErrorName` instead.
+ -->
+ <property name="ErrorCode" type="u" access="read">
+ <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
+ </property>
+
+ <!--
+ ErrorName:
+
+ A fully-qualified D-Bus error name, as might be returned from a D-Bus
+ method.
+
+ This is the empty string if no error has been reported.
+
+ Known errors include:
+
+ * `com.endlessm.Updater.Error.WrongState`: Method was called in a state
+ which doesn’t support that method.
+ * `com.endlessm.Updater.Error.LiveBoot`: The updater cannot be used
+ because the current system is a live boot.
+ * `com.endlessm.Updater.Error.WrongConfiguration`: A configuration file
+ contains an error.
+ * `com.endlessm.Updater.Error.NotOstreeSystem`: The updater cannot be
+ used because the current system is not booted from an OSTree commit.
+ * `com.endlessm.Updater.Error.Fetching`: Error when downloading an
+ update.
+ * `com.endlessm.Updater.Error.MalformedAutoinstallSpec`: An autoinstall
+ specification in the pending update contains an error.
+ * `com.endlessm.Updater.Error.UnknownEntryInAutoinstallSpec`: An
+ autoinstall specification in the pending update contains an unknown
+ entry.
+ * `com.endlessm.Updater.Error.FlatpakRemoteConflict`: An autoinstall
+ specification in the pending update contains a remote name which
+ doesn’t match the system’s configuration.
+ * `com.endlessm.Updater.Error.MeteredConnection`: A fetch operation timed
+ out while waiting for permission to download.
+ -->
+ <property name="ErrorName" type="s" access="read"/>
+
+ <!--
+ ErrorMessage:
+
+ A human-readable (but unlocalised) error message, or the empty string if
+ no error has been reported.
+ -->
+ <property name="ErrorMessage" type="s" access="read"/>
+
+ <!--
+ StateChanged:
+ @state: The new state.
+
+ Signal notifying of a change in the `State` property.
+ -->
+ <signal name="StateChanged">
+ <arg type="u" name="state"/>
+ </signal>
+ </interface>
+</node>
diff --git a/plugins/eos-updater/gs-plugin-eos-updater.c b/plugins/eos-updater/gs-plugin-eos-updater.c
new file mode 100644
index 0000000..a8aba16
--- /dev/null
+++ b/plugins/eos-updater/gs-plugin-eos-updater.c
@@ -0,0 +1,962 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016-2019 Endless Mobile, Inc
+ *
+ * Authors:
+ * Joaquim Rocha <jrocha@endlessm.com>
+ * Philip Withnall <withnall@endlessm.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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 <config.h>
+#include <gio/gio.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib-object.h>
+#include <gnome-software.h>
+#include <gs-plugin.h>
+#include <gs-utils.h>
+#include <math.h>
+#include <ostree.h>
+
+#include "gs-eos-updater-generated.h"
+
+/*
+ * SECTION:
+ * Plugin to poll for, download and apply OS updates using the `eos-updater`
+ * service when running on Endless OS.
+ *
+ * This plugin is only useful on Endless OS.
+ *
+ * It creates a proxy for the `eos-updater` D-Bus service, which implements a
+ * basic state machine which progresses through several states in order to
+ * download updates: `Ready` (doing nothing) → `Poll` (checking for updates) →
+ * `Fetch` (downloading an update) → `Apply` (deploying the update’s OSTree,
+ * before a reboot). Any state may transition to the `Error` state at any time,
+ * and the daemon may disappear at any time.
+ *
+ * This plugin follows the state transitions signalled by the daemon, and
+ * updates the state of a single #GsApp instance (`os_upgrade`) to reflect the
+ * OS upgrade in the UI.
+ *
+ * Calling gs_plugin_refresh() will result in this plugin calling the `Poll()`
+ * method on the `eos-updater` daemon to check for a new update.
+ *
+ * Calling gs_plugin_app_upgrade_download() will result in this plugin calling
+ * a sequence of methods on the `eos-updater` daemon to check for, download and
+ * apply an update. Typically, gs_plugin_app_upgrade_download() should be called
+ * once `eos-updater` is already in the `UpdateAvailable` state. It will report
+ * progress information, with the first 75 percentage points of the progress
+ * reporting the download progress, and the final 25 percentage points reporting
+ * the OSTree deployment progress. The final 25 percentage points are currently
+ * faked because we can’t get reasonable progress data out of OSTree.
+ *
+ * The proxy object (`updater_proxy`) uses the thread-default main context from
+ * the gs_plugin_setup() function, which is currently the global default main
+ * context from gnome-software’s main thread. This means all the signal
+ * callbacks from the proxy will be executed in the main thread, and *must not
+ * block*.
+ *
+ * The other functions (gs_plugin_refresh(), gs_plugin_app_upgrade_download(),
+ * etc.) are called in #GTask worker threads. They are allowed to call methods
+ * on the proxy; the main thread is only allowed to receive signals and check
+ * properties on the proxy, to avoid blocking. Consequently, worker threads need
+ * to block on the main thread receiving state change signals from
+ * `eos-updater`. Receipt of these signals is notified through
+ * `state_change_cond`. This means that all functions which access the
+ * `GsPluginData` must lock it using the `mutex`.
+ *
+ * `updater_proxy`, `os_upgrade` and `cancellable` are only set in
+ * gs_plugin_setup(), and are both internally thread-safe — so they can both be
+ * dereferenced and have their methods called from any thread without
+ * necessarily holding `mutex`.
+ *
+ * Cancellation of any operations on the `eos-updater` daemon (polling, fetching
+ * or applying) is implemented by calling the `Cancel()` method on it. This is
+ * permanently connected to the private `cancellable` #GCancellable instance,
+ * which persists for the lifetime of the plugin. The #GCancellable instances
+ * for various operations can be temporarily chained to it for the duration of
+ * each operation.
+ */
+
+static const guint max_progress_for_update = 75; /* percent */
+
+typedef enum {
+ EOS_UPDATER_STATE_NONE = 0,
+ EOS_UPDATER_STATE_READY,
+ EOS_UPDATER_STATE_ERROR,
+ EOS_UPDATER_STATE_POLLING,
+ EOS_UPDATER_STATE_UPDATE_AVAILABLE,
+ EOS_UPDATER_STATE_FETCHING,
+ EOS_UPDATER_STATE_UPDATE_READY,
+ EOS_UPDATER_STATE_APPLYING_UPDATE,
+ EOS_UPDATER_STATE_UPDATE_APPLIED,
+} EosUpdaterState;
+#define EOS_UPDATER_N_STATES (EOS_UPDATER_STATE_UPDATE_APPLIED + 1)
+
+static const gchar *
+eos_updater_state_to_str (EosUpdaterState state)
+{
+ const gchar * const eos_updater_state_str[] = {
+ "None",
+ "Ready",
+ "Error",
+ "Polling",
+ "UpdateAvailable",
+ "Fetching",
+ "UpdateReady",
+ "ApplyingUpdate",
+ "UpdateApplied",
+ };
+
+ G_STATIC_ASSERT (G_N_ELEMENTS (eos_updater_state_str) == EOS_UPDATER_N_STATES);
+
+ g_return_val_if_fail ((gint) state < EOS_UPDATER_N_STATES, "unknown");
+ return eos_updater_state_str[state];
+}
+
+static void
+gs_eos_updater_error_convert (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return;
+
+ /* parse remote eos-updater error */
+ if (g_dbus_error_is_remote_error (error)) {
+ g_autofree gchar *remote_error = g_dbus_error_get_remote_error (error);
+
+ g_dbus_error_strip_remote_error (error);
+
+ if (g_str_equal (remote_error, "com.endlessm.Updater.Error.WrongState")) {
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ } else if (g_str_equal (remote_error, "com.endlessm.Updater.Error.LiveBoot") ||
+ g_str_equal (remote_error, "com.endlessm.Updater.Error.NotOstreeSystem") ||
+ g_str_equal (remote_error, "org.freedesktop.DBus.Error.ServiceUnknown")) {
+ error->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ } else if (g_str_equal (remote_error, "com.endlessm.Updater.Error.WrongConfiguration")) {
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ } else if (g_str_equal (remote_error, "com.endlessm.Updater.Error.Fetching")) {
+ error->code = GS_PLUGIN_ERROR_DOWNLOAD_FAILED;
+ } else if (g_str_equal (remote_error, "com.endlessm.Updater.Error.MalformedAutoinstallSpec") ||
+ g_str_equal (remote_error, "com.endlessm.Updater.Error.UnknownEntryInAutoinstallSpec") ||
+ g_str_equal (remote_error, "com.endlessm.Updater.Error.FlatpakRemoteConflict")) {
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ } else if (g_str_equal (remote_error, "com.endlessm.Updater.Error.MeteredConnection")) {
+ error->code = GS_PLUGIN_ERROR_NO_NETWORK;
+ } else if (g_str_equal (remote_error, "com.endlessm.Updater.Error.Cancelled")) {
+ error->code = GS_PLUGIN_ERROR_CANCELLED;
+ } else {
+ g_warning ("Can’t reliably fixup remote error ‘%s’", remote_error);
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return;
+ }
+
+ /* this is allowed for low-level errors */
+ if (gs_utils_error_convert_gio (perror))
+ return;
+
+ /* this is allowed for low-level errors */
+ if (gs_utils_error_convert_gdbus (perror))
+ return;
+}
+
+/* the percentage of the progress bar to use for applying the OS upgrade;
+ * we need to fake the progress in this percentage because applying the OS upgrade
+ * can take a long time and we don't want the user to think that the upgrade has
+ * stalled */
+static const guint upgrade_apply_progress_range = 100 - max_progress_for_update; /* percent */
+static const gfloat upgrade_apply_max_time = 600.0; /* sec */
+static const gfloat upgrade_apply_step_time = 0.250; /* sec */
+
+static void sync_state_from_updater_unlocked (GsPlugin *plugin);
+
+struct GsPluginData
+{
+ /* These members are only set once in gs_plugin_setup(), and are
+ * internally thread-safe, so can be accessed without holding @mutex: */
+ GsEosUpdater *updater_proxy; /* (owned) */
+ GsApp *os_upgrade; /* (owned) */
+ GCancellable *cancellable; /* (owned) */
+ gulong cancelled_id;
+
+ /* These members must only ever be accessed from the main thread, so
+ * can be accessed without holding @mutex: */
+ gfloat upgrade_fake_progress;
+ guint upgrade_fake_progress_handler;
+
+ /* State synchronisation between threads: */
+ GMutex mutex;
+ GCond state_change_cond; /* locked by @mutex */
+};
+
+static void
+os_upgrade_cancelled_cb (GCancellable *cancellable,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ g_debug ("%s: Cancelling upgrade", G_STRFUNC);
+ gs_eos_updater_call_cancel (priv->updater_proxy, NULL, NULL, NULL);
+}
+
+static gboolean
+should_add_os_upgrade (AsAppState state)
+{
+ switch (state) {
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ return TRUE;
+ case AS_APP_STATE_UNKNOWN:
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UNAVAILABLE:
+ case AS_APP_STATE_REMOVING:
+ default:
+ return FALSE;
+ }
+}
+
+/* Wrapper around gs_app_set_state() which ensures we also notify of update
+ * changes if we change between non-upgradable and upgradable states, so that
+ * the app is notified to appear in the UI. */
+static void
+app_set_state (GsPlugin *plugin,
+ GsApp *app,
+ AsAppState new_state)
+{
+ AsAppState old_state = gs_app_get_state (app);
+
+ if (new_state == old_state)
+ return;
+
+ gs_app_set_state (app, new_state);
+
+ if (should_add_os_upgrade (old_state) !=
+ should_add_os_upgrade (new_state)) {
+ g_debug ("%s: Calling gs_plugin_updates_changed()", G_STRFUNC);
+ gs_plugin_updates_changed (plugin);
+ }
+}
+
+static gboolean
+eos_updater_error_is_cancelled (const gchar *error_name)
+{
+ return (g_strcmp0 (error_name, "com.endlessm.Updater.Error.Cancelled") == 0);
+}
+
+/* This will be invoked in the main thread. */
+static void
+updater_state_changed (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ g_debug ("%s", G_STRFUNC);
+
+ sync_state_from_updater_unlocked (plugin);
+
+ /* Signal any blocked threads; typically this will be
+ * gs_plugin_app_upgrade_download() in a #GTask worker thread. */
+ g_cond_broadcast (&priv->state_change_cond);
+}
+
+/* This will be invoked in the main thread. */
+static void
+updater_downloaded_bytes_changed (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ sync_state_from_updater_unlocked (plugin);
+}
+
+/* This will be invoked in the main thread, but doesn’t currently need to hold
+ * `mutex` since it only accesses `priv->updater_proxy` and `priv->os_upgrade`,
+ * both of which are internally thread-safe. */
+static void
+updater_version_changed (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *version = gs_eos_updater_get_version (priv->updater_proxy);
+
+ /* If eos-updater goes away, we want to retain the previously set value
+ * of the version, for use in error messages. */
+ if (version != NULL)
+ gs_app_set_version (priv->os_upgrade, version);
+}
+
+/* This will be invoked in the main thread, but doesn’t currently need to hold
+ * `mutex` since `priv->updater_proxy` and `priv->os_upgrade` are both
+ * thread-safe, and `priv->upgrade_fake_progress` and
+ * `priv->upgrade_fake_progress_handler` are only ever accessed from the main
+ * thread. */
+static gboolean
+fake_os_upgrade_progress_cb (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ gfloat normal_step;
+ guint new_progress;
+ const gfloat fake_progress_max = 99.0;
+
+ if (gs_eos_updater_get_state (priv->updater_proxy) != EOS_UPDATER_STATE_APPLYING_UPDATE ||
+ priv->upgrade_fake_progress > fake_progress_max) {
+ priv->upgrade_fake_progress = 0;
+ priv->upgrade_fake_progress_handler = 0;
+ return G_SOURCE_REMOVE;
+ }
+
+ normal_step = (gfloat) upgrade_apply_progress_range /
+ (upgrade_apply_max_time / upgrade_apply_step_time);
+
+ priv->upgrade_fake_progress += normal_step;
+
+ new_progress = max_progress_for_update +
+ (guint) round (priv->upgrade_fake_progress);
+ gs_app_set_progress (priv->os_upgrade,
+ MIN (new_progress, (guint) fake_progress_max));
+
+ g_debug ("OS upgrade fake progress: %f", priv->upgrade_fake_progress);
+
+ return G_SOURCE_CONTINUE;
+}
+
+/* This method deals with the synchronization between the EOS updater's states
+ * (D-Bus service) and the OS upgrade's states (GsApp), in order to show the user
+ * what is happening and what they can do.
+ *
+ * It must be called with priv->mutex already locked. */
+static void
+sync_state_from_updater_unlocked (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GsApp *app = priv->os_upgrade;
+ EosUpdaterState state;
+ AsAppState previous_app_state = gs_app_get_state (app);
+ AsAppState current_app_state;
+
+ /* in case the OS upgrade has been disabled */
+ if (priv->updater_proxy == NULL) {
+ g_debug ("%s: Updater disabled", G_STRFUNC);
+ return;
+ }
+
+ state = gs_eos_updater_get_state (priv->updater_proxy);
+ g_debug ("EOS Updater state changed: %s", eos_updater_state_to_str (state));
+
+ switch (state) {
+ case EOS_UPDATER_STATE_NONE:
+ case EOS_UPDATER_STATE_READY: {
+ app_set_state (plugin, app, AS_APP_STATE_UNKNOWN);
+ break;
+ } case EOS_UPDATER_STATE_POLLING: {
+ /* Nothing to do here. */
+ break;
+ } case EOS_UPDATER_STATE_UPDATE_AVAILABLE: {
+ guint64 total_size;
+
+ app_set_state (plugin, app, AS_APP_STATE_AVAILABLE);
+
+ total_size = gs_eos_updater_get_download_size (priv->updater_proxy);
+ gs_app_set_size_download (app, total_size);
+
+ break;
+ }
+ case EOS_UPDATER_STATE_FETCHING: {
+ guint64 total_size = 0;
+ guint64 downloaded = 0;
+ gfloat progress = 0;
+
+ /* FIXME: Set to QUEUED_FOR_INSTALL if we’re waiting for metered
+ * data permission. */
+ app_set_state (plugin, app, AS_APP_STATE_INSTALLING);
+
+ downloaded = gs_eos_updater_get_downloaded_bytes (priv->updater_proxy);
+ total_size = gs_eos_updater_get_download_size (priv->updater_proxy);
+
+ if (total_size == 0) {
+ g_debug ("OS upgrade %s total size is 0!",
+ gs_app_get_unique_id (app));
+ } else {
+ /* set progress only up to a max percentage, leaving the
+ * remaining for applying the update */
+ progress = (gfloat) downloaded / (gfloat) total_size *
+ (gfloat) max_progress_for_update;
+ }
+ gs_app_set_progress (app, (guint) progress);
+
+ break;
+ }
+ case EOS_UPDATER_STATE_UPDATE_READY: {
+ app_set_state (plugin, app, AS_APP_STATE_UPDATABLE);
+ break;
+ }
+ case EOS_UPDATER_STATE_APPLYING_UPDATE: {
+ /* set as 'installing' because if it is applying the update, we
+ * want to show the progress bar */
+ app_set_state (plugin, app, AS_APP_STATE_INSTALLING);
+
+ /* set up the fake progress to inform the user that something
+ * is still being done (we don't get progress reports from
+ * deploying updates) */
+ if (priv->upgrade_fake_progress_handler != 0)
+ g_source_remove (priv->upgrade_fake_progress_handler);
+ priv->upgrade_fake_progress = 0;
+ priv->upgrade_fake_progress_handler =
+ g_timeout_add ((guint) (1000.0 * upgrade_apply_step_time),
+ (GSourceFunc) fake_os_upgrade_progress_cb,
+ plugin);
+
+ break;
+ }
+ case EOS_UPDATER_STATE_UPDATE_APPLIED: {
+ app_set_state (plugin, app, AS_APP_STATE_UPDATABLE);
+
+ break;
+ }
+ case EOS_UPDATER_STATE_ERROR: {
+ const gchar *error_name;
+ const gchar *error_message;
+
+ error_name = gs_eos_updater_get_error_name (priv->updater_proxy);
+ error_message = gs_eos_updater_get_error_message (priv->updater_proxy);
+
+ /* unless the error is because the user cancelled the upgrade,
+ * we should make sure it gets in the journal */
+ if (!eos_updater_error_is_cancelled (error_name))
+ g_warning ("Got OS upgrade error state with name '%s': %s",
+ error_name, error_message);
+
+ /* We can’t recover the app state since eos-updater needs to
+ * go through the ready → poll → fetch → apply loop again in
+ * order to recover its state. So go back to ‘unknown’. */
+ app_set_state (plugin, app, AS_APP_STATE_UNKNOWN);
+
+ /* Cancelling anything in the updater will result in a
+ * transition to the Error state. Use that as a cue to reset
+ * our #GCancellable ready for next time. */
+ g_cancellable_reset (priv->cancellable);
+
+ break;
+ }
+ default:
+ g_warning ("Encountered unknown eos-updater state: %u", state);
+ break;
+ }
+
+ current_app_state = gs_app_get_state (app);
+
+ g_debug ("%s: Old app state: %s; new app state: %s",
+ G_STRFUNC, as_app_state_to_string (previous_app_state),
+ as_app_state_to_string (current_app_state));
+
+ /* if the state changed from or to 'unknown', we need to notify that a
+ * new update should be shown */
+ if (should_add_os_upgrade (previous_app_state) !=
+ should_add_os_upgrade (current_app_state)) {
+ g_debug ("%s: Calling gs_plugin_updates_changed()", G_STRFUNC);
+ gs_plugin_updates_changed (plugin);
+ }
+}
+
+/* This is called in the main thread, so will end up creating an @updater_proxy
+ * which is tied to the main thread’s #GMainContext. */
+gboolean
+gs_plugin_setup (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GError) error_local = NULL;
+ g_autofree gchar *name_owner = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(AsIcon) ic = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_debug ("%s", G_STRFUNC);
+
+ g_mutex_init (&priv->mutex);
+ g_cond_init (&priv->state_change_cond);
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ priv->cancellable = g_cancellable_new ();
+ priv->cancelled_id =
+ g_cancellable_connect (priv->cancellable,
+ G_CALLBACK (os_upgrade_cancelled_cb),
+ plugin, NULL);
+
+ /* Check that the proxy exists (and is owned; it should auto-start) so
+ * we can disable the plugin for systems which don’t have eos-updater.
+ * Throughout the rest of the plugin, errors from the daemon
+ * (particularly where it has disappeared off the bus) are ignored, and
+ * the poll/fetch/apply sequence is run through again to recover from
+ * the error. This is the only point in the plugin where we consider an
+ * error from eos-updater to be fatal to the plugin. */
+ priv->updater_proxy = gs_eos_updater_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ "com.endlessm.Updater",
+ "/com/endlessm/Updater",
+ cancellable,
+ error);
+ if (priv->updater_proxy == NULL) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+
+ name_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (priv->updater_proxy));
+
+ if (name_owner == NULL) {
+ g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "Couldn’t create EOS Updater proxy: couldn’t get name owner");
+ return FALSE;
+ }
+
+ g_signal_connect_object (priv->updater_proxy, "notify::state",
+ G_CALLBACK (updater_state_changed),
+ plugin, G_CONNECT_SWAPPED);
+ g_signal_connect_object (priv->updater_proxy,
+ "notify::downloaded-bytes",
+ G_CALLBACK (updater_downloaded_bytes_changed),
+ plugin, G_CONNECT_SWAPPED);
+ g_signal_connect_object (priv->updater_proxy, "notify::version",
+ G_CALLBACK (updater_version_changed),
+ plugin, G_CONNECT_SWAPPED);
+
+ /* prepare EOS upgrade app + sync initial state */
+
+ /* use stock icon */
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "application-x-addon");
+
+ /* create the OS upgrade */
+ app = gs_app_new ("com.endlessm.EOS.upgrade");
+ gs_app_add_icon (app, ic);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
+ /* TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/ */
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, _("Endless OS"));
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL,
+ /* TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/ */
+ _("An Endless OS update with new features and fixes."));
+ /* ensure that the version doesn't appear as (NULL) in the banner, it
+ * should be changed to the right value when it changes in the eos-updater */
+ gs_app_set_version (app, "");
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_REVIEWABLE);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_set_metadata (app, "GnomeSoftware::UpgradeBanner-css",
+ "background: url('" DATADIR "/gnome-software/upgrade-bg.png');"
+ "background-size: 100% 100%;");
+
+ priv->os_upgrade = g_steal_pointer (&app);
+
+ /* sync initial state */
+ sync_state_from_updater_unlocked (plugin);
+
+ return TRUE;
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ if (priv->upgrade_fake_progress_handler != 0) {
+ g_source_remove (priv->upgrade_fake_progress_handler);
+ priv->upgrade_fake_progress_handler = 0;
+ }
+
+ if (priv->updater_proxy != NULL) {
+ g_signal_handlers_disconnect_by_func (priv->updater_proxy,
+ G_CALLBACK (updater_state_changed),
+ plugin);
+ g_signal_handlers_disconnect_by_func (priv->updater_proxy,
+ G_CALLBACK (updater_downloaded_bytes_changed),
+ plugin);
+ g_signal_handlers_disconnect_by_func (priv->updater_proxy,
+ G_CALLBACK (updater_version_changed),
+ plugin);
+ }
+
+ g_cancellable_cancel (priv->cancellable);
+ if (priv->cancellable != NULL && priv->cancelled_id != 0)
+ g_cancellable_disconnect (priv->cancellable, priv->cancelled_id);
+ g_clear_object (&priv->cancellable);
+
+ g_clear_object (&priv->updater_proxy);
+
+ g_clear_object (&priv->os_upgrade);
+
+ g_cond_clear (&priv->state_change_cond);
+ g_mutex_clear (&priv->mutex);
+}
+
+/* Called in a #GTask worker thread, but it can run without holding
+ * `priv->mutex` since it doesn’t need to synchronise on state. */
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ EosUpdaterState updater_state;
+ gboolean success;
+
+ /* We let the eos-updater daemon do its own caching, so ignore the
+ * @cache_age, unless it’s %G_MAXUINT, which signifies startup of g-s.
+ * In that case, it’s probably just going to load the system too much to
+ * do an update check now. We can wait. */
+ g_debug ("%s: cache_age: %u", G_STRFUNC, cache_age);
+
+ if (cache_age == G_MAXUINT)
+ return TRUE;
+
+ /* check if the OS upgrade has been disabled */
+ if (priv->updater_proxy == NULL) {
+ g_debug ("%s: Updater disabled", G_STRFUNC);
+ return TRUE;
+ }
+
+ /* poll in the error/none/ready states to check if there's an
+ * update available */
+ updater_state = gs_eos_updater_get_state (priv->updater_proxy);
+ switch (updater_state) {
+ case EOS_UPDATER_STATE_ERROR:
+ case EOS_UPDATER_STATE_NONE:
+ case EOS_UPDATER_STATE_READY:
+ /* This sync call will block the job thread, which is OK. */
+ success = gs_eos_updater_call_poll_sync (priv->updater_proxy,
+ cancellable, error);
+ gs_eos_updater_error_convert (error);
+ return success;
+ default:
+ g_debug ("%s: Updater in state %s; not polling",
+ G_STRFUNC, eos_updater_state_to_str (updater_state));
+ return TRUE;
+ }
+}
+
+/* Called in a #GTask worker thread, but it can run without holding
+ * `priv->mutex` since it doesn’t need to synchronise on state. */
+gboolean
+gs_plugin_add_distro_upgrades (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ g_debug ("%s", G_STRFUNC);
+
+ /* if we are testing the plugin, then always add the OS upgrade */
+ if (g_getenv ("GS_PLUGIN_EOS_TEST") != NULL) {
+ gs_app_set_state (priv->os_upgrade, AS_APP_STATE_AVAILABLE);
+ gs_app_list_add (list, priv->os_upgrade);
+ return TRUE;
+ }
+
+ /* check if the OS upgrade has been disabled */
+ if (priv->updater_proxy == NULL) {
+ g_debug ("%s: Updater disabled", G_STRFUNC);
+ return TRUE;
+ }
+
+ if (should_add_os_upgrade (gs_app_get_state (priv->os_upgrade))) {
+ g_debug ("Adding EOS upgrade: %s",
+ gs_app_get_unique_id (priv->os_upgrade));
+ gs_app_list_add (list, priv->os_upgrade);
+ } else {
+ g_debug ("Not adding EOS upgrade");
+ }
+
+ return TRUE;
+}
+
+/* Must be called with priv->mutex already locked. */
+static gboolean
+wait_for_state_change_unlocked (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ EosUpdaterState old_state, new_state;
+
+ old_state = new_state = gs_eos_updater_get_state (priv->updater_proxy);
+ g_debug ("%s: Old state ‘%s’", G_STRFUNC, eos_updater_state_to_str (old_state));
+
+ while (new_state == old_state &&
+ !g_cancellable_is_cancelled (cancellable)) {
+ g_cond_wait (&priv->state_change_cond, &priv->mutex);
+ new_state = gs_eos_updater_get_state (priv->updater_proxy);
+ }
+
+ if (!g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ g_debug ("%s: New state ‘%s’", G_STRFUNC, eos_updater_state_to_str (new_state));
+ return TRUE;
+ } else {
+ g_debug ("%s: Cancelled", G_STRFUNC);
+ return FALSE;
+ }
+}
+
+/* Could be executed in any thread. No need to hold `priv->mutex` since we don’t
+ * access anything which is not thread-safe. */
+static void
+cancelled_cb (GCancellable *ui_cancellable,
+ gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* Chain cancellation. */
+ g_debug ("Propagating OS download cancellation from %p to %p",
+ ui_cancellable, priv->cancellable);
+ g_cancellable_cancel (priv->cancellable);
+
+ /* And wake up anything blocking on a state change. */
+ g_cond_broadcast (&priv->state_change_cond);
+}
+
+/* Called in a #GTask worker thread, and it needs to hold `priv->mutex` due to
+ * synchronising on state with the main thread. */
+gboolean
+gs_plugin_app_upgrade_download (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ gulong cancelled_id = 0;
+ EosUpdaterState state;
+ gboolean done, allow_restart;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* if the OS upgrade has been disabled */
+ if (priv->updater_proxy == NULL) {
+ g_set_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED,
+ "The OS upgrade has been disabled in the EOS plugin");
+ return FALSE;
+ }
+
+ g_assert (app == priv->os_upgrade);
+
+ /* Set up cancellation. */
+ g_debug ("Chaining cancellation from %p to %p", cancellable, priv->cancellable);
+ if (cancellable != NULL) {
+ cancelled_id = g_cancellable_connect (cancellable,
+ G_CALLBACK (cancelled_cb),
+ plugin, NULL);
+ }
+
+ /* Step through the state machine until we are finished downloading and
+ * applying the update, or until an error occurs. All of the D-Bus calls
+ * here will block until the method call is complete. */
+ state = gs_eos_updater_get_state (priv->updater_proxy);
+
+ done = FALSE;
+ allow_restart = (state == EOS_UPDATER_STATE_NONE ||
+ state == EOS_UPDATER_STATE_READY ||
+ state == EOS_UPDATER_STATE_ERROR);
+
+ while (!done && !g_cancellable_is_cancelled (cancellable)) {
+ state = gs_eos_updater_get_state (priv->updater_proxy);
+ g_debug ("%s: State ‘%s’", G_STRFUNC, eos_updater_state_to_str (state));
+
+ switch (state) {
+ case EOS_UPDATER_STATE_NONE:
+ case EOS_UPDATER_STATE_READY: {
+ /* Poll for an update. This typically only happens if
+ * we’ve drifted out of sync with the updater process
+ * due to it dying. In that case, only restart once
+ * before giving up, so we don’t end up in an endless
+ * loop (say, if eos-updater always died 50% of the way
+ * through a download). */
+ if (allow_restart) {
+ allow_restart = FALSE;
+ g_debug ("Restarting OS upgrade from none/ready state");
+ if (!gs_eos_updater_call_poll_sync (priv->updater_proxy,
+ cancellable, error)) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+ } else {
+ /* Display an error to the user. */
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsPluginEvent) event = gs_plugin_event_new ();
+ g_set_error_literal (&error_local, GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ _("EOS update service could not fetch and apply the update."));
+ gs_eos_updater_error_convert (&error_local);
+ gs_plugin_event_set_app (event, app);
+ gs_plugin_event_set_action (event, GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+
+ /* Error out. */
+ done = TRUE;
+ }
+
+ break;
+ } case EOS_UPDATER_STATE_POLLING: {
+ /* Nothing to do here. */
+ break;
+ } case EOS_UPDATER_STATE_UPDATE_AVAILABLE: {
+ g_auto(GVariantDict) options_dict = G_VARIANT_DICT_INIT (NULL);
+
+ /* when the OS upgrade was started by the user and the
+ * updater reports an available update, (meaning we were
+ * polling before), we should readily call fetch */
+ g_variant_dict_insert (&options_dict, "force", "b", TRUE);
+
+ if (!gs_eos_updater_call_fetch_full_sync (priv->updater_proxy,
+ g_variant_dict_end (&options_dict),
+ cancellable, error)) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+
+ break;
+ }
+ case EOS_UPDATER_STATE_FETCHING: {
+ /* Nothing to do here. */
+ break;
+ }
+ case EOS_UPDATER_STATE_UPDATE_READY: {
+ /* if there's an update ready to deployed, and it was started by
+ * the user, we should proceed to applying the upgrade */
+ gs_app_set_progress (app, max_progress_for_update);
+
+ if (!gs_eos_updater_call_apply_sync (priv->updater_proxy,
+ cancellable, error)) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+
+ break;
+ }
+ case EOS_UPDATER_STATE_APPLYING_UPDATE: {
+ /* Nothing to do here. */
+ break;
+ }
+ case EOS_UPDATER_STATE_UPDATE_APPLIED: {
+ /* Done! */
+ done = TRUE;
+ break;
+ }
+ case EOS_UPDATER_STATE_ERROR: {
+ const gchar *error_name;
+ const gchar *error_message;
+ g_autoptr(GError) error_local = NULL;
+
+ error_name = gs_eos_updater_get_error_name (priv->updater_proxy);
+ error_message = gs_eos_updater_get_error_message (priv->updater_proxy);
+ error_local = g_dbus_error_new_for_dbus_error (error_name, error_message);
+
+ /* Display an error to the user, unless they cancelled
+ * the download. */
+ if (!eos_updater_error_is_cancelled (error_name)) {
+ g_autoptr(GsPluginEvent) event = gs_plugin_event_new ();
+ gs_eos_updater_error_convert (&error_local);
+ gs_plugin_event_set_app (event, app);
+ gs_plugin_event_set_action (event, GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+ }
+
+ /* Unconditionally call Poll() to get the updater out
+ * of the error state and to allow the update to be
+ * displayed in the UI again and retried. Exit the
+ * state change loop immediately, though, to prevent
+ * possible endless loops between the Poll/Error
+ * states. */
+ allow_restart = FALSE;
+ g_debug ("Restarting OS upgrade on error");
+ if (!gs_eos_updater_call_poll_sync (priv->updater_proxy,
+ cancellable, error)) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+
+ /* Error out. */
+ done = TRUE;
+
+ break;
+ }
+ default:
+ g_warning ("Encountered unknown eos-updater state: %u", state);
+ break;
+ }
+
+ /* Block on the next state change. */
+ if (!done &&
+ !wait_for_state_change_unlocked (plugin, cancellable, error)) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ if (cancellable != NULL && cancelled_id != 0) {
+ g_debug ("Disconnecting cancellable %p", cancellable);
+ g_cancellable_disconnect (cancellable, cancelled_id);
+ }
+
+ /* Process the final state. */
+ if (gs_eos_updater_get_state (priv->updater_proxy) == EOS_UPDATER_STATE_ERROR) {
+ const gchar *error_name;
+ const gchar *error_message;
+ g_autoptr(GError) error_local = NULL;
+
+ error_name = gs_eos_updater_get_error_name (priv->updater_proxy);
+ error_message = gs_eos_updater_get_error_message (priv->updater_proxy);
+ error_local = g_dbus_error_new_for_dbus_error (error_name, error_message);
+ gs_eos_updater_error_convert (&error_local);
+ g_propagate_error (error, g_steal_pointer (&error_local));
+
+ return FALSE;
+ } else if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_eos_updater_error_convert (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/eos-updater/meson.build b/plugins/eos-updater/meson.build
new file mode 100644
index 0000000..2a22e88
--- /dev/null
+++ b/plugins/eos-updater/meson.build
@@ -0,0 +1,28 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginEosUpdater"']
+
+eos_updater_generated = gnome.gdbus_codegen(
+ 'gs-eos-updater-generated',
+ sources : ['com.endlessm.Updater.xml'],
+ interface_prefix : 'com.endlessm.',
+ namespace : 'GsEos',
+)
+
+shared_module(
+ 'gs_plugin_eos-updater',
+ eos_updater_generated,
+ sources : 'gs-plugin-eos-updater.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [
+ plugin_libs,
+ ostree,
+ ],
+ link_with : [
+ libgnomesoftware,
+ ],
+)
diff --git a/plugins/eos-updater/tests/eos_updater.py b/plugins/eos-updater/tests/eos_updater.py
new file mode 100644
index 0000000..5e4aa8d
--- /dev/null
+++ b/plugins/eos-updater/tests/eos_updater.py
@@ -0,0 +1,414 @@
+'''eos-updater mock template
+
+This creates a mock eos-updater interface (com.endlessm.Updater), with several
+methods on the Mock sidecar interface which allow its internal state flow to be
+controlled.
+
+A typical call chain for this would be:
+ - Test harness calls SetPollAction('update', {}, '', '')
+ - SUT calls Poll()
+ - Test harness calls FinishPoll()
+ - SUT calls Fetch()
+ - Test harness calls FinishFetch()
+ - SUT calls Apply()
+ - Test harness calls FinishApply()
+
+Errors can be simulated by specifying an `early-error` or `late-error` as the
+action in a Set*Action() call. `early-error` will result in the associated
+Poll() call (for example) transitioning to the error state. `late-error` will
+result in a transition to the error state only once (for example) FinishPoll()
+is called.
+
+See the implementation of each Set*Action() method for the set of actions it
+supports.
+
+Usage:
+ python3 -m dbusmock \
+ --template ./plugins/eos-updater/tests/mock-eos-updater.py
+'''
+
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; either version 2.1 of the License, or (at your option)
+# any later version. See http://www.gnu.org/copyleft/lgpl.html for the full
+# text of the license.
+#
+# The LGPL 2.1+ has been chosen as that’s the license eos-updater is under.
+
+from enum import IntEnum
+from gi.repository import GLib
+import time
+
+import dbus
+import dbus.mainloop.glib
+from dbusmock import MOCK_IFACE
+
+
+__author__ = 'Philip Withnall'
+__email__ = 'withnall@endlessm.com'
+__copyright__ = '© 2019 Endless Mobile Inc.'
+__license__ = 'LGPL 2.1+'
+
+
+class UpdaterState(IntEnum):
+ NONE = 0
+ READY = 1
+ ERROR = 2
+ POLLING = 3
+ UPDATE_AVAILABLE = 4
+ FETCHING = 5
+ UPDATE_READY = 6
+ APPLYING_UPDATE = 7
+ UPDATE_APPLIED = 8
+
+
+BUS_NAME = 'com.endlessm.Updater'
+MAIN_OBJ = '/com/endlessm/Updater'
+MAIN_IFACE = 'com.endlessm.Updater'
+SYSTEM_BUS = True
+
+
+dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+
+def load(mock, parameters):
+ mock.AddProperties(
+ MAIN_IFACE,
+ dbus.Dictionary({
+ 'State': dbus.UInt32(parameters.get('State', 1)),
+ 'UpdateID': dbus.String(parameters.get('UpdateID', '')),
+ 'UpdateRefspec': dbus.String(parameters.get('UpdateRefspec', '')),
+ 'OriginalRefspec':
+ dbus.String(parameters.get('OriginalRefspec', '')),
+ 'CurrentID': dbus.String(parameters.get('CurrentID', '')),
+ 'UpdateLabel': dbus.String(parameters.get('UpdateLabel', '')),
+ 'UpdateMessage': dbus.String(parameters.get('UpdateMessage', '')),
+ 'Version': dbus.String(parameters.get('Version', '')),
+ 'DownloadSize': dbus.Int64(parameters.get('DownloadSize', 0)),
+ 'DownloadedBytes':
+ dbus.Int64(parameters.get('DownloadedBytes', 0)),
+ 'UnpackedSize': dbus.Int64(parameters.get('UnpackedSize', 0)),
+ 'FullDownloadSize':
+ dbus.Int64(parameters.get('FullDownloadSize', 0)),
+ 'FullUnpackedSize':
+ dbus.Int64(parameters.get('FullUnpackedSize', 0)),
+ 'ErrorCode': dbus.UInt32(parameters.get('ErrorCode', 0)),
+ 'ErrorName': dbus.String(parameters.get('ErrorName', '')),
+ 'ErrorMessage': dbus.String(parameters.get('ErrorMessage', '')),
+ }, signature='sv'))
+
+ # Set up initial state
+ mock.__poll_action = 'no-update'
+ mock.__fetch_action = 'success'
+ mock.__apply_action = 'success'
+
+ # Set up private methods
+ mock.__set_properties = __set_properties
+ mock.__change_state = __change_state
+ mock.__set_error = __set_error
+ mock.__check_state = __check_state
+
+
+#
+# Internal utility methods
+#
+
+# Values in @properties must have variant_level≥1
+def __set_properties(self, iface, properties):
+ for key, value in properties.items():
+ self.props[iface][key] = value
+ self.EmitSignal(dbus.PROPERTIES_IFACE, 'PropertiesChanged', 'sa{sv}as', [
+ iface,
+ properties,
+ [],
+ ])
+
+
+def __change_state(self, new_state):
+ props = {
+ 'State': dbus.UInt32(new_state, variant_level=1)
+ }
+
+ # Reset error state if necessary.
+ if new_state != UpdaterState.ERROR and \
+ self.props[MAIN_IFACE]['ErrorName'] != '':
+ props['ErrorCode'] = dbus.UInt32(0, variant_level=1)
+ props['ErrorName'] = dbus.String('', variant_level=1)
+ props['ErrorMessage'] = dbus.String('', variant_level=1)
+
+ self.__set_properties(self, MAIN_IFACE, props)
+ self.EmitSignal(MAIN_IFACE, 'StateChanged', 'u', [dbus.UInt32(new_state)])
+
+
+def __set_error(self, error_name, error_message):
+ assert(error_name != '')
+
+ self.__set_properties(self, MAIN_IFACE, {
+ 'ErrorName': dbus.String(error_name, variant_level=1),
+ 'ErrorMessage': dbus.String(error_message, variant_level=1),
+ 'ErrorCode': dbus.UInt32(1, variant_level=1),
+ })
+ self.__change_state(self, UpdaterState.ERROR)
+
+
+def __check_state(self, allowed_states):
+ if self.props[MAIN_IFACE]['State'] not in allowed_states:
+ raise dbus.exceptions.DBusException(
+ 'Call not allowed in this state',
+ name='com.endlessm.Updater.Error.WrongState')
+
+
+#
+# Updater methods which are too big for squeezing into AddMethod()
+#
+
+@dbus.service.method(MAIN_IFACE, in_signature='', out_signature='')
+def Poll(self):
+ self.__check_state(self, set([
+ UpdaterState.READY,
+ UpdaterState.UPDATE_AVAILABLE,
+ UpdaterState.UPDATE_READY,
+ UpdaterState.ERROR,
+ ]))
+
+ self.__change_state(self, UpdaterState.POLLING)
+
+ if self.__poll_action == 'early-error':
+ time.sleep(0.5)
+ self.__set_error(self, self.__poll_error_name,
+ self.__poll_error_message)
+ else:
+ # we now expect the test harness to call FinishPoll() on the mock
+ # interface
+ pass
+
+
+@dbus.service.method(MAIN_IFACE, in_signature='s', out_signature='')
+def PollVolume(self, path):
+ # FIXME: Currently unsupported
+ return self.Poll()
+
+
+@dbus.service.method(MAIN_IFACE, in_signature='', out_signature='')
+def Fetch(self):
+ return self.FetchFull()
+
+
+@dbus.service.method(MAIN_IFACE, in_signature='a{sv}', out_signature='')
+def FetchFull(self, options=None):
+ self.__check_state(self, set([UpdaterState.UPDATE_AVAILABLE]))
+
+ self.__change_state(self, UpdaterState.FETCHING)
+
+ if self.__fetch_action == 'early-error':
+ time.sleep(0.5)
+ self.__set_error(self, self.__fetch_error_name,
+ self.__fetch_error_message)
+ else:
+ # we now expect the test harness to call FinishFetch() on the mock
+ # interface
+ pass
+
+
+@dbus.service.method(MAIN_IFACE, in_signature='', out_signature='')
+def Apply(self):
+ self.__check_state(self, set([UpdaterState.UPDATE_READY]))
+
+ self.__change_state(self, UpdaterState.APPLYING_UPDATE)
+
+ if self.__apply_action == 'early-error':
+ time.sleep(0.5)
+ self.__set_error(self, self.__apply_error_name,
+ self.__apply_error_message)
+ else:
+ # we now expect the test harness to call FinishApply() on the mock
+ # interface
+ pass
+
+
+@dbus.service.method(MAIN_IFACE, in_signature='', out_signature='')
+def Cancel(self):
+ self.__check_state(self, set([
+ UpdaterState.POLLING,
+ UpdaterState.FETCHING,
+ UpdaterState.APPLYING_UPDATE,
+ ]))
+
+ time.sleep(1)
+ self.__set_error(self, 'com.endlessm.Updater.Error.Cancelled',
+ 'Update was cancelled')
+
+
+#
+# Convenience methods on the mock
+#
+
+@dbus.service.method(MOCK_IFACE, in_signature='sa{sv}ss', out_signature='')
+def SetPollAction(self, action, update_properties, error_name, error_message):
+ '''Set the action to happen when the SUT calls Poll().
+
+ This sets the action which will happen when Poll() (and subsequently
+ FinishPoll()) are called, including the details of the error which will be
+ returned or the new update which will be advertised.
+ '''
+ # Provide a default update.
+ if not update_properties:
+ update_properties = {
+ 'UpdateID': dbus.String('f' * 64, variant_level=1),
+ 'UpdateRefspec':
+ dbus.String('remote:new-refspec', variant_level=1),
+ 'OriginalRefspec':
+ dbus.String('remote:old-refspec', variant_level=1),
+ 'CurrentID': dbus.String('1' * 64, variant_level=1),
+ 'UpdateLabel': dbus.String('New OS Update', variant_level=1),
+ 'UpdateMessage':
+ dbus.String('Some release notes.', variant_level=1),
+ 'Version': dbus.String('3.7.0', variant_level=1),
+ 'DownloadSize': dbus.Int64(1000000000, variant_level=1),
+ 'UnpackedSize': dbus.Int64(1500000000, variant_level=1),
+ 'FullDownloadSize': dbus.Int64(1000000000 * 0.8, variant_level=1),
+ 'FullUnpackedSize': dbus.Int64(1500000000 * 0.8, variant_level=1),
+ }
+
+ self.__poll_action = action
+ self.__poll_update_properties = update_properties
+ self.__poll_error_name = error_name
+ self.__poll_error_message = error_message
+
+
+@dbus.service.method(MOCK_IFACE, in_signature='', out_signature='')
+def FinishPoll(self):
+ self.__check_state(self, set([UpdaterState.POLLING]))
+
+ if self.__poll_action == 'no-update':
+ self.__change_state(self, UpdaterState.READY)
+ elif self.__poll_action == 'update':
+ assert(set([
+ 'UpdateID',
+ 'UpdateRefspec',
+ 'OriginalRefspec',
+ 'CurrentID',
+ 'UpdateLabel',
+ 'UpdateMessage',
+ 'Version',
+ 'FullDownloadSize',
+ 'FullUnpackedSize',
+ 'DownloadSize',
+ 'UnpackedSize',
+ ]) <= set(self.__poll_update_properties.keys()))
+
+ # Set the initial DownloadedBytes based on whether we know the full
+ # download size.
+ props = self.__poll_update_properties
+ if props['DownloadSize'] < 0:
+ props['DownloadedBytes'] = dbus.Int64(-1, variant_level=1)
+ else:
+ props['DownloadedBytes'] = dbus.Int64(0, variant_level=1)
+
+ self.__set_properties(self, MAIN_IFACE, props)
+ self.__change_state(self, UpdaterState.UPDATE_AVAILABLE)
+ elif self.__poll_action == 'early-error':
+ # Handled in Poll() itself.
+ pass
+ elif self.__poll_action == 'late-error':
+ self.__set_error(self, self.__poll_error_name,
+ self.__poll_error_message)
+ else:
+ assert(False)
+
+
+@dbus.service.method(MOCK_IFACE, in_signature='sss', out_signature='')
+def SetFetchAction(self, action, error_name, error_message):
+ '''Set the action to happen when the SUT calls Fetch().
+
+ This sets the action which will happen when Fetch() (and subsequently
+ FinishFetch()) are called, including the details of the error which will be
+ returned, if applicable.
+ '''
+ self.__fetch_action = action
+ self.__fetch_error_name = error_name
+ self.__fetch_error_message = error_message
+
+
+@dbus.service.method(MOCK_IFACE, in_signature='', out_signature='',
+ async_callbacks=('success_cb', 'error_cb'))
+def FinishFetch(self, success_cb, error_cb):
+ '''Finish a pending client call to Fetch().
+
+ This is implemented using async_callbacks since if the fetch action is
+ ‘success’ it will block until the simulated download is complete, emitting
+ download progress signals throughout. As it’s implemented asynchronously,
+ this allows any calls to Cancel() to be handled by the mock service
+ part-way through the fetch.
+ '''
+ self.__check_state(self, set([UpdaterState.FETCHING]))
+
+ if self.__fetch_action == 'success':
+ # Simulate the download.
+ i = 0
+ download_size = self.props[MAIN_IFACE]['DownloadSize']
+
+ def _download_progress_cb():
+ nonlocal i
+
+ # Allow cancellation.
+ if self.props[MAIN_IFACE]['State'] != UpdaterState.FETCHING:
+ return False
+
+ downloaded_bytes = (i / 100.0) * download_size
+ self.__set_properties(self, MAIN_IFACE, {
+ 'DownloadedBytes':
+ dbus.Int64(downloaded_bytes, variant_level=1),
+ })
+
+ i += 1
+
+ # Keep looping until the download is complete.
+ if i <= 100:
+ return True
+
+ # When the download is complete, change the service state and
+ # finish the asynchronous FinishFetch() call.
+ self.__change_state(self, UpdaterState.UPDATE_READY)
+ success_cb()
+ return False
+
+ GLib.timeout_add(100, _download_progress_cb)
+ elif self.__fetch_action == 'early-error':
+ # Handled in Fetch() itself.
+ success_cb()
+ elif self.__fetch_action == 'late-error':
+ self.__set_error(self, self.__fetch_error_name,
+ self.__fetch_error_message)
+ success_cb()
+ else:
+ assert(False)
+
+
+@dbus.service.method(MOCK_IFACE, in_signature='sss', out_signature='')
+def SetApplyAction(self, action, error_name, error_message):
+ '''Set the action to happen when the SUT calls Apply().
+
+ This sets the action which will happen when Apply() (and subsequently
+ FinishApply()) are called, including the details of the error which will be
+ returned, if applicable.
+ '''
+ self.__apply_action = action
+ self.__apply_error_name = error_name
+ self.__apply_error_message = error_message
+
+
+@dbus.service.method(MOCK_IFACE, in_signature='', out_signature='')
+def FinishApply(self):
+ self.__check_state(self, set([UpdaterState.APPLYING_UPDATE]))
+
+ if self.__apply_action == 'success':
+ self.__change_state(self, UpdaterState.UPDATE_APPLIED)
+ elif self.__apply_action == 'early-error':
+ # Handled in Apply() itself.
+ pass
+ elif self.__apply_action == 'late-error':
+ self.__set_error(self, self.__apply_error_name,
+ self.__apply_error_message)
+ else:
+ assert(False)
diff --git a/plugins/eos-updater/tests/manual-test.py b/plugins/eos-updater/tests/manual-test.py
new file mode 100755
index 0000000..b6413d9
--- /dev/null
+++ b/plugins/eos-updater/tests/manual-test.py
@@ -0,0 +1,434 @@
+#!/usr/bin/python3
+
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; either version 2.1+ of the License, or (at your option)
+# any later version. See http://www.gnu.org/copyleft/lgpl.html for the full
+# text of the license.
+#
+# The LGPL 2.1+ has been chosen as that’s the license eos-updater is under.
+
+
+from enum import IntEnum
+import os
+import time
+import unittest
+import dbus
+import dbusmock
+import ddt
+
+
+__author__ = 'Philip Withnall'
+__email__ = 'withnall@endlessm.com'
+__copyright__ = '© 2019 Endless Mobile Inc.'
+__license__ = 'LGPL 2.1+'
+
+
+class UpdaterState(IntEnum):
+ '''eos-updater states; see its State property'''
+ NONE = 0
+ READY = 1
+ ERROR = 2
+ POLLING = 3
+ UPDATE_AVAILABLE = 4
+ FETCHING = 5
+ UPDATE_READY = 6
+ APPLYING_UPDATE = 7
+ UPDATE_APPLIED = 8
+
+
+@ddt.ddt
+class ManualTest(dbusmock.DBusTestCase):
+ '''A manual test of the eos-updater plugin in gnome-software.
+
+ It creates a mock eos-updater D-Bus daemon, on the real system bus (because
+ otherwise gnome-software’s other plugins can’t communicate with their
+ system daemons; to fix this, we’d need to mock those up too). The test
+ harness provides the user with instructions about how to run gnome-software
+ and what to do in it, waiting for them to press enter between steps.
+
+ FIXME: This test could potentially eventually be automated by doing the UI
+ steps using Dogtail or OpenQA.
+
+ It tests various classes of interaction between the plugin and the daemon:
+ normal update process (with and without an update available); error returns
+ from the daemon; cancellation of the daemon by another process;
+ cancellation of the daemon from gnome-software; and the daemon unexpectedly
+ going away (i.e. crashing).
+ '''
+
+ @classmethod
+ def setUpClass(cls):
+ # FIXME: See the comment below about why we currently run on the actual
+ # system bus.
+ # cls.start_system_bus()
+ cls.dbus_con = cls.get_dbus(True)
+
+ def setUp(self):
+ # Work out the path to the dbusmock template in the same directory as
+ # this file.
+ self_path = os.path.dirname(os.path.realpath(__file__))
+ template_path = os.path.join(self_path, 'eos_updater.py')
+
+ # Spawn a python-dbusmock server. Use the actual system bus, since
+ # gnome-software needs to access various other services (such as
+ # packagekit) which we don’t currently mock (FIXME).
+ (self.p_mock, self.obj_eos_updater) = self.spawn_server_template(
+ template_path, {}, stdout=None)
+ self.dbusmock = dbus.Interface(self.obj_eos_updater,
+ dbusmock.MOCK_IFACE)
+
+ def tearDown(self):
+ self.kill_gnome_software()
+ self.p_mock.terminate()
+ self.p_mock.wait()
+
+ def launch_gnome_software(self):
+ '''Instruct the user to launch gnome-software'''
+ print('Launch gnome-software with:')
+ print('gnome-software --verbose')
+ self.manual_check('Press enter to continue')
+
+ def kill_gnome_software(self):
+ '''Instruct the user to kill gnome-software'''
+ print('Kill gnome-software with:')
+ print('pkill gnome-software')
+ self.manual_check('Press enter to continue')
+
+ def await_state(self, state):
+ '''Block until eos-updater reaches the given `state`'''
+ print('Awaiting state %u' % state)
+ props_iface = dbus.Interface(self.obj_eos_updater,
+ dbus.PROPERTIES_IFACE)
+ while props_iface.Get('com.endlessm.Updater', 'State') != state:
+ time.sleep(0.2)
+
+ def manual_check(self, prompt):
+ '''Instruct the user to do a manual check and block until done'''
+ input('\033[92;1m' + prompt + '\033[0m\n')
+
+ def test_poll_no_update(self):
+ '''Test that no updates are shown if eos-updater successfully says
+ there are none.'''
+ self.dbusmock.SetPollAction(
+ 'no-update', dbus.Dictionary({}, signature='sv'), '', '')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check there are no EOS updates listed')
+ self.await_state(UpdaterState.READY)
+
+ @ddt.data('com.endlessm.Updater.Error.WrongState',
+ 'com.endlessm.Updater.Error.LiveBoot',
+ 'com.endlessm.Updater.Error.WrongConfiguration',
+ 'com.endlessm.Updater.Error.NotOstreeSystem',
+ 'com.endlessm.Updater.Error.Cancelled')
+ def test_poll_early_error(self, error_name):
+ '''Test that a D-Bus error return from Poll() is handled correctly.'''
+ self.dbusmock.SetPollAction(
+ 'early-error', dbus.Dictionary({}, signature='sv'),
+ error_name, 'Some error message.')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.ERROR)
+
+ if error_name != 'com.endlessm.Updater.Error.Cancelled':
+ self.manual_check('Check there are no EOS updates listed, and a '
+ 'GsPluginEosUpdater error is printed on the '
+ 'terminal')
+ else:
+ self.manual_check('Check there are no EOS updates listed, and no '
+ 'GsPluginEosUpdater cancellation error is '
+ 'printed on the terminal')
+
+ @ddt.data('com.endlessm.Updater.Error.WrongState',
+ 'com.endlessm.Updater.Error.LiveBoot',
+ 'com.endlessm.Updater.Error.WrongConfiguration',
+ 'com.endlessm.Updater.Error.NotOstreeSystem',
+ 'com.endlessm.Updater.Error.Cancelled')
+ def test_poll_late_error(self, error_name):
+ '''Test that a transition to the Error state after successfully calling
+ Poll() is handled correctly.'''
+ self.dbusmock.SetPollAction(
+ 'late-error', dbus.Dictionary({}, signature='sv'),
+ error_name, 'Some error message.')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ if error_name != 'com.endlessm.Updater.Error.Cancelled':
+ self.manual_check('Check there are no EOS updates listed, and a '
+ 'GsPluginEosUpdater error is printed on the '
+ 'terminal')
+ else:
+ self.manual_check('Check there are no EOS updates listed, and no '
+ 'GsPluginEosUpdater cancellation error is '
+ 'printed on the terminal')
+ self.await_state(UpdaterState.ERROR)
+
+ @ddt.data(True, False)
+ def test_update_available(self, manually_refresh):
+ '''Test that the entire update process works if an update is
+ available.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('success', '', '')
+ self.dbusmock.SetApplyAction('success', '', '')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ if manually_refresh:
+ self.manual_check('Check an EOS update is listed; press the '
+ 'Refresh button')
+
+ # TODO: if you proceed through the test slowly, this sometimes doesn’t
+ # work
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.dbusmock.FinishFetch()
+
+ self.manual_check('Check the download has paused at ~75% complete '
+ '(waiting to apply)')
+ self.await_state(UpdaterState.APPLYING_UPDATE)
+ self.dbusmock.FinishApply()
+
+ self.manual_check('Check the banner says to ‘Restart Now’ (don’t '
+ 'click it)')
+ self.await_state(UpdaterState.UPDATE_APPLIED)
+
+ @ddt.data('com.endlessm.Updater.Error.WrongState',
+ 'com.endlessm.Updater.Error.WrongConfiguration',
+ 'com.endlessm.Updater.Error.Fetching',
+ 'com.endlessm.Updater.Error.MalformedAutoinstallSpec',
+ 'com.endlessm.Updater.Error.UnknownEntryInAutoinstallSpec',
+ 'com.endlessm.Updater.Error.FlatpakRemoteConflict',
+ 'com.endlessm.Updater.Error.MeteredConnection',
+ 'com.endlessm.Updater.Error.Cancelled')
+ def test_fetch_early_error(self, error_name):
+ '''Test that a D-Bus error return from Fetch() is handled correctly.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('early-error', error_name,
+ 'Some error or other.')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+
+ if error_name != 'com.endlessm.Updater.Error.Cancelled':
+ self.manual_check('Check a fetch error is displayed')
+ else:
+ self.manual_check('Check no cancellation error is displayed')
+
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+ self.manual_check('Check an EOS update is listed again')
+
+ @ddt.data('com.endlessm.Updater.Error.WrongState',
+ 'com.endlessm.Updater.Error.WrongConfiguration',
+ 'com.endlessm.Updater.Error.Fetching',
+ 'com.endlessm.Updater.Error.MalformedAutoinstallSpec',
+ 'com.endlessm.Updater.Error.UnknownEntryInAutoinstallSpec',
+ 'com.endlessm.Updater.Error.FlatpakRemoteConflict',
+ 'com.endlessm.Updater.Error.MeteredConnection',
+ 'com.endlessm.Updater.Error.Cancelled')
+ def test_fetch_late_error(self, error_name):
+ '''Test that a transition to the Error state after successfully calling
+ Fetch() is handled correctly.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('late-error', error_name,
+ 'Some error or other.')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.dbusmock.FinishFetch()
+
+ self.await_state(UpdaterState.ERROR)
+ if error_name != 'com.endlessm.Updater.Error.Cancelled':
+ self.manual_check('Check a fetch error is displayed')
+ else:
+ self.manual_check('Check no cancellation error is displayed')
+
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+ self.manual_check('Check an EOS update is listed again')
+
+ @ddt.data('com.endlessm.Updater.Error.WrongState',
+ 'com.endlessm.Updater.Error.WrongConfiguration',
+ 'com.endlessm.Updater.Error.Cancelled')
+ def test_apply_early_error(self, error_name):
+ '''Test that a D-Bus error return from Apply() is handled correctly.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('success', '', '')
+ self.dbusmock.SetApplyAction('early-error', error_name,
+ 'Some error or other.')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.dbusmock.FinishFetch()
+
+ self.await_state(UpdaterState.ERROR)
+ if error_name != 'com.endlessm.Updater.Error.Cancelled':
+ self.manual_check('Check an apply error is displayed after the '
+ 'update reached ~75% completion')
+ else:
+ self.manual_check('Check no cancellation error is displayed after '
+ 'the update reached ~75% completion')
+
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+ self.manual_check('Check an EOS update is listed again')
+
+ @ddt.data('com.endlessm.Updater.Error.WrongState',
+ 'com.endlessm.Updater.Error.WrongConfiguration',
+ 'com.endlessm.Updater.Error.Cancelled')
+ def test_apply_late_error(self, error_name):
+ '''Test that a transition to the Error state after successfully calling
+ Apply() is handled correctly.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('success', '', '')
+ self.dbusmock.SetApplyAction('late-error', error_name,
+ 'Some error or other.')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.dbusmock.FinishFetch()
+
+ self.manual_check('Check the download has paused at ~75% complete '
+ '(waiting to apply)')
+ self.await_state(UpdaterState.APPLYING_UPDATE)
+ self.dbusmock.FinishApply()
+
+ self.await_state(UpdaterState.ERROR)
+ if error_name != 'com.endlessm.Updater.Error.Cancelled':
+ self.manual_check('Check an apply error is displayed')
+ else:
+ self.manual_check('Check no cancellation error is displayed')
+
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+ self.manual_check('Check an EOS update is listed again')
+
+ def test_no_eos_updater_running(self):
+ '''Test that the plugin doesn’t make a fuss if eos-updater is
+ unavailable.'''
+ self.p_mock.kill()
+
+ self.launch_gnome_software()
+
+ self.manual_check('Check there are no EOS updates listed, and no '
+ 'errors shown')
+
+ def test_fetch_ui_cancellation(self):
+ '''Test that cancelling a download from the UI works correctly.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('success', '', '')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button, then shortly afterwards press the Cancel '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.dbusmock.FinishFetch()
+
+ self.await_state(UpdaterState.ERROR)
+ self.manual_check('Check a fetch cancellation error is displayed')
+
+ def test_poll_eos_updater_dies(self):
+ '''Test that gnome-software recovers if eos-updater dies while
+ polling for updates.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.p_mock.kill()
+
+ self.manual_check('Check no error is shown for the poll failure')
+ self.setUp()
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+
+ self.manual_check('Press the Refresh button and check an update is '
+ 'shown')
+ # TODO: It may take a few minutes for the update to appear on the
+ # updates page
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ def test_fetch_eos_updater_dies(self):
+ '''Test that gnome-software recovers if eos-updater dies while
+ fetching an update.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('success', '', '')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.p_mock.kill()
+
+ self.manual_check('Check an error is shown for the fetch failure')
+
+ def test_apply_eos_updater_dies(self):
+ '''Test that gnome-software recovers if eos-updater dies while
+ applying an update.'''
+ self.dbusmock.SetPollAction(
+ 'update', dbus.Dictionary({}, signature='sv'), '', '')
+ self.dbusmock.SetFetchAction('success', '', '')
+ self.dbusmock.SetApplyAction('success', '', '')
+
+ self.launch_gnome_software()
+ self.await_state(UpdaterState.POLLING)
+ self.dbusmock.FinishPoll()
+
+ self.manual_check('Check an EOS update is listed; press the Download '
+ 'button')
+ self.await_state(UpdaterState.FETCHING)
+ self.dbusmock.FinishFetch()
+
+ self.manual_check('Check the download has paused at ~75% complete '
+ '(waiting to apply)')
+ self.await_state(UpdaterState.APPLYING_UPDATE)
+ self.p_mock.kill()
+
+ self.manual_check('Check an error is shown for the apply failure')
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/plugins/external-appstream/gs-external-appstream-utils.c b/plugins/external-appstream/gs-external-appstream-utils.c
new file mode 100644
index 0000000..7002810
--- /dev/null
+++ b/plugins/external-appstream/gs-external-appstream-utils.c
@@ -0,0 +1,27 @@
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Endless Mobile, Inc.
+ *
+ * Authors: Joaquim Rocha <jrocha@endlessm.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "gs-external-appstream-utils.h"
+
+#define APPSTREAM_SYSTEM_DIR LOCALSTATEDIR "/cache/app-info/xmls"
+
+gchar *
+gs_external_appstream_utils_get_file_cache_path (const gchar *file_name)
+{
+ g_autofree gchar *prefixed_file_name = g_strdup_printf ("org.gnome.Software-%s",
+ file_name);
+ return g_build_filename (APPSTREAM_SYSTEM_DIR, prefixed_file_name, NULL);
+}
+
+const gchar *
+gs_external_appstream_utils_get_system_dir (void)
+{
+ return APPSTREAM_SYSTEM_DIR;
+}
diff --git a/plugins/external-appstream/gs-external-appstream-utils.h b/plugins/external-appstream/gs-external-appstream-utils.h
new file mode 100644
index 0000000..402c27c
--- /dev/null
+++ b/plugins/external-appstream/gs-external-appstream-utils.h
@@ -0,0 +1,17 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Endless Mobile, Inc.
+ *
+ * Authors: Joaquim Rocha <jrocha@endlessm.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <config.h>
+#include <glib.h>
+
+const gchar *gs_external_appstream_utils_get_system_dir (void);
+gchar *gs_external_appstream_utils_get_file_cache_path (const gchar *file_name);
diff --git a/plugins/external-appstream/gs-install-appstream.c b/plugins/external-appstream/gs-install-appstream.c
new file mode 100644
index 0000000..fb0d8fa
--- /dev/null
+++ b/plugins/external-appstream/gs-install-appstream.c
@@ -0,0 +1,181 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2009-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <locale.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+#include <xmlb.h>
+#include <glib/gi18n.h>
+
+#include "gs-external-appstream-utils.h"
+
+static gboolean
+gs_install_appstream_copy_file (GFile *file, GError **error)
+{
+ g_autofree gchar *basename = g_file_get_basename (file);
+ g_autofree gchar *cachefn = gs_external_appstream_utils_get_file_cache_path (basename);
+ g_autoptr(GFile) cachefn_file = g_file_new_for_path (cachefn);
+ g_autoptr(GFile) cachedir_file = g_file_get_parent (cachefn_file);
+
+ /* make sure the parent directory exists, but if not then create with
+ * the ownership and permissions of the current process */
+ if (!g_file_query_exists (cachedir_file, NULL)) {
+ if (!g_file_make_directory_with_parents (cachedir_file, NULL, error))
+ return FALSE;
+ }
+
+ /* do the copy, overwriting existing files and setting the permissions
+ * of the current process (so that should be -rw-r--r--) */
+ return g_file_copy (file, cachefn_file,
+ G_FILE_COPY_OVERWRITE |
+ G_FILE_COPY_NOFOLLOW_SYMLINKS |
+ G_FILE_COPY_TARGET_DEFAULT_PERMS,
+ NULL, NULL, NULL, error);
+}
+
+static gboolean
+gs_install_appstream_check_content_type (GFile *file, GError **error)
+{
+ const gchar *type;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GFileInfo) info = NULL;
+ g_autoptr(GPtrArray) components = NULL;
+ g_autoptr(XbBuilder) builder = xb_builder_new ();
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+ g_autoptr(XbSilo) silo = NULL;
+
+ /* check is correct type */
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ G_FILE_QUERY_INFO_NONE,
+ NULL, error);
+ if (info == NULL)
+ return FALSE;
+ type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
+ if (g_strcmp0 (type, "application/gzip") != 0 &&
+ g_strcmp0 (type, "application/xml") != 0) {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "Invalid type %s: ", type);
+ return FALSE;
+ }
+
+ /* check is an AppStream file */
+ if (!xb_builder_source_load_file (source, file,
+ XB_BUILDER_SOURCE_FLAG_NONE,
+ NULL, &error_local)) {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "Failed to import XML: %s", error_local->message);
+ return FALSE;
+ }
+ xb_builder_import_source (builder, source);
+ silo = xb_builder_compile (builder,
+ XB_BUILDER_COMPILE_FLAG_NONE,
+ NULL, &error_local);
+ if (silo == NULL) {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "Failed to parse XML: %s", error_local->message);
+ return FALSE;
+ }
+ components = xb_silo_query (silo, "components/component", 0, &error_local);
+ if (components == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "No applications found in the AppStream XML");
+ return FALSE;
+ }
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "Failed to query XML: %s", error_local->message);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GOptionContext) context = NULL;
+
+ /* setup translations */
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ context = g_option_context_new (NULL);
+ /* TRANSLATORS: tool that is used when copying profiles system-wide */
+ g_option_context_set_summary (context, _("GNOME Software AppStream system-wide installer"));
+ if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ g_print ("%s\n", _("Failed to parse command line arguments"));
+ return EXIT_FAILURE;
+ }
+
+ /* check input */
+ if (g_strv_length (argv) != 2) {
+ /* TRANSLATORS: user did not specify a valid filename */
+ g_print ("%s\n", _("You need to specify exactly one filename"));
+ return EXIT_FAILURE;
+ }
+
+ /* check calling process */
+ if (getuid () != 0 || geteuid () != 0) {
+ /* TRANSLATORS: only able to install files as root */
+ g_print ("%s\n", _("This program can only be used by the root user"));
+ return EXIT_FAILURE;
+ }
+
+ /* check content type for file */
+ file = g_file_new_for_path (argv[1]);
+ if (!gs_install_appstream_check_content_type (file, &error)) {
+ /* TRANSLATORS: error details */
+ g_print ("%s: %s\n", _("Failed to validate content type"), error->message);
+ return EXIT_FAILURE;
+ }
+
+ /* Set the umask to ensure it is read-only to all users except root. */
+ umask (022);
+
+ /* do the copy */
+ if (!gs_install_appstream_copy_file (file, &error)) {
+ /* TRANSLATORS: error details */
+ g_print ("%s: %s\n", _("Failed to copy"), error->message);
+ return EXIT_FAILURE;
+ }
+
+ /* success */
+ return EXIT_SUCCESS;
+}
diff --git a/plugins/external-appstream/gs-plugin-external-appstream.c b/plugins/external-appstream/gs-plugin-external-appstream.c
new file mode 100644
index 0000000..e94e0c5
--- /dev/null
+++ b/plugins/external-appstream/gs-plugin-external-appstream.c
@@ -0,0 +1,289 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016-2018 Endless Mobile, Inc.
+ *
+ * Authors: Joaquim Rocha <jrocha@endlessm.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+#include <glib/gi18n.h>
+
+#include <gnome-software.h>
+#include "gs-external-appstream-utils.h"
+
+struct GsPluginData {
+ GSettings *settings;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ const gchar *system_dir = gs_external_appstream_utils_get_system_dir ();
+
+ priv->settings = g_settings_new ("org.gnome.software");
+
+ /* run it before the appstream plugin */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "appstream");
+
+ g_debug ("appstream system dir: %s", system_dir);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_object_unref (priv->settings);
+}
+
+static gboolean
+gs_plugin_external_appstream_check (const gchar *appstream_path,
+ guint cache_age)
+{
+ g_autoptr(GFile) file = g_file_new_for_path (appstream_path);
+ guint appstream_file_age = gs_utils_get_file_age (file);
+ return appstream_file_age >= cache_age;
+}
+
+static gboolean
+gs_plugin_external_appstream_install (const gchar *appstream_file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GSubprocess) subprocess = NULL;
+ const gchar *argv[] = { "pkexec",
+ LIBEXECDIR "/gnome-software-install-appstream",
+ appstream_file, NULL};
+ g_debug ("Installing the appstream file %s in the system",
+ appstream_file);
+ subprocess = g_subprocess_newv (argv,
+ G_SUBPROCESS_FLAGS_STDOUT_PIPE |
+ G_SUBPROCESS_FLAGS_STDIN_PIPE, error);
+ if (subprocess == NULL)
+ return FALSE;
+ return g_subprocess_wait_check (subprocess, cancellable, error);
+}
+
+static gchar *
+gs_plugin_external_appstream_get_modification_date (const gchar *file_path)
+{
+#ifndef GLIB_VERSION_2_62
+ GTimeVal time_val;
+#endif
+ g_autoptr(GDateTime) date_time = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GFileInfo) info = NULL;
+
+ file = g_file_new_for_path (file_path);
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ NULL);
+ if (info == NULL)
+ return NULL;
+#ifdef GLIB_VERSION_2_62
+ date_time = g_file_info_get_modification_date_time (info);
+#else
+ g_file_info_get_modification_time (info, &time_val);
+ date_time = g_date_time_new_from_timeval_local (&time_val);
+#endif
+ return g_date_time_format (date_time, "%a, %d %b %Y %H:%M:%S %Z");
+}
+
+static gboolean
+gs_plugin_external_appstream_refresh_sys (GsPlugin *plugin,
+ const gchar *url,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GOutputStream *outstream = NULL;
+ SoupSession *soup_session;
+ guint status_code;
+ gboolean file_written;
+ g_autofree gchar *tmp_file_path = NULL;
+ g_autofree gchar *file_name = NULL;
+ g_autofree gchar *local_mod_date = NULL;
+ g_autofree gchar *target_file_path = NULL;
+ g_autofree gchar *tmp_file_tmpl = NULL;
+ g_autoptr(GFileIOStream) iostream = NULL;
+ g_autoptr(GFile) tmp_file = NULL;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ /* check age */
+ file_name = g_path_get_basename (url);
+ target_file_path = gs_external_appstream_utils_get_file_cache_path (file_name);
+ if (!gs_plugin_external_appstream_check (target_file_path, cache_age)) {
+ g_debug ("skipping updating external appstream file %s: "
+ "cache age is older than file",
+ target_file_path);
+ return TRUE;
+ }
+
+ msg = soup_message_new (SOUP_METHOD_GET, url);
+
+ /* Set the If-Modified-Since header if the target file exists */
+ local_mod_date = gs_plugin_external_appstream_get_modification_date (target_file_path);
+ if (local_mod_date != NULL) {
+ g_debug ("Requesting contents of %s if modified since %s",
+ url, local_mod_date);
+ soup_message_headers_append (msg->request_headers,
+ "If-Modified-Since",
+ local_mod_date);
+ }
+
+ /* get the data */
+ soup_session = gs_plugin_get_soup_session (plugin);
+ status_code = soup_session_send_message (soup_session, msg);
+ if (status_code != SOUP_STATUS_OK) {
+ if (status_code == SOUP_STATUS_NOT_MODIFIED) {
+ g_debug ("Not updating %s has not modified since %s",
+ target_file_path, local_mod_date);
+ return TRUE;
+ }
+
+ g_set_error (error, GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "Failed to download appstream file %s: %s",
+ url, soup_status_get_phrase (status_code));
+ return FALSE;
+ }
+
+ /* write the download contents into a file that will be copied into
+ * the system */
+ tmp_file_path = gs_utils_get_cache_filename ("external-appstream",
+ file_name,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (tmp_file_path == NULL)
+ return FALSE;
+
+ tmp_file = g_file_new_for_path (tmp_file_path);
+
+ /* ensure the file doesn't exist */
+ if (g_file_query_exists (tmp_file, cancellable) &&
+ !g_file_delete (tmp_file, cancellable, error))
+ return FALSE;
+
+ iostream = g_file_create_readwrite (tmp_file, G_FILE_CREATE_NONE,
+ cancellable, error);
+
+ if (iostream == NULL)
+ return FALSE;
+
+ g_debug ("Downloaded appstream file %s", tmp_file_path);
+
+ /* write to file */
+ outstream = g_io_stream_get_output_stream (G_IO_STREAM (iostream));
+ file_written = g_output_stream_write_all (outstream,
+ msg->response_body->data,
+ msg->response_body->length,
+ NULL, cancellable, error);
+
+ /* close the file */
+ g_output_stream_close (outstream, cancellable, NULL);
+
+ /* install file systemwide */
+ if (file_written) {
+ if (gs_plugin_external_appstream_install (tmp_file_path,
+ cancellable,
+ error)) {
+ g_debug ("Installed appstream file %s", tmp_file_path);
+ } else {
+ file_written = FALSE;
+ }
+ }
+
+ /* clean up the temporary file */
+ g_file_delete (tmp_file, cancellable, NULL);
+ return file_written;
+}
+
+static gboolean
+gs_plugin_external_appstream_refresh_user (GsPlugin *plugin,
+ const gchar *url,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint file_age;
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *fullpath = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
+
+ /* check age */
+ basename = g_path_get_basename (url);
+ fullpath = g_build_filename (g_get_user_data_dir (),
+ "app-info",
+ "xmls",
+ basename,
+ NULL);
+ file = g_file_new_for_path (fullpath);
+ file_age = gs_utils_get_file_age (file);
+ if (file_age < cache_age) {
+ g_debug ("skipping %s: cache age is older than file", fullpath);
+ return TRUE;
+ }
+
+ /* download file */
+ gs_app_set_summary_missing (app_dl,
+ /* TRANSLATORS: status text when downloading */
+ _("Downloading extra metadata files…"));
+ return gs_plugin_download_file (plugin, app_dl, url, fullpath,
+ cancellable, error);
+}
+
+static gboolean
+gs_plugin_external_appstream_refresh_url (GsPlugin *plugin,
+ const gchar *url,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (g_settings_get_strv (priv->settings, "external-appstream-urls")) {
+ return gs_plugin_external_appstream_refresh_sys (plugin, url,
+ cache_age,
+ cancellable,
+ error);
+ }
+ return gs_plugin_external_appstream_refresh_user (plugin, url, cache_age,
+ cancellable, error);
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_auto(GStrv) appstream_urls = NULL;
+
+ appstream_urls = g_settings_get_strv (priv->settings,
+ "external-appstream-urls");
+ for (guint i = 0; appstream_urls[i] != NULL; ++i) {
+ g_autoptr(GError) error_local = NULL;
+ if (!g_str_has_prefix (appstream_urls[i], "https")) {
+ g_warning ("Not considering %s as an external "
+ "appstream source: please use an https URL",
+ appstream_urls[i]);
+ continue;
+ }
+ if (!gs_plugin_external_appstream_refresh_url (plugin,
+ appstream_urls[i],
+ cache_age,
+ cancellable,
+ &error_local)) {
+ g_warning ("Failed to update external appstream file: %s",
+ error_local->message);
+ }
+ }
+
+ return TRUE;
+}
diff --git a/plugins/external-appstream/meson.build b/plugins/external-appstream/meson.build
new file mode 100644
index 0000000..2252c7d
--- /dev/null
+++ b/plugins/external-appstream/meson.build
@@ -0,0 +1,38 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginExternalAppstream"']
+
+executable(
+ 'gnome-software-install-appstream',
+ sources : [
+ 'gs-external-appstream-utils.c',
+ 'gs-install-appstream.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ ],
+ dependencies : [
+ gio_unix,
+ libxmlb,
+ ],
+ c_args : cargs,
+ install : true,
+ install_dir : get_option('libexecdir')
+)
+
+shared_module(
+ 'gs_plugin_external-appstream',
+ sources : [
+ 'gs-external-appstream-utils.c',
+ 'gs-plugin-external-appstream.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [gio_unix, appstream_glib, libsoup, plugin_libs],
+ link_with : [
+ libgnomesoftware
+ ]
+)
diff --git a/plugins/fedora-langpacks/gs-plugin-fedora-langpacks.c b/plugins/fedora-langpacks/gs-plugin-fedora-langpacks.c
new file mode 100644
index 0000000..ea673b1
--- /dev/null
+++ b/plugins/fedora-langpacks/gs-plugin-fedora-langpacks.c
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2019 Sundeep Anand <suanand@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * This plugin does following..
+ * 1. locates the active locale, say, xx
+ * 2. identifies related langpacks-xx
+ * 3. tries to add langpack-xx in app list
+ * 4. logs install information; not to try again
+ */
+
+#include <gnome-software.h>
+
+struct GsPluginData {
+ GHashTable *locale_langpack_map;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ /* this plugin should be fedora specific */
+ if (!gs_plugin_check_distro_id (plugin, "fedora")) {
+ gs_plugin_set_enabled (plugin, FALSE);
+ return;
+ }
+
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+
+ /*
+ * A few language code may have more than one language packs.
+ * Example: en {en_GB}, pt {pt_BR}, zh {zh_CN, zh_TW}
+ */
+ priv->locale_langpack_map = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (priv->locale_langpack_map, "en_GB", "langpacks-en_GB");
+ g_hash_table_insert (priv->locale_langpack_map, "pt_BR", "langpacks-pt_BR");
+ g_hash_table_insert (priv->locale_langpack_map, "zh_CN", "langpacks-zh_CN");
+ g_hash_table_insert (priv->locale_langpack_map, "zh_TW", "langpacks-zh_TW");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (priv->locale_langpack_map != NULL)
+ g_hash_table_unref (priv->locale_langpack_map);
+}
+
+gboolean
+gs_plugin_add_langpacks (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *locale,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *language_code;
+ g_autofree gchar *cachefn = NULL;
+ g_autofree gchar *langpack_pkgname = NULL;
+ g_auto(GStrv) language_region = NULL;
+
+ if (g_strrstr (locale, "_") != NULL &&
+ !g_hash_table_lookup (priv->locale_langpack_map, locale)) {
+ /*
+ * language_code should be the langpack_source_id
+ * if input language_code is a locale and it doesn't
+ * not found in locale_langpack_map
+ */
+ language_region = g_strsplit (locale, "_", 2);
+ language_code = language_region[0];
+ } else {
+ language_code = locale;
+ }
+
+ /* per-user cache */
+ langpack_pkgname = g_strconcat ("langpacks-", language_code, NULL);
+ cachefn = gs_utils_get_cache_filename ("langpacks", langpack_pkgname,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (cachefn == NULL)
+ return FALSE;
+ if (!g_file_test (cachefn, G_FILE_TEST_EXISTS)) {
+ g_autoptr(GsApp) app = gs_app_new (NULL);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator", gs_plugin_get_name (plugin));
+ gs_app_set_kind (app, AS_APP_KIND_LOCALIZATION);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_add_source (app, langpack_pkgname);
+ gs_app_list_add (list, app);
+
+ /* ensure we do not keep trying to install the langpack */
+ if (!g_file_set_contents (cachefn, language_code, -1, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/fedora-langpacks/gs-self-test.c b/plugins/fedora-langpacks/gs-self-test.c
new file mode 100644
index 0000000..ac8c176
--- /dev/null
+++ b/plugins/fedora-langpacks/gs-self-test.c
@@ -0,0 +1,88 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gstdio.h>
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static void
+gs_plugins_fedora_langpacks_func (GsPluginLoader *plugin_loader)
+{
+ g_autofree gchar *cachefn = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* start with a clean slate */
+ cachefn = gs_utils_get_cache_filename ("langpacks", "langpacks-ja",
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ &error);
+ g_assert_no_error (error);
+ g_unlink (cachefn);
+
+ /* get langpacks result based on locale */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_LANGPACKS,
+ "search", "ja_JP",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_nonnull (list);
+ g_assert_no_error (error);
+
+ /* check if we have just one app in the list */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+
+ /* check app's source and kind */
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_source_default (app), ==, "langpacks-ja");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_LOCALIZATION);
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "fedora-langpacks",
+ NULL
+ };
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/fedora-langpacks",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_fedora_langpacks_func);
+ return g_test_run ();
+}
diff --git a/plugins/fedora-langpacks/meson.build b/plugins/fedora-langpacks/meson.build
new file mode 100644
index 0000000..cdc3757
--- /dev/null
+++ b/plugins/fedora-langpacks/meson.build
@@ -0,0 +1,40 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFedoraLangpacks"']
+
+shared_module(
+ 'gs_plugin_fedora-langpacks',
+ sources : 'gs-plugin-fedora-langpacks.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+ e = executable(
+ 'gs-self-test-fedora-langpacks',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-fedora-langpacks', e, suite: ['plugins', 'fedora-langpacks'], env: test_env)
+endif
diff --git a/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c b/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c
new file mode 100644
index 0000000..a103f7f
--- /dev/null
+++ b/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c
@@ -0,0 +1,569 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016-2018 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <json-glib/json-glib.h>
+#include <gnome-software.h>
+
+#define FEDORA_PKGDB_COLLECTIONS_API_URI "https://admin.fedoraproject.org/pkgdb/api/collections/"
+
+struct GsPluginData {
+ gchar *cachefn;
+ GFileMonitor *cachefn_monitor;
+ gchar *os_name;
+ guint64 os_version;
+ GsApp *cached_origin;
+ GSettings *settings;
+ gboolean is_valid;
+ GPtrArray *distros;
+ GMutex mutex;
+};
+
+typedef enum {
+ PKGDB_ITEM_STATUS_ACTIVE,
+ PKGDB_ITEM_STATUS_DEVEL,
+ PKGDB_ITEM_STATUS_EOL,
+ PKGDB_ITEM_STATUS_LAST
+} PkgdbItemStatus;
+
+typedef struct {
+ gchar *name;
+ PkgdbItemStatus status;
+ guint version;
+} PkgdbItem;
+
+static void
+_pkgdb_item_free (PkgdbItem *item)
+{
+ g_free (item->name);
+ g_slice_free (PkgdbItem, item);
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->mutex);
+
+ /* check that we are running on Fedora */
+ if (!gs_plugin_check_distro_id (plugin, "fedora")) {
+ gs_plugin_set_enabled (plugin, FALSE);
+ g_debug ("disabling '%s' as we're not Fedora", gs_plugin_get_name (plugin));
+ return;
+ }
+ priv->distros = g_ptr_array_new_with_free_func ((GDestroyNotify) _pkgdb_item_free);
+ priv->settings = g_settings_new ("org.gnome.software");
+
+ /* require the GnomeSoftware::CpeName metadata */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "os-release");
+
+ /* old name */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "fedora-distro-upgrades");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (priv->cachefn_monitor != NULL)
+ g_object_unref (priv->cachefn_monitor);
+ if (priv->cached_origin != NULL)
+ g_object_unref (priv->cached_origin);
+ if (priv->settings != NULL)
+ g_object_unref (priv->settings);
+ if (priv->distros != NULL)
+ g_ptr_array_unref (priv->distros);
+ g_free (priv->os_name);
+ g_free (priv->cachefn);
+ g_mutex_clear (&priv->mutex);
+}
+
+static void
+_file_changed_cb (GFileMonitor *monitor,
+ GFile *file, GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ g_debug ("cache file changed, so reloading upgrades list");
+ gs_plugin_updates_changed (plugin);
+ priv->is_valid = FALSE;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *verstr = NULL;
+ gchar *endptr = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ /* get the file to cache */
+ priv->cachefn = gs_utils_get_cache_filename ("fedora-pkgdb-collections",
+ "fedora.json",
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (priv->cachefn == NULL)
+ return FALSE;
+
+ /* watch this in case it is changed by the user */
+ file = g_file_new_for_path (priv->cachefn);
+ priv->cachefn_monitor = g_file_monitor (file,
+ G_FILE_MONITOR_NONE,
+ cancellable,
+ error);
+ if (priv->cachefn_monitor == NULL)
+ return FALSE;
+ g_signal_connect (priv->cachefn_monitor, "changed",
+ G_CALLBACK (_file_changed_cb), plugin);
+
+ /* read os-release for the current versions */
+ os_release = gs_os_release_new (error);
+ if (os_release == NULL)
+ return FALSE;
+ priv->os_name = g_strdup (gs_os_release_get_name (os_release));
+ if (priv->os_name == NULL)
+ return FALSE;
+ verstr = gs_os_release_get_version_id (os_release);
+ if (verstr == NULL)
+ return FALSE;
+
+ /* parse the version */
+ priv->os_version = g_ascii_strtoull (verstr, &endptr, 10);
+ if (endptr == verstr || priv->os_version > G_MAXUINT) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "Failed parse VERSION_ID: %s", verstr);
+ return FALSE;
+ }
+
+ /* add source */
+ priv->cached_origin = gs_app_new (gs_plugin_get_name (plugin));
+ gs_app_set_kind (priv->cached_origin, AS_APP_KIND_SOURCE);
+ gs_app_set_origin_hostname (priv->cached_origin,
+ FEDORA_PKGDB_COLLECTIONS_API_URI);
+
+ /* add the source to the plugin cache which allows us to match the
+ * unique ID to a GsApp when creating an event */
+ gs_plugin_cache_add (plugin,
+ gs_app_get_unique_id (priv->cached_origin),
+ priv->cached_origin);
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+_refresh_cache (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
+
+ /* check cache age */
+ if (cache_age > 0) {
+ g_autoptr(GFile) file = g_file_new_for_path (priv->cachefn);
+ guint tmp = gs_utils_get_file_age (file);
+ if (tmp < cache_age) {
+ g_debug ("%s is only %u seconds old",
+ priv->cachefn, tmp);
+ return TRUE;
+ }
+ }
+
+ /* download new file */
+ gs_app_set_summary_missing (app_dl,
+ /* TRANSLATORS: status text when downloading */
+ _("Downloading upgrade information…"));
+ if (!gs_plugin_download_file (plugin, app_dl,
+ FEDORA_PKGDB_COLLECTIONS_API_URI,
+ priv->cachefn,
+ cancellable,
+ error)) {
+ gs_utils_error_add_origin_id (error, priv->cached_origin);
+ return FALSE;
+ }
+
+ /* success */
+ priv->is_valid = FALSE;
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+ return _refresh_cache (plugin, cache_age, cancellable, error);
+}
+
+static gchar *
+_get_upgrade_css_background (guint version)
+{
+ g_autofree gchar *filename1 = NULL;
+ g_autofree gchar *filename2 = NULL;
+
+ filename1 = g_strdup_printf ("/usr/share/backgrounds/f%u/default/standard/f%u.png", version, version);
+ if (g_file_test (filename1, G_FILE_TEST_EXISTS))
+ return g_strdup_printf ("url('%s')", filename1);
+
+ filename2 = g_strdup_printf ("/usr/share/gnome-software/backgrounds/f%u.png", version);
+ if (g_file_test (filename2, G_FILE_TEST_EXISTS))
+ return g_strdup_printf ("url('%s')", filename2);
+
+ return NULL;
+}
+
+static gint
+_sort_items_cb (gconstpointer a, gconstpointer b)
+{
+ PkgdbItem *item_a = *((PkgdbItem **) a);
+ PkgdbItem *item_b = *((PkgdbItem **) b);
+
+ if (item_a->version > item_b->version)
+ return 1;
+ if (item_a->version < item_b->version)
+ return -1;
+ return 0;
+}
+
+static GsApp *
+_create_upgrade_from_info (GsPlugin *plugin, PkgdbItem *item)
+{
+ GsApp *app;
+ g_autofree gchar *app_id = NULL;
+ g_autofree gchar *app_version = NULL;
+ g_autofree gchar *background = NULL;
+ g_autofree gchar *cache_key = NULL;
+ g_autofree gchar *css = NULL;
+ g_autofree gchar *url = NULL;
+ g_autoptr(AsIcon) ic = NULL;
+
+ /* search in the cache */
+ cache_key = g_strdup_printf ("release-%u", item->version);
+ app = gs_plugin_cache_lookup (plugin, cache_key);
+ if (app != NULL)
+ return app;
+
+ app_id = g_strdup_printf ("org.fedoraproject.Fedora-%u", item->version);
+ app_version = g_strdup_printf ("%u", item->version);
+
+ /* icon from disk */
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_LOCAL);
+ as_icon_set_filename (ic, "/usr/share/pixmaps/fedora-logo-sprite.png");
+
+ /* create */
+ app = gs_app_new (app_id);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, item->name);
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST,
+ /* TRANSLATORS: this is a title for Fedora distro upgrades */
+ _("Upgrade for the latest features, performance and stability improvements."));
+ gs_app_set_version (app, app_version);
+ gs_app_set_size_installed (app, 1024 * 1024 * 1024); /* estimate */
+ gs_app_set_size_download (app, 256 * 1024 * 1024); /* estimate */
+ gs_app_set_license (app, GS_APP_QUALITY_LOWEST, "LicenseRef-free");
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_REVIEWABLE);
+ gs_app_add_icon (app, ic);
+
+ /* show a Fedora magazine article for the release */
+ url = g_strdup_printf ("https://fedoramagazine.org/whats-new-fedora-%u-workstation",
+ item->version);
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, url);
+
+ /* use a fancy background if possible */
+ background = _get_upgrade_css_background (item->version);
+ if (background != NULL) {
+ css = g_strdup_printf ("background: %s;"
+ "background-position: top;"
+ "background-size: cover;"
+ "color: white; text-shadow: 0 2px 2px rgba(0,0,0,0.5);",
+ background);
+ gs_app_set_metadata (app, "GnomeSoftware::UpgradeBanner-css", css);
+ }
+
+ /* save in the cache */
+ gs_plugin_cache_add (plugin, cache_key, app);
+
+ /* success */
+ return app;
+}
+
+static gboolean
+_is_valid_upgrade (GsPlugin *plugin, PkgdbItem *item)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* only interested in upgrades to the same distro */
+ if (g_strcmp0 (item->name, priv->os_name) != 0)
+ return FALSE;
+
+ /* only interested in newer versions, but not more than N+2 */
+ if (item->version <= priv->os_version ||
+ item->version > priv->os_version + 2)
+ return FALSE;
+
+ /* only interested in non-devel distros */
+ if (!g_settings_get_boolean (priv->settings, "show-upgrade-prerelease")) {
+ if (item->status == PKGDB_ITEM_STATUS_DEVEL)
+ return FALSE;
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+_ensure_cache (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ JsonArray *collections;
+ JsonObject *root;
+#if !JSON_CHECK_VERSION(1, 6, 0)
+ gsize len;
+ g_autofree gchar *data = NULL;
+#endif /* json-glib < 1.6.0 */
+ g_autoptr(JsonParser) parser = NULL;
+
+ /* already done */
+ if (priv->is_valid)
+ return TRUE;
+
+ /* just ensure there is any data, no matter how old */
+ if (!_refresh_cache (plugin, G_MAXUINT, cancellable, error))
+ return FALSE;
+
+#if JSON_CHECK_VERSION(1, 6, 0)
+ parser = json_parser_new_immutable ();
+ if (!json_parser_load_from_mapped_file (parser, priv->cachefn, error))
+ return FALSE;
+#else /* if json-glib < 1.6.0 */
+ /* get cached file */
+ if (!g_file_get_contents (priv->cachefn, &data, &len, error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+
+ /* parse data */
+ parser = json_parser_new ();
+ if (!json_parser_load_from_data (parser, data, len, error))
+ return FALSE;
+#endif /* json-glib < 1.6.0 */
+
+ root = json_node_get_object (json_parser_get_root (parser));
+ if (root == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no root object");
+ return FALSE;
+ }
+
+ collections = json_object_get_array_member (root, "collections");
+ if (collections == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no collections object");
+ return FALSE;
+ }
+
+ g_ptr_array_set_size (priv->distros, 0);
+ for (guint i = 0; i < json_array_get_length (collections); i++) {
+ PkgdbItem *item;
+ JsonObject *collection;
+ PkgdbItemStatus status;
+ const gchar *name;
+ const gchar *status_str;
+ const gchar *version_str;
+ gchar *endptr = NULL;
+ guint64 version;
+
+ collection = json_array_get_object_element (collections, i);
+ if (collection == NULL)
+ continue;
+
+ name = json_object_get_string_member (collection, "name");
+ if (name == NULL)
+ continue;
+
+ status_str = json_object_get_string_member (collection, "status");
+ if (status_str == NULL)
+ continue;
+
+ if (g_strcmp0 (status_str, "Active") == 0)
+ status = PKGDB_ITEM_STATUS_ACTIVE;
+ else if (g_strcmp0 (status_str, "Under Development") == 0)
+ status = PKGDB_ITEM_STATUS_DEVEL;
+ else if (g_strcmp0 (status_str, "EOL") == 0)
+ status = PKGDB_ITEM_STATUS_EOL;
+ else
+ continue;
+
+ version_str = json_object_get_string_member (collection, "version");
+ if (version_str == NULL)
+ continue;
+
+ version = g_ascii_strtoull (version_str, &endptr, 10);
+ if (endptr == version_str || version > G_MAXUINT)
+ continue;
+
+ /* add item */
+ item = g_slice_new0 (PkgdbItem);
+ item->name = g_strdup (name);
+ item->status = status;
+ item->version = (guint) version;
+ g_ptr_array_add (priv->distros, item);
+ }
+
+ /* ensure in correct order */
+ g_ptr_array_sort (priv->distros, _sort_items_cb);
+
+ /* success */
+ priv->is_valid = TRUE;
+ return TRUE;
+}
+
+static PkgdbItem *
+_get_item_by_cpe_name (GsPlugin *plugin, const gchar *cpe_name)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ guint64 version;
+ g_auto(GStrv) split = NULL;
+
+ /* split up 'cpe:/o:fedoraproject:fedora:26' to sections */
+ split = g_strsplit (cpe_name, ":", -1);
+ if (g_strv_length (split) < 5) {
+ g_warning ("CPE invalid format: %s", cpe_name);
+ return NULL;
+ }
+
+ /* find the correct collection */
+ version = g_ascii_strtoull (split[4], NULL, 10);
+ if (version == 0) {
+ g_warning ("failed to parse CPE version: %s", split[4]);
+ return NULL;
+ }
+ for (guint i = 0; i < priv->distros->len; i++) {
+ PkgdbItem *item = g_ptr_array_index (priv->distros, i);
+ if (g_ascii_strcasecmp (item->name, split[3]) == 0 &&
+ item->version == version)
+ return item;
+ }
+ return NULL;
+}
+
+gboolean
+gs_plugin_add_distro_upgrades (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ /* ensure valid data is loaded */
+ if (!_ensure_cache (plugin, cancellable, error))
+ return FALSE;
+
+ /* are any distros upgradable */
+ for (guint i = 0; i < priv->distros->len; i++) {
+ PkgdbItem *item = g_ptr_array_index (priv->distros, i);
+ if (_is_valid_upgrade (plugin, item)) {
+ g_autoptr(GsApp) app = NULL;
+ app = _create_upgrade_from_info (plugin, item);
+ gs_app_list_add (list, app);
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+refine_app_locked (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ PkgdbItem *item;
+ const gchar *cpe_name;
+
+ /* not for us */
+ if (gs_app_get_kind (app) != AS_APP_KIND_OS_UPGRADE)
+ return TRUE;
+
+ /* not enough metadata */
+ cpe_name = gs_app_get_metadata_item (app, "GnomeSoftware::CpeName");
+ if (cpe_name == NULL)
+ return TRUE;
+
+ /* find item */
+ item = _get_item_by_cpe_name (plugin, cpe_name);
+ if (item == NULL) {
+ g_warning ("did not find %s", cpe_name);
+ return TRUE;
+ }
+
+ /* fix the state */
+ switch (item->status) {
+ case PKGDB_ITEM_STATUS_ACTIVE:
+ case PKGDB_ITEM_STATUS_DEVEL:
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ break;
+ case PKGDB_ITEM_STATUS_EOL:
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ /* ensure valid data is loaded */
+ if (!_ensure_cache (plugin, cancellable, error))
+ return FALSE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app_locked (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/fedora-pkgdb-collections/meson.build b/plugins/fedora-pkgdb-collections/meson.build
new file mode 100644
index 0000000..ae093ba
--- /dev/null
+++ b/plugins/fedora-pkgdb-collections/meson.build
@@ -0,0 +1,17 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFedoraPkgdbCollections"']
+
+shared_module(
+ 'gs_plugin_fedora-pkgdb-collections',
+ sources : 'gs-plugin-fedora-pkgdb-collections.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
diff --git a/plugins/flatpak/gs-appstream.c b/plugins/flatpak/gs-appstream.c
new file mode 120000
index 0000000..96326ab
--- /dev/null
+++ b/plugins/flatpak/gs-appstream.c
@@ -0,0 +1 @@
+../core/gs-appstream.c \ No newline at end of file
diff --git a/plugins/flatpak/gs-appstream.h b/plugins/flatpak/gs-appstream.h
new file mode 120000
index 0000000..4eabcb3
--- /dev/null
+++ b/plugins/flatpak/gs-appstream.h
@@ -0,0 +1 @@
+../core/gs-appstream.h \ No newline at end of file
diff --git a/plugins/flatpak/gs-flatpak-app.c b/plugins/flatpak/gs-flatpak-app.c
new file mode 100644
index 0000000..cf98248
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak-app.c
@@ -0,0 +1,178 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gs-flatpak-app.h"
+
+const gchar *
+gs_flatpak_app_get_ref_name (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::RefName");
+}
+
+const gchar *
+gs_flatpak_app_get_ref_arch (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::RefArch");
+}
+
+const gchar *
+gs_flatpak_app_get_commit (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::Commit");
+}
+
+GsFlatpakAppFileKind
+gs_flatpak_app_get_file_kind (GsApp *app)
+{
+ GVariant *tmp = gs_app_get_metadata_variant (app, "flatpak::FileKind");
+ if (tmp == NULL)
+ return GS_FLATPAK_APP_FILE_KIND_UNKNOWN;
+ return g_variant_get_uint32 (tmp);
+}
+
+const gchar *
+gs_flatpak_app_get_runtime_url (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::RuntimeUrl");
+}
+
+FlatpakRefKind
+gs_flatpak_app_get_ref_kind (GsApp *app)
+{
+ GVariant *tmp = gs_app_get_metadata_variant (app, "flatpak::RefKind");
+ if (tmp == NULL)
+ return FLATPAK_REF_KIND_APP;
+ return g_variant_get_uint32 (tmp);
+}
+
+const gchar *
+gs_flatpak_app_get_ref_kind_as_str (GsApp *app)
+{
+ FlatpakRefKind ref_kind = gs_flatpak_app_get_ref_kind (app);
+ if (ref_kind == FLATPAK_REF_KIND_APP)
+ return "app";
+ if (ref_kind == FLATPAK_REF_KIND_RUNTIME)
+ return "runtime";
+ return NULL;
+}
+
+const gchar *
+gs_flatpak_app_get_object_id (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::ObjectID");
+}
+
+const gchar *
+gs_flatpak_app_get_repo_gpgkey (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::RepoGpgKey");
+}
+
+const gchar *
+gs_flatpak_app_get_repo_url (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::RepoUrl");
+}
+
+gchar *
+gs_flatpak_app_get_ref_display (GsApp *app)
+{
+ const gchar *ref_kind_as_str = gs_flatpak_app_get_ref_kind_as_str (app);
+ const gchar *ref_name = gs_flatpak_app_get_ref_name (app);
+ const gchar *ref_arch = gs_flatpak_app_get_ref_arch (app);
+ const gchar *ref_branch = gs_app_get_branch (app);
+
+ g_return_val_if_fail (ref_kind_as_str != NULL, NULL);
+ g_return_val_if_fail (ref_name != NULL, NULL);
+ g_return_val_if_fail (ref_arch != NULL, NULL);
+ g_return_val_if_fail (ref_branch != NULL, NULL);
+
+ return g_strdup_printf ("%s/%s/%s/%s",
+ ref_kind_as_str,
+ ref_name,
+ ref_arch,
+ ref_branch);
+}
+
+void
+gs_flatpak_app_set_ref_name (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::RefName", val);
+}
+
+void
+gs_flatpak_app_set_ref_arch (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::RefArch", val);
+}
+
+void
+gs_flatpak_app_set_commit (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::Commit", val);
+}
+
+void
+gs_flatpak_app_set_file_kind (GsApp *app, GsFlatpakAppFileKind file_kind)
+{
+ g_autoptr(GVariant) tmp = g_variant_new_uint32 (file_kind);
+ gs_app_set_metadata_variant (app, "flatpak::FileKind", tmp);
+}
+
+void
+gs_flatpak_app_set_runtime_url (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::RuntimeUrl", val);
+}
+
+void
+gs_flatpak_app_set_ref_kind (GsApp *app, FlatpakRefKind ref_kind)
+{
+ g_autoptr(GVariant) tmp = g_variant_new_uint32 (ref_kind);
+ gs_app_set_metadata_variant (app, "flatpak::RefKind", tmp);
+}
+
+void
+gs_flatpak_app_set_object_id (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::ObjectID", val);
+}
+
+void
+gs_flatpak_app_set_repo_gpgkey (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::RepoGpgKey", val);
+}
+
+void
+gs_flatpak_app_set_repo_url (GsApp *app, const gchar *val)
+{
+ gs_app_set_metadata (app, "flatpak::RepoUrl", val);
+}
+
+GsApp *
+gs_flatpak_app_new (const gchar *id)
+{
+ return GS_APP (g_object_new (GS_TYPE_APP, "id", id, NULL));
+}
+
+void
+gs_flatpak_app_set_main_app_ref_name (GsApp *app, const gchar *main_app_ref)
+{
+ gs_app_set_metadata (app, "flatpak::mainApp", main_app_ref);
+}
+
+const gchar *
+gs_flatpak_app_get_main_app_ref_name (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "flatpak::mainApp");
+}
diff --git a/plugins/flatpak/gs-flatpak-app.h b/plugins/flatpak/gs-flatpak-app.h
new file mode 100644
index 0000000..ab6c10a
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak-app.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gnome-software.h>
+#include <flatpak.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ GS_FLATPAK_APP_FILE_KIND_UNKNOWN,
+ GS_FLATPAK_APP_FILE_KIND_REPO,
+ GS_FLATPAK_APP_FILE_KIND_REF,
+ GS_FLATPAK_APP_FILE_KIND_BUNDLE,
+ GS_FLATPAK_APP_FILE_KIND_LAST,
+} GsFlatpakAppFileKind;
+
+GsApp *gs_flatpak_app_new (const gchar *id);
+
+const gchar *gs_flatpak_app_get_ref_name (GsApp *app);
+const gchar *gs_flatpak_app_get_ref_arch (GsApp *app);
+FlatpakRefKind gs_flatpak_app_get_ref_kind (GsApp *app);
+const gchar *gs_flatpak_app_get_ref_kind_as_str (GsApp *app);
+gchar *gs_flatpak_app_get_ref_display (GsApp *app);
+
+const gchar *gs_flatpak_app_get_commit (GsApp *app);
+const gchar *gs_flatpak_app_get_object_id (GsApp *app);
+const gchar *gs_flatpak_app_get_repo_gpgkey (GsApp *app);
+const gchar *gs_flatpak_app_get_repo_url (GsApp *app);
+GsFlatpakAppFileKind gs_flatpak_app_get_file_kind (GsApp *app);
+const gchar *gs_flatpak_app_get_runtime_url (GsApp *app);
+
+void gs_flatpak_app_set_ref_name (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_ref_arch (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_ref_kind (GsApp *app,
+ FlatpakRefKind ref_kind);
+
+void gs_flatpak_app_set_commit (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_object_id (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_repo_gpgkey (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_repo_url (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_file_kind (GsApp *app,
+ GsFlatpakAppFileKind file_kind);
+void gs_flatpak_app_set_runtime_url (GsApp *app,
+ const gchar *val);
+void gs_flatpak_app_set_main_app_ref_name (GsApp *app,
+ const gchar *main_app_ref);
+const gchar *gs_flatpak_app_get_main_app_ref_name (GsApp *app);
+
+G_END_DECLS
diff --git a/plugins/flatpak/gs-flatpak-transaction.c b/plugins/flatpak/gs-flatpak-transaction.c
new file mode 100644
index 0000000..ffff22e
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak-transaction.c
@@ -0,0 +1,804 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include "gs-flatpak-app.h"
+#include "gs-flatpak-transaction.h"
+
+struct _GsFlatpakTransaction {
+ FlatpakTransaction parent_instance;
+ GHashTable *refhash; /* ref:GsApp */
+ GError *first_operation_error;
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+ gboolean no_deploy;
+#endif
+};
+
+
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+typedef enum {
+ PROP_NO_DEPLOY = 1,
+} GsFlatpakTransactionProperty;
+#endif
+
+enum {
+ SIGNAL_REF_TO_APP,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (GsFlatpakTransaction, gs_flatpak_transaction, FLATPAK_TYPE_TRANSACTION)
+
+static void
+gs_flatpak_transaction_finalize (GObject *object)
+{
+ GsFlatpakTransaction *self;
+ g_return_if_fail (GS_IS_FLATPAK_TRANSACTION (object));
+ self = GS_FLATPAK_TRANSACTION (object);
+
+ g_assert (self != NULL);
+ g_hash_table_unref (self->refhash);
+ if (self->first_operation_error != NULL)
+ g_error_free (self->first_operation_error);
+
+ G_OBJECT_CLASS (gs_flatpak_transaction_parent_class)->finalize (object);
+}
+
+
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+void
+gs_flatpak_transaction_set_no_deploy (FlatpakTransaction *transaction, gboolean no_deploy)
+{
+ GsFlatpakTransaction *self;
+
+ g_return_if_fail (GS_IS_FLATPAK_TRANSACTION (transaction));
+
+ self = GS_FLATPAK_TRANSACTION (transaction);
+ if (self->no_deploy == no_deploy)
+ return;
+ self->no_deploy = no_deploy;
+ flatpak_transaction_set_no_deploy (transaction, no_deploy);
+
+ g_object_notify (G_OBJECT (self), "no-deploy");
+}
+#endif
+
+GsApp *
+gs_flatpak_transaction_get_app_by_ref (FlatpakTransaction *transaction, const gchar *ref)
+{
+ GsFlatpakTransaction *self = GS_FLATPAK_TRANSACTION (transaction);
+ return g_hash_table_lookup (self->refhash, ref);
+}
+
+static void
+gs_flatpak_transaction_add_app_internal (GsFlatpakTransaction *self, GsApp *app)
+{
+ g_autofree gchar *ref = gs_flatpak_app_get_ref_display (app);
+ g_hash_table_insert (self->refhash, g_steal_pointer (&ref), g_object_ref (app));
+}
+
+void
+gs_flatpak_transaction_add_app (FlatpakTransaction *transaction, GsApp *app)
+{
+ GsFlatpakTransaction *self = GS_FLATPAK_TRANSACTION (transaction);
+ gs_flatpak_transaction_add_app_internal (self, app);
+ if (gs_app_get_runtime (app) != NULL)
+ gs_flatpak_transaction_add_app_internal (self, gs_app_get_runtime (app));
+}
+
+static GsApp *
+_ref_to_app (GsFlatpakTransaction *self, const gchar *ref)
+{
+ GsApp *app = g_hash_table_lookup (self->refhash, ref);
+ if (app != NULL)
+ return g_object_ref (app);
+ g_signal_emit (self, signals[SIGNAL_REF_TO_APP], 0, ref, &app);
+ return app;
+}
+
+static void
+_transaction_operation_set_app (FlatpakTransactionOperation *op, GsApp *app)
+{
+ g_object_set_data_full (G_OBJECT (op), "GsApp",
+ g_object_ref (app), (GDestroyNotify) g_object_unref);
+}
+
+static GsApp *
+_transaction_operation_get_app (FlatpakTransactionOperation *op)
+{
+ return g_object_get_data (G_OBJECT (op), "GsApp");
+}
+
+gboolean
+gs_flatpak_transaction_run (FlatpakTransaction *transaction,
+ GCancellable *cancellable,
+ GError **error)
+
+{
+ GsFlatpakTransaction *self = GS_FLATPAK_TRANSACTION (transaction);
+ g_autoptr(GError) error_local = NULL;
+
+ if (!flatpak_transaction_run (transaction, cancellable, &error_local)) {
+ /* whole transaction failed; restore the state for all the apps involved */
+ g_autolist(GObject) ops = flatpak_transaction_get_operations (transaction);
+ for (GList *l = ops; l != NULL; l = l->next) {
+ FlatpakTransactionOperation *op = l->data;
+ const gchar *ref = flatpak_transaction_operation_get_ref (op);
+ g_autoptr(GsApp) app = _ref_to_app (self, ref);
+ if (app == NULL) {
+ g_warning ("failed to find app for %s", ref);
+ continue;
+ }
+ gs_app_set_state_recover (app);
+ }
+
+ if (self->first_operation_error != NULL) {
+ g_propagate_error (error, g_steal_pointer (&self->first_operation_error));
+ return FALSE;
+ } else {
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+_transaction_ready (FlatpakTransaction *transaction)
+{
+ GsFlatpakTransaction *self = GS_FLATPAK_TRANSACTION (transaction);
+ g_autolist(GObject) ops = NULL;
+
+ /* nothing to do */
+ ops = flatpak_transaction_get_operations (transaction);
+ if (ops == NULL)
+ return TRUE; // FIXME: error?
+ for (GList *l = ops; l != NULL; l = l->next) {
+ FlatpakTransactionOperation *op = l->data;
+ const gchar *ref = flatpak_transaction_operation_get_ref (op);
+ g_autoptr(GsApp) app = _ref_to_app (self, ref);
+ if (app != NULL) {
+ _transaction_operation_set_app (op, app);
+ /* if we're updating a component, then mark all the apps
+ * involved to ensure updating the button state */
+ if (flatpak_transaction_operation_get_operation_type (op) ==
+ FLATPAK_TRANSACTION_OPERATION_UPDATE)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ }
+
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+ /* Debug dump. */
+ {
+ GPtrArray *related_to_ops = flatpak_transaction_operation_get_related_to_ops (op);
+ g_autoptr(GString) debug_message = g_string_new ("");
+
+ g_string_append_printf (debug_message,
+ "%s: op %p, app %s (%p), download size %" G_GUINT64_FORMAT ", related-to:",
+ G_STRFUNC, op,
+ app ? gs_app_get_unique_id (app) : "?",
+ app,
+ flatpak_transaction_operation_get_download_size (op));
+ for (gsize i = 0; related_to_ops != NULL && i < related_to_ops->len; i++) {
+ FlatpakTransactionOperation *related_to_op = g_ptr_array_index (related_to_ops, i);
+ g_string_append_printf (debug_message,
+ "\n ├ %s (%p)", flatpak_transaction_operation_get_ref (related_to_op), related_to_op);
+ }
+ g_string_append (debug_message, "\n └ (end)");
+ g_debug ("%s", debug_message->str);
+ }
+#endif /* flatpak ≥ 1.7.3 */
+ }
+ return TRUE;
+}
+
+typedef struct
+{
+ GsFlatpakTransaction *transaction; /* (owned) */
+ FlatpakTransactionOperation *operation; /* (owned) */
+ GsApp *app; /* (owned) */
+} ProgressData;
+
+static void
+progress_data_free (ProgressData *data)
+{
+ g_clear_object (&data->operation);
+ g_clear_object (&data->app);
+ g_clear_object (&data->transaction);
+ g_free (data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (ProgressData, progress_data_free)
+
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+static gboolean
+op_is_related_to_op (FlatpakTransactionOperation *op,
+ FlatpakTransactionOperation *root_op)
+{
+ GPtrArray *related_to_ops; /* (element-type FlatpakTransactionOperation) */
+
+ if (op == root_op)
+ return TRUE;
+
+ related_to_ops = flatpak_transaction_operation_get_related_to_ops (op);
+ for (gsize i = 0; related_to_ops != NULL && i < related_to_ops->len; i++) {
+ FlatpakTransactionOperation *related_to_op = g_ptr_array_index (related_to_ops, i);
+ if (related_to_op == root_op || op_is_related_to_op (related_to_op, root_op))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static guint64
+saturated_uint64_add (guint64 a, guint64 b)
+{
+ return (a <= G_MAXUINT64 - b) ? a + b : G_MAXUINT64;
+}
+
+/*
+ * update_progress_for_op:
+ * @self: a #GsFlatpakTransaction
+ * @current_progress: progress reporting object
+ * @ops: results of calling flatpak_transaction_get_operations() on @self, for performance
+ * @current_op: the #FlatpakTransactionOperation which the @current_progress is
+ * for; this is the operation currently being run by libflatpak
+ * @root_op: the #FlatpakTransactionOperation at the root of the operation subtree
+ * to calculate progress for
+ *
+ * Calculate and update the #GsApp:progress for each app associated with
+ * @root_op in a flatpak transaction. This will include the #GsApp for the app
+ * being installed (for example), but also the #GsApps for all of its runtimes
+ * and locales, and any other dependencies of them.
+ *
+ * Each #GsApp:progress is calculated based on the sum of the progress of all
+ * the apps related to that one — so the progress for an app will factor in the
+ * progress for all its runtimes.
+ */
+static void
+update_progress_for_op (GsFlatpakTransaction *self,
+ FlatpakTransactionProgress *current_progress,
+ GList *ops,
+ FlatpakTransactionOperation *current_op,
+ FlatpakTransactionOperation *root_op)
+{
+ g_autoptr(GsApp) root_app = NULL;
+ guint64 related_prior_download_bytes = 0;
+ guint64 related_download_bytes = 0;
+ guint64 current_bytes_transferred = flatpak_transaction_progress_get_bytes_transferred (current_progress);
+ gboolean seen_current_op = FALSE, seen_root_op = FALSE;
+ gboolean root_op_skipped = flatpak_transaction_operation_get_is_skipped (root_op);
+ guint percent;
+
+ /* If @root_op is being skipped and its GsApp isn't being
+ * installed/removed, don't update the progress on it. It may be that
+ * @root_op is the runtime of an app and the app is the thing the
+ * transaction was created for.
+ */
+ if (root_op_skipped) {
+ /* _transaction_operation_set_app() is only called on non-skipped ops */
+ const gchar *ref = flatpak_transaction_operation_get_ref (root_op);
+ root_app = _ref_to_app (self, ref);
+ if (root_app == NULL) {
+ g_warning ("Couldn't find GsApp for transaction operation %s",
+ flatpak_transaction_operation_get_ref (root_op));
+ return;
+ }
+ if (gs_app_get_state (root_app) != AS_APP_STATE_INSTALLING &&
+ gs_app_get_state (root_app) != AS_APP_STATE_REMOVING)
+ return;
+ } else {
+ GsApp *unskipped_root_app = _transaction_operation_get_app (root_op);
+ if (unskipped_root_app == NULL) {
+ g_warning ("Couldn't find GsApp for transaction operation %s",
+ flatpak_transaction_operation_get_ref (root_op));
+ return;
+ }
+ root_app = g_object_ref (unskipped_root_app);
+ }
+
+ /* This relies on ops in a #FlatpakTransaction being run in the order
+ * they’re returned by flatpak_transaction_get_operations(), which is true. */
+ for (GList *l = ops; l != NULL; l = l->next) {
+ FlatpakTransactionOperation *op = FLATPAK_TRANSACTION_OPERATION (l->data);
+ guint64 op_download_size = flatpak_transaction_operation_get_download_size (op);
+
+ if (op == current_op)
+ seen_current_op = TRUE;
+ if (op == root_op)
+ seen_root_op = TRUE;
+
+ /* Currently libflatpak doesn't return skipped ops in
+ * flatpak_transaction_get_operations(), but check just in case.
+ */
+ if (op == root_op && root_op_skipped)
+ continue;
+
+ if (op_is_related_to_op (op, root_op)) {
+ /* Saturate instead of overflowing */
+ related_download_bytes = saturated_uint64_add (related_download_bytes, op_download_size);
+ if (!seen_current_op)
+ related_prior_download_bytes = saturated_uint64_add (related_prior_download_bytes, op_download_size);
+ }
+ }
+
+ g_assert (related_prior_download_bytes <= related_download_bytes);
+ g_assert (seen_root_op || root_op_skipped);
+
+ /* Avoid overflows when converting to percent, at the cost of losing
+ * some precision in the least significant digits. */
+ if (related_prior_download_bytes > G_MAXUINT64 / 100 ||
+ current_bytes_transferred > G_MAXUINT64 / 100) {
+ related_prior_download_bytes /= 100;
+ current_bytes_transferred /= 100;
+ related_download_bytes /= 100;
+ }
+
+ /* Update the progress of @root_app. */
+ if (related_download_bytes > 0)
+ percent = ((related_prior_download_bytes * 100 / related_download_bytes) +
+ (current_bytes_transferred * 100 / related_download_bytes));
+ else
+ percent = 0;
+
+ if (gs_app_get_progress (root_app) == 100 ||
+ gs_app_get_progress (root_app) == GS_APP_PROGRESS_UNKNOWN ||
+ gs_app_get_progress (root_app) <= percent) {
+ gs_app_set_progress (root_app, percent);
+ } else {
+ g_warning ("ignoring percentage %u%% -> %u%% as going down on app %s",
+ gs_app_get_progress (root_app), percent,
+ gs_app_get_unique_id (root_app));
+ }
+}
+#endif /* flatpak 1.7.3 */
+
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+static void
+update_progress_for_op_recurse_up (GsFlatpakTransaction *self,
+ FlatpakTransactionProgress *progress,
+ GList *ops,
+ FlatpakTransactionOperation *current_op,
+ FlatpakTransactionOperation *root_op)
+{
+ GPtrArray *related_to_ops = flatpak_transaction_operation_get_related_to_ops (root_op);
+
+ /* Update progress for @root_op */
+ update_progress_for_op (self, progress, ops, current_op, root_op);
+
+ /* Update progress for ops related to @root_op, e.g. apps whose runtime is @root_op */
+ for (gsize i = 0; related_to_ops != NULL && i < related_to_ops->len; i++) {
+ FlatpakTransactionOperation *related_to_op = g_ptr_array_index (related_to_ops, i);
+ update_progress_for_op_recurse_up (self, progress, ops, current_op, related_to_op);
+ }
+}
+#endif /* flatpak 1.7.3 */
+
+static void
+_transaction_progress_changed_cb (FlatpakTransactionProgress *progress,
+ gpointer user_data)
+{
+ ProgressData *data = user_data;
+ GsApp *app = data->app;
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+ GsFlatpakTransaction *self = data->transaction;
+ g_autolist(FlatpakTransactionOperation) ops = NULL;
+#else
+ guint percent;
+#endif
+
+ if (flatpak_transaction_progress_get_is_estimating (progress)) {
+ /* "Estimating" happens while fetching the metadata, which
+ * flatpak arbitrarily decides happens during the first 5% of
+ * each operation. At this point, no more detailed progress
+ * information is available. */
+ gs_app_set_progress (app, GS_APP_PROGRESS_UNKNOWN);
+ return;
+ }
+
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+ /* Update the progress on this app, and then do the same for each
+ * related parent app up the hierarchy. For example, @data->operation
+ * could be for a runtime which was added to the transaction because of
+ * an app — so we need to update the progress on the app too.
+ *
+ * It’s important to note that a new @data->progress is created by
+ * libflatpak for each @data->operation, and there are multiple
+ * operations in a transaction. There is no #FlatpakTransactionProgress
+ * which represents the progress of the whole transaction.
+ *
+ * There may be arbitrary many levels of related-to ops. For example,
+ * one common situation would be to install an app which needs a new
+ * runtime, and that runtime needs a locale to be installed, which would
+ * give three levels of related-to relation:
+ * locale → runtime → app → (null)
+ *
+ * In addition, libflatpak may decide to skip some operations (if they
+ * turn out to not be necessary). These skipped operations are not
+ * included in the list returned by flatpak_transaction_get_operations(),
+ * but they can be accessed via
+ * flatpak_transaction_operation_get_related_to_ops(), so have to be
+ * ignored manually.
+ */
+ ops = flatpak_transaction_get_operations (FLATPAK_TRANSACTION (self));
+ update_progress_for_op_recurse_up (self, progress, ops, data->operation, data->operation);
+#else /* if !flatpak 1.7.3 */
+ percent = flatpak_transaction_progress_get_progress (progress);
+
+ if (gs_app_get_progress (app) != 100 &&
+ gs_app_get_progress (app) != GS_APP_PROGRESS_UNKNOWN &&
+ gs_app_get_progress (app) > percent) {
+ g_warning ("ignoring percentage %u%% -> %u%% as going down...",
+ gs_app_get_progress (app), percent);
+ return;
+ }
+
+ gs_app_set_progress (app, percent);
+#endif /* !flatpak 1.7.3 */
+}
+
+static const gchar *
+_flatpak_transaction_operation_type_to_string (FlatpakTransactionOperationType ot)
+{
+ if (ot == FLATPAK_TRANSACTION_OPERATION_INSTALL)
+ return "install";
+ if (ot == FLATPAK_TRANSACTION_OPERATION_UPDATE)
+ return "update";
+ if (ot == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE)
+ return "install-bundle";
+ if (ot == FLATPAK_TRANSACTION_OPERATION_UNINSTALL)
+ return "uninstall";
+ return NULL;
+}
+
+static void
+progress_data_free_closure (gpointer user_data,
+ GClosure *closure)
+{
+ progress_data_free (user_data);
+}
+
+static void
+_transaction_new_operation (FlatpakTransaction *transaction,
+ FlatpakTransactionOperation *operation,
+ FlatpakTransactionProgress *progress)
+{
+ GsApp *app;
+ g_autoptr(ProgressData) progress_data = NULL;
+
+ /* find app */
+ app = _transaction_operation_get_app (operation);
+ if (app == NULL) {
+ FlatpakTransactionOperationType ot;
+ ot = flatpak_transaction_operation_get_operation_type (operation);
+ g_warning ("failed to find app for %s during %s",
+ flatpak_transaction_operation_get_ref (operation),
+ _flatpak_transaction_operation_type_to_string (ot));
+ return;
+ }
+
+ /* report progress */
+ progress_data = g_new0 (ProgressData, 1);
+ progress_data->transaction = GS_FLATPAK_TRANSACTION (g_object_ref (transaction));
+ progress_data->app = g_object_ref (app);
+ progress_data->operation = g_object_ref (operation);
+
+ g_signal_connect_data (progress, "changed",
+ G_CALLBACK (_transaction_progress_changed_cb),
+ g_steal_pointer (&progress_data),
+ progress_data_free_closure,
+ 0 /* flags */);
+ flatpak_transaction_progress_set_update_frequency (progress, 500); /* FIXME? */
+
+ /* set app status */
+ switch (flatpak_transaction_operation_get_operation_type (operation)) {
+ case FLATPAK_TRANSACTION_OPERATION_INSTALL:
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ break;
+ case FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE:
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ break;
+ case FLATPAK_TRANSACTION_OPERATION_UPDATE:
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ break;
+ case FLATPAK_TRANSACTION_OPERATION_UNINSTALL:
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ break;
+ default:
+ break;
+ }
+}
+
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+static gboolean
+later_op_also_related (GList *ops,
+ FlatpakTransactionOperation *current_op,
+ FlatpakTransactionOperation *related_to_current_op)
+{
+ /* Here we're determining if anything in @ops which comes after
+ * @current_op is related to @related_to_current_op and not skipped
+ * (but all @ops are not skipped so no need to check explicitly)
+ */
+ gboolean found_later_op = FALSE, seen_current_op = FALSE;
+ for (GList *l = ops; l != NULL; l = l->next) {
+ FlatpakTransactionOperation *op = l->data;
+ GPtrArray *related_to_ops;
+ if (current_op == op) {
+ seen_current_op = TRUE;
+ continue;
+ }
+ if (!seen_current_op)
+ continue;
+
+ related_to_ops = flatpak_transaction_operation_get_related_to_ops (op);
+ for (gsize i = 0; related_to_ops != NULL && i < related_to_ops->len; i++) {
+ FlatpakTransactionOperation *related_to_op = g_ptr_array_index (related_to_ops, i);
+ if (related_to_op == related_to_current_op) {
+ g_assert (flatpak_transaction_operation_get_is_skipped (related_to_op));
+ found_later_op = TRUE;
+ }
+ }
+ }
+
+ return found_later_op;
+}
+
+static void
+set_skipped_related_apps_to_installed (GsFlatpakTransaction *self,
+ FlatpakTransaction *transaction,
+ FlatpakTransactionOperation *operation)
+{
+ /* It's possible the thing being updated/installed, @operation, is a
+ * related ref (e.g. extension or runtime) of an app which itself doesn't
+ * need an update and therefore won't have _transaction_operation_done()
+ * called for it directly. So we have to set the main app to installed
+ * here.
+ */
+ g_autolist(GObject) ops = flatpak_transaction_get_operations (transaction);
+ GPtrArray *related_to_ops = flatpak_transaction_operation_get_related_to_ops (operation);
+
+ for (gsize i = 0; related_to_ops != NULL && i < related_to_ops->len; i++) {
+ FlatpakTransactionOperation *related_to_op = g_ptr_array_index (related_to_ops, i);
+ if (flatpak_transaction_operation_get_is_skipped (related_to_op)) {
+ const gchar *ref;
+ g_autoptr(GsApp) related_to_app = NULL;
+
+ /* Check that no later op is also related to related_to_op, in
+ * which case we want to let that operation finish before setting
+ * the main app to installed.
+ */
+ if (later_op_also_related (ops, operation, related_to_op))
+ continue;
+
+ ref = flatpak_transaction_operation_get_ref (related_to_op);
+ related_to_app = _ref_to_app (self, ref);
+ if (related_to_app != NULL)
+ gs_app_set_state (related_to_app, AS_APP_STATE_INSTALLED);
+ }
+ }
+}
+#endif /* flatpak 1.7.3 */
+
+static void
+_transaction_operation_done (FlatpakTransaction *transaction,
+ FlatpakTransactionOperation *operation,
+ const gchar *commit,
+ FlatpakTransactionResult details)
+{
+#if !FLATPAK_CHECK_VERSION(1,5,1) || FLATPAK_CHECK_VERSION(1,7,3)
+ GsFlatpakTransaction *self = GS_FLATPAK_TRANSACTION (transaction);
+#endif
+ /* invalidate */
+ GsApp *app = _transaction_operation_get_app (operation);
+ if (app == NULL) {
+ g_warning ("failed to find app for %s",
+ flatpak_transaction_operation_get_ref (operation));
+ return;
+ }
+ switch (flatpak_transaction_operation_get_operation_type (operation)) {
+ case FLATPAK_TRANSACTION_OPERATION_INSTALL:
+ case FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE:
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+#if FLATPAK_CHECK_VERSION(1,7,3)
+ set_skipped_related_apps_to_installed (self, transaction, operation);
+#endif
+ break;
+ case FLATPAK_TRANSACTION_OPERATION_UPDATE:
+ gs_app_set_version (app, gs_app_get_update_version (app));
+ gs_app_set_update_details (app, NULL);
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_UNKNOWN);
+ gs_app_set_update_version (app, NULL);
+ /* force getting the new runtime */
+ gs_app_remove_kudo (app, GS_APP_KUDO_SANDBOXED);
+ /* downloaded, but not yet installed */
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+ if (self->no_deploy)
+#else
+ if (flatpak_transaction_get_no_deploy (transaction))
+#endif
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+ else
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+#if FLATPAK_CHECK_VERSION(1,7,3)
+ set_skipped_related_apps_to_installed (self, transaction, operation);
+#endif
+ break;
+ case FLATPAK_TRANSACTION_OPERATION_UNINSTALL:
+ /* we don't actually know if this app is re-installable */
+ gs_flatpak_app_set_commit (app, NULL);
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ break;
+ default:
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ break;
+ }
+}
+
+static gboolean
+_transaction_operation_error (FlatpakTransaction *transaction,
+ FlatpakTransactionOperation *operation,
+ const GError *error,
+ FlatpakTransactionErrorDetails detail)
+{
+ GsFlatpakTransaction *self = GS_FLATPAK_TRANSACTION (transaction);
+ FlatpakTransactionOperationType operation_type = flatpak_transaction_operation_get_operation_type (operation);
+ GsApp *app = _transaction_operation_get_app (operation);
+ const gchar *ref = flatpak_transaction_operation_get_ref (operation);
+
+ if (g_error_matches (error, FLATPAK_ERROR, FLATPAK_ERROR_SKIPPED)) {
+ g_debug ("skipped to %s %s: %s",
+ _flatpak_transaction_operation_type_to_string (operation_type),
+ ref,
+ error->message);
+ return TRUE; /* continue */
+ }
+
+ if (detail & FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL) {
+ g_warning ("failed to %s %s (non fatal): %s",
+ _flatpak_transaction_operation_type_to_string (operation_type),
+ ref,
+ error->message);
+ return TRUE; /* continue */
+ }
+
+ if (self->first_operation_error == NULL) {
+ g_propagate_error (&self->first_operation_error,
+ g_error_copy (error));
+ if (app != NULL)
+ gs_utils_error_add_app_id (&self->first_operation_error, app);
+ }
+ return FALSE; /* stop */
+}
+
+static int
+_transaction_choose_remote_for_ref (FlatpakTransaction *transaction,
+ const char *for_ref,
+ const char *runtime_ref,
+ const char * const *remotes)
+{
+ //FIXME: do something smarter
+ return 0;
+}
+
+static void
+_transaction_end_of_lifed (FlatpakTransaction *transaction,
+ const gchar *ref,
+ const gchar *reason,
+ const gchar *rebase)
+{
+ if (rebase) {
+ g_printerr ("%s is end-of-life, in preference of %s\n", ref, rebase);
+ } else if (reason) {
+ g_printerr ("%s is end-of-life, with reason: %s\n", ref, reason);
+ }
+ //FIXME: show something in the UI
+}
+
+static gboolean
+_transaction_add_new_remote (FlatpakTransaction *transaction,
+ FlatpakTransactionRemoteReason reason,
+ const char *from_id,
+ const char *remote_name,
+ const char *url)
+{
+ /* additional applications */
+ if (reason == FLATPAK_TRANSACTION_REMOTE_GENERIC_REPO) {
+ g_debug ("configuring %s as new generic remote", url);
+ return TRUE; //FIXME?
+ }
+
+ /* runtime deps always make sense */
+ if (reason == FLATPAK_TRANSACTION_REMOTE_RUNTIME_DEPS) {
+ g_debug ("configuring %s as new remote for deps", url);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+static void
+gs_flatpak_transaction_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ FlatpakTransaction *transaction = FLATPAK_TRANSACTION (object);
+
+ switch ((GsFlatpakTransactionProperty) prop_id) {
+ case PROP_NO_DEPLOY:
+ gs_flatpak_transaction_set_no_deploy (transaction, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+#endif
+
+static void
+gs_flatpak_transaction_class_init (GsFlatpakTransactionClass *klass)
+{
+
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+ GParamSpec *pspec;
+#endif
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ FlatpakTransactionClass *transaction_class = FLATPAK_TRANSACTION_CLASS (klass);
+ object_class->finalize = gs_flatpak_transaction_finalize;
+ transaction_class->ready = _transaction_ready;
+ transaction_class->add_new_remote = _transaction_add_new_remote;
+ transaction_class->new_operation = _transaction_new_operation;
+ transaction_class->operation_done = _transaction_operation_done;
+ transaction_class->operation_error = _transaction_operation_error;
+ transaction_class->choose_remote_for_ref = _transaction_choose_remote_for_ref;
+ transaction_class->end_of_lifed = _transaction_end_of_lifed;
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+ object_class->set_property = gs_flatpak_transaction_set_property;
+
+ pspec = g_param_spec_boolean ("no-deploy", NULL,
+ "Whether the current transaction will deploy the downloaded objects",
+ FALSE, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class, PROP_NO_DEPLOY, pspec);
+#endif
+
+ signals[SIGNAL_REF_TO_APP] =
+ g_signal_new ("ref-to-app",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL, G_TYPE_OBJECT, 1, G_TYPE_STRING);
+}
+
+static void
+gs_flatpak_transaction_init (GsFlatpakTransaction *self)
+{
+ self->refhash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) g_object_unref);
+}
+
+FlatpakTransaction *
+gs_flatpak_transaction_new (FlatpakInstallation *installation,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsFlatpakTransaction *self;
+ self = g_initable_new (GS_TYPE_FLATPAK_TRANSACTION,
+ cancellable, error,
+ "installation", installation,
+ NULL);
+ if (self == NULL)
+ return NULL;
+ return FLATPAK_TRANSACTION (self);
+}
diff --git a/plugins/flatpak/gs-flatpak-transaction.h b/plugins/flatpak/gs-flatpak-transaction.h
new file mode 100644
index 0000000..97a4e10
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak-transaction.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gnome-software.h>
+#include <flatpak.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_FLATPAK_TRANSACTION (gs_flatpak_transaction_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsFlatpakTransaction, gs_flatpak_transaction, GS, FLATPAK_TRANSACTION, FlatpakTransaction)
+
+FlatpakTransaction *gs_flatpak_transaction_new (FlatpakInstallation *installation,
+ GCancellable *cancellable,
+ GError **error);
+GsApp *gs_flatpak_transaction_get_app_by_ref (FlatpakTransaction *transaction,
+ const gchar *ref);
+void gs_flatpak_transaction_add_app (FlatpakTransaction *transaction,
+ GsApp *app);
+gboolean gs_flatpak_transaction_run (FlatpakTransaction *transaction,
+ GCancellable *cancellable,
+ GError **error);
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+void gs_flatpak_transaction_set_no_deploy (FlatpakTransaction *transaction,
+ gboolean no_deploy);
+#endif
+
+G_END_DECLS
diff --git a/plugins/flatpak/gs-flatpak-utils.c b/plugins/flatpak/gs-flatpak-utils.c
new file mode 100644
index 0000000..4dee104
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak-utils.c
@@ -0,0 +1,212 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+#include <ostree.h>
+
+#include "gs-flatpak-app.h"
+#include "gs-flatpak.h"
+#include "gs-flatpak-utils.h"
+
+void
+gs_flatpak_error_convert (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gio (perror))
+ return;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gdbus (perror))
+ return;
+
+ /* this are allowed for network ops */
+ if (gs_utils_error_convert_gresolver (perror))
+ return;
+
+ /* custom to this plugin */
+ if (error->domain == FLATPAK_ERROR) {
+ switch (error->code) {
+ case FLATPAK_ERROR_ALREADY_INSTALLED:
+ case FLATPAK_ERROR_NOT_INSTALLED:
+ case FLATPAK_ERROR_REMOTE_NOT_FOUND:
+ case FLATPAK_ERROR_RUNTIME_NOT_FOUND:
+ error->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else if (error->domain == OSTREE_GPG_ERROR) {
+ error->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ } else {
+ g_warning ("can't reliably fixup error from domain %s: %s",
+ g_quark_to_string (error->domain),
+ error->message);
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+}
+
+GsApp *
+gs_flatpak_app_new_from_remote (FlatpakRemote *xremote)
+{
+ g_autofree gchar *title = NULL;
+ g_autofree gchar *url = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ app = gs_flatpak_app_new (flatpak_remote_get_name (xremote));
+ gs_app_set_kind (app, AS_APP_KIND_SOURCE);
+ gs_app_set_state (app, flatpak_remote_get_disabled (xremote) ?
+ AS_APP_STATE_AVAILABLE : AS_APP_STATE_INSTALLED);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST,
+ flatpak_remote_get_name (xremote));
+ gs_app_set_size_download (app, GS_APP_SIZE_UNKNOWABLE);
+
+ /* title */
+ title = flatpak_remote_get_title (xremote);
+ if (title != NULL)
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, title);
+
+ /* url */
+ url = flatpak_remote_get_url (xremote);
+ if (url != NULL)
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, url);
+
+ /* success */
+ return g_steal_pointer (&app);
+}
+
+GsApp *
+gs_flatpak_app_new_from_repo_file (GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gchar *tmp;
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *filename = NULL;
+ g_autofree gchar *repo_comment = NULL;
+ g_autofree gchar *repo_default_branch = NULL;
+ g_autofree gchar *repo_description = NULL;
+ g_autofree gchar *repo_gpgkey = NULL;
+ g_autofree gchar *repo_homepage = NULL;
+ g_autofree gchar *repo_icon = NULL;
+ g_autofree gchar *repo_id = NULL;
+ g_autofree gchar *repo_title = NULL;
+ g_autofree gchar *repo_url = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GKeyFile) kf = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* read the file */
+ kf = g_key_file_new ();
+ filename = g_file_get_path (file);
+ if (!g_key_file_load_from_file (kf, filename,
+ G_KEY_FILE_NONE,
+ &error_local)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "failed to load flatpakrepo: %s",
+ error_local->message);
+ return NULL;
+ }
+
+ /* get the ID from the basename */
+ basename = g_file_get_basename (file);
+
+ /* ensure this is valid for flatpak */
+ repo_id = g_str_to_ascii (basename, NULL);
+ tmp = g_strrstr (repo_id, ".");
+ if (tmp != NULL)
+ *tmp = '\0';
+ for (guint i = 0; repo_id[i] != '\0'; i++) {
+ if (!g_ascii_isalnum (repo_id[i]))
+ repo_id[i] = '_';
+ }
+
+ /* create source */
+ repo_title = g_key_file_get_string (kf, "Flatpak Repo", "Title", NULL);
+ repo_url = g_key_file_get_string (kf, "Flatpak Repo", "Url", NULL);
+ if (repo_title == NULL || repo_url == NULL ||
+ repo_title[0] == '\0' || repo_url[0] == '\0') {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "not enough data in file, "
+ "expected at least Title and Url");
+ return NULL;
+ }
+
+ /* check version */
+ if (g_key_file_has_key (kf, "Flatpak Repo", "Version", NULL)) {
+ guint64 ver = g_key_file_get_uint64 (kf, "Flatpak Repo", "Version", NULL);
+ if (ver != 1) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "unsupported version %" G_GUINT64_FORMAT, ver);
+ return NULL;
+ }
+ }
+
+ /* create source */
+ app = gs_flatpak_app_new (repo_id);
+ gs_flatpak_app_set_file_kind (app, GS_FLATPAK_APP_FILE_KIND_REPO);
+ gs_app_set_kind (app, AS_APP_KIND_SOURCE);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, repo_title);
+ gs_app_set_size_download (app, GS_APP_SIZE_UNKNOWABLE);
+ gs_flatpak_app_set_repo_url (app, repo_url);
+ gs_app_set_origin_hostname (app, repo_url);
+
+ /* user specified a URL */
+ repo_gpgkey = g_key_file_get_string (kf, "Flatpak Repo", "GPGKey", NULL);
+ if (repo_gpgkey != NULL) {
+ if (g_str_has_prefix (repo_gpgkey, "http://") ||
+ g_str_has_prefix (repo_gpgkey, "https://")) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "Base64 encoded GPGKey required, not URL");
+ return NULL;
+ }
+ gs_flatpak_app_set_repo_gpgkey (app, repo_gpgkey);
+ }
+
+ /* optional data */
+ repo_homepage = g_key_file_get_string (kf, "Flatpak Repo", "Homepage", NULL);
+ if (repo_homepage != NULL)
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, repo_homepage);
+ repo_comment = g_key_file_get_string (kf, "Flatpak Repo", "Comment", NULL);
+ if (repo_comment != NULL)
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, repo_comment);
+ repo_description = g_key_file_get_string (kf, "Flatpak Repo", "Description", NULL);
+ if (repo_description != NULL)
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL, repo_description);
+ repo_default_branch = g_key_file_get_string (kf, "Flatpak Repo", "DefaultBranch", NULL);
+ if (repo_default_branch != NULL)
+ gs_app_set_branch (app, repo_default_branch);
+ repo_icon = g_key_file_get_string (kf, "Flatpak Repo", "Icon", NULL);
+ if (repo_icon != NULL) {
+ g_autoptr(AsIcon) ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_REMOTE);
+ as_icon_set_url (ic, repo_icon);
+ gs_app_add_icon (app, ic);
+ }
+
+ /* success */
+ return g_steal_pointer (&app);
+}
diff --git a/plugins/flatpak/gs-flatpak-utils.h b/plugins/flatpak/gs-flatpak-utils.h
new file mode 100644
index 0000000..61cd62d
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak-utils.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+G_BEGIN_DECLS
+
+#include <gnome-software.h>
+
+void gs_flatpak_error_convert (GError **perror);
+GsApp *gs_flatpak_app_new_from_remote (FlatpakRemote *xremote);
+GsApp *gs_flatpak_app_new_from_repo_file (GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
new file mode 100644
index 0000000..cf86a7f
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak.c
@@ -0,0 +1,3258 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Joaquim Rocha <jrocha@endlessm.com>
+ * Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016-2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/* Notes:
+ *
+ * All GsApp's created have management-plugin set to flatpak
+ * The GsApp:origin is the remote name, e.g. test-repo
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <xmlb.h>
+
+#include "gs-appstream.h"
+#include "gs-flatpak-app.h"
+#include "gs-flatpak.h"
+#include "gs-flatpak-utils.h"
+
+struct _GsFlatpak {
+ GObject parent_instance;
+ GsFlatpakFlags flags;
+ FlatpakInstallation *installation;
+ GPtrArray *installed_refs; /* must be entirely replaced rather than updated internally */
+ GMutex installed_refs_mutex;
+ GHashTable *broken_remotes;
+ GMutex broken_remotes_mutex;
+ GFileMonitor *monitor;
+ AsAppScope scope;
+ GsPlugin *plugin;
+ XbSilo *silo;
+ GRWLock silo_lock;
+ gchar *id;
+ guint changed_id;
+ GHashTable *app_silos;
+ GMutex app_silos_mutex;
+};
+
+G_DEFINE_TYPE (GsFlatpak, gs_flatpak, G_TYPE_OBJECT)
+
+static gboolean
+gs_flatpak_refresh_appstream (GsFlatpak *self, guint cache_age,
+ GCancellable *cancellable, GError **error);
+
+static void
+gs_plugin_refine_item_scope (GsFlatpak *self, GsApp *app)
+{
+ if (gs_app_get_scope (app) == AS_APP_SCOPE_UNKNOWN) {
+ gboolean is_user = flatpak_installation_get_is_user (self->installation);
+ gs_app_set_scope (app, is_user ? AS_APP_SCOPE_USER : AS_APP_SCOPE_SYSTEM);
+ }
+}
+
+static void
+gs_flatpak_claim_app (GsFlatpak *self, GsApp *app)
+{
+ if (gs_app_get_management_plugin (app) != NULL)
+ return;
+ gs_app_set_management_plugin (app, gs_plugin_get_name (self->plugin));
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_FLATPAK);
+
+ /* only when we have a non-temp object */
+ if ((self->flags & GS_FLATPAK_FLAG_IS_TEMPORARY) == 0) {
+ gs_app_set_scope (app, self->scope);
+ gs_flatpak_app_set_object_id (app, gs_flatpak_get_id (self));
+ }
+}
+
+static void
+gs_flatpak_claim_app_list (GsFlatpak *self, GsAppList *list)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ gs_flatpak_claim_app (self, app);
+ }
+}
+
+static void
+gs_flatpak_set_kind_from_flatpak (GsApp *app, FlatpakRef *xref)
+{
+ if (flatpak_ref_get_kind (xref) == FLATPAK_REF_KIND_APP) {
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ } else if (flatpak_ref_get_kind (xref) == FLATPAK_REF_KIND_RUNTIME) {
+ const gchar *id = gs_app_get_id (app);
+ /* this is anything that's not an app, including locales
+ * sources and debuginfo */
+ if (g_str_has_suffix (id, ".Locale")) {
+ gs_app_set_kind (app, AS_APP_KIND_LOCALIZATION);
+ } else if (g_str_has_suffix (id, ".Debug") ||
+ g_str_has_suffix (id, ".Sources") ||
+ g_str_has_prefix (id, "org.freedesktop.Platform.Icontheme.") ||
+ g_str_has_prefix (id, "org.gtk.Gtk3theme.")) {
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ } else {
+ gs_app_set_kind (app, AS_APP_KIND_RUNTIME);
+ }
+ }
+}
+
+static GsAppPermissions
+perms_from_metadata (GKeyFile *keyfile)
+{
+ char **strv;
+ char *str;
+ GsAppPermissions permissions = GS_APP_PERMISSIONS_UNKNOWN;
+
+ strv = g_key_file_get_string_list (keyfile, "Context", "sockets", NULL, NULL);
+ if (strv != NULL && g_strv_contains ((const gchar * const*)strv, "system-bus"))
+ permissions |= GS_APP_PERMISSIONS_SYSTEM_BUS;
+ if (strv != NULL && g_strv_contains ((const gchar * const*)strv, "session-bus"))
+ permissions |= GS_APP_PERMISSIONS_SESSION_BUS;
+ if (strv != NULL &&
+ !g_strv_contains ((const gchar * const*)strv, "fallback-x11") &&
+ g_strv_contains ((const gchar * const*)strv, "x11"))
+ permissions |= GS_APP_PERMISSIONS_X11;
+ g_strfreev (strv);
+
+ strv = g_key_file_get_string_list (keyfile, "Context", "devices", NULL, NULL);
+ if (strv != NULL && g_strv_contains ((const gchar * const*)strv, "all"))
+ permissions |= GS_APP_PERMISSIONS_DEVICES;
+ g_strfreev (strv);
+
+ strv = g_key_file_get_string_list (keyfile, "Context", "shared", NULL, NULL);
+ if (strv != NULL && g_strv_contains ((const gchar * const*)strv, "network"))
+ permissions |= GS_APP_PERMISSIONS_NETWORK;
+ g_strfreev (strv);
+
+ strv = g_key_file_get_string_list (keyfile, "Context", "filesystems", NULL, NULL);
+ if (strv != NULL && (g_strv_contains ((const gchar * const *)strv, "home") ||
+ g_strv_contains ((const gchar * const *)strv, "home:rw")))
+ permissions |= GS_APP_PERMISSIONS_HOME_FULL;
+ else if (strv != NULL && g_strv_contains ((const gchar * const *)strv, "home:ro"))
+ permissions |= GS_APP_PERMISSIONS_HOME_READ;
+ if (strv != NULL && (g_strv_contains ((const gchar * const *)strv, "host") ||
+ g_strv_contains ((const gchar * const *)strv, "host:rw")))
+ permissions |= GS_APP_PERMISSIONS_FILESYSTEM_FULL;
+ else if (strv != NULL && g_strv_contains ((const gchar * const *)strv, "host:ro"))
+ permissions |= GS_APP_PERMISSIONS_FILESYSTEM_READ;
+ if (strv != NULL && (g_strv_contains ((const gchar * const *)strv, "xdg-download") ||
+ g_strv_contains ((const gchar * const *)strv, "xdg-download:rw")))
+ permissions |= GS_APP_PERMISSIONS_DOWNLOADS_FULL;
+ else if (strv != NULL && g_strv_contains ((const gchar * const *)strv, "xdg-download:ro"))
+ permissions |= GS_APP_PERMISSIONS_DOWNLOADS_READ;
+ g_strfreev (strv);
+
+ str = g_key_file_get_string (keyfile, "Session Bus Policy", "ca.desrt.dconf", NULL);
+ if (str != NULL && g_str_equal (str, "talk"))
+ permissions |= GS_APP_PERMISSIONS_SETTINGS;
+ g_free (str);
+
+ str = g_key_file_get_string (keyfile, "Session Bus Policy", "org.freedesktop.Flatpak", NULL);
+ if (str != NULL && g_str_equal (str, "talk"))
+ permissions |= GS_APP_PERMISSIONS_ESCAPE_SANDBOX;
+ g_free (str);
+
+ /* no permissions set */
+ if (permissions == GS_APP_PERMISSIONS_UNKNOWN)
+ return GS_APP_PERMISSIONS_NONE;
+
+ return permissions;
+}
+
+static void
+gs_flatpak_set_update_permissions (GsFlatpak *self, GsApp *app, FlatpakInstalledRef *xref)
+{
+ g_autoptr(GBytes) old_bytes = NULL;
+ g_autoptr(GKeyFile) old_keyfile = NULL;
+ g_autoptr(GBytes) bytes = NULL;
+ g_autoptr(GKeyFile) keyfile = NULL;
+ GsAppPermissions permissions;
+ g_autoptr(GError) error_local = NULL;
+
+ old_bytes = flatpak_installed_ref_load_metadata (FLATPAK_INSTALLED_REF (xref), NULL, NULL);
+ old_keyfile = g_key_file_new ();
+ g_key_file_load_from_data (old_keyfile,
+ g_bytes_get_data (old_bytes, NULL),
+ g_bytes_get_size (old_bytes),
+ 0, NULL);
+
+ bytes = flatpak_installation_fetch_remote_metadata_sync (self->installation,
+ gs_app_get_origin (app),
+ FLATPAK_REF (xref),
+ NULL,
+ &error_local);
+ if (bytes == NULL) {
+ g_debug ("Failed to get metadata for remote ‘%s’: %s",
+ gs_app_get_origin (app), error_local->message);
+ g_clear_error (&error_local);
+ permissions = GS_APP_PERMISSIONS_UNKNOWN;
+ } else {
+ keyfile = g_key_file_new ();
+ g_key_file_load_from_data (keyfile,
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ 0, NULL);
+ permissions = perms_from_metadata (keyfile) & ~perms_from_metadata (old_keyfile);
+ }
+
+ /* no new permissions set */
+ if (permissions == GS_APP_PERMISSIONS_UNKNOWN)
+ permissions = GS_APP_PERMISSIONS_NONE;
+
+ gs_app_set_update_permissions (app, permissions);
+
+ if (permissions != GS_APP_PERMISSIONS_NONE)
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEW_PERMISSIONS);
+}
+
+static void
+gs_flatpak_set_metadata (GsFlatpak *self, GsApp *app, FlatpakRef *xref)
+{
+ g_autofree gchar *ref_tmp = flatpak_ref_format_ref (FLATPAK_REF (xref));
+
+ /* core */
+ gs_flatpak_claim_app (self, app);
+ gs_app_set_branch (app, flatpak_ref_get_branch (xref));
+ gs_app_add_source (app, ref_tmp);
+ gs_plugin_refine_item_scope (self, app);
+
+ /* flatpak specific */
+ gs_flatpak_app_set_ref_kind (app, flatpak_ref_get_kind (xref));
+ gs_flatpak_app_set_ref_name (app, flatpak_ref_get_name (xref));
+ gs_flatpak_app_set_ref_arch (app, flatpak_ref_get_arch (xref));
+ gs_flatpak_app_set_commit (app, flatpak_ref_get_commit (xref));
+
+ /* map the flatpak kind to the gnome-software kind */
+ if (gs_app_get_kind (app) == AS_APP_KIND_UNKNOWN ||
+ gs_app_get_kind (app) == AS_APP_KIND_GENERIC) {
+ gs_flatpak_set_kind_from_flatpak (app, xref);
+ }
+}
+
+static GsApp *
+gs_flatpak_create_app (GsFlatpak *self, const gchar *origin, FlatpakRef *xref)
+{
+ GsApp *app_cached;
+ g_autoptr(GsApp) app = NULL;
+
+ /* create a temp GsApp */
+ app = gs_app_new (flatpak_ref_get_name (xref));
+ gs_flatpak_set_metadata (self, app, xref);
+ if (origin != NULL)
+ gs_app_set_origin (app, origin);
+
+ /* return the ref'd cached copy */
+ app_cached = gs_plugin_cache_lookup (self->plugin, gs_app_get_unique_id (app));
+ if (app_cached != NULL)
+ return app_cached;
+
+ /* fallback values */
+ if (gs_flatpak_app_get_ref_kind (app) == FLATPAK_REF_KIND_RUNTIME) {
+ g_autoptr(AsIcon) icon = NULL;
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL,
+ flatpak_ref_get_name (FLATPAK_REF (xref)));
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL,
+ "Framework for applications");
+ gs_app_set_version (app, flatpak_ref_get_branch (FLATPAK_REF (xref)));
+ icon = as_icon_new ();
+ as_icon_set_kind (icon, AS_ICON_KIND_STOCK);
+ as_icon_set_name (icon, "system-run-symbolic");
+ gs_app_add_icon (app, icon);
+ }
+
+ /* Don't add NULL origin apps to the cache. If the app is later set to
+ * origin x the cache may return it as a match for origin y since the cache
+ * hash table uses as_utils_unique_id_equal() as the equal func and a NULL
+ * origin becomes a "*" in as_utils_unique_id_build().
+ */
+ if (origin != NULL)
+ gs_plugin_cache_add (self->plugin, NULL, app);
+
+ /* no existing match, just steal the temp object */
+ return g_steal_pointer (&app);
+}
+
+static GsApp *
+gs_flatpak_create_source (GsFlatpak *self, FlatpakRemote *xremote)
+{
+ GsApp *app_cached;
+ g_autoptr(GsApp) app = NULL;
+
+ /* create a temp GsApp */
+ app = gs_flatpak_app_new_from_remote (xremote);
+ gs_flatpak_claim_app (self, app);
+
+ /* we already have one, returned the ref'd cached copy */
+ app_cached = gs_plugin_cache_lookup (self->plugin, gs_app_get_unique_id (app));
+ if (app_cached != NULL)
+ return app_cached;
+
+ /* no existing match, just steal the temp object */
+ gs_plugin_cache_add (self->plugin, NULL, app);
+ return g_steal_pointer (&app);
+}
+
+static void
+gs_plugin_flatpak_changed_cb (GFileMonitor *monitor,
+ GFile *child,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ GsFlatpak *self)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ /* manually drop the cache */
+ if (!flatpak_installation_drop_caches (self->installation,
+ NULL, &error)) {
+ g_warning ("failed to drop cache: %s", error->message);
+ return;
+ }
+
+ /* drop the installed refs cache */
+ locker = g_mutex_locker_new (&self->installed_refs_mutex);
+ g_clear_pointer (&self->installed_refs, g_ptr_array_unref);
+}
+
+static gboolean
+gs_flatpak_add_flatpak_keyword_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0)
+ gs_appstream_component_add_keyword (bn, "flatpak");
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_fix_id_desktop_suffix_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0) {
+ g_auto(GStrv) split = NULL;
+ g_autoptr(XbBuilderNode) id = xb_builder_node_get_child (bn, "id", NULL);
+ g_autoptr(XbBuilderNode) bundle = xb_builder_node_get_child (bn, "bundle", NULL);
+ if (id == NULL || bundle == NULL)
+ return TRUE;
+ split = g_strsplit (xb_builder_node_get_text (bundle), "/", -1);
+ if (g_strv_length (split) != 4)
+ return TRUE;
+ if (g_strcmp0 (xb_builder_node_get_text (id), split[1]) != 0) {
+ g_debug ("fixing up <id>%s</id> to %s",
+ xb_builder_node_get_text (id), split[1]);
+ gs_appstream_component_add_provide (bn, xb_builder_node_get_text (id));
+ xb_builder_node_set_text (id, split[1], -1);
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_add_bundle_tag_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ const char *app_ref = (char *)user_data;
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0) {
+ g_autoptr(XbBuilderNode) id = xb_builder_node_get_child (bn, "id", NULL);
+ g_autoptr(XbBuilderNode) bundle = xb_builder_node_get_child (bn, "bundle", NULL);
+ if (id == NULL || bundle != NULL)
+ return TRUE;
+ g_debug ("adding <bundle> tag for %s", app_ref);
+ xb_builder_node_insert_text (bn, "bundle", app_ref, "type", "flatpak", NULL);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_fix_metadata_tag_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0) {
+ g_autoptr(XbBuilderNode) metadata = xb_builder_node_get_child (bn, "metadata", NULL);
+ if (metadata != NULL)
+ xb_builder_node_set_element (metadata, "custom");
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_set_origin_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ const char *remote_name = (char *)user_data;
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "components") == 0) {
+ xb_builder_node_set_attr (bn, "origin",
+ remote_name);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_filter_default_branch_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ const gchar *default_branch = (const gchar *) user_data;
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0) {
+ g_autoptr(XbBuilderNode) bc = xb_builder_node_get_child (bn, "bundle", NULL);
+ g_auto(GStrv) split = NULL;
+ if (bc == NULL) {
+ g_debug ("no bundle for component");
+ return TRUE;
+ }
+ split = g_strsplit (xb_builder_node_get_text (bc), "/", -1);
+ if (split == NULL || g_strv_length (split) != 4)
+ return TRUE;
+ if (g_strcmp0 (split[3], default_branch) != 0) {
+ g_debug ("not adding app with branch %s as filtering to %s",
+ split[3], default_branch);
+ xb_builder_node_add_flag (bn, XB_BUILDER_NODE_FLAG_IGNORE);
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_filter_noenumerate_cb (XbBuilderFixup *self,
+ XbBuilderNode *bn,
+ gpointer user_data,
+ GError **error)
+{
+ const gchar *main_ref = (const gchar *) user_data;
+
+ if (g_strcmp0 (xb_builder_node_get_element (bn), "component") == 0) {
+ g_autoptr(XbBuilderNode) bc = xb_builder_node_get_child (bn, "bundle", NULL);
+ if (bc == NULL) {
+ g_debug ("no bundle for component");
+ return TRUE;
+ }
+ if (g_strcmp0 (xb_builder_node_get_text (bc), main_ref) != 0) {
+ g_debug ("not adding app %s as filtering to %s",
+ xb_builder_node_get_text (bc), main_ref);
+ xb_builder_node_add_flag (bn, XB_BUILDER_NODE_FLAG_IGNORE);
+ }
+ }
+ return TRUE;
+}
+
+#if !FLATPAK_CHECK_VERSION(1,1,1)
+static gchar *
+gs_flatpak_get_xremote_main_ref (GsFlatpak *self, FlatpakRemote *xremote, GError **error)
+{
+ g_autoptr(GFile) dir = NULL;
+ g_autofree gchar *dir_path = NULL;
+ g_autofree gchar *config_fn = NULL;
+ g_autofree gchar *group = NULL;
+ g_autofree gchar *main_ref = NULL;
+ g_autoptr(GKeyFile) kf = NULL;
+
+ /* figure out the path to the config keyfile */
+ dir = flatpak_installation_get_path (self->installation);
+ if (dir == NULL)
+ return NULL;
+ dir_path = g_file_get_path (dir);
+ if (dir_path == NULL)
+ return NULL;
+ config_fn = g_build_filename (dir_path, "repo", "config", NULL);
+
+ kf = g_key_file_new ();
+ if (!g_key_file_load_from_file (kf, config_fn, G_KEY_FILE_NONE, error))
+ return NULL;
+
+ group = g_strdup_printf ("remote \"%s\"", flatpak_remote_get_name (xremote));
+ main_ref = g_key_file_get_string (kf, group, "xa.main-ref", error);
+ return g_steal_pointer (&main_ref);
+}
+#endif
+
+static void
+fixup_flatpak_appstream_xml (XbBuilderSource *source,
+ const char *origin)
+{
+ g_autoptr(XbBuilderFixup) fixup1 = NULL;
+ g_autoptr(XbBuilderFixup) fixup2 = NULL;
+ g_autoptr(XbBuilderFixup) fixup3 = NULL;
+
+ /* add the flatpak search keyword */
+ fixup1 = xb_builder_fixup_new ("AddKeywordFlatpak",
+ gs_flatpak_add_flatpak_keyword_cb,
+ NULL, NULL);
+ xb_builder_fixup_set_max_depth (fixup1, 2);
+ xb_builder_source_add_fixup (source, fixup1);
+
+ /* ensure the <id> matches the flatpak ref ID */
+ fixup2 = xb_builder_fixup_new ("FixIdDesktopSuffix",
+ gs_flatpak_fix_id_desktop_suffix_cb,
+ NULL, NULL);
+ xb_builder_fixup_set_max_depth (fixup2, 2);
+ xb_builder_source_add_fixup (source, fixup2);
+
+ /* Fixup <metadata> to <custom> for appstream versions >= 0.9 */
+ fixup3 = xb_builder_fixup_new ("FixMetadataTag",
+ gs_flatpak_fix_metadata_tag_cb,
+ NULL, NULL);
+ xb_builder_fixup_set_max_depth (fixup3, 2);
+ xb_builder_source_add_fixup (source, fixup3);
+
+ if (origin != NULL) {
+ g_autoptr(XbBuilderFixup) fixup4 = NULL;
+
+ /* override the *AppStream* origin */
+ fixup4 = xb_builder_fixup_new ("SetOrigin",
+ gs_flatpak_set_origin_cb,
+ g_strdup (origin), g_free);
+ xb_builder_fixup_set_max_depth (fixup4, 1);
+ xb_builder_source_add_fixup (source, fixup4);
+ }
+}
+
+static gboolean
+gs_flatpak_add_apps_from_xremote (GsFlatpak *self,
+ XbBuilder *builder,
+ FlatpakRemote *xremote,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *appstream_dir_fn = NULL;
+ g_autofree gchar *appstream_fn = NULL;
+ g_autofree gchar *icon_prefix = NULL;
+ g_autofree gchar *default_branch = NULL;
+ g_autoptr(GFile) appstream_dir = NULL;
+ g_autoptr(GFile) file_xml = NULL;
+ g_autoptr(GSettings) settings = NULL;
+ g_autoptr(XbBuilderNode) info = NULL;
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+
+ /* get the AppStream data location */
+ appstream_dir = flatpak_remote_get_appstream_dir (xremote, NULL);
+ if (appstream_dir == NULL) {
+ g_debug ("no appstream dir for %s, skipping",
+ flatpak_remote_get_name (xremote));
+ return TRUE;
+ }
+
+ /* load the file into a temp silo */
+ appstream_dir_fn = g_file_get_path (appstream_dir);
+ appstream_fn = g_build_filename (appstream_dir_fn, "appstream.xml.gz", NULL);
+ if (!g_file_test (appstream_fn, G_FILE_TEST_EXISTS)) {
+ g_debug ("no %s appstream metadata found: %s",
+ flatpak_remote_get_name (xremote),
+ appstream_fn);
+ return TRUE;
+ }
+
+ /* add source */
+ file_xml = g_file_new_for_path (appstream_fn);
+ if (!xb_builder_source_load_file (source, file_xml,
+ XB_BUILDER_SOURCE_FLAG_WATCH_FILE |
+ XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT,
+ cancellable,
+ error))
+ return FALSE;
+
+ fixup_flatpak_appstream_xml (source, flatpak_remote_get_name (xremote));
+
+ /* add metadata */
+ icon_prefix = g_build_filename (appstream_dir_fn, "icons", NULL);
+ info = xb_builder_node_insert (NULL, "info", NULL);
+ xb_builder_node_insert_text (info, "scope", as_app_scope_to_string (self->scope), NULL);
+ xb_builder_node_insert_text (info, "icon-prefix", icon_prefix, NULL);
+ xb_builder_source_set_info (source, info);
+
+ /* only add the specific app for noenumerate=true */
+ if (flatpak_remote_get_noenumerate (xremote)) {
+ g_autofree gchar *main_ref = NULL;
+#if FLATPAK_CHECK_VERSION(1,1,1)
+ main_ref = flatpak_remote_get_main_ref (xremote);
+#else
+ g_autoptr(GError) error_local = NULL;
+ main_ref = gs_flatpak_get_xremote_main_ref (self, xremote, &error_local);
+ if (main_ref == NULL) {
+ g_warning ("failed to get main ref: %s", error_local->message);
+ g_clear_error (&error_local);
+ }
+#endif
+ if (main_ref != NULL) {
+ g_autoptr(XbBuilderFixup) fixup = NULL;
+ fixup = xb_builder_fixup_new ("FilterNoEnumerate",
+ gs_flatpak_filter_noenumerate_cb,
+ g_strdup (main_ref),
+ g_free);
+ xb_builder_fixup_set_max_depth (fixup, 2);
+ xb_builder_source_add_fixup (source, fixup);
+ }
+ }
+
+ /* do we want to filter to the default branch */
+ settings = g_settings_new ("org.gnome.software");
+ default_branch = flatpak_remote_get_default_branch (xremote);
+ if (g_settings_get_boolean (settings, "filter-default-branch") &&
+ default_branch != NULL) {
+ g_autoptr(XbBuilderFixup) fixup = NULL;
+ fixup = xb_builder_fixup_new ("FilterDefaultbranch",
+ gs_flatpak_filter_default_branch_cb,
+ flatpak_remote_get_default_branch (xremote),
+ g_free);
+ xb_builder_fixup_set_max_depth (fixup, 2);
+ xb_builder_source_add_fixup (source, fixup);
+ }
+
+ /* success */
+ xb_builder_import_source (builder, source);
+ return TRUE;
+}
+
+static GInputStream *
+gs_plugin_appstream_load_desktop_cb (XbBuilderSource *self,
+ XbBuilderSourceCtx *ctx,
+ gpointer user_data,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GString *xml;
+ g_autoptr(AsApp) app = as_app_new ();
+ g_autoptr(GBytes) bytes = NULL;
+ bytes = xb_builder_source_ctx_get_bytes (ctx, cancellable, error);
+ if (bytes == NULL)
+ return NULL;
+ as_app_set_id (app, xb_builder_source_ctx_get_filename (ctx));
+ if (!as_app_parse_data (app, bytes, AS_APP_PARSE_FLAG_USE_FALLBACKS, error))
+ return NULL;
+ xml = as_app_to_xml (app, error);
+ if (xml == NULL)
+ return NULL;
+ g_string_prepend (xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ return g_memory_input_stream_new_from_data (g_string_free (xml, FALSE), -1, g_free);
+}
+
+static gboolean
+gs_flatpak_load_desktop_fn (GsFlatpak *self,
+ XbBuilder *builder,
+ const gchar *filename,
+ const gchar *icon_prefix,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GFile) file = g_file_new_for_path (filename);
+ g_autoptr(XbBuilderNode) info = NULL;
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+ g_autoptr(XbBuilderFixup) fixup = NULL;
+
+ /* add support for desktop files */
+ xb_builder_source_add_adapter (source, "application/x-desktop",
+ gs_plugin_appstream_load_desktop_cb, NULL, NULL);
+
+ /* add the flatpak search keyword */
+ fixup = xb_builder_fixup_new ("AddKeywordFlatpak",
+ gs_flatpak_add_flatpak_keyword_cb,
+ self, NULL);
+ xb_builder_fixup_set_max_depth (fixup, 2);
+ xb_builder_source_add_fixup (source, fixup);
+
+ /* set the component metadata */
+ info = xb_builder_node_insert (NULL, "info", NULL);
+ xb_builder_node_insert_text (info, "scope", as_app_scope_to_string (self->scope), NULL);
+ xb_builder_node_insert_text (info, "icon-prefix", icon_prefix, NULL);
+ xb_builder_source_set_info (source, info);
+
+ /* add source */
+ if (!xb_builder_source_load_file (source, file,
+#if LIBXMLB_CHECK_VERSION(0, 2, 0)
+ XB_BUILDER_SOURCE_FLAG_WATCH_DIRECTORY,
+#else
+ XB_BUILDER_SOURCE_FLAG_WATCH_FILE,
+#endif
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+
+ /* success */
+ xb_builder_import_source (builder, source);
+ return TRUE;
+}
+
+static void
+gs_flatpak_rescan_installed (GsFlatpak *self,
+ XbBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *fn;
+ g_autoptr(GFile) path = NULL;
+ g_autoptr(GDir) dir = NULL;
+ g_autofree gchar *path_str = NULL;
+ g_autofree gchar *path_exports = NULL;
+ g_autofree gchar *path_apps = NULL;
+
+ /* add all installed desktop files */
+ path = flatpak_installation_get_path (self->installation);
+ path_str = g_file_get_path (path);
+ path_exports = g_build_filename (path_str, "exports", NULL);
+ path_apps = g_build_filename (path_exports, "share", "applications", NULL);
+ dir = g_dir_open (path_apps, 0, NULL);
+ if (dir == NULL)
+ return;
+ while ((fn = g_dir_read_name (dir)) != NULL) {
+ g_autofree gchar *filename = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* ignore */
+ if (g_strcmp0 (fn, "mimeinfo.cache") == 0)
+ continue;
+
+ /* parse desktop files */
+ filename = g_build_filename (path_apps, fn, NULL);
+ if (!gs_flatpak_load_desktop_fn (self,
+ builder,
+ filename,
+ path_exports,
+ cancellable,
+ &error_local)) {
+ g_debug ("ignoring %s: %s", filename, error_local->message);
+ continue;
+ }
+ }
+}
+
+static gboolean
+gs_flatpak_rescan_appstream_store (GsFlatpak *self,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *const *locales = g_get_language_names ();
+ g_autofree gchar *blobfn = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GPtrArray) xremotes = NULL;
+ g_autoptr(GRWLockReaderLocker) reader_locker = NULL;
+ g_autoptr(GRWLockWriterLocker) writer_locker = NULL;
+ g_autoptr(XbBuilder) builder = xb_builder_new ();
+
+ reader_locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ /* everything is okay */
+ if (self->silo != NULL && xb_silo_is_valid (self->silo))
+ return TRUE;
+ g_clear_pointer (&reader_locker, g_rw_lock_reader_locker_free);
+
+ /* drat! silo needs regenerating */
+ writer_locker = g_rw_lock_writer_locker_new (&self->silo_lock);
+ g_clear_object (&self->silo);
+
+ /* verbose profiling */
+ if (g_getenv ("GS_XMLB_VERBOSE") != NULL) {
+ xb_builder_set_profile_flags (builder,
+ XB_SILO_PROFILE_FLAG_XPATH |
+ XB_SILO_PROFILE_FLAG_DEBUG);
+ }
+
+ /* add current locales */
+ for (guint i = 0; locales[i] != NULL; i++)
+ xb_builder_add_locale (builder, locales[i]);
+
+ /* go through each remote adding metadata */
+ xremotes = flatpak_installation_list_remotes (self->installation,
+ cancellable,
+ error);
+ if (xremotes == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < xremotes->len; i++) {
+ g_autoptr(GError) error_local = NULL;
+ FlatpakRemote *xremote = g_ptr_array_index (xremotes, i);
+ if (flatpak_remote_get_disabled (xremote))
+ continue;
+ g_debug ("found remote %s",
+ flatpak_remote_get_name (xremote));
+ if (!gs_flatpak_add_apps_from_xremote (self, builder, xremote, cancellable, &error_local)) {
+ g_debug ("Failed to add apps from remote ‘%s’; skipping: %s",
+ flatpak_remote_get_name (xremote), error_local->message);
+ }
+ }
+
+ /* add any installed files without AppStream info */
+ gs_flatpak_rescan_installed (self, builder, cancellable, error);
+
+ /* create per-user cache */
+ blobfn = gs_utils_get_cache_filename (gs_flatpak_get_id (self),
+ "components.xmlb",
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (blobfn == NULL)
+ return FALSE;
+ file = g_file_new_for_path (blobfn);
+ g_debug ("ensuring %s", blobfn);
+ self->silo = xb_builder_ensure (builder, file,
+ XB_BUILDER_COMPILE_FLAG_IGNORE_INVALID |
+ XB_BUILDER_COMPILE_FLAG_SINGLE_LANG,
+ NULL, error);
+ if (self->silo == NULL)
+ return FALSE;
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_setup (GsFlatpak *self, GCancellable *cancellable, GError **error)
+{
+ /* watch for changes */
+ self->monitor = flatpak_installation_create_monitor (self->installation,
+ cancellable,
+ error);
+ if (self->monitor == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ self->changed_id =
+ g_signal_connect (self->monitor, "changed",
+ G_CALLBACK (gs_plugin_flatpak_changed_cb), self);
+
+ /* success */
+ return TRUE;
+}
+
+typedef struct {
+ GsPlugin *plugin;
+ GsApp *app;
+} GsFlatpakProgressHelper;
+
+static void
+gs_flatpak_progress_helper_free (GsFlatpakProgressHelper *phelper)
+{
+ g_object_unref (phelper->plugin);
+ if (phelper->app != NULL)
+ g_object_unref (phelper->app);
+ g_slice_free (GsFlatpakProgressHelper, phelper);
+}
+
+static GsFlatpakProgressHelper *
+gs_flatpak_progress_helper_new (GsPlugin *plugin, GsApp *app)
+{
+ GsFlatpakProgressHelper *phelper;
+ phelper = g_slice_new0 (GsFlatpakProgressHelper);
+ phelper->plugin = g_object_ref (plugin);
+ if (app != NULL)
+ phelper->app = g_object_ref (app);
+ return phelper;
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsFlatpakProgressHelper, gs_flatpak_progress_helper_free)
+
+static void
+gs_flatpak_progress_cb (const gchar *status,
+ guint progress,
+ gboolean estimating,
+ gpointer user_data)
+{
+ GsFlatpakProgressHelper *phelper = (GsFlatpakProgressHelper *) user_data;
+ GsPluginStatus plugin_status = GS_PLUGIN_STATUS_DOWNLOADING;
+
+ if (phelper->app != NULL) {
+ if (estimating)
+ gs_app_set_progress (phelper->app, GS_APP_PROGRESS_UNKNOWN);
+ else
+ gs_app_set_progress (phelper->app, progress);
+
+ switch (gs_app_get_state (phelper->app)) {
+ case AS_APP_STATE_INSTALLING:
+ plugin_status = GS_PLUGIN_STATUS_INSTALLING;
+ break;
+ case AS_APP_STATE_REMOVING:
+ plugin_status = GS_PLUGIN_STATUS_REMOVING;
+ break;
+ default:
+ break;
+ }
+ }
+ gs_plugin_status_update (phelper->plugin, phelper->app, plugin_status);
+}
+
+static gboolean
+gs_flatpak_refresh_appstream_remote (GsFlatpak *self,
+ const gchar *remote_name,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *str = NULL;
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (self->plugin));
+ g_autoptr(GsFlatpakProgressHelper) phelper = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* TRANSLATORS: status text when downloading new metadata */
+ str = g_strdup_printf (_("Getting flatpak metadata for %s…"), remote_name);
+ gs_app_set_summary_missing (app_dl, str);
+ gs_plugin_status_update (self->plugin, app_dl, GS_PLUGIN_STATUS_DOWNLOADING);
+
+ if (!flatpak_installation_update_remote_sync (self->installation,
+ remote_name,
+ cancellable,
+ &error_local)) {
+ g_debug ("Failed to update metadata for remote %s: %s\n",
+ remote_name, error_local->message);
+ gs_flatpak_error_convert (&error_local);
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ phelper = gs_flatpak_progress_helper_new (self->plugin, app_dl);
+ if (!flatpak_installation_update_appstream_full_sync (self->installation,
+ remote_name,
+ NULL, /* arch */
+ gs_flatpak_progress_cb,
+ phelper,
+ NULL, /* out_changed */
+ cancellable,
+ error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* success */
+ gs_app_set_progress (app_dl, 100);
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_refresh_appstream (GsFlatpak *self, guint cache_age,
+ GCancellable *cancellable, GError **error)
+{
+ gboolean ret;
+ g_autoptr(GPtrArray) xremotes = NULL;
+
+ /* get remotes */
+ xremotes = flatpak_installation_list_remotes (self->installation,
+ cancellable,
+ error);
+ if (xremotes == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < xremotes->len; i++) {
+ const gchar *remote_name;
+ guint tmp;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GFile) file_timestamp = NULL;
+ g_autofree gchar *appstream_fn = NULL;
+ FlatpakRemote *xremote = g_ptr_array_index (xremotes, i);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ /* not enabled */
+ if (flatpak_remote_get_disabled (xremote))
+ continue;
+
+ locker = g_mutex_locker_new (&self->broken_remotes_mutex);
+
+ /* skip known-broken repos */
+ remote_name = flatpak_remote_get_name (xremote);
+ if (g_hash_table_lookup (self->broken_remotes, remote_name) != NULL) {
+ g_debug ("skipping known broken remote: %s", remote_name);
+ continue;
+ }
+
+ /* is the timestamp new enough */
+ file_timestamp = flatpak_remote_get_appstream_timestamp (xremote, NULL);
+ tmp = gs_utils_get_file_age (file_timestamp);
+ if (tmp < cache_age) {
+ g_autofree gchar *fn = g_file_get_path (file_timestamp);
+ g_debug ("%s is only %u seconds old, so ignoring refresh",
+ fn, tmp);
+ continue;
+ }
+
+ /* download new data */
+ g_debug ("%s is %u seconds old, so downloading new data",
+ remote_name, tmp);
+ ret = gs_flatpak_refresh_appstream_remote (self,
+ remote_name,
+ cancellable,
+ &error_local);
+ if (!ret) {
+ g_autoptr(GsPluginEvent) event = NULL;
+ if (g_error_matches (error_local,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED)) {
+ g_debug ("Failed to get AppStream metadata: %s",
+ error_local->message);
+ /* don't try to fetch this again until refresh() */
+ g_hash_table_insert (self->broken_remotes,
+ g_strdup (remote_name),
+ GUINT_TO_POINTER (1));
+ continue;
+ }
+
+ /* allow the plugin loader to decide if this should be
+ * shown the user, possibly only for interactive jobs */
+ event = gs_plugin_event_new ();
+ gs_flatpak_error_convert (&error_local);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (self->plugin, event);
+ continue;
+ }
+
+ /* add the new AppStream repo to the shared silo */
+ file = flatpak_remote_get_appstream_dir (xremote, NULL);
+ appstream_fn = g_file_get_path (file);
+ g_debug ("using AppStream metadata found at: %s", appstream_fn);
+ }
+
+ /* ensure the AppStream silo is up to date */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+gs_flatpak_set_metadata_installed (GsFlatpak *self, GsApp *app,
+ FlatpakInstalledRef *xref)
+{
+#if FLATPAK_CHECK_VERSION(1,1,3)
+ const gchar *appdata_version;
+#endif
+ guint64 mtime;
+ guint64 size_installed;
+ g_autofree gchar *metadata_fn = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GFileInfo) info = NULL;
+
+ /* for all types */
+ gs_flatpak_set_metadata (self, app, FLATPAK_REF (xref));
+ if (gs_app_get_metadata_item (app, "GnomeSoftware::Creator") == NULL) {
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (self->plugin));
+ }
+
+ /* get the last time the app was updated */
+ metadata_fn = g_build_filename (flatpak_installed_ref_get_deploy_dir (xref),
+ "..",
+ "active",
+ "metadata",
+ NULL);
+ file = g_file_new_for_path (metadata_fn);
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ NULL, NULL);
+ if (info != NULL) {
+ mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ gs_app_set_install_date (app, mtime);
+ }
+
+ /* If it's a runtime, check if the main-app info should be set. Note that
+ * checking the app for AS_APP_KIND_RUNTIME is not good enough because it
+ * could be e.g. AS_APP_KIND_LOCALIZATION and still be a runtime from
+ * Flatpak's perspective.
+ */
+ if (gs_flatpak_app_get_ref_kind (app) == FLATPAK_REF_KIND_RUNTIME &&
+ gs_flatpak_app_get_main_app_ref_name (app) == NULL) {
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GKeyFile) metadata_file = NULL;
+ metadata_file = g_key_file_new ();
+ if (g_key_file_load_from_file (metadata_file, metadata_fn,
+ G_KEY_FILE_NONE, &error)) {
+ g_autofree gchar *main_app = g_key_file_get_string (metadata_file,
+ "ExtensionOf",
+ "ref", NULL);
+ if (main_app != NULL)
+ gs_flatpak_app_set_main_app_ref_name (app, main_app);
+ } else {
+ g_warning ("Error loading the metadata file for '%s': %s",
+ gs_app_get_unique_id (app), error->message);
+ }
+ }
+
+ /* this is faster than resolving */
+ if (gs_app_get_origin (app) == NULL)
+ gs_app_set_origin (app, flatpak_installed_ref_get_origin (xref));
+
+ /* this is faster than flatpak_installation_fetch_remote_size_sync() */
+ size_installed = flatpak_installed_ref_get_installed_size (xref);
+ if (size_installed != 0)
+ gs_app_set_size_installed (app, size_installed);
+
+#if FLATPAK_CHECK_VERSION(1,1,3)
+ appdata_version = flatpak_installed_ref_get_appdata_version (xref);
+ if (appdata_version != NULL)
+ gs_app_set_version (app, appdata_version);
+#endif
+}
+
+static GsApp *
+gs_flatpak_create_installed (GsFlatpak *self,
+ FlatpakInstalledRef *xref)
+{
+ g_autoptr(GsApp) app = NULL;
+ const gchar *origin;
+
+ g_return_val_if_fail (xref != NULL, NULL);
+
+ /* create new object */
+ origin = flatpak_installed_ref_get_origin (xref);
+ app = gs_flatpak_create_app (self, origin, FLATPAK_REF (xref));
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_flatpak_set_metadata_installed (self, app, xref);
+ return g_steal_pointer (&app);
+}
+
+gboolean
+gs_flatpak_add_installed (GsFlatpak *self, GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GPtrArray) xrefs = NULL;
+
+ /* get apps and runtimes */
+ xrefs = flatpak_installation_list_installed_refs (self->installation,
+ cancellable, error);
+ if (xrefs == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < xrefs->len; i++) {
+ FlatpakInstalledRef *xref = g_ptr_array_index (xrefs, i);
+ g_autoptr(GsApp) app = gs_flatpak_create_installed (self, xref);
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_add_sources (GsFlatpak *self, GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GPtrArray) xrefs = NULL;
+ g_autoptr(GPtrArray) xremotes = NULL;
+
+ /* refresh */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ /* get installed apps and runtimes */
+ xrefs = flatpak_installation_list_installed_refs (self->installation,
+ cancellable,
+ error);
+ if (xrefs == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* get available remotes */
+ xremotes = flatpak_installation_list_remotes (self->installation,
+ cancellable,
+ error);
+ if (xremotes == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < xremotes->len; i++) {
+ FlatpakRemote *xremote = g_ptr_array_index (xremotes, i);
+ g_autoptr(GsApp) app = NULL;
+
+ /* apps installed from bundles add their own remote that only
+ * can be used for updating that app only -- so hide them */
+ if (flatpak_remote_get_noenumerate (xremote))
+ continue;
+
+ /* create app */
+ app = gs_flatpak_create_source (self, xremote);
+ gs_app_list_add (list, app);
+
+ /* add related apps, i.e. what was installed from there */
+ for (guint j = 0; j < xrefs->len; j++) {
+ FlatpakInstalledRef *xref = g_ptr_array_index (xrefs, j);
+ g_autoptr(GsApp) related = NULL;
+
+ /* only apps */
+ if (flatpak_ref_get_kind (FLATPAK_REF (xref)) != FLATPAK_REF_KIND_APP)
+ continue;
+ if (g_strcmp0 (flatpak_installed_ref_get_origin (xref),
+ flatpak_remote_get_name (xremote)) != 0)
+ continue;
+ related = gs_flatpak_create_installed (self, xref);
+ gs_app_add_related (app, related);
+ }
+ }
+ return TRUE;
+}
+
+GsApp *
+gs_flatpak_find_source_by_url (GsFlatpak *self,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GPtrArray) xremotes = NULL;
+
+ g_return_val_if_fail (url != NULL, NULL);
+
+ xremotes = flatpak_installation_list_remotes (self->installation, cancellable, error);
+ if (xremotes == NULL)
+ return NULL;
+ for (guint i = 0; i < xremotes->len; i++) {
+ FlatpakRemote *xremote = g_ptr_array_index (xremotes, i);
+ g_autofree gchar *url_tmp = flatpak_remote_get_url (xremote);
+ if (g_strcmp0 (url, url_tmp) == 0)
+ return gs_flatpak_create_source (self, xremote);
+ }
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "cannot find %s", url);
+ return NULL;
+}
+
+/* transfer full */
+GsApp *
+gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref,
+ GCancellable *cancellable, GError **error)
+{
+ g_autoptr(GPtrArray) xremotes = NULL;
+ g_autoptr(GPtrArray) xrefs = NULL;
+
+ g_return_val_if_fail (ref != NULL, NULL);
+
+ /* get all the installed apps (no network I/O) */
+ xrefs = flatpak_installation_list_installed_refs (self->installation,
+ cancellable,
+ error);
+ if (xrefs == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+ for (guint i = 0; i < xrefs->len; i++) {
+ FlatpakInstalledRef *xref = g_ptr_array_index (xrefs, i);
+ g_autofree gchar *ref_tmp = flatpak_ref_format_ref (FLATPAK_REF (xref));
+ if (g_strcmp0 (ref, ref_tmp) == 0)
+ return gs_flatpak_create_installed (self, xref);
+ }
+
+ /* look at each remote xref */
+ xremotes = flatpak_installation_list_remotes (self->installation,
+ cancellable, error);
+ if (xremotes == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+ for (guint i = 0; i < xremotes->len; i++) {
+ FlatpakRemote *xremote = g_ptr_array_index (xremotes, i);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) refs_remote = NULL;
+
+ /* disabled */
+ if (flatpak_remote_get_disabled (xremote))
+ continue;
+ refs_remote = flatpak_installation_list_remote_refs_sync (self->installation,
+ flatpak_remote_get_name (xremote),
+ cancellable,
+ &error_local);
+ if (refs_remote == NULL) {
+ g_debug ("failed to list refs in '%s': %s",
+ flatpak_remote_get_name (xremote),
+ error_local->message);
+ continue;
+ }
+ for (guint j = 0; j < refs_remote->len; j++) {
+ FlatpakRef *xref = g_ptr_array_index (refs_remote, j);
+ g_autofree gchar *ref_tmp = flatpak_ref_format_ref (xref);
+ if (g_strcmp0 (ref, ref_tmp) == 0) {
+ const gchar *origin = flatpak_remote_get_name (xremote);
+ return gs_flatpak_create_app (self, origin, xref);
+ }
+ }
+ }
+
+ /* nothing found */
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "cannot find %s", ref);
+ return NULL;
+}
+
+static FlatpakRemote *
+gs_flatpak_create_new_remote (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *gpg_key;
+ const gchar *branch;
+ g_autoptr(FlatpakRemote) xremote = NULL;
+
+ /* create a new remote */
+ xremote = flatpak_remote_new (gs_app_get_id (app));
+ flatpak_remote_set_url (xremote, gs_flatpak_app_get_repo_url (app));
+ flatpak_remote_set_noenumerate (xremote, FALSE);
+ if (gs_app_get_summary (app) != NULL)
+ flatpak_remote_set_title (xremote, gs_app_get_summary (app));
+
+ /* decode GPG key if set */
+ gpg_key = gs_flatpak_app_get_repo_gpgkey (app);
+ if (gpg_key != NULL) {
+ gsize data_len = 0;
+ g_autofree guchar *data = NULL;
+ g_autoptr(GBytes) bytes = NULL;
+ data = g_base64_decode (gpg_key, &data_len);
+ bytes = g_bytes_new (data, data_len);
+ flatpak_remote_set_gpg_verify (xremote, TRUE);
+ flatpak_remote_set_gpg_key (xremote, bytes);
+ } else {
+ flatpak_remote_set_gpg_verify (xremote, FALSE);
+ }
+
+ /* default branch */
+ branch = gs_app_get_branch (app);
+ if (branch != NULL)
+ flatpak_remote_set_default_branch (xremote, branch);
+
+ return g_steal_pointer (&xremote);
+}
+
+gboolean
+gs_flatpak_app_install_source (GsFlatpak *self, GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakRemote) xremote = NULL;
+
+ xremote = flatpak_installation_get_remote_by_name (self->installation,
+ gs_app_get_id (app),
+ cancellable, NULL);
+ if (xremote != NULL) {
+ /* if the remote already exists, just enable it */
+ g_debug ("enabling existing remote %s", flatpak_remote_get_name (xremote));
+ flatpak_remote_set_disabled (xremote, FALSE);
+ } else {
+ /* create a new remote */
+ xremote = gs_flatpak_create_new_remote (self, app, cancellable, error);
+ }
+
+ /* install it */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ if (!flatpak_installation_modify_remote (self->installation,
+ xremote,
+ cancellable,
+ error)) {
+ gs_flatpak_error_convert (error);
+ g_prefix_error (error, "cannot modify remote: ");
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* invalidate cache */
+ g_rw_lock_reader_lock (&self->silo_lock);
+ if (self->silo != NULL)
+ xb_silo_invalidate (self->silo);
+ g_rw_lock_reader_unlock (&self->silo_lock);
+
+ /* success */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ return TRUE;
+}
+
+static GsApp *
+get_main_app_of_related (GsFlatpak *self,
+ GsApp *related_app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakInstalledRef) ref = NULL;
+ const gchar *ref_name;
+ g_auto(GStrv) app_tokens = NULL;
+
+ ref_name = gs_flatpak_app_get_main_app_ref_name (related_app);
+ if (ref_name == NULL) {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+ "%s doesn't have a main app set to it.",
+ gs_app_get_unique_id (related_app));
+ return NULL;
+ }
+
+ app_tokens = g_strsplit (ref_name, "/", -1);
+ if (g_strv_length (app_tokens) != 4) {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA,
+ "The main app of %s has an invalid name: %s",
+ gs_app_get_unique_id (related_app), ref_name);
+ return NULL;
+ }
+
+ /* this function only returns G_IO_ERROR_NOT_FOUND when the metadata file
+ * is missing, but if that's the case then things should have broken before
+ * this point */
+ ref = flatpak_installation_get_installed_ref (self->installation,
+ FLATPAK_REF_KIND_APP,
+ app_tokens[1],
+ app_tokens[2],
+ app_tokens[3],
+ cancellable,
+ error);
+ if (ref == NULL)
+ return NULL;
+
+ return gs_flatpak_create_installed (self, ref);
+}
+
+static GsApp *
+get_real_app_for_update (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsApp *main_app = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ if (gs_flatpak_app_get_ref_kind (app) == FLATPAK_REF_KIND_RUNTIME)
+ main_app = get_main_app_of_related (self, app, cancellable, &error_local);
+
+ if (main_app == NULL) {
+ /* not all runtimes are extensions, and in that case we get the
+ * not-found error, so we only report other types of errors */
+ if (error_local != NULL &&
+ !g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) {
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+
+ main_app = g_object_ref (app);
+ } else {
+ g_debug ("Related extension app %s of main app %s is updatable, so "
+ "setting the latter's state instead.", gs_app_get_unique_id (app),
+ gs_app_get_unique_id (main_app));
+ gs_app_set_state (main_app, AS_APP_STATE_UPDATABLE_LIVE);
+ }
+
+ return main_app;
+}
+
+gboolean
+gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GPtrArray) xrefs = NULL;
+
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ /* get all the updatable apps and runtimes */
+ xrefs = flatpak_installation_list_installed_refs_for_update (self->installation,
+ cancellable,
+ error);
+ if (xrefs == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* look at each installed xref */
+ for (guint i = 0; i < xrefs->len; i++) {
+ FlatpakInstalledRef *xref = g_ptr_array_index (xrefs, i);
+ const gchar *commit;
+ const gchar *latest_commit;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsApp) main_app = NULL;
+
+ /* check the application has already been downloaded */
+ commit = flatpak_ref_get_commit (FLATPAK_REF (xref));
+ latest_commit = flatpak_installed_ref_get_latest_commit (xref);
+ if (latest_commit == NULL) {
+ g_debug ("could not get latest commit for %s",
+ flatpak_ref_get_name (FLATPAK_REF (xref)));
+ continue;
+ }
+
+ app = gs_flatpak_create_installed (self, xref);
+ main_app = get_real_app_for_update (self, app, cancellable, &error_local);
+ if (main_app == NULL) {
+ g_debug ("Couldn't get the main app for updatable app extension %s: "
+ "%s; adding the app itself to the updates list...",
+ gs_app_get_unique_id (app), error_local->message);
+ g_clear_error (&error_local);
+ main_app = g_object_ref (app);
+ }
+
+ /* if for some reason the app is already getting updated, then
+ * don't change its state */
+ if (gs_app_get_state (main_app) != AS_APP_STATE_INSTALLING)
+ gs_app_set_state (main_app, AS_APP_STATE_UPDATABLE_LIVE);
+
+ /* set updatable state on the extension too, as it will have
+ * its state updated to installing then installed later on */
+ if (gs_app_get_state (app) != AS_APP_STATE_INSTALLING)
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+
+ /* already downloaded */
+ if (g_strcmp0 (commit, latest_commit) != 0) {
+ g_debug ("%s has a downloaded update %s->%s",
+ flatpak_ref_get_name (FLATPAK_REF (xref)),
+ commit, latest_commit);
+ gs_app_set_update_details (main_app, NULL);
+ gs_app_set_update_version (main_app, NULL);
+ gs_app_set_update_urgency (main_app, AS_URGENCY_KIND_UNKNOWN);
+ gs_app_set_size_download (main_app, 0);
+ gs_app_list_add (list, main_app);
+
+ /* needs download */
+ } else {
+ guint64 download_size = 0;
+ g_debug ("%s needs update",
+ flatpak_ref_get_name (FLATPAK_REF (xref)));
+
+ /* get the current download size */
+ if (gs_app_get_size_download (main_app) == 0) {
+ if (!flatpak_installation_fetch_remote_size_sync (self->installation,
+ gs_app_get_origin (app),
+ FLATPAK_REF (xref),
+ &download_size,
+ NULL,
+ cancellable,
+ &error_local)) {
+ g_warning ("failed to get download size: %s",
+ error_local->message);
+ g_clear_error (&error_local);
+ gs_app_set_size_download (main_app, GS_APP_SIZE_UNKNOWABLE);
+ } else {
+ gs_app_set_size_download (main_app, download_size);
+ }
+ }
+ }
+ gs_flatpak_set_update_permissions (self, main_app, xref);
+ gs_app_list_add (list, main_app);
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_refresh (GsFlatpak *self,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* give all the repos a second chance */
+ g_mutex_lock (&self->broken_remotes_mutex);
+ g_hash_table_remove_all (self->broken_remotes);
+ g_mutex_unlock (&self->broken_remotes_mutex);
+
+ /* manually drop the cache */
+ if (!flatpak_installation_drop_caches (self->installation,
+ cancellable,
+ error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* drop the installed refs cache */
+ g_mutex_lock (&self->installed_refs_mutex);
+ g_clear_pointer (&self->installed_refs, g_ptr_array_unref);
+ g_mutex_unlock (&self->installed_refs_mutex);
+
+ /* manually do this in case we created the first appstream file */
+ g_rw_lock_reader_lock (&self->silo_lock);
+ if (self->silo != NULL)
+ xb_silo_invalidate (self->silo);
+ g_rw_lock_reader_unlock (&self->silo_lock);
+
+ /* update AppStream metadata */
+ if (!gs_flatpak_refresh_appstream (self, cache_age, cancellable, error))
+ return FALSE;
+
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_refine_item_origin_hostname (GsFlatpak *self, GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakRemote) xremote = NULL;
+ g_autofree gchar *url = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* already set */
+ if (gs_app_get_origin_hostname (app) != NULL)
+ return TRUE;
+
+ /* no origin */
+ if (gs_app_get_origin (app) == NULL)
+ return TRUE;
+
+ /* get the remote */
+ xremote = flatpak_installation_get_remote_by_name (self->installation,
+ gs_app_get_origin (app),
+ cancellable,
+ &error_local);
+ if (xremote == NULL) {
+ if (g_error_matches (error_local,
+ FLATPAK_ERROR,
+ FLATPAK_ERROR_REMOTE_NOT_FOUND)) {
+ /* if the user deletes the -origin remote for a locally
+ * installed flatpakref file then we should just show
+ * 'localhost' and not return an error */
+ gs_app_set_origin_hostname (app, "");
+ return TRUE;
+ }
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ url = flatpak_remote_get_url (xremote);
+ if (url == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no URL for remote %s",
+ flatpak_remote_get_name (xremote));
+ return FALSE;
+ }
+ gs_app_set_origin_hostname (app, url);
+ return TRUE;
+}
+
+static gboolean
+gs_refine_item_metadata (GsFlatpak *self, GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakRef) xref = NULL;
+
+ /* already set */
+ if (gs_flatpak_app_get_ref_name (app) != NULL)
+ return TRUE;
+
+ /* not a valid type */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return TRUE;
+
+ /* AppStream sets the source to appname/arch/branch, if this isn't set
+ * we can't break out the fields */
+ if (gs_app_get_source_default (app) == NULL) {
+ g_autofree gchar *tmp = gs_app_to_string (app);
+ g_warning ("no source set by appstream for %s: %s",
+ gs_plugin_get_name (self->plugin), tmp);
+ return TRUE;
+ }
+
+ /* parse the ref */
+ xref = flatpak_ref_parse (gs_app_get_source_default (app), error);
+ if (xref == NULL) {
+ gs_flatpak_error_convert (error);
+ g_prefix_error (error, "failed to parse '%s': ",
+ gs_app_get_source_default (app));
+ return FALSE;
+ }
+ gs_flatpak_set_metadata (self, app, xref);
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_refine_item_origin (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *ref_display = NULL;
+ g_autoptr(GPtrArray) xremotes = NULL;
+
+ /* already set */
+ if (gs_app_get_origin (app) != NULL)
+ return TRUE;
+
+ /* not applicable */
+ if (gs_app_get_state (app) == AS_APP_STATE_AVAILABLE_LOCAL)
+ return TRUE;
+
+ /* ensure metadata exists */
+ if (!gs_refine_item_metadata (self, app, cancellable, error))
+ return FALSE;
+
+ /* find list of remotes */
+ ref_display = gs_flatpak_app_get_ref_display (app);
+ g_debug ("looking for a remote for %s", ref_display);
+ xremotes = flatpak_installation_list_remotes (self->installation,
+ cancellable, error);
+ if (xremotes == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < xremotes->len; i++) {
+ const gchar *remote_name;
+ FlatpakRemote *xremote = g_ptr_array_index (xremotes, i);
+ g_autoptr(FlatpakRemoteRef) xref = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* not enabled */
+ if (flatpak_remote_get_disabled (xremote))
+ continue;
+
+ /* sync */
+ remote_name = flatpak_remote_get_name (xremote);
+ g_debug ("looking at remote %s", remote_name);
+ xref = flatpak_installation_fetch_remote_ref_sync (self->installation,
+ remote_name,
+ gs_flatpak_app_get_ref_kind (app),
+ gs_flatpak_app_get_ref_name (app),
+ gs_flatpak_app_get_ref_arch (app),
+ gs_app_get_branch (app),
+ cancellable,
+ &error_local);
+ if (xref != NULL) {
+ g_debug ("found remote %s", remote_name);
+ gs_app_set_origin (app, remote_name);
+ gs_flatpak_app_set_commit (app, flatpak_ref_get_commit (FLATPAK_REF (xref)));
+ gs_plugin_refine_item_scope (self, app);
+ return TRUE;
+ }
+ g_debug ("%s failed to find remote %s: %s",
+ ref_display, remote_name, error_local->message);
+ }
+
+ /* not found */
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "%s not found in any remote",
+ ref_display);
+ return FALSE;
+}
+
+static FlatpakRef *
+gs_flatpak_create_fake_ref (GsApp *app, GError **error)
+{
+ FlatpakRef *xref;
+ g_autofree gchar *id = NULL;
+ id = g_strdup_printf ("%s/%s/%s/%s",
+ gs_flatpak_app_get_ref_kind_as_str (app),
+ gs_flatpak_app_get_ref_name (app),
+ gs_flatpak_app_get_ref_arch (app),
+ gs_app_get_branch (app));
+ xref = flatpak_ref_parse (id, error);
+ if (xref == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+ return xref;
+}
+
+/* the _unlocked() version doesn't call gs_flatpak_rescan_appstream_store,
+ * in order to avoid taking the writer lock on self->silo_lock */
+static gboolean
+gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakInstalledRef) ref = NULL;
+ g_autoptr(GPtrArray) installed_refs = NULL;
+
+ /* already found */
+ if (gs_app_get_state (app) != AS_APP_STATE_UNKNOWN)
+ return TRUE;
+
+ /* need broken out metadata */
+ if (!gs_refine_item_metadata (self, app, cancellable, error))
+ return FALSE;
+
+ /* find the app using the origin and the ID */
+ g_mutex_lock (&self->installed_refs_mutex);
+
+ if (self->installed_refs == NULL) {
+ self->installed_refs = flatpak_installation_list_installed_refs (self->installation,
+ cancellable, error);
+
+ if (self->installed_refs == NULL) {
+ g_mutex_unlock (&self->installed_refs_mutex);
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ installed_refs = g_ptr_array_ref (self->installed_refs);
+ g_mutex_unlock (&self->installed_refs_mutex);
+
+ for (guint i = 0; i < installed_refs->len; i++) {
+ FlatpakInstalledRef *ref_tmp = g_ptr_array_index (installed_refs, i);
+ const gchar *origin = flatpak_installed_ref_get_origin (ref_tmp);
+ const gchar *name = flatpak_ref_get_name (FLATPAK_REF (ref_tmp));
+ const gchar *arch = flatpak_ref_get_arch (FLATPAK_REF (ref_tmp));
+ const gchar *branch = flatpak_ref_get_branch (FLATPAK_REF (ref_tmp));
+ if (g_strcmp0 (origin, gs_app_get_origin (app)) == 0 &&
+ g_strcmp0 (name, gs_flatpak_app_get_ref_name (app)) == 0 &&
+ g_strcmp0 (arch, gs_flatpak_app_get_ref_arch (app)) == 0 &&
+ g_strcmp0 (branch, gs_app_get_branch (app)) == 0) {
+ ref = g_object_ref (ref_tmp);
+ break;
+ }
+ }
+ if (ref != NULL) {
+ g_debug ("marking %s as installed with flatpak",
+ gs_app_get_unique_id (app));
+ gs_flatpak_set_metadata_installed (self, app, ref);
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ /* flatpak only allows one installed app to be launchable */
+ if (flatpak_installed_ref_get_is_current (ref)) {
+ gs_app_remove_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ } else {
+ g_debug ("%s is not current, and therefore not launchable",
+ gs_app_get_unique_id (app));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ }
+ return TRUE;
+ }
+
+ /* ensure origin set */
+ if (!gs_plugin_refine_item_origin (self, app, cancellable, error))
+ return FALSE;
+
+ /* anything not installed just check the remote is still present */
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN &&
+ gs_app_get_origin (app) != NULL) {
+ g_autoptr(FlatpakRemote) xremote = NULL;
+ xremote = flatpak_installation_get_remote_by_name (self->installation,
+ gs_app_get_origin (app),
+ cancellable, NULL);
+ if (xremote != NULL) {
+ if (flatpak_remote_get_disabled (xremote)) {
+ g_debug ("%s is available with flatpak "
+ "but %s is disabled",
+ gs_app_get_unique_id (app),
+ flatpak_remote_get_name (xremote));
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+ } else {
+ g_debug ("marking %s as available with flatpak",
+ gs_app_get_unique_id (app));
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ }
+ } else {
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ g_debug ("failed to find %s remote %s for %s",
+ self->id,
+ gs_app_get_origin (app),
+ gs_app_get_unique_id (app));
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_refine_app_state (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ return gs_flatpak_refine_app_state_unlocked (self, app, cancellable, error);
+}
+
+static GsApp *
+gs_flatpak_create_runtime (GsFlatpak *self, GsApp *parent, const gchar *runtime)
+{
+ g_autofree gchar *source = NULL;
+ g_auto(GStrv) split = NULL;
+ g_autoptr(GsApp) app_cache = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* get the name/arch/branch */
+ split = g_strsplit (runtime, "/", -1);
+ if (g_strv_length (split) != 3)
+ return NULL;
+
+ /* create the complete GsApp from the single string */
+ app = gs_app_new (split[0]);
+ gs_flatpak_claim_app (self, app);
+ source = g_strdup_printf ("runtime/%s", runtime);
+ gs_app_add_source (app, source);
+ gs_app_set_kind (app, AS_APP_KIND_RUNTIME);
+ gs_app_set_branch (app, split[2]);
+
+ /* search in the cache */
+ app_cache = gs_plugin_cache_lookup (self->plugin, gs_app_get_unique_id (app));
+ if (app_cache != NULL) {
+ /* since the cached runtime can have been created somewhere else
+ * (we're using a global cache), we need to make sure that a
+ * source is set */
+ if (gs_app_get_source_default (app_cache) == NULL)
+ gs_app_add_source (app_cache, source);
+ return g_steal_pointer (&app_cache);
+ }
+
+ /* if the app is per-user we can also use the installed system runtime */
+ if (gs_app_get_scope (parent) == AS_APP_SCOPE_USER) {
+ gs_app_set_scope (app, AS_APP_SCOPE_UNKNOWN);
+ app_cache = gs_plugin_cache_lookup (self->plugin, gs_app_get_unique_id (app));
+ if (app_cache != NULL)
+ return g_steal_pointer (&app_cache);
+ }
+
+ /* set superclassed app properties */
+ gs_flatpak_app_set_ref_kind (app, FLATPAK_REF_KIND_RUNTIME);
+ gs_flatpak_app_set_ref_name (app, split[0]);
+ gs_flatpak_app_set_ref_arch (app, split[1]);
+
+ /* save in the cache */
+ gs_plugin_cache_add (self->plugin, NULL, app);
+ return g_steal_pointer (&app);
+}
+
+static gboolean
+gs_flatpak_set_app_metadata (GsFlatpak *self,
+ GsApp *app,
+ const gchar *data,
+ gsize length,
+ GError **error)
+{
+ gboolean secure = TRUE;
+ g_autofree gchar *name = NULL;
+ g_autofree gchar *runtime = NULL;
+ g_autoptr(GKeyFile) kf = NULL;
+ g_autoptr(GsApp) app_runtime = NULL;
+ g_auto(GStrv) shared = NULL;
+ g_auto(GStrv) sockets = NULL;
+ g_auto(GStrv) filesystems = NULL;
+
+ kf = g_key_file_new ();
+ if (!g_key_file_load_from_data (kf, data, length, G_KEY_FILE_NONE, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ name = g_key_file_get_string (kf, "Application", "name", error);
+ if (name == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ gs_flatpak_app_set_ref_name (app, name);
+ runtime = g_key_file_get_string (kf, "Application", "runtime", error);
+ if (runtime == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ shared = g_key_file_get_string_list (kf, "Context", "shared", NULL, NULL);
+ if (shared != NULL) {
+ /* SHM isn't secure enough */
+ if (g_strv_contains ((const gchar * const *) shared, "ipc"))
+ secure = FALSE;
+ }
+ sockets = g_key_file_get_string_list (kf, "Context", "sockets", NULL, NULL);
+ if (sockets != NULL) {
+ /* X11 isn't secure enough */
+ if (g_strv_contains ((const gchar * const *) sockets, "x11"))
+ secure = FALSE;
+ }
+ filesystems = g_key_file_get_string_list (kf, "Context", "filesystems", NULL, NULL);
+ if (filesystems != NULL) {
+ /* secure apps should be using portals */
+ if (g_strv_contains ((const gchar * const *) filesystems, "home"))
+ secure = FALSE;
+ }
+
+ gs_app_set_permissions (app, perms_from_metadata (kf));
+ /* this is actually quite hard to achieve */
+ if (secure)
+ gs_app_add_kudo (app, GS_APP_KUDO_SANDBOXED_SECURE);
+
+ /* create runtime */
+ app_runtime = gs_flatpak_create_runtime (self, app, runtime);
+ if (app_runtime != NULL) {
+ gs_plugin_refine_item_scope (self, app_runtime);
+ gs_app_set_runtime (app, app_runtime);
+ }
+
+ /* we always get this, but it's a low bar... */
+ gs_app_add_kudo (app, GS_APP_KUDO_SANDBOXED);
+
+ return TRUE;
+}
+
+static GBytes *
+gs_flatpak_fetch_remote_metadata (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GBytes) data = NULL;
+ g_autoptr(FlatpakRef) xref = NULL;
+
+ /* no origin */
+ if (gs_app_get_origin (app) == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no origin set when getting metadata for %s",
+ gs_app_get_unique_id (app));
+ return NULL;
+ }
+
+ /* fetch from the server */
+ xref = gs_flatpak_create_fake_ref (app, error);
+ if (xref == NULL)
+ return NULL;
+ data = flatpak_installation_fetch_remote_metadata_sync (self->installation,
+ gs_app_get_origin (app),
+ xref,
+ cancellable,
+ error);
+ if (data == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+ return g_steal_pointer (&data);
+}
+
+static gboolean
+gs_plugin_refine_item_metadata (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *str;
+ gsize len = 0;
+ g_autofree gchar *contents = NULL;
+ g_autofree gchar *installation_path_str = NULL;
+ g_autofree gchar *install_path = NULL;
+ g_autoptr(GBytes) data = NULL;
+ g_autoptr(GFile) installation_path = NULL;
+
+ /* not applicable */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return TRUE;
+ if (gs_flatpak_app_get_ref_kind (app) != FLATPAK_REF_KIND_APP)
+ return TRUE;
+
+ /* already done */
+ if (gs_app_has_kudo (app, GS_APP_KUDO_SANDBOXED))
+ return TRUE;
+
+ /* this is quicker than doing network IO */
+ installation_path = flatpak_installation_get_path (self->installation);
+ installation_path_str = g_file_get_path (installation_path);
+ install_path = g_build_filename (installation_path_str,
+ gs_flatpak_app_get_ref_kind_as_str (app),
+ gs_flatpak_app_get_ref_name (app),
+ gs_flatpak_app_get_ref_arch (app),
+ gs_app_get_branch (app),
+ "active",
+ "metadata",
+ NULL);
+ if (g_file_test (install_path, G_FILE_TEST_EXISTS)) {
+ if (!g_file_get_contents (install_path, &contents, &len, error))
+ return FALSE;
+ str = contents;
+ } else {
+ data = gs_flatpak_fetch_remote_metadata (self, app, cancellable,
+ error);
+ if (data == NULL)
+ return FALSE;
+ str = g_bytes_get_data (data, &len);
+ }
+
+ /* parse key file */
+ if (!gs_flatpak_set_app_metadata (self, app, str, len, error))
+ return FALSE;
+ return TRUE;
+}
+
+static FlatpakInstalledRef *
+gs_flatpak_get_installed_ref (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ FlatpakInstalledRef *ref;
+ ref = flatpak_installation_get_installed_ref (self->installation,
+ gs_flatpak_app_get_ref_kind (app),
+ gs_flatpak_app_get_ref_name (app),
+ gs_flatpak_app_get_ref_arch (app),
+ gs_app_get_branch (app),
+ cancellable,
+ error);
+ if (ref == NULL)
+ gs_flatpak_error_convert (error);
+ return ref;
+}
+
+static gboolean
+gs_plugin_refine_item_size (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+ guint64 download_size = GS_APP_SIZE_UNKNOWABLE;
+ guint64 installed_size = GS_APP_SIZE_UNKNOWABLE;
+
+ /* not applicable */
+ if (gs_app_get_state (app) == AS_APP_STATE_AVAILABLE_LOCAL)
+ return TRUE;
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return TRUE;
+
+ /* already set */
+ if (gs_app_is_installed (app)) {
+ /* only care about the installed size if the app is installed */
+ if (gs_app_get_size_installed (app) > 0)
+ return TRUE;
+ } else {
+ if (gs_app_get_size_installed (app) > 0 &&
+ gs_app_get_size_download (app) > 0)
+ return TRUE;
+ }
+
+ /* need runtime */
+ if (!gs_plugin_refine_item_metadata (self, app, cancellable, error))
+ return FALSE;
+
+ /* calculate the platform size too if the app is not installed */
+ if (gs_app_get_state (app) == AS_APP_STATE_AVAILABLE &&
+ gs_flatpak_app_get_ref_kind (app) == FLATPAK_REF_KIND_APP) {
+ GsApp *app_runtime;
+
+ /* is the app_runtime already installed? */
+ app_runtime = gs_app_get_runtime (app);
+ if (!gs_flatpak_refine_app_state_unlocked (self,
+ app_runtime,
+ cancellable,
+ error))
+ return FALSE;
+ if (gs_app_get_state (app_runtime) == AS_APP_STATE_INSTALLED) {
+ g_debug ("runtime %s is already installed, so not adding size",
+ gs_app_get_unique_id (app_runtime));
+ } else {
+ if (!gs_plugin_refine_item_size (self,
+ app_runtime,
+ cancellable,
+ error))
+ return FALSE;
+ }
+ }
+
+ /* just get the size of the app */
+ if (!gs_plugin_refine_item_origin (self, app,
+ cancellable, error))
+ return FALSE;
+
+ /* if the app is installed we use the ref to fetch the installed size
+ * and ignore the download size as this is faster */
+ if (gs_app_is_installed (app)) {
+ g_autoptr(FlatpakInstalledRef) xref = NULL;
+ xref = gs_flatpak_get_installed_ref (self, app, cancellable, error);
+ if (xref == NULL)
+ return FALSE;
+ installed_size = flatpak_installed_ref_get_installed_size (xref);
+ if (installed_size == 0)
+ installed_size = GS_APP_SIZE_UNKNOWABLE;
+ } else {
+ g_autoptr(FlatpakRef) xref = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* no origin */
+ if (gs_app_get_origin (app) == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no origin set for %s",
+ gs_app_get_unique_id (app));
+ return FALSE;
+ }
+ xref = gs_flatpak_create_fake_ref (app, error);
+ if (xref == NULL)
+ return FALSE;
+ ret = flatpak_installation_fetch_remote_size_sync (self->installation,
+ gs_app_get_origin (app),
+ xref,
+ &download_size,
+ &installed_size,
+ cancellable,
+ &error_local);
+
+ if (!ret) {
+ g_warning ("libflatpak failed to return application "
+ "size: %s", error_local->message);
+ g_clear_error (&error_local);
+ }
+ }
+
+ gs_app_set_size_installed (app, installed_size);
+ gs_app_set_size_download (app, download_size);
+
+ return TRUE;
+}
+
+static void
+gs_flatpak_refine_appstream_release (XbNode *component, GsApp *app)
+{
+ const gchar *version;
+
+ /* get first release */
+ version = xb_node_query_attr (component, "releases/release", "version", NULL);
+ if (version == NULL)
+ return;
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ gs_app_set_version (app, version);
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ gs_app_set_update_version (app, version);
+ break;
+ default:
+ g_debug ("%s is not installed, so ignoring version of %s",
+ gs_app_get_unique_id (app), version);
+ break;
+ }
+}
+
+/* This function is like gs_flatpak_refine_appstream(), but takes gzip
+ * compressed appstream data as a GBytes and assumes they are already uniquely
+ * tied to the app (and therefore app ID alone can be used to find the right
+ * component).
+ */
+static gboolean
+gs_flatpak_refine_appstream_from_bytes (GsFlatpak *self,
+ GsApp *app,
+ const char *origin, /* (nullable) */
+ FlatpakInstalledRef *installed_ref, /* (nullable) */
+ GBytes *appstream_gz,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *const *locales = g_get_language_names ();
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(XbBuilder) builder = xb_builder_new ();
+ g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+ g_autoptr(XbNode) component_node = NULL;
+ g_autoptr(XbNode) n = NULL;
+ g_autoptr(XbSilo) silo = NULL;
+ g_autoptr(XbBuilderFixup) bundle_fixup = NULL;
+ g_autoptr(GBytes) appstream = NULL;
+ g_autoptr(GInputStream) stream_data = NULL;
+ g_autoptr(GInputStream) stream_gz = NULL;
+ g_autoptr(GZlibDecompressor) decompressor = NULL;
+
+ /* add current locales */
+ for (guint i = 0; locales[i] != NULL; i++)
+ xb_builder_add_locale (builder, locales[i]);
+
+ /* decompress data */
+ decompressor = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP);
+ stream_gz = g_memory_input_stream_new_from_bytes (appstream_gz);
+ if (stream_gz == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "unable to decompress appstream data");
+ return FALSE;
+ }
+ stream_data = g_converter_input_stream_new (stream_gz,
+ G_CONVERTER (decompressor));
+
+ appstream = g_input_stream_read_bytes (stream_data,
+ 0x100000, /* 1Mb */
+ cancellable,
+ error);
+ if (appstream == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* build silo */
+ if (!xb_builder_source_load_bytes (source, appstream,
+ XB_BUILDER_SOURCE_FLAG_NONE,
+ error))
+ return FALSE;
+
+ /* Appdata from flatpak_installed_ref_load_appdata() may be missing the
+ * <bundle> tag but for this function we know it's the right component.
+ */
+ bundle_fixup = xb_builder_fixup_new ("AddBundle",
+ gs_flatpak_add_bundle_tag_cb,
+ gs_flatpak_app_get_ref_display (app), g_free);
+ xb_builder_fixup_set_max_depth (bundle_fixup, 2);
+ xb_builder_source_add_fixup (source, bundle_fixup);
+
+ fixup_flatpak_appstream_xml (source, origin);
+
+ /* add metadata */
+ if (installed_ref != NULL) {
+ g_autoptr(XbBuilderNode) info = NULL;
+ g_autofree char *icon_prefix = NULL;
+
+ info = xb_builder_node_insert (NULL, "info", NULL);
+ xb_builder_node_insert_text (info, "scope", as_app_scope_to_string (self->scope), NULL);
+ icon_prefix = g_build_filename (flatpak_installed_ref_get_deploy_dir (installed_ref),
+ "files", "share", "app-info", "icons", "flatpak", NULL);
+ xb_builder_node_insert_text (info, "icon-prefix", icon_prefix, NULL);
+ xb_builder_source_set_info (source, info);
+ }
+
+ xb_builder_import_source (builder, source);
+ silo = xb_builder_compile (builder,
+ XB_BUILDER_COMPILE_FLAG_SINGLE_LANG,
+ cancellable,
+ error);
+ if (silo == NULL)
+ return FALSE;
+ if (g_getenv ("GS_XMLB_VERBOSE") != NULL) {
+ g_autofree gchar *xml = NULL;
+ xml = xb_silo_export (silo,
+ XB_NODE_EXPORT_FLAG_FORMAT_INDENT |
+ XB_NODE_EXPORT_FLAG_FORMAT_MULTILINE,
+ NULL);
+ g_debug ("showing AppStream data: %s", xml);
+ }
+
+ /* check for sanity */
+ n = xb_silo_query_first (silo, "components/component", NULL);
+ if (n == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no apps found in AppStream data");
+ return FALSE;
+ }
+
+ /* find app */
+ xpath = g_strdup_printf ("components/component/id[text()='%s']/..",
+ gs_flatpak_app_get_ref_name (app));
+ component_node = xb_silo_query_first (silo, xpath, NULL);
+ if (component_node == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "application %s not found",
+ gs_flatpak_app_get_ref_name (app));
+ return FALSE;
+ }
+
+ /* copy details from AppStream to app */
+ if (!gs_appstream_refine_app (self->plugin, app, silo, component_node, flags, error))
+ return FALSE;
+
+ /* use the default release as the version number */
+ gs_flatpak_refine_appstream_release (component_node, app);
+
+ /* save the silo so it can be used for searches */
+ {
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&self->app_silos_mutex);
+ g_hash_table_replace (self->app_silos,
+ gs_flatpak_app_get_ref_display (app),
+ g_steal_pointer (&silo));
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gs_flatpak_refine_appstream (GsFlatpak *self,
+ GsApp *app,
+ XbSilo *silo,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *origin = gs_app_get_origin (app);
+ const gchar *source = gs_app_get_source_default (app);
+ g_autofree gchar *source_safe = NULL;
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(XbNode) component = NULL;
+
+ if (origin == NULL || source == NULL || gs_flatpak_app_get_ref_name (app) == NULL)
+ return TRUE;
+
+ /* find using source and origin */
+ source_safe = xb_string_escape (source);
+ xpath = g_strdup_printf ("components[@origin='%s']/component/bundle[@type='flatpak'][text()='%s']/..",
+ origin, source_safe);
+ component = xb_silo_query_first (silo, xpath, &error_local);
+ if (component == NULL) {
+ g_autoptr(FlatpakInstalledRef) installed_ref = NULL;
+ g_autoptr(GBytes) appstream_gz = NULL;
+
+ g_debug ("no match for %s: %s", xpath, error_local->message);
+ /* For apps installed from .flatpak bundles there may not be any remote
+ * appstream data in @silo for it, so use the appstream data from
+ * within the app.
+ */
+ installed_ref = flatpak_installation_get_installed_ref (self->installation,
+ gs_flatpak_app_get_ref_kind (app),
+ gs_flatpak_app_get_ref_name (app),
+ gs_flatpak_app_get_ref_arch (app),
+ gs_app_get_branch (app),
+ NULL, NULL);
+ if (installed_ref == NULL)
+ return TRUE; /* the app may not be installed */
+
+#if FLATPAK_CHECK_VERSION(1,1,2)
+ appstream_gz = flatpak_installed_ref_load_appdata (installed_ref, NULL, NULL);
+#endif
+ if (appstream_gz == NULL)
+ return TRUE;
+
+ g_debug ("using installed appdata for %s", gs_flatpak_app_get_ref_name (app));
+ return gs_flatpak_refine_appstream_from_bytes (self,
+ app,
+ flatpak_installed_ref_get_origin (installed_ref),
+ installed_ref,
+ appstream_gz,
+ flags,
+ cancellable, error);
+ }
+
+ if (!gs_appstream_refine_app (self->plugin, app, silo, component, flags, error))
+ return FALSE;
+
+ /* use the default release as the version number */
+ gs_flatpak_refine_appstream_release (component, app);
+ return TRUE;
+}
+
+/* the _unlocked() version doesn't call gs_flatpak_rescan_appstream_store,
+ * in order to avoid taking the writer lock on self->silo_lock */
+static gboolean
+gs_flatpak_refine_app_unlocked (GsFlatpak *self,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ AsAppState old_state = gs_app_get_state (app);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ /* not us */
+ if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_FLATPAK)
+ return TRUE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+
+ /* always do AppStream properties */
+ if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, cancellable, error))
+ return FALSE;
+
+ /* AppStream sets the source to appname/arch/branch */
+ if (!gs_refine_item_metadata (self, app, cancellable, error)) {
+ g_prefix_error (error, "failed to get metadata: ");
+ return FALSE;
+ }
+
+ /* check the installed state */
+ if (!gs_flatpak_refine_app_state_unlocked (self, app, cancellable, error)) {
+ g_prefix_error (error, "failed to get state: ");
+ return FALSE;
+ }
+
+ /* scope is fast, do unconditionally */
+ if (gs_app_get_state (app) != AS_APP_STATE_AVAILABLE_LOCAL)
+ gs_plugin_refine_item_scope (self, app);
+
+ /* if the state was changed, perhaps set the version from the release */
+ if (old_state != gs_app_get_state (app)) {
+ if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, cancellable, error))
+ return FALSE;
+ }
+
+ /* version fallback */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION) {
+ if (gs_app_get_version (app) == NULL) {
+ const gchar *branch;
+ branch = gs_app_get_branch (app);
+ gs_app_set_version (app, branch);
+ }
+ }
+
+ /* size */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE) {
+ g_autoptr(GError) error_local = NULL;
+ if (!gs_plugin_refine_item_size (self, app,
+ cancellable, &error_local)) {
+ if (!gs_plugin_get_network_available (self->plugin) &&
+ g_error_matches (error_local, GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NO_NETWORK)) {
+ g_debug ("failed to get size while "
+ "refining app %s: %s",
+ gs_app_get_unique_id (app),
+ error_local->message);
+ } else {
+ g_prefix_error (&error_local, "failed to get size: ");
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ }
+ }
+
+ /* origin-hostname */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME) {
+ if (!gs_plugin_refine_item_origin_hostname (self, app,
+ cancellable,
+ error)) {
+ g_prefix_error (error, "failed to get origin-hostname: ");
+ return FALSE;
+ }
+ }
+
+ /* permissions */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME ||
+ flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS) {
+ g_autoptr(GError) error_local = NULL;
+ if (!gs_plugin_refine_item_metadata (self, app,
+ cancellable, &error_local)) {
+ if (!gs_plugin_get_network_available (self->plugin) &&
+ g_error_matches (error_local, GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NO_NETWORK)) {
+ g_debug ("failed to get permissions while "
+ "refining app %s: %s",
+ gs_app_get_unique_id (app),
+ error_local->message);
+ } else {
+ g_prefix_error (&error_local, "failed to get permissions: ");
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_refine_app (GsFlatpak *self,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ return gs_flatpak_refine_app_unlocked (self, app, flags, cancellable, error);
+}
+
+gboolean
+gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
+ GsAppList *list, GsPluginRefineFlags refine_flags,
+ GCancellable *cancellable, GError **error)
+{
+ const gchar *id;
+ g_autofree gchar *xpath = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) components = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ /* not enough info to find */
+ id = gs_app_get_id (app);
+ if (id == NULL)
+ return TRUE;
+
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+
+ /* find all apps when matching any prefixes */
+ xpath = g_strdup_printf ("components/component/id[text()='%s']/..", id);
+ components = xb_silo_query (self->silo, xpath, 0, &error_local);
+ if (components == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ g_autoptr(GsApp) new = NULL;
+ new = gs_appstream_create_app (self->plugin, self->silo, component, error);
+ if (new == NULL)
+ return FALSE;
+ gs_flatpak_claim_app (self, new);
+ if (!gs_flatpak_refine_app_unlocked (self, new, refine_flags, cancellable, error))
+ return FALSE;
+ gs_app_subsume_metadata (new, app);
+ gs_app_list_add (list, new);
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_launch (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* launch the app */
+ if (!flatpak_installation_launch (self->installation,
+ gs_flatpak_app_get_ref_name (app),
+ gs_flatpak_app_get_ref_arch (app),
+ gs_app_get_branch (app),
+ NULL,
+ cancellable,
+ error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_app_remove_source (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakRemote) xremote = NULL;
+
+ /* find the remote */
+ xremote = flatpak_installation_get_remote_by_name (self->installation,
+ gs_app_get_id (app),
+ cancellable, error);
+ if (xremote == NULL) {
+ gs_flatpak_error_convert (error);
+ g_prefix_error (error,
+ "flatpak source %s not found: ",
+ gs_app_get_id (app));
+ return FALSE;
+ }
+
+ /* remove */
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ if (!flatpak_installation_remove_remote (self->installation,
+ gs_app_get_id (app),
+ cancellable,
+ error)) {
+ gs_flatpak_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* invalidate cache */
+ g_rw_lock_reader_lock (&self->silo_lock);
+ if (self->silo != NULL)
+ xb_silo_invalidate (self->silo);
+ g_rw_lock_reader_unlock (&self->silo_lock);
+
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ return TRUE;
+}
+
+GsApp *
+gs_flatpak_file_to_app_bundle (GsFlatpak *self,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gint size;
+ g_autoptr(GBytes) appstream_gz = NULL;
+ g_autoptr(GBytes) icon_data = NULL;
+ g_autoptr(GBytes) metadata = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(FlatpakBundleRef) xref_bundle = NULL;
+ g_autoptr(FlatpakInstalledRef) installed_ref = NULL;
+ const char *origin = NULL;
+
+ /* load bundle */
+ xref_bundle = flatpak_bundle_ref_new (file, error);
+ if (xref_bundle == NULL) {
+ gs_flatpak_error_convert (error);
+ g_prefix_error (error, "error loading bundle: ");
+ return NULL;
+ }
+
+ /* get the origin if it's already installed */
+ installed_ref = flatpak_installation_get_installed_ref (self->installation,
+ flatpak_ref_get_kind (FLATPAK_REF (xref_bundle)),
+ flatpak_ref_get_name (FLATPAK_REF (xref_bundle)),
+ flatpak_ref_get_arch (FLATPAK_REF (xref_bundle)),
+ flatpak_ref_get_branch (FLATPAK_REF (xref_bundle)),
+ NULL, NULL);
+ if (installed_ref != NULL)
+ origin = flatpak_installed_ref_get_origin (installed_ref);
+
+ /* load metadata */
+ app = gs_flatpak_create_app (self, origin, FLATPAK_REF (xref_bundle));
+ if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+ if (gs_flatpak_app_get_ref_name (app) == NULL)
+ gs_flatpak_set_metadata (self, app, FLATPAK_REF (xref_bundle));
+ return g_steal_pointer (&app);
+ }
+ gs_flatpak_app_set_file_kind (app, GS_FLATPAK_APP_FILE_KIND_BUNDLE);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+ gs_app_set_size_installed (app, flatpak_bundle_ref_get_installed_size (xref_bundle));
+ gs_flatpak_set_metadata (self, app, FLATPAK_REF (xref_bundle));
+ metadata = flatpak_bundle_ref_get_metadata (xref_bundle);
+ if (!gs_flatpak_set_app_metadata (self, app,
+ g_bytes_get_data (metadata, NULL),
+ g_bytes_get_size (metadata),
+ error))
+ return NULL;
+
+ /* load AppStream */
+ appstream_gz = flatpak_bundle_ref_get_appstream (xref_bundle);
+ if (appstream_gz != NULL) {
+ if (!gs_flatpak_refine_appstream_from_bytes (self, app, origin, installed_ref,
+ appstream_gz,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ cancellable, error))
+ return NULL;
+ } else {
+ g_warning ("no appstream metadata in file");
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST,
+ gs_flatpak_app_get_ref_name (app));
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST,
+ "A flatpak application");
+ gs_app_set_description (app, GS_APP_QUALITY_LOWEST, "");
+ }
+
+ /* load icon */
+ size = 64 * (gint) gs_plugin_get_scale (self->plugin);
+ icon_data = flatpak_bundle_ref_get_icon (xref_bundle, size);
+ if (icon_data == NULL)
+ icon_data = flatpak_bundle_ref_get_icon (xref_bundle, 64);
+ if (icon_data != NULL) {
+ g_autoptr(GInputStream) stream_icon = NULL;
+ g_autoptr(GdkPixbuf) pixbuf = NULL;
+ stream_icon = g_memory_input_stream_new_from_bytes (icon_data);
+ pixbuf = gdk_pixbuf_new_from_stream (stream_icon, cancellable, error);
+ if (pixbuf == NULL) {
+ gs_utils_error_convert_gdk_pixbuf (error);
+ return NULL;
+ }
+ gs_app_set_pixbuf (app, pixbuf);
+ } else {
+ g_autoptr(AsIcon) icon = NULL;
+ icon = as_icon_new ();
+ as_icon_set_kind (icon, AS_ICON_KIND_STOCK);
+ as_icon_set_name (icon, "application-x-executable");
+ gs_app_add_icon (app, icon);
+ }
+
+ /* not quite true: this just means we can update this specific app */
+ if (flatpak_bundle_ref_get_origin (xref_bundle))
+ gs_app_add_quirk (app, GS_APP_QUIRK_HAS_SOURCE);
+
+ /* success */
+ return g_steal_pointer (&app);
+}
+
+GsApp *
+gs_flatpak_file_to_app_ref (GsFlatpak *self,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsApp *runtime;
+ const gchar *const *locales = g_get_language_names ();
+ const gchar *remote_name;
+ gsize len = 0;
+ g_autofree gchar *contents = NULL;
+ g_autoptr(FlatpakRemoteRef) xref = NULL;
+ g_autoptr(FlatpakRemote) xremote = NULL;
+ g_autoptr(GBytes) ref_file_data = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GKeyFile) kf = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(XbBuilder) builder = xb_builder_new ();
+ g_autoptr(XbSilo) silo = NULL;
+ g_autofree gchar *origin_url = NULL;
+ g_autofree gchar *ref_comment = NULL;
+ g_autofree gchar *ref_description = NULL;
+ g_autofree gchar *ref_homepage = NULL;
+ g_autofree gchar *ref_icon = NULL;
+ g_autofree gchar *ref_title = NULL;
+ g_autofree gchar *ref_name = NULL;
+
+ /* add current locales */
+ for (guint i = 0; locales[i] != NULL; i++)
+ xb_builder_add_locale (builder, locales[i]);
+
+ /* get file data */
+ if (!g_file_load_contents (file,
+ cancellable,
+ &contents,
+ &len,
+ NULL,
+ error)) {
+ gs_utils_error_convert_gio (error);
+ return NULL;
+ }
+
+ /* load the file */
+ kf = g_key_file_new ();
+ if (!g_key_file_load_from_data (kf, contents, len, G_KEY_FILE_NONE, error)) {
+ gs_utils_error_convert_gio (error);
+ return NULL;
+ }
+
+ /* check version */
+ if (g_key_file_has_key (kf, "Flatpak Ref", "Version", NULL)) {
+ guint64 ver = g_key_file_get_uint64 (kf, "Flatpak Ref", "Version", NULL);
+ if (ver != 1) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "unsupported version %" G_GUINT64_FORMAT, ver);
+ return NULL;
+ }
+ }
+
+ /* get name */
+ ref_name = g_key_file_get_string (kf, "Flatpak Ref", "Name", error);
+ if (ref_name == NULL) {
+ gs_utils_error_convert_gio (error);
+ return NULL;
+ }
+
+ /* install the remote, but not the app */
+ ref_file_data = g_bytes_new (contents, len);
+ xref = flatpak_installation_install_ref_file (self->installation,
+ ref_file_data,
+ cancellable,
+ error);
+ if (xref == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+
+ /* load metadata */
+ app = gs_flatpak_create_app (self, NULL /* origin */, FLATPAK_REF (xref));
+ if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+ if (gs_flatpak_app_get_ref_name (app) == NULL)
+ gs_flatpak_set_metadata (self, app, FLATPAK_REF (xref));
+ return g_steal_pointer (&app);
+ }
+ gs_app_add_quirk (app, GS_APP_QUIRK_HAS_SOURCE);
+ gs_flatpak_app_set_file_kind (app, GS_FLATPAK_APP_FILE_KIND_REF);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+ gs_flatpak_set_metadata (self, app, FLATPAK_REF (xref));
+
+ /* use the data from the flatpakref file as a fallback */
+ ref_title = g_key_file_get_string (kf, "Flatpak Ref", "Title", NULL);
+ if (ref_title != NULL)
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, ref_title);
+ ref_comment = g_key_file_get_string (kf, "Flatpak Ref", "Comment", NULL);
+ if (ref_comment != NULL)
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, ref_comment);
+ ref_description = g_key_file_get_string (kf, "Flatpak Ref", "Description", NULL);
+ if (ref_description != NULL)
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL, ref_description);
+ ref_homepage = g_key_file_get_string (kf, "Flatpak Ref", "Homepage", NULL);
+ if (ref_homepage != NULL)
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, ref_homepage);
+ ref_icon = g_key_file_get_string (kf, "Flatpak Ref", "Icon", NULL);
+ if (ref_icon != NULL) {
+ g_autoptr(AsIcon) ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_REMOTE);
+ as_icon_set_url (ic, ref_icon);
+ gs_app_add_icon (app, ic);
+ }
+
+ /* set the origin data */
+ remote_name = flatpak_remote_ref_get_remote_name (xref);
+ g_debug ("auto-created remote name: %s", remote_name);
+ xremote = flatpak_installation_get_remote_by_name (self->installation,
+ remote_name,
+ cancellable,
+ error);
+ if (xremote == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+ origin_url = flatpak_remote_get_url (xremote);
+ if (origin_url == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no URL for remote %s",
+ flatpak_remote_get_name (xremote));
+ return NULL;
+ }
+ gs_app_set_origin (app, remote_name);
+ gs_app_set_origin_hostname (app, origin_url);
+
+ /* get the new appstream data (nonfatal for failure) */
+ if (!gs_flatpak_refresh_appstream_remote (self, remote_name,
+ cancellable, &error_local)) {
+ g_autoptr(GsPluginEvent) event = gs_plugin_event_new ();
+ gs_flatpak_error_convert (&error_local);
+ gs_plugin_event_set_app (event, app);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (self->plugin, event);
+ g_clear_error (&error_local);
+ }
+
+ /* get this now, as it's not going to be available at install time */
+ if (!gs_plugin_refine_item_metadata (self, app, cancellable, error))
+ return NULL;
+
+ /* the new runtime is available from the RuntimeRepo */
+ runtime = gs_app_get_runtime (app);
+ if (runtime != NULL && gs_app_get_state (runtime) == AS_APP_STATE_UNKNOWN) {
+ g_autofree gchar *uri = NULL;
+ uri = g_key_file_get_string (kf, "Flatpak Ref", "RuntimeRepo", NULL);
+ gs_flatpak_app_set_runtime_url (runtime, uri);
+ }
+
+ /* parse it */
+ if (!gs_flatpak_add_apps_from_xremote (self, builder, xremote, cancellable, error))
+ return NULL;
+
+ /* build silo */
+ silo = xb_builder_compile (builder,
+ XB_BUILDER_COMPILE_FLAG_SINGLE_LANG,
+ cancellable,
+ error);
+ if (silo == NULL)
+ return NULL;
+ if (g_getenv ("GS_XMLB_VERBOSE") != NULL) {
+ g_autofree gchar *xml = NULL;
+ xml = xb_silo_export (silo,
+ XB_NODE_EXPORT_FLAG_FORMAT_INDENT |
+ XB_NODE_EXPORT_FLAG_FORMAT_MULTILINE,
+ NULL);
+ g_debug ("showing AppStream data: %s", xml);
+ }
+
+ /* get extra AppStream data if available */
+ if (!gs_flatpak_refine_appstream (self, app, silo,
+ G_MAXUINT64,
+ cancellable,
+ error))
+ return NULL;
+
+ /* success */
+ return g_steal_pointer (&app);
+}
+
+gboolean
+gs_flatpak_search (GsFlatpak *self,
+ const gchar * const *values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ g_autoptr(GMutexLocker) app_silo_locker = NULL;
+ g_autoptr(GPtrArray) silos_to_remove = g_ptr_array_new ();
+ GHashTableIter iter;
+ gpointer key, value;
+
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ if (!gs_appstream_search (self->plugin, self->silo, values, list_tmp,
+ cancellable, error))
+ return FALSE;
+
+ gs_flatpak_claim_app_list (self, list_tmp);
+ gs_app_list_add_list (list, list_tmp);
+
+ /* Also search silos from installed apps which were missing from self->silo */
+ app_silo_locker = g_mutex_locker_new (&self->app_silos_mutex);
+ g_hash_table_iter_init (&iter, self->app_silos);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_autoptr(XbSilo) app_silo = g_object_ref (value);
+ g_autoptr(GsAppList) app_list_tmp = gs_app_list_new ();
+ const char *app_ref = (char *)key;
+ g_autoptr(FlatpakInstalledRef) installed_ref = NULL;
+ g_auto(GStrv) split = NULL;
+ FlatpakRefKind kind;
+
+ /* Ignore any silos of apps that have since been removed.
+ * FIXME: can we use self->installed_refs here? */
+ split = g_strsplit (app_ref, "/", -1);
+ g_assert (g_strv_length (split) == 4);
+ if (g_strcmp0 (split[0], "app") == 0)
+ kind = FLATPAK_REF_KIND_APP;
+ else
+ kind = FLATPAK_REF_KIND_RUNTIME;
+ installed_ref = flatpak_installation_get_installed_ref (self->installation,
+ kind,
+ split[1],
+ split[2],
+ split[3],
+ NULL, NULL);
+ if (installed_ref == NULL) {
+ g_ptr_array_add (silos_to_remove, app_ref);
+ continue;
+ }
+
+ if (!gs_appstream_search (self->plugin, app_silo, values, app_list_tmp,
+ cancellable, error))
+ return FALSE;
+
+ gs_flatpak_claim_app_list (self, app_list_tmp);
+ gs_app_list_add_list (list, app_list_tmp);
+ }
+
+ for (guint i = 0; i < silos_to_remove->len; i++) {
+ const char *silo = g_ptr_array_index (silos_to_remove, i);
+ g_hash_table_remove (self->app_silos, silo);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_add_category_apps (GsFlatpak *self,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ return gs_appstream_add_category_apps (self->plugin, self->silo,
+ category, list,
+ cancellable, error);
+}
+
+gboolean
+gs_flatpak_add_categories (GsFlatpak *self,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ return gs_appstream_add_categories (self->plugin, self->silo,
+ list, cancellable, error);
+}
+
+gboolean
+gs_flatpak_add_popular (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ if (!gs_appstream_add_popular (self->plugin, self->silo, list_tmp,
+ cancellable, error))
+ return FALSE;
+
+ gs_app_list_add_list (list, list_tmp);
+
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_add_featured (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ if (!gs_appstream_add_featured (self->plugin, self->silo, list_tmp,
+ cancellable, error))
+ return FALSE;
+
+ gs_app_list_add_list (list, list_tmp);
+
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_add_alternates (GsFlatpak *self,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ if (!gs_appstream_add_alternates (self->plugin, self->silo, app, list_tmp,
+ cancellable, error))
+ return FALSE;
+
+ gs_app_list_add_list (list, list_tmp);
+
+ return TRUE;
+}
+
+gboolean
+gs_flatpak_add_recent (GsFlatpak *self,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+ if (!gs_appstream_add_recent (self->plugin, self->silo, list_tmp, age,
+ cancellable, error))
+ return FALSE;
+
+ gs_flatpak_claim_app_list (self, list_tmp);
+ gs_app_list_add_list (list, list_tmp);
+
+ return TRUE;
+}
+
+const gchar *
+gs_flatpak_get_id (GsFlatpak *self)
+{
+ if (self->id == NULL) {
+ GString *str = g_string_new ("flatpak");
+ g_string_append_printf (str, "-%s",
+ as_app_scope_to_string (self->scope));
+ if (flatpak_installation_get_id (self->installation) != NULL) {
+ g_string_append_printf (str, "-%s",
+ flatpak_installation_get_id (self->installation));
+ }
+ if (self->flags & GS_FLATPAK_FLAG_IS_TEMPORARY)
+ g_string_append (str, "-temp");
+ self->id = g_string_free (str, FALSE);
+ }
+ return self->id;
+}
+
+AsAppScope
+gs_flatpak_get_scope (GsFlatpak *self)
+{
+ return self->scope;
+}
+
+FlatpakInstallation *
+gs_flatpak_get_installation (GsFlatpak *self)
+{
+ return self->installation;
+}
+
+static void
+gs_flatpak_finalize (GObject *object)
+{
+ GsFlatpak *self;
+ g_return_if_fail (GS_IS_FLATPAK (object));
+ self = GS_FLATPAK (object);
+
+ if (self->changed_id > 0) {
+ g_signal_handler_disconnect (self->monitor, self->changed_id);
+ self->changed_id = 0;
+ }
+ if (self->silo != NULL)
+ g_object_unref (self->silo);
+
+ g_free (self->id);
+ g_object_unref (self->installation);
+ g_clear_pointer (&self->installed_refs, g_ptr_array_unref);
+ g_mutex_clear (&self->installed_refs_mutex);
+ g_object_unref (self->plugin);
+ g_hash_table_unref (self->broken_remotes);
+ g_mutex_clear (&self->broken_remotes_mutex);
+ g_rw_lock_clear (&self->silo_lock);
+ g_hash_table_unref (self->app_silos);
+ g_mutex_clear (&self->app_silos_mutex);
+
+ G_OBJECT_CLASS (gs_flatpak_parent_class)->finalize (object);
+}
+
+static void
+gs_flatpak_class_init (GsFlatpakClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_flatpak_finalize;
+}
+
+static void
+gs_flatpak_init (GsFlatpak *self)
+{
+ /* XbSilo needs external locking as we destroy the silo and build a new
+ * one when something changes */
+ g_rw_lock_init (&self->silo_lock);
+
+ g_mutex_init (&self->installed_refs_mutex);
+ self->installed_refs = NULL;
+ g_mutex_init (&self->broken_remotes_mutex);
+ self->broken_remotes = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, NULL);
+ self->app_silos = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+ g_mutex_init (&self->app_silos_mutex);
+}
+
+GsFlatpak *
+gs_flatpak_new (GsPlugin *plugin, FlatpakInstallation *installation, GsFlatpakFlags flags)
+{
+ GsFlatpak *self;
+ self = g_object_new (GS_TYPE_FLATPAK, NULL);
+ self->installation = g_object_ref (installation);
+ self->scope = flatpak_installation_get_is_user (installation)
+ ? AS_APP_SCOPE_USER : AS_APP_SCOPE_SYSTEM;
+ self->plugin = g_object_ref (plugin);
+ self->flags = flags;
+ return GS_FLATPAK (self);
+}
diff --git a/plugins/flatpak/gs-flatpak.h b/plugins/flatpak/gs-flatpak.h
new file mode 100644
index 0000000..e5af289
--- /dev/null
+++ b/plugins/flatpak/gs-flatpak.h
@@ -0,0 +1,128 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Joaquim Rocha <jrocha@endlessm.com>
+ * Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gnome-software.h>
+#include <flatpak.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_FLATPAK (gs_flatpak_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsFlatpak, gs_flatpak, GS, FLATPAK, GObject)
+
+typedef enum {
+ GS_FLATPAK_FLAG_NONE = 0,
+ GS_FLATPAK_FLAG_IS_TEMPORARY = 1 << 0,
+ /*< private >*/
+ GS_FLATPAK_FLAG_LAST
+} GsFlatpakFlags;
+
+GsFlatpak *gs_flatpak_new (GsPlugin *plugin,
+ FlatpakInstallation *installation,
+ GsFlatpakFlags flags);
+FlatpakInstallation *gs_flatpak_get_installation (GsFlatpak *self);
+
+GsApp *gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref, GCancellable *cancellable, GError **error);
+
+AsAppScope gs_flatpak_get_scope (GsFlatpak *self);
+const gchar *gs_flatpak_get_id (GsFlatpak *self);
+gboolean gs_flatpak_setup (GsFlatpak *self,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_installed (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_sources (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_updates (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_refresh (GsFlatpak *self,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_refine_app (GsFlatpak *self,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_refine_app_state (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_refine_wildcard (GsFlatpak *self,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_launch (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_app_remove_source (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_app_install_source (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
+GsApp *gs_flatpak_file_to_app_ref (GsFlatpak *self,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+GsApp *gs_flatpak_file_to_app_bundle (GsFlatpak *self,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error);
+GsApp *gs_flatpak_find_source_by_url (GsFlatpak *self,
+ const gchar *name,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_search (GsFlatpak *self,
+ const gchar * const *values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_categories (GsFlatpak *self,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_category_apps (GsFlatpak *self,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_popular (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_featured (GsFlatpak *self,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_alternates (GsFlatpak *self,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_flatpak_add_recent (GsFlatpak *self,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error);
+
+G_END_DECLS
diff --git a/plugins/flatpak/gs-plugin-flatpak.c b/plugins/flatpak/gs-plugin-flatpak.c
new file mode 100644
index 0000000..5b7a549
--- /dev/null
+++ b/plugins/flatpak/gs-plugin-flatpak.c
@@ -0,0 +1,1320 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Joaquim Rocha <jrocha@endlessm.com>
+ * Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017-2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/* Notes:
+ *
+ * All GsApp's created have management-plugin set to flatpak
+ * Some GsApp's created have have flatpak::kind of app or runtime
+ * The GsApp:origin is the remote name, e.g. test-repo
+ */
+
+#include <config.h>
+
+#include <flatpak.h>
+#include <gnome-software.h>
+
+#include "gs-appstream.h"
+#include "gs-flatpak-app.h"
+#include "gs-flatpak.h"
+#include "gs-flatpak-transaction.h"
+#include "gs-flatpak-utils.h"
+#include "gs-metered.h"
+
+struct GsPluginData {
+ GPtrArray *flatpaks; /* of GsFlatpak */
+ gboolean has_system_helper;
+ const gchar *destdir_for_tests;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ const gchar *action_id = "org.freedesktop.Flatpak.appstream-update";
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPermission) permission = NULL;
+
+ priv->flatpaks = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+ /* getting app properties from appstream is quicker */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+
+ /* like appstream, we need the icon plugin to load cached icons into pixbufs */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "icons");
+
+ /* prioritize over packages */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_BETTER_THAN, "packagekit");
+
+ /* set name of MetaInfo file */
+ gs_plugin_set_appstream_id (plugin, "org.gnome.Software.Plugin.Flatpak");
+
+ /* if we can't update the AppStream database system-wide don't even
+ * pull the data as we can't do anything with it */
+ permission = gs_utils_get_permission (action_id, NULL, &error_local);
+ if (permission == NULL) {
+ g_debug ("no permission for %s: %s", action_id, error_local->message);
+ g_clear_error (&error_local);
+ } else {
+ priv->has_system_helper = g_permission_get_allowed (permission) ||
+ g_permission_get_can_acquire (permission);
+ }
+
+ /* used for self tests */
+ priv->destdir_for_tests = g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR");
+}
+
+static gboolean
+_as_app_scope_is_compatible (AsAppScope scope1, AsAppScope scope2)
+{
+ if (scope1 == AS_APP_SCOPE_UNKNOWN)
+ return TRUE;
+ if (scope2 == AS_APP_SCOPE_UNKNOWN)
+ return TRUE;
+ return scope1 == scope2;
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_ptr_array_unref (priv->flatpaks);
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_FLATPAK)
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+}
+
+static gboolean
+gs_plugin_flatpak_add_installation (GsPlugin *plugin,
+ FlatpakInstallation *installation,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsFlatpak) flatpak = NULL;
+
+ /* create and set up */
+ flatpak = gs_flatpak_new (plugin, installation, GS_FLATPAK_FLAG_NONE);
+ if (!gs_flatpak_setup (flatpak, cancellable, error))
+ return FALSE;
+ g_debug ("successfully set up %s", gs_flatpak_get_id (flatpak));
+
+ /* add objects that set up correctly */
+ g_ptr_array_add (priv->flatpaks, g_steal_pointer (&flatpak));
+ return TRUE;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* clear in case we're called from resetup in the self tests */
+ g_ptr_array_set_size (priv->flatpaks, 0);
+
+ /* we use a permissions helper to elevate privs */
+ if (priv->has_system_helper && priv->destdir_for_tests == NULL) {
+ g_autoptr(GPtrArray) installations = NULL;
+ installations = flatpak_get_system_installations (cancellable, error);
+ if (installations == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < installations->len; i++) {
+ FlatpakInstallation *installation = g_ptr_array_index (installations, i);
+ if (!gs_plugin_flatpak_add_installation (plugin, installation,
+ cancellable, error)) {
+ return FALSE;
+ }
+ }
+ }
+
+ /* in gs-self-test */
+ if (priv->destdir_for_tests != NULL) {
+ g_autofree gchar *full_path = g_build_filename (priv->destdir_for_tests,
+ "flatpak",
+ NULL);
+ g_autoptr(GFile) file = g_file_new_for_path (full_path);
+ g_autoptr(FlatpakInstallation) installation = NULL;
+ g_debug ("using custom flatpak path %s", full_path);
+ installation = flatpak_installation_new_for_path (file, TRUE,
+ cancellable,
+ error);
+ if (installation == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ if (!gs_plugin_flatpak_add_installation (plugin, installation,
+ cancellable, error)) {
+ return FALSE;
+ }
+ }
+
+ /* per-user installations always available when not in self tests */
+ if (priv->destdir_for_tests == NULL) {
+ g_autoptr(FlatpakInstallation) installation = NULL;
+ installation = flatpak_installation_new_user (cancellable, error);
+ if (installation == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ if (!gs_plugin_flatpak_add_installation (plugin, installation,
+ cancellable, error)) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_installed (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_installed (flatpak, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_sources (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_sources (flatpak, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_updates (flatpak, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_refresh (flatpak, cache_age, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static GsFlatpak *
+gs_plugin_flatpak_get_handler (GsPlugin *plugin, GsApp *app)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *object_id;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0) {
+ return NULL;
+ }
+
+ /* specified an explicit name */
+ object_id = gs_flatpak_app_get_object_id (app);
+ if (object_id != NULL) {
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (g_strcmp0 (gs_flatpak_get_id (flatpak), object_id) == 0)
+ return flatpak;
+ }
+ }
+
+ /* find a scope that matches */
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (_as_app_scope_is_compatible (gs_flatpak_get_scope (flatpak),
+ gs_app_get_scope (app)))
+ return flatpak;
+ }
+ return NULL;
+}
+
+static gboolean
+gs_plugin_flatpak_refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GsFlatpak *flatpak = NULL;
+
+ /* not us */
+ if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_FLATPAK) {
+ g_debug ("%s not a package, ignoring", gs_app_get_unique_id (app));
+ return TRUE;
+ }
+
+ /* we have to look for the app in all GsFlatpak stores */
+ if (gs_app_get_scope (app) == AS_APP_SCOPE_UNKNOWN) {
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak_tmp = g_ptr_array_index (priv->flatpaks, i);
+ g_autoptr(GError) error_local = NULL;
+ if (gs_flatpak_refine_app_state (flatpak_tmp, app,
+ cancellable, &error_local)) {
+ flatpak = flatpak_tmp;
+ break;
+ } else {
+ g_debug ("%s", error_local->message);
+ }
+ }
+ } else {
+ flatpak = gs_plugin_flatpak_get_handler (plugin, app);
+ }
+ if (flatpak == NULL)
+ return TRUE;
+ return gs_flatpak_refine_app (flatpak, app, flags, cancellable, error);
+}
+
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0) {
+ return TRUE;
+ }
+
+ /* get the runtime first */
+ if (!gs_plugin_flatpak_refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+
+ /* the runtime might be installed in a different scope */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME) {
+ GsApp *runtime = gs_app_get_runtime (app);
+ if (runtime != NULL) {
+ if (!gs_plugin_flatpak_refine_app (plugin, app,
+ flags,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine_wildcard (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_refine_wildcard (flatpak, app, list, flags,
+ cancellable, error)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_launch (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsFlatpak *flatpak = gs_plugin_flatpak_get_handler (plugin, app);
+ if (flatpak == NULL)
+ return TRUE;
+ return gs_flatpak_launch (flatpak, app, cancellable, error);
+}
+
+/* ref full */
+static GsApp *
+gs_plugin_flatpak_find_app_by_ref (GsPlugin *plugin, const gchar *ref,
+ GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ g_debug ("finding ref %s", ref);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak_tmp = g_ptr_array_index (priv->flatpaks, i);
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ app = gs_flatpak_ref_to_app (flatpak_tmp, ref, cancellable, &error_local);
+ if (app == NULL) {
+ g_debug ("%s", error_local->message);
+ continue;
+ }
+ g_debug ("found ref=%s->%s", ref, gs_app_get_unique_id (app));
+ return g_steal_pointer (&app);
+ }
+ return NULL;
+}
+
+/* ref full */
+static GsApp *
+_ref_to_app (FlatpakTransaction *transaction, const gchar *ref, GsPlugin *plugin)
+{
+ g_return_val_if_fail (GS_IS_FLATPAK_TRANSACTION (transaction), NULL);
+ g_return_val_if_fail (ref != NULL, NULL);
+ g_return_val_if_fail (GS_IS_PLUGIN (plugin), NULL);
+
+ /* search through each GsFlatpak */
+ return gs_plugin_flatpak_find_app_by_ref (plugin, ref, NULL, NULL);
+}
+
+/*
+ * Returns: (transfer full) (element-type GsFlatpak GsAppList):
+ * a map from GsFlatpak to non-empty lists of apps from @list associated
+ * with that installation.
+ */
+static GHashTable *
+_group_apps_by_installation (GsPlugin *plugin,
+ GsAppList *list)
+{
+ g_autoptr(GHashTable) applist_by_flatpaks = NULL;
+
+ /* list of apps to be handled by each flatpak installation */
+ applist_by_flatpaks = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ (GDestroyNotify) g_object_unref,
+ (GDestroyNotify) g_object_unref);
+
+ /* put each app into the correct per-GsFlatpak list */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsFlatpak *flatpak = gs_plugin_flatpak_get_handler (plugin, app);
+ if (flatpak != NULL) {
+ GsAppList *list_tmp = g_hash_table_lookup (applist_by_flatpaks, flatpak);
+ if (list_tmp == NULL) {
+ list_tmp = gs_app_list_new ();
+ g_hash_table_insert (applist_by_flatpaks,
+ g_object_ref (flatpak),
+ list_tmp);
+ }
+ gs_app_list_add (list_tmp, app);
+ }
+ }
+
+ return g_steal_pointer (&applist_by_flatpaks);
+}
+
+#if FLATPAK_CHECK_VERSION(1,6,0)
+typedef struct {
+ FlatpakTransaction *transaction;
+ guint id;
+} BasicAuthData;
+
+static void
+basic_auth_data_free (BasicAuthData *data)
+{
+ g_object_unref (data->transaction);
+ g_slice_free (BasicAuthData, data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(BasicAuthData, basic_auth_data_free)
+
+static void
+_basic_auth_cb (const gchar *user, const gchar *password, gpointer user_data)
+{
+ g_autoptr(BasicAuthData) data = user_data;
+
+ g_debug ("Submitting basic auth data");
+
+ /* NULL user aborts the basic auth request */
+ flatpak_transaction_complete_basic_auth (data->transaction, data->id, user, password, NULL /* options */);
+}
+
+static gboolean
+_basic_auth_start (FlatpakTransaction *transaction,
+ const char *remote,
+ const char *realm,
+ GVariant *options,
+ guint id,
+ GsPlugin *plugin)
+{
+ BasicAuthData *data;
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE))
+ return FALSE;
+
+ data = g_slice_new0 (BasicAuthData);
+ data->transaction = g_object_ref (transaction);
+ data->id = id;
+
+ g_debug ("Login required remote %s (realm %s)\n", remote, realm);
+ gs_plugin_basic_auth_start (plugin, remote, realm, G_CALLBACK (_basic_auth_cb), data);
+ return TRUE;
+}
+
+static gboolean
+_webflow_start (FlatpakTransaction *transaction,
+ const char *remote,
+ const char *url,
+ GVariant *options,
+ guint id,
+ GsPlugin *plugin)
+{
+ const char *browser;
+ g_autoptr(GError) error_local = NULL;
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE))
+ return FALSE;
+
+ g_debug ("Authentication required for remote '%s'", remote);
+
+ /* Allow hard overrides with $BROWSER */
+ browser = g_getenv ("BROWSER");
+ if (browser != NULL) {
+ const char *args[3] = { NULL, url, NULL };
+ args[0] = browser;
+ if (!g_spawn_async (NULL, (char **)args, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, &error_local)) {
+ g_autoptr(GsPluginEvent) event = NULL;
+
+ g_warning ("Failed to start browser %s: %s", browser, error_local->message);
+
+ event = gs_plugin_event_new ();
+ gs_flatpak_error_convert (&error_local);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+
+ return FALSE;
+ }
+ } else {
+ if (!g_app_info_launch_default_for_uri (url, NULL, &error_local)) {
+ g_autoptr(GsPluginEvent) event = NULL;
+
+ g_warning ("Failed to show url: %s", error_local->message);
+
+ event = gs_plugin_event_new ();
+ gs_flatpak_error_convert (&error_local);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+
+ return FALSE;
+ }
+ }
+
+ g_debug ("Waiting for browser...");
+
+ return TRUE;
+}
+
+static void
+_webflow_done (FlatpakTransaction *transaction,
+ GVariant *options,
+ guint id,
+ GsPlugin *plugin)
+{
+ g_debug ("Browser done");
+}
+#endif
+
+static FlatpakTransaction *
+_build_transaction (GsPlugin *plugin, GsFlatpak *flatpak,
+ GCancellable *cancellable, GError **error)
+{
+ FlatpakInstallation *installation;
+#if !FLATPAK_CHECK_VERSION(1, 7, 3)
+ g_autoptr(GFile) installation_path = NULL;
+#endif /* flatpak < 1.7.3 */
+ g_autoptr(FlatpakInstallation) installation_clone = NULL;
+ g_autoptr(FlatpakTransaction) transaction = NULL;
+
+ installation = gs_flatpak_get_installation (flatpak);
+
+#if !FLATPAK_CHECK_VERSION(1, 7, 3)
+ /* Operate on a copy of the installation so we can set the interactive
+ * flag for the duration of this transaction. */
+ installation_path = flatpak_installation_get_path (installation);
+ installation_clone = flatpak_installation_new_for_path (installation_path,
+ flatpak_installation_get_is_user (installation),
+ cancellable, error);
+ if (installation_clone == NULL)
+ return NULL;
+
+ /* Let flatpak know if it is a background operation */
+ flatpak_installation_set_no_interaction (installation_clone,
+ !gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
+#else /* if flatpak ≥ 1.7.3 */
+ installation_clone = g_object_ref (installation);
+#endif /* flatpak ≥ 1.7.3 */
+
+ /* create transaction */
+ transaction = gs_flatpak_transaction_new (installation_clone, cancellable, error);
+ if (transaction == NULL) {
+ g_prefix_error (error, "failed to build transaction: ");
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+
+#if FLATPAK_CHECK_VERSION(1, 7, 3)
+ /* Let flatpak know if it is a background operation */
+ flatpak_transaction_set_no_interaction (transaction,
+ !gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
+#endif /* flatpak ≥ 1.7.3 */
+
+ /* connect up signals */
+ g_signal_connect (transaction, "ref-to-app",
+ G_CALLBACK (_ref_to_app), plugin);
+#if FLATPAK_CHECK_VERSION(1,6,0)
+ g_signal_connect (transaction, "basic-auth-start",
+ G_CALLBACK (_basic_auth_start), plugin);
+ g_signal_connect (transaction, "webflow-start",
+ G_CALLBACK (_webflow_start), plugin);
+ g_signal_connect (transaction, "webflow-done",
+ G_CALLBACK (_webflow_done), plugin);
+#endif
+
+ /* use system installations as dependency sources for user installations */
+ flatpak_transaction_add_default_dependency_sources (transaction);
+
+ return g_steal_pointer (&transaction);
+}
+
+gboolean
+gs_plugin_download (GsPlugin *plugin, GsAppList *list,
+ GCancellable *cancellable, GError **error)
+{
+ g_autoptr(GHashTable) applist_by_flatpaks = NULL;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ /* build and run transaction for each flatpak installation */
+ applist_by_flatpaks = _group_apps_by_installation (plugin, list);
+ g_hash_table_iter_init (&iter, applist_by_flatpaks);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GsFlatpak *flatpak = GS_FLATPAK (key);
+ GsAppList *list_tmp = GS_APP_LIST (value);
+ g_autoptr(FlatpakTransaction) transaction = NULL;
+
+ g_assert (GS_IS_FLATPAK (flatpak));
+ g_assert (list_tmp != NULL);
+ g_assert (gs_app_list_length (list_tmp) > 0);
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE)) {
+ g_autoptr(GError) error_local = NULL;
+
+ if (!gs_metered_block_app_list_on_download_scheduler (list_tmp, cancellable, &error_local)) {
+ g_warning ("Failed to block on download scheduler: %s",
+ error_local->message);
+ g_clear_error (&error_local);
+ }
+ }
+
+ /* build and run non-deployed transaction */
+ transaction = _build_transaction (plugin, flatpak, cancellable, error);
+ if (transaction == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+#if !FLATPAK_CHECK_VERSION(1,5,1)
+ gs_flatpak_transaction_set_no_deploy (transaction, TRUE);
+#else
+ flatpak_transaction_set_no_deploy (transaction, TRUE);
+#endif
+ for (guint i = 0; i < gs_app_list_length (list_tmp); i++) {
+ GsApp *app = gs_app_list_index (list_tmp, i);
+ g_autofree gchar *ref = NULL;
+
+ ref = gs_flatpak_app_get_ref_display (app);
+ if (!flatpak_transaction_add_update (transaction, ref, NULL, NULL, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ }
+ if (!gs_flatpak_transaction_run (transaction, cancellable, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* Traverse over the GsAppList again and set that the update has been already downloaded
+ * for the apps. */
+ for (guint i = 0; i < gs_app_list_length (list_tmp); i++) {
+ GsApp *app = gs_app_list_index (list_tmp, i);
+ gs_app_set_is_update_downloaded (app, TRUE);
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_remove (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsFlatpak *flatpak;
+ g_autoptr(FlatpakTransaction) transaction = NULL;
+ g_autofree gchar *ref = NULL;
+
+ /* not supported */
+ flatpak = gs_plugin_flatpak_get_handler (plugin, app);
+ if (flatpak == NULL)
+ return TRUE;
+
+ /* is a source */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return gs_flatpak_app_remove_source (flatpak, app, cancellable, error);
+
+ /* build and run transaction */
+ transaction = _build_transaction (plugin, flatpak, cancellable, error);
+ if (transaction == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* add to the transaction cache for quick look up -- other unrelated
+ * refs will be matched using gs_plugin_flatpak_find_app_by_ref() */
+ gs_flatpak_transaction_add_app (transaction, app);
+
+ ref = gs_flatpak_app_get_ref_display (app);
+ if (!flatpak_transaction_add_uninstall (transaction, ref, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* run transaction */
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ if (!gs_flatpak_transaction_run (transaction, cancellable, error)) {
+ gs_flatpak_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* get any new state */
+ if (!gs_flatpak_refresh (flatpak, G_MAXUINT, cancellable, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ if (!gs_flatpak_refine_app (flatpak, app,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ cancellable, error)) {
+ g_prefix_error (error, "failed to run refine for %s: ", ref);
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+app_has_local_source (GsApp *app)
+{
+ const gchar *url = gs_app_get_origin_hostname (app);
+ return url != NULL && g_str_has_prefix (url, "file://");
+}
+
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GsFlatpak *flatpak;
+ g_autoptr(FlatpakTransaction) transaction = NULL;
+
+ /* queue for install if installation needs the network */
+ if (!app_has_local_source (app) &&
+ !gs_plugin_get_network_available (plugin)) {
+ gs_app_set_state (app, AS_APP_STATE_QUEUED_FOR_INSTALL);
+ return TRUE;
+ }
+
+ /* set the app scope */
+ if (gs_app_get_scope (app) == AS_APP_SCOPE_UNKNOWN) {
+ g_autoptr(GSettings) settings = g_settings_new ("org.gnome.software");
+
+ /* get the new GsFlatpak for handling of local files */
+ gs_app_set_scope (app, g_settings_get_boolean (settings, "install-bundles-system-wide") ?
+ AS_APP_SCOPE_SYSTEM : AS_APP_SCOPE_USER);
+ if (!priv->has_system_helper) {
+ g_info ("no flatpak system helper is available, using user");
+ gs_app_set_scope (app, AS_APP_SCOPE_USER);
+ }
+ if (priv->destdir_for_tests != NULL) {
+ g_debug ("in self tests, using user");
+ gs_app_set_scope (app, AS_APP_SCOPE_USER);
+ }
+ }
+
+ /* not supported */
+ flatpak = gs_plugin_flatpak_get_handler (plugin, app);
+ if (flatpak == NULL)
+ return TRUE;
+
+ /* is a source */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return gs_flatpak_app_install_source (flatpak, app, cancellable, error);
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE)) {
+ g_autoptr(GError) error_local = NULL;
+
+ /* FIXME: Add additional details here, especially the download
+ * size bounds (using `size-minimum` and `size-maximum`, both
+ * type `t`). */
+ if (!gs_metered_block_app_on_download_scheduler (app, cancellable, &error_local)) {
+ g_warning ("Failed to block on download scheduler: %s",
+ error_local->message);
+ g_clear_error (&error_local);
+ }
+ }
+
+ /* build */
+ transaction = _build_transaction (plugin, flatpak, cancellable, error);
+ if (transaction == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* add to the transaction cache for quick look up -- other unrelated
+ * refs will be matched using gs_plugin_flatpak_find_app_by_ref() */
+ gs_flatpak_transaction_add_app (transaction, app);
+
+ /* add flatpakref */
+ if (gs_flatpak_app_get_file_kind (app) == GS_FLATPAK_APP_FILE_KIND_REF) {
+ GFile *file = gs_app_get_local_file (app);
+ g_autoptr(GBytes) blob = NULL;
+ if (file == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no local file set for bundle %s",
+ gs_app_get_unique_id (app));
+ return FALSE;
+ }
+ blob = g_file_load_bytes (file, cancellable, NULL, error);
+ if (blob == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ if (!flatpak_transaction_add_install_flatpakref (transaction, blob, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* add bundle */
+ } else if (gs_flatpak_app_get_file_kind (app) == GS_FLATPAK_APP_FILE_KIND_BUNDLE) {
+ GFile *file = gs_app_get_local_file (app);
+ if (file == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no local file set for bundle %s",
+ gs_app_get_unique_id (app));
+ return FALSE;
+ }
+ if (!flatpak_transaction_add_install_bundle (transaction, file,
+ NULL, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* add normal ref */
+ } else {
+ g_autofree gchar *ref = gs_flatpak_app_get_ref_display (app);
+ if (!flatpak_transaction_add_install (transaction,
+ gs_app_get_origin (app),
+ ref, NULL, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ /* run transaction */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ if (!gs_flatpak_transaction_run (transaction, cancellable, error)) {
+ gs_flatpak_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* get any new state */
+ if (!gs_flatpak_refresh (flatpak, G_MAXUINT, cancellable, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ if (!gs_flatpak_refine_app (flatpak, app,
+ GS_PLUGIN_REFINE_FLAGS_DEFAULT,
+ cancellable, error)) {
+ g_prefix_error (error, "failed to run refine for %s: ",
+ gs_app_get_unique_id (app));
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_flatpak_update (GsPlugin *plugin,
+ GsFlatpak *flatpak,
+ GsAppList *list_tmp,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(FlatpakTransaction) transaction = NULL;
+ gboolean is_update_downloaded = TRUE;
+
+ /* build and run transaction */
+ transaction = _build_transaction (plugin, flatpak, cancellable, error);
+ if (transaction == NULL) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ for (guint i = 0; i < gs_app_list_length (list_tmp); i++) {
+ GsApp *app = gs_app_list_index (list_tmp, i);
+ g_autofree gchar *ref = NULL;
+
+ ref = gs_flatpak_app_get_ref_display (app);
+ if (!flatpak_transaction_add_update (transaction, ref, NULL, NULL, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+
+ /* add to the transaction cache for quick look up -- other unrelated
+ * refs will be matched using gs_plugin_flatpak_find_app_by_ref() */
+ gs_flatpak_transaction_add_app (transaction, app);
+ }
+
+ /* run transaction */
+ for (guint i = 0; i < gs_app_list_length (list_tmp); i++) {
+ GsApp *app = gs_app_list_index (list_tmp, i);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+
+ /* If all apps' update are previously downloaded and available locally,
+ * FlatpakTransaction should run with no-pull flag. This is the case
+ * for apps' autoupdates. */
+ is_update_downloaded &= gs_app_get_is_update_downloaded (app);
+ }
+
+ if (is_update_downloaded)
+ flatpak_transaction_set_no_pull (transaction, TRUE);
+
+ if (!gs_flatpak_transaction_run (transaction, cancellable, error)) {
+ for (guint i = 0; i < gs_app_list_length (list_tmp); i++) {
+ GsApp *app = gs_app_list_index (list_tmp, i);
+ gs_app_set_state_recover (app);
+ }
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ gs_plugin_updates_changed (plugin);
+
+ /* get any new state */
+ if (!gs_flatpak_refresh (flatpak, G_MAXUINT, cancellable, error)) {
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < gs_app_list_length (list_tmp); i++) {
+ GsApp *app = gs_app_list_index (list_tmp, i);
+ g_autofree gchar *ref = NULL;
+
+ ref = gs_flatpak_app_get_ref_display (app);
+ if (!gs_flatpak_refine_app (flatpak, app,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ cancellable, error)) {
+ g_prefix_error (error, "failed to run refine for %s: ", ref);
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GHashTable) applist_by_flatpaks = NULL;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ /* build and run transaction for each flatpak installation */
+ applist_by_flatpaks = _group_apps_by_installation (plugin, list);
+ g_hash_table_iter_init (&iter, applist_by_flatpaks);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GsFlatpak *flatpak = GS_FLATPAK (key);
+ GsAppList *list_tmp = GS_APP_LIST (value);
+
+ g_assert (GS_IS_FLATPAK (flatpak));
+ g_assert (list_tmp != NULL);
+ g_assert (gs_app_list_length (list_tmp) > 0);
+
+ if (!gs_plugin_flatpak_update (plugin, flatpak, list_tmp, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static GsApp *
+gs_plugin_flatpak_file_to_app_repo (GsPlugin *plugin,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsApp) app = NULL;
+
+ /* parse the repo file */
+ app = gs_flatpak_app_new_from_repo_file (file, cancellable, error);
+ if (app == NULL)
+ return NULL;
+
+ /* already exists */
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsApp) app_tmp = NULL;
+ app_tmp = gs_flatpak_find_source_by_url (flatpak,
+ gs_flatpak_app_get_repo_url (app),
+ cancellable, &error_local);
+ if (app_tmp == NULL) {
+ g_debug ("%s", error_local->message);
+ continue;
+ }
+ return g_steal_pointer (&app_tmp);
+ }
+
+ /* this is new */
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ return g_steal_pointer (&app);
+}
+
+static GsFlatpak *
+gs_plugin_flatpak_create_temporary (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ g_autofree gchar *installation_path = NULL;
+ g_autoptr(FlatpakInstallation) installation = NULL;
+ g_autoptr(GFile) installation_file = NULL;
+
+ /* create new per-user installation in a cache dir */
+ installation_path = gs_utils_get_cache_filename ("flatpak",
+ "installation-tmp",
+ GS_UTILS_CACHE_FLAG_WRITEABLE |
+ GS_UTILS_CACHE_FLAG_ENSURE_EMPTY,
+ error);
+ if (installation_path == NULL)
+ return NULL;
+ installation_file = g_file_new_for_path (installation_path);
+ installation = flatpak_installation_new_for_path (installation_file,
+ TRUE, /* user */
+ cancellable,
+ error);
+ if (installation == NULL) {
+ gs_flatpak_error_convert (error);
+ return NULL;
+ }
+ return gs_flatpak_new (plugin, installation, GS_FLATPAK_FLAG_IS_TEMPORARY);
+}
+
+static GsApp *
+gs_plugin_flatpak_file_to_app_bundle (GsPlugin *plugin,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *ref = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsApp) app_tmp = NULL;
+ g_autoptr(GsFlatpak) flatpak_tmp = NULL;
+
+ /* only use the temporary GsFlatpak to avoid the auth dialog */
+ flatpak_tmp = gs_plugin_flatpak_create_temporary (plugin, cancellable, error);
+ if (flatpak_tmp == NULL)
+ return NULL;
+
+ /* add object */
+ app = gs_flatpak_file_to_app_bundle (flatpak_tmp, file, cancellable, error);
+ if (app == NULL)
+ return NULL;
+
+ /* is this already installed or available in a configured remote */
+ ref = gs_flatpak_app_get_ref_display (app);
+ app_tmp = gs_plugin_flatpak_find_app_by_ref (plugin, ref, cancellable, NULL);
+ if (app_tmp != NULL)
+ return g_steal_pointer (&app_tmp);
+
+ /* force this to be 'any' scope for installation */
+ gs_app_set_scope (app, AS_APP_SCOPE_UNKNOWN);
+
+ /* this is new */
+ return g_steal_pointer (&app);
+}
+
+static GsApp *
+gs_plugin_flatpak_file_to_app_ref (GsPlugin *plugin,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsApp *runtime;
+ g_autofree gchar *ref = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsApp) app_tmp = NULL;
+ g_autoptr(GsFlatpak) flatpak_tmp = NULL;
+
+ /* only use the temporary GsFlatpak to avoid the auth dialog */
+ flatpak_tmp = gs_plugin_flatpak_create_temporary (plugin, cancellable, error);
+ if (flatpak_tmp == NULL)
+ return NULL;
+
+ /* add object */
+ app = gs_flatpak_file_to_app_ref (flatpak_tmp, file, cancellable, error);
+ if (app == NULL)
+ return NULL;
+
+ /* is this already installed or available in a configured remote */
+ ref = gs_flatpak_app_get_ref_display (app);
+ app_tmp = gs_plugin_flatpak_find_app_by_ref (plugin, ref, cancellable, NULL);
+ if (app_tmp != NULL)
+ return g_steal_pointer (&app_tmp);
+
+ /* force this to be 'any' scope for installation */
+ gs_app_set_scope (app, AS_APP_SCOPE_UNKNOWN);
+
+ /* do we have a system runtime available */
+ runtime = gs_app_get_runtime (app);
+ if (runtime != NULL) {
+ g_autoptr(GsApp) runtime_tmp = NULL;
+ g_autofree gchar *runtime_ref = gs_flatpak_app_get_ref_display (runtime);
+ runtime_tmp = gs_plugin_flatpak_find_app_by_ref (plugin,
+ runtime_ref,
+ cancellable,
+ NULL);
+ if (runtime_tmp != NULL) {
+ gs_app_set_runtime (app, runtime_tmp);
+ } else {
+ /* the new runtime is available from the RuntimeRepo */
+ if (gs_flatpak_app_get_runtime_url (runtime) != NULL)
+ gs_app_set_state (runtime, AS_APP_STATE_AVAILABLE_LOCAL);
+ }
+ }
+
+ /* this is new */
+ return g_steal_pointer (&app);
+}
+
+gboolean
+gs_plugin_file_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *content_type = NULL;
+ g_autoptr(GsApp) app = NULL;
+ const gchar *mimetypes_bundle[] = {
+ "application/vnd.flatpak",
+ NULL };
+ const gchar *mimetypes_repo[] = {
+ "application/vnd.flatpak.repo",
+ NULL };
+ const gchar *mimetypes_ref[] = {
+ "application/vnd.flatpak.ref",
+ NULL };
+
+ /* does this match any of the mimetypes we support */
+ content_type = gs_utils_get_content_type (file, cancellable, error);
+ if (content_type == NULL)
+ return FALSE;
+ if (g_strv_contains (mimetypes_bundle, content_type)) {
+ app = gs_plugin_flatpak_file_to_app_bundle (plugin, file,
+ cancellable, error);
+ if (app == NULL)
+ return FALSE;
+ } else if (g_strv_contains (mimetypes_repo, content_type)) {
+ app = gs_plugin_flatpak_file_to_app_repo (plugin, file,
+ cancellable, error);
+ if (app == NULL)
+ return FALSE;
+ } else if (g_strv_contains (mimetypes_ref, content_type)) {
+ app = gs_plugin_flatpak_file_to_app_ref (plugin, file,
+ cancellable, error);
+ if (app == NULL)
+ return FALSE;
+ }
+ if (app != NULL)
+ gs_app_list_add (list, app);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_search (flatpak, (const gchar * const *) values, list,
+ cancellable, error)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_categories (GsPlugin *plugin,
+ GPtrArray *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_categories (flatpak, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_category_apps (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_category_apps (flatpak,
+ category,
+ list,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_popular (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_popular (flatpak, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_alternates (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_alternates (flatpak, app, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_featured (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_featured (flatpak, list, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_recent (GsPlugin *plugin,
+ GsAppList *list,
+ guint64 age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ for (guint i = 0; i < priv->flatpaks->len; i++) {
+ GsFlatpak *flatpak = g_ptr_array_index (priv->flatpaks, i);
+ if (!gs_flatpak_add_recent (flatpak, list, age, cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
diff --git a/plugins/flatpak/gs-self-test.c b/plugins/flatpak/gs-self-test.c
new file mode 100644
index 0000000..ae0acda
--- /dev/null
+++ b/plugins/flatpak/gs-self-test.c
@@ -0,0 +1,1936 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gstdio.h>
+
+#include "gnome-software-private.h"
+
+#include "gs-flatpak-app.h"
+
+#include "gs-test.h"
+
+static gboolean
+gs_flatpak_test_write_repo_file (const gchar *fn, const gchar *testdir, GFile **file_out, GError **error)
+{
+ g_autofree gchar *testdir_repourl = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autofree gchar *path = NULL;
+
+ /* create file */
+ testdir_repourl = g_strdup_printf ("file://%s/repo", testdir);
+ g_string_append (str, "[Flatpak Repo]\n");
+ g_string_append (str, "Title=foo-bar\n");
+ g_string_append (str, "Comment=Longer one line comment\n");
+ g_string_append (str, "Description=Longer multiline comment that "
+ "does into detail.\n");
+ g_string_append (str, "DefaultBranch=master\n");
+ g_string_append_printf (str, "Url=%s\n", testdir_repourl);
+ g_string_append (str, "Homepage=http://foo.bar\n");
+
+ path = g_build_filename (g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR"), fn, NULL);
+ *file_out = g_file_new_for_path (path);
+
+ return g_file_set_contents (path, str->str, -1, error);
+}
+
+static gboolean
+gs_flatpak_test_write_ref_file (const gchar *filename, const gchar *url, const gchar *runtimerepo, GFile **file_out, GError **error)
+{
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autofree gchar *path = NULL;
+
+ g_return_val_if_fail (filename != NULL, FALSE);
+ g_return_val_if_fail (url != NULL, FALSE);
+ g_return_val_if_fail (runtimerepo != NULL, FALSE);
+
+ g_string_append (str, "[Flatpak Ref]\n");
+ g_string_append (str, "Title=Chiron\n");
+ g_string_append (str, "Name=org.test.Chiron\n");
+ g_string_append (str, "Branch=master\n");
+ g_string_append_printf (str, "Url=%s\n", url);
+ g_string_append (str, "IsRuntime=False\n");
+ g_string_append (str, "Comment=Single line synopsis\n");
+ g_string_append (str, "Description=A Testing Application\n");
+ g_string_append (str, "Icon=https://getfedora.org/static/images/fedora-logotext.png\n");
+ g_string_append_printf (str, "RuntimeRepo=%s\n", runtimerepo);
+
+ path = g_build_filename (g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR"), filename, NULL);
+ *file_out = g_file_new_for_path (path);
+
+ return g_file_set_contents (path, str->str, -1, error);
+}
+
+/* create duplicate file as if downloaded in firefox */
+static void
+gs_plugins_flatpak_repo_non_ascii_func (GsPluginLoader *plugin_loader)
+{
+ const gchar *fn = "example (1)….flatpakrepo";
+ gboolean ret;
+ g_autofree gchar *testdir = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get a resolvable */
+ testdir = gs_test_get_filename (TESTDATADIR, "app-with-runtime");
+ if (testdir == NULL)
+ return;
+
+ ret = gs_flatpak_test_write_repo_file (fn, testdir, &file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (app != NULL);
+ g_assert_cmpstr (gs_app_get_unique_id (app), ==, "*/*/*/source/example__1____/master");
+}
+
+static void
+gs_plugins_flatpak_repo_func (GsPluginLoader *plugin_loader)
+{
+ const gchar *group_name = "remote \"example\"";
+ const gchar *root = NULL;
+ const gchar *fn = "example.flatpakrepo";
+ gboolean ret;
+ g_autofree gchar *config_fn = NULL;
+ g_autofree gchar *remote_url = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autofree gchar *testdir_repourl = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GKeyFile) kf = NULL;
+ g_autoptr(GsApp) app2 = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* no flatpak, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "flatpak"))
+ return;
+
+ /* get a resolvable */
+ testdir = gs_test_get_filename (TESTDATADIR, "app-with-runtime");
+ if (testdir == NULL)
+ return;
+ testdir_repourl = g_strdup_printf ("file://%s/repo", testdir);
+
+ /* create file */
+ ret = gs_flatpak_test_write_repo_file (fn, testdir, &file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* load local file */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (app != NULL);
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_SOURCE);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "example");
+ g_assert_cmpstr (gs_app_get_management_plugin (app), ==, "flatpak");
+ g_assert_cmpstr (gs_app_get_origin_hostname (app), ==, "localhost");
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://foo.bar");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "foo-bar");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Longer one line comment");
+ g_assert_cmpstr (gs_app_get_description (app), ==,
+ "Longer multiline comment that does into detail.");
+ g_assert_true (gs_app_get_local_file (app) != NULL);
+ g_assert_true (gs_app_get_pixbuf (app) != NULL);
+
+ /* now install the remote */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+
+ /* check config file was updated */
+ root = g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR");
+ config_fn = g_build_filename (root, "flatpak", "repo", "config", NULL);
+ kf = g_key_file_new ();
+ ret = g_key_file_load_from_file (kf, config_fn, 0, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ g_assert_true (g_key_file_has_group (kf, "core"));
+ g_assert_true (g_key_file_has_group (kf, group_name));
+ g_assert_true (!g_key_file_get_boolean (kf, group_name, "gpg-verify", NULL));
+
+ /* check the URL was unmangled */
+ remote_url = g_key_file_get_string (kf, group_name, "url", &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (remote_url, ==, testdir_repourl);
+
+ /* try again, check state is correct */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ NULL);
+ app2 = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (app2 != NULL);
+ g_assert_cmpint (gs_app_get_state (app2), ==, AS_APP_STATE_INSTALLED);
+
+ /* remove it */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpint (gs_app_get_progress (app), ==, GS_APP_PROGRESS_UNKNOWN);
+}
+
+static void
+progress_notify_cb (GObject *obj, GParamSpec *pspec, gpointer user_data)
+{
+ gboolean *seen_unknown = user_data;
+ GsApp *app = GS_APP (obj);
+
+ if (gs_app_get_progress (app) == GS_APP_PROGRESS_UNKNOWN)
+ *seen_unknown = TRUE;
+}
+
+static void
+gs_plugins_flatpak_app_with_runtime_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ GsApp *runtime;
+ const gchar *root;
+ gboolean ret;
+ gint kf_remote_repo_version;
+ g_autofree gchar *changed_fn = NULL;
+ g_autofree gchar *config_fn = NULL;
+ g_autofree gchar *desktop_fn = NULL;
+ g_autofree gchar *kf_remote_url = NULL;
+ g_autofree gchar *metadata_fn = NULL;
+ g_autofree gchar *repodir_fn = NULL;
+ g_autofree gchar *runtime_fn = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autofree gchar *testdir_repourl = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GKeyFile) kf1 = g_key_file_new ();
+ g_autoptr(GKeyFile) kf2 = g_key_file_new ();
+ g_autoptr(GsApp) app_source = NULL;
+ g_autoptr(GsAppList) list_all = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) sources = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ gulong signal_id;
+ gboolean seen_unknown;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* no flatpak, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "flatpak"))
+ return;
+
+ /* no files to use */
+ repodir_fn = gs_test_get_filename (TESTDATADIR, "app-with-runtime/repo");
+ if (repodir_fn == NULL ||
+ !g_file_test (repodir_fn, G_FILE_TEST_EXISTS)) {
+ g_test_skip ("no flatpak test repo");
+ return;
+ }
+
+ /* check changed file exists */
+ root = g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR");
+ changed_fn = g_build_filename (root, "flatpak", ".changed", NULL);
+ g_assert_true (g_file_test (changed_fn, G_FILE_TEST_IS_REGULAR));
+
+ /* check repo is set up */
+ config_fn = g_build_filename (root, "flatpak", "repo", "config", NULL);
+ ret = g_key_file_load_from_file (kf1, config_fn, G_KEY_FILE_NONE, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ kf_remote_repo_version = g_key_file_get_integer (kf1, "core", "repo_version", &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (kf_remote_repo_version, ==, 1);
+
+ /* add a remote */
+ app_source = gs_flatpak_app_new ("test");
+ testdir = gs_test_get_filename (TESTDATADIR, "app-with-runtime");
+ if (testdir == NULL)
+ return;
+ testdir_repourl = g_strdup_printf ("file://%s/repo", testdir);
+ gs_app_set_kind (app_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (app_source, "flatpak");
+ gs_app_set_state (app_source, AS_APP_STATE_AVAILABLE);
+ gs_flatpak_app_set_repo_url (app_source, testdir_repourl);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* check remote was set up */
+ ret = g_key_file_load_from_file (kf2, config_fn, G_KEY_FILE_NONE, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ kf_remote_url = g_key_file_get_string (kf2, "remote \"test\"", "url", &error);
+ g_assert_no_error (error);
+ g_assert_cmpstr (kf_remote_url, !=, NULL);
+
+ /* check the source now exists */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES, NULL);
+ sources = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (sources != NULL);
+ g_assert_cmpint (gs_app_list_length (sources), ==, 1);
+ app = gs_app_list_index (sources, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "test");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_SOURCE);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) G_MAXUINT,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* all the apps should have the flatpak keyword */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "flatpak",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list_all = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (list_all != NULL);
+ g_assert_cmpint (gs_app_list_length (list_all), ==, 2);
+
+ /* find available application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "Bingo",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (list != NULL);
+
+ /* make sure there is one entry, the flatpak app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpint ((gint64) gs_app_get_kudos (app), ==,
+ GS_APP_KUDO_MY_LANGUAGE |
+ GS_APP_KUDO_HAS_KEYWORDS |
+ GS_APP_KUDO_HI_DPI_ICON |
+ GS_APP_KUDO_SANDBOXED_SECURE |
+ GS_APP_KUDO_SANDBOXED);
+ g_assert_cmpstr (gs_app_get_origin_hostname (app), ==, "localhost");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_cmpstr (gs_app_get_update_version (app), ==, NULL);
+ g_assert_cmpstr (gs_app_get_update_details (app), ==, NULL);
+ g_assert_cmpint (gs_app_get_update_urgency (app), ==, AS_URGENCY_KIND_UNKNOWN);
+
+ /* check runtime */
+ runtime = gs_app_get_runtime (app);
+ g_assert_true (runtime != NULL);
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/master");
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* install, also installing runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_cmpint (gs_app_get_progress (app), ==, GS_APP_PROGRESS_UNKNOWN);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+
+ /* check the application exists in the right places */
+ metadata_fn = g_build_filename (root,
+ "flatpak",
+ "app",
+ "org.test.Chiron",
+ "current",
+ "active",
+ "metadata",
+ NULL);
+ g_assert_true (g_file_test (metadata_fn, G_FILE_TEST_IS_REGULAR));
+ desktop_fn = g_build_filename (root,
+ "flatpak",
+ "app",
+ "org.test.Chiron",
+ "current",
+ "active",
+ "export",
+ "share",
+ "applications",
+ "org.test.Chiron.desktop",
+ NULL);
+ g_assert_true (g_file_test (desktop_fn, G_FILE_TEST_IS_REGULAR));
+
+ /* check the runtime was installed as well */
+ runtime_fn = g_build_filename (root,
+ "flatpak",
+ "runtime",
+ "org.test.Runtime",
+ "x86_64",
+ "master",
+ "active",
+ "files",
+ "share",
+ "libtest",
+ "README",
+ NULL);
+ g_assert_true (g_file_test (runtime_fn, G_FILE_TEST_IS_REGULAR));
+
+ /* remove the application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+ g_assert_true (!g_file_test (metadata_fn, G_FILE_TEST_IS_REGULAR));
+ g_assert_true (!g_file_test (desktop_fn, G_FILE_TEST_IS_REGULAR));
+
+ /* install again, to check whether the progress gets initialized;
+ * since installation happens in another thread, we have to monitor all
+ * changes to the progress and see if we see the one we want */
+ seen_unknown = (gs_app_get_progress (app) == GS_APP_PROGRESS_UNKNOWN);
+ signal_id = g_signal_connect (app, "notify::progress",
+ G_CALLBACK (progress_notify_cb), &seen_unknown);
+
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+
+ /* progress should be set to unknown right before installing */
+ while (!seen_unknown)
+ g_main_context_iteration (NULL, TRUE);
+ g_assert_true (seen_unknown);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_cmpint (gs_app_get_progress (app), ==, GS_APP_PROGRESS_UNKNOWN);
+ g_signal_handler_disconnect (app, signal_id);
+
+ /* remove the application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+ g_assert_true (!g_file_test (metadata_fn, G_FILE_TEST_IS_REGULAR));
+ g_assert_true (!g_file_test (desktop_fn, G_FILE_TEST_IS_REGULAR));
+
+ /* remove the remote (fail, as the runtime is still installed) */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED);
+ g_assert_true (!ret);
+ g_clear_error (&error);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* remove the runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* remove the remote */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_AVAILABLE);
+}
+
+static void
+gs_plugins_flatpak_app_missing_runtime_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ gboolean ret;
+ g_autofree gchar *repodir_fn = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autofree gchar *testdir_repourl = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app_source = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* no flatpak, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "flatpak"))
+ return;
+
+ /* no files to use */
+ repodir_fn = gs_test_get_filename (TESTDATADIR, "app-missing-runtime/repo");
+ if (repodir_fn == NULL ||
+ !g_file_test (repodir_fn, G_FILE_TEST_EXISTS)) {
+ g_test_skip ("no flatpak test repo");
+ return;
+ }
+
+ /* add a remote */
+ app_source = gs_flatpak_app_new ("test");
+ testdir = gs_test_get_filename (TESTDATADIR, "app-missing-runtime");
+ if (testdir == NULL)
+ return;
+ testdir_repourl = g_strdup_printf ("file://%s/repo", testdir);
+ gs_app_set_kind (app_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (app_source, "flatpak");
+ gs_app_set_state (app_source, AS_APP_STATE_AVAILABLE);
+ gs_flatpak_app_set_repo_url (app_source, testdir_repourl);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) G_MAXUINT,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* find available application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "Bingo",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (list != NULL);
+
+ /* make sure there is one entry, the flatpak app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+
+ /* install, also installing runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_NOT_SUPPORTED);
+ g_assert_true (!ret);
+ g_clear_error (&error);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpint (gs_app_get_progress (app), ==, GS_APP_PROGRESS_UNKNOWN);
+
+ /* remove the remote */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_AVAILABLE);
+}
+
+static void
+update_app_progress_notify_cb (GsApp *app, GParamSpec *pspec, gpointer user_data)
+{
+ g_debug ("progress now %u%%", gs_app_get_progress (app));
+ if (user_data != NULL) {
+ guint *tmp = (guint *) user_data;
+ (*tmp)++;
+ }
+}
+
+static void
+update_app_state_notify_cb (GsApp *app, GParamSpec *pspec, gpointer user_data)
+{
+ AsAppState state = gs_app_get_state (app);
+ g_debug ("state now %s", as_app_state_to_string (state));
+ if (state == AS_APP_STATE_INSTALLING) {
+ gboolean *tmp = (gboolean *) user_data;
+ *tmp = TRUE;
+ }
+}
+
+static gboolean
+update_app_action_delay_cb (gpointer user_data)
+{
+ GMainLoop *loop = (GMainLoop *) user_data;
+ g_main_loop_quit (loop);
+ return FALSE;
+}
+
+static void
+update_app_action_finish_sync (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ ret = gs_plugin_loader_job_action_finish (plugin_loader, res, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_timeout_add_seconds (5, update_app_action_delay_cb, user_data);
+}
+
+static void
+gs_plugins_flatpak_runtime_repo_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app_source;
+ GsApp *runtime;
+ const gchar *fn_ref = "test.flatpakref";
+ const gchar *fn_repo = "test.flatpakrepo";
+ gboolean ret;
+ g_autoptr(GFile) fn_repo_file = NULL;
+ g_autofree gchar *fn_repourl = NULL;
+ g_autofree gchar *testdir2 = NULL;
+ g_autofree gchar *testdir2_repourl = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GMainLoop) loop = g_main_loop_new (NULL, FALSE);
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsAppList) sources2 = NULL;
+ g_autoptr(GsAppList) sources = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* write a flatpakrepo file */
+ testdir = gs_test_get_filename (TESTDATADIR, "only-runtime");
+ if (testdir == NULL)
+ return;
+ ret = gs_flatpak_test_write_repo_file (fn_repo, testdir, &fn_repo_file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* write a flatpakref file */
+ fn_repourl = g_file_get_uri (fn_repo_file);
+ testdir2 = gs_test_get_filename (TESTDATADIR, "app-missing-runtime");
+ if (testdir2 == NULL)
+ return;
+ testdir2_repourl = g_strdup_printf ("file://%s/repo", testdir2);
+ ret = gs_flatpak_test_write_ref_file (fn_ref, testdir2_repourl, fn_repourl, &file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* convert it to a GsApp */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (app != NULL);
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/*/desktop/org.test.Chiron/master"));
+ g_assert_true (gs_app_get_local_file (app) != NULL);
+
+ /* get runtime */
+ runtime = gs_app_get_runtime (app);
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/*/runtime/org.test.Runtime/master");
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+
+ /* check the number of sources */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES, NULL);
+ sources = gs_plugin_loader_job_process (plugin_loader, plugin_job,
+ NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (sources != NULL);
+ g_assert_cmpint (gs_app_list_length (sources), ==, 0);
+
+ /* install, which will install the runtime from the new remote */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader, plugin_job,
+ NULL,
+ update_app_action_finish_sync,
+ loop);
+ g_main_loop_run (loop);
+ gs_test_flush_main_context ();
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+
+ /* check the number of sources */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES, NULL);
+ sources2 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (sources2 != NULL);
+ g_assert_cmpint (gs_app_list_length (sources2), ==, 1);
+
+ /* remove the app */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UNKNOWN);
+
+ /* remove the runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* remove the remote */
+ app_source = gs_app_list_index (sources2, 0);
+ g_assert_true (app_source != NULL);
+ g_assert_cmpstr (gs_app_get_unique_id (app_source), ==, "user/flatpak/*/source/test/*");
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_AVAILABLE);
+}
+
+/* same as gs_plugins_flatpak_runtime_repo_func, but this time manually
+ * installing the flatpakrepo BEFORE the flatpakref is installed */
+static void
+gs_plugins_flatpak_runtime_repo_redundant_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app_source;
+ GsApp *runtime;
+ const gchar *fn_ref = "test.flatpakref";
+ const gchar *fn_repo = "test.flatpakrepo";
+ gboolean ret;
+ g_autofree gchar *fn_repourl = NULL;
+ g_autofree gchar *testdir2 = NULL;
+ g_autofree gchar *testdir2_repourl = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GFile) file_repo = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsApp) app_src = NULL;
+ g_autoptr(GsAppList) sources2 = NULL;
+ g_autoptr(GsAppList) sources = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* write a flatpakrepo file */
+ testdir = gs_test_get_filename (TESTDATADIR, "only-runtime");
+ if (testdir == NULL)
+ return;
+ ret = gs_flatpak_test_write_repo_file (fn_repo, testdir, &file_repo, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* convert it to a GsApp */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file_repo,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ NULL);
+ app_src = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (app_src != NULL);
+ g_assert_cmpint (gs_app_get_kind (app_src), ==, AS_APP_KIND_SOURCE);
+ g_assert_cmpint (gs_app_get_state (app_src), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+ g_assert_cmpstr (gs_app_get_id (app_src), ==, "test");
+ g_assert_cmpstr (gs_app_get_unique_id (app_src), ==, "*/*/*/source/test/master");
+ g_assert_true (gs_app_get_local_file (app_src) != NULL);
+
+ /* install the source manually */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_src,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_src), ==, AS_APP_STATE_INSTALLED);
+
+ /* write a flatpakref file */
+ fn_repourl = g_file_get_uri (file_repo);
+ testdir2 = gs_test_get_filename (TESTDATADIR, "app-missing-runtime");
+ if (testdir2 == NULL)
+ return;
+ testdir2_repourl = g_strdup_printf ("file://%s/repo", testdir2);
+ ret = gs_flatpak_test_write_ref_file (fn_ref, testdir2_repourl, fn_repourl, &file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* convert it to a GsApp */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (app != NULL);
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/*/desktop/org.test.Chiron/master"));
+ g_assert_true (gs_app_get_local_file (app) != NULL);
+
+ /* get runtime */
+ runtime = gs_app_get_runtime (app);
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/master");
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* check the number of sources */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES, NULL);
+ sources = gs_plugin_loader_job_process (plugin_loader, plugin_job,
+ NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (sources != NULL);
+ g_assert_cmpint (gs_app_list_length (sources), ==, 1); /* repo */
+
+ /* install, which will NOT install the runtime from the RuntimeRemote,
+ * but from the existing test repo */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+
+ /* check the number of sources */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES, NULL);
+ sources2 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (sources2 != NULL);
+
+ /* remove the app */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UNKNOWN);
+
+ /* remove the runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* remove the remote */
+ app_source = gs_app_list_index (sources2, 0);
+ g_assert_true (app_source != NULL);
+ g_assert_cmpstr (gs_app_get_unique_id (app_source), ==, "user/flatpak/*/source/test/*");
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_AVAILABLE);
+}
+
+static void
+gs_plugins_flatpak_broken_remote_func (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ const gchar *fn = "test.flatpakref";
+ const gchar *fn_repo = "test.flatpakrepo";
+ g_autoptr(GFile) fn_repo_file = NULL;
+ g_autofree gchar *fn_repourl = NULL;
+ g_autofree gchar *testdir2 = NULL;
+ g_autofree gchar *testdir2_repourl = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsApp) app_source = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* no flatpak, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "flatpak"))
+ return;
+
+ /* add a remote with only the runtime in */
+ app_source = gs_flatpak_app_new ("test");
+ testdir = gs_test_get_filename (TESTDATADIR, "only-runtime");
+ if (testdir == NULL)
+ return;
+ gs_app_set_kind (app_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (app_source, "flatpak");
+ gs_app_set_state (app_source, AS_APP_STATE_AVAILABLE);
+ gs_flatpak_app_set_repo_url (app_source, "file:///wont/work");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* write a flatpakrepo file (the flatpakref below must have a RuntimeRepo=
+ * to avoid a warning) */
+ testdir2 = gs_test_get_filename (TESTDATADIR, "app-with-runtime");
+ if (testdir2 == NULL)
+ return;
+ ret = gs_flatpak_test_write_repo_file (fn_repo, testdir2, &fn_repo_file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* write a flatpakref file */
+ fn_repourl = g_file_get_uri (fn_repo_file);
+ testdir2_repourl = g_strdup_printf ("file://%s/repo", testdir2);
+ ret = gs_flatpak_test_write_ref_file (fn, testdir2_repourl, fn_repourl, &file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* convert it to a GsApp */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (app != NULL);
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+#if FLATPAK_CHECK_VERSION(1,1,2)
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/chiron-origin/desktop/org.test.Chiron/master"));
+#else
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/org.test.Chiron-origin/desktop/org.test.Chiron/master"));
+#endif
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://127.0.0.1/");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "Chiron");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Single line synopsis");
+ g_assert_cmpstr (gs_app_get_description (app), ==, "Long description.");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_true (gs_app_get_local_file (app) != NULL);
+
+ /* remove source */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+}
+
+static void
+flatpak_bundle_or_ref_helper (GsPluginLoader *plugin_loader,
+ gboolean is_bundle)
+{
+ GsApp *app_tmp;
+ GsApp *runtime;
+ gboolean ret;
+ GsPluginRefineFlags refine_flags;
+ g_autofree gchar *fn = NULL;
+ g_autofree gchar *testdir = NULL;
+ g_autofree gchar *testdir_repourl = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsApp) app2 = NULL;
+ g_autoptr(GsApp) app_source = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) search1 = NULL;
+ g_autoptr(GsAppList) search2 = NULL;
+ g_autoptr(GsAppList) sources = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* no flatpak, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "flatpak"))
+ return;
+
+ /* add a remote with only the runtime in */
+ app_source = gs_flatpak_app_new ("test");
+ testdir = gs_test_get_filename (TESTDATADIR, "only-runtime");
+ if (testdir == NULL)
+ return;
+ testdir_repourl = g_strdup_printf ("file://%s/repo", testdir);
+ gs_app_set_kind (app_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (app_source, "flatpak");
+ gs_app_set_state (app_source, AS_APP_STATE_AVAILABLE);
+ gs_flatpak_app_set_repo_url (app_source, testdir_repourl);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) 0,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* find available application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "runtime",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (list != NULL);
+
+ /* make sure there is one entry, the flatpak runtime */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ runtime = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (runtime), ==, "org.test.Runtime");
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/master");
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* install the runtime ahead of time */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+
+ if (is_bundle) {
+ /* find the flatpak bundle file */
+ fn = gs_test_get_filename (TESTDATADIR, "chiron.flatpak");
+ g_assert_true (fn != NULL);
+ file = g_file_new_for_path (fn);
+ refine_flags = GS_PLUGIN_REFINE_FLAGS_DEFAULT;
+ } else {
+ const gchar *fn_repo = "test.flatpakrepo";
+ g_autoptr(GFile) fn_repo_file = NULL;
+ g_autofree gchar *fn_repourl = NULL;
+ g_autofree gchar *testdir2 = NULL;
+ g_autofree gchar *testdir2_repourl = NULL;
+
+ /* write a flatpakrepo file (the flatpakref below must have a RuntimeRepo=
+ * to avoid a warning) */
+ testdir2 = gs_test_get_filename (TESTDATADIR, "app-with-runtime");
+ if (testdir2 == NULL)
+ return;
+ ret = gs_flatpak_test_write_repo_file (fn_repo, testdir2, &fn_repo_file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* write a flatpakref file */
+ fn_repourl = g_file_get_uri (fn_repo_file);
+ testdir2_repourl = g_strdup_printf ("file://%s/repo", testdir2);
+ fn = g_strdup ("test.flatpakref");
+ ret = gs_flatpak_test_write_ref_file (fn, testdir2_repourl, fn_repourl, &file, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ refine_flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME;
+ }
+
+ /* convert it to a GsApp */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", refine_flags,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (app != NULL);
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DESKTOP);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE_LOCAL);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "Chiron");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Single line synopsis");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_true (gs_app_get_local_file (app) != NULL);
+ if (is_bundle) {
+ /* Note: The origin is set to "flatpak" here because an origin remote
+ * won't be created until the app is installed.
+ */
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/flatpak/desktop/org.test.Chiron/master"));
+ g_assert_true (gs_flatpak_app_get_file_kind (app) == GS_FLATPAK_APP_FILE_KIND_BUNDLE);
+ } else {
+#if FLATPAK_CHECK_VERSION(1,1,2)
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/chiron-origin/desktop/org.test.Chiron/master"));
+#else
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app),
+ "user/flatpak/org.test.Chiron-origin/desktop/org.test.Chiron/master"));
+#endif
+ g_assert_true (gs_flatpak_app_get_file_kind (app) == GS_FLATPAK_APP_FILE_KIND_REF);
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://127.0.0.1/");
+ g_assert_cmpstr (gs_app_get_description (app), ==, "Long description.");
+ }
+
+ /* get runtime */
+ runtime = gs_app_get_runtime (app);
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/master");
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_INSTALLED);
+
+ /* install */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_cmpstr (gs_app_get_update_version (app), ==, NULL);
+ g_assert_cmpstr (gs_app_get_update_details (app), ==, NULL);
+
+ /* search for the application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "chiron",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ search1 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (search1 != NULL);
+ g_assert_cmpint (gs_app_list_length (search1), ==, 1);
+ app_tmp = gs_app_list_index (search1, 0);
+ g_assert_cmpstr (gs_app_get_id (app_tmp), ==, "org.test.Chiron");
+
+ /* convert it to a GsApp again, and get the installed thing */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ NULL);
+ app2 = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (app2 != NULL);
+ g_assert_cmpint (gs_app_get_state (app2), ==, AS_APP_STATE_INSTALLED);
+ if (is_bundle) {
+#if FLATPAK_CHECK_VERSION(1,1,2)
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app2),
+ "user/flatpak/chiron-origin/desktop/org.test.Chiron/master"));
+#else
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app2),
+ "user/flatpak/org.test.Chiron-origin/desktop/org.test.Chiron/master"));
+#endif
+ } else {
+ /* Note: the origin is now test-1 because that remote was created from the
+ * RuntimeRepo= setting
+ */
+ g_assert_true (as_utils_unique_id_equal (gs_app_get_unique_id (app2),
+ "user/flatpak/test-1/desktop/org.test.Chiron/master"));
+ }
+
+ /* remove app */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app2,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* remove runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* remove source */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ if (!is_bundle) {
+ /* remove remote added by RuntimeRepo= in flatpakref */
+ g_autoptr(GsApp) runtime_source = gs_flatpak_app_new ("test-1");
+ gs_app_set_kind (runtime_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (runtime_source, "flatpak");
+ gs_app_set_state (runtime_source, AS_APP_STATE_INSTALLED);
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ }
+
+ /* there should be no sources now */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES, NULL);
+ sources = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (sources != NULL);
+ g_assert_cmpint (gs_app_list_length (sources), ==, 0);
+
+ /* there should be no matches now */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "chiron",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ search2 = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (search2 != NULL);
+ g_assert_cmpint (gs_app_list_length (search2), ==, 0);
+}
+
+static void
+gs_plugins_flatpak_ref_func (GsPluginLoader *plugin_loader)
+{
+ flatpak_bundle_or_ref_helper (plugin_loader, FALSE);
+}
+
+static void
+gs_plugins_flatpak_bundle_func (GsPluginLoader *plugin_loader)
+{
+ flatpak_bundle_or_ref_helper (plugin_loader, TRUE);
+}
+
+static void
+gs_plugins_flatpak_count_signal_cb (GsPluginLoader *plugin_loader, guint *cnt)
+{
+ if (cnt != NULL)
+ (*cnt)++;
+}
+
+static void
+gs_plugins_flatpak_app_update_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ GsApp *app_tmp;
+ GsApp *runtime;
+ GsApp *old_runtime;
+ gboolean got_progress_installing = FALSE;
+ gboolean ret;
+ guint notify_progress_id;
+ guint notify_state_id;
+ guint pending_app_changed_cnt = 0;
+ guint pending_apps_changed_id;
+ guint progress_cnt = 0;
+ guint updates_changed_cnt = 0;
+ guint updates_changed_id;
+ g_autofree gchar *repodir1_fn = NULL;
+ g_autofree gchar *repodir2_fn = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app_source = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) list_updates = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GMainLoop) loop = g_main_loop_new (NULL, FALSE);
+ g_autofree gchar *repo_path = NULL;
+ g_autofree gchar *repo_url = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* no flatpak, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "flatpak"))
+ return;
+
+ /* no files to use */
+ repodir1_fn = gs_test_get_filename (TESTDATADIR, "app-with-runtime/repo");
+ if (repodir1_fn == NULL ||
+ !g_file_test (repodir1_fn, G_FILE_TEST_EXISTS)) {
+ g_test_skip ("no flatpak test repo");
+ return;
+ }
+ repodir2_fn = gs_test_get_filename (TESTDATADIR, "app-update/repo");
+ if (repodir2_fn == NULL ||
+ !g_file_test (repodir2_fn, G_FILE_TEST_EXISTS)) {
+ g_test_skip ("no flatpak test repo");
+ return;
+ }
+
+ /* add indirection so we can switch this after install */
+ repo_path = g_build_filename (g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR"), "repo", NULL);
+ unlink (repo_path);
+ g_assert_true (symlink (repodir1_fn, repo_path) == 0);
+
+ /* add a remote */
+ app_source = gs_flatpak_app_new ("test");
+ gs_app_set_kind (app_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (app_source, "flatpak");
+ gs_app_set_state (app_source, AS_APP_STATE_AVAILABLE);
+ repo_url = g_strdup_printf ("file://%s", repo_path);
+ gs_flatpak_app_set_repo_url (app_source, repo_url);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) G_MAXUINT,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* find available application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "Bingo",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (list != NULL);
+
+ /* make sure there is one entry, the flatpak app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+
+ /* install, also installing runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_cmpstr (gs_app_get_update_version (app), ==, NULL);
+ g_assert_cmpstr (gs_app_get_update_details (app), ==, NULL);
+
+ /* switch to the new repo */
+ g_assert_true (unlink (repo_path) == 0);
+ g_assert_true (symlink (repodir2_fn, repo_path) == 0);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) 0, /* force now */
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* get the updates list */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
+ NULL);
+ list_updates = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (list_updates != NULL);
+
+ /* make sure there are two entries */
+ g_assert_cmpint (gs_app_list_length (list_updates), ==, 1);
+ for (guint i = 0; i < gs_app_list_length (list_updates); i++) {
+ app_tmp = gs_app_list_index (list_updates, i);
+ g_debug ("got update %s", gs_app_get_unique_id (app_tmp));
+ }
+
+ /* check they are the same GObject */
+ app_tmp = gs_app_list_lookup (list_updates, "*/flatpak/test/*/org.test.Chiron/*");
+ g_assert_true (app_tmp == app);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE_LIVE);
+ g_assert_cmpstr (gs_app_get_update_details (app), ==, "Version 1.2.4:\nThis is best.\n\nVersion 1.2.3:\nThis is better.");
+ g_assert_cmpstr (gs_app_get_update_version (app), ==, "1.2.4");
+
+ /* care about signals */
+ pending_apps_changed_id =
+ g_signal_connect (plugin_loader, "pending-apps-changed",
+ G_CALLBACK (gs_plugins_flatpak_count_signal_cb),
+ &pending_app_changed_cnt);
+ updates_changed_id =
+ g_signal_connect (plugin_loader, "updates-changed",
+ G_CALLBACK (gs_plugins_flatpak_count_signal_cb),
+ &updates_changed_cnt);
+ notify_state_id =
+ g_signal_connect (app, "notify::state",
+ G_CALLBACK (update_app_state_notify_cb),
+ &got_progress_installing);
+ notify_progress_id =
+ g_signal_connect (app, "notify::progress",
+ G_CALLBACK (update_app_progress_notify_cb),
+ &progress_cnt);
+
+ /* check that the runtime is not the update's one */
+ old_runtime = gs_app_get_runtime (app);
+ g_assert_true (old_runtime != NULL);
+ g_assert_cmpstr (gs_app_get_branch (old_runtime), !=, "new_master");
+
+ /* use a mainloop so we get the events in the default context */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader, plugin_job,
+ NULL,
+ update_app_action_finish_sync,
+ loop);
+ g_main_loop_run (loop);
+ gs_test_flush_main_context ();
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.4");
+ g_assert_cmpstr (gs_app_get_update_version (app), ==, NULL);
+ g_assert_cmpstr (gs_app_get_update_details (app), ==, NULL);
+ g_assert_cmpint (gs_app_get_progress (app), ==, GS_APP_PROGRESS_UNKNOWN);
+ g_assert_true (got_progress_installing);
+ //g_assert_cmpint (progress_cnt, >, 20); //FIXME: bug in OSTree
+ g_assert_cmpint (pending_app_changed_cnt, ==, 0);
+ g_assert_cmpint (updates_changed_cnt, ==, 1);
+
+ /* check that the app's runtime has changed */
+ runtime = gs_app_get_runtime (app);
+ g_assert_true (runtime != NULL);
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/new_master");
+ g_assert_true (old_runtime != runtime);
+ g_assert_cmpstr (gs_app_get_branch (runtime), ==, "new_master");
+ g_assert_true (gs_app_get_state (runtime) == AS_APP_STATE_INSTALLED);
+
+ /* no longer care */
+ g_signal_handler_disconnect (plugin_loader, pending_apps_changed_id);
+ g_signal_handler_disconnect (plugin_loader, updates_changed_id);
+ g_signal_handler_disconnect (app, notify_state_id);
+ g_signal_handler_disconnect (app, notify_progress_id);
+
+ /* remove the app */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* remove the old_runtime */
+ g_assert_cmpstr (gs_app_get_unique_id (old_runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/master");
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", old_runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* remove the runtime */
+ g_assert_cmpstr (gs_app_get_unique_id (runtime), ==, "user/flatpak/test/runtime/org.test.Runtime/new_master");
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* remove the remote */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_AVAILABLE);
+}
+
+static void
+gs_plugins_flatpak_runtime_extension_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ GsApp *runtime;
+ GsApp *app_tmp;
+ gboolean got_progress_installing = FALSE;
+ gboolean ret;
+ guint notify_progress_id;
+ guint notify_state_id;
+ guint pending_app_changed_cnt = 0;
+ guint pending_apps_changed_id;
+ guint progress_cnt = 0;
+ guint updates_changed_cnt = 0;
+ guint updates_changed_id;
+ g_autofree gchar *repodir1_fn = NULL;
+ g_autofree gchar *repodir2_fn = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app_source = NULL;
+ g_autoptr(GsApp) extension = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) list_updates = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GMainLoop) loop = g_main_loop_new (NULL, FALSE);
+ g_autofree gchar *repo_path = NULL;
+ g_autofree gchar *repo_url = NULL;
+
+ /* drop all caches */
+ gs_utils_rmtree (g_getenv ("GS_SELF_TEST_CACHEDIR"), NULL);
+ gs_plugin_loader_setup_again (plugin_loader);
+
+ /* no flatpak, abort */
+ g_assert_true (gs_plugin_loader_get_enabled (plugin_loader, "flatpak"));
+
+ /* no files to use */
+ repodir1_fn = gs_test_get_filename (TESTDATADIR, "app-extension/repo");
+ if (repodir1_fn == NULL ||
+ !g_file_test (repodir1_fn, G_FILE_TEST_EXISTS)) {
+ g_test_skip ("no flatpak test repo");
+ return;
+ }
+ repodir2_fn = gs_test_get_filename (TESTDATADIR, "app-extension-update/repo");
+ if (repodir2_fn == NULL ||
+ !g_file_test (repodir2_fn, G_FILE_TEST_EXISTS)) {
+ g_test_skip ("no flatpak test repo");
+ return;
+ }
+
+ /* add indirection so we can switch this after install */
+ repo_path = g_build_filename (g_getenv ("GS_SELF_TEST_FLATPAK_DATADIR"), "repo", NULL);
+ g_assert_cmpint (symlink (repodir1_fn, repo_path), ==, 0);
+
+ /* add a remote */
+ app_source = gs_flatpak_app_new ("test");
+ gs_app_set_kind (app_source, AS_APP_KIND_SOURCE);
+ gs_app_set_management_plugin (app_source, "flatpak");
+ gs_app_set_state (app_source, AS_APP_STATE_AVAILABLE);
+ repo_url = g_strdup_printf ("file://%s", repo_path);
+ gs_flatpak_app_set_repo_url (app_source, repo_url);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_INSTALLED);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) G_MAXUINT,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* find available application */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "Bingo",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_nonnull (list);
+
+ /* make sure there is one entry, the flatpak app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "org.test.Chiron");
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+
+ /* install, also installing runtime and suggested extensions */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+
+ /* check if the extension was installed */
+ extension = gs_plugin_loader_app_create (plugin_loader,
+ "user/flatpak/*/runtime/org.test.Chiron.Extension/master");
+ g_assert_nonnull (extension);
+ g_assert_cmpint (gs_app_get_state (extension), ==, AS_APP_STATE_INSTALLED);
+
+ /* switch to the new repo (to get the update) */
+ g_assert_cmpint (unlink (repo_path), ==, 0);
+ g_assert_cmpint (symlink (repodir2_fn, repo_path), ==, 0);
+
+ /* refresh the appstream metadata */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) 0, /* force now */
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* get the updates list */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
+ NULL);
+ list_updates = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_nonnull (list_updates);
+
+ g_assert_cmpint (gs_app_list_length (list_updates), ==, 1);
+ for (guint i = 0; i < gs_app_list_length (list_updates); i++) {
+ app_tmp = gs_app_list_index (list_updates, i);
+ g_debug ("got update %s", gs_app_get_unique_id (app_tmp));
+ }
+
+ /* check that the extension has no update */
+ app_tmp = gs_app_list_lookup (list_updates, "*/flatpak/test/*/org.test.Chiron.Extension/*");
+ g_assert_null (app_tmp);
+
+ /* check that the app has an update (it's affected by the extension's update) */
+ app_tmp = gs_app_list_lookup (list_updates, "*/flatpak/test/*/org.test.Chiron/*");
+ g_assert_true (app_tmp == app);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UPDATABLE_LIVE);
+
+ /* care about signals */
+ pending_apps_changed_id =
+ g_signal_connect (plugin_loader, "pending-apps-changed",
+ G_CALLBACK (gs_plugins_flatpak_count_signal_cb),
+ &pending_app_changed_cnt);
+ updates_changed_id =
+ g_signal_connect (plugin_loader, "updates-changed",
+ G_CALLBACK (gs_plugins_flatpak_count_signal_cb),
+ &updates_changed_cnt);
+ notify_state_id =
+ g_signal_connect (app, "notify::state",
+ G_CALLBACK (update_app_state_notify_cb),
+ &got_progress_installing);
+ notify_progress_id =
+ g_signal_connect (app, "notify::progress",
+ G_CALLBACK (update_app_progress_notify_cb),
+ &progress_cnt);
+
+ /* use a mainloop so we get the events in the default context */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (plugin_loader, plugin_job,
+ NULL,
+ update_app_action_finish_sync,
+ loop);
+ g_main_loop_run (loop);
+ gs_test_flush_main_context ();
+#if !FLATPAK_CHECK_VERSION(1,7,3)
+ /* Older flatpak versions don't have the API we use to propagate state
+ * between extension and app
+ */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+#else
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+#endif
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.2.3");
+ g_assert_true (got_progress_installing);
+ g_assert_cmpint (pending_app_changed_cnt, ==, 0);
+
+ /* check the extension's state after the update */
+ g_assert_cmpint (gs_app_get_state (extension), ==, AS_APP_STATE_INSTALLED);
+
+ /* no longer care */
+ g_signal_handler_disconnect (plugin_loader, pending_apps_changed_id);
+ g_signal_handler_disconnect (plugin_loader, updates_changed_id);
+ g_signal_handler_disconnect (app, notify_state_id);
+ g_signal_handler_disconnect (app, notify_progress_id);
+
+ /* getting the runtime for later removal */
+ runtime = gs_app_get_runtime (app);
+
+ /* remove the app */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* remove the runtime */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", runtime,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (runtime), ==, AS_APP_STATE_AVAILABLE);
+
+ /* remove the remote */
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app_source,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert_true (ret);
+ g_assert_cmpint (gs_app_get_state (app_source), ==, AS_APP_STATE_AVAILABLE);
+
+ /* verify that the extension has been removed by the app's removal */
+ g_assert_false (gs_app_is_installed (extension));
+}
+
+int
+main (int argc, char **argv)
+{
+ g_autofree gchar *tmp_root = NULL;
+ gboolean ret;
+ int retval;
+ g_autofree gchar *xml = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "appstream",
+ "flatpak",
+ "icons",
+ NULL
+ };
+
+ /* While we use %G_TEST_OPTION_ISOLATE_DIRS to create temporary directories
+ * for each of the tests, we want to use the system MIME registry, assuming
+ * that it exists and correctly has shared-mime-info installed. */
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_content_type_set_mime_dirs (NULL);
+#endif
+
+ /* Similarly, add the system-wide icon theme path before it’s
+ * overwritten by %G_TEST_OPTION_ISOLATE_DIRS. */
+ gs_test_expose_icon_theme_paths ();
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+ g_setenv ("GS_XMLB_VERBOSE", "1", TRUE);
+ g_setenv ("GS_SELF_TEST_PLUGIN_ERROR_FAIL_HARD", "1", TRUE);
+
+ /* Use a common cache directory for all tests, since the appstream
+ * plugin uses it and cannot be reinitialised for each test. */
+ tmp_root = g_dir_make_tmp ("gnome-software-flatpak-test-XXXXXX", NULL);
+ g_assert_true (tmp_root != NULL);
+ g_setenv ("GS_SELF_TEST_CACHEDIR", tmp_root, TRUE);
+ g_setenv ("GS_SELF_TEST_FLATPAK_DATADIR", tmp_root, TRUE);
+
+ /* allow dist'ing with no gnome-software installed */
+ if (g_getenv ("GS_SELF_TEST_SKIP_ALL") != NULL)
+ return 0;
+
+ xml = g_strdup ("<?xml version=\"1.0\"?>\n"
+ "<components version=\"0.9\">\n"
+ " <component type=\"desktop\">\n"
+ " <id>zeus.desktop</id>\n"
+ " <name>Zeus</name>\n"
+ " <summary>A teaching application</summary>\n"
+ " </component>\n"
+ "</components>\n");
+ g_setenv ("GS_SELF_TEST_APPSTREAM_XML", xml, TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR_CORE);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/app-with-runtime",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_app_with_runtime_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/app-missing-runtime",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_app_missing_runtime_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/ref",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_ref_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/bundle",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_bundle_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/broken-remote",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_broken_remote_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/runtime-repo",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_runtime_repo_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/runtime-repo-redundant",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_runtime_repo_redundant_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/app-runtime-extension",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_runtime_extension_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/app-update-runtime",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_app_update_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/repo",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_repo_func);
+ g_test_add_data_func ("/gnome-software/plugins/flatpak/repo{non-ascii}",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_flatpak_repo_non_ascii_func);
+ retval = g_test_run ();
+
+ /* Clean up. */
+ gs_utils_rmtree (tmp_root, NULL);
+
+ return retval;
+}
diff --git a/plugins/flatpak/meson.build b/plugins/flatpak/meson.build
new file mode 100644
index 0000000..0afc5a9
--- /dev/null
+++ b/plugins/flatpak/meson.build
@@ -0,0 +1,70 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFlatpak"']
+deps = [
+ plugin_libs,
+ flatpak,
+ libxmlb,
+ ostree,
+]
+
+if get_option('mogwai')
+ deps += mogwai_schedule_client
+endif
+
+shared_module(
+ 'gs_plugin_flatpak',
+ sources : [
+ 'gs-appstream.c',
+ 'gs-flatpak-app.c',
+ 'gs-flatpak.c',
+ 'gs-flatpak-transaction.c',
+ 'gs-flatpak-utils.c',
+ 'gs-plugin-flatpak.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : deps,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+metainfo = 'org.gnome.Software.Plugin.Flatpak.metainfo.xml'
+
+i18n.merge_file(
+ input: metainfo + '.in',
+ output: metainfo,
+ type: 'xml',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'metainfo')
+)
+
+if get_option('tests')
+ subdir('tests')
+
+ cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+ cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_build_dir(), 'tests') + '"']
+ e = executable(
+ 'gs-self-test-flatpak',
+ compiled_schemas,
+ sources : [
+ 'gs-flatpak-app.c',
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : deps,
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-flatpak', e, suite: ['plugins', 'flatpak'], env: test_env, timeout : 120)
+endif
diff --git a/plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in b/plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in
new file mode 100644
index 0000000..44d6d03
--- /dev/null
+++ b/plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2013-2016 Richard Hughes <richard@hughsie.com> -->
+<component type="addon">
+ <id>org.gnome.Software.Plugin.Flatpak</id>
+ <extends>org.gnome.Software.desktop</extends>
+ <name>Flatpak Support</name>
+ <summary>Flatpak is a framework for desktop applications on Linux</summary>
+ <url type="homepage">http://flatpak.org/</url>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <update_contact>richard_at_hughsie.com</update_contact>
+</component>
diff --git a/plugins/flatpak/tests/app-extension-update/.gitignore b/plugins/flatpak/tests/app-extension-update/.gitignore
new file mode 100644
index 0000000..f606d5e
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension-update/.gitignore
@@ -0,0 +1 @@
+repo
diff --git a/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/.gitignore b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/.gitignore
new file mode 100644
index 0000000..db00ec8
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/.gitignore
@@ -0,0 +1 @@
+files/share/app-info
diff --git a/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/.empty b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/.empty
diff --git a/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/libtest/README b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/libtest/README
new file mode 100644
index 0000000..a0b9703
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/libtest/README
@@ -0,0 +1 @@
+UPDATED! \ No newline at end of file
diff --git a/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml
new file mode 100644
index 0000000..d884539
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2017 Endless Mobile, Inc.
+ Author: Joaquim Rocha <jrocha@endlessm.com>
+-->
+<component type="runtime">
+ <id>org.test.Chiron.Extension</id>
+ <metadata_license>CC0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>Chiron App Extension</name>
+ <summary>Test extension for flatpak self tests</summary>
+</component>
+
diff --git a/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/metadata b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/metadata
new file mode 100644
index 0000000..d81f8f9
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension-update/org.test.Chiron.Extension/metadata
@@ -0,0 +1,6 @@
+[Runtime]
+name=org.test.Chiron.Extension
+sdk=org.test.Runtime/x86_64/master
+
+[ExtensionOf]
+ref=app/org.test.Chiron/x86_64/master
diff --git a/plugins/flatpak/tests/app-extension/.gitignore b/plugins/flatpak/tests/app-extension/.gitignore
new file mode 100644
index 0000000..f606d5e
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/.gitignore
@@ -0,0 +1 @@
+repo
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/.gitignore b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/.gitignore
new file mode 100644
index 0000000..db00ec8
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/.gitignore
@@ -0,0 +1 @@
+files/share/app-info
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/.empty b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/.empty
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/libtest/README b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/libtest/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/libtest/README
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml
new file mode 100644
index 0000000..d884539
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/files/share/metainfo/org.test.Chiron.Extension.metainfo.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2017 Endless Mobile, Inc.
+ Author: Joaquim Rocha <jrocha@endlessm.com>
+-->
+<component type="runtime">
+ <id>org.test.Chiron.Extension</id>
+ <metadata_license>CC0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>Chiron App Extension</name>
+ <summary>Test extension for flatpak self tests</summary>
+</component>
+
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/metadata b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/metadata
new file mode 100644
index 0000000..d81f8f9
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron.Extension/metadata
@@ -0,0 +1,6 @@
+[Runtime]
+name=org.test.Chiron.Extension
+sdk=org.test.Runtime/x86_64/master
+
+[ExtensionOf]
+ref=app/org.test.Chiron/x86_64/master
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron/.gitignore b/plugins/flatpak/tests/app-extension/org.test.Chiron/.gitignore
new file mode 100644
index 0000000..fea15c0
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron/.gitignore
@@ -0,0 +1,2 @@
+export
+files/share/app-info
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron/files/bin/chiron.sh b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/bin/chiron.sh
new file mode 100755
index 0000000..e61d501
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/bin/chiron.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Hello world"
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml
new file mode 100644
index 0000000..0d912a8
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2016 Richard Hughes <richard@hughsie.com> -->
+<component type="desktop">
+ <id>org.test.Chiron.desktop</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>Chiron</name>
+ <summary>Single line synopsis</summary>
+ <description><p>Long description.</p></description>
+ <url type="homepage">http://127.0.0.1/</url>
+ <releases>
+ <release date="2014-12-15" version="1.2.3">
+ <description><p>This is better.</p></description>
+ </release>
+ </releases>
+</component>
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/applications/org.test.Chiron.desktop b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/applications/org.test.Chiron.desktop
new file mode 100644
index 0000000..2fbdf95
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/applications/org.test.Chiron.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Chiron
+Exec=chiron.sh
+Icon=org.test.Chiron
+Keywords=Bingo;
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png
new file mode 100644
index 0000000..0c38f2f
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png
Binary files differ
diff --git a/plugins/flatpak/tests/app-extension/org.test.Chiron/metadata b/plugins/flatpak/tests/app-extension/org.test.Chiron/metadata
new file mode 100644
index 0000000..45b76d6
--- /dev/null
+++ b/plugins/flatpak/tests/app-extension/org.test.Chiron/metadata
@@ -0,0 +1,10 @@
+[Application]
+name=org.test.Chiron
+runtime=org.test.Runtime/x86_64/master
+command=chiron.sh
+
+[Extension org.test.Chiron.Extension]
+directory=share/extension
+subdirectories=true
+version=master
+autodelete=true
diff --git a/plugins/flatpak/tests/app-missing-runtime/.gitignore b/plugins/flatpak/tests/app-missing-runtime/.gitignore
new file mode 100644
index 0000000..f606d5e
--- /dev/null
+++ b/plugins/flatpak/tests/app-missing-runtime/.gitignore
@@ -0,0 +1 @@
+repo
diff --git a/plugins/flatpak/tests/app-missing-runtime/org.test.Chiron b/plugins/flatpak/tests/app-missing-runtime/org.test.Chiron
new file mode 120000
index 0000000..d9384e4
--- /dev/null
+++ b/plugins/flatpak/tests/app-missing-runtime/org.test.Chiron
@@ -0,0 +1 @@
+../app-with-runtime/org.test.Chiron/ \ No newline at end of file
diff --git a/plugins/flatpak/tests/app-update/.gitignore b/plugins/flatpak/tests/app-update/.gitignore
new file mode 100644
index 0000000..f606d5e
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/.gitignore
@@ -0,0 +1 @@
+repo
diff --git a/plugins/flatpak/tests/app-update/org.test.Chiron/.gitignore b/plugins/flatpak/tests/app-update/org.test.Chiron/.gitignore
new file mode 120000
index 0000000..9f2eb6a
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/org.test.Chiron/.gitignore
@@ -0,0 +1 @@
+../../app-with-runtime/org.test.Chiron/.gitignore \ No newline at end of file
diff --git a/plugins/flatpak/tests/app-update/org.test.Chiron/files/bin/chiron.sh b/plugins/flatpak/tests/app-update/org.test.Chiron/files/bin/chiron.sh
new file mode 100644
index 0000000..dfed21c
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/org.test.Chiron/files/bin/chiron.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Hello world, with upgrades"
diff --git a/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml b/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml
new file mode 100644
index 0000000..74eb9db
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2016 Richard Hughes <richard@hughsie.com> -->
+<component type="desktop">
+ <id>org.test.Chiron</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>Chiron</name>
+ <summary>Single line synopsis</summary>
+ <description><p>Long description.</p></description>
+ <url type="homepage">http://127.0.0.1/</url>
+ <releases>
+ <release date="2015-02-13" version="1.2.4">
+ <description><p>This is best.</p></description>
+ </release>
+ <release date="2014-12-15" version="1.2.3">
+ <description><p>This is better.</p></description>
+ </release>
+ </releases>
+</component>
diff --git a/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/applications/org.test.Chiron.desktop b/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/applications/org.test.Chiron.desktop
new file mode 120000
index 0000000..2b06818
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/applications/org.test.Chiron.desktop
@@ -0,0 +1 @@
+../../../../../app-missing-runtime/org.test.Chiron/files/share/applications/org.test.Chiron.desktop \ No newline at end of file
diff --git a/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png b/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png
new file mode 120000
index 0000000..9c37986
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png
@@ -0,0 +1 @@
+../../../../../../../../app-missing-runtime/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png \ No newline at end of file
diff --git a/plugins/flatpak/tests/app-update/org.test.Chiron/metadata b/plugins/flatpak/tests/app-update/org.test.Chiron/metadata
new file mode 100644
index 0000000..1de0ab8
--- /dev/null
+++ b/plugins/flatpak/tests/app-update/org.test.Chiron/metadata
@@ -0,0 +1,4 @@
+[Application]
+name=org.test.Chiron
+runtime=org.test.Runtime/x86_64/new_master
+command=chiron.sh
diff --git a/plugins/flatpak/tests/app-with-runtime/.gitignore b/plugins/flatpak/tests/app-with-runtime/.gitignore
new file mode 100644
index 0000000..f606d5e
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/.gitignore
@@ -0,0 +1 @@
+repo
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/.gitignore b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/.gitignore
new file mode 100644
index 0000000..fea15c0
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/.gitignore
@@ -0,0 +1,2 @@
+export
+files/share/app-info
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/bin/chiron.sh b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/bin/chiron.sh
new file mode 100755
index 0000000..e61d501
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/bin/chiron.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Hello world"
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml
new file mode 100644
index 0000000..58af082
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/appdata/org.test.Chiron.appdata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2016 Richard Hughes <richard@hughsie.com> -->
+<component type="desktop">
+ <id>org.test.Chiron</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>Chiron</name>
+ <summary>Single line synopsis</summary>
+ <description><p>Long description.</p></description>
+ <url type="homepage">http://127.0.0.1/</url>
+ <releases>
+ <release date="2014-12-15" version="1.2.3">
+ <description><p>This is better.</p></description>
+ </release>
+ </releases>
+</component>
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/applications/org.test.Chiron.desktop b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/applications/org.test.Chiron.desktop
new file mode 100644
index 0000000..b744766
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/applications/org.test.Chiron.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Type=Application
+Name=Chiron
+Exec=chiron.sh
+Icon=org.test.Chiron
+Keywords=Bingo;
+X-Flatpak=org.test.Chiron
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png
new file mode 100644
index 0000000..0c38f2f
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/files/share/icons/hicolor/128x128/apps/org.test.Chiron.png
Binary files differ
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/metadata b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/metadata
new file mode 100644
index 0000000..ce57357
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Chiron/metadata
@@ -0,0 +1,4 @@
+[Application]
+name=org.test.Chiron
+runtime=org.test.Runtime/x86_64/master
+command=chiron.sh
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/files/.empty b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/files/.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/files/.empty
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/metadata b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/metadata
new file mode 100644
index 0000000..16f0fa1
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/metadata
@@ -0,0 +1,3 @@
+[Runtime]
+name=org.test.Runtime
+sdk=org.test.Runtime/x86_64/master
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/.gitignore b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/.gitignore
new file mode 100644
index 0000000..3600b9c
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/.gitignore
@@ -0,0 +1 @@
+app-info
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/libtest/README b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/libtest/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/libtest/README
diff --git a/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/metainfo/org.test.Runtime.metainfo.xml b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/metainfo/org.test.Runtime.metainfo.xml
new file mode 100644
index 0000000..5d68c60
--- /dev/null
+++ b/plugins/flatpak/tests/app-with-runtime/org.test.Runtime/usr/share/metainfo/org.test.Runtime.metainfo.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2017 Richard Hughes <richard@hughsie.com> -->
+<component type="runtime">
+ <id>org.test.Runtime</id>
+ <metadata_license>CC0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <name>Test runtime</name>
+ <summary>Test runtime for flatpak self tests</summary>
+</component>
+
diff --git a/plugins/flatpak/tests/build.py b/plugins/flatpak/tests/build.py
new file mode 100755
index 0000000..acc7e66
--- /dev/null
+++ b/plugins/flatpak/tests/build.py
@@ -0,0 +1,125 @@
+#!/usr/bin/python3
+
+import subprocess
+import os
+import shutil
+import configparser
+
+def build_flatpak(appid, srcdir, repodir, branch='master', cleanrepodir=True):
+ print('Building %s from %s into %s' % (appid, srcdir, repodir))
+
+ # delete repodir
+ if cleanrepodir and os.path.exists(repodir):
+ print("Deleting %s" % repodir)
+ shutil.rmtree(repodir)
+
+ # delete exportdir
+ exportdir = os.path.join(srcdir, appid, 'export')
+ if os.path.exists(exportdir):
+ print("Deleting %s" % exportdir)
+ shutil.rmtree(exportdir)
+
+ metadata_path = os.path.join(srcdir, appid, 'metadata')
+ metadata = configparser.ConfigParser()
+ metadata.read(metadata_path)
+ is_runtime = True if 'Runtime' in metadata.sections() else False
+ is_extension = True if 'ExtensionOf' in metadata.sections() else False
+
+ # runtimes have different defaults
+ if is_runtime and not is_extension:
+ prefix = 'usr'
+ else:
+ prefix = 'files'
+
+ # finish the build
+ argv = ['flatpak', 'build-finish']
+ argv.append(os.path.join(srcdir, appid))
+ subprocess.call(argv)
+
+ # compose AppStream data
+ argv = ['appstream-compose']
+ argv.append('--origin=flatpak')
+ argv.append('--basename=%s' % appid)
+ argv.append('--prefix=%s' % os.path.join(srcdir, appid, prefix))
+ argv.append('--output-dir=%s' % os.path.join(srcdir, appid, prefix, 'share/app-info/xmls'))
+ argv.append(appid)
+ subprocess.call(argv)
+
+ # export into repo
+ argv = ['flatpak', 'build-export']
+ argv.append(repodir)
+ argv.append(os.path.join(srcdir, appid))
+ argv.append(branch)
+ argv.append('--update-appstream')
+ argv.append('--timestamp=2016-09-15T01:02:03')
+ if is_runtime:
+ argv.append('--runtime')
+ subprocess.call(argv)
+
+def build_flatpak_bundle(appid, srcdir, repodir, filename, branch='master'):
+ argv = ['flatpak', 'build-bundle']
+ argv.append(repodir)
+ argv.append(filename)
+ argv.append(appid)
+ argv.append(branch)
+ subprocess.call(argv)
+
+def copy_repo(srcdir, destdir):
+ srcdir_repo = os.path.join(srcdir, 'repo')
+ destdir_repo = os.path.join(destdir, 'repo')
+ print("Copying %s to %s" % (srcdir_repo, destdir_repo))
+ if os.path.exists(destdir_repo):
+ shutil.rmtree(destdir_repo)
+ shutil.copytree(srcdir_repo, destdir_repo)
+
+# normal app with runtime in same remote
+build_flatpak('org.test.Chiron',
+ 'app-with-runtime',
+ 'app-with-runtime/repo')
+build_flatpak('org.test.Runtime',
+ 'app-with-runtime',
+ 'app-with-runtime/repo',
+ cleanrepodir=False)
+
+# build a flatpak bundle for the app
+build_flatpak_bundle('org.test.Chiron',
+ 'app-with-runtime',
+ 'app-with-runtime/repo',
+ 'chiron.flatpak')
+
+# app referencing remote that cannot be found
+build_flatpak('org.test.Chiron',
+ 'app-with-runtime',
+ 'app-missing-runtime/repo')
+
+# app with an update
+build_flatpak('org.test.Runtime',
+ 'app-with-runtime',
+ 'app-update/repo',
+ branch='new_master',
+ cleanrepodir=True)
+build_flatpak('org.test.Chiron',
+ 'app-update',
+ 'app-update/repo',
+ cleanrepodir=False)
+
+# just a runtime present
+build_flatpak('org.test.Runtime',
+ 'only-runtime',
+ 'only-runtime/repo')
+
+# app with an extension
+copy_repo('only-runtime', 'app-extension')
+build_flatpak('org.test.Chiron',
+ 'app-extension',
+ 'app-extension/repo',
+ cleanrepodir=False)
+build_flatpak('org.test.Chiron.Extension',
+ 'app-extension',
+ 'app-extension/repo',
+ cleanrepodir=False)
+copy_repo('app-extension', 'app-extension-update')
+build_flatpak('org.test.Chiron.Extension',
+ 'app-extension-update',
+ 'app-extension-update/repo',
+ cleanrepodir=False)
diff --git a/plugins/flatpak/tests/chiron.flatpak b/plugins/flatpak/tests/chiron.flatpak
new file mode 100644
index 0000000..ce038e9
--- /dev/null
+++ b/plugins/flatpak/tests/chiron.flatpak
Binary files differ
diff --git a/plugins/flatpak/tests/flatpakrepos.tar.gz b/plugins/flatpak/tests/flatpakrepos.tar.gz
new file mode 100644
index 0000000..f8bcfde
--- /dev/null
+++ b/plugins/flatpak/tests/flatpakrepos.tar.gz
Binary files differ
diff --git a/plugins/flatpak/tests/meson.build b/plugins/flatpak/tests/meson.build
new file mode 100644
index 0000000..9e48b00
--- /dev/null
+++ b/plugins/flatpak/tests/meson.build
@@ -0,0 +1,34 @@
+tar = find_program('tar')
+custom_target(
+ 'flatpak-self-test-data',
+ input : 'flatpakrepos.tar.gz',
+ output : 'done',
+ command : [
+ tar,
+ '--no-same-owner',
+ '--directory=' + meson.current_build_dir(),
+ '-xf', '@INPUT@',
+ ],
+ build_by_default : true,
+)
+
+custom_target(
+ 'flatpak-self-test-bundle',
+ output : 'flatpakrepos.tar.gz',
+ command : [
+ tar,
+ '-czf', '@OUTPUT@',
+ 'app-missing-runtime/repo/',
+ 'app-update/repo/',
+ 'app-with-runtime/repo/',
+ 'only-runtime/repo/',
+ 'app-extension/repo',
+ 'app-extension-update/repo',
+ ],
+)
+
+configure_file(
+ input : 'chiron.flatpak',
+ output : 'chiron.flatpak',
+ copy : true,
+)
diff --git a/plugins/flatpak/tests/only-runtime/.gitignore b/plugins/flatpak/tests/only-runtime/.gitignore
new file mode 100644
index 0000000..f606d5e
--- /dev/null
+++ b/plugins/flatpak/tests/only-runtime/.gitignore
@@ -0,0 +1 @@
+repo
diff --git a/plugins/flatpak/tests/only-runtime/org.test.Runtime b/plugins/flatpak/tests/only-runtime/org.test.Runtime
new file mode 120000
index 0000000..eb7054c
--- /dev/null
+++ b/plugins/flatpak/tests/only-runtime/org.test.Runtime
@@ -0,0 +1 @@
+../app-with-runtime/org.test.Runtime/ \ No newline at end of file
diff --git a/plugins/fwupd/gs-fwupd-app.c b/plugins/fwupd/gs-fwupd-app.c
new file mode 100644
index 0000000..df6505b
--- /dev/null
+++ b/plugins/fwupd/gs-fwupd-app.c
@@ -0,0 +1,242 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "gs-fwupd-app.h"
+
+const gchar *
+gs_fwupd_app_get_device_id (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "fwupd::DeviceID");
+}
+
+const gchar *
+gs_fwupd_app_get_update_uri (GsApp *app)
+{
+ return gs_app_get_metadata_item (app, "fwupd::UpdateID");
+}
+
+gboolean
+gs_fwupd_app_get_is_locked (GsApp *app)
+{
+ GVariant *tmp = gs_app_get_metadata_variant (app, "fwupd::IsLocked");
+ if (tmp == NULL)
+ return FALSE;
+ return g_variant_get_boolean (tmp);
+}
+
+void
+gs_fwupd_app_set_device_id (GsApp *app, const gchar *device_id)
+{
+ gs_app_set_metadata (app, "fwupd::DeviceID", device_id);
+}
+
+void
+gs_fwupd_app_set_update_uri (GsApp *app, const gchar *update_uri)
+{
+ gs_app_set_metadata (app, "fwupd::UpdateID", update_uri);
+}
+
+void
+gs_fwupd_app_set_is_locked (GsApp *app, gboolean is_locked)
+{
+ g_autoptr(GVariant) tmp = g_variant_new_boolean (is_locked);
+ gs_app_set_metadata_variant (app, "fwupd::IsLocked", tmp);
+}
+
+void
+gs_fwupd_app_set_from_device (GsApp *app, FwupdDevice *dev)
+{
+ GPtrArray *guids;
+
+ /* something can be done */
+ if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_UPDATABLE))
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+
+ /* only can be applied in systemd-offline */
+ if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_ONLY_OFFLINE))
+ gs_app_set_metadata (app, "fwupd::OnlyOffline", "");
+
+
+ /* reboot required to apply update */
+ if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_NEEDS_REBOOT))
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+
+ /* is removable */
+ if (!fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_INTERNAL))
+ gs_app_add_quirk (app, GS_APP_QUIRK_REMOVABLE_HARDWARE);
+
+ guids = fwupd_device_get_guids (dev);
+ if (guids->len > 0) {
+ g_autofree gchar *guid_str = NULL;
+ g_auto(GStrv) tmp = g_new0 (gchar *, guids->len + 1);
+ for (guint i = 0; i < guids->len; i++)
+ tmp[i] = g_strdup (g_ptr_array_index (guids, i));
+ guid_str = g_strjoinv (",", tmp);
+ gs_app_set_metadata (app, "fwupd::Guid", guid_str);
+ }
+ if (fwupd_device_get_name (dev) != NULL) {
+ g_autofree gchar *vendor_name = NULL;
+ if (fwupd_device_get_vendor (dev) == NULL ||
+ g_str_has_prefix (fwupd_device_get_name (dev),
+ fwupd_device_get_vendor (dev))) {
+ vendor_name = g_strdup (fwupd_device_get_name (dev));
+ } else {
+ vendor_name = g_strdup_printf ("%s %s",
+ fwupd_device_get_vendor (dev),
+ fwupd_device_get_name (dev));
+ }
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, vendor_name);
+ }
+ if (fwupd_device_get_summary (dev) != NULL) {
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL,
+ fwupd_device_get_summary (dev));
+ }
+ if (fwupd_device_get_version (dev) != NULL) {
+ gs_app_set_version (app, fwupd_device_get_version (dev));
+ }
+ if (fwupd_device_get_created (dev) != 0)
+ gs_app_set_install_date (app, fwupd_device_get_created (dev));
+ if (fwupd_device_get_description (dev) != NULL) {
+ g_autofree gchar *tmp = NULL;
+ tmp = as_markup_convert (fwupd_device_get_description (dev),
+ AS_MARKUP_CONVERT_FORMAT_SIMPLE, NULL);
+ if (tmp != NULL)
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL, tmp);
+ }
+
+ /* needs action */
+ if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_NEEDS_BOOTLOADER))
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_USER_ACTION);
+ else
+ gs_app_remove_quirk (app, GS_APP_QUIRK_NEEDS_USER_ACTION);
+}
+
+static gchar *
+gs_fwupd_release_get_name (FwupdRelease *release)
+{
+ const gchar *name = fwupd_release_get_name (release);
+#if FWUPD_CHECK_VERSION(1,2,7)
+ GPtrArray *cats = fwupd_release_get_categories (release);
+
+ for (guint i = 0; i < cats->len; i++) {
+ const gchar *cat = g_ptr_array_index (cats, i);
+ if (g_strcmp0 (cat, "X-Device") == 0) {
+ /* TRANSLATORS: a specific part of hardware,
+ * the first %s is the device name, e.g. 'Unifying Receiver` */
+ return g_strdup_printf (_("%s Device Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-System") == 0) {
+ /* TRANSLATORS: the entire system, e.g. all internal devices,
+ * the first %s is the device name, e.g. 'ThinkPad P50` */
+ return g_strdup_printf (_("%s System Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-EmbeddedController") == 0) {
+ /* TRANSLATORS: the EC is typically the keyboard controller chip,
+ * the first %s is the device name, e.g. 'ThinkPad P50` */
+ return g_strdup_printf (_("%s Embedded Controller Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-ManagementEngine") == 0) {
+ /* TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+ * the first %s is the device name, e.g. 'ThinkPad P50` */
+ return g_strdup_printf (_("%s ME Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-CorporateManagementEngine") == 0) {
+ /* TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+ * where the first %s is the device name, e.g. 'ThinkPad P50` */
+ return g_strdup_printf (_("%s Corporate ME Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-ConsumerManagementEngine") == 0) {
+ /* TRANSLATORS: ME stands for Management Engine, where
+ * the first %s is the device name, e.g. 'ThinkPad P50` */
+ return g_strdup_printf (_("%s Consumer ME Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-Controller") == 0) {
+ /* TRANSLATORS: the controller is a device that has other devices
+ * plugged into it, for example ThunderBolt, FireWire or USB,
+ * the first %s is the device name, e.g. 'Intel ThunderBolt` */
+ return g_strdup_printf (_("%s Controller Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-ThunderboltController") == 0) {
+ /* TRANSLATORS: the Thunderbolt controller is a device that
+ * has other high speed Thunderbolt devices plugged into it;
+ * the first %s is the system name, e.g. 'ThinkPad P50` */
+ return g_strdup_printf (_("%s Thunderbolt Controller Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-CpuMicrocode") == 0) {
+ /* TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+ * at system bootup */
+ return g_strdup_printf (_("%s CPU Microcode Update"), name);
+ }
+ if (g_strcmp0 (cat, "X-Configuration") == 0) {
+ /* TRANSLATORS: configuration refers to hardware state,
+ * e.g. a security database or a default power value */
+ return g_strdup_printf (_("%s Configuration Update"), name);
+ }
+ }
+#endif
+
+ /* default fallback */
+ return g_strdup (name);
+}
+
+void
+gs_fwupd_app_set_from_release (GsApp *app, FwupdRelease *rel)
+{
+ if (fwupd_release_get_name (rel) != NULL) {
+ g_autofree gchar *tmp = gs_fwupd_release_get_name (rel);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, tmp);
+ }
+ if (fwupd_release_get_summary (rel) != NULL) {
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL,
+ fwupd_release_get_summary (rel));
+ }
+ if (fwupd_release_get_homepage (rel) != NULL) {
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE,
+ fwupd_release_get_homepage (rel));
+ }
+ if (fwupd_release_get_size (rel) != 0) {
+ gs_app_set_size_installed (app, 0);
+ gs_app_set_size_download (app, fwupd_release_get_size (rel));
+ }
+ if (fwupd_release_get_version (rel) != NULL)
+ gs_app_set_update_version (app, fwupd_release_get_version (rel));
+ if (fwupd_release_get_license (rel) != NULL) {
+ gs_app_set_license (app, GS_APP_QUALITY_NORMAL,
+ fwupd_release_get_license (rel));
+ }
+ if (fwupd_release_get_uri (rel) != NULL) {
+ gs_app_set_origin_hostname (app,
+ fwupd_release_get_uri (rel));
+ gs_fwupd_app_set_update_uri (app, fwupd_release_get_uri (rel));
+ }
+ if (fwupd_release_get_description (rel) != NULL) {
+ g_autofree gchar *tmp = NULL;
+ tmp = as_markup_convert (fwupd_release_get_description (rel),
+ AS_MARKUP_CONVERT_FORMAT_SIMPLE, NULL);
+ if (tmp != NULL)
+ gs_app_set_update_details (app, tmp);
+ }
+#if FWUPD_CHECK_VERSION(1,3,3)
+ if (fwupd_release_get_detach_image (rel) != NULL) {
+ g_autoptr(AsScreenshot) ss = as_screenshot_new ();
+ g_autoptr(AsImage) im = as_image_new ();
+ as_image_set_kind (im, AS_IMAGE_KIND_SOURCE);
+ as_image_set_url (im, fwupd_release_get_detach_image (rel));
+ as_screenshot_set_kind (ss, AS_SCREENSHOT_KIND_DEFAULT);
+ as_screenshot_add_image (ss, im);
+ if (fwupd_release_get_detach_caption (rel) != NULL)
+ as_screenshot_set_caption (ss, NULL, fwupd_release_get_detach_caption (rel));
+ gs_app_set_action_screenshot (app, ss);
+ }
+#endif
+}
diff --git a/plugins/fwupd/gs-fwupd-app.h b/plugins/fwupd/gs-fwupd-app.h
new file mode 100644
index 0000000..5a3e9f2
--- /dev/null
+++ b/plugins/fwupd/gs-fwupd-app.h
@@ -0,0 +1,31 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gnome-software.h>
+#include <fwupd.h>
+
+G_BEGIN_DECLS
+
+const gchar *gs_fwupd_app_get_device_id (GsApp *app);
+const gchar *gs_fwupd_app_get_update_uri (GsApp *app);
+gboolean gs_fwupd_app_get_is_locked (GsApp *app);
+
+void gs_fwupd_app_set_device_id (GsApp *app,
+ const gchar *device_id);
+void gs_fwupd_app_set_update_uri (GsApp *app,
+ const gchar *update_uri);
+void gs_fwupd_app_set_is_locked (GsApp *app,
+ gboolean is_locked);
+void gs_fwupd_app_set_from_device (GsApp *app,
+ FwupdDevice *dev);
+void gs_fwupd_app_set_from_release (GsApp *app,
+ FwupdRelease *rel);
+
+G_END_DECLS
diff --git a/plugins/fwupd/gs-plugin-fwupd.c b/plugins/fwupd/gs-plugin-fwupd.c
new file mode 100644
index 0000000..d032640
--- /dev/null
+++ b/plugins/fwupd/gs-plugin-fwupd.c
@@ -0,0 +1,1132 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <fwupd.h>
+#include <fcntl.h>
+#include <gio/gio.h>
+#include <gio/gunixfdlist.h>
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+
+#include <gnome-software.h>
+
+#include "gs-fwupd-app.h"
+#include "gs-metered.h"
+
+/*
+ * SECTION:
+ * Queries for new firmware and schedules it to be installed as required.
+ *
+ * This plugin calls UpdatesChanged() if any updatable devices are
+ * added or removed or if a device has been updated live.
+ */
+
+struct GsPluginData {
+ FwupdClient *client;
+ GsApp *app_current;
+ GsApp *cached_origin;
+};
+
+static void
+gs_plugin_fwupd_error_convert (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return;
+
+ /* already correct */
+ if (error->domain == GS_PLUGIN_ERROR)
+ return;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gio (perror))
+ return;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gdbus (perror))
+ return;
+
+ /* custom to this plugin */
+ if (error->domain == FWUPD_ERROR) {
+ switch (error->code) {
+ case FWUPD_ERROR_ALREADY_PENDING:
+ case FWUPD_ERROR_INVALID_FILE:
+ case FWUPD_ERROR_NOT_SUPPORTED:
+ error->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ case FWUPD_ERROR_AUTH_FAILED:
+ error->code = GS_PLUGIN_ERROR_AUTH_INVALID;
+ break;
+ case FWUPD_ERROR_SIGNATURE_INVALID:
+ error->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ break;
+ case FWUPD_ERROR_AC_POWER_REQUIRED:
+ error->code = GS_PLUGIN_ERROR_AC_POWER_REQUIRED;
+ break;
+#if FWUPD_CHECK_VERSION(1,2,10)
+ case FWUPD_ERROR_BATTERY_LEVEL_TOO_LOW:
+ error->code = GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW;
+ break;
+#endif
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else {
+ g_warning ("can't reliably fixup error from domain %s",
+ g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ priv->client = fwupd_client_new ();
+
+ /* set name of MetaInfo file */
+ gs_plugin_set_appstream_id (plugin, "org.gnome.Software.Plugin.Fwupd");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (priv->cached_origin != NULL)
+ g_object_unref (priv->cached_origin);
+ g_object_unref (priv->client);
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_kind (app) == AS_APP_KIND_FIRMWARE)
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+}
+
+static void
+gs_plugin_fwupd_changed_cb (FwupdClient *client, GsPlugin *plugin)
+{
+}
+
+static void
+gs_plugin_fwupd_device_changed_cb (FwupdClient *client,
+ FwupdDevice *dev,
+ GsPlugin *plugin)
+{
+ /* limit number of UI refreshes */
+ if (!fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_SUPPORTED)) {
+ g_debug ("%s changed (not supported) so ignoring",
+ fwupd_device_get_id (dev));
+ return;
+ }
+
+ /* If the flag is set the device matches something in the
+ * metadata as therefor is worth refreshing the update list */
+ g_debug ("%s changed (supported) so reloading",
+ fwupd_device_get_id (dev));
+ gs_plugin_updates_changed (plugin);
+}
+
+static void
+gs_plugin_fwupd_notify_percentage_cb (GObject *object,
+ GParamSpec *pspec,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* nothing in progress */
+ if (priv->app_current == NULL) {
+ g_debug ("fwupd percentage: %u%%",
+ fwupd_client_get_percentage (priv->client));
+ return;
+ }
+ g_debug ("fwupd percentage for %s: %u%%",
+ gs_app_get_unique_id (priv->app_current),
+ fwupd_client_get_percentage (priv->client));
+ gs_app_set_progress (priv->app_current,
+ fwupd_client_get_percentage (priv->client));
+}
+
+static void
+gs_plugin_fwupd_notify_status_cb (GObject *object,
+ GParamSpec *pspec,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* nothing in progress */
+ if (priv->app_current == NULL) {
+ g_debug ("fwupd status: %s",
+ fwupd_status_to_string (fwupd_client_get_status (priv->client)));
+ return;
+ }
+
+ g_debug ("fwupd status for %s: %s",
+ gs_app_get_unique_id (priv->app_current),
+ fwupd_status_to_string (fwupd_client_get_status (priv->client)));
+ switch (fwupd_client_get_status (priv->client)) {
+ case FWUPD_STATUS_DECOMPRESSING:
+ case FWUPD_STATUS_DEVICE_RESTART:
+ case FWUPD_STATUS_DEVICE_WRITE:
+ case FWUPD_STATUS_DEVICE_VERIFY:
+ gs_app_set_state (priv->app_current, AS_APP_STATE_INSTALLING);
+ break;
+ case FWUPD_STATUS_IDLE:
+ g_clear_object (&priv->app_current);
+ break;
+ default:
+ break;
+ }
+}
+
+static gchar *
+gs_plugin_fwupd_get_file_checksum (const gchar *filename,
+ GChecksumType checksum_type,
+ GError **error)
+{
+ gsize len;
+ g_autofree gchar *data = NULL;
+
+ if (!g_file_get_contents (filename, &data, &len, error)) {
+ gs_utils_error_convert_gio (error);
+ return NULL;
+ }
+ return g_compute_checksum_for_data (checksum_type, (const guchar *)data, len);
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(SoupSession) soup_session = NULL;
+
+#if FWUPD_CHECK_VERSION(1,4,5)
+ g_autoptr(GError) error_local = NULL;
+ /* send our implemented feature set */
+ if (!fwupd_client_set_feature_flags (priv->client,
+ FWUPD_FEATURE_FLAG_UPDATE_ACTION |
+ FWUPD_FEATURE_FLAG_DETACH_ACTION,
+ cancellable, &error_local))
+ g_debug ("Failed to set front-end features: %s", error_local->message);
+
+ /* we know the runtime daemon version now */
+ fwupd_client_set_user_agent_for_package (priv->client, PACKAGE_NAME, PACKAGE_VERSION);
+ if (!fwupd_client_ensure_networking (priv->client, error)) {
+ gs_plugin_fwupd_error_convert (error);
+ g_prefix_error (error, "Failed to setup networking: ");
+ return FALSE;
+ }
+ g_object_get (priv->client, "soup-session", &soup_session, NULL);
+#else
+ g_autofree gchar *user_agent = NULL;
+ /* use a custom user agent to provide the fwupd version */
+ user_agent = fwupd_build_user_agent (PACKAGE_NAME, PACKAGE_VERSION);
+ soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, user_agent,
+ SOUP_SESSION_TIMEOUT, 10,
+ NULL);
+ soup_session_remove_feature_by_type (soup_session, SOUP_TYPE_CONTENT_DECODER);
+#endif
+
+ /* use for gnome-software downloads */
+ gs_plugin_set_soup_session (plugin, soup_session);
+
+ /* add source */
+ priv->cached_origin = gs_app_new (gs_plugin_get_name (plugin));
+ gs_app_set_kind (priv->cached_origin, AS_APP_KIND_SOURCE);
+ gs_app_set_bundle_kind (priv->cached_origin, AS_BUNDLE_KIND_CABINET);
+
+ /* add the source to the plugin cache which allows us to match the
+ * unique ID to a GsApp when creating an event */
+ gs_plugin_cache_add (plugin,
+ gs_app_get_unique_id (priv->cached_origin),
+ priv->cached_origin);
+
+ /* register D-Bus errors */
+ fwupd_error_quark ();
+ g_signal_connect (priv->client, "changed",
+ G_CALLBACK (gs_plugin_fwupd_changed_cb), plugin);
+ g_signal_connect (priv->client, "device-added",
+ G_CALLBACK (gs_plugin_fwupd_device_changed_cb), plugin);
+ g_signal_connect (priv->client, "device-removed",
+ G_CALLBACK (gs_plugin_fwupd_device_changed_cb), plugin);
+ g_signal_connect (priv->client, "device-changed",
+ G_CALLBACK (gs_plugin_fwupd_device_changed_cb), plugin);
+ g_signal_connect (priv->client, "notify::percentage",
+ G_CALLBACK (gs_plugin_fwupd_notify_percentage_cb), plugin);
+ g_signal_connect (priv->client, "notify::status",
+ G_CALLBACK (gs_plugin_fwupd_notify_status_cb), plugin);
+ return TRUE;
+}
+
+static GsApp *
+gs_plugin_fwupd_new_app_from_device (GsPlugin *plugin, FwupdDevice *dev)
+{
+ FwupdRelease *rel = fwupd_device_get_release_default (dev);
+ GsApp *app;
+ g_autofree gchar *id = NULL;
+ g_autoptr(AsIcon) icon = NULL;
+
+ /* older versions of fwups didn't record this for historical devices */
+ if (fwupd_release_get_appstream_id (rel) == NULL)
+ return NULL;
+
+ /* get from cache */
+ id = as_utils_unique_id_build (AS_APP_SCOPE_SYSTEM,
+ AS_BUNDLE_KIND_UNKNOWN,
+ NULL, /* origin */
+ AS_APP_KIND_FIRMWARE,
+ fwupd_release_get_appstream_id (rel),
+ NULL);
+ app = gs_plugin_cache_lookup (plugin, id);
+ if (app == NULL) {
+ app = gs_app_new (id);
+ gs_plugin_cache_add (plugin, id, app);
+ }
+
+ /* default stuff */
+ gs_app_set_kind (app, AS_APP_KIND_FIRMWARE);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_CABINET);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_DO_NOT_AUTO_UPDATE);
+ gs_app_set_management_plugin (app, "fwupd");
+ gs_app_add_category (app, "System");
+ gs_fwupd_app_set_device_id (app, fwupd_device_get_id (dev));
+
+ /* create icon */
+ icon = as_icon_new ();
+ as_icon_set_kind (icon, AS_ICON_KIND_STOCK);
+ as_icon_set_name (icon, "application-x-firmware");
+ gs_app_add_icon (app, icon);
+ gs_fwupd_app_set_from_device (app, dev);
+ gs_fwupd_app_set_from_release (app, rel);
+
+ if (fwupd_release_get_appstream_id (rel) != NULL)
+ gs_app_set_id (app, fwupd_release_get_appstream_id (rel));
+
+ /* the same as we have already */
+ if (g_strcmp0 (fwupd_device_get_version (dev),
+ fwupd_release_get_version (rel)) == 0) {
+ g_warning ("same firmware version as installed");
+ }
+
+ return app;
+}
+
+static gchar *
+gs_plugin_fwupd_build_device_id (FwupdDevice *dev)
+{
+ g_autofree gchar *tmp = g_strdup (fwupd_device_get_id (dev));
+ g_strdelimit (tmp, "/", '_');
+ return g_strdup_printf ("org.fwupd.%s.device", tmp);
+}
+
+static GsApp *
+gs_plugin_fwupd_new_app_from_device_raw (GsPlugin *plugin, FwupdDevice *device)
+{
+ GPtrArray *icons;
+ g_autofree gchar *id = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* create a GsApp based on the device, not the release */
+ id = gs_plugin_fwupd_build_device_id (device);
+ app = gs_app_new (id);
+ gs_app_set_kind (app, AS_APP_KIND_FIRMWARE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_DO_NOT_AUTO_UPDATE);
+ gs_app_set_version (app, fwupd_device_get_version (device));
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, fwupd_device_get_name (device));
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, fwupd_device_get_summary (device));
+ gs_app_set_description (app, GS_APP_QUALITY_LOWEST, fwupd_device_get_description (device));
+ gs_app_set_origin (app, fwupd_device_get_vendor (device));
+ gs_fwupd_app_set_device_id (app, fwupd_device_get_id (device));
+ gs_app_set_management_plugin (app, "fwupd");
+
+ /* create icon */
+ icons = fwupd_device_get_icons (device);
+ for (guint j = 0; j < icons->len; j++) {
+ const gchar *icon = g_ptr_array_index (icons, j);
+ g_autoptr(AsIcon) icon_tmp = as_icon_new ();
+ if (g_str_has_prefix (icon, "/")) {
+ as_icon_set_kind (icon_tmp, AS_ICON_KIND_LOCAL);
+ as_icon_set_filename (icon_tmp, icon);
+ } else {
+ as_icon_set_kind (icon_tmp, AS_ICON_KIND_STOCK);
+ as_icon_set_name (icon_tmp, icon);
+ }
+ gs_app_add_icon (app, icon_tmp);
+ }
+ return g_steal_pointer (&app);
+}
+
+static GsApp *
+gs_plugin_fwupd_new_app (GsPlugin *plugin, FwupdDevice *dev, GError **error)
+{
+ FwupdRelease *rel = fwupd_device_get_release_default (dev);
+ GPtrArray *checksums;
+ const gchar *update_uri;
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *filename_cache = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* update unsupported */
+ app = gs_plugin_fwupd_new_app_from_device (plugin, dev);
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE_LIVE) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "%s [%s] cannot be updated",
+ gs_app_get_name (app), gs_app_get_id (app));
+ return NULL;
+ }
+
+ /* some missing */
+ if (gs_app_get_id (app) == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "fwupd: No id for firmware");
+ return NULL;
+ }
+ if (gs_app_get_version (app) == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "fwupd: No version! for %s!", gs_app_get_id (app));
+ return NULL;
+ }
+ if (gs_app_get_update_version (app) == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "fwupd: No update-version! for %s!", gs_app_get_id (app));
+ return NULL;
+ }
+ checksums = fwupd_release_get_checksums (rel);
+ if (checksums->len == 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NO_SECURITY,
+ "%s [%s] (%s) has no checksums, ignoring as unsafe",
+ gs_app_get_name (app),
+ gs_app_get_id (app),
+ gs_app_get_update_version (app));
+ return NULL;
+ }
+ update_uri = fwupd_release_get_uri (rel);
+ if (update_uri == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no location available for %s [%s]",
+ gs_app_get_name (app), gs_app_get_id (app));
+ return NULL;
+ }
+
+ /* does the firmware already exist in the cache? */
+ basename = g_path_get_basename (update_uri);
+ filename_cache = gs_utils_get_cache_filename ("fwupd",
+ basename,
+ GS_UTILS_CACHE_FLAG_NONE,
+ error);
+ if (filename_cache == NULL)
+ return NULL;
+
+ /* delete the file if the checksum does not match */
+ if (g_file_test (filename_cache, G_FILE_TEST_EXISTS)) {
+ const gchar *checksum_tmp = NULL;
+ g_autofree gchar *checksum = NULL;
+
+ /* we can migrate to something better than SHA1 when the LVFS
+ * starts producing metadata with multiple hash types */
+ checksum_tmp = fwupd_checksum_get_by_kind (checksums,
+ G_CHECKSUM_SHA1);
+ if (checksum_tmp == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "No valid checksum for %s",
+ filename_cache);
+ }
+ checksum = gs_plugin_fwupd_get_file_checksum (filename_cache,
+ G_CHECKSUM_SHA1,
+ error);
+ if (checksum == NULL)
+ return NULL;
+ if (g_strcmp0 (checksum_tmp, checksum) != 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "%s does not match checksum, expected %s got %s",
+ filename_cache, checksum_tmp, checksum);
+ g_unlink (filename_cache);
+ return NULL;
+ }
+ }
+
+ /* already downloaded, so overwrite */
+ if (g_file_test (filename_cache, G_FILE_TEST_EXISTS))
+ gs_app_set_size_download (app, 0);
+
+ /* actually add the application */
+ file = g_file_new_for_path (filename_cache);
+ gs_app_set_local_file (app, file);
+ return g_steal_pointer (&app);
+}
+
+gboolean
+gs_plugin_add_updates_historical (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(FwupdDevice) dev = NULL;
+
+ /* get historical updates */
+ dev = fwupd_client_get_results (priv->client,
+ FWUPD_DEVICE_ID_ANY,
+ cancellable,
+ &error_local);
+ if (dev == NULL) {
+ if (g_error_matches (error_local,
+ FWUPD_ERROR,
+ FWUPD_ERROR_NOTHING_TO_DO))
+ return TRUE;
+ if (g_error_matches (error_local,
+ FWUPD_ERROR,
+ FWUPD_ERROR_NOT_FOUND))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+
+ /* parse */
+ app = gs_plugin_fwupd_new_app_from_device (plugin, dev);
+ if (app == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "failed to build result for %s",
+ fwupd_device_get_id (dev));
+ return FALSE;
+ }
+ gs_app_list_add (list, app);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) devices = NULL;
+
+ /* get current list of updates */
+ devices = fwupd_client_get_devices (priv->client, cancellable, &error_local);
+ if (devices == NULL) {
+ if (g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_NOTHING_TO_DO) ||
+ g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED) ||
+ g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_FOUND)) {
+ g_debug ("no devices (%s)", error_local->message);
+ return TRUE;
+ }
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < devices->len; i++) {
+ FwupdDevice *dev = g_ptr_array_index (devices, i);
+ FwupdRelease *rel_newest;
+ g_autoptr(GError) error_local2 = NULL;
+ g_autoptr(GPtrArray) rels = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* locked device that needs unlocking */
+ if (fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_LOCKED)) {
+ app = gs_plugin_fwupd_new_app_from_device_raw (plugin, dev);
+ gs_fwupd_app_set_is_locked (app, TRUE);
+ gs_app_list_add (list, app);
+ continue;
+ }
+
+ /* not going to have results, so save a D-Bus round-trip */
+ if (!fwupd_device_has_flag (dev, FWUPD_DEVICE_FLAG_SUPPORTED))
+ continue;
+
+ /* get the releases for this device and filter for validity */
+ rels = fwupd_client_get_upgrades (priv->client,
+ fwupd_device_get_id (dev),
+ cancellable, &error_local2);
+ if (rels == NULL) {
+ if (g_error_matches (error_local2,
+ FWUPD_ERROR,
+ FWUPD_ERROR_NOTHING_TO_DO)) {
+ g_debug ("no updates for %s", fwupd_device_get_id (dev));
+ continue;
+ }
+ if (g_error_matches (error_local2,
+ FWUPD_ERROR,
+ FWUPD_ERROR_NOT_SUPPORTED)) {
+ g_debug ("not supported for %s", fwupd_device_get_id (dev));
+ continue;
+ }
+ g_warning ("failed to get upgrades for %s: %s]",
+ fwupd_device_get_id (dev),
+ error_local2->message);
+ continue;
+ }
+
+ /* normal device update */
+ rel_newest = g_ptr_array_index (rels, 0);
+ fwupd_device_add_release (dev, rel_newest);
+ app = gs_plugin_fwupd_new_app (plugin, dev, &error_local2);
+ if (app == NULL) {
+ g_debug ("%s", error_local2->message);
+ continue;
+ }
+
+ /* add update descriptions for all releases inbetween */
+ if (rels->len > 1) {
+ g_autoptr(GString) update_desc = g_string_new (NULL);
+ for (guint j = 0; j < rels->len; j++) {
+ FwupdRelease *rel = g_ptr_array_index (rels, j);
+ g_autofree gchar *desc = NULL;
+ if (fwupd_release_get_description (rel) == NULL)
+ continue;
+ desc = as_markup_convert (fwupd_release_get_description (rel),
+ AS_MARKUP_CONVERT_FORMAT_SIMPLE,
+ NULL);
+ if (desc == NULL)
+ continue;
+ g_string_append_printf (update_desc,
+ "Version %s:\n%s\n\n",
+ fwupd_release_get_version (rel),
+ desc);
+ }
+ if (update_desc->len > 2) {
+ g_string_truncate (update_desc, update_desc->len - 2);
+ gs_app_set_update_details (app, update_desc->str);
+ }
+ }
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_fwupd_refresh_remote (GsPlugin *plugin,
+ FwupdRemote *remote,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GChecksumType checksum_kind;
+ const gchar *url_sig = NULL;
+ const gchar *url = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *basename_sig = NULL;
+ g_autofree gchar *cache_id = NULL;
+ g_autofree gchar *checksum = NULL;
+ g_autofree gchar *filename = NULL;
+ g_autofree gchar *filename_sig = NULL;
+ g_autoptr(GBytes) data = NULL;
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
+
+ /* sanity check */
+ if (fwupd_remote_get_filename_cache_sig (remote) == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "remote %s has no cache signature",
+ fwupd_remote_get_id (remote));
+ return FALSE;
+ }
+
+ /* check cache age */
+ if (cache_age > 0) {
+ guint64 age = fwupd_remote_get_age (remote);
+ guint tmp = age < G_MAXUINT ? (guint) age : G_MAXUINT;
+ if (tmp < cache_age) {
+ g_debug ("fwupd remote is only %u seconds old, so ignoring refresh",
+ tmp);
+ return TRUE;
+ }
+ }
+
+ /* download the signature first, it's smaller */
+ cache_id = g_strdup_printf ("fwupd/remotes.d/%s", fwupd_remote_get_id (remote));
+ basename_sig = g_path_get_basename (fwupd_remote_get_filename_cache_sig (remote));
+ filename_sig = gs_utils_get_cache_filename (cache_id, basename_sig,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+
+ /* download the signature first, it's smaller */
+ url_sig = fwupd_remote_get_metadata_uri_sig (remote);
+ gs_app_set_summary_missing (app_dl,
+ /* TRANSLATORS: status text when downloading */
+ _("Downloading firmware update signature…"));
+ data = gs_plugin_download_data (plugin, app_dl, url_sig, cancellable, error);
+ if (data == NULL) {
+ gs_utils_error_add_origin_id (error, priv->cached_origin);
+ return FALSE;
+ }
+
+ /* is the signature hash the same as we had before? */
+ checksum_kind = fwupd_checksum_guess_kind (fwupd_remote_get_checksum (remote));
+ checksum = g_compute_checksum_for_data (checksum_kind,
+ (const guchar *) g_bytes_get_data (data, NULL),
+ g_bytes_get_size (data));
+ if (g_strcmp0 (checksum, fwupd_remote_get_checksum (remote)) == 0) {
+ g_debug ("signature of %s is unchanged", url_sig);
+ return TRUE;
+ }
+
+ /* save to a file */
+ g_debug ("saving new remote signature to %s:", filename_sig);
+ if (!g_file_set_contents (filename_sig,
+ g_bytes_get_data (data, NULL),
+ (guint) g_bytes_get_size (data),
+ &error_local)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_WRITE_FAILED,
+ "Failed to save firmware signature: %s",
+ error_local->message);
+ return FALSE;
+ }
+
+ /* download the payload and save to file */
+ basename = g_path_get_basename (fwupd_remote_get_filename_cache (remote));
+ filename = gs_utils_get_cache_filename (cache_id, basename,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (filename == NULL)
+ return FALSE;
+ g_debug ("saving new firmware metadata to %s:", filename);
+ gs_app_set_summary_missing (app_dl,
+ /* TRANSLATORS: status text when downloading */
+ _("Downloading firmware update metadata…"));
+ url = fwupd_remote_get_metadata_uri (remote);
+ if (!gs_plugin_download_file (plugin, app_dl, url, filename,
+ cancellable, error)) {
+ gs_utils_error_add_origin_id (error, priv->cached_origin);
+ return FALSE;
+ }
+
+ /* phew, lets send all this to fwupd */
+ if (!fwupd_client_update_metadata (priv->client,
+ fwupd_remote_get_id (remote),
+ filename,
+ filename_sig,
+ cancellable,
+ error)) {
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GPtrArray) remotes = NULL;
+
+ /* get the list of enabled remotes */
+ remotes = fwupd_client_get_remotes (priv->client, cancellable, &error_local);
+ if (remotes == NULL) {
+ g_debug ("No remotes found: %s", error_local ? error_local->message : "Unknown error");
+ if (g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_NOTHING_TO_DO) ||
+ g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED) ||
+ g_error_matches (error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_FOUND))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < remotes->len; i++) {
+ FwupdRemote *remote = g_ptr_array_index (remotes, i);
+ if (!fwupd_remote_get_enabled (remote))
+ continue;
+ if (fwupd_remote_get_kind (remote) == FWUPD_REMOTE_KIND_LOCAL)
+ continue;
+ if (!gs_plugin_fwupd_refresh_remote (plugin, remote, cache_age,
+ cancellable, error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_fwupd_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *device_id;
+ FwupdInstallFlags install_flags = 0;
+ GFile *local_file;
+ g_autofree gchar *filename = NULL;
+ gboolean downloaded_to_cache = FALSE;
+ g_autoptr(FwupdDevice) dev = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ /* not set */
+ local_file = gs_app_get_local_file (app);
+ if (local_file == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "not enough data for fwupd %s",
+ filename);
+ return FALSE;
+ }
+
+ /* file does not yet exist */
+ filename = g_file_get_path (local_file);
+ if (!g_file_query_exists (local_file, cancellable)) {
+ const gchar *uri = gs_fwupd_app_get_update_uri (app);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ if (!gs_plugin_download_file (plugin, app, uri, filename,
+ cancellable, error))
+ return FALSE;
+ downloaded_to_cache = TRUE;
+ }
+
+ /* limit to single device? */
+ device_id = gs_fwupd_app_get_device_id (app);
+ if (device_id == NULL)
+ device_id = FWUPD_DEVICE_ID_ANY;
+
+ /* set the last object */
+ g_set_object (&priv->app_current, app);
+
+ /* only offline supported */
+ if (gs_app_get_metadata_item (app, "fwupd::OnlyOffline") != NULL)
+ install_flags |= FWUPD_INSTALL_FLAG_OFFLINE;
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ if (!fwupd_client_install (priv->client, device_id,
+ filename, install_flags,
+ cancellable, error)) {
+ gs_plugin_fwupd_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* delete the file from the cache */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ if (downloaded_to_cache) {
+ if (!g_file_delete (local_file, cancellable, error))
+ return FALSE;
+ }
+
+ /* does the device have an update message */
+ dev = fwupd_client_get_device_by_id (priv->client, device_id,
+ cancellable, &error_local);
+ if (dev == NULL) {
+ /* NOTE: this is probably entirely fine; some devices do not
+ * re-enumerate until replugged manually or the machine is
+ * rebooted -- and the metadata to know that is only available
+ * in a too-new-to-depend-on fwupd version */
+ g_debug ("failed to find device after install: %s", error_local->message);
+ } else {
+ if (fwupd_device_get_update_message (dev) != NULL) {
+ g_autoptr(AsScreenshot) ss = as_screenshot_new ();
+
+#if FWUPD_CHECK_VERSION(1,4,5)
+ /* image is optional */
+ if (fwupd_device_get_update_image (dev) != NULL) {
+ g_autoptr(AsImage) im = as_image_new ();
+ as_image_set_kind (im, AS_IMAGE_KIND_SOURCE);
+ as_image_set_url (im, fwupd_device_get_update_image (dev));
+ as_screenshot_add_image (ss, im);
+ }
+#endif
+
+ /* caption is required */
+ as_screenshot_set_kind (ss, AS_SCREENSHOT_KIND_DEFAULT);
+ as_screenshot_set_caption (ss, NULL, fwupd_device_get_update_message (dev));
+ gs_app_set_action_screenshot (app, ss);
+
+ /* require the dialog */
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_USER_ACTION);
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_fwupd_modify_source (GsPlugin *plugin, GsApp *app, gboolean enabled,
+ GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *remote_id = gs_app_get_metadata_item (app, "fwupd::remote-id");
+ if (remote_id == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "not enough data for fwupd %s",
+ gs_app_get_unique_id (app));
+ return FALSE;
+ }
+ gs_app_set_state (app, enabled ?
+ AS_APP_STATE_INSTALLING : AS_APP_STATE_REMOVING);
+ if (!fwupd_client_modify_remote (priv->client,
+ remote_id,
+ "Enabled",
+ enabled ? "true" : "false",
+ cancellable,
+ error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+ gs_app_set_state (app, enabled ?
+ AS_APP_STATE_INSTALLED : AS_APP_STATE_AVAILABLE);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* source -> remote */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE) {
+ return gs_plugin_fwupd_modify_source (plugin, app, TRUE,
+ cancellable, error);
+ }
+
+ /* firmware */
+ return gs_plugin_fwupd_install (plugin, app, cancellable, error);
+}
+
+gboolean
+gs_plugin_app_remove (GsPlugin *plugin, GsApp *app,
+ GCancellable *cancellable, GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* source -> remote */
+ return gs_plugin_fwupd_modify_source (plugin, app, FALSE, cancellable, error);
+}
+
+gboolean
+gs_plugin_download_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GFile *local_file;
+ g_autofree gchar *filename = NULL;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* not set */
+ local_file = gs_app_get_local_file (app);
+ if (local_file == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "not enough data for fwupd %s",
+ filename);
+ return FALSE;
+ }
+
+ /* file does not yet exist */
+ filename = g_file_get_path (local_file);
+ if (!g_file_query_exists (local_file, cancellable)) {
+ const gchar *uri = gs_fwupd_app_get_update_uri (app);
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE)) {
+ g_autoptr(GError) error_local = NULL;
+
+ if (!gs_metered_block_app_on_download_scheduler (app, cancellable, &error_local)) {
+ g_warning ("Failed to block on download scheduler: %s",
+ error_local->message);
+ g_clear_error (&error_local);
+ }
+ }
+
+ if (!gs_plugin_download_file (plugin, app, uri, filename,
+ cancellable, error))
+ return FALSE;
+ }
+ gs_app_set_size_download (app, 0);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* locked devices need unlocking, rather than installing */
+ if (gs_fwupd_app_get_is_locked (app)) {
+ const gchar *device_id;
+ device_id = gs_fwupd_app_get_device_id (app);
+ if (device_id == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "not enough data for fwupd unlock");
+ return FALSE;
+ }
+ if (!fwupd_client_unlock (priv->client, device_id,
+ cancellable, error)) {
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ /* update means install */
+ if (!gs_plugin_fwupd_install (plugin, app, cancellable, error)) {
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_file_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *content_type = NULL;
+ g_autofree gchar *filename = NULL;
+ g_autoptr(GPtrArray) devices = NULL;
+ const gchar *mimetypes[] = {
+ "application/vnd.ms-cab-compressed",
+ NULL };
+
+ /* does this match any of the mimetypes we support */
+ content_type = gs_utils_get_content_type (file, cancellable, error);
+ if (content_type == NULL)
+ return FALSE;
+ if (!g_strv_contains (mimetypes, content_type))
+ return TRUE;
+
+ /* get results */
+ filename = g_file_get_path (file);
+ devices = fwupd_client_get_details (priv->client,
+ filename,
+ cancellable,
+ error);
+ if (devices == NULL) {
+ gs_plugin_fwupd_error_convert (error);
+ return FALSE;
+ }
+ for (guint i = 0; i < devices->len; i++) {
+ FwupdDevice *dev = g_ptr_array_index (devices, i);
+ g_autoptr(GsApp) app = NULL;
+
+ /* create each app */
+ app = gs_plugin_fwupd_new_app_from_device (plugin, dev);
+
+ /* we *might* have no update view for local files */
+ gs_app_set_version (app, gs_app_get_update_version (app));
+ gs_app_set_description (app, GS_APP_QUALITY_LOWEST,
+ gs_app_get_update_details (app));
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_sources (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GPtrArray) remotes = NULL;
+
+ /* find all remotes */
+ remotes = fwupd_client_get_remotes (priv->client, cancellable, error);
+ if (remotes == NULL)
+ return FALSE;
+ for (guint i = 0; i < remotes->len; i++) {
+ FwupdRemote *remote = g_ptr_array_index (remotes, i);
+ g_autofree gchar *id = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* ignore these, they're built in */
+ if (fwupd_remote_get_kind (remote) != FWUPD_REMOTE_KIND_DOWNLOAD)
+ continue;
+
+ /* create something that we can use to enable/disable */
+ id = g_strdup_printf ("org.fwupd.%s.remote", fwupd_remote_get_id (remote));
+ app = gs_app_new (id);
+ gs_app_set_kind (app, AS_APP_KIND_SOURCE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_state (app, fwupd_remote_get_enabled (remote) ?
+ AS_APP_STATE_INSTALLED : AS_APP_STATE_AVAILABLE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST,
+ fwupd_remote_get_title (remote));
+#if FWUPD_CHECK_VERSION(1,0,7)
+ gs_app_set_agreement (app, fwupd_remote_get_agreement (remote));
+#endif
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE,
+ fwupd_remote_get_metadata_uri (remote));
+ gs_app_set_metadata (app, "fwupd::remote-id",
+ fwupd_remote_get_id (remote));
+ gs_app_set_management_plugin (app, "fwupd");
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
diff --git a/plugins/fwupd/gs-self-test.c b/plugins/fwupd/gs-self-test.c
new file mode 100644
index 0000000..ca5fcb8
--- /dev/null
+++ b/plugins/fwupd/gs-self-test.c
@@ -0,0 +1,105 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static void
+gs_plugins_fwupd_func (GsPluginLoader *plugin_loader)
+{
+ g_autofree gchar *fn = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* no fwupd, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "fwupd")) {
+ g_test_skip ("not enabled");
+ return;
+ }
+
+ /* load local file */
+ fn = gs_test_get_filename (TESTDATADIR, "chiron-0.2.cab");
+ g_assert (fn != NULL);
+ file = g_file_new_for_path (fn);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (app != NULL);
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_FIRMWARE);
+ g_assert (gs_app_get_license (app) != NULL);
+ g_assert (gs_app_has_category (app, "System"));
+ g_assert_cmpstr (gs_app_get_id (app), ==, "com.test.chiron.firmware");
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://127.0.0.1/");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "Chiron");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Single line synopsis");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "0.2");
+ g_assert_cmpint ((gint64) gs_app_get_size_download (app), ==, 32784);
+ g_assert_cmpstr (gs_app_get_description (app), ==,
+ "This is the first paragraph in the example "
+ "cab file.\n\nThis is the second paragraph.");
+ g_assert_cmpstr (gs_app_get_update_details (app), ==,
+ "Latest firmware release.");
+
+ /* seems wrong, but this is only set if the update is available */
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_UNKNOWN);
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "fwupd",
+ NULL
+ };
+
+ /* While we use %G_TEST_OPTION_ISOLATE_DIRS to create temporary directories
+ * for each of the tests, we want to use the system MIME registry, assuming
+ * that it exists and correctly has shared-mime-info installed. */
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ g_content_type_set_mime_dirs (NULL);
+#endif
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/fwupd",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_fwupd_func);
+
+ return g_test_run ();
+}
diff --git a/plugins/fwupd/meson.build b/plugins/fwupd/meson.build
new file mode 100644
index 0000000..7c89add
--- /dev/null
+++ b/plugins/fwupd/meson.build
@@ -0,0 +1,60 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFwupd"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+deps = [
+ plugin_libs,
+ fwupd,
+]
+
+if get_option('mogwai')
+ deps += [mogwai_schedule_client]
+endif
+
+shared_module(
+ 'gs_plugin_fwupd',
+ sources : [
+ 'gs-fwupd-app.c',
+ 'gs-plugin-fwupd.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : deps,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+metainfo = 'org.gnome.Software.Plugin.Fwupd.metainfo.xml'
+
+i18n.merge_file(
+ input: metainfo + '.in',
+ output: metainfo,
+ type: 'xml',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'metainfo')
+)
+
+if get_option('tests')
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+ e = executable(
+ 'gs-self-test-fwupd',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : deps,
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-fwupd', e, suite: ['plugins', 'fwupd'], env: test_env)
+endif
diff --git a/plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in b/plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in
new file mode 100644
index 0000000..3f2067d
--- /dev/null
+++ b/plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2013-2016 Richard Hughes <richard@hughsie.com> -->
+<component type="addon">
+ <id>org.gnome.Software.Plugin.Fwupd</id>
+ <extends>org.gnome.Software.desktop</extends>
+ <name>Firmware Upgrade Support</name>
+ <summary>Provides support for firmware upgrades</summary>
+ <url type="homepage">http://www.fwupd.org</url>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <update_contact>richard_at_hughsie.com</update_contact>
+</component>
diff --git a/plugins/fwupd/tests/build-cab.sh b/plugins/fwupd/tests/build-cab.sh
new file mode 100755
index 0000000..ea7bed6
--- /dev/null
+++ b/plugins/fwupd/tests/build-cab.sh
@@ -0,0 +1,4 @@
+gcab --create chiron-0.2.cab \
+ firmware.dfu \
+ firmware.dfu.asc \
+ firmware.metainfo.xml
diff --git a/plugins/fwupd/tests/chiron-0.2.cab b/plugins/fwupd/tests/chiron-0.2.cab
new file mode 100644
index 0000000..6618361
--- /dev/null
+++ b/plugins/fwupd/tests/chiron-0.2.cab
Binary files differ
diff --git a/plugins/fwupd/tests/firmware.dfu b/plugins/fwupd/tests/firmware.dfu
new file mode 100644
index 0000000..50f00c0
--- /dev/null
+++ b/plugins/fwupd/tests/firmware.dfu
Binary files differ
diff --git a/plugins/fwupd/tests/firmware.dfu.asc b/plugins/fwupd/tests/firmware.dfu.asc
new file mode 100644
index 0000000..0ea79a7
--- /dev/null
+++ b/plugins/fwupd/tests/firmware.dfu.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.14 (GNU/Linux)
+
+iQEcBAABAgAGBQJWUy6EAAoJEEim2A5FOLrCxokIAJJtLVkuXZHgEu2C2Eq9jGrR
+FZ9/z9XtsMgs33teLdmYUAQwvnNIbtIb6z7JViP8llCREP8y2fH+1OjrOOdtuS/A
+bIJ0r40c9wYeH97ZcXBdHZiYVEFO+etbMBUg5ifuRO5VPjD9H1NqL05Wx9kUg/1T
+a1fwgHopXR0T4jYcg5aijp3mdgfmg4boIklDaRV/g2c93W+0VhDZ2h5sKwBxxlFS
+TrptclTMCvRYmVvL1CDOsBtgzu3jGo03wV9rcnSKzeBWvINcvlRLdS0ejlPaRYDK
+MUY4MBVz3fDW1vFsqLpU80XMOYk0bxtQqQ2MsrlXWp9qazB+A6mC7kOnJQfx0yI=
+=A3W8
+-----END PGP SIGNATURE-----
diff --git a/plugins/fwupd/tests/firmware.metainfo.xml b/plugins/fwupd/tests/firmware.metainfo.xml
new file mode 100644
index 0000000..d942fd8
--- /dev/null
+++ b/plugins/fwupd/tests/firmware.metainfo.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2016 Richard Hughes <richard@hughsie.com> -->
+<component type="firmware">
+ <id>com.test.chiron.firmware</id>
+ <name>Chiron</name>
+ <summary>Single line synopsis</summary>
+ <description>
+ <p>
+ This is the first paragraph in the example cab file.
+ </p>
+ <p>
+ This is the second paragraph.
+ </p>
+ </description>
+ <provides>
+ <firmware type="flashed">fd9f37b4-36fb-5245-86a8-4d5993bb153b</firmware>
+ </provides>
+ <url type="homepage">http://127.0.0.1/</url>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <developer_name>ACME Corp</developer_name>
+ <releases>
+ <release urgency="medium" version="0.2" timestamp="1447353015">
+ <checksum target="content" filename="firmware.dfu"/>
+ <description>
+ <p>Latest firmware release.</p>
+ </description>
+ </release>
+ </releases>
+</component>
diff --git a/plugins/malcontent/gs-plugin-malcontent.c b/plugins/malcontent/gs-plugin-malcontent.c
new file mode 100644
index 0000000..d474168
--- /dev/null
+++ b/plugins/malcontent/gs-plugin-malcontent.c
@@ -0,0 +1,343 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018-2019 Endless Mobile
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <gnome-software.h>
+#include <libmalcontent/malcontent.h>
+#include <string.h>
+#include <math.h>
+
+/*
+ * SECTION:
+ * Adds the %GS_APP_QUIRK_PARENTAL_FILTER and
+ * %GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE quirks to applications if they
+ * contravene the effective user’s current parental controls policy.
+ *
+ * Specifically, %GS_APP_QUIRK_PARENTAL_FILTER will be added if an app’s OARS
+ * rating is too extreme for the current parental controls OARS policy.
+ * %GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE will be added if the app is listed on
+ * the current parental controls blocklist.
+ *
+ * Parental controls policy is loaded using libmalcontent.
+ *
+ * This plugin is ordered after flatpak and appstream as it uses OARS data from
+ * them.
+ *
+ * Limiting access to applications by not allowing them to be launched by
+ * gnome-software is only one part of a wider approach to parental controls.
+ * In order to guarantee users do not have access to applications they shouldn’t
+ * have access to, an LSM (such as AppArmor) needs to be used. That complements,
+ * rather than substitutes for, filtering in user visible UIs.
+ */
+
+struct GsPluginData {
+ GMutex mutex; /* protects @app_filter **/
+ MctManager *manager; /* (owned) */
+ gulong manager_app_filter_changed_id;
+ MctAppFilter *app_filter; /* (mutex) (owned) (nullable) */
+};
+
+/* Convert an #MctAppFilterOarsValue to an #AsContentRatingValue. This is
+ * actually a trivial cast, since the types are defined the same; but throw in
+ * a static assertion to be sure. */
+static AsContentRatingValue
+convert_app_filter_oars_value (MctAppFilterOarsValue filter_value)
+{
+ G_STATIC_ASSERT (AS_CONTENT_RATING_VALUE_LAST == MCT_APP_FILTER_OARS_VALUE_INTENSE + 1);
+
+ return (AsContentRatingValue) filter_value;
+}
+
+static gboolean
+app_is_expected_to_have_content_rating (GsApp *app)
+{
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE))
+ return FALSE;
+
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_ADDON:
+ case AS_APP_KIND_CODEC:
+ case AS_APP_KIND_DRIVER:
+ case AS_APP_KIND_FIRMWARE:
+ case AS_APP_KIND_FONT:
+ case AS_APP_KIND_GENERIC:
+ case AS_APP_KIND_INPUT_METHOD:
+ case AS_APP_KIND_LOCALIZATION:
+ case AS_APP_KIND_OS_UPDATE:
+ case AS_APP_KIND_OS_UPGRADE:
+ case AS_APP_KIND_RUNTIME:
+ case AS_APP_KIND_SOURCE:
+ return FALSE;
+ case AS_APP_KIND_UNKNOWN:
+ case AS_APP_KIND_DESKTOP:
+ case AS_APP_KIND_WEB_APP:
+ case AS_APP_KIND_SHELL_EXTENSION:
+ case AS_APP_KIND_CONSOLE:
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+/* Check whether the OARS rating for @app is as, or less, extreme than the
+ * user’s preferences in @app_filter. If so (i.e. if the app is suitable for
+ * this user to use), return %TRUE; otherwise return %FALSE.
+ *
+ * The #AsContentRating in @app may be %NULL if no OARS ratings are provided for
+ * the app. If so, we have to assume the most restrictive ratings. However, if
+ * @rating is provided but is empty, we assume that every section in it has
+ * value %AS_CONTENT_RATING_VALUE_NONE. See
+ * https://github.com/hughsie/oars/blob/master/specification/oars-1.1.md */
+static gboolean
+app_is_content_rating_appropriate (GsApp *app, MctAppFilter *app_filter)
+{
+ AsContentRating *rating = gs_app_get_content_rating (app); /* (nullable) */
+ g_autofree const gchar **oars_sections = mct_app_filter_get_oars_sections (app_filter);
+ AsContentRatingValue default_rating_value;
+
+ if (rating == NULL && !app_is_expected_to_have_content_rating (app)) {
+ /* Some apps, such as flatpak runtimes, are not expected to have
+ * content ratings. */
+ return TRUE;
+ } else if (rating == NULL) {
+ g_debug ("No OARS ratings provided for ‘%s’: assuming most extreme",
+ gs_app_get_unique_id (app));
+ default_rating_value = AS_CONTENT_RATING_VALUE_INTENSE;
+ } else {
+ default_rating_value = AS_CONTENT_RATING_VALUE_NONE;
+ }
+
+ for (gsize i = 0; oars_sections[i] != NULL; i++) {
+ AsContentRatingValue rating_value;
+ MctAppFilterOarsValue filter_value;
+
+ filter_value = mct_app_filter_get_oars_value (app_filter, oars_sections[i]);
+
+ if (rating != NULL)
+ rating_value = as_content_rating_get_value (rating, oars_sections[i]);
+ else
+ rating_value = AS_CONTENT_RATING_VALUE_UNKNOWN;
+
+ if (rating_value == AS_CONTENT_RATING_VALUE_UNKNOWN)
+ rating_value = default_rating_value;
+
+ if (filter_value == MCT_APP_FILTER_OARS_VALUE_UNKNOWN)
+ continue;
+ else if (convert_app_filter_oars_value (filter_value) < rating_value)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+app_is_parentally_blocklisted (GsApp *app, MctAppFilter *app_filter)
+{
+ const gchar *desktop_id;
+ g_autoptr(GAppInfo) appinfo = NULL;
+
+ desktop_id = gs_app_get_id (app);
+ if (desktop_id == NULL)
+ return FALSE;
+ appinfo = G_APP_INFO (gs_utils_get_desktop_app_info (desktop_id));
+ if (appinfo == NULL)
+ return FALSE;
+
+ return !mct_app_filter_is_appinfo_allowed (app_filter, appinfo);
+}
+
+static gboolean
+app_set_parental_quirks (GsPlugin *plugin, GsApp *app, MctAppFilter *app_filter)
+{
+ /* note that both quirks can be set on an app at the same time, and they
+ * have slightly different meanings */
+ gboolean filtered = FALSE;
+
+ /* check the OARS ratings to see if this app should be installable */
+ if (!app_is_content_rating_appropriate (app, app_filter)) {
+ g_debug ("Filtering ‘%s’: app OARS rating is too extreme for this user",
+ gs_app_get_unique_id (app));
+ gs_app_add_quirk (app, GS_APP_QUIRK_PARENTAL_FILTER);
+ filtered = TRUE;
+ } else {
+ gs_app_remove_quirk (app, GS_APP_QUIRK_PARENTAL_FILTER);
+ }
+
+ /* check the app blocklist to see if this app should be launchable */
+ if (app_is_parentally_blocklisted (app, app_filter)) {
+ g_debug ("Filtering ‘%s’: app is blocklisted for this user",
+ gs_app_get_unique_id (app));
+ gs_app_add_quirk (app, GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE);
+ filtered = TRUE;
+ } else {
+ gs_app_remove_quirk (app, GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE);
+ }
+
+ return filtered;
+}
+
+static MctAppFilter *
+query_app_filter (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ return mct_manager_get_app_filter (priv->manager, getuid (),
+ MCT_GET_APP_FILTER_FLAGS_INTERACTIVE, cancellable,
+ error);
+}
+
+static gboolean
+reload_app_filter (GsPlugin *plugin,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(MctAppFilter) new_app_filter = NULL;
+ g_autoptr(MctAppFilter) old_app_filter = NULL;
+
+ /* Refresh the app filter. This blocks on a D-Bus request. */
+ new_app_filter = query_app_filter (plugin, cancellable, error);
+
+ /* on failure, keep the old app filter around since it might be more
+ * useful than nothing */
+ if (new_app_filter == NULL)
+ return FALSE;
+
+ {
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+ old_app_filter = g_steal_pointer (&priv->app_filter);
+ priv->app_filter = g_steal_pointer (&new_app_filter);
+ }
+
+ return TRUE;
+}
+
+static void
+app_filter_changed_cb (MctManager *manager,
+ guint64 user_id,
+ gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ g_autoptr(GError) error_local = NULL;
+
+ if (user_id != getuid ())
+ return;
+
+ /* The user’s app filter has changed, which means that different
+ * apps could be filtered from before. Reload everything to be
+ * sure of re-filtering correctly. */
+ g_debug ("Reloading due to app filter changing for user %" G_GUINT64_FORMAT, user_id);
+ if (reload_app_filter (plugin, NULL, &error_local))
+ gs_plugin_reload (plugin);
+ else
+ g_warning ("Failed to reload changed app filter: %s", error_local->message);
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_alloc_data (plugin, sizeof (GsPluginData));
+
+ /* need application IDs and content ratings */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "flatpak");
+
+ /* set plugin name; it’s not a loadable plugin, but this is descriptive and harmless */
+ gs_plugin_set_appstream_id (plugin, "org.gnome.Software.Plugin.Malcontent");
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+ g_autoptr(GDBusConnection) system_bus = NULL;
+
+ system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, cancellable, error);
+ if (system_bus == NULL)
+ return FALSE;
+
+ priv->manager = mct_manager_new (system_bus);
+ priv->manager_app_filter_changed_id = g_signal_connect (priv->manager,
+ "app-filter-changed",
+ (GCallback) app_filter_changed_cb,
+ plugin);
+ priv->app_filter = query_app_filter (plugin, cancellable, error);
+
+ return (priv->app_filter != NULL);
+}
+
+static gboolean
+refine_app_locked (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* not valid */
+ if (gs_app_get_id (app) == NULL)
+ return TRUE;
+
+ /* Filter by various parental filters. The filter can’t be %NULL,
+ * otherwise setup() would have failed and the plugin would have been
+ * disabled. */
+ g_assert (priv->app_filter != NULL);
+
+ app_set_parental_quirks (plugin, app, priv->app_filter);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app_locked (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return reload_app_filter (plugin, cancellable, error);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ g_clear_pointer (&priv->app_filter, mct_app_filter_unref);
+ if (priv->manager != NULL && priv->manager_app_filter_changed_id != 0) {
+ g_signal_handler_disconnect (priv->manager,
+ priv->manager_app_filter_changed_id);
+ priv->manager_app_filter_changed_id = 0;
+ }
+ g_clear_object (&priv->manager);
+} \ No newline at end of file
diff --git a/plugins/malcontent/meson.build b/plugins/malcontent/meson.build
new file mode 100644
index 0000000..ea0740a
--- /dev/null
+++ b/plugins/malcontent/meson.build
@@ -0,0 +1,17 @@
+c_args = ['-DG_LOG_DOMAIN="GsPluginMalcontent"']
+
+shared_module(
+ 'gs_plugin_malcontent',
+ sources : 'gs-plugin-malcontent.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : c_args,
+ dependencies : [ plugin_libs, malcontent ],
+ link_with : [
+ libgnomesoftware,
+ ],
+) \ No newline at end of file
diff --git a/plugins/meson.build b/plugins/meson.build
new file mode 100644
index 0000000..d749b3d
--- /dev/null
+++ b/plugins/meson.build
@@ -0,0 +1,47 @@
+plugin_dir = join_paths(get_option('libdir'), 'gs-plugins-' + gs_plugin_api_version)
+plugin_libs = [
+ appstream_glib,
+ gio_unix,
+ goa,
+ gtk,
+ json_glib,
+ libsoup
+]
+
+subdir('core')
+subdir('dpkg')
+subdir('dummy')
+subdir('fedora-langpacks')
+subdir('fedora-pkgdb-collections')
+
+if get_option('eos_updater')
+ subdir('eos-updater')
+endif
+if get_option('flatpak')
+ subdir('flatpak')
+endif
+if get_option('fwupd')
+ subdir('fwupd')
+endif
+if get_option('gudev')
+ subdir('modalias')
+endif
+if get_option('malcontent')
+ subdir('malcontent')
+endif
+if get_option('odrs')
+ subdir('odrs')
+endif
+if get_option('packagekit')
+ subdir('packagekit')
+endif
+subdir('repos')
+if get_option('rpm_ostree')
+ subdir('rpm-ostree')
+endif
+if get_option('snap')
+ subdir('snap')
+endif
+if get_option('external_appstream')
+ subdir('external-appstream')
+endif
diff --git a/plugins/modalias/gs-plugin-modalias.c b/plugins/modalias/gs-plugin-modalias.c
new file mode 100644
index 0000000..d4e27a2
--- /dev/null
+++ b/plugins/modalias/gs-plugin-modalias.c
@@ -0,0 +1,151 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <fnmatch.h>
+#include <gudev/gudev.h>
+
+#include <gnome-software.h>
+
+struct GsPluginData {
+ GUdevClient *client;
+ GPtrArray *devices;
+};
+
+static void
+gs_plugin_modalias_uevent_cb (GUdevClient *client,
+ const gchar *action,
+ GUdevDevice *device,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (g_strcmp0 (action, "add") == 0 ||
+ g_strcmp0 (action, "remove") == 0) {
+ g_debug ("invalidating devices as '%s' sent action '%s'",
+ g_udev_device_get_sysfs_path (device),
+ action);
+ g_ptr_array_set_size (priv->devices, 0);
+ }
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "icons");
+ priv->devices = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ priv->client = g_udev_client_new (NULL);
+ g_signal_connect (priv->client, "uevent",
+ G_CALLBACK (gs_plugin_modalias_uevent_cb), plugin);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_object_unref (priv->client);
+ g_ptr_array_unref (priv->devices);
+}
+
+static void
+gs_plugin_modalias_ensure_devices (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GList) list = NULL;
+
+ /* already set */
+ if (priv->devices->len > 0)
+ return;
+
+ /* get the devices, and assume ownership of each */
+ list = g_udev_client_query_by_subsystem (priv->client, NULL);
+ for (GList *l = list; l != NULL; l = l->next) {
+ GUdevDevice *device = G_UDEV_DEVICE (l->data);
+ if (g_udev_device_get_sysfs_attr (device, "modalias") == NULL) {
+ g_object_unref (device);
+ continue;
+ }
+ g_ptr_array_add (priv->devices, device);
+ }
+ g_debug ("%u devices with modalias", priv->devices->len);
+}
+
+static gboolean
+gs_plugin_modalias_matches (GsPlugin *plugin, const gchar *modalias)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ gs_plugin_modalias_ensure_devices (plugin);
+ for (guint i = 0; i < priv->devices->len; i++) {
+ GUdevDevice *device = g_ptr_array_index (priv->devices, i);
+ const gchar *modalias_tmp;
+
+ /* get the (optional) device modalias */
+ modalias_tmp = g_udev_device_get_sysfs_attr (device, "modalias");
+ if (modalias_tmp == NULL)
+ continue;
+ if (fnmatch (modalias, modalias_tmp, 0) == 0) {
+ g_debug ("matched %s against %s", modalias_tmp, modalias);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GPtrArray *provides;
+ guint i;
+
+ /* not required */
+ if (gs_app_get_icons(app)->len > 0)
+ return TRUE;
+ if (gs_app_get_kind (app) != AS_APP_KIND_DRIVER)
+ return TRUE;
+
+ /* do any of the modaliases match any installed hardware */
+ provides = gs_app_get_provides (app);
+ for (i = 0 ; i < provides->len; i++) {
+ AsProvide *prov = g_ptr_array_index (provides, i);
+ if (as_provide_get_kind (prov) != AS_PROVIDE_KIND_MODALIAS)
+ continue;
+ if (gs_plugin_modalias_matches (plugin, as_provide_get_value (prov))) {
+ g_autoptr(AsIcon) ic = NULL;
+ ic = as_icon_new ();
+ as_icon_set_kind (ic, AS_ICON_KIND_STOCK);
+ as_icon_set_name (ic, "emblem-system-symbolic");
+ gs_app_add_icon (app, ic);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ break;
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/modalias/gs-self-test.c b/plugins/modalias/gs-self-test.c
new file mode 100644
index 0000000..5cbb39c
--- /dev/null
+++ b/plugins/modalias/gs-self-test.c
@@ -0,0 +1,116 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static void
+gs_plugins_modalias_func (GsPluginLoader *plugin_loader)
+{
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get search result based on addon keyword */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "colorhug2",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES,
+ NULL);
+ list = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (list != NULL);
+
+ /* make sure there is one entry, the parent app */
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
+ app = gs_app_list_index (list, 0);
+ g_assert_cmpstr (gs_app_get_id (app), ==, "com.hughski.ColorHug2.driver");
+ g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DRIVER);
+ g_assert (gs_app_has_category (app, "Addon"));
+ g_assert (gs_app_has_category (app, "Driver"));
+}
+
+int
+main (int argc, char **argv)
+{
+ g_autofree gchar *tmp_root = NULL;
+ gboolean ret;
+ int retval;
+ g_autofree gchar *xml = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "appstream",
+ "dummy",
+ "modalias",
+ NULL
+ };
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+ g_setenv ("GS_SELF_TEST_DUMMY_ENABLE", "1", TRUE);
+
+ xml = g_strdup_printf ("<?xml version=\"1.0\"?>\n"
+ "<components version=\"0.9\">\n"
+ " <component type=\"driver\">\n"
+ " <id>com.hughski.ColorHug2.driver</id>\n"
+ " <name>ColorHug2</name>\n"
+ " <summary>ColorHug2 Colorimeter Driver</summary>\n"
+ " <pkgname>colorhug-client</pkgname>\n"
+ " <provides>\n"
+ " <modalias>pci:*</modalias>\n"
+ " </provides>\n"
+ " </component>\n"
+ " <info>\n"
+ " <scope>system</scope>\n"
+ " </info>\n"
+ "</components>\n");
+ g_setenv ("GS_SELF_TEST_APPSTREAM_XML", xml, TRUE);
+
+ /* Use a common cache directory for all tests, since the appstream
+ * plugin uses it and cannot be reinitialised for each test. */
+ tmp_root = g_dir_make_tmp ("gnome-software-modalias-test-XXXXXX", NULL);
+ g_assert (tmp_root != NULL);
+ g_setenv ("GS_SELF_TEST_CACHEDIR", tmp_root, TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR_CORE);
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR_DUMMY);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/modalias",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_modalias_func);
+
+ retval = g_test_run ();
+
+ /* Clean up. */
+ gs_utils_rmtree (tmp_root, NULL);
+
+ return retval;
+}
diff --git a/plugins/modalias/meson.build b/plugins/modalias/meson.build
new file mode 100644
index 0000000..22cac6d
--- /dev/null
+++ b/plugins/modalias/meson.build
@@ -0,0 +1,42 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginModalias"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+cargs += ['-DLOCALPLUGINDIR_DUMMY="' + meson.current_build_dir() + '/../dummy"']
+
+shared_module(
+ 'gs_plugin_modalias',
+sources : 'gs-plugin-modalias.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, gudev ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ e = executable(
+ 'gs-self-test-modalias',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-modalias', e, suite: ['plugins', 'modalias'], env: test_env)
+endif
diff --git a/plugins/odrs/gs-plugin-odrs.c b/plugins/odrs/gs-plugin-odrs.c
new file mode 100644
index 0000000..8c3e9a4
--- /dev/null
+++ b/plugins/odrs/gs-plugin-odrs.c
@@ -0,0 +1,1214 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <gnome-software.h>
+#include <json-glib/json-glib.h>
+#include <string.h>
+#include <math.h>
+
+/*
+ * SECTION:
+ * Provides review data from the Open Desktop Ratings Serice.
+ */
+
+#if !GLIB_CHECK_VERSION(2, 62, 0)
+typedef struct
+{
+ guint8 *data;
+ guint len;
+ guint alloc;
+ guint elt_size;
+ guint zero_terminated : 1;
+ guint clear : 1;
+ gatomicrefcount ref_count;
+ GDestroyNotify clear_func;
+} GRealArray;
+
+gboolean
+g_array_binary_search (GArray *array,
+ gconstpointer target,
+ GCompareFunc compare_func,
+ guint *out_match_index)
+{
+ gboolean result = FALSE;
+ GRealArray *_array = (GRealArray *) array;
+ guint left, middle, right;
+ gint val;
+
+ g_return_val_if_fail (_array != NULL, FALSE);
+ g_return_val_if_fail (compare_func != NULL, FALSE);
+
+ if (G_LIKELY(_array->len))
+ {
+ left = 0;
+ right = _array->len - 1;
+
+ while (left <= right)
+ {
+ middle = left + (right - left) / 2;
+
+ val = compare_func (_array->data + (_array->elt_size * middle), target);
+ if (val == 0)
+ {
+ result = TRUE;
+ break;
+ }
+ else if (val < 0)
+ left = middle + 1;
+ else if (/* val > 0 && */ middle > 0)
+ right = middle - 1;
+ else
+ break; /* element not found */
+ }
+ }
+
+ if (result && out_match_index != NULL)
+ *out_match_index = middle;
+
+ return result;
+}
+#endif /* glib < 2.62.0 */
+
+#define ODRS_REVIEW_CACHE_AGE_MAX 237000 /* 1 week */
+#define ODRS_REVIEW_NUMBER_RESULTS_MAX 20
+
+/* Element in priv->ratings, all allocated in one big block and sorted
+ * alphabetically to reduce the number of allocations and fragmentation. */
+typedef struct {
+ gchar *app_id; /* (owned) */
+ guint32 n_star_ratings[6];
+} GsOdrsRating;
+
+static int
+rating_compare (const GsOdrsRating *a, const GsOdrsRating *b)
+{
+ return g_strcmp0 (a->app_id, b->app_id);
+}
+
+static void
+rating_clear (GsOdrsRating *rating)
+{
+ g_free (rating->app_id);
+}
+
+struct GsPluginData {
+ GSettings *settings;
+ gchar *distro;
+ gchar *user_hash;
+ gchar *review_server;
+ GArray *ratings; /* (element-type GsOdrsRating) (mutex ratings_mutex) (owned) (nullable) */
+ GMutex ratings_mutex;
+ GsApp *cached_origin;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+
+ g_mutex_init (&priv->ratings_mutex);
+ priv->settings = g_settings_new ("org.gnome.software");
+ priv->review_server = g_settings_get_string (priv->settings,
+ "review-server");
+ priv->ratings = NULL; /* until first refreshed */
+
+ /* get the machine+user ID hash value */
+ priv->user_hash = gs_utils_get_user_hash (&error);
+ if (priv->user_hash == NULL) {
+ g_warning ("Failed to get machine+user hash: %s", error->message);
+ return;
+ }
+
+ /* get the distro name (e.g. 'Fedora') but allow a fallback */
+ os_release = gs_os_release_new (&error);
+ if (os_release != NULL) {
+ priv->distro = g_strdup (gs_os_release_get_name (os_release));
+ if (priv->distro == NULL) {
+ g_warning ("no distro name specified");
+ priv->distro = g_strdup ("Unknown");
+ }
+ } else {
+ g_warning ("failed to get distro name: %s", error->message);
+ priv->distro = g_strdup ("Unknown");
+ }
+
+ /* add source */
+ priv->cached_origin = gs_app_new (gs_plugin_get_name (plugin));
+ gs_app_set_kind (priv->cached_origin, AS_APP_KIND_SOURCE);
+ gs_app_set_origin_hostname (priv->cached_origin, priv->review_server);
+
+ /* add the source to the plugin cache which allows us to match the
+ * unique ID to a GsApp when creating an event */
+ gs_plugin_cache_add (plugin,
+ gs_app_get_unique_id (priv->cached_origin),
+ priv->cached_origin);
+
+ /* need application IDs and version */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "flatpak");
+
+ /* set name of MetaInfo file */
+ gs_plugin_set_appstream_id (plugin, "org.gnome.Software.Plugin.Odrs");
+}
+
+static gboolean
+gs_plugin_odrs_load_ratings_for_app (JsonObject *json_app, const gchar *app_id, GsOdrsRating *rating_out)
+{
+ guint i;
+ const gchar *names[] = { "star0", "star1", "star2", "star3",
+ "star4", "star5", NULL };
+
+ for (i = 0; names[i] != NULL; i++) {
+ if (!json_object_has_member (json_app, names[i]))
+ return FALSE;
+ rating_out->n_star_ratings[i] = (guint64) json_object_get_int_member (json_app, names[i]);
+ }
+
+ rating_out->app_id = g_strdup (app_id);
+
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_odrs_load_ratings (GsPlugin *plugin, const gchar *fn, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ JsonNode *json_root;
+ JsonObject *json_item;
+ g_autoptr(JsonParser) json_parser = NULL;
+ const gchar *app_id;
+ JsonNode *json_app_node;
+ JsonObjectIter iter;
+ g_autoptr(GArray) new_ratings = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ /* parse the data and find the success */
+ json_parser = json_parser_new_immutable ();
+#if JSON_CHECK_VERSION(1, 6, 0)
+ if (!json_parser_load_from_mapped_file (json_parser, fn, error)) {
+#else
+ if (!json_parser_load_from_file (json_parser, fn, error)) {
+#endif
+ gs_utils_error_convert_json_glib (error);
+ return FALSE;
+ }
+ json_root = json_parser_get_root (json_parser);
+ if (json_root == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no ratings root");
+ return FALSE;
+ }
+ if (json_node_get_node_type (json_root) != JSON_NODE_OBJECT) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no ratings array");
+ return FALSE;
+ }
+
+ json_item = json_node_get_object (json_root);
+
+ new_ratings = g_array_sized_new (FALSE, /* don’t zero-terminate */
+ FALSE, /* don’t clear */
+ sizeof (GsOdrsRating),
+ json_object_get_size (json_item));
+ g_array_set_clear_func (new_ratings, (GDestroyNotify) rating_clear);
+
+ /* parse each app */
+ json_object_iter_init (&iter, json_item);
+ while (json_object_iter_next (&iter, &app_id, &json_app_node)) {
+ GsOdrsRating rating;
+ JsonObject *json_app;
+
+ if (!JSON_NODE_HOLDS_OBJECT (json_app_node))
+ continue;
+ json_app = json_node_get_object (json_app_node);
+
+ if (gs_plugin_odrs_load_ratings_for_app (json_app, app_id, &rating))
+ g_array_append_val (new_ratings, rating);
+ }
+
+ /* Allow for binary searches later. */
+ g_array_sort (new_ratings, (GCompareFunc) rating_compare);
+
+ /* Update the shared state */
+ locker = g_mutex_locker_new (&priv->ratings_mutex);
+ g_clear_pointer (&priv->ratings, g_array_unref);
+ priv->ratings = g_steal_pointer (&new_ratings);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *cache_filename = NULL;
+ g_autofree gchar *uri = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
+
+ /* check cache age */
+ cache_filename = gs_utils_get_cache_filename ("odrs",
+ "ratings.json",
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (cache_filename == NULL)
+ return FALSE;
+ if (cache_age > 0) {
+ guint tmp;
+ g_autoptr(GFile) file = NULL;
+ file = g_file_new_for_path (cache_filename);
+ tmp = gs_utils_get_file_age (file);
+ if (tmp < cache_age) {
+ g_debug ("%s is only %u seconds old, so ignoring refresh",
+ cache_filename, tmp);
+ return gs_plugin_odrs_load_ratings (plugin, cache_filename, error);
+ }
+ }
+
+ /* download the complete file */
+ uri = g_strdup_printf ("%s/ratings", priv->review_server);
+ g_debug ("Updating ODRS cache from %s to %s", uri, cache_filename);
+ gs_app_set_summary_missing (app_dl,
+ /* TRANSLATORS: status text when downloading */
+ _("Downloading application ratings…"));
+ if (!gs_plugin_download_file (plugin, app_dl, uri, cache_filename, cancellable, &error_local)) {
+ g_autoptr(GsPluginEvent) event = gs_plugin_event_new ();
+
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_set_action (event, GS_PLUGIN_ACTION_DOWNLOAD);
+ gs_plugin_event_set_origin (event, priv->cached_origin);
+ if (gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE))
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE);
+ else
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+
+ /* don't fail updates if the ratings server is unavailable */
+ return TRUE;
+ }
+ return gs_plugin_odrs_load_ratings (plugin, cache_filename, error);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_free (priv->user_hash);
+ g_free (priv->distro);
+ g_free (priv->review_server);
+ g_clear_pointer (&priv->ratings, g_array_unref);
+ g_object_unref (priv->settings);
+ g_object_unref (priv->cached_origin);
+ g_mutex_clear (&priv->ratings_mutex);
+}
+
+static AsReview *
+gs_plugin_odrs_parse_review_object (GsPlugin *plugin, JsonObject *item)
+{
+ AsReview *rev = as_review_new ();
+
+ /* date */
+ if (json_object_has_member (item, "date_created")) {
+ gint64 timestamp;
+ g_autoptr(GDateTime) dt = NULL;
+ timestamp = json_object_get_int_member (item, "date_created");
+ dt = g_date_time_new_from_unix_utc (timestamp);
+ as_review_set_date (rev, dt);
+ }
+
+ /* assemble review */
+ if (json_object_has_member (item, "rating"))
+ as_review_set_rating (rev, (gint) json_object_get_int_member (item, "rating"));
+ if (json_object_has_member (item, "score")) {
+ as_review_set_priority (rev, (gint) json_object_get_int_member (item, "score"));
+ } else if (json_object_has_member (item, "karma_up") &&
+ json_object_has_member (item, "karma_down")) {
+ gdouble ku = (gdouble) json_object_get_int_member (item, "karma_up");
+ gdouble kd = (gdouble) json_object_get_int_member (item, "karma_down");
+ gdouble wilson = 0.f;
+
+ /* from http://www.evanmiller.org/how-not-to-sort-by-average-rating.html */
+ if (ku > 0 || kd > 0) {
+ wilson = ((ku + 1.9208) / (ku + kd) -
+ 1.96 * sqrt ((ku * kd) / (ku + kd) + 0.9604) /
+ (ku + kd)) / (1 + 3.8416 / (ku + kd));
+ wilson *= 100.f;
+ }
+ as_review_set_priority (rev, (gint) wilson);
+ }
+ if (json_object_has_member (item, "user_hash"))
+ as_review_set_reviewer_id (rev, json_object_get_string_member (item, "user_hash"));
+ if (json_object_has_member (item, "user_display"))
+ as_review_set_reviewer_name (rev, json_object_get_string_member (item, "user_display"));
+ if (json_object_has_member (item, "summary"))
+ as_review_set_summary (rev, json_object_get_string_member (item, "summary"));
+ if (json_object_has_member (item, "description"))
+ as_review_set_description (rev, json_object_get_string_member (item, "description"));
+ if (json_object_has_member (item, "version"))
+ as_review_set_version (rev, json_object_get_string_member (item, "version"));
+
+ /* add extra metadata for the plugin */
+ if (json_object_has_member (item, "user_skey")) {
+ as_review_add_metadata (rev, "user_skey",
+ json_object_get_string_member (item, "user_skey"));
+ }
+ if (json_object_has_member (item, "app_id")) {
+ as_review_add_metadata (rev, "app_id",
+ json_object_get_string_member (item, "app_id"));
+ }
+ if (json_object_has_member (item, "review_id")) {
+ g_autofree gchar *review_id = NULL;
+ review_id = g_strdup_printf ("%" G_GINT64_FORMAT,
+ json_object_get_int_member (item, "review_id"));
+ as_review_set_id (rev, review_id);
+ }
+
+ /* don't allow multiple votes */
+ if (json_object_has_member (item, "vote_id"))
+ as_review_add_flags (rev, AS_REVIEW_FLAG_VOTED);
+
+ return rev;
+}
+
+static GPtrArray *
+gs_plugin_odrs_parse_reviews (GsPlugin *plugin,
+ const gchar *data,
+ gssize data_len,
+ GError **error)
+{
+ JsonArray *json_reviews;
+ JsonNode *json_root;
+ guint i;
+ g_autoptr(JsonParser) json_parser = NULL;
+ g_autoptr(GHashTable) reviewer_ids = NULL;
+ g_autoptr(GPtrArray) reviews = NULL;
+
+ /* nothing */
+ if (data == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "server returned no data");
+ return NULL;
+ }
+
+ /* parse the data and find the array or ratings */
+ json_parser = json_parser_new_immutable ();
+ if (!json_parser_load_from_data (json_parser, data, data_len, error)) {
+ gs_utils_error_convert_json_glib (error);
+ return NULL;
+ }
+ json_root = json_parser_get_root (json_parser);
+ if (json_root == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no root");
+ return NULL;
+ }
+ if (json_node_get_node_type (json_root) != JSON_NODE_ARRAY) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no array");
+ return NULL;
+ }
+
+ /* parse each rating */
+ reviews = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ json_reviews = json_node_get_array (json_root);
+ reviewer_ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ for (i = 0; i < json_array_get_length (json_reviews); i++) {
+ JsonNode *json_review;
+ JsonObject *json_item;
+ const gchar *reviewer_id;
+ g_autoptr(AsReview) review = NULL;
+
+ /* extract the data */
+ json_review = json_array_get_element (json_reviews, i);
+ if (json_node_get_node_type (json_review) != JSON_NODE_OBJECT) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no object type");
+ return NULL;
+ }
+ json_item = json_node_get_object (json_review);
+ if (json_item == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no object");
+ return NULL;
+ }
+
+ /* create review */
+ review = gs_plugin_odrs_parse_review_object (plugin,
+ json_item);
+
+ reviewer_id = as_review_get_reviewer_id (review);
+ if (reviewer_id == NULL)
+ continue;
+
+ /* dedupe each on the user_hash */
+ if (g_hash_table_lookup (reviewer_ids, reviewer_id) != NULL) {
+ g_debug ("duplicate review %s, skipping", reviewer_id);
+ continue;
+ }
+ g_hash_table_add (reviewer_ids, g_strdup (reviewer_id));
+ g_ptr_array_add (reviews, g_object_ref (review));
+ }
+ return g_steal_pointer (&reviews);
+}
+
+static gboolean
+gs_plugin_odrs_parse_success (const gchar *data, gssize data_len, GError **error)
+{
+ JsonNode *json_root;
+ JsonObject *json_item;
+ const gchar *msg = NULL;
+ g_autoptr(JsonParser) json_parser = NULL;
+
+ /* nothing */
+ if (data == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "server returned no data");
+ return FALSE;
+ }
+
+ /* parse the data and find the success */
+ json_parser = json_parser_new_immutable ();
+ if (!json_parser_load_from_data (json_parser, data, data_len, error)) {
+ gs_utils_error_convert_json_glib (error);
+ return FALSE;
+ }
+ json_root = json_parser_get_root (json_parser);
+ if (json_root == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no error root");
+ return FALSE;
+ }
+ if (json_node_get_node_type (json_root) != JSON_NODE_OBJECT) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no error object");
+ return FALSE;
+ }
+ json_item = json_node_get_object (json_root);
+ if (json_item == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no error object");
+ return FALSE;
+ }
+
+ /* failed? */
+ if (json_object_has_member (json_item, "msg"))
+ msg = json_object_get_string_member (json_item, "msg");
+ if (!json_object_get_boolean_member (json_item, "success")) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ msg != NULL ? msg : "unknown failure");
+ return FALSE;
+ }
+
+ /* just for the console */
+ if (msg != NULL)
+ g_debug ("success: %s", msg);
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_odrs_json_post (SoupSession *session,
+ const gchar *uri,
+ const gchar *data,
+ GError **error)
+{
+ guint status_code;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ /* create the GET data */
+ g_debug ("Sending ODRS request to %s: %s", uri, data);
+ msg = soup_message_new (SOUP_METHOD_POST, uri);
+ soup_message_set_request (msg, "application/json; charset=utf-8",
+ SOUP_MEMORY_COPY, data, strlen (data));
+
+ /* set sync request */
+ status_code = soup_session_send_message (session, msg);
+ g_debug ("ODRS server returned status %u: %s", status_code, msg->response_body->data);
+ if (status_code != SOUP_STATUS_OK) {
+ g_warning ("Failed to set rating on ODRS: %s",
+ soup_status_get_phrase (status_code));
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Failed to submit review to ODRS: %s", soup_status_get_phrase (status_code));
+ return FALSE;
+ }
+
+ /* process returned JSON */
+ return gs_plugin_odrs_parse_success (msg->response_body->data,
+ msg->response_body->length,
+ error);
+}
+
+static GPtrArray *
+_gs_app_get_reviewable_ids (GsApp *app)
+{
+ GPtrArray *ids = g_ptr_array_new_with_free_func (g_free);
+ GPtrArray *provides = gs_app_get_provides (app);
+
+ /* add the main component id */
+ g_ptr_array_add (ids, g_strdup (gs_app_get_id (app)));
+
+ /* add any ID provides */
+ for (guint i = 0; i < provides->len; i++) {
+ AsProvide *provide = g_ptr_array_index (provides, i);
+ if (as_provide_get_kind (provide) == AS_PROVIDE_KIND_ID &&
+ as_provide_get_value (provide) != NULL) {
+ g_ptr_array_add (ids, g_strdup (as_provide_get_value (provide)));
+ }
+ }
+ return ids;
+}
+
+static gboolean
+gs_plugin_odrs_refine_ratings (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ gint rating;
+ guint32 ratings_raw[6] = { 0, 0, 0, 0, 0, 0 };
+ guint cnt = 0;
+ g_autoptr(GArray) review_ratings = NULL;
+ g_autoptr(GPtrArray) reviewable_ids = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ /* get ratings for each reviewable ID */
+ reviewable_ids = _gs_app_get_reviewable_ids (app);
+
+ locker = g_mutex_locker_new (&priv->ratings_mutex);
+
+ if (priv->ratings == NULL)
+ return TRUE;
+
+ for (guint i = 0; i < reviewable_ids->len; i++) {
+ const gchar *id = g_ptr_array_index (reviewable_ids, i);
+ const GsOdrsRating search_rating = { id, { 0, }};
+ guint found_index;
+ const GsOdrsRating *found_rating;
+
+ if (!g_array_binary_search (priv->ratings, &search_rating,
+ (GCompareFunc) rating_compare, &found_index))
+ continue;
+
+ found_rating = &g_array_index (priv->ratings, GsOdrsRating, found_index);
+
+ /* copy into accumulator array */
+ for (guint j = 0; j < 6; j++)
+ ratings_raw[j] += found_rating->n_star_ratings[j];
+ cnt++;
+ }
+ if (cnt == 0)
+ return TRUE;
+
+ /* Done with priv->ratings now */
+ g_clear_pointer (&locker, g_mutex_locker_free);
+
+ /* merge to accumulator array back to one GArray blob */
+ review_ratings = g_array_sized_new (FALSE, TRUE, sizeof(guint32), 6);
+ for (guint i = 0; i < 6; i++)
+ g_array_append_val (review_ratings, ratings_raw[i]);
+ gs_app_set_review_ratings (app, review_ratings);
+
+ /* find the wilson rating */
+ rating = gs_utils_get_wilson_rating (g_array_index (review_ratings, guint32, 1),
+ g_array_index (review_ratings, guint32, 2),
+ g_array_index (review_ratings, guint32, 3),
+ g_array_index (review_ratings, guint32, 4),
+ g_array_index (review_ratings, guint32, 5));
+ if (rating > 0)
+ gs_app_set_rating (app, rating);
+ return TRUE;
+}
+
+static JsonNode *
+gs_plugin_odrs_get_compat_ids (GsApp *app)
+{
+ GPtrArray *provides = gs_app_get_provides (app);
+ g_autoptr(GHashTable) ids = NULL;
+ g_autoptr(JsonArray) json_array = json_array_new ();
+ g_autoptr(JsonNode) json_node = json_node_new (JSON_NODE_ARRAY);
+
+ ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ for (guint i = 0; i < provides->len; i++) {
+ AsProvide *provide = g_ptr_array_index (provides, i);
+ if (as_provide_get_kind (provide) != AS_PROVIDE_KIND_ID)
+ continue;
+ if (as_provide_get_value (provide) == NULL)
+ continue;
+ if (g_hash_table_lookup (ids, as_provide_get_value (provide)) != NULL)
+ continue;
+ g_hash_table_add (ids, g_strdup (as_provide_get_value (provide)));
+ json_array_add_string_element (json_array, as_provide_get_value (provide));
+ }
+ if (json_array_get_length (json_array) == 0)
+ return NULL;
+ json_node_set_array (json_node, json_array);
+ return g_steal_pointer (&json_node);
+}
+
+static GPtrArray *
+gs_plugin_odrs_fetch_for_app (GsPlugin *plugin, GsApp *app, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ JsonNode *json_compat_ids;
+ const gchar *version;
+ guint status_code;
+ g_autofree gchar *cachefn_basename = NULL;
+ g_autofree gchar *cachefn = NULL;
+ g_autofree gchar *data = NULL;
+ g_autofree gchar *uri = NULL;
+ g_autoptr(GFile) cachefn_file = NULL;
+ g_autoptr(GPtrArray) reviews = NULL;
+ g_autoptr(JsonBuilder) builder = NULL;
+ g_autoptr(JsonGenerator) json_generator = NULL;
+ g_autoptr(JsonNode) json_root = NULL;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ /* look in the cache */
+ cachefn_basename = g_strdup_printf ("%s.json", gs_app_get_id (app));
+ cachefn = gs_utils_get_cache_filename ("odrs",
+ cachefn_basename,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (cachefn == NULL)
+ return NULL;
+ cachefn_file = g_file_new_for_path (cachefn);
+ if (gs_utils_get_file_age (cachefn_file) < ODRS_REVIEW_CACHE_AGE_MAX) {
+ g_autoptr(GMappedFile) mapped_file = NULL;
+
+ mapped_file = g_mapped_file_new (cachefn, FALSE, error);
+ if (mapped_file == NULL)
+ return NULL;
+
+ g_debug ("got review data for %s from %s",
+ gs_app_get_id (app), cachefn);
+ return gs_plugin_odrs_parse_reviews (plugin,
+ g_mapped_file_get_contents (mapped_file),
+ g_mapped_file_get_length (mapped_file),
+ error);
+ }
+
+ /* not always available */
+ version = gs_app_get_version (app);
+ if (version == NULL)
+ version = "unknown";
+
+ /* create object with review data */
+ builder = json_builder_new ();
+ json_builder_begin_object (builder);
+ json_builder_set_member_name (builder, "user_hash");
+ json_builder_add_string_value (builder, priv->user_hash);
+ json_builder_set_member_name (builder, "app_id");
+ json_builder_add_string_value (builder, gs_app_get_id (app));
+ json_builder_set_member_name (builder, "locale");
+ json_builder_add_string_value (builder, gs_plugin_get_locale (plugin));
+ json_builder_set_member_name (builder, "distro");
+ json_builder_add_string_value (builder, priv->distro);
+ json_builder_set_member_name (builder, "version");
+ json_builder_add_string_value (builder, version);
+ json_builder_set_member_name (builder, "limit");
+ json_builder_add_int_value (builder, ODRS_REVIEW_NUMBER_RESULTS_MAX);
+ json_compat_ids = gs_plugin_odrs_get_compat_ids (app);
+ if (json_compat_ids != NULL) {
+ json_builder_set_member_name (builder, "compat_ids");
+ json_builder_add_value (builder, json_compat_ids);
+ }
+ json_builder_end_object (builder);
+
+ /* export as a string */
+ json_root = json_builder_get_root (builder);
+ json_generator = json_generator_new ();
+ json_generator_set_pretty (json_generator, TRUE);
+ json_generator_set_root (json_generator, json_root);
+ data = json_generator_to_data (json_generator, NULL);
+ if (data == NULL)
+ return NULL;
+ uri = g_strdup_printf ("%s/fetch", priv->review_server);
+ g_debug ("Updating ODRS cache for %s from %s to %s; request %s", gs_app_get_id (app),
+ uri, cachefn, data);
+ msg = soup_message_new (SOUP_METHOD_POST, uri);
+ soup_message_set_request (msg, "application/json; charset=utf-8",
+ SOUP_MEMORY_COPY, data, strlen (data));
+ status_code = soup_session_send_message (gs_plugin_get_soup_session (plugin), msg);
+ if (status_code != SOUP_STATUS_OK) {
+ if (!gs_plugin_odrs_parse_success (msg->response_body->data,
+ msg->response_body->length,
+ error))
+ return NULL;
+ /* not sure what to do here */
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "status code invalid");
+ gs_utils_error_add_origin_id (error, priv->cached_origin);
+ return NULL;
+ }
+ reviews = gs_plugin_odrs_parse_reviews (plugin,
+ msg->response_body->data,
+ msg->response_body->length,
+ error);
+ if (reviews == NULL)
+ return NULL;
+
+ /* save to the cache */
+ if (!g_file_set_contents (cachefn,
+ msg->response_body->data,
+ msg->response_body->length,
+ error))
+ return NULL;
+
+ /* success */
+ return g_steal_pointer (&reviews);
+}
+
+static gboolean
+gs_plugin_odrs_refine_reviews (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ AsReview *review;
+ g_autoptr(GPtrArray) reviews = NULL;
+
+ /* get from server */
+ reviews = gs_plugin_odrs_fetch_for_app (plugin, app, error);
+ if (reviews == NULL)
+ return FALSE;
+ for (guint i = 0; i < reviews->len; i++) {
+ review = g_ptr_array_index (reviews, i);
+
+ /* save this on the application object so we can use it for
+ * submitting a new review */
+ if (i == 0) {
+ gs_app_set_metadata (app, "ODRS::user_skey",
+ as_review_get_metadata_item (review, "user_skey"));
+ }
+
+ /* ignore invalid reviews */
+ if (as_review_get_rating (review) == 0)
+ continue;
+
+ /* the user_hash matches, so mark this as our own review */
+ if (g_strcmp0 (as_review_get_reviewer_id (review),
+ priv->user_hash) == 0) {
+ as_review_set_flags (review, AS_REVIEW_FLAG_SELF);
+ }
+ gs_app_add_review (app, review);
+ }
+ return TRUE;
+}
+
+static gboolean
+refine_app (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* not valid */
+ if (gs_app_get_kind (app) == AS_APP_KIND_ADDON)
+ return TRUE;
+ if (gs_app_get_id (app) == NULL)
+ return TRUE;
+
+ /* add reviews if possible */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS) {
+ if (gs_app_get_reviews(app)->len > 0)
+ return TRUE;
+ if (!gs_plugin_odrs_refine_reviews (plugin, app,
+ cancellable, error))
+ return FALSE;
+ }
+
+ /* add ratings if possible */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS ||
+ flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING) {
+ if (gs_app_get_review_ratings(app) != NULL)
+ return TRUE;
+ if (!gs_plugin_odrs_refine_ratings (plugin, app,
+ cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* nothing to do here */
+ if ((flags & (GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING)) == 0)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gchar *
+gs_plugin_odrs_sanitize_version (const gchar *version)
+{
+ gchar *str;
+ gchar *tmp;
+
+ /* nothing set */
+ if (version == NULL)
+ return g_strdup ("unknown");
+
+ /* remove epoch */
+ str = g_strrstr (version, ":");
+ if (str != NULL)
+ version = str + 1;
+
+ /* remove release */
+ tmp = g_strdup (version);
+ g_strdelimit (tmp, "-", '\0');
+
+ /* remove '+dfsg' suffix */
+ str = g_strstr_len (tmp, -1, "+dfsg");
+ if (str != NULL)
+ *str = '\0';
+
+ return tmp;
+}
+
+static gboolean
+gs_plugin_odrs_invalidate_cache (AsReview *review, GError **error)
+{
+ g_autofree gchar *cachefn_basename = NULL;
+ g_autofree gchar *cachefn = NULL;
+ g_autoptr(GFile) cachefn_file = NULL;
+
+ /* look in the cache */
+ cachefn_basename = g_strdup_printf ("%s.json",
+ as_review_get_metadata_item (review, "app_id"));
+ cachefn = gs_utils_get_cache_filename ("odrs",
+ cachefn_basename,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ error);
+ if (cachefn == NULL)
+ return FALSE;
+ cachefn_file = g_file_new_for_path (cachefn);
+ if (!g_file_query_exists (cachefn_file, NULL))
+ return TRUE;
+ return g_file_delete (cachefn_file, NULL, error);
+}
+
+gboolean
+gs_plugin_review_submit (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *data = NULL;
+ g_autofree gchar *uri = NULL;
+ g_autofree gchar *version = NULL;
+ g_autoptr(JsonBuilder) builder = NULL;
+ g_autoptr(JsonGenerator) json_generator = NULL;
+ g_autoptr(JsonNode) json_root = NULL;
+
+ /* save as we don't re-request the review from the server */
+ as_review_add_flags (review, AS_REVIEW_FLAG_SELF);
+ as_review_set_reviewer_name (review, g_get_real_name ());
+ as_review_add_metadata (review, "app_id", gs_app_get_id (app));
+ as_review_add_metadata (review, "user_skey",
+ gs_app_get_metadata_item (app, "ODRS::user_skey"));
+
+ /* create object with review data */
+ builder = json_builder_new ();
+ json_builder_begin_object (builder);
+ json_builder_set_member_name (builder, "user_hash");
+ json_builder_add_string_value (builder, priv->user_hash);
+ json_builder_set_member_name (builder, "user_skey");
+ json_builder_add_string_value (builder,
+ as_review_get_metadata_item (review, "user_skey"));
+ json_builder_set_member_name (builder, "app_id");
+ json_builder_add_string_value (builder,
+ as_review_get_metadata_item (review, "app_id"));
+ json_builder_set_member_name (builder, "locale");
+ json_builder_add_string_value (builder, gs_plugin_get_locale (plugin));
+ json_builder_set_member_name (builder, "distro");
+ json_builder_add_string_value (builder, priv->distro);
+ json_builder_set_member_name (builder, "version");
+ version = gs_plugin_odrs_sanitize_version (as_review_get_version (review));
+ json_builder_add_string_value (builder, version);
+ json_builder_set_member_name (builder, "user_display");
+ json_builder_add_string_value (builder, as_review_get_reviewer_name (review));
+ json_builder_set_member_name (builder, "summary");
+ json_builder_add_string_value (builder, as_review_get_summary (review));
+ json_builder_set_member_name (builder, "description");
+ json_builder_add_string_value (builder, as_review_get_description (review));
+ json_builder_set_member_name (builder, "rating");
+ json_builder_add_int_value (builder, as_review_get_rating (review));
+ json_builder_end_object (builder);
+
+ /* export as a string */
+ json_root = json_builder_get_root (builder);
+ json_generator = json_generator_new ();
+ json_generator_set_pretty (json_generator, TRUE);
+ json_generator_set_root (json_generator, json_root);
+ data = json_generator_to_data (json_generator, NULL);
+
+ /* clear cache */
+ if (!gs_plugin_odrs_invalidate_cache (review, error))
+ return FALSE;
+
+ /* POST */
+ uri = g_strdup_printf ("%s/submit", priv->review_server);
+ return gs_plugin_odrs_json_post (gs_plugin_get_soup_session (plugin),
+ uri, data, error);
+}
+
+static gboolean
+gs_plugin_odrs_vote (GsPlugin *plugin, AsReview *review,
+ const gchar *uri, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *tmp;
+ g_autofree gchar *data = NULL;
+ g_autoptr(JsonBuilder) builder = NULL;
+ g_autoptr(JsonGenerator) json_generator = NULL;
+ g_autoptr(JsonNode) json_root = NULL;
+
+ /* create object with vote data */
+ builder = json_builder_new ();
+ json_builder_begin_object (builder);
+
+ json_builder_set_member_name (builder, "user_hash");
+ json_builder_add_string_value (builder, priv->user_hash);
+ json_builder_set_member_name (builder, "user_skey");
+ json_builder_add_string_value (builder,
+ as_review_get_metadata_item (review, "user_skey"));
+ json_builder_set_member_name (builder, "app_id");
+ json_builder_add_string_value (builder,
+ as_review_get_metadata_item (review, "app_id"));
+ tmp = as_review_get_id (review);
+ if (tmp != NULL) {
+ gint64 review_id;
+ json_builder_set_member_name (builder, "review_id");
+ review_id = g_ascii_strtoll (tmp, NULL, 10);
+ json_builder_add_int_value (builder, review_id);
+ }
+ json_builder_end_object (builder);
+
+ /* export as a string */
+ json_root = json_builder_get_root (builder);
+ json_generator = json_generator_new ();
+ json_generator_set_pretty (json_generator, TRUE);
+ json_generator_set_root (json_generator, json_root);
+ data = json_generator_to_data (json_generator, NULL);
+ if (data == NULL)
+ return FALSE;
+
+ /* clear cache */
+ if (!gs_plugin_odrs_invalidate_cache (review, error))
+ return FALSE;
+
+ /* send to server */
+ if (!gs_plugin_odrs_json_post (gs_plugin_get_soup_session (plugin),
+ uri, data, error))
+ return FALSE;
+
+ /* mark as voted */
+ as_review_add_flags (review, AS_REVIEW_FLAG_VOTED);
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_review_report (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("%s/report", priv->review_server);
+ return gs_plugin_odrs_vote (plugin, review, uri, error);
+}
+
+gboolean
+gs_plugin_review_upvote (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("%s/upvote", priv->review_server);
+ return gs_plugin_odrs_vote (plugin, review, uri, error);
+}
+
+gboolean
+gs_plugin_review_downvote (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("%s/downvote", priv->review_server);
+ return gs_plugin_odrs_vote (plugin, review, uri, error);
+}
+
+gboolean
+gs_plugin_review_dismiss (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("%s/dismiss", priv->review_server);
+ return gs_plugin_odrs_vote (plugin, review, uri, error);
+}
+
+gboolean
+gs_plugin_review_remove (GsPlugin *plugin,
+ GsApp *app,
+ AsReview *review,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("%s/remove", priv->review_server);
+ return gs_plugin_odrs_vote (plugin, review, uri, error);
+}
+
+static GsApp *
+gs_plugin_create_app_dummy (const gchar *id)
+{
+ GsApp *app = gs_app_new (id);
+ g_autoptr(GString) str = NULL;
+ str = g_string_new (id);
+ as_utils_string_replace (str, ".desktop", "");
+ g_string_prepend (str, "No description is available for ");
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, "Unknown Application");
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, "Application not found");
+ gs_app_set_description (app, GS_APP_QUALITY_LOWEST, str->str);
+ return app;
+}
+
+gboolean
+gs_plugin_add_unvoted_reviews (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ guint status_code;
+ guint i;
+ g_autofree gchar *uri = NULL;
+ g_autoptr(GHashTable) hash = NULL;
+ g_autoptr(GPtrArray) reviews = NULL;
+ g_autoptr(SoupMessage) msg = NULL;
+
+ /* create the GET data *with* the machine hash so we can later
+ * review the application ourselves */
+ uri = g_strdup_printf ("%s/moderate/%s/%s",
+ priv->review_server,
+ priv->user_hash,
+ gs_plugin_get_locale (plugin));
+ msg = soup_message_new (SOUP_METHOD_GET, uri);
+ status_code = soup_session_send_message (gs_plugin_get_soup_session (plugin), msg);
+ if (status_code != SOUP_STATUS_OK) {
+ if (!gs_plugin_odrs_parse_success (msg->response_body->data,
+ msg->response_body->length,
+ error))
+ return FALSE;
+ /* not sure what to do here */
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED,
+ "status code invalid");
+ gs_utils_error_add_origin_id (error, priv->cached_origin);
+ return FALSE;
+ }
+ g_debug ("odrs returned: %s", msg->response_body->data);
+ reviews = gs_plugin_odrs_parse_reviews (plugin,
+ msg->response_body->data,
+ msg->response_body->length,
+ error);
+ if (reviews == NULL)
+ return FALSE;
+
+ /* look at all the reviews; faking application objects */
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) g_object_unref);
+ for (i = 0; i < reviews->len; i++) {
+ GsApp *app;
+ AsReview *review;
+ const gchar *app_id;
+
+ /* same app? */
+ review = g_ptr_array_index (reviews, i);
+ app_id = as_review_get_metadata_item (review, "app_id");
+ app = g_hash_table_lookup (hash, app_id);
+ if (app == NULL) {
+ app = gs_plugin_create_app_dummy (app_id);
+ gs_app_list_add (list, app);
+ g_hash_table_insert (hash, g_strdup (app_id), app);
+ }
+ gs_app_add_review (app, review);
+ }
+
+ return TRUE;
+}
diff --git a/plugins/odrs/meson.build b/plugins/odrs/meson.build
new file mode 100644
index 0000000..254530d
--- /dev/null
+++ b/plugins/odrs/meson.build
@@ -0,0 +1,27 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginOdrs"']
+
+shared_module(
+ 'gs_plugin_odrs',
+ sources : 'gs-plugin-odrs.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+metainfo = 'org.gnome.Software.Plugin.Odrs.metainfo.xml'
+
+i18n.merge_file(
+ input: metainfo + '.in',
+ output: metainfo,
+ type: 'xml',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'metainfo')
+)
diff --git a/plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in b/plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in
new file mode 100644
index 0000000..833f69c
--- /dev/null
+++ b/plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2013-2016 Richard Hughes <richard@hughsie.com> -->
+<component type="addon">
+ <id>org.gnome.Software.Plugin.Odrs</id>
+ <extends>org.gnome.Software.desktop</extends>
+ <name>Open Desktop Ratings Support</name>
+ <summary>ODRS is a service providing user reviews of applications</summary>
+ <url type="homepage">https://odrs.gnome.org/</url>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <update_contact>richard_at_hughsie.com</update_contact>
+</component>
diff --git a/plugins/packagekit/gs-markdown.c b/plugins/packagekit/gs-markdown.c
new file mode 100644
index 0000000..b7be06b
--- /dev/null
+++ b/plugins/packagekit/gs-markdown.c
@@ -0,0 +1,856 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib.h>
+
+#include "gs-markdown.h"
+
+/*******************************************************************************
+ *
+ * This is a simple Markdown parser.
+ * It can output to Pango, HTML or plain text. The following limitations are
+ * already known, and properly deliberate:
+ *
+ * - No code section support
+ * - No ordered list support
+ * - No blockquote section support
+ * - No image support
+ * - No links or email support
+ * - No backslash escapes support
+ * - No HTML escaping support
+ * - Auto-escapes certain word patterns, like http://
+ *
+ * It does support the rest of the standard pretty well, although it's not
+ * been run against any conformance tests. The parsing is single pass, with
+ * a simple enumerated interpretor mode and a single line back-memory.
+ *
+ ******************************************************************************/
+
+typedef enum {
+ GS_MARKDOWN_MODE_BLANK,
+ GS_MARKDOWN_MODE_RULE,
+ GS_MARKDOWN_MODE_BULLETT,
+ GS_MARKDOWN_MODE_PARA,
+ GS_MARKDOWN_MODE_H1,
+ GS_MARKDOWN_MODE_H2,
+ GS_MARKDOWN_MODE_UNKNOWN
+} GsMarkdownMode;
+
+typedef struct {
+ const gchar *em_start;
+ const gchar *em_end;
+ const gchar *strong_start;
+ const gchar *strong_end;
+ const gchar *code_start;
+ const gchar *code_end;
+ const gchar *h1_start;
+ const gchar *h1_end;
+ const gchar *h2_start;
+ const gchar *h2_end;
+ const gchar *bullet_start;
+ const gchar *bullet_end;
+ const gchar *rule;
+} GsMarkdownTags;
+
+struct _GsMarkdown {
+ GObject parent_instance;
+
+ GsMarkdownMode mode;
+ GsMarkdownTags tags;
+ GsMarkdownOutputKind output;
+ gint max_lines;
+ gint line_count;
+ gboolean smart_quoting;
+ gboolean escape;
+ gboolean autocode;
+ gboolean autolinkify;
+ GString *pending;
+ GString *processed;
+};
+
+G_DEFINE_TYPE (GsMarkdown, gs_markdown, G_TYPE_OBJECT)
+
+/*
+ * gs_markdown_to_text_line_is_rule:
+ *
+ * Horizontal rules are created by placing three or more hyphens, asterisks,
+ * or underscores on a line by themselves.
+ * You may use spaces between the hyphens or asterisks.
+ **/
+static gboolean
+gs_markdown_to_text_line_is_rule (const gchar *line)
+{
+ guint i;
+ guint len;
+ guint count = 0;
+ g_autofree gchar *copy = NULL;
+
+ len = (guint) strlen (line);
+ if (len == 0)
+ return FALSE;
+
+ /* replace non-rule chars with ~ */
+ copy = g_strdup (line);
+ g_strcanon (copy, "-*_ ", '~');
+ for (i = 0; i < len; i++) {
+ if (copy[i] == '~')
+ return FALSE;
+ if (copy[i] != ' ')
+ count++;
+ }
+
+ /* if we matched, return true */
+ if (count >= 3)
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+gs_markdown_to_text_line_is_bullet (const gchar *line)
+{
+ return (g_str_has_prefix (line, "- ") ||
+ g_str_has_prefix (line, "* ") ||
+ g_str_has_prefix (line, "+ ") ||
+ g_str_has_prefix (line, " - ") ||
+ g_str_has_prefix (line, " * ") ||
+ g_str_has_prefix (line, " + "));
+}
+
+static gboolean
+gs_markdown_to_text_line_is_header1 (const gchar *line)
+{
+ return g_str_has_prefix (line, "# ");
+}
+
+static gboolean
+gs_markdown_to_text_line_is_header2 (const gchar *line)
+{
+ return g_str_has_prefix (line, "## ");
+}
+
+static gboolean
+gs_markdown_to_text_line_is_header1_type2 (const gchar *line)
+{
+ return g_str_has_prefix (line, "===");
+}
+
+static gboolean
+gs_markdown_to_text_line_is_header2_type2 (const gchar *line)
+{
+ return g_str_has_prefix (line, "---");
+}
+
+#if 0
+static gboolean
+gs_markdown_to_text_line_is_code (const gchar *line)
+{
+ return (g_str_has_prefix (line, " ") ||
+ g_str_has_prefix (line, "\t"));
+}
+
+static gboolean
+gs_markdown_to_text_line_is_blockquote (const gchar *line)
+{
+ return (g_str_has_prefix (line, "> "));
+}
+#endif
+
+static gboolean
+gs_markdown_to_text_line_is_blank (const gchar *line)
+{
+ guint i;
+ guint len;
+
+ /* a line with no characters is blank by definition */
+ len = (guint) strlen (line);
+ if (len == 0)
+ return TRUE;
+
+ /* find if there are only space chars */
+ for (i = 0; i < len; i++) {
+ if (line[i] != ' ' && line[i] != '\t')
+ return FALSE;
+ }
+
+ /* if we matched, return true */
+ return TRUE;
+}
+
+static gchar *
+gs_markdown_replace (const gchar *haystack,
+ const gchar *needle,
+ const gchar *replace)
+{
+ g_auto(GStrv) split = NULL;
+ split = g_strsplit (haystack, needle, -1);
+ return g_strjoinv (replace, split);
+}
+
+static gchar *
+gs_markdown_strstr_spaces (const gchar *haystack, const gchar *needle)
+{
+ gchar *found;
+ const gchar *haystack_new = haystack;
+
+retry:
+ /* don't find if surrounded by spaces */
+ found = strstr (haystack_new, needle);
+ if (found == NULL)
+ return NULL;
+
+ /* start of the string, always valid */
+ if (found == haystack)
+ return found;
+
+ /* end of the string, always valid */
+ if (*(found-1) == ' ' && *(found+1) == ' ') {
+ haystack_new = found+1;
+ goto retry;
+ }
+ return found;
+}
+
+static gchar *
+gs_markdown_to_text_line_formatter (const gchar *line,
+ const gchar *formatter,
+ const gchar *left,
+ const gchar *right)
+{
+ guint len;
+ gchar *str1;
+ gchar *str2;
+ gchar *start = NULL;
+ gchar *middle = NULL;
+ gchar *end = NULL;
+ g_autofree gchar *copy = NULL;
+
+ /* needed to know for shifts */
+ len = (guint) strlen (formatter);
+ if (len == 0)
+ return NULL;
+
+ /* find sections */
+ copy = g_strdup (line);
+ str1 = gs_markdown_strstr_spaces (copy, formatter);
+ if (str1 != NULL) {
+ *str1 = '\0';
+ str2 = gs_markdown_strstr_spaces (str1+len, formatter);
+ if (str2 != NULL) {
+ *str2 = '\0';
+ middle = str1 + len;
+ start = copy;
+ end = str2 + len;
+ }
+ }
+
+ /* if we found, replace and keep looking for the same string */
+ if (start != NULL && middle != NULL && end != NULL) {
+ g_autofree gchar *temp = NULL;
+ temp = g_strdup_printf ("%s%s%s%s%s", start, left, middle, right, end);
+ /* recursive */
+ return gs_markdown_to_text_line_formatter (temp, formatter, left, right);
+ }
+
+ /* not found, keep return as-is */
+ return g_strdup (line);
+}
+
+static gchar *
+gs_markdown_to_text_line_format_sections (GsMarkdown *self, const gchar *line)
+{
+ gchar *data = g_strdup (line);
+ gchar *temp;
+
+ /* bold1 */
+ temp = data;
+ data = gs_markdown_to_text_line_formatter (temp, "**",
+ self->tags.strong_start,
+ self->tags.strong_end);
+ g_free (temp);
+
+ /* bold2 */
+ temp = data;
+ data = gs_markdown_to_text_line_formatter (temp, "__",
+ self->tags.strong_start,
+ self->tags.strong_end);
+ g_free (temp);
+
+ /* italic1 */
+ temp = data;
+ data = gs_markdown_to_text_line_formatter (temp, "*",
+ self->tags.em_start,
+ self->tags.em_end);
+ g_free (temp);
+
+ /* italic2 */
+ temp = data;
+ data = gs_markdown_to_text_line_formatter (temp, "_",
+ self->tags.em_start,
+ self->tags.em_end);
+ g_free (temp);
+
+ /* em-dash */
+ temp = data;
+ data = gs_markdown_replace (temp, " -- ", " — ");
+ g_free (temp);
+
+ /* smart quoting */
+ if (self->smart_quoting) {
+ temp = data;
+ data = gs_markdown_to_text_line_formatter (temp, "\"", "“", "”");
+ g_free (temp);
+
+ temp = data;
+ data = gs_markdown_to_text_line_formatter (temp, "'", "‘", "’");
+ g_free (temp);
+ }
+
+ return data;
+}
+
+static gchar *
+gs_markdown_to_text_line_format (GsMarkdown *self, const gchar *line)
+{
+ GString *string;
+ gboolean mode = FALSE;
+ gchar *text;
+ guint i;
+ g_auto(GStrv) codes = NULL;
+
+ /* optimise the trivial case where we don't have any code tags */
+ text = strstr (line, "`");
+ if (text == NULL)
+ return gs_markdown_to_text_line_format_sections (self, line);
+
+ /* we want to parse the code sections without formatting */
+ codes = g_strsplit (line, "`", -1);
+ string = g_string_new ("");
+ for (i = 0; codes[i] != NULL; i++) {
+ if (!mode) {
+ text = gs_markdown_to_text_line_format_sections (self, codes[i]);
+ g_string_append (string, text);
+ g_free (text);
+ mode = TRUE;
+ } else {
+ /* just append without formatting */
+ g_string_append (string, self->tags.code_start);
+ g_string_append (string, codes[i]);
+ g_string_append (string, self->tags.code_end);
+ mode = FALSE;
+ }
+ }
+ return g_string_free (string, FALSE);
+}
+
+static gboolean
+gs_markdown_add_pending (GsMarkdown *self, const gchar *line)
+{
+ g_autofree gchar *copy = NULL;
+
+ /* would put us over the limit */
+ if (self->max_lines > 0 && self->line_count >= self->max_lines)
+ return FALSE;
+
+ copy = g_strdup (line);
+
+ /* strip leading and trailing spaces */
+ g_strstrip (copy);
+
+ /* append */
+ g_string_append_printf (self->pending, "%s ", copy);
+ return TRUE;
+}
+
+static gboolean
+gs_markdown_add_pending_header (GsMarkdown *self, const gchar *line)
+{
+ g_autofree gchar *copy = NULL;
+
+ /* strip trailing # */
+ copy = g_strdup (line);
+ g_strdelimit (copy, "#", ' ');
+ return gs_markdown_add_pending (self, copy);
+}
+
+static guint
+gs_markdown_count_chars_in_word (const gchar *text, gchar find)
+{
+ guint i;
+ guint len;
+ guint count = 0;
+
+ /* get length */
+ len = (guint) strlen (text);
+ if (len == 0)
+ return 0;
+
+ /* find matching chars */
+ for (i = 0; i < len; i++) {
+ if (text[i] == find)
+ count++;
+ }
+ return count;
+}
+
+static gboolean
+gs_markdown_word_is_code (const gchar *text)
+{
+ /* already code */
+ if (g_str_has_prefix (text, "`"))
+ return FALSE;
+ if (g_str_has_suffix (text, "`"))
+ return FALSE;
+
+ /* paths */
+ if (g_str_has_prefix (text, "/"))
+ return TRUE;
+
+ /* bugzillas */
+ if (g_str_has_prefix (text, "#"))
+ return TRUE;
+
+ /* patch files */
+ if (g_strrstr (text, ".patch") != NULL)
+ return TRUE;
+ if (g_strrstr (text, ".diff") != NULL)
+ return TRUE;
+
+ /* function names */
+ if (g_strrstr (text, "()") != NULL)
+ return TRUE;
+
+ /* email addresses */
+ if (g_strrstr (text, "@") != NULL)
+ return TRUE;
+
+ /* compiler defines */
+ if (text[0] != '_' &&
+ gs_markdown_count_chars_in_word (text, '_') > 1)
+ return TRUE;
+
+ /* nothing special */
+ return FALSE;
+}
+
+static gchar *
+gs_markdown_word_auto_format_code (const gchar *text)
+{
+ guint i;
+ gchar *temp;
+ gboolean ret = FALSE;
+ g_auto(GStrv) words = NULL;
+
+ /* split sentence up with space */
+ words = g_strsplit (text, " ", -1);
+
+ /* search each word */
+ for (i = 0; words[i] != NULL; i++) {
+ if (gs_markdown_word_is_code (words[i])) {
+ temp = g_strdup_printf ("`%s`", words[i]);
+ g_free (words[i]);
+ words[i] = temp;
+ ret = TRUE;
+ }
+ }
+
+ /* no replacements, so just return a copy */
+ if (!ret)
+ return g_strdup (text);
+
+ /* join the array back into a string */
+ return g_strjoinv (" ", words);
+}
+
+static gboolean
+gs_markdown_word_is_url (const gchar *text)
+{
+ if (g_str_has_prefix (text, "http://"))
+ return TRUE;
+ if (g_str_has_prefix (text, "https://"))
+ return TRUE;
+ if (g_str_has_prefix (text, "ftp://"))
+ return TRUE;
+ return FALSE;
+}
+
+static gchar *
+gs_markdown_word_auto_format_urls (const gchar *text)
+{
+ guint i;
+ gchar *temp;
+ gboolean ret = FALSE;
+ g_auto(GStrv) words = NULL;
+
+ /* split sentence up with space */
+ words = g_strsplit (text, " ", -1);
+
+ /* search each word */
+ for (i = 0; words[i] != NULL; i++) {
+ if (gs_markdown_word_is_url (words[i])) {
+ temp = g_strdup_printf ("<a href=\"%s\">%s</a>",
+ words[i], words[i]);
+ g_free (words[i]);
+ words[i] = temp;
+ ret = TRUE;
+ }
+ }
+
+ /* no replacements, so just return a copy */
+ if (!ret)
+ return g_strdup (text);
+
+ /* join the array back into a string */
+ return g_strjoinv (" ", words);
+}
+
+static void
+gs_markdown_flush_pending (GsMarkdown *self)
+{
+ g_autofree gchar *copy = NULL;
+ g_autofree gchar *temp = NULL;
+
+ /* no data yet */
+ if (self->mode == GS_MARKDOWN_MODE_UNKNOWN)
+ return;
+
+ /* remove trailing spaces */
+ while (g_str_has_suffix (self->pending->str, " "))
+ g_string_set_size (self->pending, self->pending->len - 1);
+
+ /* pango requires escaping */
+ copy = g_strdup (self->pending->str);
+ if (!self->escape && self->output == GS_MARKDOWN_OUTPUT_PANGO) {
+ g_strdelimit (copy, "<", '(');
+ g_strdelimit (copy, ">", ')');
+ g_strdelimit (copy, "&", '+');
+ }
+
+ /* check words for code */
+ if (self->autocode &&
+ (self->mode == GS_MARKDOWN_MODE_PARA ||
+ self->mode == GS_MARKDOWN_MODE_BULLETT)) {
+ temp = gs_markdown_word_auto_format_code (copy);
+ g_free (copy);
+ copy = temp;
+ }
+
+ /* escape */
+ if (self->escape) {
+ temp = g_markup_escape_text (copy, -1);
+ g_free (copy);
+ copy = temp;
+ }
+
+ /* check words for URLS */
+ if (self->autolinkify &&
+ self->output == GS_MARKDOWN_OUTPUT_PANGO &&
+ (self->mode == GS_MARKDOWN_MODE_PARA ||
+ self->mode == GS_MARKDOWN_MODE_BULLETT)) {
+ temp = gs_markdown_word_auto_format_urls (copy);
+ g_free (copy);
+ copy = temp;
+ }
+
+ /* do formatting */
+ temp = gs_markdown_to_text_line_format (self, copy);
+ if (self->mode == GS_MARKDOWN_MODE_BULLETT) {
+ g_string_append_printf (self->processed, "%s%s%s\n",
+ self->tags.bullet_start,
+ temp,
+ self->tags.bullet_end);
+ self->line_count++;
+ } else if (self->mode == GS_MARKDOWN_MODE_H1) {
+ g_string_append_printf (self->processed, "%s%s%s\n",
+ self->tags.h1_start,
+ temp,
+ self->tags.h1_end);
+ } else if (self->mode == GS_MARKDOWN_MODE_H2) {
+ g_string_append_printf (self->processed, "%s%s%s\n",
+ self->tags.h2_start,
+ temp,
+ self->tags.h2_end);
+ } else if (self->mode == GS_MARKDOWN_MODE_PARA ||
+ self->mode == GS_MARKDOWN_MODE_RULE) {
+ g_string_append_printf (self->processed, "%s\n", temp);
+ self->line_count++;
+ }
+
+ /* clear */
+ g_string_truncate (self->pending, 0);
+}
+
+static gboolean
+gs_markdown_to_text_line_process (GsMarkdown *self, const gchar *line)
+{
+ gboolean ret;
+
+ /* blank */
+ ret = gs_markdown_to_text_line_is_blank (line);
+ if (ret) {
+ gs_markdown_flush_pending (self);
+ /* a new line after a list is the end of list, not a gap */
+ if (self->mode != GS_MARKDOWN_MODE_BULLETT)
+ ret = gs_markdown_add_pending (self, "\n");
+ self->mode = GS_MARKDOWN_MODE_BLANK;
+ goto out;
+ }
+
+ /* header1_type2 */
+ ret = gs_markdown_to_text_line_is_header1_type2 (line);
+ if (ret) {
+ if (self->mode == GS_MARKDOWN_MODE_PARA)
+ self->mode = GS_MARKDOWN_MODE_H1;
+ goto out;
+ }
+
+ /* header2_type2 */
+ ret = gs_markdown_to_text_line_is_header2_type2 (line);
+ if (ret) {
+ if (self->mode == GS_MARKDOWN_MODE_PARA)
+ self->mode = GS_MARKDOWN_MODE_H2;
+ goto out;
+ }
+
+ /* rule */
+ ret = gs_markdown_to_text_line_is_rule (line);
+ if (ret) {
+ gs_markdown_flush_pending (self);
+ self->mode = GS_MARKDOWN_MODE_RULE;
+ ret = gs_markdown_add_pending (self, self->tags.rule);
+ goto out;
+ }
+
+ /* bullet */
+ ret = gs_markdown_to_text_line_is_bullet (line);
+ if (ret) {
+ gs_markdown_flush_pending (self);
+ self->mode = GS_MARKDOWN_MODE_BULLETT;
+ ret = gs_markdown_add_pending (self, &line[2]);
+ goto out;
+ }
+
+ /* header1 */
+ ret = gs_markdown_to_text_line_is_header1 (line);
+ if (ret) {
+ gs_markdown_flush_pending (self);
+ self->mode = GS_MARKDOWN_MODE_H1;
+ ret = gs_markdown_add_pending_header (self, &line[2]);
+ goto out;
+ }
+
+ /* header2 */
+ ret = gs_markdown_to_text_line_is_header2 (line);
+ if (ret) {
+ gs_markdown_flush_pending (self);
+ self->mode = GS_MARKDOWN_MODE_H2;
+ ret = gs_markdown_add_pending_header (self, &line[3]);
+ goto out;
+ }
+
+ /* paragraph */
+ if (self->mode == GS_MARKDOWN_MODE_BLANK ||
+ self->mode == GS_MARKDOWN_MODE_UNKNOWN) {
+ gs_markdown_flush_pending (self);
+ self->mode = GS_MARKDOWN_MODE_PARA;
+ }
+
+ /* add to pending */
+ ret = gs_markdown_add_pending (self, line);
+out:
+ /* if we failed to add, we don't know the mode */
+ if (!ret)
+ self->mode = GS_MARKDOWN_MODE_UNKNOWN;
+ return ret;
+}
+
+static void
+gs_markdown_set_output_kind (GsMarkdown *self, GsMarkdownOutputKind output)
+{
+ g_return_if_fail (GS_IS_MARKDOWN (self));
+
+ self->output = output;
+ switch (output) {
+ case GS_MARKDOWN_OUTPUT_PANGO:
+ /* PangoMarkup */
+ self->tags.em_start = "<i>";
+ self->tags.em_end = "</i>";
+ self->tags.strong_start = "<b>";
+ self->tags.strong_end = "</b>";
+ self->tags.code_start = "<tt>";
+ self->tags.code_end = "</tt>";
+ self->tags.h1_start = "<big>";
+ self->tags.h1_end = "</big>";
+ self->tags.h2_start = "<b>";
+ self->tags.h2_end = "</b>";
+ self->tags.bullet_start = "• ";
+ self->tags.bullet_end = "";
+ self->tags.rule = "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯\n";
+ self->escape = TRUE;
+ self->autolinkify = TRUE;
+ break;
+ case GS_MARKDOWN_OUTPUT_HTML:
+ /* XHTML */
+ self->tags.em_start = "<em>";
+ self->tags.em_end = "<em>";
+ self->tags.strong_start = "<strong>";
+ self->tags.strong_end = "</strong>";
+ self->tags.code_start = "<code>";
+ self->tags.code_end = "</code>";
+ self->tags.h1_start = "<h1>";
+ self->tags.h1_end = "</h1>";
+ self->tags.h2_start = "<h2>";
+ self->tags.h2_end = "</h2>";
+ self->tags.bullet_start = "<li>";
+ self->tags.bullet_end = "</li>";
+ self->tags.rule = "<hr>";
+ self->escape = TRUE;
+ self->autolinkify = TRUE;
+ break;
+ case GS_MARKDOWN_OUTPUT_TEXT:
+ /* plain text */
+ self->tags.em_start = "";
+ self->tags.em_end = "";
+ self->tags.strong_start = "";
+ self->tags.strong_end = "";
+ self->tags.code_start = "";
+ self->tags.code_end = "";
+ self->tags.h1_start = "[";
+ self->tags.h1_end = "]";
+ self->tags.h2_start = "-";
+ self->tags.h2_end = "-";
+ self->tags.bullet_start = "* ";
+ self->tags.bullet_end = "";
+ self->tags.rule = " ----- \n";
+ self->escape = FALSE;
+ self->autolinkify = FALSE;
+ break;
+ default:
+ g_warning ("unknown output enum");
+ break;
+ }
+}
+
+void
+gs_markdown_set_max_lines (GsMarkdown *self, gint max_lines)
+{
+ g_return_if_fail (GS_IS_MARKDOWN (self));
+ self->max_lines = max_lines;
+}
+
+void
+gs_markdown_set_smart_quoting (GsMarkdown *self, gboolean smart_quoting)
+{
+ g_return_if_fail (GS_IS_MARKDOWN (self));
+ self->smart_quoting = smart_quoting;
+}
+
+void
+gs_markdown_set_escape (GsMarkdown *self, gboolean escape)
+{
+ g_return_if_fail (GS_IS_MARKDOWN (self));
+ self->escape = escape;
+}
+
+void
+gs_markdown_set_autocode (GsMarkdown *self, gboolean autocode)
+{
+ g_return_if_fail (GS_IS_MARKDOWN (self));
+ self->autocode = autocode;
+}
+
+void
+gs_markdown_set_autolinkify (GsMarkdown *self, gboolean autolinkify)
+{
+ g_return_if_fail (GS_IS_MARKDOWN (self));
+ self->autolinkify = autolinkify;
+}
+
+gchar *
+gs_markdown_parse (GsMarkdown *self, const gchar *markdown)
+{
+ gboolean ret;
+ gchar *temp;
+ guint i;
+ guint len;
+ g_auto(GStrv) lines = NULL;
+
+ g_return_val_if_fail (GS_IS_MARKDOWN (self), NULL);
+
+ /* process */
+ self->mode = GS_MARKDOWN_MODE_UNKNOWN;
+ self->line_count = 0;
+ g_string_truncate (self->pending, 0);
+ g_string_truncate (self->processed, 0);
+ lines = g_strsplit (markdown, "\n", -1);
+ len = g_strv_length (lines);
+
+ /* process each line */
+ for (i = 0; i < len; i++) {
+ ret = gs_markdown_to_text_line_process (self, lines[i]);
+ if (!ret)
+ break;
+ }
+ gs_markdown_flush_pending (self);
+
+ /* remove trailing \n */
+ while (g_str_has_suffix (self->processed->str, "\n"))
+ g_string_set_size (self->processed, self->processed->len - 1);
+
+ /* get a copy */
+ temp = g_strdup (self->processed->str);
+ g_string_truncate (self->pending, 0);
+ g_string_truncate (self->processed, 0);
+ return temp;
+}
+
+static void
+gs_markdown_finalize (GObject *object)
+{
+ GsMarkdown *self;
+
+ g_return_if_fail (GS_IS_MARKDOWN (object));
+
+ self = GS_MARKDOWN (object);
+
+ g_string_free (self->pending, TRUE);
+ g_string_free (self->processed, TRUE);
+
+ G_OBJECT_CLASS (gs_markdown_parent_class)->finalize (object);
+}
+
+static void
+gs_markdown_class_init (GsMarkdownClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_markdown_finalize;
+}
+
+static void
+gs_markdown_init (GsMarkdown *self)
+{
+ self->mode = GS_MARKDOWN_MODE_UNKNOWN;
+ self->pending = g_string_new ("");
+ self->processed = g_string_new ("");
+ self->max_lines = -1;
+ self->smart_quoting = FALSE;
+ self->escape = FALSE;
+ self->autocode = FALSE;
+}
+
+GsMarkdown *
+gs_markdown_new (GsMarkdownOutputKind output)
+{
+ GsMarkdown *self;
+ self = g_object_new (GS_TYPE_MARKDOWN, NULL);
+ gs_markdown_set_output_kind (self, output);
+ return GS_MARKDOWN (self);
+}
diff --git a/plugins/packagekit/gs-markdown.h b/plugins/packagekit/gs-markdown.h
new file mode 100644
index 0000000..51e6233
--- /dev/null
+++ b/plugins/packagekit/gs-markdown.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2008-2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_MARKDOWN (gs_markdown_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsMarkdown, gs_markdown, GS, MARKDOWN, GObject)
+
+typedef enum {
+ GS_MARKDOWN_OUTPUT_TEXT,
+ GS_MARKDOWN_OUTPUT_PANGO,
+ GS_MARKDOWN_OUTPUT_HTML,
+ GS_MARKDOWN_OUTPUT_LAST
+} GsMarkdownOutputKind;
+
+GsMarkdown *gs_markdown_new (GsMarkdownOutputKind output);
+void gs_markdown_set_max_lines (GsMarkdown *self,
+ gint max_lines);
+void gs_markdown_set_smart_quoting (GsMarkdown *self,
+ gboolean smart_quoting);
+void gs_markdown_set_escape (GsMarkdown *self,
+ gboolean escape);
+void gs_markdown_set_autocode (GsMarkdown *self,
+ gboolean autocode);
+void gs_markdown_set_autolinkify (GsMarkdown *self,
+ gboolean autolinkify);
+gchar *gs_markdown_parse (GsMarkdown *self,
+ const gchar *text);
+
+G_END_DECLS
diff --git a/plugins/packagekit/gs-packagekit-helper.c b/plugins/packagekit/gs-packagekit-helper.c
new file mode 100644
index 0000000..3afadcc
--- /dev/null
+++ b/plugins/packagekit/gs-packagekit-helper.c
@@ -0,0 +1,131 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gs-packagekit-helper.h"
+#include "packagekit-common.h"
+
+struct _GsPackagekitHelper {
+ GObject parent_instance;
+ GHashTable *apps;
+ GsApp *progress_app;
+ GsPlugin *plugin;
+};
+
+G_DEFINE_TYPE (GsPackagekitHelper, gs_packagekit_helper, G_TYPE_OBJECT)
+
+void
+gs_packagekit_helper_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+ GsPackagekitHelper *self = (GsPackagekitHelper *) user_data;
+ GsPlugin *plugin = gs_packagekit_helper_get_plugin (self);
+ const gchar *package_id = pk_progress_get_package_id (progress);
+ GsApp *app = NULL;
+
+ /* optional */
+ if (self->progress_app != NULL)
+ app = self->progress_app;
+ else if (package_id != NULL)
+ app = gs_packagekit_helper_get_app_by_id (self, package_id);
+
+ if (type == PK_PROGRESS_TYPE_STATUS) {
+ PkStatusEnum status = pk_progress_get_status (progress);
+ GsPluginStatus plugin_status = packagekit_status_enum_to_plugin_status (status);
+ if (plugin_status != GS_PLUGIN_STATUS_UNKNOWN)
+ gs_plugin_status_update (plugin, app, plugin_status);
+ } else if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
+ gint percentage = pk_progress_get_percentage (progress);
+ if (app != NULL && percentage >= 0 && percentage <= 100)
+ gs_app_set_progress (app, (guint) percentage);
+ }
+
+ /* Only go from TRUE to FALSE - it doesn't make sense for a package
+ * install to become uncancellable later on */
+ if (app != NULL && gs_app_get_allow_cancel (app))
+ gs_app_set_allow_cancel (app, pk_progress_get_allow_cancel (progress));
+}
+
+void
+gs_packagekit_helper_add_app (GsPackagekitHelper *self, GsApp *app)
+{
+ GPtrArray *source_ids = gs_app_get_source_ids (app);
+
+ g_return_if_fail (GS_IS_PACKAGEKIT_HELPER (self));
+ g_return_if_fail (GS_IS_APP (app));
+
+ for (guint i = 0; i < source_ids->len; i++) {
+ const gchar *source_id = g_ptr_array_index (source_ids, i);
+ g_hash_table_insert (self->apps,
+ g_strdup (source_id),
+ g_object_ref (app));
+ }
+}
+
+void
+gs_packagekit_helper_set_progress_app (GsPackagekitHelper *self, GsApp *progress_app)
+{
+ g_set_object (&self->progress_app, progress_app);
+}
+
+GsPlugin *
+gs_packagekit_helper_get_plugin (GsPackagekitHelper *self)
+{
+ g_return_val_if_fail (GS_IS_PACKAGEKIT_HELPER (self), NULL);
+ return self->plugin;
+}
+
+GsApp *
+gs_packagekit_helper_get_app_by_id (GsPackagekitHelper *self, const gchar *package_id)
+{
+ g_return_val_if_fail (GS_IS_PACKAGEKIT_HELPER (self), NULL);
+ g_return_val_if_fail (package_id != NULL, NULL);
+ return g_hash_table_lookup (self->apps, package_id);
+}
+
+static void
+gs_packagekit_helper_finalize (GObject *object)
+{
+ GsPackagekitHelper *self;
+
+ g_return_if_fail (GS_IS_PACKAGEKIT_HELPER (object));
+
+ self = GS_PACKAGEKIT_HELPER (object);
+
+ g_object_unref (self->plugin);
+ g_clear_object (&self->progress_app);
+ g_hash_table_unref (self->apps);
+
+ G_OBJECT_CLASS (gs_packagekit_helper_parent_class)->finalize (object);
+}
+
+static void
+gs_packagekit_helper_class_init (GsPackagekitHelperClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_packagekit_helper_finalize;
+}
+
+static void
+gs_packagekit_helper_init (GsPackagekitHelper *self)
+{
+ self->apps = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) g_object_unref);
+}
+
+GsPackagekitHelper *
+gs_packagekit_helper_new (GsPlugin *plugin)
+{
+ GsPackagekitHelper *self;
+ self = g_object_new (GS_TYPE_PACKAGEKIT_HELPER, NULL);
+ self->plugin = g_object_ref (plugin);
+ return GS_PACKAGEKIT_HELPER (self);
+}
diff --git a/plugins/packagekit/gs-packagekit-helper.h b/plugins/packagekit/gs-packagekit-helper.h
new file mode 100644
index 0000000..94a6ea1
--- /dev/null
+++ b/plugins/packagekit/gs-packagekit-helper.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+#include <gnome-software.h>
+#include <packagekit-glib2/packagekit.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PACKAGEKIT_HELPER (gs_packagekit_helper_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsPackagekitHelper, gs_packagekit_helper, GS, PACKAGEKIT_HELPER, GObject)
+
+GsPackagekitHelper *gs_packagekit_helper_new (GsPlugin *plugin);
+GsPlugin *gs_packagekit_helper_get_plugin (GsPackagekitHelper *self);
+void gs_packagekit_helper_add_app (GsPackagekitHelper *self,
+ GsApp *app);
+void gs_packagekit_helper_set_progress_app (GsPackagekitHelper *self,
+ GsApp *progress_app);
+GsApp *gs_packagekit_helper_get_app_by_id (GsPackagekitHelper *self,
+ const gchar *package_id);
+void gs_packagekit_helper_cb (PkProgress *progress,
+ PkProgressType type,
+ gpointer user_data);
+
+
+G_END_DECLS
diff --git a/plugins/packagekit/gs-plugin-packagekit-history.c b/plugins/packagekit/gs-plugin-packagekit-history.c
new file mode 100644
index 0000000..6175316
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-history.c
@@ -0,0 +1,261 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+
+#include <gnome-software.h>
+
+#include "packagekit-common.h"
+
+#define GS_PLUGIN_PACKAGEKIT_HISTORY_TIMEOUT 5000 /* ms */
+
+/*
+ * SECTION:
+ * This returns update history using the system PackageKit instance.
+ */
+
+struct GsPluginData {
+ GDBusConnection *connection;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ /* need pkgname */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refine");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (priv->connection != NULL)
+ g_object_unref (priv->connection);
+}
+
+static void
+gs_plugin_packagekit_refine_add_history (GsApp *app, GVariant *dict)
+{
+ const gchar *version;
+ gboolean ret;
+ guint64 timestamp;
+ PkInfoEnum info_enum;
+ g_autoptr(GsApp) history = NULL;
+
+ /* create new history item with same ID as parent */
+ history = gs_app_new (gs_app_get_id (app));
+ gs_app_set_kind (history, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_name (history, GS_APP_QUALITY_NORMAL, gs_app_get_name (app));
+
+ /* get the installed state */
+ ret = g_variant_lookup (dict, "info", "u", &info_enum);
+ g_assert (ret);
+ switch (info_enum) {
+ case PK_INFO_ENUM_INSTALLING:
+ gs_app_set_state (history, AS_APP_STATE_INSTALLED);
+ break;
+ case PK_INFO_ENUM_REMOVING:
+ gs_app_set_state (history, AS_APP_STATE_AVAILABLE);
+ break;
+ case PK_INFO_ENUM_UPDATING:
+ gs_app_set_state (history, AS_APP_STATE_UPDATABLE);
+ break;
+ default:
+ g_debug ("ignoring history kind: %s",
+ pk_info_enum_to_string (info_enum));
+ return;
+ }
+
+ /* set the history time and date */
+ ret = g_variant_lookup (dict, "timestamp", "t", &timestamp);
+ g_assert (ret);
+ gs_app_set_install_date (history, timestamp);
+
+ /* set the history version number */
+ ret = g_variant_lookup (dict, "version", "&s", &version);
+ g_assert (ret);
+ gs_app_set_version (history, version);
+
+ /* add the package to the main application */
+ gs_app_add_history (app, history);
+
+ /* use the last event as approximation of the package timestamp */
+ gs_app_set_install_date (app, timestamp);
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM,
+ cancellable,
+ error);
+ return priv->connection != NULL;
+}
+
+static gboolean
+gs_plugin_packagekit_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ gboolean ret;
+ guint j;
+ GsApp *app;
+ guint i = 0;
+ GVariantIter iter;
+ GVariant *value;
+ g_autofree const gchar **package_names = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GVariant) result = NULL;
+ g_autoptr(GVariant) tuple = NULL;
+
+ /* get an array of package names */
+ package_names = g_new0 (const gchar *, gs_app_list_length (list) + 1);
+ for (j = 0; j < gs_app_list_length (list); j++) {
+ app = gs_app_list_index (list, j);
+ package_names[i++] = gs_app_get_source_default (app);
+ }
+
+ g_debug ("getting history for %u packages", gs_app_list_length (list));
+ result = g_dbus_connection_call_sync (priv->connection,
+ "org.freedesktop.PackageKit",
+ "/org/freedesktop/PackageKit",
+ "org.freedesktop.PackageKit",
+ "GetPackageHistory",
+ g_variant_new ("(^asu)", package_names, 0),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ GS_PLUGIN_PACKAGEKIT_HISTORY_TIMEOUT,
+ cancellable,
+ &error_local);
+ if (result == NULL) {
+ if (g_error_matches (error_local,
+ G_DBUS_ERROR,
+ G_DBUS_ERROR_UNKNOWN_METHOD)) {
+ g_debug ("No history available as PackageKit is too old: %s",
+ error_local->message);
+
+ /* just set this to something non-zero so we don't keep
+ * trying to call GetPackageHistory */
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ gs_app_set_install_date (app, GS_APP_INSTALL_DATE_UNKNOWN);
+ }
+ } else if (g_error_matches (error_local,
+ G_IO_ERROR,
+ G_IO_ERROR_CANCELLED)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED,
+ "Failed to get history: %s",
+ error_local->message);
+ return FALSE;
+ } else if (g_error_matches (error_local,
+ G_IO_ERROR,
+ G_IO_ERROR_TIMED_OUT)) {
+ g_debug ("No history as PackageKit took too long: %s",
+ error_local->message);
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ gs_app_set_install_date (app, GS_APP_INSTALL_DATE_UNKNOWN);
+ }
+ }
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "Failed to get history: %s",
+ error_local->message);
+ return FALSE;
+ }
+
+ /* get any results */
+ tuple = g_variant_get_child_value (result, 0);
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ g_autoptr(GVariant) entries = NULL;
+ app = gs_app_list_index (list, i);
+ ret = g_variant_lookup (tuple,
+ gs_app_get_source_default (app),
+ "@aa{sv}",
+ &entries);
+ if (!ret) {
+ /* make up a fake entry as we know this package was at
+ * least installed at some point in time */
+ if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+ g_autoptr(GsApp) app_dummy = NULL;
+ app_dummy = gs_app_new (gs_app_get_id (app));
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_set_metadata (app_dummy, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_set_install_date (app_dummy, GS_APP_INSTALL_DATE_UNKNOWN);
+ gs_app_set_kind (app_dummy, AS_APP_KIND_GENERIC);
+ gs_app_set_state (app_dummy, AS_APP_STATE_INSTALLED);
+ gs_app_set_version (app_dummy, gs_app_get_version (app));
+ gs_app_add_history (app, app_dummy);
+ }
+ gs_app_set_install_date (app, GS_APP_INSTALL_DATE_UNKNOWN);
+ continue;
+ }
+
+ /* add history for application */
+ g_variant_iter_init (&iter, entries);
+ while ((value = g_variant_iter_next_value (&iter))) {
+ gs_plugin_packagekit_refine_add_history (app, value);
+ g_variant_unref (value);
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+ guint i;
+ GsApp *app;
+ GPtrArray *sources;
+ g_autoptr(GsAppList) packages = NULL;
+
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY) == 0)
+ return TRUE;
+
+ /* add any missing history data */
+ packages = gs_app_list_new ();
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ continue;
+ sources = gs_app_get_sources (app);
+ if (sources->len == 0)
+ continue;
+ if (gs_app_get_install_date (app) != 0)
+ continue;
+ gs_app_list_add (packages, app);
+ }
+ if (gs_app_list_length (packages) > 0) {
+ ret = gs_plugin_packagekit_refine (plugin,
+ packages,
+ cancellable,
+ error);
+ if (!ret)
+ return FALSE;
+ }
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-local.c b/plugins/packagekit/gs-plugin-packagekit-local.c
new file mode 100644
index 0000000..53b51ac
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-local.c
@@ -0,0 +1,271 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <packagekit-glib2/packagekit.h>
+#include <gnome-software.h>
+
+#include "packagekit-common.h"
+#include "gs-packagekit-helper.h"
+
+struct GsPluginData {
+ PkTask *task;
+ GMutex task_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->task_mutex);
+ priv->task = pk_task_new ();
+ pk_client_set_background (PK_CLIENT (priv->task), FALSE);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->task_mutex);
+ g_object_unref (priv->task);
+}
+
+static gboolean
+gs_plugin_packagekit_refresh_guess_app_id (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_auto(GStrv) files = NULL;
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+ g_autoptr(GString) basename_best = g_string_new (NULL);
+
+ /* get file list so we can work out ID */
+ files = g_strsplit (filename, "\t", -1);
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_get_files_local (PK_CLIENT (priv->task),
+ files,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_utils_error_add_origin_id (error, app);
+ return FALSE;
+ }
+ array = pk_results_get_files_array (results);
+ if (array->len == 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no files for %s", filename);
+ return FALSE;
+ }
+
+ /* find the smallest length desktop file, on the logic that
+ * ${app}.desktop is going to be better than ${app}-${action}.desktop */
+ for (guint i = 0; i < array->len; i++) {
+ PkFiles *item = g_ptr_array_index (array, i);
+ gchar **fns = pk_files_get_files (item);
+ for (guint j = 0; fns[j] != NULL; j++) {
+ if (g_str_has_prefix (fns[j], "/etc/yum.repos.d/") &&
+ g_str_has_suffix (fns[j], ".repo")) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_HAS_SOURCE);
+ }
+ if (g_str_has_prefix (fns[j], "/usr/share/applications/") &&
+ g_str_has_suffix (fns[j], ".desktop")) {
+ g_autofree gchar *basename = g_path_get_basename (fns[j]);
+ if (basename_best->len == 0 ||
+ strlen (basename) < basename_best->len)
+ g_string_assign (basename_best, basename);
+ }
+ }
+ }
+ if (basename_best->len > 0) {
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ gs_app_set_id (app, basename_best->str);
+ }
+
+ return TRUE;
+}
+
+static void
+add_quirks_from_package_name (GsApp *app, const gchar *package_name)
+{
+ /* these packages don't have a .repo file in their file lists, but
+ * instead install one through rpm scripts / cron job */
+ const gchar *packages_with_repos[] = {
+ "google-chrome-stable",
+ "google-earth-pro-stable",
+ "google-talkplugin",
+ NULL };
+
+ if (g_strv_contains (packages_with_repos, package_name))
+ gs_app_add_quirk (app, GS_APP_QUIRK_HAS_SOURCE);
+}
+
+static gboolean
+gs_plugin_packagekit_local_check_installed (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ PkBitfield filter;
+ const gchar *names[] = { gs_app_get_source_default (app), NULL };
+ g_autoptr(GPtrArray) packages = NULL;
+ g_autoptr(PkResults) results = NULL;
+
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST,
+ PK_FILTER_ENUM_ARCH,
+ PK_FILTER_ENUM_INSTALLED,
+ -1);
+ results = pk_client_resolve (PK_CLIENT (priv->task), filter, (gchar **) names,
+ cancellable, NULL, NULL, error);
+ if (results == NULL)
+ return FALSE;
+ packages = pk_results_get_package_array (results);
+ if (packages->len > 0) {
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ for (guint i = 0; i < packages->len; i++){
+ PkPackage *pkg = g_ptr_array_index (packages, i);
+ gs_app_add_source_id (app, pk_package_get_id (pkg));
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_file_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *package_id;
+ PkDetails *item;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ g_autofree gchar *content_type = NULL;
+ g_autofree gchar *filename = NULL;
+ g_autofree gchar *license_spdx = NULL;
+ g_auto(GStrv) files = NULL;
+ g_auto(GStrv) split = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+ g_autoptr(GsApp) app = NULL;
+ const gchar *mimetypes[] = {
+ "application/x-app-package",
+ "application/x-deb",
+ "application/vnd.debian.binary-package",
+ "application/x-redhat-package-manager",
+ "application/x-rpm",
+ NULL };
+
+ /* does this match any of the mimetypes we support */
+ content_type = gs_utils_get_content_type (file, cancellable, error);
+ if (content_type == NULL)
+ return FALSE;
+ if (!g_strv_contains (mimetypes, content_type))
+ return TRUE;
+
+ /* get details */
+ filename = g_file_get_path (file);
+ files = g_strsplit (filename, "\t", -1);
+ g_mutex_lock (&priv->task_mutex);
+ pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+ results = pk_client_get_details_local (PK_CLIENT (priv->task),
+ files,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error))
+ return FALSE;
+
+ /* get results */
+ array = pk_results_get_details_array (results);
+ if (array->len == 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no details for %s", filename);
+ return FALSE;
+ }
+ if (array->len > 1) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "too many details [%u] for %s",
+ array->len, filename);
+ return FALSE;
+ }
+
+ /* create application */
+ item = g_ptr_array_index (array, 0);
+ app = gs_app_new (NULL);
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ package_id = pk_details_get_package_id (item);
+ split = pk_package_id_split (package_id);
+ if (split == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "invalid package-id: %s", package_id);
+ return FALSE;
+ }
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, split[PK_PACKAGE_ID_NAME]);
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST,
+ pk_details_get_summary (item));
+ gs_app_set_version (app, split[PK_PACKAGE_ID_VERSION]);
+ gs_app_add_source (app, split[PK_PACKAGE_ID_NAME]);
+ gs_app_add_source_id (app, package_id);
+ gs_app_set_description (app, GS_APP_QUALITY_LOWEST,
+ pk_details_get_description (item));
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, pk_details_get_url (item));
+ gs_app_set_size_installed (app, pk_details_get_size (item));
+ gs_app_set_size_download (app, 0);
+ license_spdx = as_utils_license_to_spdx (pk_details_get_license (item));
+ gs_app_set_license (app, GS_APP_QUALITY_LOWEST, license_spdx);
+ add_quirks_from_package_name (app, split[PK_PACKAGE_ID_NAME]);
+
+ /* is already installed? */
+ if (!gs_plugin_packagekit_local_check_installed (plugin,
+ app,
+ cancellable,
+ error))
+ return FALSE;
+
+ /* look for a desktop file so we can use a valid application id */
+ if (!gs_plugin_packagekit_refresh_guess_app_id (plugin,
+ app,
+ filename,
+ cancellable,
+ error))
+ return FALSE;
+
+ gs_app_list_add (list, app);
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-offline.c b/plugins/packagekit/gs-plugin-packagekit-offline.c
new file mode 100644
index 0000000..7e15720
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-offline.c
@@ -0,0 +1,181 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+
+#include <gnome-software.h>
+
+#include "packagekit-common.h"
+
+/*
+ * SECTION:
+ * This adds historical updates to the application history.
+ *
+ * Note: when this is cleared by one user is is unavailable for all
+ * other users.
+ */
+
+static gboolean
+gs_plugin_packagekit_convert_error (GError **error,
+ PkErrorEnum error_enum,
+ const gchar *details)
+{
+ switch (error_enum) {
+ case PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED:
+ case PK_ERROR_ENUM_NO_CACHE:
+ case PK_ERROR_ENUM_NO_NETWORK:
+ case PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY:
+ case PK_ERROR_ENUM_CANNOT_FETCH_SOURCES:
+ case PK_ERROR_ENUM_UNFINISHED_TRANSACTION:
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NO_NETWORK,
+ details);
+ break;
+ case PK_ERROR_ENUM_BAD_GPG_SIGNATURE:
+ case PK_ERROR_ENUM_CANNOT_UPDATE_REPO_UNSIGNED:
+ case PK_ERROR_ENUM_GPG_FAILURE:
+ case PK_ERROR_ENUM_MISSING_GPG_SIGNATURE:
+ case PK_ERROR_ENUM_PACKAGE_CORRUPT:
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NO_SECURITY,
+ details);
+ break;
+ case PK_ERROR_ENUM_TRANSACTION_CANCELLED:
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED,
+ details);
+ break;
+ case PK_ERROR_ENUM_NO_PACKAGES_TO_UPDATE:
+ case PK_ERROR_ENUM_UPDATE_NOT_FOUND:
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ details);
+ break;
+ case PK_ERROR_ENUM_NO_SPACE_ON_DEVICE:
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NO_SPACE,
+ details);
+ break;
+ default:
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ details);
+ break;
+ }
+ return FALSE;
+}
+
+gboolean
+gs_plugin_add_updates_historical (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ guint64 mtime;
+ guint i;
+ g_autoptr(GPtrArray) package_array = NULL;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(PkResults) results = NULL;
+ PkExitEnum exit_code;
+
+ /* get the results */
+ results = pk_offline_get_results (&error_local);
+ if (results == NULL) {
+ /* was any offline update attempted */
+ if (g_error_matches (error_local,
+ PK_OFFLINE_ERROR,
+ PK_OFFLINE_ERROR_NO_DATA)) {
+ return TRUE;
+ }
+
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "Failed to get offline update results: %s",
+ error_local->message);
+ return FALSE;
+ }
+
+ /* get the mtime of the results */
+ mtime = pk_offline_get_results_mtime (error);
+ if (mtime == 0)
+ return FALSE;
+
+ /* only return results if successful */
+ exit_code = pk_results_get_exit_code (results);
+ if (exit_code != PK_EXIT_ENUM_SUCCESS) {
+ g_autoptr(PkError) error_code = NULL;
+
+ error_code = pk_results_get_error_code (results);
+ if (error_code == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Offline update failed without error_code set");
+ return FALSE;
+ }
+
+ return gs_plugin_packagekit_convert_error (error,
+ pk_error_get_code (error_code),
+ pk_error_get_details (error_code));
+ }
+
+ /* distro upgrade? */
+ if (pk_results_get_role (results) == PK_ROLE_ENUM_UPGRADE_SYSTEM) {
+ g_autoptr(GsApp) app = NULL;
+
+ app = gs_app_new (NULL);
+ gs_app_set_from_unique_id (app, "*/*/*/*/system/*");
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_install_date (app, mtime);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+
+ return TRUE;
+ }
+
+ /* get list of package-ids */
+ package_array = pk_results_get_package_array (results);
+ for (i = 0; i < package_array->len; i++) {
+ PkPackage *pkg = g_ptr_array_index (package_array, i);
+ const gchar *package_id;
+ g_autoptr(GsApp) app = NULL;
+ g_auto(GStrv) split = NULL;
+
+ app = gs_app_new (NULL);
+ package_id = pk_package_get_id (pkg);
+ split = g_strsplit (package_id, ";", 4);
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_add_source (app, split[0]);
+ gs_app_set_update_version (app, split[1]);
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_app_add_source_id (app, package_id);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_install_date (app, mtime);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-proxy.c b/plugins/packagekit/gs-plugin-packagekit-proxy.c
new file mode 100644
index 0000000..a5bbcc7
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-proxy.c
@@ -0,0 +1,316 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+#include <string.h>
+#include <gsettings-desktop-schemas/gdesktop-enums.h>
+#include <gnome-software.h>
+
+/*
+ * SECTION:
+ * Sets the session proxy on the system PackageKit instance
+ */
+
+struct GsPluginData {
+ PkControl *control;
+ GSettings *settings;
+ GSettings *settings_http;
+ GSettings *settings_https;
+ GSettings *settings_ftp;
+ GSettings *settings_socks;
+};
+
+static gchar *
+get_proxy_http (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ gboolean ret;
+ GString *string = NULL;
+ gint port;
+ GDesktopProxyMode proxy_mode;
+ g_autofree gchar *host = NULL;
+ g_autofree gchar *password = NULL;
+ g_autofree gchar *username = NULL;
+
+ proxy_mode = g_settings_get_enum (priv->settings, "mode");
+ if (proxy_mode != G_DESKTOP_PROXY_MODE_MANUAL)
+ return NULL;
+
+ host = g_settings_get_string (priv->settings_http, "host");
+ if (host == NULL)
+ return NULL;
+
+ port = g_settings_get_int (priv->settings_http, "port");
+
+ ret = g_settings_get_boolean (priv->settings_http,
+ "use-authentication");
+ if (ret) {
+ username = g_settings_get_string (priv->settings_http,
+ "authentication-user");
+ password = g_settings_get_string (priv->settings_http,
+ "authentication-password");
+ }
+
+ /* make PackageKit proxy string */
+ string = g_string_new ("");
+ if (username != NULL || password != NULL) {
+ if (username != NULL)
+ g_string_append_printf (string, "%s", username);
+ if (password != NULL)
+ g_string_append_printf (string, ":%s", password);
+ g_string_append (string, "@");
+ }
+ g_string_append (string, host);
+ if (port > 0)
+ g_string_append_printf (string, ":%i", port);
+ return g_string_free (string, FALSE);
+}
+
+static gchar *
+get_proxy_https (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GString *string = NULL;
+ gint port;
+ GDesktopProxyMode proxy_mode;
+ g_autofree gchar *host = NULL;
+
+ proxy_mode = g_settings_get_enum (priv->settings, "mode");
+ if (proxy_mode != G_DESKTOP_PROXY_MODE_MANUAL)
+ return NULL;
+
+ host = g_settings_get_string (priv->settings_https, "host");
+ if (host == NULL)
+ return NULL;
+ port = g_settings_get_int (priv->settings_https, "port");
+ if (port == 0)
+ return NULL;
+
+ /* make PackageKit proxy string */
+ string = g_string_new (host);
+ if (port > 0)
+ g_string_append_printf (string, ":%i", port);
+ return g_string_free (string, FALSE);
+}
+
+static gchar *
+get_proxy_ftp (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GString *string = NULL;
+ gint port;
+ GDesktopProxyMode proxy_mode;
+ g_autofree gchar *host = NULL;
+
+ proxy_mode = g_settings_get_enum (priv->settings, "mode");
+ if (proxy_mode != G_DESKTOP_PROXY_MODE_MANUAL)
+ return NULL;
+
+ host = g_settings_get_string (priv->settings_ftp, "host");
+ if (host == NULL)
+ return NULL;
+ port = g_settings_get_int (priv->settings_ftp, "port");
+ if (port == 0)
+ return NULL;
+
+ /* make PackageKit proxy string */
+ string = g_string_new (host);
+ if (port > 0)
+ g_string_append_printf (string, ":%i", port);
+ return g_string_free (string, FALSE);
+}
+
+static gchar *
+get_proxy_socks (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GString *string = NULL;
+ gint port;
+ GDesktopProxyMode proxy_mode;
+ g_autofree gchar *host = NULL;
+
+ proxy_mode = g_settings_get_enum (priv->settings, "mode");
+ if (proxy_mode != G_DESKTOP_PROXY_MODE_MANUAL)
+ return NULL;
+
+ host = g_settings_get_string (priv->settings_socks, "host");
+ if (host == NULL)
+ return NULL;
+ port = g_settings_get_int (priv->settings_socks, "port");
+ if (port == 0)
+ return NULL;
+
+ /* make PackageKit proxy string */
+ string = g_string_new (host);
+ if (port > 0)
+ g_string_append_printf (string, ":%i", port);
+ return g_string_free (string, FALSE);
+}
+
+static gchar *
+get_no_proxy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GString *string = NULL;
+ GDesktopProxyMode proxy_mode;
+ g_autofree gchar **hosts = NULL;
+ guint i;
+
+ proxy_mode = g_settings_get_enum (priv->settings, "mode");
+ if (proxy_mode != G_DESKTOP_PROXY_MODE_MANUAL)
+ return NULL;
+
+ hosts = g_settings_get_strv (priv->settings, "ignore-hosts");
+ if (hosts == NULL)
+ return NULL;
+
+ /* make PackageKit proxy string */
+ string = g_string_new ("");
+ for (i = 0; hosts[i] != NULL; i++) {
+ if (i == 0)
+ g_string_assign (string, hosts[i]);
+ else
+ g_string_append_printf (string, ",%s", hosts[i]);
+ g_free (hosts[i]);
+ }
+
+ return g_string_free (string, FALSE);
+}
+
+static gchar *
+get_pac (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GDesktopProxyMode proxy_mode;
+ gchar *url = NULL;
+
+ proxy_mode = g_settings_get_enum (priv->settings, "mode");
+ if (proxy_mode != G_DESKTOP_PROXY_MODE_AUTO)
+ return NULL;
+
+ url = g_settings_get_string (priv->settings, "autoconfig-url");
+ if (url == NULL)
+ return NULL;
+
+ return url;
+}
+
+static void
+set_proxy_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+ g_autoptr(GError) error = NULL;
+ if (!pk_control_set_proxy_finish (PK_CONTROL (object), res, &error)) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("failed to set proxies: %s", error->message);
+ }
+}
+
+static void
+reload_proxy_settings (GsPlugin *plugin, GCancellable *cancellable)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *proxy_http = NULL;
+ g_autofree gchar *proxy_https = NULL;
+ g_autofree gchar *proxy_ftp = NULL;
+ g_autofree gchar *proxy_socks = NULL;
+ g_autofree gchar *no_proxy = NULL;
+ g_autofree gchar *pac = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GPermission) permission = NULL;
+
+ /* only if we can achieve the action *without* an auth dialog */
+ permission = gs_utils_get_permission ("org.freedesktop.packagekit."
+ "system-network-proxy-configure",
+ cancellable, &error);
+ if (permission == NULL) {
+ g_debug ("not setting proxy as no permission: %s", error->message);
+ return;
+ }
+ if (!g_permission_get_allowed (permission)) {
+ g_debug ("not setting proxy as no auth requested");
+ return;
+ }
+
+ proxy_http = get_proxy_http (plugin);
+ proxy_https = get_proxy_https (plugin);
+ proxy_ftp = get_proxy_ftp (plugin);
+ proxy_socks = get_proxy_socks (plugin);
+ no_proxy = get_no_proxy (plugin);
+ pac = get_pac (plugin);
+
+ g_debug ("Setting proxies (http: %s, https: %s, ftp: %s, socks: %s, "
+ "no_proxy: %s, pac: %s)",
+ proxy_http, proxy_https, proxy_ftp, proxy_socks,
+ no_proxy, pac);
+
+ pk_control_set_proxy2_async (priv->control,
+ proxy_http,
+ proxy_https,
+ proxy_ftp,
+ proxy_socks,
+ no_proxy,
+ pac,
+ cancellable,
+ set_proxy_cb,
+ plugin);
+}
+
+static void
+gs_plugin_packagekit_proxy_changed_cb (GSettings *settings,
+ const gchar *key,
+ GsPlugin *plugin)
+{
+ if (!gs_plugin_get_enabled (plugin))
+ return;
+ reload_proxy_settings (plugin, NULL);
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ priv->control = pk_control_new ();
+ priv->settings = g_settings_new ("org.gnome.system.proxy");
+ g_signal_connect (priv->settings, "changed",
+ G_CALLBACK (gs_plugin_packagekit_proxy_changed_cb), plugin);
+
+ priv->settings_http = g_settings_new ("org.gnome.system.proxy.http");
+ priv->settings_https = g_settings_new ("org.gnome.system.proxy.https");
+ priv->settings_ftp = g_settings_new ("org.gnome.system.proxy.ftp");
+ priv->settings_socks = g_settings_new ("org.gnome.system.proxy.socks");
+ g_signal_connect (priv->settings_http, "changed",
+ G_CALLBACK (gs_plugin_packagekit_proxy_changed_cb), plugin);
+ g_signal_connect (priv->settings_https, "changed",
+ G_CALLBACK (gs_plugin_packagekit_proxy_changed_cb), plugin);
+ g_signal_connect (priv->settings_ftp, "changed",
+ G_CALLBACK (gs_plugin_packagekit_proxy_changed_cb), plugin);
+ g_signal_connect (priv->settings_socks, "changed",
+ G_CALLBACK (gs_plugin_packagekit_proxy_changed_cb), plugin);
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ reload_proxy_settings (plugin, cancellable);
+ return TRUE;
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_object_unref (priv->control);
+ g_object_unref (priv->settings);
+ g_object_unref (priv->settings_http);
+ g_object_unref (priv->settings_https);
+ g_object_unref (priv->settings_ftp);
+ g_object_unref (priv->settings_socks);
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-refine-repos.c b/plugins/packagekit/gs-plugin-packagekit-refine-repos.c
new file mode 100644
index 0000000..4b41c44
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-refine-repos.c
@@ -0,0 +1,123 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+#include <gnome-software.h>
+
+#include "gs-packagekit-helper.h"
+#include "packagekit-common.h"
+
+/*
+ * SECTION:
+ * Uses the system PackageKit instance to return convert repo filenames to
+ * package-ids.
+ *
+ * Requires: | [repos::repo-filename]
+ * Refines: | [source-id]
+ */
+
+struct GsPluginData {
+ PkClient *client;
+ GMutex client_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->client_mutex);
+ priv->client = pk_client_new ();
+ pk_client_set_background (priv->client, FALSE);
+ pk_client_set_cache_age (priv->client, G_MAXUINT);
+
+ /* need repos::repo-filename */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "repos");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->client_mutex);
+ g_object_unref (priv->client);
+}
+
+static gboolean
+gs_plugin_packagekit_refine_repo_from_filename (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *to_array[] = { NULL, NULL };
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) packages = NULL;
+
+ to_array[0] = filename;
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_search_files (priv->client,
+ pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1),
+ (gchar **) to_array,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to search file %s: ", filename);
+ return FALSE;
+ }
+
+ /* get results */
+ packages = pk_results_get_package_array (results);
+ if (packages->len == 1) {
+ PkPackage *package = g_ptr_array_index (packages, 0);
+ gs_app_add_source_id (app, pk_package_get_id (package));
+ } else {
+ g_debug ("failed to find one package for repo %s, %s, [%u]",
+ gs_app_get_id (app), filename, packages->len);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ const gchar *fn;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ if (gs_app_get_kind (app) != AS_APP_KIND_SOURCE)
+ continue;
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ continue;
+ fn = gs_app_get_metadata_item (app, "repos::repo-filename");
+ if (fn == NULL)
+ continue;
+ /* set the source package name for an installed .repo file */
+ if (!gs_plugin_packagekit_refine_repo_from_filename (plugin,
+ app,
+ fn,
+ cancellable,
+ error))
+ return FALSE;
+ }
+
+ /* success */
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-refine.c b/plugins/packagekit/gs-plugin-packagekit-refine.c
new file mode 100644
index 0000000..68f7eb6
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-refine.c
@@ -0,0 +1,822 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+#include <gnome-software.h>
+
+#include "gs-markdown.h"
+#include "gs-packagekit-helper.h"
+#include "packagekit-common.h"
+
+/*
+ * SECTION:
+ * Uses the system PackageKit instance to return convert filenames to
+ * package-ids and to also discover update details about a package.
+ *
+ * Requires: | [id]
+ * Refines: | [source-id], [installed]
+ */
+
+struct GsPluginData {
+ PkControl *control;
+ PkClient *client;
+ GMutex client_mutex;
+};
+
+static void
+gs_plugin_packagekit_updates_changed_cb (PkControl *control, GsPlugin *plugin)
+{
+ gs_plugin_updates_changed (plugin);
+}
+
+static void
+gs_plugin_packagekit_repo_list_changed_cb (PkControl *control, GsPlugin *plugin)
+{
+ gs_plugin_reload (plugin);
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->client_mutex);
+ priv->client = pk_client_new ();
+ priv->control = pk_control_new ();
+ g_signal_connect (priv->control, "updates-changed",
+ G_CALLBACK (gs_plugin_packagekit_updates_changed_cb), plugin);
+ g_signal_connect (priv->control, "repo-list-changed",
+ G_CALLBACK (gs_plugin_packagekit_repo_list_changed_cb), plugin);
+ pk_client_set_background (priv->client, FALSE);
+ pk_client_set_cache_age (priv->client, G_MAXUINT);
+
+ /* need pkgname and ID */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->client_mutex);
+ g_object_unref (priv->client);
+ g_object_unref (priv->control);
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_PACKAGE &&
+ gs_app_get_scope (app) == AS_APP_SCOPE_SYSTEM) {
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ return;
+ }
+}
+
+static gboolean
+gs_plugin_packagekit_resolve_packages_with_filter (GsPlugin *plugin,
+ GsAppList *list,
+ PkBitfield filter,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GPtrArray *sources;
+ GsApp *app;
+ const gchar *pkgname;
+ guint i;
+ guint j;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) package_ids = NULL;
+ g_autoptr(GPtrArray) packages = NULL;
+
+ package_ids = g_ptr_array_new_with_free_func (g_free);
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ sources = gs_app_get_sources (app);
+ for (j = 0; j < sources->len; j++) {
+ pkgname = g_ptr_array_index (sources, j);
+ if (pkgname == NULL || pkgname[0] == '\0') {
+ g_warning ("invalid pkgname '%s' for %s",
+ pkgname,
+ gs_app_get_unique_id (app));
+ continue;
+ }
+ g_ptr_array_add (package_ids, g_strdup (pkgname));
+ }
+ }
+ if (package_ids->len == 0)
+ return TRUE;
+ g_ptr_array_add (package_ids, NULL);
+
+ /* resolve them all at once */
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_resolve (priv->client,
+ filter,
+ (gchar **) package_ids->pdata,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to resolve package_ids: ");
+ return FALSE;
+ }
+
+ /* get results */
+ packages = pk_results_get_package_array (results);
+
+ /* if the user types more characters we'll get cancelled - don't go on
+ * to mark apps as unavailable because packages->len = 0 */
+ if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ if (gs_app_get_local_file (app) != NULL)
+ continue;
+ gs_plugin_packagekit_resolve_packages_app (plugin, packages, app);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_resolve_packages (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ PkBitfield filter;
+ g_autoptr(GsAppList) resolve2_list = NULL;
+
+ /* first, try to resolve packages with ARCH filter */
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST,
+ PK_FILTER_ENUM_ARCH,
+ -1);
+ if (!gs_plugin_packagekit_resolve_packages_with_filter (plugin,
+ list,
+ filter,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+
+ /* if any packages remaining in UNKNOWN state, try to resolve them again,
+ * but this time without ARCH filter */
+ resolve2_list = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_list_add (resolve2_list, app);
+ }
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST,
+ PK_FILTER_ENUM_NOT_ARCH,
+ PK_FILTER_ENUM_NOT_SOURCE,
+ -1);
+ if (!gs_plugin_packagekit_resolve_packages_with_filter (plugin,
+ resolve2_list,
+ filter,
+ cancellable,
+ error)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_from_desktop (GsPlugin *plugin,
+ GsApp *app,
+ const gchar *filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *to_array[] = { NULL, NULL };
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) packages = NULL;
+
+ to_array[0] = filename;
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_search_files (priv->client,
+ pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1),
+ (gchar **) to_array,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to search file %s: ", filename);
+ return FALSE;
+ }
+
+ /* get results */
+ packages = pk_results_get_package_array (results);
+ if (packages->len == 1) {
+ PkPackage *package;
+ package = g_ptr_array_index (packages, 0);
+ gs_plugin_packagekit_set_metadata_from_package (plugin, app, package);
+ } else {
+ g_warning ("Failed to find one package for %s, %s, [%u]",
+ gs_app_get_id (app), filename, packages->len);
+ }
+ return TRUE;
+}
+
+/*
+ * gs_plugin_packagekit_fixup_update_description:
+ *
+ * Lets assume Fedora is sending us valid markdown, but fall back to
+ * plain text if this fails.
+ */
+static gchar *
+gs_plugin_packagekit_fixup_update_description (const gchar *text)
+{
+ gchar *tmp;
+ g_autoptr(GsMarkdown) markdown = NULL;
+
+ /* nothing to do */
+ if (text == NULL)
+ return NULL;
+
+ /* try to parse */
+ markdown = gs_markdown_new (GS_MARKDOWN_OUTPUT_TEXT);
+ gs_markdown_set_smart_quoting (markdown, FALSE);
+ gs_markdown_set_autocode (markdown, FALSE);
+ gs_markdown_set_autolinkify (markdown, FALSE);
+ tmp = gs_markdown_parse (markdown, text);
+ if (tmp != NULL)
+ return tmp;
+ return g_strdup (text);
+}
+
+static gboolean
+gs_plugin_packagekit_refine_updatedetails (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *package_id;
+ guint j;
+ GsApp *app;
+ guint cnt = 0;
+ PkUpdateDetail *update_detail;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autofree const gchar **package_ids = NULL;
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ package_ids = g_new0 (const gchar *, gs_app_list_length (list) + 1);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ package_id = gs_app_get_source_id_default (app);
+ if (package_id != NULL)
+ package_ids[cnt++] = package_id;
+ }
+
+ /* nothing to do */
+ if (cnt == 0)
+ return TRUE;
+
+ /* get any update details */
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_get_update_detail (priv->client,
+ (gchar **) package_ids,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to get update details for %s: ",
+ package_ids[0]);
+ return FALSE;
+ }
+
+ /* set the update details for the update */
+ array = pk_results_get_update_detail_array (results);
+ for (j = 0; j < gs_app_list_length (list); j++) {
+ app = gs_app_list_index (list, j);
+ package_id = gs_app_get_source_id_default (app);
+ for (guint i = 0; i < array->len; i++) {
+ const gchar *tmp;
+ g_autofree gchar *desc = NULL;
+ /* right package? */
+ update_detail = g_ptr_array_index (array, i);
+ if (g_strcmp0 (package_id, pk_update_detail_get_package_id (update_detail)) != 0)
+ continue;
+ tmp = pk_update_detail_get_update_text (update_detail);
+ desc = gs_plugin_packagekit_fixup_update_description (tmp);
+ if (desc != NULL)
+ gs_app_set_update_details (app, desc);
+ break;
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_details2 (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GPtrArray *source_ids;
+ GsApp *app;
+ const gchar *package_id;
+ guint i, j;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(GPtrArray) array = NULL;
+ g_autoptr(GPtrArray) package_ids = NULL;
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GHashTable) details_collection = NULL;
+
+ package_ids = g_ptr_array_new_with_free_func (g_free);
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ source_ids = gs_app_get_source_ids (app);
+ for (j = 0; j < source_ids->len; j++) {
+ package_id = g_ptr_array_index (source_ids, j);
+ g_ptr_array_add (package_ids, g_strdup (package_id));
+ }
+ }
+ if (package_ids->len == 0)
+ return TRUE;
+ g_ptr_array_add (package_ids, NULL);
+
+ /* get any details */
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_get_details (priv->client,
+ (gchar **) package_ids->pdata,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_autofree gchar *package_ids_str = g_strjoinv (",", (gchar **) package_ids->pdata);
+ g_prefix_error (error, "failed to get details for %s: ",
+ package_ids_str);
+ return FALSE;
+ }
+
+ /* get the results and copy them into a hash table for fast lookups:
+ * there are typically 400 to 700 elements in @array, and 100 to 200
+ * elements in @list, each with 1 or 2 source IDs to look up (but
+ * sometimes 200) */
+ array = pk_results_get_details_array (results);
+ details_collection = gs_plugin_packagekit_details_array_to_hash (array);
+
+ /* set the update details for the update */
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ gs_plugin_packagekit_refine_details_app (plugin, details_collection, app);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_update_urgency (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ guint i;
+ GsApp *app;
+ const gchar *package_id;
+ PkBitfield filter;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkPackageSack) sack = NULL;
+ g_autoptr(PkResults) results = NULL;
+
+ /* not required */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY) == 0)
+ return TRUE;
+
+ /* get the list of updates */
+ filter = pk_bitfield_value (PK_FILTER_ENUM_NONE);
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_get_updates (priv->client,
+ filter,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to get updates for urgency: ");
+ return FALSE;
+ }
+
+ /* set the update severity for the app */
+ sack = pk_results_get_package_sack (results);
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ g_autoptr (PkPackage) pkg = NULL;
+ app = gs_app_list_index (list, i);
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ package_id = gs_app_get_source_id_default (app);
+ if (package_id == NULL)
+ continue;
+ pkg = pk_package_sack_find_by_id (sack, package_id);
+ if (pkg == NULL)
+ continue;
+ switch (pk_package_get_info (pkg)) {
+ case PK_INFO_ENUM_AVAILABLE:
+ case PK_INFO_ENUM_NORMAL:
+ case PK_INFO_ENUM_LOW:
+ case PK_INFO_ENUM_ENHANCEMENT:
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_LOW);
+ break;
+ case PK_INFO_ENUM_BUGFIX:
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_MEDIUM);
+ break;
+ case PK_INFO_ENUM_SECURITY:
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_CRITICAL);
+ break;
+ case PK_INFO_ENUM_IMPORTANT:
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_HIGH);
+ break;
+ default:
+ gs_app_set_update_urgency (app, AS_URGENCY_KIND_UNKNOWN);
+ g_warning ("unhandled info state %s",
+ pk_info_enum_to_string (pk_package_get_info (pkg)));
+ break;
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_refine_app_needs_details (GsPlugin *plugin, GsPluginRefineFlags flags, GsApp *app)
+{
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) > 0 &&
+ gs_app_get_license (app) == NULL)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL) > 0 &&
+ gs_app_get_url (app, AS_URL_KIND_HOMEPAGE) == NULL)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE) > 0 &&
+ gs_app_get_size_installed (app) == 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE) > 0 &&
+ gs_app_get_size_download (app) == 0)
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_details (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = TRUE;
+ g_autoptr(GsAppList) list_tmp = NULL;
+
+ list_tmp = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ continue;
+ if (gs_app_get_source_id_default (app) == NULL)
+ continue;
+ if (!gs_plugin_refine_app_needs_details (plugin, flags, app))
+ continue;
+ gs_app_list_add (list_tmp, app);
+ }
+ if (gs_app_list_length (list_tmp) == 0)
+ return TRUE;
+ ret = gs_plugin_packagekit_refine_details2 (plugin,
+ list_tmp,
+ cancellable,
+ error);
+ if (!ret)
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_refine_requires_version (GsApp *app, GsPluginRefineFlags flags)
+{
+ const gchar *tmp;
+ tmp = gs_app_get_version (app);
+ if (tmp != NULL)
+ return FALSE;
+ return (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION) > 0;
+}
+
+static gboolean
+gs_plugin_refine_requires_update_details (GsApp *app, GsPluginRefineFlags flags)
+{
+ const gchar *tmp;
+ tmp = gs_app_get_update_details (app);
+ if (tmp != NULL)
+ return FALSE;
+ return (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) > 0;
+}
+
+static gboolean
+gs_plugin_refine_requires_origin (GsApp *app, GsPluginRefineFlags flags)
+{
+ const gchar *tmp;
+ tmp = gs_app_get_origin (app);
+ if (tmp != NULL)
+ return FALSE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN) > 0)
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+gs_plugin_refine_requires_package_id (GsApp *app, GsPluginRefineFlags flags)
+{
+ const gchar *tmp;
+ tmp = gs_app_get_source_id_default (app);
+ if (tmp != NULL)
+ return FALSE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE) > 0)
+ return TRUE;
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION) > 0)
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_distro_upgrade (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ guint i;
+ GsApp *app2;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ guint cache_age_save;
+
+ gs_packagekit_helper_add_app (helper, app);
+
+ /* ask PK to simulate upgrading the system */
+ g_mutex_lock (&priv->client_mutex);
+ cache_age_save = pk_client_get_cache_age (priv->client);
+ pk_client_set_cache_age (priv->client, 60 * 60 * 24 * 7); /* once per week */
+ results = pk_client_upgrade_system (priv->client,
+ pk_bitfield_from_enums (PK_TRANSACTION_FLAG_ENUM_SIMULATE, -1),
+ gs_app_get_version (app),
+ PK_UPGRADE_KIND_ENUM_COMPLETE,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ pk_client_set_cache_age (priv->client, cache_age_save);
+ g_mutex_unlock (&priv->client_mutex);
+
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to refine distro upgrade: ");
+ return FALSE;
+ }
+ list = gs_app_list_new ();
+ if (!gs_plugin_packagekit_add_results (plugin, list, results, error))
+ return FALSE;
+
+ /* add each of these as related applications */
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app2 = gs_app_list_index (list, i);
+ if (gs_app_get_state (app2) != AS_APP_STATE_UNAVAILABLE)
+ continue;
+ gs_app_add_related (app, app2);
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_valid_package_name (const gchar *source)
+{
+ if (g_strstr_len (source, -1, "/") != NULL)
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_name_to_id (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) resolve_all = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GPtrArray *sources;
+ GsApp *app = gs_app_list_index (list, i);
+ const gchar *tmp;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ tmp = gs_app_get_management_plugin (app);
+ if (tmp != NULL && g_strcmp0 (tmp, "packagekit") != 0)
+ continue;
+ sources = gs_app_get_sources (app);
+ if (sources->len == 0)
+ continue;
+ tmp = g_ptr_array_index (sources, 0);
+ if (!gs_plugin_packagekit_refine_valid_package_name (tmp))
+ continue;
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN ||
+ gs_plugin_refine_requires_package_id (app, flags) ||
+ gs_plugin_refine_requires_origin (app, flags) ||
+ gs_plugin_refine_requires_version (app, flags)) {
+ gs_app_list_add (resolve_all, app);
+ }
+ }
+ if (gs_app_list_length (resolve_all) > 0) {
+ if (!gs_plugin_packagekit_resolve_packages (plugin,
+ resolve_all,
+ cancellable,
+ error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_filename_to_id (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* not now */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION) == 0)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ g_autofree gchar *fn = NULL;
+ GsApp *app = gs_app_list_index (list, i);
+ const gchar *tmp;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ if (gs_app_get_source_id_default (app) != NULL)
+ continue;
+ tmp = gs_app_get_management_plugin (app);
+ if (tmp != NULL && g_strcmp0 (tmp, "packagekit") != 0)
+ continue;
+ tmp = gs_app_get_id (app);
+ if (tmp == NULL)
+ continue;
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_DESKTOP:
+ fn = g_strdup_printf ("/usr/share/applications/%s", tmp);
+ break;
+ case AS_APP_KIND_ADDON:
+ fn = g_strdup_printf ("/usr/share/metainfo/%s.metainfo.xml", tmp);
+ if (!g_file_test (fn, G_FILE_TEST_EXISTS)) {
+ g_free (fn);
+ fn = g_strdup_printf ("/usr/share/appdata/%s.metainfo.xml", tmp);
+ }
+ break;
+ default:
+ break;
+ }
+ if (fn == NULL)
+ continue;
+ if (!g_file_test (fn, G_FILE_TEST_EXISTS)) {
+ g_debug ("ignoring %s as does not exist", fn);
+ continue;
+ }
+ if (!gs_plugin_packagekit_refine_from_desktop (plugin,
+ app,
+ fn,
+ cancellable,
+ error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_packagekit_refine_update_details (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) updatedetails_all = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ const gchar *tmp;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE)
+ continue;
+ if (gs_app_get_source_id_default (app) == NULL)
+ continue;
+ tmp = gs_app_get_management_plugin (app);
+ if (tmp != NULL && g_strcmp0 (tmp, "packagekit") != 0)
+ continue;
+ if (gs_plugin_refine_requires_update_details (app, flags))
+ gs_app_list_add (updatedetails_all, app);
+ }
+ if (gs_app_list_length (updatedetails_all) > 0) {
+ if (!gs_plugin_packagekit_refine_updatedetails (plugin,
+ updatedetails_all,
+ cancellable,
+ error))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* when we need the cannot-be-upgraded applications, we implement this
+ * by doing a UpgradeSystem(SIMULATE) which adds the removed packages
+ * to the related-apps list with a state of %AS_APP_STATE_UNAVAILABLE */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPGRADE_REMOVED) {
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (gs_app_get_kind (app) != AS_APP_KIND_OS_UPGRADE)
+ continue;
+ if (!gs_plugin_packagekit_refine_distro_upgrade (plugin,
+ app,
+ cancellable,
+ error))
+ return FALSE;
+ }
+ }
+
+ /* can we resolve in one go? */
+ if (!gs_plugin_packagekit_refine_name_to_id (plugin, list, flags, cancellable, error))
+ return FALSE;
+
+ /* set the package-id for an installed desktop file */
+ if (!gs_plugin_packagekit_refine_filename_to_id (plugin, list, flags, cancellable, error))
+ return FALSE;
+
+ /* any update details missing? */
+ if (!gs_plugin_packagekit_refine_update_details (plugin, list, flags, cancellable, error))
+ return FALSE;
+
+ /* any package details missing? */
+ if (!gs_plugin_packagekit_refine_details (plugin, list, flags, cancellable, error))
+ return FALSE;
+
+ /* get the update severity */
+ if (!gs_plugin_packagekit_refine_update_urgency (plugin, list, flags, cancellable, error))
+ return FALSE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ continue;
+
+ /* the scope is always system-wide */
+ if (gs_app_get_scope (app) == AS_APP_SCOPE_UNKNOWN)
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_UNKNOWN)
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ }
+
+ /* success */
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-refresh.c b/plugins/packagekit/gs-plugin-packagekit-refresh.c
new file mode 100644
index 0000000..2d9a7e4
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-refresh.c
@@ -0,0 +1,182 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2014-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+#include <gnome-software.h>
+
+#include "gs-metered.h"
+#include "gs-packagekit-helper.h"
+#include "packagekit-common.h"
+
+/*
+ * SECTION:
+ * Do a PackageKit UpdatePackages(ONLY_DOWNLOAD) method on refresh and
+ * also convert any package files to applications the best we can.
+ */
+
+struct GsPluginData {
+ PkTask *task;
+ GMutex task_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->task_mutex);
+ priv->task = pk_task_new ();
+ pk_task_set_only_download (priv->task, TRUE);
+ pk_client_set_background (PK_CLIENT (priv->task), TRUE);
+
+ /* we can return better results than dpkg directly */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "dpkg");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->task_mutex);
+ g_object_unref (priv->task);
+}
+
+static gboolean
+_download_only (GsPlugin *plugin, GsAppList *list,
+ GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_auto(GStrv) package_ids = NULL;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkPackageSack) sack = NULL;
+ g_autoptr(PkResults) results2 = NULL;
+ g_autoptr(PkResults) results = NULL;
+
+ /* get the list of packages to update */
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
+
+ g_mutex_lock (&priv->task_mutex);
+ /* never refresh the metadata here as this can surprise the frontend if
+ * we end up downloading a different set of packages than what was
+ * shown to the user */
+ pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+ results = pk_client_get_updates (PK_CLIENT (priv->task),
+ pk_bitfield_value (PK_FILTER_ENUM_NONE),
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ return FALSE;
+ }
+
+ /* download all the packages */
+ sack = pk_results_get_package_sack (results);
+ if (pk_package_sack_get_size (sack) == 0)
+ return TRUE;
+ package_ids = pk_package_sack_get_ids (sack);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ gs_packagekit_helper_add_app (helper, app);
+ }
+ g_mutex_lock (&priv->task_mutex);
+ /* never refresh the metadata here as this can surprise the frontend if
+ * we end up downloading a different set of packages than what was
+ * shown to the user */
+ pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+ results2 = pk_task_update_packages_sync (priv->task,
+ package_ids,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (results2 == NULL) {
+ gs_plugin_packagekit_error_convert (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_download (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+
+ /* add any packages */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsAppList *related = gs_app_get_related (app);
+
+ /* add this app */
+ if (!gs_app_has_quirk (app, GS_APP_QUIRK_IS_PROXY))
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") == 0) {
+ gs_app_list_add (list_tmp, app);
+ continue;
+ }
+
+ /* add each related app */
+ for (guint j = 0; j < gs_app_list_length (related); j++) {
+ GsApp *app_tmp = gs_app_list_index (related, j);
+ if (g_strcmp0 (gs_app_get_management_plugin (app_tmp), "packagekit") == 0)
+ gs_app_list_add (list_tmp, app_tmp);
+ }
+ }
+
+ if (gs_app_list_length (list_tmp) == 0)
+ return TRUE;
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE)) {
+ g_autoptr(GError) error_local = NULL;
+
+ if (!gs_metered_block_app_list_on_download_scheduler (list_tmp, cancellable, &error_local)) {
+ g_warning ("Failed to block on download scheduler: %s",
+ error_local->message);
+ g_clear_error (&error_local);
+ }
+ }
+
+ return _download_only (plugin, list_tmp, cancellable, error);
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
+ g_autoptr(PkResults) results = NULL;
+
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
+ gs_packagekit_helper_set_progress_app (helper, app_dl);
+
+ g_mutex_lock (&priv->task_mutex);
+ /* cache age of 1 is user-initiated */
+ pk_client_set_background (PK_CLIENT (priv->task), cache_age > 1);
+ pk_client_set_cache_age (PK_CLIENT (priv->task), cache_age);
+ /* refresh the metadata */
+ results = pk_client_refresh_cache (PK_CLIENT (priv->task),
+ FALSE /* force */,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-upgrade.c b/plugins/packagekit/gs-plugin-packagekit-upgrade.c
new file mode 100644
index 0000000..6442dd7
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-upgrade.c
@@ -0,0 +1,88 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+
+#include <gnome-software.h>
+
+#include "gs-packagekit-helper.h"
+#include "packagekit-common.h"
+
+struct GsPluginData {
+ PkTask *task;
+ GMutex task_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->task_mutex);
+ priv->task = pk_task_new ();
+ pk_task_set_only_download (priv->task, TRUE);
+ pk_client_set_background (PK_CLIENT (priv->task), TRUE);
+ pk_client_set_cache_age (PK_CLIENT (priv->task), 60 * 60 * 24);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->task_mutex);
+ g_object_unref (priv->task);
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_kind (app) == AS_APP_KIND_OS_UPGRADE)
+ gs_app_set_management_plugin (app, "packagekit");
+}
+
+gboolean
+gs_plugin_app_upgrade_download (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ return TRUE;
+
+ /* check is distro-upgrade */
+ if (gs_app_get_kind (app) != AS_APP_KIND_OS_UPGRADE)
+ return TRUE;
+
+ /* ask PK to download enough packages to upgrade the system */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ gs_packagekit_helper_set_progress_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_task_upgrade_system_sync (priv->task,
+ gs_app_get_version (app),
+ PK_UPGRADE_KIND_ENUM_COMPLETE,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit-url-to-app.c b/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
new file mode 100644
index 0000000..0418920
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
@@ -0,0 +1,125 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Canonical Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+#include <gnome-software.h>
+
+#include "gs-packagekit-helper.h"
+#include "packagekit-common.h"
+
+struct GsPluginData {
+ PkClient *client;
+ GMutex client_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->client_mutex);
+ priv->client = pk_client_new ();
+
+ pk_client_set_background (priv->client, FALSE);
+ pk_client_set_cache_age (priv->client, G_MAXUINT);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->client_mutex);
+ g_object_unref (priv->client);
+}
+
+gboolean
+gs_plugin_url_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ g_autofree gchar *scheme = NULL;
+ g_autofree gchar *path = NULL;
+ const gchar *id = NULL;
+ const gchar * const *id_like = NULL;
+ g_auto(GStrv) package_ids = NULL;
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+ g_autoptr(GPtrArray) packages = NULL;
+ g_autoptr(GPtrArray) details = NULL;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+
+ path = gs_utils_get_url_path (url);
+
+ /* only do this for apt:// on debian or debian-like distros */
+ os_release = gs_os_release_new (error);
+ if (os_release == NULL) {
+ g_prefix_error (error, "failed to determine OS information:");
+ return FALSE;
+ } else {
+ id = gs_os_release_get_id (os_release);
+ id_like = gs_os_release_get_id_like (os_release);
+ scheme = gs_utils_get_url_scheme (url);
+ if (!(g_strcmp0 (scheme, "apt") == 0 &&
+ (g_strcmp0 (id, "debian") == 0 ||
+ g_strv_contains (id_like, "debian")))) {
+ return TRUE;
+ }
+ }
+
+ app = gs_app_new (NULL);
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_add_source (app, path);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+
+ package_ids = g_new0 (gchar *, 2);
+ package_ids[0] = g_strdup (path);
+
+ g_mutex_lock (&priv->client_mutex);
+ results = pk_client_resolve (priv->client,
+ pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, PK_FILTER_ENUM_ARCH, -1),
+ package_ids,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->client_mutex);
+
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to resolve package_ids: ");
+ return FALSE;
+ }
+
+ /* get results */
+ packages = pk_results_get_package_array (results);
+ details = pk_results_get_details_array (results);
+
+ if (packages->len >= 1) {
+ g_autoptr(GHashTable) details_collection = NULL;
+
+ if (gs_app_get_local_file (app) != NULL)
+ return TRUE;
+
+ details_collection = gs_plugin_packagekit_details_array_to_hash (details);
+
+ gs_plugin_packagekit_resolve_packages_app (plugin, packages, app);
+ gs_plugin_packagekit_refine_details_app (plugin, details_collection, app);
+
+ gs_app_list_add (list, app);
+ } else {
+ g_warning ("no results returned");
+ }
+
+ return TRUE;
+}
diff --git a/plugins/packagekit/gs-plugin-packagekit.c b/plugins/packagekit/gs-plugin-packagekit.c
new file mode 100644
index 0000000..c379f94
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-packagekit.c
@@ -0,0 +1,693 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+
+#include <gnome-software.h>
+
+#include "packagekit-common.h"
+#include "gs-packagekit-helper.h"
+
+/*
+ * SECTION:
+ * Uses the system PackageKit instance to return installed packages,
+ * sources and the ability to add and remove packages.
+ *
+ * Requires: | [source-id]
+ * Refines: | [source-id], [source], [update-details], [management-plugin]
+ */
+
+struct GsPluginData {
+ PkTask *task;
+ GMutex task_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->task_mutex);
+ priv->task = pk_task_new ();
+ pk_client_set_background (PK_CLIENT (priv->task), FALSE);
+ pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_mutex_clear (&priv->task_mutex);
+ g_object_unref (priv->task);
+}
+
+static gboolean
+gs_plugin_add_sources_related (GsPlugin *plugin,
+ GHashTable *hash,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ guint i;
+ GsApp *app;
+ GsApp *app_tmp;
+ PkBitfield filter;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ const gchar *id;
+ gboolean ret = TRUE;
+ g_autoptr(GsAppList) installed = gs_app_list_new ();
+ g_autoptr(PkResults) results = NULL;
+
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED,
+ PK_FILTER_ENUM_NEWEST,
+ PK_FILTER_ENUM_ARCH,
+ PK_FILTER_ENUM_NOT_COLLECTIONS,
+ -1);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_get_packages (PK_CLIENT(priv->task),
+ filter,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ g_prefix_error (error, "failed to get sources related: ");
+ return FALSE;
+ }
+ ret = gs_plugin_packagekit_add_results (plugin,
+ installed,
+ results,
+ error);
+ if (!ret)
+ return FALSE;
+ for (i = 0; i < gs_app_list_length (installed); i++) {
+ g_auto(GStrv) split = NULL;
+ app = gs_app_list_index (installed, i);
+ split = pk_package_id_split (gs_app_get_source_id_default (app));
+ if (split == NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "invalid package-id: %s",
+ gs_app_get_source_id_default (app));
+ return FALSE;
+ }
+ if (g_str_has_prefix (split[PK_PACKAGE_ID_DATA], "installed:")) {
+ id = split[PK_PACKAGE_ID_DATA] + 10;
+ app_tmp = g_hash_table_lookup (hash, id);
+ if (app_tmp != NULL) {
+ g_debug ("found package %s from %s",
+ gs_app_get_source_default (app), id);
+ gs_app_add_related (app_tmp, app);
+ }
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_sources (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ PkBitfield filter;
+ PkRepoDetail *rd;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ const gchar *id;
+ guint i;
+ g_autoptr(GHashTable) hash = NULL;
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ /* ask PK for the repo details */
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_SOURCE,
+ PK_FILTER_ENUM_NOT_DEVELOPMENT,
+ PK_FILTER_ENUM_NOT_SUPPORTED,
+ -1);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_get_repo_list (PK_CLIENT(priv->task),
+ filter,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error))
+ return FALSE;
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ array = pk_results_get_repo_detail_array (results);
+ for (i = 0; i < array->len; i++) {
+ g_autoptr(GsApp) app = NULL;
+ rd = g_ptr_array_index (array, i);
+ id = pk_repo_detail_get_id (rd);
+ app = gs_app_new (id);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_set_kind (app, AS_APP_KIND_SOURCE);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ gs_app_set_state (app, pk_repo_detail_get_enabled (rd) ?
+ AS_APP_STATE_INSTALLED : AS_APP_STATE_AVAILABLE);
+ gs_app_set_name (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_repo_detail_get_description (rd));
+ gs_app_set_summary (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_repo_detail_get_description (rd));
+ gs_app_list_add (list, app);
+ g_hash_table_insert (hash,
+ g_strdup (id),
+ (gpointer) app);
+ }
+
+ /* get every application on the system and add it as a related package
+ * if it matches */
+ return gs_plugin_add_sources_related (plugin, hash, cancellable, error);
+}
+
+static gboolean
+gs_plugin_app_origin_repo_enable (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ const gchar *repo_id;
+
+ repo_id = gs_app_get_origin (app);
+ if (repo_id == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "origin not set");
+ return FALSE;
+ }
+
+ /* do sync call */
+ gs_plugin_status_update (plugin, app, GS_PLUGIN_STATUS_WAITING);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_repo_enable (PK_CLIENT (priv->task),
+ repo_id,
+ TRUE,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_utils_error_add_origin_id (error, app);
+ return FALSE;
+ }
+
+ /* now that the repo is enabled, the app (not the repo!) moves from
+ * UNAVAILABLE state to AVAILABLE */
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_repo_enable (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+
+ /* do sync call */
+ gs_plugin_status_update (plugin, app, GS_PLUGIN_STATUS_WAITING);
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_repo_enable (PK_CLIENT (priv->task),
+ gs_app_get_id (app),
+ TRUE,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ gs_utils_error_add_origin_id (error, app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ GsAppList *addons;
+ GPtrArray *source_ids;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ const gchar *package_id;
+ guint i, j;
+ g_autofree gchar *local_filename = NULL;
+ g_auto(GStrv) package_ids = NULL;
+ g_autoptr(GPtrArray) array_package_ids = NULL;
+ g_autoptr(PkResults) results = NULL;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* enable repo */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return gs_plugin_repo_enable (plugin, app, cancellable, error);
+
+ /* queue for install if installation needs the network */
+ if (!gs_plugin_get_network_available (plugin)) {
+ gs_app_set_state (app, AS_APP_STATE_QUEUED_FOR_INSTALL);
+ return TRUE;
+ }
+
+ if (gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE) {
+ /* get everything up front we need */
+ source_ids = gs_app_get_source_ids (app);
+ if (source_ids->len == 0) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "installing not available");
+ return FALSE;
+ }
+ package_ids = g_new0 (gchar *, 2);
+ package_ids[0] = g_strdup (g_ptr_array_index (source_ids, 0));
+
+ /* enable the repo where the unavailable app is coming from */
+ if (!gs_plugin_app_origin_repo_enable (plugin, app, cancellable, error))
+ return FALSE;
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+
+ /* FIXME: this is a hack, to allow PK time to re-initialize
+ * everything in order to match an actual result. The root cause
+ * is probably some kind of hard-to-debug race in the daemon. */
+ g_usleep (G_USEC_PER_SEC * 3);
+
+ /* actually install the package */
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_task_install_packages_sync (priv->task,
+ package_ids,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ /* if we remove the app again later, we should be able to
+ * cancel the installation if we'd never installed it */
+ gs_app_set_allow_cancel (app, TRUE);
+
+ /* no longer valid */
+ gs_app_clear_source_ids (app);
+ return TRUE;
+ }
+
+ /* get the list of available package ids to install */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_UPDATABLE:
+ source_ids = gs_app_get_source_ids (app);
+ if (source_ids->len == 0) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "installing not available");
+ return FALSE;
+ }
+ array_package_ids = g_ptr_array_new_with_free_func (g_free);
+ for (i = 0; i < source_ids->len; i++) {
+ package_id = g_ptr_array_index (source_ids, i);
+ if (g_strstr_len (package_id, -1, ";installed") != NULL)
+ continue;
+ g_ptr_array_add (array_package_ids, g_strdup (package_id));
+ }
+
+ addons = gs_app_get_addons (app);
+ for (i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *addon = gs_app_list_index (addons, i);
+
+ if (!gs_app_get_to_be_installed (addon))
+ continue;
+
+ source_ids = gs_app_get_source_ids (addon);
+ for (j = 0; j < source_ids->len; j++) {
+ package_id = g_ptr_array_index (source_ids, j);
+ if (g_strstr_len (package_id, -1, ";installed") != NULL)
+ continue;
+ g_ptr_array_add (array_package_ids, g_strdup (package_id));
+ }
+ }
+ g_ptr_array_add (array_package_ids, NULL);
+
+ if (array_package_ids->len == 0) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no packages to install");
+ return FALSE;
+ }
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ addons = gs_app_get_addons (app);
+ for (i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *addon = gs_app_list_index (addons, i);
+ if (gs_app_get_to_be_installed (addon))
+ gs_app_set_state (addon, AS_APP_STATE_INSTALLING);
+ }
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_task_install_packages_sync (priv->task,
+ (gchar **) array_package_ids->pdata,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ break;
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ if (gs_app_get_local_file (app) == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "local package, but no filename");
+ return FALSE;
+ }
+ local_filename = g_file_get_path (gs_app_get_local_file (app));
+ package_ids = g_strsplit (local_filename, "\t", -1);
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_task_install_files_sync (priv->task,
+ package_ids,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ /* get the new icon from the package */
+ gs_app_set_local_file (app, NULL);
+ gs_app_add_icon (app, NULL);
+ gs_app_set_pixbuf (app, NULL);
+ break;
+ default:
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "do not know how to install app in state %s",
+ as_app_state_to_string (gs_app_get_state (app)));
+ return FALSE;
+ }
+
+ /* no longer valid */
+ gs_app_clear_source_ids (app);
+
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_repo_disable (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+
+ /* do sync call */
+ gs_plugin_status_update (plugin, app, GS_PLUGIN_STATUS_WAITING);
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_repo_enable (PK_CLIENT (priv->task),
+ gs_app_get_id (app),
+ FALSE,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ gs_utils_error_add_origin_id (error, app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_remove (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *package_id;
+ GPtrArray *source_ids;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ guint i;
+ guint cnt = 0;
+ g_autoptr(PkResults) results = NULL;
+ g_auto(GStrv) package_ids = NULL;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* disable repo */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return gs_plugin_repo_disable (plugin, app, cancellable, error);
+
+ /* get the list of available package ids to install */
+ source_ids = gs_app_get_source_ids (app);
+ if (source_ids->len == 0) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "removing not available");
+ return FALSE;
+ }
+ package_ids = g_new0 (gchar *, source_ids->len + 1);
+ for (i = 0; i < source_ids->len; i++) {
+ package_id = g_ptr_array_index (source_ids, i);
+ if (g_strstr_len (package_id, -1, ";installed") == NULL)
+ continue;
+ package_ids[cnt++] = g_strdup (package_id);
+ }
+ if (cnt == 0) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no packages to remove");
+ return FALSE;
+ }
+
+ /* do the action */
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ gs_packagekit_helper_add_app (helper, app);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_task_remove_packages_sync (priv->task,
+ package_ids,
+ TRUE, GS_PACKAGEKIT_AUTOREMOVE,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is not known: we don't know if we can re-install this app */
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+
+ /* no longer valid */
+ gs_app_clear_source_ids (app);
+
+ return TRUE;
+}
+
+static GsApp *
+gs_plugin_packagekit_build_update_app (GsPlugin *plugin, PkPackage *package)
+{
+ GsApp *app = gs_plugin_cache_lookup (plugin, pk_package_get_id (package));
+ if (app != NULL)
+ return app;
+ app = gs_app_new (NULL);
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_add_source (app, pk_package_get_name (package));
+ gs_app_add_source_id (app, pk_package_get_id (package));
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST,
+ pk_package_get_name (package));
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST,
+ pk_package_get_summary (package));
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_app_set_update_version (app, pk_package_get_version (package));
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ gs_plugin_cache_add (plugin, pk_package_get_id (package), app);
+ return app;
+}
+
+gboolean
+gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ /* do sync call */
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_get_updates (PK_CLIENT (priv->task),
+ pk_bitfield_value (PK_FILTER_ENUM_NONE),
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error))
+ return FALSE;
+
+ /* add results */
+ array = pk_results_get_package_array (results);
+ for (guint i = 0; i < array->len; i++) {
+ PkPackage *package = g_ptr_array_index (array, i);
+ g_autoptr(GsApp) app = NULL;
+ app = gs_plugin_packagekit_build_update_app (plugin, package);
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_search_files (GsPlugin *plugin,
+ gchar **search,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ PkBitfield filter;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+
+ /* do sync call */
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST,
+ PK_FILTER_ENUM_ARCH,
+ -1);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_search_files (PK_CLIENT (priv->task),
+ filter,
+ search,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error))
+ return FALSE;
+
+ /* add results */
+ return gs_plugin_packagekit_add_results (plugin, list, results, error);
+}
+
+gboolean
+gs_plugin_add_search_what_provides (GsPlugin *plugin,
+ gchar **search,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ PkBitfield filter;
+ g_autoptr(GsPackagekitHelper) helper = gs_packagekit_helper_new (plugin);
+ g_autoptr(PkResults) results = NULL;
+
+ /* do sync call */
+ gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
+ filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST,
+ PK_FILTER_ENUM_ARCH,
+ -1);
+ g_mutex_lock (&priv->task_mutex);
+ results = pk_client_what_provides (PK_CLIENT (priv->task),
+ filter,
+ search,
+ cancellable,
+ gs_packagekit_helper_cb, helper,
+ error);
+ g_mutex_unlock (&priv->task_mutex);
+ if (!gs_plugin_packagekit_results_valid (results, error))
+ return FALSE;
+
+ /* add results */
+ return gs_plugin_packagekit_add_results (plugin, list, results, error);
+}
+
+gboolean
+gs_plugin_launch (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+ return gs_plugin_app_launch (plugin, app, error);
+}
diff --git a/plugins/packagekit/gs-plugin-systemd-updates.c b/plugins/packagekit/gs-plugin-systemd-updates.c
new file mode 100644
index 0000000..ea8ff1a
--- /dev/null
+++ b/plugins/packagekit/gs-plugin-systemd-updates.c
@@ -0,0 +1,330 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <packagekit-glib2/packagekit.h>
+
+#include "packagekit-common.h"
+
+#include <gnome-software.h>
+
+/*
+ * Mark previously downloaded packages as zero size, and also allow
+ * scheduling the offline update.
+ */
+
+struct GsPluginData {
+ GFileMonitor *monitor;
+ GFileMonitor *monitor_trigger;
+ GPermission *permission;
+ gboolean is_triggered;
+ GHashTable *hash_prepared;
+ GMutex hash_prepared_mutex;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refresh");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refine");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "generic-updates");
+ g_mutex_init (&priv->hash_prepared_mutex);
+ priv->hash_prepared = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, NULL);
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_hash_table_unref (priv->hash_prepared);
+ g_mutex_clear (&priv->hash_prepared_mutex);
+ if (priv->monitor != NULL)
+ g_object_unref (priv->monitor);
+ if (priv->monitor_trigger != NULL)
+ g_object_unref (priv->monitor_trigger);
+}
+
+static void
+gs_plugin_systemd_updates_permission_cb (GPermission *permission,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ GsPlugin *plugin = GS_PLUGIN (data);
+ gboolean ret = g_permission_get_allowed (permission) ||
+ g_permission_get_can_acquire (permission);
+ gs_plugin_set_allow_updates (plugin, ret);
+}
+
+static gboolean
+gs_plugin_systemd_update_cache (GsPlugin *plugin, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GError) error_local = NULL;
+ g_auto(GStrv) package_ids = NULL;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->hash_prepared_mutex);
+
+ /* invalidate */
+ g_hash_table_remove_all (priv->hash_prepared);
+
+ /* get new list of package-ids */
+ package_ids = pk_offline_get_prepared_ids (&error_local);
+ if (package_ids == NULL) {
+ if (g_error_matches (error_local,
+ PK_OFFLINE_ERROR,
+ PK_OFFLINE_ERROR_NO_DATA)) {
+ return TRUE;
+ }
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "Failed to get prepared IDs: %s",
+ error_local->message);
+ return FALSE;
+ }
+ for (guint i = 0; package_ids[i] != NULL; i++) {
+ g_hash_table_insert (priv->hash_prepared,
+ g_strdup (package_ids[i]),
+ GUINT_TO_POINTER (1));
+ }
+ return TRUE;
+}
+
+static void
+gs_plugin_systemd_updates_changed_cb (GFileMonitor *monitor,
+ GFile *file, GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+
+ /* update UI */
+ gs_plugin_systemd_update_cache (plugin, NULL);
+ gs_plugin_updates_changed (plugin);
+}
+
+static void
+gs_plugin_systemd_updates_refresh_is_triggered (GsPlugin *plugin, GCancellable *cancellable)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GFile) file_trigger = NULL;
+ file_trigger = g_file_new_for_path ("/system-update");
+ priv->is_triggered = g_file_query_exists (file_trigger, NULL);
+ g_debug ("offline trigger is now %s",
+ priv->is_triggered ? "enabled" : "disabled");
+}
+
+static void
+gs_plugin_systemd_trigger_changed_cb (GFileMonitor *monitor,
+ GFile *file, GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ GsPlugin *plugin = GS_PLUGIN (user_data);
+ gs_plugin_systemd_updates_refresh_is_triggered (plugin, NULL);
+}
+
+static void
+gs_plugin_systemd_refine_app (GsPlugin *plugin, GsApp *app)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *package_id;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ return;
+
+ /* the package is already downloaded */
+ package_id = gs_app_get_source_id_default (app);
+ if (package_id == NULL)
+ return;
+ locker = g_mutex_locker_new (&priv->hash_prepared_mutex);
+ if (g_hash_table_lookup (priv->hash_prepared, package_id) != NULL)
+ gs_app_set_size_download (app, 0);
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* not now */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE) == 0)
+ return TRUE;
+
+ /* re-read /var/lib/PackageKit/prepared-update */
+ if (!gs_plugin_systemd_update_cache (plugin, error))
+ return FALSE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsAppList *related = gs_app_get_related (app);
+ /* refine the app itself */
+ gs_plugin_systemd_refine_app (plugin, app);
+ /* and anything related for proxy apps */
+ for (guint j = 0; j < gs_app_list_length (related); j++) {
+ GsApp *app_related = gs_app_list_index (related, j);
+ gs_plugin_systemd_refine_app (plugin, app_related);
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GFile) file_trigger = NULL;
+
+ /* watch the prepared file */
+ priv->monitor = pk_offline_get_prepared_monitor (cancellable, error);
+ if (priv->monitor == NULL) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ g_signal_connect (priv->monitor, "changed",
+ G_CALLBACK (gs_plugin_systemd_updates_changed_cb),
+ plugin);
+
+ /* watch the trigger file */
+ file_trigger = g_file_new_for_path ("/system-update");
+ priv->monitor_trigger = g_file_monitor_file (file_trigger,
+ G_FILE_MONITOR_NONE,
+ NULL,
+ error);
+ if (priv->monitor_trigger == NULL) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ g_signal_connect (priv->monitor_trigger, "changed",
+ G_CALLBACK (gs_plugin_systemd_trigger_changed_cb),
+ plugin);
+
+ /* check if we have permission to trigger the update */
+ priv->permission = gs_utils_get_permission (
+ "org.freedesktop.packagekit.trigger-offline-update",
+ NULL, NULL);
+ if (priv->permission != NULL) {
+ g_signal_connect (priv->permission, "notify",
+ G_CALLBACK (gs_plugin_systemd_updates_permission_cb),
+ plugin);
+ }
+
+ /* get the list of currently downloaded packages */
+ return gs_plugin_systemd_update_cache (plugin, error);
+}
+
+static gboolean
+_systemd_trigger_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* if we can process this online do not require a trigger */
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE)
+ return TRUE;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ return TRUE;
+
+ /* already in correct state */
+ if (priv->is_triggered)
+ return TRUE;
+
+ /* trigger offline update */
+ if (!pk_offline_trigger (PK_OFFLINE_ACTION_REBOOT,
+ cancellable, error)) {
+ gs_plugin_packagekit_error_convert (error);
+ return FALSE;
+ }
+
+ /* don't rely on the file monitor */
+ gs_plugin_systemd_updates_refresh_is_triggered (plugin, cancellable);
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* any are us? */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsAppList *related = gs_app_get_related (app);
+
+ /* try to trigger this app */
+ if (!gs_app_has_quirk (app, GS_APP_QUIRK_IS_PROXY)) {
+ if (!_systemd_trigger_app (plugin, app, cancellable, error))
+ return FALSE;
+ continue;
+ }
+
+ /* try to trigger each related app */
+ for (guint j = 0; j < gs_app_list_length (related); j++) {
+ GsApp *app_tmp = gs_app_list_index (related, j);
+ if (!_systemd_trigger_app (plugin, app_tmp, cancellable, error))
+ return FALSE;
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update_cancel (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ return TRUE;
+
+ /* already in correct state */
+ if (!priv->is_triggered)
+ return TRUE;
+
+ /* cancel offline update */
+ if (!pk_offline_cancel (NULL, error))
+ return FALSE;
+
+ /* don't rely on the file monitor */
+ gs_plugin_systemd_updates_refresh_is_triggered (plugin, cancellable);
+
+ /* success! */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_upgrade_trigger (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "packagekit") != 0)
+ return TRUE;
+ return pk_offline_trigger_upgrade (PK_OFFLINE_ACTION_REBOOT, cancellable, error);
+}
diff --git a/plugins/packagekit/gs-self-test.c b/plugins/packagekit/gs-self-test.c
new file mode 100644
index 0000000..5dbaf0a
--- /dev/null
+++ b/plugins/packagekit/gs-self-test.c
@@ -0,0 +1,279 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-markdown.h"
+#include "gs-test.h"
+
+static void
+gs_markdown_func (void)
+{
+ gchar *text;
+ const gchar *markdown;
+ const gchar *markdown_expected;
+ g_autoptr(GsMarkdown) md = NULL;
+
+ /* get GsMarkdown object */
+ md = gs_markdown_new (GS_MARKDOWN_OUTPUT_PANGO);
+ g_assert (md);
+
+ markdown = "OEMs\n"
+ "====\n"
+ " - Bullett\n";
+ markdown_expected =
+ "<big>OEMs</big>\n"
+ "• Bullett";
+ /* markdown (type2 header) */
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown (autocode) */
+ markdown = "this is http://www.hughsie.com/with_spaces_in_url inline link\n";
+ markdown_expected = "this is <tt>http://www.hughsie.com/with_spaces_in_url</tt> inline link";
+ gs_markdown_set_autocode (md, TRUE);
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown some invalid header */
+ markdown = "*** This software is currently in alpha state ***\n";
+ markdown_expected = "<b><i> This software is currently in alpha state </b></i>";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown (complex1) */
+ markdown = " - This is a *very*\n"
+ " short paragraph\n"
+ " that is not usual.\n"
+ " - Another";
+ markdown_expected =
+ "• This is a <i>very</i> short paragraph that is not usual.\n"
+ "• Another";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown (complex1) */
+ markdown = "* This is a *very*\n"
+ " short paragraph\n"
+ " that is not usual.\n"
+ "* This is the second\n"
+ " bullett point.\n"
+ "* And the third.\n"
+ " \n"
+ "* * *\n"
+ " \n"
+ "Paragraph one\n"
+ "isn't __very__ long at all.\n"
+ "\n"
+ "Paragraph two\n"
+ "isn't much better.";
+ markdown_expected =
+ "• This is a <i>very</i> short paragraph that is not usual.\n"
+ "• This is the second bullett point.\n"
+ "• And the third.\n"
+ "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯\n"
+ "Paragraph one isn&apos;t <b>very</b> long at all.\n"
+ "Paragraph two isn&apos;t much better.";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ markdown = "This is a spec file description or\n"
+ "an **update** description in bohdi.\n"
+ "\n"
+ "* * *\n"
+ "# Big title #\n"
+ "\n"
+ "The *following* things 'were' fixed:\n"
+ "- Fix `dave`\n"
+ "* Fubar update because of \"security\"\n";
+ markdown_expected =
+ "This is a spec file description or an <b>update</b> description in bohdi.\n"
+ "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯\n"
+ "<big>Big title</big>\n"
+ "The <i>following</i> things 'were' fixed:\n"
+ "• Fix <tt>dave</tt>\n"
+ "• Fubar update because of \"security\"";
+ /* markdown (complex2) */
+ text = gs_markdown_parse (md, markdown);
+ if (g_strcmp0 (text, markdown_expected) == 0)
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown (list with spaces) */
+ markdown = "* list seporated with spaces -\n"
+ " first item\n"
+ "\n"
+ "* second item\n"
+ "\n"
+ "* third item\n";
+ markdown_expected =
+ "• list seporated with spaces - first item\n"
+ "• second item\n"
+ "• third item";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ gs_markdown_set_max_lines (md, 1);
+
+ /* markdown (one line limit) */
+ markdown = "* list seporated with spaces -\n"
+ " first item\n"
+ "* second item\n";
+ markdown_expected =
+ "• list seporated with spaces - first item";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ gs_markdown_set_max_lines (md, 1);
+
+ /* markdown (escaping) */
+ markdown = "* list & <spaces>";
+ markdown_expected =
+ "• list &amp; &lt;spaces&gt;";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown (URLs) */
+ markdown = "this is the http://www.hughsie.com/ coolest site";
+ markdown_expected =
+ "this is the "
+ "<a href=\"http://www.hughsie.com/\">http://www.hughsie.com/</a>"
+ " coolest site";
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+
+ /* markdown (free text) */
+ gs_markdown_set_escape (md, FALSE);
+ text = gs_markdown_parse (md, "This isn't a present");
+ g_assert_cmpstr (text, ==, "This isn't a present");
+ g_free (text);
+
+ /* markdown (autotext underscore) */
+ text = gs_markdown_parse (md, "This isn't CONFIG_UEVENT_HELPER_PATH present");
+ g_assert_cmpstr (text, ==, "This isn't <tt>CONFIG_UEVENT_HELPER_PATH</tt> present");
+ g_free (text);
+
+ /* markdown (end of bullett) */
+ markdown = "*Thu Mar 12 12:00:00 2009* Dan Walsh <dwalsh@redhat.com> - 2.0.79-1\n"
+ "- Update to upstream \n"
+ " * Netlink socket handoff patch from Adam Jackson.\n"
+ " * AVC caching of compute_create results by Eric Paris.\n"
+ "\n"
+ "*Tue Mar 10 12:00:00 2009* Dan Walsh <dwalsh@redhat.com> - 2.0.78-5\n"
+ "- Add patch from ajax to accellerate X SELinux \n"
+ "- Update eparis patch\n";
+ markdown_expected =
+ "<i>Thu Mar 12 12:00:00 2009</i> Dan Walsh <tt>&lt;dwalsh@redhat.com&gt;</tt> - 2.0.79-1\n"
+ "• Update to upstream\n"
+ "• Netlink socket handoff patch from Adam Jackson.\n"
+ "• AVC caching of compute_create results by Eric Paris.\n"
+ "<i>Tue Mar 10 12:00:00 2009</i> Dan Walsh <tt>&lt;dwalsh@redhat.com&gt;</tt> - 2.0.78-5\n"
+ "• Add patch from ajax to accellerate X SELinux\n"
+ "• Update eparis patch";
+ gs_markdown_set_escape (md, TRUE);
+ gs_markdown_set_max_lines (md, 1024);
+ text = gs_markdown_parse (md, markdown);
+ g_assert_cmpstr (text, ==, markdown_expected);
+ g_free (text);
+}
+
+static void
+gs_plugins_packagekit_local_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autofree gchar *fn = NULL;
+ g_autoptr(GFile) file = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* no packagekit, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "packagekit-local")) {
+ g_test_skip ("not enabled");
+ return;
+ }
+
+ /* load local file */
+ fn = gs_test_get_filename (TESTDATADIR, "chiron-1.1-1.fc24.x86_64.rpm");
+ g_assert (fn != NULL);
+ file = g_file_new_for_path (fn);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ NULL);
+ app = gs_plugin_loader_job_process_app (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_NOT_SUPPORTED)) {
+ g_test_skip ("rpm files not supported");
+ return;
+ }
+ g_assert_no_error (error);
+ g_assert (app != NULL);
+ g_assert_cmpstr (gs_app_get_source_default (app), ==, "chiron");
+ g_assert_cmpstr (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE), ==, "http://127.0.0.1/");
+ g_assert_cmpstr (gs_app_get_name (app), ==, "chiron");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "1.1-1.fc24");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "Single line synopsis");
+ g_assert_cmpstr (gs_app_get_description (app), ==,
+ "This is the first paragraph in the example "
+ "package spec file.\n\nThis is the second paragraph.");
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "packagekit-local",
+ NULL
+ };
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* generic tests go here */
+ g_test_add_func ("/gnome-software/markdown", gs_markdown_func);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ if (!g_file_test ("/run/ostree-booted", G_FILE_TEST_EXISTS)) {
+ g_test_add_data_func ("/gnome-software/plugins/packagekit/local",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_packagekit_local_func);
+ }
+
+ return g_test_run ();
+}
diff --git a/plugins/packagekit/meson.build b/plugins/packagekit/meson.build
new file mode 100644
index 0000000..05ae4d4
--- /dev/null
+++ b/plugins/packagekit/meson.build
@@ -0,0 +1,249 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginPackageKit"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+deps = [
+ plugin_libs,
+ packagekit,
+]
+
+if get_option('mogwai')
+ deps += [mogwai_schedule_client]
+endif
+
+shared_module(
+ 'gs_plugin_systemd-updates',
+ sources : [
+ 'gs-plugin-systemd-updates.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : deps,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit',
+ sources : [
+ 'gs-plugin-packagekit.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : deps,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-refine',
+ sources : [
+ 'gs-plugin-packagekit-refine.c',
+ 'gs-markdown.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-refine-repos',
+ sources : [
+ 'gs-plugin-packagekit-refine-repos.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-refresh',
+ sources : [
+ 'gs-plugin-packagekit-refresh.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-local',
+ sources : [
+ 'gs-plugin-packagekit-local.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-history',
+ sources : [
+ 'gs-plugin-packagekit-history.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-upgrade',
+ sources : [
+ 'gs-plugin-packagekit-upgrade.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-offline',
+sources : [
+ 'gs-plugin-packagekit-offline.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-proxy',
+sources : 'gs-plugin-packagekit-proxy.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+shared_module(
+ 'gs_plugin_packagekit-url-to-app',
+ sources : [
+ 'gs-plugin-packagekit-url-to-app.c',
+ 'gs-packagekit-helper.c',
+ 'packagekit-common.c',
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, packagekit ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+ e = executable(
+ 'gs-self-test-packagekit',
+ compiled_schemas,
+ sources : [
+ 'gs-markdown.c',
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-packagekit', e, suite: ['plugins', 'packagekit'], env: test_env)
+endif
diff --git a/plugins/packagekit/packagekit-common.c b/plugins/packagekit/packagekit-common.c
new file mode 100644
index 0000000..ed77b34
--- /dev/null
+++ b/plugins/packagekit/packagekit-common.c
@@ -0,0 +1,543 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <packagekit-glib2/packagekit.h>
+
+#include <gnome-software.h>
+
+#include "packagekit-common.h"
+
+GsPluginStatus
+packagekit_status_enum_to_plugin_status (PkStatusEnum status)
+{
+ GsPluginStatus plugin_status = GS_PLUGIN_STATUS_UNKNOWN;
+
+ switch (status) {
+ case PK_STATUS_ENUM_SETUP:
+ case PK_STATUS_ENUM_CANCEL:
+ case PK_STATUS_ENUM_FINISHED:
+ case PK_STATUS_ENUM_UNKNOWN:
+ break;
+ case PK_STATUS_ENUM_WAIT:
+ case PK_STATUS_ENUM_WAITING_FOR_LOCK:
+ case PK_STATUS_ENUM_WAITING_FOR_AUTH:
+ plugin_status = GS_PLUGIN_STATUS_WAITING;
+ break;
+ case PK_STATUS_ENUM_LOADING_CACHE:
+ case PK_STATUS_ENUM_TEST_COMMIT:
+ case PK_STATUS_ENUM_RUNNING:
+ case PK_STATUS_ENUM_SIG_CHECK:
+ case PK_STATUS_ENUM_REFRESH_CACHE:
+ plugin_status = GS_PLUGIN_STATUS_SETUP;
+ break;
+ case PK_STATUS_ENUM_DOWNLOAD:
+ case PK_STATUS_ENUM_DOWNLOAD_REPOSITORY:
+ case PK_STATUS_ENUM_DOWNLOAD_PACKAGELIST:
+ case PK_STATUS_ENUM_DOWNLOAD_FILELIST:
+ case PK_STATUS_ENUM_DOWNLOAD_CHANGELOG:
+ case PK_STATUS_ENUM_DOWNLOAD_GROUP:
+ case PK_STATUS_ENUM_DOWNLOAD_UPDATEINFO:
+ plugin_status = GS_PLUGIN_STATUS_DOWNLOADING;
+ break;
+ case PK_STATUS_ENUM_INSTALL:
+ case PK_STATUS_ENUM_UPDATE:
+ plugin_status = GS_PLUGIN_STATUS_INSTALLING;
+ break;
+ case PK_STATUS_ENUM_CLEANUP:
+ case PK_STATUS_ENUM_REMOVE:
+ plugin_status = GS_PLUGIN_STATUS_REMOVING;
+ break;
+ case PK_STATUS_ENUM_REQUEST:
+ case PK_STATUS_ENUM_QUERY:
+ case PK_STATUS_ENUM_INFO:
+ case PK_STATUS_ENUM_DEP_RESOLVE:
+ plugin_status = GS_PLUGIN_STATUS_QUERYING;
+ break;
+ default:
+ g_warning ("no mapping for %s",
+ pk_status_enum_to_string (status));
+ break;
+ }
+ return plugin_status;
+}
+
+gboolean
+gs_plugin_packagekit_error_convert (GError **error)
+{
+ GError *error_tmp;
+
+ if (error == NULL)
+ return FALSE;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gio (error))
+ return TRUE;
+
+ /* not set */
+ error_tmp = *error;
+ if (error_tmp == NULL)
+ return FALSE;
+
+ /* already correct */
+ if (error_tmp->domain == GS_PLUGIN_ERROR)
+ return TRUE;
+
+ /* get a local version */
+ if (error_tmp->domain != PK_CLIENT_ERROR)
+ return FALSE;
+
+ /* daemon errors */
+ if (error_tmp->code <= 0xff) {
+ switch (error_tmp->code) {
+ case PK_CLIENT_ERROR_CANNOT_START_DAEMON:
+ case PK_CLIENT_ERROR_INVALID_FILE:
+ case PK_CLIENT_ERROR_NOT_SUPPORTED:
+ error_tmp->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ /* this is working around a bug in libpackagekit-glib */
+ case PK_ERROR_ENUM_TRANSACTION_CANCELLED:
+ error_tmp->code = GS_PLUGIN_ERROR_CANCELLED;
+ break;
+ default:
+ error_tmp->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+
+ /* backend errors */
+ } else {
+ switch (error_tmp->code - 0xff) {
+ case PK_ERROR_ENUM_INVALID_PACKAGE_FILE:
+ case PK_ERROR_ENUM_NOT_SUPPORTED:
+ case PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED:
+ error_tmp->code = GS_PLUGIN_ERROR_NOT_SUPPORTED;
+ break;
+ case PK_ERROR_ENUM_NO_CACHE:
+ case PK_ERROR_ENUM_NO_NETWORK:
+ error_tmp->code = GS_PLUGIN_ERROR_NO_NETWORK;
+ break;
+ case PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED:
+ case PK_ERROR_ENUM_NO_MORE_MIRRORS_TO_TRY:
+ case PK_ERROR_ENUM_CANNOT_FETCH_SOURCES:
+ error_tmp->code = GS_PLUGIN_ERROR_DOWNLOAD_FAILED;
+ break;
+ case PK_ERROR_ENUM_BAD_GPG_SIGNATURE:
+ case PK_ERROR_ENUM_CANNOT_INSTALL_REPO_UNSIGNED:
+ case PK_ERROR_ENUM_CANNOT_UPDATE_REPO_UNSIGNED:
+ case PK_ERROR_ENUM_GPG_FAILURE:
+ case PK_ERROR_ENUM_MISSING_GPG_SIGNATURE:
+ case PK_ERROR_ENUM_NO_LICENSE_AGREEMENT:
+ case PK_ERROR_ENUM_NOT_AUTHORIZED:
+ case PK_ERROR_ENUM_RESTRICTED_DOWNLOAD:
+ error_tmp->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ break;
+ case PK_ERROR_ENUM_NO_SPACE_ON_DEVICE:
+ error_tmp->code = GS_PLUGIN_ERROR_NO_SPACE;
+ break;
+ case PK_ERROR_ENUM_CANCELLED_PRIORITY:
+ case PK_ERROR_ENUM_TRANSACTION_CANCELLED:
+ error_tmp->code = GS_PLUGIN_ERROR_CANCELLED;
+ break;
+ default:
+ error_tmp->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ }
+ error_tmp->domain = GS_PLUGIN_ERROR;
+ return TRUE;
+}
+
+gboolean
+gs_plugin_packagekit_results_valid (PkResults *results, GError **error)
+{
+ g_autoptr(PkError) error_code = NULL;
+
+ /* method failed? */
+ if (results == NULL) {
+ gs_plugin_packagekit_error_convert (error);
+ return FALSE;
+ }
+
+ /* check error code */
+ error_code = pk_results_get_error_code (results);
+ if (error_code != NULL) {
+ g_set_error_literal (error,
+ PK_CLIENT_ERROR,
+ pk_error_get_code (error_code),
+ pk_error_get_details (error_code));
+ gs_plugin_packagekit_error_convert (error);
+ return FALSE;
+ }
+
+ /* all good */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_packagekit_add_results (GsPlugin *plugin,
+ GsAppList *list,
+ PkResults *results,
+ GError **error)
+{
+ const gchar *package_id;
+ guint i;
+ PkPackage *package;
+ g_autoptr(GHashTable) installed = NULL;
+ g_autoptr(PkError) error_code = NULL;
+ g_autoptr(GPtrArray) array_filtered = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ g_return_val_if_fail (GS_IS_PLUGIN (plugin), FALSE);
+ g_return_val_if_fail (GS_IS_APP_LIST (list), FALSE);
+
+ /* check error code */
+ error_code = pk_results_get_error_code (results);
+ if (error_code != NULL) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "failed to get-packages: %s, %s",
+ pk_error_enum_to_string (pk_error_get_code (error_code)),
+ pk_error_get_details (error_code));
+ return FALSE;
+ }
+
+ /* add all installed packages to a hash */
+ installed = g_hash_table_new (g_str_hash, g_str_equal);
+ array = pk_results_get_package_array (results);
+ for (i = 0; i < array->len; i++) {
+ package = g_ptr_array_index (array, i);
+ if (pk_package_get_info (package) != PK_INFO_ENUM_INSTALLED)
+ continue;
+ g_hash_table_insert (installed,
+ (const gpointer) pk_package_get_name (package),
+ (const gpointer) pk_package_get_id (package));
+ }
+
+ /* if the search returns more than one package with the same name,
+ * ignore everything with that name except the installed package */
+ array_filtered = g_ptr_array_new ();
+ for (i = 0; i < array->len; i++) {
+ package = g_ptr_array_index (array, i);
+ package_id = g_hash_table_lookup (installed, pk_package_get_name (package));
+ if (pk_package_get_info (package) == PK_INFO_ENUM_INSTALLED || package_id == NULL) {
+ g_ptr_array_add (array_filtered, package);
+ } else {
+ g_debug ("ignoring available %s as installed %s also reported",
+ pk_package_get_id (package), package_id);
+ }
+ }
+
+ /* process packages */
+ for (i = 0; i < array_filtered->len; i++) {
+ g_autoptr(GsApp) app = NULL;
+ package = g_ptr_array_index (array_filtered, i);
+
+ app = gs_plugin_cache_lookup (plugin, pk_package_get_id (package));
+ if (app == NULL) {
+ app = gs_app_new (NULL);
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_add_source (app, pk_package_get_name (package));
+ gs_app_add_source_id (app, pk_package_get_id (package));
+ gs_plugin_cache_add (plugin, pk_package_get_id (package), app);
+ }
+ gs_app_set_name (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_package_get_name (package));
+ gs_app_set_summary (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_package_get_summary (package));
+ gs_app_set_metadata (app, "GnomeSoftware::Creator",
+ gs_plugin_get_name (plugin));
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_app_set_version (app, pk_package_get_version (package));
+ switch (pk_package_get_info (package)) {
+ case PK_INFO_ENUM_INSTALLED:
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ break;
+ case PK_INFO_ENUM_AVAILABLE:
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ break;
+ case PK_INFO_ENUM_INSTALLING:
+ case PK_INFO_ENUM_UPDATING:
+ case PK_INFO_ENUM_DOWNGRADING:
+ case PK_INFO_ENUM_OBSOLETING:
+ case PK_INFO_ENUM_UNTRUSTED:
+ break;
+ case PK_INFO_ENUM_UNAVAILABLE:
+ case PK_INFO_ENUM_REMOVING:
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+ break;
+ default:
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ g_warning ("unknown info state of %s",
+ pk_info_enum_to_string (pk_package_get_info (package)));
+ }
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_list_add (list, app);
+ }
+ return TRUE;
+}
+
+void
+gs_plugin_packagekit_resolve_packages_app (GsPlugin *plugin,
+ GPtrArray *packages,
+ GsApp *app)
+{
+ GPtrArray *sources;
+ PkPackage *package;
+ const gchar *pkgname;
+ guint i, j;
+ guint number_available = 0;
+ guint number_installed = 0;
+
+ /* find any packages that match the package name */
+ number_installed = 0;
+ number_available = 0;
+ sources = gs_app_get_sources (app);
+ for (j = 0; j < sources->len; j++) {
+ pkgname = g_ptr_array_index (sources, j);
+ for (i = 0; i < packages->len; i++) {
+ package = g_ptr_array_index (packages, i);
+ if (g_strcmp0 (pk_package_get_name (package), pkgname) == 0) {
+ gs_plugin_packagekit_set_metadata_from_package (plugin, app, package);
+ switch (pk_package_get_info (package)) {
+ case PK_INFO_ENUM_INSTALLED:
+ number_installed++;
+ break;
+ case PK_INFO_ENUM_AVAILABLE:
+ number_available++;
+ break;
+ case PK_INFO_ENUM_UNAVAILABLE:
+ number_available++;
+ break;
+ default:
+ /* should we expect anything else? */
+ break;
+ }
+ }
+ }
+ }
+
+ /* if *all* the source packages for the app are installed then the
+ * application is considered completely installed */
+ if (number_installed == sources->len && number_available == 0) {
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ } else if (number_installed + number_available == sources->len) {
+ /* if all the source packages are installed and all the rest
+ * of the packages are available then the app is available */
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ } else if (number_installed + number_available > sources->len) {
+ /* we have more packages returned than source packages */
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ } else if (number_installed + number_available < sources->len) {
+ g_autofree gchar *tmp = NULL;
+ /* we have less packages returned than source packages */
+ tmp = gs_app_to_string (app);
+ g_debug ("Failed to find all packages for:\n%s", tmp);
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+ }
+}
+
+void
+gs_plugin_packagekit_set_metadata_from_package (GsPlugin *plugin,
+ GsApp *app,
+ PkPackage *package)
+{
+ const gchar *data;
+
+ gs_plugin_packagekit_set_packaging_format (plugin, app);
+ gs_app_set_management_plugin (app, "packagekit");
+ gs_app_add_source (app, pk_package_get_name (package));
+ gs_app_add_source_id (app, pk_package_get_id (package));
+
+ /* set origin */
+ if (gs_app_get_origin (app) == NULL) {
+ data = pk_package_get_data (package);
+ if (g_str_has_prefix (data, "installed:"))
+ data += 10;
+ gs_app_set_origin (app, data);
+ }
+
+ /* set unavailable state */
+ if (pk_package_get_info (package) == PK_INFO_ENUM_UNAVAILABLE) {
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+ if (gs_app_get_size_installed (app) == 0)
+ gs_app_set_size_installed (app, GS_APP_SIZE_UNKNOWABLE);
+ if (gs_app_get_size_download (app) == 0)
+ gs_app_set_size_download (app, GS_APP_SIZE_UNKNOWABLE);
+ }
+ if (gs_app_get_version (app) == NULL)
+ gs_app_set_version (app, pk_package_get_version (package));
+ gs_app_set_name (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_package_get_name (package));
+ gs_app_set_summary (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_package_get_summary (package));
+}
+
+/* Hash functions which compare PkPackageIds on NAME, VERSION and ARCH, but not DATA.
+ * This is because some backends do not append the origin.
+ *
+ * Borrowing some implementation details from pk-package-id.c, a package
+ * ID is a semicolon-separated list of NAME;[VERSION];[ARCH];[DATA],
+ * so a comparison which ignores DATA is just a strncmp() up to and
+ * including the final semicolon.
+ *
+ * Doing it this way means zero allocations, which allows the hash and
+ * equality functions to be fast. This is important when dealing with
+ * large refine() package lists.
+ *
+ * The hash and equality functions assume that the IDs they are passed are
+ * valid. */
+static guint
+package_id_hash (gconstpointer key)
+{
+ const gchar *package_id = key;
+ gchar *no_data;
+ gsize i, last_semicolon = 0;
+
+ /* find the last semicolon, which starts the DATA section */
+ for (i = 0; package_id[i] != '\0'; i++) {
+ if (package_id[i] == ';')
+ last_semicolon = i;
+ }
+
+ /* exit early if the DATA section was empty */
+ if (last_semicolon + 1 == i)
+ return g_str_hash (package_id);
+
+ /* extract up to (and including) the last semicolon into a local string */
+ no_data = g_alloca (last_semicolon + 2);
+ memcpy (no_data, package_id, last_semicolon + 1);
+ no_data[last_semicolon + 1] = '\0';
+
+ return g_str_hash (no_data);
+}
+
+static gboolean
+package_id_equal (gconstpointer a,
+ gconstpointer b)
+{
+ const gchar *package_id_a = a;
+ const gchar *package_id_b = b;
+ gsize i, n_semicolons = 0;
+
+ /* compare up to and including the last semicolon */
+ for (i = 0; package_id_a[i] != '\0' && package_id_b[i] != '\0'; i++) {
+ if (package_id_a[i] != package_id_b[i])
+ return FALSE;
+ if (package_id_a[i] == ';')
+ n_semicolons++;
+ if (n_semicolons == 4)
+ return TRUE;
+ }
+
+ return package_id_a[i] == package_id_b[i];
+}
+
+GHashTable *
+gs_plugin_packagekit_details_array_to_hash (GPtrArray *array)
+{
+ g_autoptr(GHashTable) details_collection = NULL;
+
+ details_collection = g_hash_table_new_full (package_id_hash, package_id_equal,
+ NULL, NULL);
+
+ for (gsize i = 0; i < array->len; i++) {
+ PkDetails *details = g_ptr_array_index (array, i);
+ g_hash_table_insert (details_collection,
+ pk_details_get_package_id (details),
+ details);
+ }
+
+ return g_steal_pointer (&details_collection);
+}
+
+void
+gs_plugin_packagekit_refine_details_app (GsPlugin *plugin,
+ GHashTable *details_collection,
+ GsApp *app)
+{
+ GPtrArray *source_ids;
+ PkDetails *details;
+ const gchar *package_id;
+ guint j;
+ guint64 size = 0;
+
+ /* @source_ids can have as many as 200 elements (google-noto); typically
+ * it has 1 or 2
+ *
+ * @details_collection is typically a large list of apps in the
+ * repository, on the order of 400 or 700 apps */
+ source_ids = gs_app_get_source_ids (app);
+ for (j = 0; j < source_ids->len; j++) {
+ package_id = g_ptr_array_index (source_ids, j);
+ details = g_hash_table_lookup (details_collection, package_id);
+ if (details == NULL)
+ continue;
+
+ if (gs_app_get_license (app) == NULL) {
+ g_autofree gchar *license_spdx = NULL;
+ license_spdx = as_utils_license_to_spdx (pk_details_get_license (details));
+ if (license_spdx != NULL) {
+ gs_app_set_license (app,
+ GS_APP_QUALITY_LOWEST,
+ license_spdx);
+ }
+ }
+ if (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE) == NULL) {
+ gs_app_set_url (app,
+ AS_URL_KIND_HOMEPAGE,
+ pk_details_get_url (details));
+ }
+ if (gs_app_get_description (app) == NULL) {
+ gs_app_set_description (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_details_get_description (details));
+ }
+ size += pk_details_get_size (details);
+ }
+
+ /* the size is the size of all sources */
+ if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE) {
+ if (size > 0 && gs_app_get_size_installed (app) == 0)
+ gs_app_set_size_installed (app, size);
+ if (size > 0 && gs_app_get_size_download (app) == 0)
+ gs_app_set_size_download (app, size);
+ } else if (gs_app_is_installed (app)) {
+ if (gs_app_get_size_download (app) == 0)
+ gs_app_set_size_download (app, GS_APP_SIZE_UNKNOWABLE);
+ if (size > 0 && gs_app_get_size_installed (app) == 0)
+ gs_app_set_size_installed (app, size);
+ } else {
+ if (gs_app_get_size_installed (app) == 0)
+ gs_app_set_size_installed (app, GS_APP_SIZE_UNKNOWABLE);
+ if (size > 0 && gs_app_get_size_download (app) == 0)
+ gs_app_set_size_download (app, size);
+ }
+}
+
+void
+gs_plugin_packagekit_set_packaging_format (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_plugin_check_distro_id (plugin, "fedora") ||
+ gs_plugin_check_distro_id (plugin, "rhel")) {
+ gs_app_set_metadata (app, "GnomeSoftware::PackagingFormat", "RPM");
+ } else if (gs_plugin_check_distro_id (plugin, "debian") ||
+ gs_plugin_check_distro_id (plugin, "ubuntu")) {
+ gs_app_set_metadata (app, "GnomeSoftware::PackagingFormat", "deb");
+ }
+}
diff --git a/plugins/packagekit/packagekit-common.h b/plugins/packagekit/packagekit-common.h
new file mode 100644
index 0000000..9f52368
--- /dev/null
+++ b/plugins/packagekit/packagekit-common.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib.h>
+#include <gnome-software.h>
+
+#include <packagekit-glib2/packagekit.h>
+
+G_BEGIN_DECLS
+
+GsPluginStatus packagekit_status_enum_to_plugin_status (PkStatusEnum status);
+
+gboolean gs_plugin_packagekit_add_results (GsPlugin *plugin,
+ GsAppList *list,
+ PkResults *results,
+ GError **error);
+gboolean gs_plugin_packagekit_error_convert (GError **error);
+gboolean gs_plugin_packagekit_results_valid (PkResults *results,
+ GError **error);
+void gs_plugin_packagekit_resolve_packages_app (GsPlugin *plugin,
+ GPtrArray *packages,
+ GsApp *app);
+void gs_plugin_packagekit_set_metadata_from_package (GsPlugin *plugin,
+ GsApp *app,
+ PkPackage *package);
+GHashTable * gs_plugin_packagekit_details_array_to_hash (GPtrArray *array);
+void gs_plugin_packagekit_refine_details_app (GsPlugin *plugin,
+ GHashTable *details_collection,
+ GsApp *app);
+void gs_plugin_packagekit_set_packaging_format (GsPlugin *plugin,
+ GsApp *app);
+
+G_END_DECLS
diff --git a/plugins/packagekit/tests/build-rpm.sh b/plugins/packagekit/tests/build-rpm.sh
new file mode 100755
index 0000000..90a4163
--- /dev/null
+++ b/plugins/packagekit/tests/build-rpm.sh
@@ -0,0 +1,2 @@
+rpmbuild -ba chiron.spec
+cp ~/rpmbuild/RPMS/*/chiron*.rpm .
diff --git a/plugins/packagekit/tests/chiron-1.1-1.fc24.x86_64.rpm b/plugins/packagekit/tests/chiron-1.1-1.fc24.x86_64.rpm
new file mode 100644
index 0000000..1453f48
--- /dev/null
+++ b/plugins/packagekit/tests/chiron-1.1-1.fc24.x86_64.rpm
Binary files differ
diff --git a/plugins/packagekit/tests/chiron.spec b/plugins/packagekit/tests/chiron.spec
new file mode 100644
index 0000000..6cbba7e
--- /dev/null
+++ b/plugins/packagekit/tests/chiron.spec
@@ -0,0 +1,22 @@
+Summary: Single line synopsis
+Name: chiron
+Version: 1.1
+Release: 1%{?dist}
+URL: http://127.0.0.1/
+License: GPLv2+
+
+%description
+This is the first paragraph in the example package spec file.
+
+This is the second paragraph.
+
+%install
+mkdir -p $RPM_BUILD_ROOT/%{_bindir}
+touch $RPM_BUILD_ROOT/%{_bindir}/chiron
+
+%files
+%{_bindir}/chiron
+
+%changelog
+* Tue Apr 26 2016 Richard Hughes <richard@hughsie.com> - 1.1-1
+- Initial version
diff --git a/plugins/repos/gs-plugin-repos.c b/plugins/repos/gs-plugin-repos.c
new file mode 100644
index 0000000..a35fc80
--- /dev/null
+++ b/plugins/repos/gs-plugin-repos.c
@@ -0,0 +1,247 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+struct GsPluginData {
+ GHashTable *fns; /* origin : filename */
+ GHashTable *urls; /* origin : url */
+ GFileMonitor *monitor;
+ GMutex mutex;
+ gchar *reposdir;
+ gboolean valid;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ g_mutex_init (&priv->mutex);
+
+ /* for debugging and the self tests */
+ priv->reposdir = g_strdup (g_getenv ("GS_SELF_TEST_REPOS_DIR"));
+ if (priv->reposdir == NULL)
+ priv->reposdir = g_strdup ("/etc/yum.repos.d");
+
+ /* plugin only makes sense if this exists at startup */
+ if (!g_file_test (priv->reposdir, G_FILE_TEST_EXISTS)) {
+ gs_plugin_set_enabled (plugin, FALSE);
+ return;
+ }
+
+ /* we also watch this for changes */
+ priv->fns = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ priv->urls = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ /* need application IDs */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refine");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "rpm-ostree");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_free (priv->reposdir);
+ if (priv->fns != NULL)
+ g_hash_table_unref (priv->fns);
+ if (priv->urls != NULL)
+ g_hash_table_unref (priv->urls);
+ if (priv->monitor != NULL)
+ g_object_unref (priv->monitor);
+ g_mutex_clear (&priv->mutex);
+}
+
+/* mutex must be held */
+static gboolean
+gs_plugin_repos_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GDir) dir = NULL;
+ const gchar *fn;
+
+ /* already valid */
+ if (priv->valid)
+ return TRUE;
+
+ /* clear existing */
+ g_hash_table_remove_all (priv->fns);
+ g_hash_table_remove_all (priv->urls);
+
+ /* search all files */
+ dir = g_dir_open (priv->reposdir, 0, error);
+ if (dir == NULL) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ while ((fn = g_dir_read_name (dir)) != NULL) {
+ g_autofree gchar *filename = NULL;
+ g_auto(GStrv) groups = NULL;
+ g_autoptr(GKeyFile) kf = g_key_file_new ();
+ guint i;
+
+ /* not a repo */
+ if (!g_str_has_suffix (fn, ".repo"))
+ continue;
+
+ /* load file */
+ filename = g_build_filename (priv->reposdir, fn, NULL);
+ if (!g_key_file_load_from_file (kf, filename,
+ G_KEY_FILE_NONE,
+ error)) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+
+ /* we can have multiple repos in one file */
+ groups = g_key_file_get_groups (kf, NULL);
+ for (i = 0; groups[i] != NULL; i++) {
+ g_autofree gchar *tmp = NULL;
+
+ g_hash_table_insert (priv->fns,
+ g_strdup (groups[i]),
+ g_strdup (filename));
+
+ tmp = g_key_file_get_string (kf, groups[i], "baseurl", NULL);
+ if (tmp != NULL) {
+ g_hash_table_insert (priv->urls,
+ g_strdup (groups[i]),
+ g_strdup (tmp));
+ continue;
+ }
+
+ tmp = g_key_file_get_string (kf, groups[i], "metalink", NULL);
+ if (tmp != NULL) {
+ g_hash_table_insert (priv->urls,
+ g_strdup (groups[i]),
+ g_strdup (tmp));
+ continue;
+ }
+ }
+ }
+
+ /* success */
+ priv->valid = TRUE;
+ return TRUE;
+}
+
+static void
+gs_plugin_repos_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ priv->valid = FALSE;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GFile) file = g_file_new_for_path (priv->reposdir);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ /* watch for changes */
+ priv->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, cancellable, error);
+ if (priv->monitor == NULL) {
+ gs_utils_error_convert_gio (error);
+ return FALSE;
+ }
+ g_signal_connect (priv->monitor, "changed",
+ G_CALLBACK (gs_plugin_repos_changed_cb), plugin);
+
+ /* unconditionally at startup */
+ return gs_plugin_repos_setup (plugin, cancellable, error);
+}
+
+static gboolean
+refine_app_locked (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *tmp;
+
+ /* not required */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME) == 0)
+ return TRUE;
+ if (gs_app_get_origin_hostname (app) != NULL)
+ return TRUE;
+
+ /* make sure we don't end up refining flatpak repos */
+ if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_PACKAGE)
+ return TRUE;
+
+ /* ensure valid */
+ if (!gs_plugin_repos_setup (plugin, cancellable, error))
+ return FALSE;
+
+ /* find hostname */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_SOURCE:
+ if (gs_app_get_id (app) == NULL)
+ return TRUE;
+ tmp = g_hash_table_lookup (priv->urls, gs_app_get_id (app));
+ if (tmp != NULL)
+ gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, tmp);
+ break;
+ default:
+ if (gs_app_get_origin (app) == NULL)
+ return TRUE;
+ tmp = g_hash_table_lookup (priv->urls, gs_app_get_origin (app));
+ if (tmp != NULL)
+ gs_app_set_origin_hostname (app, tmp);
+ break;
+ }
+
+ /* find filename */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_SOURCE:
+ if (gs_app_get_id (app) == NULL)
+ return TRUE;
+ tmp = g_hash_table_lookup (priv->fns, gs_app_get_id (app));
+ if (tmp != NULL)
+ gs_app_set_metadata (app, "repos::repo-filename", tmp);
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->mutex);
+
+ /* nothing to do here */
+ if ((flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME) == 0)
+ return TRUE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app_locked (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/plugins/repos/gs-self-test.c b/plugins/repos/gs-self-test.c
new file mode 100644
index 0000000..ff5b3e7
--- /dev/null
+++ b/plugins/repos/gs-self-test.c
@@ -0,0 +1,82 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static void
+gs_plugins_repos_func (GsPluginLoader *plugin_loader)
+{
+ gboolean ret;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get the extra bits */
+ app = gs_app_new ("testrepos.desktop");
+ gs_app_set_origin (app, "utopia");
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpstr (gs_app_get_origin_hostname (app), ==, "people.freedesktop.org");
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean ret;
+ g_autofree gchar *reposdir = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "repos",
+ NULL
+ };
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* dummy data */
+ reposdir = gs_test_get_filename (TESTDATADIR, "yum.repos.d");
+ g_assert (reposdir != NULL);
+ g_setenv ("GS_SELF_TEST_REPOS_DIR", reposdir, TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/repos",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_repos_func);
+
+ return g_test_run ();
+}
diff --git a/plugins/repos/meson.build b/plugins/repos/meson.build
new file mode 100644
index 0000000..201b137
--- /dev/null
+++ b/plugins/repos/meson.build
@@ -0,0 +1,41 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginRepos"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+
+shared_module(
+ 'gs_plugin_repos',
+ sources : 'gs-plugin-repos.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : plugin_libs,
+ link_with : [
+ libgnomesoftware
+ ]
+)
+
+if get_option('tests')
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+ e = executable(
+ 'gs-self-test-repos',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-repos', e, suite: ['plugins', 'repos'], env: test_env)
+endif
diff --git a/plugins/repos/tests/yum.repos.d/utopia.repo b/plugins/repos/tests/yum.repos.d/utopia.repo
new file mode 100644
index 0000000..e912ec4
--- /dev/null
+++ b/plugins/repos/tests/yum.repos.d/utopia.repo
@@ -0,0 +1,5 @@
+[utopia]
+name=utopia for Fedora $releasever
+baseurl=http://people.freedesktop.org/~hughsient/fedora/$releasever/x86_64/
+enabled=1
+gpgcheck=0
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
new file mode 100644
index 0000000..e4977bb
--- /dev/null
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
@@ -0,0 +1,1829 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017-2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gnome-software.h>
+
+#include <fcntl.h>
+#include <gio/gio.h>
+#include <gio/gunixfdlist.h>
+#include <glib/gstdio.h>
+#include <libdnf/libdnf.h>
+#include <ostree.h>
+#include <rpm/rpmdb.h>
+#include <rpm/rpmlib.h>
+#include <rpm/rpmts.h>
+#include <rpmostree.h>
+
+#include "gs-rpmostree-generated.h"
+
+/* This shows up in the `rpm-ostree status` as the software that
+ * initiated the update.
+ */
+#define GS_RPMOSTREE_CLIENT_ID PACKAGE_NAME
+
+G_DEFINE_AUTO_CLEANUP_FREE_FUNC(Header, headerFree, NULL)
+G_DEFINE_AUTO_CLEANUP_FREE_FUNC(rpmts, rpmtsFree, NULL);
+G_DEFINE_AUTO_CLEANUP_FREE_FUNC(rpmdbMatchIterator, rpmdbFreeIterator, NULL);
+
+struct GsPluginData {
+ GMutex mutex;
+ GsRPMOSTreeOS *os_proxy;
+ GsRPMOSTreeSysroot *sysroot_proxy;
+ OstreeRepo *ot_repo;
+ OstreeSysroot *ot_sysroot;
+ DnfContext *dnf_context;
+ gboolean update_triggered;
+};
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+
+ /* only works on OSTree */
+ if (!g_file_test ("/run/ostree-booted", G_FILE_TEST_EXISTS)) {
+ gs_plugin_set_enabled (plugin, FALSE);
+ return;
+ }
+
+ g_mutex_init (&priv->mutex);
+
+ /* open transaction */
+ rpmReadConfigFiles (NULL, NULL);
+
+ /* rpm-ostree is already a daemon with a DBus API; hence it makes
+ * more sense to use a custom plugin instead of using PackageKit.
+ */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-history");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-local");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-offline");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-proxy");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-refine");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-refine-repos");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-refresh");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-upgrade");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "packagekit-url-to-app");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "systemd-updates");
+
+ /* need pkgname */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ if (priv->os_proxy != NULL)
+ g_object_unref (priv->os_proxy);
+ if (priv->sysroot_proxy != NULL)
+ g_object_unref (priv->sysroot_proxy);
+ if (priv->ot_sysroot != NULL)
+ g_object_unref (priv->ot_sysroot);
+ if (priv->ot_repo != NULL)
+ g_object_unref (priv->ot_repo);
+ if (priv->dnf_context != NULL)
+ g_object_unref (priv->dnf_context);
+ g_mutex_clear (&priv->mutex);
+}
+
+static void
+gs_rpmostree_error_convert (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return;
+
+ /* parse remote RPM_OSTREED_ERROR */
+ if (g_dbus_error_is_remote_error (error)) {
+ g_autofree gchar *remote_error = g_dbus_error_get_remote_error (error);
+
+ g_dbus_error_strip_remote_error (error);
+
+ if (g_strcmp0 (remote_error, "org.projectatomic.rpmostreed.Error.NotAuthorized") == 0) {
+ error->code = GS_PLUGIN_ERROR_NO_SECURITY;
+ } else if (g_str_has_prefix (remote_error, "org.projectatomic.rpmostreed.Error")) {
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ } else {
+ g_warning ("can't reliably fixup remote error %s", remote_error);
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+ return;
+ }
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gio (perror))
+ return;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gdbus (perror))
+ return;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GVariantBuilder) options_builder = NULL;
+
+ /* Create a proxy for sysroot */
+ if (priv->sysroot_proxy == NULL) {
+ priv->sysroot_proxy = gs_rpmostree_sysroot_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ "org.projectatomic.rpmostree1",
+ "/org/projectatomic/rpmostree1/Sysroot",
+ cancellable,
+ error);
+ if (priv->sysroot_proxy == NULL) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ /* Create a proxy for currently booted OS */
+ if (priv->os_proxy == NULL) {
+ g_autofree gchar *os_object_path = NULL;
+
+ os_object_path = gs_rpmostree_sysroot_dup_booted (priv->sysroot_proxy);
+ if (os_object_path == NULL &&
+ !gs_rpmostree_sysroot_call_get_os_sync (priv->sysroot_proxy,
+ "",
+ &os_object_path,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ priv->os_proxy = gs_rpmostree_os_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ "org.projectatomic.rpmostree1",
+ os_object_path,
+ cancellable,
+ error);
+ if (priv->os_proxy == NULL) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ options_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (options_builder, "{sv}", "id",
+ g_variant_new_string (GS_RPMOSTREE_CLIENT_ID));
+ /* Register as a client so that the rpm-ostree daemon doesn't exit */
+ if (!gs_rpmostree_sysroot_call_register_client_sync (priv->sysroot_proxy,
+ g_variant_builder_end (options_builder),
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ /* Load ostree sysroot and repo */
+ if (priv->ot_sysroot == NULL) {
+ g_autofree gchar *sysroot_path = NULL;
+ g_autoptr(GFile) sysroot_file = NULL;
+
+ sysroot_path = gs_rpmostree_sysroot_dup_path (priv->sysroot_proxy);
+ sysroot_file = g_file_new_for_path (sysroot_path);
+
+ priv->ot_sysroot = ostree_sysroot_new (sysroot_file);
+ if (!ostree_sysroot_load (priv->ot_sysroot, cancellable, error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!ostree_sysroot_get_repo (priv->ot_sysroot, &priv->ot_repo, cancellable, error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+app_set_rpm_ostree_packaging_format (GsApp *app)
+{
+ gs_app_set_metadata (app, "GnomeSoftware::PackagingFormat", "RPM");
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_PACKAGE &&
+ gs_app_get_scope (app) == AS_APP_SCOPE_SYSTEM) {
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ }
+
+ if (gs_app_get_kind (app) == AS_APP_KIND_OS_UPGRADE) {
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ }
+}
+
+typedef struct {
+ GsPlugin *plugin;
+ GError *error;
+ GMainLoop *loop;
+ GsApp *app;
+ gboolean complete;
+} TransactionProgress;
+
+static TransactionProgress *
+transaction_progress_new (void)
+{
+ TransactionProgress *self;
+
+ self = g_slice_new0 (TransactionProgress);
+ self->loop = g_main_loop_new (NULL, FALSE);
+
+ return self;
+}
+
+static void
+transaction_progress_free (TransactionProgress *self)
+{
+ g_clear_object (&self->plugin);
+ g_clear_error (&self->error);
+ g_main_loop_unref (self->loop);
+ g_clear_object (&self->app);
+ g_slice_free (TransactionProgress, self);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(TransactionProgress, transaction_progress_free);
+
+static void
+transaction_progress_end (TransactionProgress *self)
+{
+ g_main_loop_quit (self->loop);
+}
+
+static void
+on_transaction_progress (GDBusProxy *proxy,
+ gchar *sender_name,
+ gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ TransactionProgress *tp = user_data;
+
+ if (g_strcmp0 (signal_name, "PercentProgress") == 0) {
+ const gchar *message = NULL;
+ guint32 percentage;
+
+ g_variant_get_child (parameters, 0, "&s", &message);
+ g_variant_get_child (parameters, 1, "u", &percentage);
+ g_debug ("PercentProgress: %u, %s\n", percentage, message);
+
+ if (tp->app != NULL)
+ gs_app_set_progress (tp->app, (guint) percentage);
+
+ if (tp->app != NULL && tp->plugin != NULL) {
+ GsPluginStatus plugin_status;
+
+ switch (gs_app_get_state (tp->app)) {
+ case AS_APP_STATE_INSTALLING:
+ plugin_status = GS_PLUGIN_STATUS_INSTALLING;
+ break;
+ case AS_APP_STATE_REMOVING:
+ plugin_status = GS_PLUGIN_STATUS_REMOVING;
+ break;
+ default:
+ plugin_status = GS_PLUGIN_STATUS_DOWNLOADING;
+ break;
+ }
+ gs_plugin_status_update (tp->plugin, tp->app, plugin_status);
+ }
+ } else if (g_strcmp0 (signal_name, "Finished") == 0) {
+ if (tp->error == NULL) {
+ g_autofree gchar *error_message = NULL;
+ gboolean success = FALSE;
+
+ g_variant_get (parameters, "(bs)", &success, &error_message);
+
+ if (!success) {
+ tp->error = g_dbus_error_new_for_dbus_error ("org.projectatomic.rpmostreed.Error.Failed",
+ error_message);
+ }
+ }
+
+ transaction_progress_end (tp);
+ }
+}
+
+static void
+cancelled_handler (GCancellable *cancellable,
+ gpointer user_data)
+{
+ GsRPMOSTreeTransaction *transaction = user_data;
+ gs_rpmostree_transaction_call_cancel_sync (transaction, NULL, NULL);
+}
+
+static gboolean
+gs_rpmostree_transaction_get_response_sync (GsRPMOSTreeSysroot *sysroot_proxy,
+ const gchar *transaction_address,
+ TransactionProgress *tp,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsRPMOSTreeTransaction *transaction = NULL;
+ g_autoptr(GDBusConnection) peer_connection = NULL;
+ gint cancel_handler;
+ gulong signal_handler = 0;
+ gboolean success = FALSE;
+ gboolean just_started = FALSE;
+
+ peer_connection = g_dbus_connection_new_for_address_sync (transaction_address,
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+ NULL,
+ cancellable,
+ error);
+
+ if (peer_connection == NULL)
+ goto out;
+
+ transaction = gs_rpmostree_transaction_proxy_new_sync (peer_connection,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "/",
+ cancellable,
+ error);
+ if (transaction == NULL)
+ goto out;
+
+ /* setup cancel handler */
+ cancel_handler = g_cancellable_connect (cancellable,
+ G_CALLBACK (cancelled_handler),
+ transaction, NULL);
+
+ signal_handler = g_signal_connect (transaction, "g-signal",
+ G_CALLBACK (on_transaction_progress),
+ tp);
+
+ /* Tell the server we're ready to receive signals. */
+ if (!gs_rpmostree_transaction_call_start_sync (transaction,
+ &just_started,
+ cancellable,
+ error))
+ goto out;
+
+ g_main_loop_run (tp->loop);
+
+ g_cancellable_disconnect (cancellable, cancel_handler);
+
+ if (!g_cancellable_set_error_if_cancelled (cancellable, error)) {
+ if (tp->error) {
+ g_propagate_error (error, g_steal_pointer (&tp->error));
+ } else {
+ success = TRUE;
+ }
+ }
+
+out:
+ if (signal_handler)
+ g_signal_handler_disconnect (transaction, signal_handler);
+ if (transaction != NULL)
+ g_object_unref (transaction);
+
+ return success;
+}
+
+static GsApp *
+app_from_modified_pkg_variant (GsPlugin *plugin, GVariant *variant)
+{
+ g_autoptr(GsApp) app = NULL;
+ const char *name;
+ const char *old_evr, *old_arch;
+ const char *new_evr, *new_arch;
+ g_autofree char *old_nevra = NULL;
+ g_autofree char *new_nevra = NULL;
+
+ g_variant_get (variant, "(us(ss)(ss))", NULL /* type*/, &name, &old_evr, &old_arch, &new_evr, &new_arch);
+ old_nevra = g_strdup_printf ("%s-%s-%s", name, old_evr, old_arch);
+ new_nevra = g_strdup_printf ("%s-%s-%s", name, new_evr, new_arch);
+
+ app = gs_plugin_cache_lookup (plugin, old_nevra);
+ if (app != NULL)
+ return g_steal_pointer (&app);
+
+ /* create new app */
+ app = gs_app_new (NULL);
+ gs_app_set_management_plugin (app, "rpm-ostree");
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ gs_app_set_size_download (app, 0);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+
+ /* update or downgrade */
+ gs_app_add_source (app, name);
+ gs_app_set_version (app, old_evr);
+ gs_app_set_update_version (app, new_evr);
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+
+ g_debug ("!%s\n", old_nevra);
+ g_debug ("=%s\n", new_nevra);
+
+ gs_plugin_cache_add (plugin, old_nevra, app);
+ return g_steal_pointer (&app);
+}
+
+static GsApp *
+app_from_single_pkg_variant (GsPlugin *plugin, GVariant *variant, gboolean addition)
+{
+ g_autoptr(GsApp) app = NULL;
+ const char *name;
+ const char *evr;
+ const char *arch;
+ g_autofree char *nevra = NULL;
+
+ g_variant_get (variant, "(usss)", NULL /* type*/, &name, &evr, &arch);
+ nevra = g_strdup_printf ("%s-%s-%s", name, evr, arch);
+
+ app = gs_plugin_cache_lookup (plugin, nevra);
+ if (app != NULL)
+ return g_steal_pointer (&app);
+
+ /* create new app */
+ app = gs_app_new (NULL);
+ gs_app_set_management_plugin (app, "rpm-ostree");
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ gs_app_set_size_download (app, 0);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+
+ if (addition) {
+ /* addition */
+ gs_app_add_source (app, name);
+ gs_app_set_version (app, evr);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+
+ g_debug ("+%s\n", nevra);
+ } else {
+ /* removal */
+ gs_app_add_source (app, name);
+ gs_app_set_version (app, evr);
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+
+ g_debug ("-%s\n", nevra);
+ }
+
+ gs_plugin_cache_add (plugin, nevra, app);
+ return g_steal_pointer (&app);
+}
+
+static GVariant *
+make_rpmostree_options_variant (gboolean reboot,
+ gboolean allow_downgrade,
+ gboolean cache_only,
+ gboolean download_only,
+ gboolean skip_purge,
+ gboolean no_pull_base,
+ gboolean dry_run,
+ gboolean no_overrides)
+{
+ GVariantDict dict;
+ g_variant_dict_init (&dict, NULL);
+ g_variant_dict_insert (&dict, "reboot", "b", reboot);
+ g_variant_dict_insert (&dict, "allow-downgrade", "b", allow_downgrade);
+ g_variant_dict_insert (&dict, "cache-only", "b", cache_only);
+ g_variant_dict_insert (&dict, "download-only", "b", download_only);
+ g_variant_dict_insert (&dict, "skip-purge", "b", skip_purge);
+ g_variant_dict_insert (&dict, "no-pull-base", "b", no_pull_base);
+ g_variant_dict_insert (&dict, "dry-run", "b", dry_run);
+ g_variant_dict_insert (&dict, "no-overrides", "b", no_overrides);
+ return g_variant_ref_sink (g_variant_dict_end (&dict));
+}
+
+static GVariant *
+make_refresh_md_options_variant (gboolean force)
+{
+ GVariantDict dict;
+ g_variant_dict_init (&dict, NULL);
+ g_variant_dict_insert (&dict, "force", "b", force);
+ return g_variant_ref_sink (g_variant_dict_end (&dict));
+}
+
+static gboolean
+make_rpmostree_modifiers_variant (const char *install_package,
+ const char *uninstall_package,
+ const char *install_local_package,
+ GVariant **out_modifiers,
+ GUnixFDList **out_fd_list,
+ GError **error)
+{
+ GVariantDict dict;
+ g_autoptr(GUnixFDList) fd_list = g_unix_fd_list_new ();
+
+ g_variant_dict_init (&dict, NULL);
+
+ if (install_package != NULL) {
+ g_autoptr(GPtrArray) repo_pkgs = g_ptr_array_new ();
+
+ g_ptr_array_add (repo_pkgs, install_package);
+
+ g_variant_dict_insert_value (&dict, "install-packages",
+ g_variant_new_strv ((const char *const*)repo_pkgs->pdata,
+ repo_pkgs->len));
+
+ }
+
+ if (uninstall_package != NULL) {
+ g_autoptr(GPtrArray) repo_pkgs = g_ptr_array_new ();
+
+ g_ptr_array_add (repo_pkgs, uninstall_package);
+
+ g_variant_dict_insert_value (&dict, "uninstall-packages",
+ g_variant_new_strv ((const char *const*)repo_pkgs->pdata,
+ repo_pkgs->len));
+
+ }
+
+ if (install_local_package != NULL) {
+ g_auto(GVariantBuilder) builder;
+ int fd;
+ int idx;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("ah"));
+
+ fd = openat (AT_FDCWD, install_local_package, O_RDONLY | O_CLOEXEC | O_NOCTTY);
+ if (fd == -1) {
+ g_set_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED,
+ "Failed to open %s", install_local_package);
+ return FALSE;
+ }
+
+ idx = g_unix_fd_list_append (fd_list, fd, error);
+ if (idx < 0) {
+ close (fd);
+ return FALSE;
+ }
+
+ g_variant_builder_add (&builder, "h", idx);
+ g_variant_dict_insert_value (&dict, "install-local-packages",
+ g_variant_new ("ah", &builder));
+ close (fd);
+ }
+
+ *out_fd_list = g_steal_pointer (&fd_list);
+ *out_modifiers = g_variant_ref_sink (g_variant_dict_end (&dict));
+ return TRUE;
+}
+
+static gboolean
+rpmostree_update_deployment (GsRPMOSTreeOS *os_proxy,
+ const char *install_package,
+ const char *uninstall_package,
+ const char *install_local_package,
+ GVariant *options,
+ char **out_transaction_address,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GUnixFDList) fd_list = NULL;
+ g_autoptr(GVariant) modifiers = NULL;
+
+ if (!make_rpmostree_modifiers_variant (install_package,
+ uninstall_package,
+ install_local_package,
+ &modifiers, &fd_list, error))
+ return FALSE;
+
+ return gs_rpmostree_os_call_update_deployment_sync (os_proxy,
+ modifiers,
+ options,
+ fd_list,
+ out_transaction_address,
+ NULL,
+ cancellable,
+ error);
+}
+
+#define RPMOSTREE_CORE_CACHEDIR "/var/cache/rpm-ostree/"
+#define RPMOSTREE_DIR_CACHE_REPOMD "repomd"
+#define RPMOSTREE_DIR_CACHE_SOLV "solv"
+
+static gboolean
+ensure_rpmostree_dnf_context (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GsApp) progress_app = gs_app_new (gs_plugin_get_name (plugin));
+ g_autoptr(DnfContext) context = dnf_context_new ();
+ g_autoptr(DnfState) state = dnf_state_new ();
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ if (priv->dnf_context != NULL)
+ return TRUE;
+
+ tp->app = g_object_ref (progress_app);
+ tp->plugin = g_object_ref (plugin);
+
+ dnf_context_set_repo_dir (context, "/etc/yum.repos.d");
+ dnf_context_set_cache_dir (context, RPMOSTREE_CORE_CACHEDIR RPMOSTREE_DIR_CACHE_REPOMD);
+ dnf_context_set_solv_dir (context, RPMOSTREE_CORE_CACHEDIR RPMOSTREE_DIR_CACHE_SOLV);
+ dnf_context_set_cache_age (context, G_MAXUINT);
+ dnf_context_set_enable_filelists (context, FALSE);
+
+ options = make_refresh_md_options_variant (FALSE /* force */);
+ if (!gs_rpmostree_os_call_refresh_md_sync (priv->os_proxy,
+ options,
+ &transaction_address,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!dnf_context_setup (context, cancellable, error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!dnf_context_setup_sack_with_flags (context, state, DNF_CONTEXT_SETUP_SACK_FLAG_SKIP_RPMDB, error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ g_set_object (&priv->dnf_context, context);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refresh (GsPlugin *plugin,
+ guint cache_age,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ if (!ensure_rpmostree_dnf_context (plugin, cancellable, error))
+ return FALSE;
+
+ if (cache_age == G_MAXUINT)
+ return TRUE;
+
+ {
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GsApp) progress_app = gs_app_new (gs_plugin_get_name (plugin));
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ tp->app = g_object_ref (progress_app);
+ tp->plugin = g_object_ref (plugin);
+
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
+ FALSE, /* allow-downgrade */
+ FALSE, /* cache-only */
+ TRUE, /* download-only */
+ FALSE, /* skip-purge */
+ FALSE, /* no-pull-base */
+ FALSE, /* dry-run */
+ FALSE); /* no-overrides */
+ if (!gs_rpmostree_os_call_upgrade_sync (priv->os_proxy,
+ options,
+ NULL /* fd list */,
+ &transaction_address,
+ NULL /* fd list out */,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ {
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GsApp) progress_app = gs_app_new (gs_plugin_get_name (plugin));
+ g_autoptr(GVariant) options = NULL;
+ GVariantDict dict;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ tp->app = g_object_ref (progress_app);
+ tp->plugin = g_object_ref (plugin);
+
+ g_variant_dict_init (&dict, NULL);
+ g_variant_dict_insert (&dict, "mode", "s", "check");
+ options = g_variant_ref_sink (g_variant_dict_end (&dict));
+
+ if (!gs_rpmostree_os_call_automatic_update_trigger_sync (priv->os_proxy,
+ options,
+ NULL,
+ &transaction_address,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+ }
+
+ /* update UI */
+ gs_plugin_updates_changed (plugin);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GVariant) cached_update = NULL;
+ g_autoptr(GVariant) rpm_diff = NULL;
+ const gchar *checksum = NULL;
+ const gchar *version = NULL;
+ g_auto(GVariantDict) cached_update_dict;
+
+ /* ensure D-Bus properties are updated before reading them */
+ if (!gs_rpmostree_sysroot_call_reload_sync (priv->sysroot_proxy, cancellable, error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ cached_update = gs_rpmostree_os_dup_cached_update (priv->os_proxy);
+ g_variant_dict_init (&cached_update_dict, cached_update);
+
+ if (!g_variant_dict_lookup (&cached_update_dict, "checksum", "&s", &checksum))
+ return TRUE;
+ if (!g_variant_dict_lookup (&cached_update_dict, "version", "&s", &version))
+ return TRUE;
+
+ g_debug ("got CachedUpdate version '%s', checksum '%s'", version, checksum);
+
+ rpm_diff = g_variant_dict_lookup_value (&cached_update_dict, "rpm-diff", G_VARIANT_TYPE ("a{sv}"));
+ if (rpm_diff != NULL) {
+ GVariantIter iter;
+ GVariant *child;
+ g_autoptr(GVariant) upgraded = NULL;
+ g_autoptr(GVariant) downgraded = NULL;
+ g_autoptr(GVariant) removed = NULL;
+ g_autoptr(GVariant) added = NULL;
+ g_auto(GVariantDict) rpm_diff_dict;
+ g_variant_dict_init (&rpm_diff_dict, rpm_diff);
+
+ upgraded = g_variant_dict_lookup_value (&rpm_diff_dict, "upgraded", G_VARIANT_TYPE ("a(us(ss)(ss))"));
+ if (upgraded == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no 'upgraded' in rpm-diff dict");
+ return FALSE;
+ }
+ downgraded = g_variant_dict_lookup_value (&rpm_diff_dict, "downgraded", G_VARIANT_TYPE ("a(us(ss)(ss))"));
+ if (downgraded == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no 'downgraded' in rpm-diff dict");
+ return FALSE;
+ }
+ removed = g_variant_dict_lookup_value (&rpm_diff_dict, "removed", G_VARIANT_TYPE ("a(usss)"));
+ if (removed == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no 'removed' in rpm-diff dict");
+ return FALSE;
+ }
+ added = g_variant_dict_lookup_value (&rpm_diff_dict, "added", G_VARIANT_TYPE ("a(usss)"));
+ if (added == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
+ "no 'added' in rpm-diff dict");
+ return FALSE;
+ }
+
+ /* iterate over all upgraded packages and add them */
+ g_variant_iter_init (&iter, upgraded);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
+ g_autoptr(GsApp) app = app_from_modified_pkg_variant (plugin, child);
+ if (app != NULL)
+ gs_app_list_add (list, app);
+ g_variant_unref (child);
+ }
+
+ /* iterate over all downgraded packages and add them */
+ g_variant_iter_init (&iter, downgraded);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
+ g_autoptr(GsApp) app = app_from_modified_pkg_variant (plugin, child);
+ if (app != NULL)
+ gs_app_list_add (list, app);
+ g_variant_unref (child);
+ }
+
+ /* iterate over all removed packages and add them */
+ g_variant_iter_init (&iter, removed);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
+ g_autoptr(GsApp) app = app_from_single_pkg_variant (plugin, child, FALSE);
+ if (app != NULL)
+ gs_app_list_add (list, app);
+ g_variant_unref (child);
+ }
+
+ /* iterate over all added packages and add them */
+ g_variant_iter_init (&iter, added);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
+ g_autoptr(GsApp) app = app_from_single_pkg_variant (plugin, child, TRUE);
+ if (app != NULL)
+ gs_app_list_add (list, app);
+ g_variant_unref (child);
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+trigger_rpmostree_update (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ /* if we can process this online do not require a trigger */
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE)
+ return TRUE;
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* already in correct state */
+ if (priv->update_triggered)
+ return TRUE;
+
+ /* trigger the update */
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
+ FALSE, /* allow-downgrade */
+ TRUE, /* cache-only */
+ FALSE, /* download-only */
+ FALSE, /* skip-purge */
+ FALSE, /* no-pull-base */
+ FALSE, /* dry-run */
+ FALSE); /* no-overrides */
+ if (!gs_rpmostree_os_call_upgrade_sync (priv->os_proxy,
+ options,
+ NULL /* fd list */,
+ &transaction_address,
+ NULL /* fd list out */,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ priv->update_triggered = TRUE;
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update_app (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsAppList *related = gs_app_get_related (app);
+
+ /* we don't currently don't put all updates in the OsUpdate proxy app */
+ if (!gs_app_has_quirk (app, GS_APP_QUIRK_IS_PROXY))
+ return trigger_rpmostree_update (plugin, app, cancellable, error);
+
+ /* try to trigger each related app */
+ for (guint i = 0; i < gs_app_list_length (related); i++) {
+ GsApp *app_tmp = gs_app_list_index (related, i);
+ if (!trigger_rpmostree_update (plugin, app_tmp, cancellable, error))
+ return FALSE;
+ }
+
+ /* success */
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_upgrade_trigger (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const char *packages[] = { NULL };
+ g_autofree gchar *new_refspec = NULL;
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* check is distro-upgrade */
+ if (gs_app_get_kind (app) != AS_APP_KIND_OS_UPGRADE)
+ return TRUE;
+
+ /* construct new refspec based on the distro version we're upgrading to */
+ new_refspec = g_strdup_printf ("ostree://fedora/%s/x86_64/silverblue",
+ gs_app_get_version (app));
+
+ /* trigger the upgrade */
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
+ TRUE, /* allow-downgrade */
+ TRUE, /* cache-only */
+ FALSE, /* download-only */
+ FALSE, /* skip-purge */
+ FALSE, /* no-pull-base */
+ FALSE, /* dry-run */
+ FALSE); /* no-overrides */
+
+ if (!gs_rpmostree_os_call_rebase_sync (priv->os_proxy,
+ options,
+ new_refspec,
+ packages,
+ NULL /* fd list */,
+ &transaction_address,
+ NULL /* fd list out */,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+
+ if (g_strrstr ((*error)->message, "Old and new refs are equal")) {
+ /* don't error out if the correct tree is already deployed */
+ g_debug ("ignoring rpm-ostree error: %s", (*error)->message);
+ g_clear_error (error);
+ } else {
+ return FALSE;
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+static gboolean
+gs_plugin_repo_enable (GsPlugin *plugin,
+ GsApp *app,
+ gboolean enable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GVariantBuilder) options_builder = NULL;
+ g_autoptr(TransactionProgress) tp = NULL;
+
+ if (enable)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ else
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+
+ options_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{ss}"));
+ g_variant_builder_add (options_builder, "{ss}", "enabled", enable ? "1" : "0");
+ if (!gs_rpmostree_os_call_modify_yum_repo_sync (priv->os_proxy,
+ gs_app_get_id (app),
+ g_variant_builder_end (options_builder),
+ &transaction_address,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ gs_utils_error_add_origin_id (error, app);
+ return FALSE;
+ }
+
+ tp = transaction_progress_new ();
+ tp->app = g_object_ref (app);
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ gs_utils_error_add_origin_id (error, app);
+ return FALSE;
+ }
+
+
+ /* state is known */
+ if (enable)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ else
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *install_package = NULL;
+ g_autofree gchar *local_filename = NULL;
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* enable repo */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return gs_plugin_repo_enable (plugin, app, TRUE, cancellable, error);
+
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_AVAILABLE:
+ if (gs_app_get_source_default (app) == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "no source set");
+ return FALSE;
+ }
+
+ install_package = gs_app_get_source_default (app);
+ break;
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ if (gs_app_get_local_file (app) == NULL) {
+ g_set_error_literal (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "local package, but no filename");
+ return FALSE;
+ }
+
+ local_filename = g_file_get_path (gs_app_get_local_file (app));
+ break;
+ default:
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "do not know how to install app in state %s",
+ as_app_state_to_string (gs_app_get_state (app)));
+ return FALSE;
+ }
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ tp->app = g_object_ref (app);
+
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
+ FALSE, /* allow-downgrade */
+ FALSE, /* cache-only */
+ FALSE, /* download-only */
+ FALSE, /* skip-purge */
+ TRUE, /* no-pull-base */
+ FALSE, /* dry-run */
+ FALSE); /* no-overrides */
+
+ if (!rpmostree_update_deployment (priv->os_proxy,
+ install_package,
+ NULL /* remove package */,
+ local_filename,
+ options,
+ &transaction_address,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ /* get the new icon from the package */
+ gs_app_set_local_file (app, NULL);
+ gs_app_add_icon (app, NULL);
+ gs_app_set_pixbuf (app, NULL);
+
+ /* no longer valid */
+ gs_app_clear_source_ids (app);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_remove (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* disable repo */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
+ return gs_plugin_repo_enable (plugin, app, FALSE, cancellable, error);
+
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ tp->app = g_object_ref (app);
+
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
+ FALSE, /* allow-downgrade */
+ TRUE, /* cache-only */
+ FALSE, /* download-only */
+ FALSE, /* skip-purge */
+ TRUE, /* no-pull-base */
+ FALSE, /* dry-run */
+ FALSE); /* no-overrides */
+
+ if (!rpmostree_update_deployment (priv->os_proxy,
+ NULL /* install package */,
+ gs_app_get_source_default (app),
+ NULL /* install local package */,
+ options,
+ &transaction_address,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ /* state is not known: we don't know if we can re-install this app */
+ gs_app_set_state (app, AS_APP_STATE_UNKNOWN);
+
+ return TRUE;
+}
+
+static DnfPackage *
+find_package_by_name (DnfSack *sack,
+ const char *pkgname)
+{
+ g_autoptr(GPtrArray) pkgs = NULL;
+ hy_autoquery HyQuery query = hy_query_create (sack);
+
+ hy_query_filter (query, HY_PKG_NAME, HY_EQ, pkgname);
+ hy_query_filter_latest_per_arch (query, TRUE);
+
+ pkgs = hy_query_run (query);
+ if (pkgs->len == 0)
+ return NULL;
+
+ return g_object_ref (pkgs->pdata[pkgs->len-1]);
+}
+
+static GPtrArray *
+find_packages_by_provides (DnfSack *sack,
+ gchar **search)
+{
+ g_autoptr(GPtrArray) pkgs = NULL;
+ hy_autoquery HyQuery query = hy_query_create (sack);
+
+ hy_query_filter_provides_in (query, search);
+ hy_query_filter_latest_per_arch (query, TRUE);
+
+ pkgs = hy_query_run (query);
+
+ return g_steal_pointer (&pkgs);
+}
+
+static gboolean
+resolve_installed_packages_app (GsPlugin *plugin,
+ GPtrArray *pkglist,
+ gchar **layered_packages,
+ gchar **layered_local_packages,
+ GsApp *app)
+{
+ for (guint i = 0; i < pkglist->len; i++) {
+ RpmOstreePackage *pkg = g_ptr_array_index (pkglist, i);
+ if (g_strcmp0 (rpm_ostree_package_get_name (pkg), gs_app_get_source_default (app)) == 0) {
+ gs_app_set_version (app, rpm_ostree_package_get_evr (pkg));
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ if (g_strv_contains ((const gchar * const *) layered_packages,
+ rpm_ostree_package_get_name (pkg)) ||
+ g_strv_contains ((const gchar * const *) layered_local_packages,
+ rpm_ostree_package_get_nevra (pkg))) {
+ /* layered packages can always be removed */
+ gs_app_remove_quirk (app, GS_APP_QUIRK_COMPULSORY);
+ } else {
+ /* can't remove packages that are part of the base system */
+ gs_app_add_quirk (app, GS_APP_QUIRK_COMPULSORY);
+ }
+ if (gs_app_get_origin (app) == NULL)
+ gs_app_set_origin (app, "rpm-ostree");
+ return TRUE /* found */;
+ }
+ }
+
+ return FALSE /* not found */;
+}
+
+static gboolean
+resolve_available_packages_app (GsPlugin *plugin,
+ DnfSack *sack,
+ GsApp *app)
+{
+ g_autoptr(DnfPackage) pkg = NULL;
+
+ pkg = find_package_by_name (sack, gs_app_get_source_default (app));
+ if (pkg != NULL) {
+ gs_app_set_version (app, dnf_package_get_evr (pkg));
+ if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+
+ /* anything not part of the base system can be removed */
+ gs_app_remove_quirk (app, GS_APP_QUIRK_COMPULSORY);
+
+ /* set origin */
+ if (gs_app_get_origin (app) == NULL) {
+ const gchar *reponame = dnf_package_get_reponame (pkg);
+ gs_app_set_origin (app, reponame);
+ }
+
+ /* set more metadata for packages that don't have appstream data */
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, dnf_package_get_name (pkg));
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, dnf_package_get_summary (pkg));
+
+ /* set hide-from-search quirk for available apps we don't want to show */
+ if (!gs_app_is_installed (app)) {
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_DESKTOP:
+ case AS_APP_KIND_WEB_APP:
+ case AS_APP_KIND_CONSOLE:
+ gs_app_add_quirk (app, GS_APP_QUIRK_HIDE_FROM_SEARCH);
+ break;
+ default:
+ break;
+ }
+ }
+
+ return TRUE /* found */;
+ }
+
+ return FALSE /* not found */;
+}
+
+static gboolean
+resolve_appstream_source_file_to_package_name (GsPlugin *plugin,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ Header h;
+ const gchar *fn;
+ gint rc;
+ g_auto(rpmdbMatchIterator) mi = NULL;
+ g_auto(rpmts) ts = NULL;
+
+ /* open db readonly */
+ ts = rpmtsCreate();
+ rpmtsSetRootDir (ts, NULL);
+ rc = rpmtsOpenDB (ts, O_RDONLY);
+ if (rc != 0) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
+ "Failed to open rpmdb: %i", rc);
+ return FALSE;
+ }
+
+ /* look for a specific file */
+ fn = gs_app_get_metadata_item (app, "appstream::source-file");
+ if (fn == NULL)
+ return TRUE;
+
+ mi = rpmtsInitIterator (ts, RPMDBI_INSTFILENAMES, fn, 0);
+ if (mi == NULL) {
+ g_debug ("rpm: no search results for %s", fn);
+ return TRUE;
+ }
+
+ /* process any results */
+ g_debug ("rpm: querying for %s with %s", gs_app_get_id (app), fn);
+ while ((h = rpmdbNextIterator (mi)) != NULL) {
+ const gchar *name;
+
+ /* add default source */
+ name = headerGetString (h, RPMTAG_NAME);
+ if (gs_app_get_source_default (app) == NULL) {
+ g_debug ("rpm: setting source to %s", name);
+ gs_app_add_source (app, name);
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_autoptr(GPtrArray) pkglist = NULL;
+ g_autoptr(GVariant) default_deployment = NULL;
+ g_auto(GStrv) layered_packages = NULL;
+ g_auto(GStrv) layered_local_packages = NULL;
+ g_autofree gchar *checksum = NULL;
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ /* ensure D-Bus properties are updated before reading them */
+ if (!gs_rpmostree_sysroot_call_reload_sync (priv->sysroot_proxy, cancellable, error)) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ default_deployment = gs_rpmostree_os_dup_default_deployment (priv->os_proxy);
+ g_assert (g_variant_lookup (default_deployment,
+ "packages", "^as",
+ &layered_packages));
+ g_assert (g_variant_lookup (default_deployment,
+ "requested-local-packages", "^as",
+ &layered_local_packages));
+ g_assert (g_variant_lookup (default_deployment,
+ "checksum", "s",
+ &checksum));
+
+ pkglist = rpm_ostree_db_query_all (priv->ot_repo, checksum, cancellable, error);
+ if (pkglist == NULL) {
+ gs_rpmostree_error_convert (error);
+ return FALSE;
+ }
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ gboolean found;
+
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
+ continue;
+ /* set management plugin for apps where appstream just added the source package name in refine() */
+ if (gs_app_get_management_plugin (app) == NULL &&
+ gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_PACKAGE &&
+ gs_app_get_scope (app) == AS_APP_SCOPE_SYSTEM &&
+ gs_app_get_source_default (app) != NULL) {
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ }
+ /* resolve the source package name based on installed appdata/desktop file name */
+ if (gs_app_get_management_plugin (app) == NULL &&
+ gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_UNKNOWN &&
+ gs_app_get_scope (app) == AS_APP_SCOPE_SYSTEM &&
+ gs_app_get_source_default (app) == NULL) {
+ if (!resolve_appstream_source_file_to_package_name (plugin, app, flags, cancellable, error))
+ return FALSE;
+ }
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
+ continue;
+ if (gs_app_get_source_default (app) == NULL)
+ continue;
+
+ /* first try to resolve from installed packages */
+ found = resolve_installed_packages_app (plugin, pkglist, layered_packages, layered_local_packages, app);
+
+ /* if we didn't find anything, try resolving from available packages */
+ if (!found && priv->dnf_context != NULL)
+ found = resolve_available_packages_app (plugin, dnf_context_get_sack (priv->dnf_context), app);
+
+ /* if we still didn't find anything then it's likely a package
+ * that is still in appstream data, but removed from the repos */
+ if (!found)
+ g_debug ("failed to resolve %s", gs_app_get_unique_id (app));
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_app_upgrade_download (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const char *packages[] = { NULL };
+ g_autofree gchar *new_refspec = NULL;
+ g_autofree gchar *transaction_address = NULL;
+ g_autoptr(GVariant) options = NULL;
+ g_autoptr(TransactionProgress) tp = transaction_progress_new ();
+
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* check is distro-upgrade */
+ if (gs_app_get_kind (app) != AS_APP_KIND_OS_UPGRADE)
+ return TRUE;
+
+ /* construct new refspec based on the distro version we're upgrading to */
+ new_refspec = g_strdup_printf ("ostree://fedora/%s/x86_64/silverblue",
+ gs_app_get_version (app));
+
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
+ TRUE, /* allow-downgrade */
+ FALSE, /* cache-only */
+ TRUE, /* download-only */
+ FALSE, /* skip-purge */
+ FALSE, /* no-pull-base */
+ FALSE, /* dry-run */
+ FALSE); /* no-overrides */
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+ tp->app = g_object_ref (app);
+
+ if (!gs_rpmostree_os_call_rebase_sync (priv->os_proxy,
+ options,
+ new_refspec,
+ packages,
+ NULL /* fd list */,
+ &transaction_address,
+ NULL /* fd list out */,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
+ transaction_address,
+ tp,
+ cancellable,
+ error)) {
+ gs_rpmostree_error_convert (error);
+
+ if (g_strrstr ((*error)->message, "Old and new refs are equal")) {
+ /* don't error out if the correct tree is already deployed */
+ g_debug ("ignoring rpm-ostree error: %s", (*error)->message);
+ g_clear_error (error);
+ } else {
+ gs_app_set_state_recover (app);
+ return FALSE;
+ }
+ }
+
+ /* state is known */
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_launch (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* only process this app if was created by this plugin */
+ if (g_strcmp0 (gs_app_get_management_plugin (app),
+ gs_plugin_get_name (plugin)) != 0)
+ return TRUE;
+
+ /* these are handled by the shell extensions plugin */
+ if (gs_app_get_kind (app) == AS_APP_KIND_SHELL_EXTENSION)
+ return TRUE;
+
+ return gs_plugin_app_launch (plugin, app, error);
+}
+
+static void
+add_quirks_from_package_name (GsApp *app, const gchar *package_name)
+{
+ /* these packages don't have a .repo file in their file lists, but
+ * instead install one through rpm scripts / cron job */
+ const gchar *packages_with_repos[] = {
+ "google-chrome-stable",
+ "google-earth-pro-stable",
+ "google-talkplugin",
+ NULL };
+
+ if (g_strv_contains (packages_with_repos, package_name))
+ gs_app_add_quirk (app, GS_APP_QUIRK_HAS_SOURCE);
+}
+
+gboolean
+gs_plugin_file_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ GFile *file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ FD_t rpmfd = NULL;
+ int r;
+ guint64 epoch;
+ guint64 size;
+ const gchar *name;
+ const gchar *version;
+ const gchar *release;
+ const gchar *license;
+ g_auto(Header) h = NULL;
+ g_auto(rpmts) ts = NULL;
+ g_autofree gchar *evr = NULL;
+ g_autofree gchar *filename = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ filename = g_file_get_path (file);
+ if (!g_str_has_suffix (filename, ".rpm")) {
+ ret = TRUE;
+ goto out;
+ }
+
+ ts = rpmtsCreate ();
+ rpmtsSetVSFlags (ts, _RPMVSF_NOSIGNATURES);
+
+ /* librpm needs Fopenfd */
+ rpmfd = Fopen (filename, "r.fdio");
+ if (rpmfd == NULL) {
+ g_set_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED,
+ "Opening %s failed", filename);
+ goto out;
+ }
+ if (Ferror (rpmfd)) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Opening %s failed: %s",
+ filename,
+ Fstrerror (rpmfd));
+ goto out;
+ }
+
+ if ((r = rpmReadPackageFile (ts, rpmfd, filename, &h)) != RPMRC_OK) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "Verification of %s failed",
+ filename);
+ goto out;
+ }
+
+ app = gs_app_new (NULL);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator", gs_plugin_get_name (plugin));
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+
+ /* add default source */
+ name = headerGetString (h, RPMTAG_NAME);
+ g_debug ("rpm: setting source to %s", name);
+ gs_app_add_source (app, name);
+
+ /* add version */
+ epoch = headerGetNumber (h, RPMTAG_EPOCH);
+ version = headerGetString (h, RPMTAG_VERSION);
+ release = headerGetString (h, RPMTAG_RELEASE);
+ if (epoch > 0) {
+ evr = g_strdup_printf ("%" G_GUINT64_FORMAT ":%s-%s",
+ epoch, version, release);
+ } else {
+ evr = g_strdup_printf ("%s-%s",
+ version, release);
+ }
+ g_debug ("rpm: setting version to %s", evr);
+ gs_app_set_version (app, evr);
+
+ /* set size */
+ size = headerGetNumber (h, RPMTAG_SIZE);
+ gs_app_set_size_installed (app, size);
+
+ /* set license */
+ license = headerGetString (h, RPMTAG_LICENSE);
+ if (license != NULL) {
+ g_autofree gchar *license_spdx = NULL;
+ license_spdx = as_utils_license_to_spdx (license);
+ gs_app_set_license (app, GS_APP_QUALITY_NORMAL, license_spdx);
+ g_debug ("rpm: setting license to %s", license_spdx);
+ }
+
+ add_quirks_from_package_name (app, name);
+
+ gs_app_list_add (list, app);
+ ret = TRUE;
+
+out:
+ if (rpmfd != NULL)
+ (void) Fclose (rpmfd);
+ return ret;
+}
+
+static gchar **
+what_provides_decompose (gchar **values)
+{
+ GPtrArray *array = g_ptr_array_new ();
+
+ /* iter on each provide string, and wrap it with the Fedora prefix */
+ for (guint i = 0; values[i] != NULL; i++) {
+ g_ptr_array_add (array, g_strdup (values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("gstreamer0.10(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("gstreamer1(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("font(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("mimehandler(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("postscriptdriver(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("plasma4(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("plasma5(%s)", values[i]));
+ }
+ g_ptr_array_add (array, NULL);
+ return (gchar **) g_ptr_array_free (array, FALSE);
+}
+
+gboolean
+gs_plugin_add_search_what_provides (GsPlugin *plugin,
+ gchar **search,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+ g_autoptr(GPtrArray) pkglist = NULL;
+ g_auto(GStrv) provides = NULL;
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ if (priv->dnf_context == NULL)
+ return TRUE;
+
+ provides = what_provides_decompose (search);
+ pkglist = find_packages_by_provides (dnf_context_get_sack (priv->dnf_context), provides);
+ for (guint i = 0; i < pkglist->len; i++) {
+ DnfPackage *pkg = g_ptr_array_index (pkglist, i);
+ g_autoptr(GsApp) app = NULL;
+
+ app = gs_plugin_cache_lookup (plugin, dnf_package_get_nevra (pkg));
+ if (app != NULL) {
+ gs_app_list_add (list, app);
+ continue;
+ }
+
+ /* create new app */
+ app = gs_app_new (NULL);
+ gs_app_set_metadata (app, "GnomeSoftware::Creator", gs_plugin_get_name (plugin));
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT);
+ app_set_rpm_ostree_packaging_format (app);
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
+ gs_app_add_source (app, dnf_package_get_name (pkg));
+
+ gs_plugin_cache_add (plugin, dnf_package_get_nevra (pkg), app);
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_sources (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = NULL;
+ GPtrArray *repos;
+
+ locker = g_mutex_locker_new (&priv->mutex);
+
+ if (priv->dnf_context == NULL)
+ return TRUE;
+
+ repos = dnf_context_get_repos (priv->dnf_context);
+ if (repos == NULL)
+ return TRUE;
+
+ for (guint i = 0; i < repos->len; i++) {
+ DnfRepo *repo = g_ptr_array_index (repos, i);
+ g_autofree gchar *description = NULL;
+ g_autoptr(GsApp) app = NULL;
+ gboolean enabled;
+
+ /* hide these from the user */
+ if (dnf_repo_is_devel (repo) || dnf_repo_is_source (repo))
+ continue;
+
+ app = gs_app_new (dnf_repo_get_id (repo));
+ gs_app_set_management_plugin (app, gs_plugin_get_name (plugin));
+ gs_app_set_kind (app, AS_APP_KIND_SOURCE);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+
+ enabled = (dnf_repo_get_enabled (repo) & DNF_REPO_ENABLED_PACKAGES) > 0;
+ gs_app_set_state (app, enabled ? AS_APP_STATE_INSTALLED : AS_APP_STATE_AVAILABLE);
+
+ description = dnf_repo_get_description (repo);
+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, description);
+ gs_app_set_summary (app, GS_APP_QUALITY_LOWEST, description);
+
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
diff --git a/plugins/rpm-ostree/meson.build b/plugins/rpm-ostree/meson.build
new file mode 100644
index 0000000..840f9e7
--- /dev/null
+++ b/plugins/rpm-ostree/meson.build
@@ -0,0 +1,26 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginRpmOstree"']
+
+rpmostree_generated = gnome.gdbus_codegen(
+ 'gs-rpmostree-generated',
+ 'org.projectatomic.rpmostree1.xml',
+ interface_prefix : 'org.projectatomic.rpmostree1',
+ namespace : 'GsRPMOSTree'
+)
+
+shared_module(
+ 'gs_plugin_rpm-ostree',
+ rpmostree_generated,
+ sources : 'gs-plugin-rpm-ostree.c',
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ install_rpath: join_paths(rpm_ostree.get_pkgconfig_variable('libdir'), 'rpm-ostree'),
+ c_args : cargs,
+ dependencies : [ plugin_libs, libdnf, ostree, rpm, rpm_ostree ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
diff --git a/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml b/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
new file mode 100644
index 0000000..6ae04a4
--- /dev/null
+++ b/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
@@ -0,0 +1,458 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+
+ <!-- Deployment dictionary keys:
+ 'id' (type 's')
+ 'osname' (type 's')
+ 'serial' (type 'i')
+ 'checksum' (type 's')
+ 'version' (type 's')
+ 'timestamp' (type 't')
+ 'origin' (type 's')
+ 'signatures' (type 'av')
+ 'packages' (type 'as')
+ 'booted' (type 'b')
+ -->
+
+ <interface name="org.projectatomic.rpmostree1.Sysroot">
+ <!-- The booted OSName -->
+ <property name="Booted" type="o" access="read"/>
+
+ <!-- The system root path -->
+ <property name="Path" type="s" access="read"/>
+
+ <!-- The values are (method-name, sender-name, object path) -->
+ <property name="ActiveTransaction" type="(sss)" access="read"/>
+ <!-- A DBus address - connect to it to access its methods -->
+ <property name="ActiveTransactionPath" type="s" access="read"/>
+
+ <!-- (Currently) optional method to denote the client plans
+ to either invoke methods on the daemon, or monitor status.
+ If no clients are registered, the daemon may exit.
+
+ 'id (type 's') - Package/component name (e.g. `cockpit`, `gnome-software`)
+ -->
+ <method name="RegisterClient">
+ <arg type="a{sv}" name="options" direction="in"/>
+ </method>
+
+ <!-- You must call this if your process is no longer interested in talking to
+ rpm-ostree, but will remain connected to the bus.
+
+ No options are currently defined.
+ -->
+ <method name="UnregisterClient">
+ <arg type="a{sv}" name="options" direction="in"/>
+ </method>
+
+ <!-- Reload sysroot if changed. This can also be used as a way to sync with the daemon
+ to ensure e.g. D-Bus properties are updated before reading them. -->
+ <method name="Reload">
+ </method>
+
+ <!-- Like Reload, but also reload configuration files. -->
+ <method name="ReloadConfig">
+ </method>
+
+ <!-- none, check, stage -->
+ <property name="AutomaticUpdatePolicy" type="s" access="read"/>
+
+ <method name="CreateOSName">
+ <arg type="s" name="name"/>
+ <arg type="o" name="result" direction="out"/>
+ </method>
+
+ <method name="GetOS">
+ <arg name="name" type="s"/>
+ <arg name="object_path" type="o" direction="out"/>
+ </method>
+
+ <!-- Array of all deployments in boot order -->
+ <property name="Deployments" type="aa{sv}" access="read"/>
+ </interface>
+
+ <interface name="org.projectatomic.rpmostree1.OS">
+ <property name="BootedDeployment" type="a{sv}" access="read"/>
+ <property name="DefaultDeployment" type="a{sv}" access="read"/>
+ <property name="RollbackDeployment" type="a{sv}" access="read"/>
+
+ <!-- CachedUpdate dictionary keys:
+ 'osname' (type 's')
+ 'checksum' (type 's')
+ 'version' (type 's')
+ 'timestamp' (type 't')
+ 'origin' (type 's')
+ 'signatures' (type 'av')
+ 'gpg-enabled' (type 'b')
+ 'ref-has-new-commit' (type 'b')
+ TRUE if 'checksum' refers to a new base commit we're not booted in.
+ 'rpm-diff' (type 'a{sv}')
+ 'upgraded' (type 'a(us(ss)(ss))')
+ 'downgraded' (type 'a(us(ss)(ss))')
+ 'removed' (type 'a(usss)')
+ 'added' (type 'a(usss)')
+ 'advisories' (type 'a(suuasa{sv})')
+ -->
+ <property name="CachedUpdate" type="a{sv}" access="read"/>
+ <property name="HasCachedUpdateRpmDiff" type="b" access="read"/>
+
+ <!-- Available options:
+ "mode" (type 's')
+ One of auto, none, check. Defaults to auto, which follows configured
+ policy (available in AutomaticUpdatePolicy property).
+ "output-to-self" (type 'b')
+ Whether output should go to the daemon itself rather than the
+ transaction. Defaults to TRUE.
+
+ If automatic updates are not enabled, @enabled will be FALSE and
+ @transaction_address will be the empty string.
+ -->
+ <method name="AutomaticUpdateTrigger">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="b" name="enabled" direction="out"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <property name="Name" type="s" access="read"/>
+
+ <method name="GetDeploymentsRpmDiff">
+ <arg type="s" name="deployid0"/>
+ <arg type="s" name="deployid1"/>
+ <arg type="a(sua{sv})" name="result" direction="out"/>
+ </method>
+
+ <!-- Revision may be a full checksum or version string.
+
+ Available options:
+ "reboot" (type 'b')
+ -->
+ <method name="Deploy">
+ <arg type="s" name="revision" direction="in"/>
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
+ </method>
+
+ <!-- details dictionary keys:
+ 'osname' (type 's')
+ 'checksum' (type 's')
+ 'version' (type 's')
+ 'timestamp' (type 't')
+ 'origin' (type 's')
+ 'signatures' (type 'av')
+ -->
+ <method name="GetCachedDeployRpmDiff">
+ <arg type="s" name="revision"/>
+ <arg type="as" name="packages"/>
+ <arg type="a(sua{sv})" name="result" direction="out"/>
+ <arg type="a{sv}" name="details" direction="out"/>
+ </method>
+
+ <method name="DownloadDeployRpmDiff">
+ <arg type="s" name="revision"/>
+ <arg type="as" name="packages"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available options:
+ "allow-downgrade" (type 'b')
+ "reboot" (type 'b')
+ -->
+ <method name="Upgrade">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
+ </method>
+
+ <!-- details dictionary keys:
+ 'osname' (type 's')
+ 'checksum' (type 's')
+ 'version' (type 's')
+ 'timestamp' (type 't')
+ 'origin' (type 's')
+ 'signatures' (type 'av')
+ -->
+ <method name="GetCachedUpdateRpmDiff">
+ <arg type="s" name="deployid"/>
+ <arg type="a(sua{sv})" name="result" direction="out"/>
+ <arg type="a{sv}" name="details" direction="out"/>
+ </method>
+
+ <method name="DownloadUpdateRpmDiff">
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available options:
+ "reboot" (type 'b')
+ -->
+ <method name="Rollback">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available options:
+ "reboot" (type 'b')
+ -->
+ <method name="ClearRollbackTarget">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available options:
+ "skip-purge" (type 'b')
+ "reboot" (type 'b')
+ "revision" (type 's')
+ -->
+ <method name="Rebase">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="refspec"/>
+ <arg type="as" name="packages"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
+ </method>
+
+ <!-- details dictionary keys:
+ 'osname' (type 's')
+ 'checksum' (type 's')
+ 'version' (type 's')
+ 'timestamp' (type 't')
+ 'origin' (type 's')
+ 'signatures' (type 'av')
+ -->
+ <method name="GetCachedRebaseRpmDiff">
+ <arg type="s" name="refspec"/>
+ <arg type="as" name="packages"/>
+ <arg type="a(sua{sv})" name="result" direction="out"/>
+ <arg type="a{sv}" name="details" direction="out"/>
+ </method>
+
+ <method name="DownloadRebaseRpmDiff">
+ <arg type="s" name="refspec"/>
+ <arg type="as" name="packages"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available options:
+ "reboot" (type 'b')
+ "dry-run" (type 'b')
+ -->
+ <method name="PkgChange">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="as" name="packages_added"/>
+ <arg type="as" name="packages_removed"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
+ </method>
+
+ <method name="SetInitramfsState">
+ <arg type="b" name="regenerate" direction="in"/>
+ <arg type="as" name="args" direction="in"/>
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available options:
+ "reboot" (type 'b')
+ -->
+ <method name="KernelArgs">
+ <arg type="s" name="existing_kernel_arg_string"/>
+ <arg type="as" name="kernel_args_added" direction="in"/>
+ <arg type="as" name="kernel_args_replaced" direction="in"/>
+ <arg type="as" name="kernel_args_removed" direction="in"/>
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <method name="GetDeploymentBootConfig">
+ <arg type="s" name="deployid" />
+ <arg type="b" name="is_pending" direction="in"/>
+ <arg type="a{sv}" name="bootconfig" direction="out"/>
+ </method>
+
+ <method name="Cleanup">
+ <arg type="as" name="elements" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <method name="RefreshMd">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Set options in yum .repo files -->
+ <method name="ModifyYumRepo">
+ <arg type="s" name="repo_id" direction="in"/>
+ <arg type="a{ss}" name="settings" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ <!-- Available modifiers:
+ "set-refspec" (type 's')
+ "set-revision" (type 's')
+ "install-packages" (type 'as')
+ "uninstall-packages" (type 'as')
+ "install-local-packages" (type 'ah')
+ "override-remove-packages" (type 'as')
+ "override-reset-packages" (type 'as')
+ "override-replace-packages" (type 'as')
+ "override-replace-local-packages" (type 'ah')
+ "custom-origin" (type '(ss)')
+
+ Available options:
+ "reboot" (type 'b')
+ Initiate a reboot after transaction.
+ "allow-downgrade" (type 'b')
+ Allow newly pulled bases to have older timestamps than the
+ current base. Defaults to TRUE if either "set-refspec" or
+ "set-revision" is specified.
+ "skip-purge" (type 'b')
+ Do not purge the old refspec. Only valid if "set-refspec" is
+ specified.
+ "no-pull-base" (type 'b')
+ Do not pull a base layer from the remote. Not valid if
+ either "set-refspec" or "set-revision" is specified.
+ "dry-run" (type 'b')
+ Stop short of deploying the new tree. If layering packages,
+ the pkg diff is printed but packages are not downloaded or
+ imported.
+ "no-layering" (type 'b')
+ Remove all package requests. Requests in "install-packages"
+ are still subsequently processed if specified.
+ "no-overrides" (type 'b')
+ Remove all active overrides. Not valid if any override
+ modifiers are specified.
+ "no-initramfs" (type 'b')
+ Disable any initramfs regeneration.
+ "cache-only" (type 'b')
+ Do not update rpmmd repo metadata cache or ostree refspec.
+ Not valid if "download-only" is specified.
+ "download-only" (type 'b')
+ Update rpmmd repo metadata cache and ostree refspec. Do not
+ perform any deployments. This is like "dry-run" except that
+ the latter does not download and import packages. Not valid
+ if "cache-only" or "dry-run" is specified.
+ "allow-inactive-requests" (type 'b')
+ When installing packages, allow package requests which would
+ not immediately be active.
+ "idempotent-layering" (type 'b')
+ Don't error out on requests in install-* or uninstall-*
+ modifiers that are already satisfied.
+ -->
+ <method name="UpdateDeployment">
+ <arg type="a{sv}" name="modifiers" direction="in"/>
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
+ </method>
+
+ </interface>
+
+ <interface name="org.projectatomic.rpmostree1.OSExperimental">
+
+ <!-- Just a test method -->
+ <method name="Moo">
+ <arg type="b" name="utf8" direction="in"/>
+ <arg type="s" name="result" direction="out"/>
+ </method>
+
+ <method name="LiveFs">
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="s" name="transaction_address" direction="out"/>
+ </method>
+
+ </interface>
+
+ <interface name="org.projectatomic.rpmostree1.Transaction">
+
+ <!-- A single-line human-readable string -->
+ <property name="Title" type="s" access="read"/>
+
+ <!-- Yes, we can. -->
+ <method name="Cancel"/>
+
+ <!-- For a client to call when ready to receive signals.
+ The return boolean indicates whether the transaction was
+ started by this method call (true) or was already started
+ by another client (false). -->
+ <method name="Start">
+ <arg type="b" name="started" direction="out"/>
+ </method>
+
+ <signal name="Finished">
+ <arg name="success" type="b" direction="out"/>
+ <arg name="error_message" type="s" direction="out"/>
+ </signal>
+
+ <!-- For miscellaneous messages; line-buffered. -->
+ <signal name="Message">
+ <arg name="text" type="s" direction="out"/>
+ </signal>
+
+ <!-- Tasks are notifications that work is being done. -->
+ <signal name="TaskBegin">
+ <arg name="text" type="s" direction="out"/>
+ </signal>
+
+ <signal name="TaskEnd">
+ <arg name="text" type="s" direction="out"/>
+ </signal>
+
+ <!-- Generic percentage progress. -->
+ <signal name="PercentProgress">
+ <arg name="text" type="s" direction="out"/>
+ <arg name="percentage" type="u" direction="out"/>
+ </signal>
+
+ <signal name="DownloadProgress">
+ <!-- time data, format is:
+ start time, elapsed seconds
+ -->
+ <arg name="time" type="(tt)" direction="out"/>
+
+ <!--
+ outstanding data counts, format is:
+ (outstanding fetches, outstanding writes)
+ -->
+ <arg name="outstanding" type="(uu)" direction="out"/>
+
+ <!--
+ metadata counts, format is:
+ (scanned, fetched, outstanding)
+ -->
+ <arg name="metadata" type="(uuu)" direction="out"/>
+
+ <!--
+ delta data, format is:
+ (total parts, fetched parts, total super blocks, total size)
+ -->
+ <arg name="delta" type="(uuut)" direction="out"/>
+
+ <!--
+ content data, format is:
+ (fetched, requested)
+ -->
+ <arg name="content" type="(uu)" direction="out"/>
+
+ <!--
+ transfer data, format is:
+ (bytes transfered, bytes/s)
+ -->
+ <arg name="transfer" type="(tt)" direction="out"/>
+ </signal>
+
+ <signal name="SignatureProgress">
+ <!-- An ostree GVariant containing signature data
+ see ostree_gpg_verify_result_get_all.
+ -->
+ <arg name="signature" type="av" direction="out"/>
+ <!-- The signed commit -->
+ <arg name="commit" type="s" direction="out"/>
+ </signal>
+
+ <!-- Indicates progress signals are done and subsequent
+ Message signals should be output on separate lines. -->
+ <signal name="ProgressEnd"/>
+ </interface>
+</node>
diff --git a/plugins/snap/gs-plugin-snap.c b/plugins/snap/gs-plugin-snap.c
new file mode 100644
index 0000000..05d0294
--- /dev/null
+++ b/plugins/snap/gs-plugin-snap.c
@@ -0,0 +1,1325 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2018 Canonical Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gio/gdesktopappinfo.h>
+#include <glib/gi18n.h>
+#include <json-glib/json-glib.h>
+#include <snapd-glib/snapd-glib.h>
+#include <gnome-software.h>
+
+struct GsPluginData {
+ gchar *store_name;
+ gchar *store_hostname;
+ SnapdSystemConfinement system_confinement;
+
+ GMutex store_snaps_lock;
+ GHashTable *store_snaps;
+};
+
+typedef struct {
+ SnapdSnap *snap;
+ gboolean full_details;
+} CacheEntry;
+
+static CacheEntry *
+cache_entry_new (SnapdSnap *snap, gboolean full_details)
+{
+ CacheEntry *entry = g_slice_new (CacheEntry);
+ entry->snap = g_object_ref (snap);
+ entry->full_details = full_details;
+ return entry;
+}
+
+static void
+cache_entry_free (CacheEntry *entry)
+{
+ g_object_unref (entry->snap);
+ g_slice_free (CacheEntry, entry);
+}
+
+static SnapdAuthData *
+get_auth_data (GsPlugin *plugin)
+{
+ g_autofree gchar *path = NULL;
+ g_autoptr(JsonParser) parser = NULL;
+ JsonNode *root;
+ JsonObject *object;
+ const gchar *macaroon;
+ g_autoptr(GPtrArray) discharges = NULL;
+ g_autoptr(GError) error = NULL;
+
+ path = g_build_filename (g_get_home_dir (), ".snap", "auth.json", NULL);
+ parser = json_parser_new ();
+ if (!json_parser_load_from_file (parser, path, &error)) {
+ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+ g_warning ("Failed to load snap auth data: %s", error->message);
+ return NULL;
+ }
+
+ root = json_parser_get_root (parser);
+ if (root == NULL)
+ return NULL;
+
+ if (json_node_get_node_type (root) != JSON_NODE_OBJECT) {
+ g_warning ("Ignoring invalid snap auth data in %s", path);
+ return NULL;
+ }
+ object = json_node_get_object (root);
+ if (!json_object_has_member (object, "macaroon")) {
+ g_warning ("Ignoring invalid snap auth data in %s", path);
+ return NULL;
+ }
+ macaroon = json_object_get_string_member (object, "macaroon");
+ discharges = g_ptr_array_new ();
+ if (json_object_has_member (object, "discharges")) {
+ JsonArray *discharge_array;
+
+ discharge_array = json_object_get_array_member (object, "discharges");
+ for (guint i = 0; i < json_array_get_length (discharge_array); i++)
+ g_ptr_array_add (discharges, json_array_get_string_element (discharge_array, i));
+ }
+ g_ptr_array_add (discharges, NULL);
+
+ return snapd_auth_data_new (macaroon, (GStrv) discharges->pdata);
+}
+
+static SnapdClient *
+get_client (GsPlugin *plugin, GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+ const gchar *old_user_agent;
+ g_autofree gchar *user_agent = NULL;
+ g_autoptr(SnapdAuthData) auth_data = NULL;
+
+ client = snapd_client_new ();
+ snapd_client_set_allow_interaction (client, TRUE);
+ old_user_agent = snapd_client_get_user_agent (client);
+ user_agent = g_strdup_printf ("%s %s", gs_user_agent (), old_user_agent);
+ snapd_client_set_user_agent (client, user_agent);
+
+ auth_data = get_auth_data (plugin);
+ snapd_client_set_auth_data (client, auth_data);
+
+ return g_steal_pointer (&client);
+}
+
+void
+gs_plugin_initialize (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ g_autoptr(SnapdClient) client = NULL;
+ g_autoptr (GError) error = NULL;
+
+ g_mutex_init (&priv->store_snaps_lock);
+
+ client = get_client (plugin, &error);
+ if (client == NULL) {
+ gs_plugin_set_enabled (plugin, FALSE);
+ return;
+ }
+
+ priv->store_snaps = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) cache_entry_free);
+
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "desktop-categories");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_BETTER_THAN, "packagekit");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "icons");
+
+ /* Override hardcoded popular apps */
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, "hardcoded-popular");
+
+ /* set name of MetaInfo file */
+ gs_plugin_set_appstream_id (plugin, "org.gnome.Software.Plugin.Snap");
+}
+
+void
+gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
+{
+ if (gs_app_get_bundle_kind (app) == AS_BUNDLE_KIND_SNAP)
+ gs_app_set_management_plugin (app, "snap");
+
+ if (gs_app_get_id (app) != NULL && g_str_has_prefix (gs_app_get_id (app), "io.snapcraft.")) {
+ g_autofree gchar *name_and_id = NULL;
+ gchar *divider, *snap_name;/*, *id;*/
+
+ name_and_id = g_strdup (gs_app_get_id (app) + strlen ("io.snapcraft."));
+ divider = strrchr (name_and_id, '-');
+ if (divider != NULL) {
+ *divider = '\0';
+ snap_name = name_and_id;
+ /*id = divider + 1;*/ /* NOTE: Should probably validate ID */
+
+ gs_app_set_management_plugin (app, "snap");
+ gs_app_set_metadata (app, "snap::name", snap_name);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_SNAP);
+ }
+ }
+}
+
+static void
+snapd_error_convert (GError **perror)
+{
+ GError *error = perror != NULL ? *perror : NULL;
+
+ /* not set */
+ if (error == NULL)
+ return;
+
+ /* this are allowed for low-level errors */
+ if (gs_utils_error_convert_gio (perror))
+ return;
+
+ /* custom to this plugin */
+ if (error->domain == SNAPD_ERROR) {
+ switch (error->code) {
+ case SNAPD_ERROR_AUTH_DATA_REQUIRED:
+ error->code = GS_PLUGIN_ERROR_AUTH_REQUIRED;
+ g_free (error->message);
+ error->message = g_strdup ("Requires authentication with @snapd");
+ break;
+ case SNAPD_ERROR_AUTH_DATA_INVALID:
+ case SNAPD_ERROR_TWO_FACTOR_INVALID:
+ error->code = GS_PLUGIN_ERROR_AUTH_INVALID;
+ break;
+ case SNAPD_ERROR_AUTH_CANCELLED:
+ error->code = GS_PLUGIN_ERROR_CANCELLED;
+ break;
+ case SNAPD_ERROR_CONNECTION_FAILED:
+ case SNAPD_ERROR_WRITE_FAILED:
+ case SNAPD_ERROR_READ_FAILED:
+ case SNAPD_ERROR_BAD_REQUEST:
+ case SNAPD_ERROR_BAD_RESPONSE:
+ case SNAPD_ERROR_PERMISSION_DENIED:
+ case SNAPD_ERROR_FAILED:
+ case SNAPD_ERROR_TERMS_NOT_ACCEPTED:
+ case SNAPD_ERROR_PAYMENT_NOT_SETUP:
+ case SNAPD_ERROR_PAYMENT_DECLINED:
+ case SNAPD_ERROR_ALREADY_INSTALLED:
+ case SNAPD_ERROR_NOT_INSTALLED:
+ case SNAPD_ERROR_NO_UPDATE_AVAILABLE:
+ case SNAPD_ERROR_PASSWORD_POLICY_ERROR:
+ case SNAPD_ERROR_NEEDS_DEVMODE:
+ case SNAPD_ERROR_NEEDS_CLASSIC:
+ case SNAPD_ERROR_NEEDS_CLASSIC_SYSTEM:
+ default:
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ break;
+ }
+ } else {
+ g_warning ("can't reliably fixup error from domain %s",
+ g_quark_to_string (error->domain));
+ error->code = GS_PLUGIN_ERROR_FAILED;
+ }
+ error->domain = GS_PLUGIN_ERROR;
+}
+
+gboolean
+gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(SnapdClient) client = NULL;
+ g_autoptr(SnapdSystemInformation) system_information = NULL;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ system_information = snapd_client_get_system_information_sync (client, cancellable, error);
+ if (system_information == NULL)
+ return FALSE;
+ priv->store_name = g_strdup (snapd_system_information_get_store (system_information));
+ if (priv->store_name == NULL) {
+ priv->store_name = g_strdup (/* TRANSLATORS: default snap store name */
+ _("Snap Store"));
+ priv->store_hostname = g_strdup ("snapcraft.io");
+ }
+ priv->system_confinement = snapd_system_information_get_confinement (system_information);
+
+ /* success */
+ return TRUE;
+}
+
+static SnapdSnap *
+store_snap_cache_lookup (GsPlugin *plugin, const gchar *name, gboolean need_details)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ CacheEntry *entry;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->store_snaps_lock);
+
+ entry = g_hash_table_lookup (priv->store_snaps, name);
+ if (entry == NULL)
+ return NULL;
+
+ if (need_details && !entry->full_details)
+ return NULL;
+
+ return g_object_ref (entry->snap);
+}
+
+static void
+store_snap_cache_update (GsPlugin *plugin, GPtrArray *snaps, gboolean full_details)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&priv->store_snaps_lock);
+ guint i;
+
+ for (i = 0; i < snaps->len; i++) {
+ SnapdSnap *snap = snaps->pdata[i];
+ g_hash_table_insert (priv->store_snaps, g_strdup (snapd_snap_get_name (snap)), cache_entry_new (snap, full_details));
+ }
+}
+
+static GPtrArray *
+find_snaps (GsPlugin *plugin, SnapdFindFlags flags, const gchar *section, const gchar *query, GCancellable *cancellable, GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+ g_autoptr(GPtrArray) snaps = NULL;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return NULL;
+
+ snaps = snapd_client_find_section_sync (client, flags, section, query, NULL, cancellable, error);
+ if (snaps == NULL) {
+ snapd_error_convert (error);
+ return NULL;
+ }
+
+ store_snap_cache_update (plugin, snaps, flags & SNAPD_FIND_FLAGS_MATCH_NAME);
+
+ return g_steal_pointer (&snaps);
+}
+
+static GsApp *
+snap_to_app (GsPlugin *plugin, SnapdSnap *snap)
+{
+ GStrv common_ids;
+ g_autofree gchar *appstream_id = NULL;
+ g_autofree gchar *unique_id = NULL;
+ g_autoptr(GsApp) app = NULL;
+ SnapdConfinement confinement;
+
+ /* Get the AppStream ID from the snap, or generate a fallback one */
+ common_ids = snapd_snap_get_common_ids (snap);
+ if (g_strv_length (common_ids) == 1)
+ appstream_id = g_strdup (common_ids[0]);
+ else
+ appstream_id = g_strdup_printf ("io.snapcraft.%s-%s", snapd_snap_get_name (snap), snapd_snap_get_id (snap));
+
+ switch (snapd_snap_get_snap_type (snap)) {
+ case SNAPD_SNAP_TYPE_APP:
+ unique_id = g_strdup_printf ("system/snap/*/desktop/%s/*", appstream_id);
+ break;
+ case SNAPD_SNAP_TYPE_KERNEL:
+ case SNAPD_SNAP_TYPE_GADGET:
+ case SNAPD_SNAP_TYPE_OS:
+ unique_id = g_strdup_printf ("system/snap/*/runtime/%s/*", appstream_id);
+ break;
+ default:
+ case SNAPD_SNAP_TYPE_UNKNOWN:
+ unique_id = g_strdup_printf ("system/snap/*/*/%s/*", appstream_id);
+ break;
+ }
+
+ app = gs_plugin_cache_lookup (plugin, unique_id);
+ if (app == NULL) {
+ app = gs_app_new (NULL);
+ gs_app_set_from_unique_id (app, unique_id);
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_SNAP);
+ gs_app_set_metadata (app, "snap::name", snapd_snap_get_name (snap));
+ gs_plugin_cache_add (plugin, unique_id, app);
+ }
+
+ gs_app_set_management_plugin (app, "snap");
+ gs_app_add_quirk (app, GS_APP_QUIRK_DO_NOT_AUTO_UPDATE);
+ if (gs_app_get_kind (app) != AS_APP_KIND_DESKTOP)
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ if (gs_plugin_check_distro_id (plugin, "ubuntu"))
+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE);
+
+ confinement = snapd_snap_get_confinement (snap);
+ if (confinement != SNAPD_CONFINEMENT_UNKNOWN) {
+ GEnumClass *enum_class = g_type_class_ref (SNAPD_TYPE_CONFINEMENT);
+ gs_app_set_metadata (app, "snap::confinement", g_enum_get_value (enum_class, confinement)->value_nick);
+ g_type_class_unref (enum_class);
+ }
+
+ return g_steal_pointer (&app);
+}
+
+gboolean
+gs_plugin_url_to_app (GsPlugin *plugin,
+ GsAppList *list,
+ const gchar *url,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *scheme = NULL;
+ g_autofree gchar *path = NULL;
+ g_autoptr(GPtrArray) snaps = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* not us */
+ scheme = gs_utils_get_url_scheme (url);
+ if (g_strcmp0 (scheme, "snap") != 0)
+ return TRUE;
+
+ /* create app */
+ path = gs_utils_get_url_path (url);
+ snaps = find_snaps (plugin, SNAPD_FIND_FLAGS_SCOPE_WIDE | SNAPD_FIND_FLAGS_MATCH_NAME, NULL, path, cancellable, NULL);
+ if (snaps == NULL || snaps->len < 1)
+ return TRUE;
+
+ app = snap_to_app (plugin, g_ptr_array_index (snaps, 0));
+ gs_app_list_add (list, app);
+
+ return TRUE;
+}
+
+void
+gs_plugin_destroy (GsPlugin *plugin)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_free (priv->store_name);
+ g_free (priv->store_hostname);
+ g_clear_pointer (&priv->store_snaps, g_hash_table_unref);
+ g_mutex_clear (&priv->store_snaps_lock);
+}
+
+static gboolean
+is_banner_image (const gchar *filename)
+{
+ /* Check if this screenshot was uploaded as "banner.png" or "banner.jpg".
+ * The server optionally adds a 7 character suffix onto it if it would collide with
+ * an existing name, e.g. "banner_MgEy4MI.png"
+ * See https://forum.snapcraft.io/t/improve-method-for-setting-featured-snap-banner-image-in-store/
+ */
+ return g_regex_match_simple ("^banner(?:_[a-zA-Z0-9]{7})?\\.(?:png|jpg)$", filename, 0, 0);
+}
+
+static gboolean
+is_banner_icon_image (const gchar *filename)
+{
+ /* Check if this screenshot was uploaded as "banner-icon.png" or "banner-icon.jpg".
+ * The server optionally adds a 7 character suffix onto it if it would collide with
+ * an existing name, e.g. "banner-icon_Ugn6pmj.png"
+ * See https://forum.snapcraft.io/t/improve-method-for-setting-featured-snap-banner-image-in-store/
+ */
+ return g_regex_match_simple ("^banner-icon(?:_[a-zA-Z0-9]{7})?\\.(?:png|jpg)$", filename, 0, 0);
+}
+
+gboolean
+gs_plugin_add_popular (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GPtrArray) snaps = NULL;
+ guint i;
+
+ snaps = find_snaps (plugin, SNAPD_FIND_FLAGS_SCOPE_WIDE, "featured", NULL, cancellable, error);
+ if (snaps == NULL)
+ return FALSE;
+
+ for (i = 0; i < snaps->len; i++) {
+ g_autoptr(GsApp) app = snap_to_app (plugin, g_ptr_array_index (snaps, i));
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_category_apps (GsPlugin *plugin,
+ GsCategory *category,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsCategory *c;
+ g_autoptr(GString) id = NULL;
+ const gchar *sections = NULL;
+
+ id = g_string_new ("");
+ for (c = category; c != NULL; c = gs_category_get_parent (c)) {
+ if (c != category)
+ g_string_prepend (id, "/");
+ g_string_prepend (id, gs_category_get_id (c));
+ }
+
+ /*
+ * Unused categories:
+ *
+ * health-and-fitness
+ * personalisation
+ * devices-and-iot
+ * security
+ * server-and-cloud
+ * entertainment
+ */
+
+ if (strcmp (id->str, "games/featured") == 0)
+ sections = "games";
+ else if (strcmp (id->str, "audio-video/featured") == 0)
+ sections = "music-and-audio";
+ else if (strcmp (id->str, "graphics/featured") == 0)
+ sections = "photo-and-video;art-and-design";
+ else if (strcmp (id->str, "communication/featured") == 0)
+ sections = "social;news-and-weather";
+ else if (strcmp (id->str, "productivity/featured") == 0)
+ sections = "productivity;finance";
+ else if (strcmp (id->str, "developer-tools/featured") == 0)
+ sections = "development";
+ else if (strcmp (id->str, "utilities/featured") == 0)
+ sections = "utilities";
+ else if (strcmp (id->str, "education-science/featured") == 0)
+ sections = "education;science";
+ else if (strcmp (id->str, "reference/featured") == 0)
+ sections = "books-and-reference";
+
+ if (sections != NULL) {
+ g_auto(GStrv) tokens = NULL;
+ int i;
+
+ tokens = g_strsplit (sections, ";", -1);
+ for (i = 0; tokens[i] != NULL; i++) {
+ g_autoptr(GPtrArray) snaps = NULL;
+ guint j;
+
+ snaps = find_snaps (plugin, SNAPD_FIND_FLAGS_SCOPE_WIDE, tokens[i], NULL, cancellable, error);
+ if (snaps == NULL)
+ return FALSE;
+ for (j = 0; j < snaps->len; j++) {
+ g_autoptr(GsApp) app = snap_to_app (plugin, g_ptr_array_index (snaps, j));
+ gs_app_list_add (list, app);
+ }
+ }
+ }
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_installed (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+ g_autoptr(GPtrArray) snaps = NULL;
+ guint i;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ snaps = snapd_client_get_snaps_sync (client, SNAPD_GET_SNAPS_FLAGS_NONE, NULL, cancellable, error);
+ if (snaps == NULL) {
+ snapd_error_convert (error);
+ return FALSE;
+ }
+
+ for (i = 0; i < snaps->len; i++) {
+ SnapdSnap *snap = g_ptr_array_index (snaps, i);
+ g_autoptr(GsApp) app = NULL;
+
+ app = snap_to_app (plugin, snap);
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_search (GsPlugin *plugin,
+ gchar **values,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autofree gchar *query = NULL;
+ g_autoptr(GPtrArray) snaps = NULL;
+ guint i;
+
+ query = g_strjoinv (" ", values);
+ snaps = find_snaps (plugin, SNAPD_FIND_FLAGS_SCOPE_WIDE, NULL, query, cancellable, error);
+ if (snaps == NULL)
+ return FALSE;
+
+ for (i = 0; i < snaps->len; i++) {
+ g_autoptr(GsApp) app = snap_to_app (plugin, g_ptr_array_index (snaps, i));
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+static SnapdSnap *
+get_store_snap (GsPlugin *plugin, const gchar *name, gboolean need_details, GCancellable *cancellable, GError **error)
+{
+ SnapdSnap *snap = NULL;
+ g_autoptr(GPtrArray) snaps = NULL;
+
+ /* use cached version if available */
+ snap = store_snap_cache_lookup (plugin, name, need_details);
+ if (snap != NULL)
+ return g_object_ref (snap);
+
+ snaps = find_snaps (plugin, SNAPD_FIND_FLAGS_SCOPE_WIDE | SNAPD_FIND_FLAGS_MATCH_NAME, NULL, name, cancellable, error);
+ if (snaps == NULL || snaps->len < 1)
+ return NULL;
+
+ return g_object_ref (g_ptr_array_index (snaps, 0));
+}
+
+static int
+track_value (const gchar *track, GStrv tracks)
+{
+ int r = 0;
+ while (tracks[r] != NULL && strcmp (track, tracks[r]) != 0)
+ r++;
+ return r;
+}
+
+static int
+risk_value (const gchar *risk)
+{
+ if (strcmp (risk, "stable") == 0)
+ return 0;
+ else if (strcmp (risk, "candidate") == 0)
+ return 1;
+ else if (strcmp (risk, "beta") == 0)
+ return 2;
+ else if (strcmp (risk, "edge") == 0)
+ return 3;
+ else
+ return 4;
+}
+
+static int
+compare_channel (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+ SnapdChannel *channel_a = *(SnapdChannel **)a, *channel_b = *(SnapdChannel **)b;
+ GStrv tracks = user_data;
+ int r;
+
+ r = track_value (snapd_channel_get_track (channel_a), tracks) - track_value (snapd_channel_get_track (channel_b), tracks);
+ if (r != 0)
+ return r;
+
+ r = g_strcmp0 (snapd_channel_get_risk (channel_a), snapd_channel_get_risk (channel_b));
+ if (r != 0) {
+ int r2;
+
+ r2 = risk_value (snapd_channel_get_risk (channel_a)) - risk_value (snapd_channel_get_risk (channel_b));
+ if (r2 != 0)
+ return r2;
+ else
+ return r;
+ }
+
+ return g_strcmp0 (snapd_channel_get_branch (channel_a), snapd_channel_get_branch (channel_b));
+}
+
+static gchar *
+expand_channel_name (const gchar *name)
+{
+ g_auto(GStrv) tokens = NULL;
+ const gchar *risks[] = { "stable", "candidate", "beta", "edge", NULL };
+
+ if (name == NULL)
+ return NULL;
+
+ tokens = g_strsplit (name, "/", -1);
+ for (int i = 0; risks[i] != NULL; i++) {
+ if (strcmp (tokens[0], risks[i]) == 0)
+ return g_strconcat ("latest/", name, NULL);
+ }
+
+ return g_strdup (name);
+}
+
+gboolean
+gs_plugin_add_alternates (GsPlugin *plugin,
+ GsApp *app,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *snap_name;
+ g_autoptr(SnapdSnap) snap = NULL;
+ GStrv tracks;
+ GPtrArray *channels;
+ g_autoptr(GPtrArray) sorted_channels = NULL;
+
+ /* not us */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
+ return TRUE;
+
+ snap_name = gs_app_get_metadata_item (app, "snap::name");
+
+ snap = get_store_snap (plugin, snap_name, TRUE, cancellable, NULL);
+ if (snap == NULL) {
+ g_warning ("Failed to get store snap %s\n", snap_name);
+ return TRUE;
+ }
+
+ tracks = snapd_snap_get_tracks (snap);
+ channels = snapd_snap_get_channels (snap);
+ sorted_channels = g_ptr_array_new ();
+ for (guint i = 0; i < channels->len; i++) {
+ SnapdChannel *channel = g_ptr_array_index (channels, i);
+ g_ptr_array_add (sorted_channels, channel);
+ }
+ g_ptr_array_sort_with_data (sorted_channels, compare_channel, tracks);
+
+ for (guint i = 0; i < sorted_channels->len; i++) {
+ SnapdChannel *channel = g_ptr_array_index (sorted_channels, i);
+ g_autoptr(GsApp) a;
+ g_autofree gchar *expanded_name = NULL;
+
+ a = gs_app_new (NULL);
+ gs_app_set_bundle_kind (a, AS_BUNDLE_KIND_SNAP);
+ gs_app_set_metadata (a, "snap::name", snap_name);
+ expanded_name = expand_channel_name (snapd_channel_get_name (channel));
+ gs_app_set_branch (a, expanded_name);
+ gs_app_list_add (list, a);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+load_snap_icon (GsApp *app, SnapdClient *client, SnapdSnap *snap, GCancellable *cancellable)
+{
+ const gchar *icon_url;
+ g_autoptr(SnapdIcon) icon = NULL;
+ g_autoptr(GInputStream) input_stream = NULL;
+ g_autoptr(GdkPixbuf) pixbuf = NULL;
+ g_autoptr(GError) error = NULL;
+
+ icon_url = snapd_snap_get_icon (snap);
+ if (icon_url == NULL || strcmp (icon_url, "") == 0)
+ return FALSE;
+
+ icon = snapd_client_get_icon_sync (client, gs_app_get_metadata_item (app, "snap::name"), cancellable, &error);
+ if (icon == NULL) {
+ if (!g_error_matches (error, SNAPD_ERROR, SNAPD_ERROR_NOT_FOUND))
+ g_warning ("Failed to load snap icon: %s", error->message);
+ return FALSE;
+ }
+
+ input_stream = g_memory_input_stream_new_from_bytes (snapd_icon_get_data (icon));
+ pixbuf = gdk_pixbuf_new_from_stream_at_scale (input_stream, 64, 64, TRUE, cancellable, &error);
+ if (pixbuf == NULL) {
+ g_warning ("Failed to decode snap icon %s: %s", icon_url, error->message);
+ return FALSE;
+ }
+ gs_app_set_pixbuf (app, pixbuf);
+
+ return TRUE;
+}
+
+static gboolean
+app_name_matches_snap_name (SnapdSnap *snap, SnapdApp *app)
+{
+ return g_strcmp0 (snapd_snap_get_name (snap), snapd_app_get_name (app)) == 0;
+}
+
+static SnapdApp *
+get_primary_app (SnapdSnap *snap)
+{
+ GPtrArray *apps;
+ guint i;
+ SnapdApp *primary_app = NULL;
+
+ /* Pick the "main" app from the snap. In order of
+ * preference, we want to pick:
+ *
+ * 1. the main app, provided it has a desktop file
+ * 2. the first app with a desktop file
+ * 3. the main app
+ * 4. the first app
+ *
+ * The "main app" is one whose name matches the snap name.
+ */
+ apps = snapd_snap_get_apps (snap);
+ for (i = 0; i < apps->len; i++) {
+ SnapdApp *app = apps->pdata[i];
+
+ if (primary_app == NULL ||
+ (snapd_app_get_desktop_file (primary_app) == NULL && snapd_app_get_desktop_file (app) != NULL) ||
+ (!app_name_matches_snap_name (snap, primary_app) && app_name_matches_snap_name (snap, app)))
+ primary_app = app;
+ }
+
+ return primary_app;
+}
+
+static gboolean
+load_desktop_icon (GsApp *app, SnapdSnap *snap)
+{
+ GPtrArray *apps;
+ guint i;
+
+ apps = snapd_snap_get_apps (snap);
+ for (i = 0; i < apps->len; i++) {
+ SnapdApp *snap_app = apps->pdata[i];
+ const gchar *desktop_file_path;
+ g_autoptr(GKeyFile) desktop_file = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autofree gchar *icon_value = NULL;
+ g_autoptr(AsIcon) icon = NULL;
+
+ desktop_file_path = snapd_app_get_desktop_file (snap_app);
+ if (desktop_file_path == NULL)
+ continue;
+
+ desktop_file = g_key_file_new ();
+ if (!g_key_file_load_from_file (desktop_file, desktop_file_path, G_KEY_FILE_NONE, &error)) {
+ g_warning ("Failed to load desktop file %s: %s", desktop_file_path, error->message);
+ continue;
+ }
+
+ icon_value = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ICON, &error);
+ if (icon_value == NULL) {
+ g_warning ("Failed to get desktop file icon %s: %s", desktop_file_path, error->message);
+ continue;
+ }
+
+ icon = as_icon_new ();
+ if (g_str_has_prefix (icon_value, "/")) {
+ as_icon_set_kind (icon, AS_ICON_KIND_LOCAL);
+ as_icon_set_filename (icon, icon_value);
+ } else {
+ as_icon_set_kind (icon, AS_ICON_KIND_STOCK);
+ as_icon_set_name (icon, icon_value);
+ }
+ gs_app_add_icon (app, icon);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+load_store_icon (GsApp *app, SnapdSnap *snap)
+{
+ const gchar *icon_url;
+
+ icon_url = snapd_snap_get_icon (snap);
+ if (icon_url == NULL)
+ return FALSE;
+
+ if (g_str_has_prefix (icon_url, "http://") || g_str_has_prefix (icon_url, "https://")) {
+ g_autoptr(AsIcon) icon = as_icon_new ();
+ as_icon_set_kind (icon, AS_ICON_KIND_REMOTE);
+ as_icon_set_url (icon, icon_url);
+ gs_app_add_icon (app, icon);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+load_icon (GsPlugin *plugin, SnapdClient *client, GsApp *app, const gchar *id, SnapdSnap *local_snap, SnapdSnap *store_snap, GCancellable *cancellable)
+{
+ if (local_snap != NULL) {
+ if (load_snap_icon (app, client, local_snap, cancellable))
+ return TRUE;
+ if (load_desktop_icon (app, local_snap))
+ return TRUE;
+ }
+
+ if (store_snap == NULL)
+ store_snap = get_store_snap (plugin, gs_app_get_metadata_item (app, "snap::name"), FALSE, cancellable, NULL);
+ if (store_snap != NULL)
+ return load_store_icon (app, store_snap);
+
+ return FALSE;
+}
+
+static gchar *
+gs_plugin_snap_get_description_safe (SnapdSnap *snap)
+{
+ GString *str = g_string_new (snapd_snap_get_description (snap));
+ as_utils_string_replace (str, "\r", "");
+ as_utils_string_replace (str, " ", " ");
+ return g_string_free (str, FALSE);
+}
+
+static void
+refine_screenshots (GsApp *app, SnapdSnap *snap)
+{
+ GPtrArray *media;
+ guint i;
+
+ media = snapd_snap_get_media (snap);
+ for (i = 0; i < media->len; i++) {
+ SnapdMedia *m = media->pdata[i];
+ const gchar *url;
+ g_autofree gchar *filename = NULL;
+ g_autoptr(AsScreenshot) ss = NULL;
+ g_autoptr(AsImage) image = NULL;
+
+ if (g_strcmp0 (snapd_media_get_media_type (m), "screenshot") != 0)
+ continue;
+
+ /* skip screenshots used for banner when app is featured */
+ url = snapd_media_get_url (m);
+ filename = g_path_get_basename (url);
+ if (is_banner_image (filename) || is_banner_icon_image (filename))
+ continue;
+
+ ss = as_screenshot_new ();
+ as_screenshot_set_kind (ss, AS_SCREENSHOT_KIND_NORMAL);
+ image = as_image_new ();
+ as_image_set_url (image, snapd_media_get_url (m));
+ as_image_set_kind (image, AS_IMAGE_KIND_SOURCE);
+ as_image_set_width (image, snapd_media_get_width (m));
+ as_image_set_height (image, snapd_media_get_height (m));
+ as_screenshot_add_image (ss, image);
+ gs_app_add_screenshot (app, ss);
+ }
+}
+
+static gboolean
+refine_app_with_client (GsPlugin *plugin,
+ SnapdClient *client,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPluginData *priv = gs_plugin_get_data (plugin);
+ const gchar *snap_name, *name, *version;
+ g_autofree gchar *channel = NULL;
+ g_autofree gchar *store_channel = NULL;
+ g_autofree gchar *tracking_channel = NULL;
+ gboolean need_details = FALSE;
+ SnapdConfinement confinement = SNAPD_CONFINEMENT_UNKNOWN;
+ g_autoptr(SnapdSnap) local_snap = NULL;
+ g_autoptr(SnapdSnap) store_snap = NULL;
+ SnapdSnap *snap;
+ const gchar *developer_name;
+ g_autofree gchar *description = NULL;
+
+ /* not us */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
+ return TRUE;
+
+ snap_name = gs_app_get_metadata_item (app, "snap::name");
+ channel = g_strdup (gs_app_get_branch (app));
+
+ /* get information from locally installed snaps and information we already have */
+ local_snap = snapd_client_get_snap_sync (client, snap_name, cancellable, NULL);
+ store_snap = store_snap_cache_lookup (plugin, snap_name, FALSE);
+ if (store_snap != NULL)
+ store_channel = expand_channel_name (snapd_snap_get_channel (store_snap));
+
+ /* check if requested information requires us to go to the Snap Store */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS)
+ need_details = TRUE;
+ if (channel != NULL && g_strcmp0 (store_channel, channel) != 0)
+ need_details = TRUE;
+ if (need_details) {
+ g_clear_object (&store_snap);
+ store_snap = get_store_snap (plugin, snap_name, need_details, cancellable, NULL);
+ }
+
+ /* we don't know anything about this snap */
+ if (local_snap == NULL && store_snap == NULL)
+ return TRUE;
+
+ if (local_snap != NULL)
+ tracking_channel = expand_channel_name (snapd_snap_get_tracking_channel (local_snap));
+
+ /* Get default channel to install */
+ if (channel == NULL) {
+ if (local_snap != NULL)
+ channel = g_strdup (tracking_channel);
+ else
+ channel = expand_channel_name (snapd_snap_get_channel (store_snap));
+
+ gs_app_set_branch (app, channel);
+ }
+
+ if (local_snap != NULL && g_strcmp0 (tracking_channel, channel) == 0) {
+ /* Do not set to installed state if app is updatable */
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE_LIVE) {
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ }
+ } else
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ gs_app_add_quirk (app, GS_APP_QUIRK_DO_NOT_AUTO_UPDATE);
+
+ /* use store information for basic metadata over local information */
+ snap = store_snap != NULL ? store_snap : local_snap;
+ name = snapd_snap_get_title (snap);
+ if (name == NULL || g_strcmp0 (name, "") == 0)
+ name = snapd_snap_get_name (snap);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, name);
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_summary (snap));
+ description = gs_plugin_snap_get_description_safe (snap);
+ if (description != NULL)
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL, description);
+ gs_app_set_license (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_license (snap));
+ developer_name = snapd_snap_get_publisher_display_name (snap);
+ if (developer_name == NULL)
+ developer_name = snapd_snap_get_publisher_username (snap);
+ gs_app_set_developer_name (app, developer_name);
+ if (snapd_snap_get_publisher_validation (snap) == SNAPD_PUBLISHER_VALIDATION_VERIFIED)
+ gs_app_add_quirk (app, GS_APP_QUIRK_DEVELOPER_VERIFIED);
+
+ snap = local_snap != NULL ? local_snap : store_snap;
+ version = snapd_snap_get_version (snap);
+ confinement = snapd_snap_get_confinement (snap);
+
+ if (channel != NULL && store_snap != NULL) {
+ GPtrArray *channels = snapd_snap_get_channels (store_snap);
+ guint i;
+ for (i = 0; i < channels->len; i++) {
+ SnapdChannel *c = channels->pdata[i];
+ g_autofree gchar *expanded_name = NULL;
+
+ expanded_name = expand_channel_name (snapd_channel_get_name (c));
+ if (g_strcmp0 (expanded_name, channel) != 0)
+ continue;
+
+ version = snapd_channel_get_version (c);
+ confinement = snapd_channel_get_confinement (c);
+ }
+ }
+
+ gs_app_set_version (app, version);
+
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS &&
+ priv->system_confinement == SNAPD_SYSTEM_CONFINEMENT_STRICT &&
+ confinement == SNAPD_CONFINEMENT_STRICT)
+ gs_app_add_kudo (app, GS_APP_KUDO_SANDBOXED);
+
+ switch (snapd_snap_get_snap_type (snap)) {
+ case SNAPD_SNAP_TYPE_APP:
+ gs_app_set_kind (app, AS_APP_KIND_DESKTOP);
+ break;
+ case SNAPD_SNAP_TYPE_KERNEL:
+ case SNAPD_SNAP_TYPE_GADGET:
+ case SNAPD_SNAP_TYPE_OS:
+ gs_app_set_kind (app, AS_APP_KIND_RUNTIME);
+ break;
+ default:
+ case SNAPD_SNAP_TYPE_UNKNOWN:
+ gs_app_set_kind (app, AS_APP_KIND_UNKNOWN);
+ break;
+ }
+
+ /* add information specific to installed snaps */
+ if (local_snap != NULL) {
+ SnapdApp *snap_app;
+ GDateTime *install_date;
+
+ install_date = snapd_snap_get_install_date (local_snap);
+ gs_app_set_size_installed (app, snapd_snap_get_installed_size (local_snap));
+ gs_app_set_install_date (app, install_date != NULL ? g_date_time_to_unix (install_date) : GS_APP_INSTALL_DATE_UNKNOWN);
+
+ snap_app = get_primary_app (local_snap);
+ if (snap_app != NULL) {
+ gs_app_set_metadata (app, "snap::launch-name", snapd_app_get_name (snap_app));
+ gs_app_set_metadata (app, "snap::launch-desktop", snapd_app_get_desktop_file (snap_app));
+ } else {
+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_LAUNCHABLE);
+ }
+ }
+
+ /* add information specific to store snaps */
+ if (store_snap != NULL) {
+ gs_app_set_origin (app, priv->store_name);
+ gs_app_set_origin_hostname (app, priv->store_hostname);
+ gs_app_set_size_download (app, snapd_snap_get_download_size (store_snap));
+
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS && gs_app_get_screenshots (app)->len == 0)
+ refine_screenshots (app, store_snap);
+ }
+
+ /* load icon if requested */
+ if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON && gs_app_get_pixbuf (app) == NULL)
+ load_icon (plugin, client, app, snap_name, local_snap, store_snap, cancellable);
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_refine (GsPlugin *plugin,
+ GsAppList *list,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (!refine_app_with_client (plugin, client, app, flags, cancellable, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+progress_cb (SnapdClient *client, SnapdChange *change, gpointer deprecated, gpointer user_data)
+{
+ GsApp *app = user_data;
+ GPtrArray *tasks;
+ guint i;
+ gint64 done = 0, total = 0;
+
+ tasks = snapd_change_get_tasks (change);
+ for (i = 0; i < tasks->len; i++) {
+ SnapdTask *task = tasks->pdata[i];
+ done += snapd_task_get_progress_done (task);
+ total += snapd_task_get_progress_total (task);
+ }
+
+ gs_app_set_progress (app, (guint) (100 * done / total));
+}
+
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+ const gchar *name, *channel;
+ SnapdInstallFlags flags = SNAPD_INSTALL_FLAGS_NONE;
+ gboolean result;
+ g_autoptr(GError) error_local = NULL;
+
+ /* We can only install apps we know of */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
+ return TRUE;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ name = gs_app_get_metadata_item (app, "snap::name");
+ channel = gs_app_get_branch (app);
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+
+ if (g_strcmp0 (gs_app_get_metadata_item (app, "snap::confinement"), "classic") == 0)
+ flags |= SNAPD_INSTALL_FLAGS_CLASSIC;
+ result = snapd_client_install2_sync (client, flags, name, channel, NULL, progress_cb, app, cancellable, &error_local);
+
+ /* if already installed then just try to switch channel */
+ if (!result && g_error_matches (error_local, SNAPD_ERROR, SNAPD_ERROR_ALREADY_INSTALLED)) {
+ g_clear_error (&error_local);
+ result = snapd_client_refresh_sync (client, name, channel, progress_cb, app, cancellable, &error_local);
+ }
+
+ if (!result) {
+ gs_app_set_state_recover (app);
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ snapd_error_convert (error);
+ return FALSE;
+ }
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+
+ return TRUE;
+}
+
+// Check if an app is graphical by checking if it uses a known GUI interface.
+// This doesn't necessarily mean that every binary uses this interfaces, but is probably true.
+// https://bugs.launchpad.net/bugs/1595023
+static gboolean
+is_graphical (GsPlugin *plugin, GsApp *app, GCancellable *cancellable)
+{
+ g_autoptr(SnapdClient) client = NULL;
+ g_autoptr(GPtrArray) plugs = NULL;
+ guint i;
+ g_autoptr(GError) error = NULL;
+
+ client = get_client (plugin, &error);
+ if (client == NULL)
+ return FALSE;
+
+ if (!snapd_client_get_connections2_sync (client,
+ SNAPD_GET_CONNECTIONS_FLAGS_SELECT_ALL, NULL, NULL,
+ NULL, NULL, &plugs, NULL,
+ cancellable, &error)) {
+ g_warning ("Failed to get connections: %s", error->message);
+ return FALSE;
+ }
+
+ for (i = 0; i < plugs->len; i++) {
+ SnapdPlug *plug = plugs->pdata[i];
+ const gchar *interface;
+
+ // Only looks at the plugs for this snap
+ if (g_strcmp0 (snapd_plug_get_snap (plug), gs_app_get_metadata_item (app, "snap::name")) != 0)
+ continue;
+
+ interface = snapd_plug_get_interface (plug);
+ if (interface == NULL)
+ continue;
+
+ if (g_strcmp0 (interface, "unity7") == 0 || g_strcmp0 (interface, "x11") == 0 || g_strcmp0 (interface, "mir") == 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+gboolean
+gs_plugin_launch (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *launch_name;
+ const gchar *launch_desktop;
+ g_autoptr(GAppInfo) info = NULL;
+
+ /* We can only launch apps we know of */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
+ return TRUE;
+
+ launch_name = gs_app_get_metadata_item (app, "snap::launch-name");
+ launch_desktop = gs_app_get_metadata_item (app, "snap::launch-desktop");
+ if (!launch_name)
+ return TRUE;
+
+ if (launch_desktop) {
+ info = (GAppInfo *)g_desktop_app_info_new_from_filename (launch_desktop);
+ } else {
+ g_autofree gchar *commandline = NULL;
+ GAppInfoCreateFlags flags = G_APP_INFO_CREATE_NONE;
+
+ if (g_strcmp0 (launch_name, gs_app_get_metadata_item (app, "snap::name")) == 0)
+ commandline = g_strdup_printf ("snap run %s", launch_name);
+ else
+ commandline = g_strdup_printf ("snap run %s.%s", gs_app_get_metadata_item (app, "snap::name"), launch_name);
+
+ if (!is_graphical (plugin, app, cancellable))
+ flags |= G_APP_INFO_CREATE_NEEDS_TERMINAL;
+ info = g_app_info_create_from_commandline (commandline, NULL, flags, error);
+ }
+
+ if (info == NULL)
+ return FALSE;
+
+ return g_app_info_launch (info, NULL, NULL, error);
+}
+
+gboolean
+gs_plugin_app_remove (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+
+ /* We can only remove apps we know of */
+ if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
+ return TRUE;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ gs_app_set_state (app, AS_APP_STATE_REMOVING);
+ if (!snapd_client_remove2_sync (client, SNAPD_REMOVE_FLAGS_NONE, gs_app_get_metadata_item (app, "snap::name"), progress_cb, app, cancellable, error)) {
+ gs_app_set_state_recover (app);
+ snapd_error_convert (error);
+ return FALSE;
+ }
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ return TRUE;
+}
+
+gboolean
+gs_plugin_add_updates (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(GPtrArray) apps = NULL;
+ g_autoptr(SnapdClient) client = NULL;
+ g_autoptr(GError) error_local = NULL;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ /* Get the list of refreshable snaps */
+ apps = snapd_client_find_refreshable_sync (client, cancellable, &error_local);
+ if (apps == NULL) {
+ g_warning ("Failed to find refreshable snaps: %s", error_local->message);
+ return TRUE;
+ }
+
+ for (guint i = 0; i < apps->len; i++) {
+ SnapdSnap *snap = g_ptr_array_index (apps, i);
+ g_autoptr(GsApp) app = NULL;
+
+ /* Convert SnapdSnap to a GsApp */
+ app = snap_to_app (plugin, snap);
+
+ /* If for some reason the app is already getting updated, then
+ * don't change its state */
+ if (gs_app_get_state (app) != AS_APP_STATE_INSTALLING)
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
+
+ /* Add GsApp to updatable GsAppList */
+ gs_app_list_add (list, app);
+ }
+
+ return TRUE;
+}
+
+gboolean
+gs_plugin_update (GsPlugin *plugin,
+ GsAppList *list,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_autoptr(SnapdClient) client = NULL;
+
+ client = get_client (plugin, error);
+ if (client == NULL)
+ return FALSE;
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ /* Get the name of the snap to refresh */
+ GsApp *app = gs_app_list_index (list, i);
+ gchar *name = gs_app_get_metadata_item (app, "snap::name");
+
+ /* Refresh the snap */
+ gs_app_set_state (app, AS_APP_STATE_INSTALLING);
+
+ if (!snapd_client_refresh_sync (client, name, NULL, progress_cb, app, cancellable, error)) {
+ gs_app_set_state_recover (app);
+ snapd_error_convert (error);
+ return FALSE;
+ }
+
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ }
+
+ return TRUE;
+}
diff --git a/plugins/snap/gs-self-test.c b/plugins/snap/gs-self-test.c
new file mode 100644
index 0000000..f10de87
--- /dev/null
+++ b/plugins/snap/gs-self-test.c
@@ -0,0 +1,374 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Canonical Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <snapd-glib/snapd-glib.h>
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-test.h"
+
+static gboolean snap_installed = FALSE;
+
+SnapdAuthData *
+snapd_login_sync (const gchar *username, const gchar *password, const gchar *otp,
+ GCancellable *cancellable, GError **error)
+{
+ return snapd_auth_data_new ("macaroon", NULL);
+}
+
+SnapdClient *
+snapd_client_new (void)
+{
+ /* use a dummy object - we intercept all snapd-glib calls */
+ return g_object_new (G_TYPE_OBJECT, NULL);
+}
+
+void
+snapd_client_set_allow_interaction (SnapdClient *client, gboolean allow_interaction)
+{
+}
+
+void
+snapd_client_set_auth_data (SnapdClient *client, SnapdAuthData *auth_data)
+{
+}
+
+gboolean
+snapd_client_connect_sync (SnapdClient *client, GCancellable *cancellable, GError **error)
+{
+ /* skip connection */
+ return TRUE;
+}
+
+const gchar *
+snapd_client_get_user_agent (SnapdClient *client)
+{
+ return "snapd-glib/0.0.1";
+}
+
+void
+snapd_client_set_user_agent (SnapdClient *client, const gchar *user_agent)
+{
+}
+
+SnapdSystemInformation *
+snapd_client_get_system_information_sync (SnapdClient *client, GCancellable *cancellable, GError **error)
+{
+ g_autoptr(GHashTable) sandbox_features = g_hash_table_new (g_str_hash, g_str_equal);
+ return g_object_new (SNAPD_TYPE_SYSTEM_INFORMATION,
+ "version", "2.31",
+ "confinement", SNAPD_SYSTEM_CONFINEMENT_STRICT,
+ "sandbox-features", sandbox_features,
+ NULL);
+}
+
+static SnapdSnap *
+make_snap (const gchar *name, SnapdSnapStatus status)
+{
+ gchar *common_ids[] = { NULL };
+ g_autoptr(GDateTime) install_date = NULL;
+ g_autoptr(GPtrArray) apps = NULL;
+ g_autoptr(GPtrArray) media = NULL;
+ SnapdMedia *m;
+
+ install_date = g_date_time_new_utc (2017, 1, 2, 11, 23, 58);
+
+ apps = g_ptr_array_new_with_free_func (g_object_unref);
+
+ media = g_ptr_array_new_with_free_func (g_object_unref);
+ m = g_object_new (SNAPD_TYPE_MEDIA,
+ "type", "screenshot",
+ "url", "http://example.com/screenshot1.jpg",
+ "width", 640,
+ "height", 480,
+ NULL);
+ g_ptr_array_add (media, m);
+ m = g_object_new (SNAPD_TYPE_MEDIA,
+ "type", "screenshot",
+ "url", "http://example.com/screenshot2.jpg",
+ "width", 1024,
+ "height", 768,
+ NULL);
+ g_ptr_array_add (media, m);
+
+ return g_object_new (SNAPD_TYPE_SNAP,
+ "apps", status == SNAPD_SNAP_STATUS_INSTALLED ? apps : NULL,
+ "common-ids", common_ids,
+ "description", "DESCRIPTION",
+ "download-size", status == SNAPD_SNAP_STATUS_AVAILABLE ? 500 : 0,
+ "icon", status == SNAPD_SNAP_STATUS_AVAILABLE ? NULL : "/icon",
+ "id", name,
+ "install-date", status == SNAPD_SNAP_STATUS_INSTALLED ? install_date : NULL,
+ "installed-size", status == SNAPD_SNAP_STATUS_INSTALLED ? 1000 : 0,
+ "media", status == SNAPD_SNAP_STATUS_AVAILABLE ? media : NULL,
+ "name", name,
+ "status", status,
+ "snap-type", SNAPD_SNAP_TYPE_APP,
+ "summary", "SUMMARY",
+ "version", "VERSION",
+ NULL);
+}
+
+GPtrArray *
+snapd_client_get_snaps_sync (SnapdClient *client,
+ SnapdGetSnapsFlags flags, gchar **names,
+ GCancellable *cancellable, GError **error)
+{
+ GPtrArray *snaps;
+
+ snaps = g_ptr_array_new_with_free_func (g_object_unref);
+ if (snap_installed)
+ g_ptr_array_add (snaps, make_snap ("snap", SNAPD_SNAP_STATUS_INSTALLED));
+
+ return snaps;
+}
+
+SnapdSnap *
+snapd_client_get_snap_sync (SnapdClient *client,
+ const gchar *name,
+ GCancellable *cancellable, GError **error)
+{
+ if (snap_installed) {
+ return make_snap ("snap", SNAPD_SNAP_STATUS_INSTALLED);
+ } else {
+ g_set_error_literal (error, SNAPD_ERROR, SNAPD_ERROR_NOT_INSTALLED, "not installed");
+ return NULL;
+ }
+}
+
+SnapdIcon *
+snapd_client_get_icon_sync (SnapdClient *client,
+ const gchar *name,
+ GCancellable *cancellable, GError **error)
+{
+ g_autoptr(GBytes) data = NULL;
+ /* apparently this is the smallest valid PNG file (1x1) */
+ const gchar png_data[67] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
+ 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
+ 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41,
+ 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00,
+ 0x05, 0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, 0x00,
+ 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
+ 0x42, 0x60, 0x82 };
+
+ data = g_bytes_new (png_data, 67);
+ return g_object_new (SNAPD_TYPE_ICON,
+ "mime-type", "image/png",
+ "data", data,
+ NULL);
+}
+
+gboolean
+snapd_client_get_connections_sync (SnapdClient *client,
+ GPtrArray **established, GPtrArray **undesired,
+ GPtrArray **plugs, GPtrArray **slots,
+ GCancellable *cancellable, GError **error)
+{
+ if (plugs)
+ *plugs = g_ptr_array_new_with_free_func (g_object_unref);
+ if (slots)
+ *slots = g_ptr_array_new_with_free_func (g_object_unref);
+ return TRUE;
+}
+
+GPtrArray *
+snapd_client_find_section_sync (SnapdClient *client,
+ SnapdFindFlags flags,
+ const gchar *section, const gchar *query,
+ gchar **suggested_currency,
+ GCancellable *cancellable, GError **error)
+{
+ GPtrArray *snaps;
+
+ snaps = g_ptr_array_new_with_free_func (g_object_unref);
+ g_ptr_array_add (snaps, make_snap ("snap", SNAPD_SNAP_STATUS_AVAILABLE));
+
+ return snaps;
+}
+
+gboolean
+snapd_client_install2_sync (SnapdClient *client,
+ SnapdInstallFlags flags,
+ const gchar *name, const gchar *channel, const gchar *revision,
+ SnapdProgressCallback progress_callback, gpointer progress_callback_data,
+ GCancellable *cancellable, GError **error)
+{
+ g_autoptr(SnapdChange) change = NULL;
+ g_autoptr(GPtrArray) tasks = NULL;
+ SnapdTask *task;
+
+ g_assert_cmpstr (name, ==, "snap");
+ g_assert (channel == NULL);
+
+ tasks = g_ptr_array_new_with_free_func (g_object_unref);
+ task = g_object_new (SNAPD_TYPE_TASK,
+ "progress-done", 0,
+ "progress-total", 1,
+ NULL);
+ g_ptr_array_add (tasks, task);
+ change = g_object_new (SNAPD_TYPE_CHANGE,
+ "tasks", tasks,
+ NULL);
+ progress_callback (client, change, NULL, progress_callback_data);
+
+ snap_installed = TRUE;
+ return TRUE;
+}
+
+gboolean
+snapd_client_remove_sync (SnapdClient *client,
+ const gchar *name,
+ SnapdProgressCallback progress_callback, gpointer progress_callback_data,
+ GCancellable *cancellable, GError **error)
+{
+ g_autoptr(SnapdChange) change = NULL;
+ g_autoptr(GPtrArray) tasks = NULL;
+ SnapdTask *task;
+
+ g_assert_cmpstr (name, ==, "snap");
+
+ tasks = g_ptr_array_new_with_free_func (g_object_unref);
+ task = g_object_new (SNAPD_TYPE_TASK,
+ "progress-done", 0,
+ "progress-total", 1,
+ NULL);
+ g_ptr_array_add (tasks, task);
+ change = g_object_new (SNAPD_TYPE_CHANGE,
+ "tasks", tasks,
+ NULL);
+ progress_callback (client, change, NULL, progress_callback_data);
+
+ snap_installed = FALSE;
+ return TRUE;
+}
+
+static void
+gs_plugins_snap_test_func (GsPluginLoader *plugin_loader)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GsAppList) apps = NULL;
+ gboolean ret;
+ GsApp *app;
+ GPtrArray *screenshots, *images;
+ AsScreenshot *screenshot;
+ AsImage *image;
+ GdkPixbuf *pixbuf;
+ g_autoptr(GError) error = NULL;
+
+ /* no snap, abort */
+ if (!gs_plugin_loader_get_enabled (plugin_loader, "snap")) {
+ g_test_skip ("not enabled");
+ return;
+ }
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", "snap",
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON | GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS,
+ NULL);
+ apps = gs_plugin_loader_job_process (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (apps != NULL);
+ g_assert_cmpint (gs_app_list_length (apps), ==, 1);
+ app = gs_app_list_index (apps, 0);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
+ g_assert_cmpstr (gs_app_get_name (app), ==, "snap");
+ g_assert_cmpstr (gs_app_get_version (app), ==, "VERSION");
+ g_assert_cmpstr (gs_app_get_summary (app), ==, "SUMMARY");
+ g_assert_cmpstr (gs_app_get_description (app), ==, "DESCRIPTION");
+ screenshots = gs_app_get_screenshots (app);
+ g_assert_cmpint (screenshots->len, ==, 2);
+ screenshot = g_ptr_array_index (screenshots, 0);
+ images = as_screenshot_get_images (screenshot);
+ g_assert_cmpint (images->len, ==, 1);
+ image = g_ptr_array_index (images, 0);
+ g_assert_cmpstr (as_image_get_url (image), ==, "http://example.com/screenshot1.jpg");
+ g_assert_cmpint (as_image_get_width (image), ==, 640);
+ g_assert_cmpint (as_image_get_height (image), ==, 480);
+ screenshot = g_ptr_array_index (screenshots, 1);
+ images = as_screenshot_get_images (screenshot);
+ g_assert_cmpint (images->len, ==, 1);
+ image = g_ptr_array_index (images, 0);
+ g_assert_cmpstr (as_image_get_url (image), ==, "http://example.com/screenshot2.jpg");
+ g_assert_cmpint (as_image_get_width (image), ==, 1024);
+ g_assert_cmpint (as_image_get_height (image), ==, 768);
+ pixbuf = gs_app_get_pixbuf (app);
+ g_assert_null (pixbuf);
+ g_assert_cmpint (gs_app_get_size_installed (app), ==, 0);
+ g_assert_cmpint (gs_app_get_size_download (app), ==, 500);
+ g_assert_cmpint (gs_app_get_install_date (app), ==, 0);
+
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ gs_test_flush_main_context ();
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_INSTALLED);
+ g_assert_cmpint (gs_app_get_size_installed (app), ==, 1000);
+ g_assert_cmpint (gs_app_get_install_date (app), ==, g_date_time_to_unix (g_date_time_new_utc (2017, 1, 2, 11, 23, 58)));
+
+ pixbuf = gs_app_get_pixbuf (app);
+ g_assert_cmpint (gdk_pixbuf_get_width (pixbuf), ==, 64);
+ g_assert_cmpint (gdk_pixbuf_get_height (pixbuf), ==, 64);
+
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "app", app,
+ NULL);
+ gs_test_flush_main_context ();
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginLoader) plugin_loader = NULL;
+ const gchar *allowlist[] = {
+ "snap",
+ NULL
+ };
+
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* we can only load this once per process */
+ plugin_loader = gs_plugin_loader_new ();
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR);
+ gs_plugin_loader_add_location (plugin_loader, LOCALPLUGINDIR_CORE);
+ ret = gs_plugin_loader_setup (plugin_loader,
+ (gchar**) allowlist,
+ NULL,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* plugin tests go here */
+ g_test_add_data_func ("/gnome-software/plugins/snap/test",
+ plugin_loader,
+ (GTestDataFunc) gs_plugins_snap_test_func);
+ return g_test_run ();
+}
diff --git a/plugins/snap/meson.build b/plugins/snap/meson.build
new file mode 100644
index 0000000..6afe62c
--- /dev/null
+++ b/plugins/snap/meson.build
@@ -0,0 +1,54 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginSnap"']
+
+shared_module(
+ 'gs_plugin_snap',
+ sources : [
+ 'gs-plugin-snap.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ install : true,
+ install_dir: plugin_dir,
+ c_args : cargs,
+ dependencies : [ plugin_libs, snap ],
+ link_with : [
+ libgnomesoftware
+ ]
+)
+metainfo = 'org.gnome.Software.Plugin.Snap.metainfo.xml'
+
+i18n.merge_file(
+ input: metainfo + '.in',
+ output: metainfo,
+ type: 'xml',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'metainfo')
+)
+
+if get_option('tests')
+ cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+ cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+ e = executable(
+ 'gs-self-test-snap',
+ compiled_schemas,
+ sources : [
+ 'gs-self-test.c'
+ ],
+ include_directories : [
+ include_directories('../..'),
+ include_directories('../../lib'),
+ ],
+ dependencies : [
+ plugin_libs,
+ snap
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ )
+ test('gs-self-test-snap', e, suite: ['plugins', 'snap'], env: test_env)
+endif
diff --git a/plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in b/plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in
new file mode 100644
index 0000000..2478778
--- /dev/null
+++ b/plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2013-2016 Richard Hughes <richard@hughsie.com> -->
+<component type="addon">
+ <id>org.gnome.Software.Plugin.Snap</id>
+ <extends>org.gnome.Software.desktop</extends>
+ <name>Snap Support</name>
+ <summary>A snap is a universal Linux package</summary>
+ <url type="homepage">https://snapcraft.io/</url>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-2.0+</project_license>
+ <update_contact>richard_at_hughsie.com</update_contact>
+</component>
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..342a211
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,65 @@
+af
+ar
+as
+bg
+bn
+bs
+ca
+ca@valencia
+ckb
+cs
+da
+de
+el
+en_GB
+eo
+es
+eu
+fa
+fi
+fr
+fur
+ga
+gd
+gl
+he
+hi
+hr
+hu
+id
+is
+it
+ja
+kab
+kk
+km
+ko
+lt
+lv
+mjw
+ml
+mr
+ms
+nb
+ne
+nl
+oc
+pa
+pl
+pt
+pt_BR
+ro
+ru
+sk
+sl
+sr
+sr@latin
+sv
+te
+th
+tr
+uk
+vi
+zh_CN
+zh_HK
+zh_TW
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..a44a6ad
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,92 @@
+data/appdata/org.gnome.Software.appdata.xml.in
+data/org.gnome.software.external-appstream.policy.in.in
+data/org.gnome.software.gschema.xml
+src/gnome-software-local-file.desktop.in
+src/gnome-software.ui
+lib/gs-app.c
+src/gs-app-addon-row.c
+src/gs-application.c
+src/gs-app-row.c
+src/gs-app-row.ui
+src/gs-app-tile.c
+src/gs-app-tile.ui
+src/gs-basic-auth-dialog.c
+src/gs-basic-auth-dialog.ui
+lib/gs-category.c
+src/gs-category-page.c
+src/gs-category-page.ui
+lib/gs-cmd.c
+src/gs-common.c
+src/gs-content-rating.c
+src/gs-dbus-helper.c
+src/gs-details-page.c
+src/gs-details-page.ui
+src/gs-extras-page.c
+src/gs-extras-page.ui
+src/gs-feature-tile.c
+src/gs-first-run-dialog.ui
+src/gs-hiding-box.c
+src/gs-history-dialog.c
+src/gs-history-dialog.ui
+src/gs-installed-page.c
+src/gs-installed-page.ui
+src/gs-loading-page.c
+src/gs-loading-page.ui
+src/gs-main.c
+src/gs-metered-data-dialog.ui
+src/gs-moderate-page.ui
+src/gs-origin-popover-row.c
+src/gs-origin-popover-row.ui
+src/gs-overview-page.c
+src/gs-overview-page.ui
+src/gs-page.c
+lib/gs-plugin-loader.c
+src/gs-popular-tile.c
+src/gs-popular-tile.ui
+src/gs-prefs-dialog.ui
+src/gs-removal-dialog.c
+src/gs-removal-dialog.ui
+src/gs-repos-dialog.c
+src/gs-repos-dialog.ui
+src/gs-repo-row.c
+src/gs-repo-row.ui
+src/gs-review-dialog.c
+src/gs-review-dialog.ui
+src/gs-review-histogram.ui
+src/gs-review-row.c
+src/gs-review-row.ui
+src/gs-screenshot-image.c
+src/gs-search-page.c
+src/gs-search-page.ui
+src/gs-shell.c
+src/gs-shell-search-provider.c
+src/gs-star-widget.ui
+src/gs-summary-tile.c
+src/gs-summary-tile.ui
+src/gs-third-party-repo-row.c
+src/gs-update-dialog.c
+src/gs-update-dialog.ui
+src/gs-update-list.c
+src/gs-update-monitor.c
+src/gs-updates-page.c
+src/gs-updates-page.ui
+src/gs-updates-section.c
+src/gs-upgrade-banner.c
+src/gs-upgrade-banner.ui
+src/org.gnome.Software.desktop.in
+plugins/core/gs-desktop-common.c
+plugins/core/gs-plugin-generic-updates.c
+plugins/core/gs-plugin-rewrite-resource.c
+plugins/eos-updater/gs-plugin-eos-updater.c
+plugins/external-appstream/gs-install-appstream.c
+plugins/external-appstream/gs-plugin-external-appstream.c
+plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c
+plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in
+plugins/flatpak/gs-flatpak.c
+plugins/fwupd/gs-fwupd-app.c
+plugins/fwupd/gs-plugin-fwupd.c
+plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in
+plugins/odrs/gs-plugin-odrs.c
+plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in
+plugins/snap/gs-plugin-snap.c
+plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in
diff --git a/po/af.po b/po/af.po
new file mode 100644
index 0000000..df12719
--- /dev/null
+++ b/po/af.po
@@ -0,0 +1,5120 @@
+# Afrikaans translation for gnome-software.
+# This file is distributed under the same license as the gnome-software package.
+# Copyright (C)
+# F Wolff <friedel@translate.org.za>, 2014.
+# Pieter Schoeman <pieter@sonbesie.co.za>, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2019-01-20 19:44+0000\n"
+"PO-Revision-Date: 2019-01-21 12:35+0200\n"
+"Last-Translator: Pieter Schalk Schoeman <pieter@sonbesie.co.za>\n"
+"Language-Team: Afrikaans <pieter@sonbesie.co.za>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Sagteware"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Programbestuurder vir GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Sagteware laat mens nuwe programme en uitbreidings vind en installeer en kan "
+"ook reeds geïnstalleerde programme verwyder."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME-sagteware stal uitgesoekte en populêre toepassings uit met nuttige "
+"beskrywings en heelwat skermskote per toepassing. Toepassings kan ontdek "
+"word deur deur die kategorielys te blaai of deur te soek. Mens kan ook die "
+"stelsel bywerk met 'n vanlynbywerking."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Oorsigpaneel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Besonderhedepaneel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Geïnstalleerpaneel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Bywerkingspaneel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Die bywerkingsbesonderhede"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1241
+msgid "The GNOME Project"
+msgstr "Die GNOME Projek"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installeer 'n appstream lêer na 'n stelselligging"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installeer tans 'n appstream lêer na 'n stelsel ligging"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "'n Lys versoenbare projekte"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Dit is 'n lys versoenbare projekte wat ons moet vertoon soos GNOME, KDE en "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Of GNOME Sagteware bywerkings en opgraderings moet bestuur"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Indien gedeaktiveer sal GNOME Sagteware die bywerkingspaneel wegsteek, geen "
+"outomatiese bywerkings doen nie en nooit oor opgraderings vra nie."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Laai bywerkings af en installeer hulle outomaties"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Of daar oor 'n mobiele netwerk outomaties verfris moet word"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Of dit die eerste keer is wat GNOME Sagteware gebruik word"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Vertoon ster graderings langs toepassings"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "'n lys populêre toepassings"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "Die bediener om te gebruik vir sagteware resensies"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Installeer sagteware"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installeer gekose sagteware op die stelsel"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Kies almal"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Kies geen"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "_Sagtewarebronnne"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "_Bywerk voorkeure"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Sagteware"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Gaan terug"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_All"
+msgstr "_Alles"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "_Geïnstalleer"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "_Bywerkings"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Soek"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:306 src/gs-details-page.ui:819
+msgid "Source"
+msgstr "Bron"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Sagtewarebronnne"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "Ondersoek skyf"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:935
+msgid "Network Settings"
+msgstr "Netwerkinstellings"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "Herbegin nou"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "Meer inligting"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4475
+msgid "Local file"
+msgstr "Plaaslike lêer"
+
+#: lib/gs-app.c:4522
+msgid "Package"
+msgstr "Pakket"
+
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:428
+msgid "Pending"
+msgstr "Hangend"
+
+#: src/gs-app-addon-row.c:102 src/gs-app-row.ui:182 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:86
+msgid "Installed"
+msgstr "Geïnstalleer"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:106 src/gs-app-row.c:185 src/gs-details-page.c:329
+#: src/gs-third-party-repo-row.c:113
+msgid "Installing"
+msgstr "Installeer tans"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:110 src/gs-app-row.c:191 src/gs-repo-row.c:140
+#: src/gs-third-party-repo-row.c:120
+msgid "Removing"
+msgstr "Verwyder tans"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "Gidsnaam"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:240 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:612 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Kanselleer"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Voeg by"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Voeg by toepassinggids"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:123
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Beginmodus: of ‘updates’, ‘updated’, ‘installed’ of ‘overview’"
+
+#: src/gs-application.c:123
+msgid "MODE"
+msgstr "MODUS"
+
+#: src/gs-application.c:125
+msgid "Search for applications"
+msgstr "Soek vir toepassings"
+
+#: src/gs-application.c:125
+msgid "SEARCH"
+msgstr "SOEK"
+
+#: src/gs-application.c:127
+msgid "Show application details (using application ID)"
+msgstr "Wys toepassingsbesonderhede (gebruik toepassing ID)"
+
+#: src/gs-application.c:127 src/gs-application.c:131
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:129
+msgid "Show application details (using package name)"
+msgstr "Wys toepassingsbesonderhede (gebruik tepassingsnaam)"
+
+#: src/gs-application.c:129
+msgid "PKGNAME"
+msgstr "PAKKETNAAM"
+
+#: src/gs-application.c:131
+msgid "Install the application (using application ID)"
+msgstr "Installeer die toepassing (gebruik toepassing id)"
+
+#: src/gs-application.c:133
+msgid "Open a local package file"
+msgstr "Open 'n plaaslike pakketlêer"
+
+#: src/gs-application.c:133
+msgid "FILENAME"
+msgstr "LÊERNAAM"
+
+#: src/gs-application.c:135
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Die tipe interaksie verwag vir die aksie: of ‘geen’, ‘stel in kennis’, of "
+"‘vol’"
+
+#: src/gs-application.c:138
+msgid "Show verbose debugging information"
+msgstr "Wys breedvoerige ontfoutingsinligting"
+
+#: src/gs-application.c:140
+msgid "Installs any pending updates in the background"
+msgstr ""
+
+#: src/gs-application.c:142
+msgid "Show update preferences"
+msgstr ""
+
+#: src/gs-application.c:144
+msgid "Quit the running instance"
+msgstr "Sluit die lopende instansie af"
+
+#: src/gs-application.c:146
+msgid "Prefer local file sources to AppStream"
+msgstr "Verkies plaaslike lêerbronne bo AppStream"
+
+#: src/gs-application.c:148
+msgid "Show version number"
+msgstr "Wys weergawenommer"
+
+#: src/gs-application.c:342
+msgid "translator-credits"
+msgstr ""
+"Friedel Wolff\n"
+"Pieter Schoeman"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:349 src/gs-shell.c:1958
+#, c-format
+msgid "About %s"
+msgstr "Aangaande %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:353
+msgid "A nice way to manage the software on your system."
+msgstr "'n Maklike manier om sagteware op die stelsel te bestuur."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:140
+msgid "Visit website"
+msgstr "Besoek webwerf"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:145
+msgid "Install…"
+msgstr "Installeer…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:152 src/gs-auth-dialog.ui:44 src/gs-updates-section.c:501
+msgid "Cancel"
+msgstr "Kanselleer"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:159 src/gs-common.c:285 src/gs-page.c:596
+msgid "Install"
+msgstr "Installeer"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:166
+msgid "Update"
+msgstr "Dateer op"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:170 src/gs-app-row.c:179 src/gs-page.c:755
+#: src/gs-repos-dialog.c:336
+msgid "Remove"
+msgstr "Verwyder"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:296
+msgid "Device cannot be used during update."
+msgstr "Toestel kan nie tydens die opdatering gebruik word nie."
+
+#: src/gs-app-row.c:496 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Benodig addisionele toestemming"
+
+#: src/gs-auth-dialog.c:141
+msgid "Sign In / Register…"
+msgstr "Teken in / Registreer…"
+
+#: src/gs-auth-dialog.c:148
+msgid "Continue"
+msgstr "Gaan voort"
+
+#: src/gs-auth-dialog.c:155
+msgid "Use"
+msgstr "Gebruik"
+
+#: src/gs-auth-dialog.ui:30
+msgid "Add another…"
+msgstr "Voeg nog by…"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:194
+msgid "Other"
+msgstr "Ander"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:199
+msgid "All"
+msgstr "Alles"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:203
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:494
+#, c-format
+msgid "Featured %s"
+msgstr "%s uitgesoek"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26
+msgid "Top Rated"
+msgstr "Top gegradeerde"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-editor.ui:225
+#: src/gs-origin-popover-row.c:63
+msgid "Name"
+msgstr "Naam"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:894
+msgid "Extension Settings"
+msgstr "Uitbreiding instellings"
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Uitbreidings word op u eie risiko gebruik. Indien u enige probleme ervaar "
+"word dit aangeraai om hulle te deaktiveer."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "Vertoon"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "Subkategoriëe filter kieslys"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "Sorteer"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "Subkategoriëe sorteer kieslys"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:204
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Sleutel asseblief 'n nommer van 1 tot %u in: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:267
+msgid "Choose an application:"
+msgstr "Kies 'n toepassing:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:137
+msgid "OS updates are now installed"
+msgstr "Bedryfstelselbywerkings is nou geïnstalleer"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:140
+msgid "Recently installed updates are available to review"
+msgstr "Onlangs geïnstalleerde bywerkings is nou beskikbaar om na te gaan"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:145 src/gs-common.c:153
+#, c-format
+msgid "%s is now installed"
+msgstr "%s is nou geïnstalleer"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:148
+msgid "Application is ready to be used."
+msgstr "Toepassing is reg om gebruik te word."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:161
+msgid "Launch"
+msgstr "Laat loop"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:219
+msgid "Install Third-Party Software?"
+msgstr "Installeer derdeparty-sagteware?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:223 src/gs-repos-dialog.c:247
+msgid "Enable Third-Party Software Repository?"
+msgstr "Aktiveer derdeparty-sagtewarebronne?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:239
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s is nie <a href=\"https://af.wikipedia.org/wiki/Vrye_sagteware\">vry en "
+"oopbronsagteware</a> nie, en word verskaf deur \"%s\"."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:249
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s word verskaf deur \"%s\"."
+
+#: src/gs-common.c:258
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Die sagtewarebron moet eers geaktiveer word voor die installasie kan "
+"voortgaan."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Dit kan moontlik onwettig wees om %s te installeer en gebruik in sommige "
+"lande."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:274
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Dit kan moontlik onwettig wees om die kodek te installeer en gebruik in "
+"sommige lande."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:281
+msgid "Don’t Warn Again"
+msgstr "Moet my nie weer waarsku nie"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:290
+msgid "Enable and Install"
+msgstr "Aktiveer en installeer"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:433
+msgid "Detailed errors from the package manager follow:"
+msgstr "Gedetailleerde foute van die pakketbestuurder volg:"
+
+#: src/gs-common.c:452 src/gs-details-page.ui:417
+msgid "Details"
+msgstr "Besonderhede"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "Geen animasie geweld nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "Animasiekarakters in onveilige situasies"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Animasiekarakters in aggressiewe konflik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafiese geweld met animasiekarakters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "Geen fantasie geweld nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Karakters in onveilige situasies wat maklik onderskei kan word van die "
+"werklikheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Karakters in aggressiewe konflik wat maklik onderskei kan word van die "
+"werklikheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafiese geweld wat maklik onderskei kan word van die werklikheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "Geen realistiese geweld nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Effens realistiese karakters in onveilige situasies"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Uitbeeldings van realistiese karakters in aggressiewe konflik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafiese geweld met realistiese karakters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "Geen bloedvergieting nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "Onrealistiese bloedvergieting"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "Realistiese bloedvergieting"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Uitbeeldings van bloedvergieting en die verminking van liggaamsdele"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "Geen seksuele geweld nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "Verkragting of ander gewelddadige seksuele gedrag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "Geen verwysings na alkohol nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "Verwysings na alkoholiese drankies"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "Gebruik van alkoholiese drank"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "Geen verwysings na onwettige dwelms"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "Verwysings na onwettige dwelms"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "Gebruik van onwettige dwelms"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "Verwysings na tabakprodukte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "Gebruik van tabaksprodukte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "Geen naaktheid van enige aard nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "Kort kuns naaktheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "Langdurige naaktheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "Geen verwysings of uitbeeldings van 'n seksuele aard nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "Aanloklike verwysings of afbeeldings"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "Seksuele verwysings of afbeeldings"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "Grafiese seksuele gedrag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "Geen vloek van enige aard nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "Sagte of ongereelde gebruik van vloek"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "Matige gebruik van vloek"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "Sterk of gereelde gebruik van vloek"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "Geen onvanpaste humor nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "Slapstick humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "Onvanpaste of badkamer humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "Volwasse of seksuele humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "Geen diskriminerende taal van enige aard nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "Negatiwiteit teenoor 'n spesifieke groep mense"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminasie bedoel om emosionele skade te veroorsaak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Eksplisiete diskriminasie gebaseer op geslag, seksualiteit, ras of godsdiens"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "Geen advertensies van enige aard nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "Produk plasing"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Verwysings na spesifieke handelsmerke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Gebruikers word aangemoedig om spesifieke werklike items te koop"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "Geen dobbel van enige aard nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "Dobbel op sommige geleenthede deur gebruik te maak van krediete"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "Dobbel met \"speel\" geld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "Dobbel met regte geld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "Geen vermoë om geld te spandeer nie"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Users are encouraged to donate real money"
+msgstr "Spelers word aangemoedig om werklike geld te skenk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "Ability to spend real money in-game"
+msgstr "Vermoë om geld te spandeer in die spel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "No way to chat with other users"
+msgstr "Geen manier om met ander gebruikers te klets nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "User-to-user game interactions without chat functionality"
+msgstr "Gebruiker-na-gebruiker spelinteraksies sonder kletsfunksionaliteit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Moderated chat functionality between users"
+msgstr "Gemodereerde kletsfunksie tussen gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Uncontrolled chat functionality between users"
+msgstr "Onbeheerde kletsfunksie tussen gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "No way to talk with other users"
+msgstr "Geen manier om met ander gebruikers te praat nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Onbeheerde klank- of videokletsfunksies tussen gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Geen deel van sosiale netwerk gebruikersname of e-pos adresse nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "Sharing social network usernames or email addresses"
+msgstr "Deel van sosiale netwerk gebruikers name of e-pos adresse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "No sharing of user information with 3rd parties"
+msgstr "Geen deel van gebruikersinligting met 3de partye nie"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Checking for the latest application version"
+msgstr "Kyk tans vir die nuutste weergawe van die toepassing"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Deel anonieme diagnostiese data"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:276
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Deel inligting wat ander in staat sal kan stel om die gebruiker te "
+"identifiseer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No sharing of physical location to other users"
+msgstr "Geen deel van fisiese ligging aan ander gebruikers nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:282
+msgid "Sharing physical location to other users"
+msgstr "Deel fisiese ligging aan ander gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "No references to homosexuality"
+msgstr "Geen verwysings na homoseksualiteit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "Indirect references to homosexuality"
+msgstr "Indirekte verwysings na homoseksualiteit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:293
+msgid "Kissing between people of the same gender"
+msgstr "Soen tussen mense van dieselfde geslag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafiese seksuele gedrag tussen mense van dieselfde geslag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:299
+msgid "No references to prostitution"
+msgstr "Geen verwysings na prostitusie nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:302
+msgid "Indirect references to prostitution"
+msgstr "Indirekte verwysings na prostitusie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references of prostitution"
+msgstr "Direkte verwysings na prostitusie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:308
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafiese uitbeeldings van die daad van prostitusie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:311
+msgid "No references to adultery"
+msgstr "Geen verwysings na owerspel nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "Indirect references to adultery"
+msgstr "Indirekte verwysings na owerspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Direct references of adultery"
+msgstr "Direkte verwysings na owerspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:320
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafiese uitbeeldings van die daad van owerspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:323
+msgid "No sexualized characters"
+msgstr "Geen seksuele karakters nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Scantily clad human characters"
+msgstr "Skraps geklede menslike karakters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:329
+msgid "Overtly sexualized human characters"
+msgstr "Uitermatige seksuele menslike karakters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:332
+msgid "No references to desecration"
+msgstr "Geen verwysings na ontheiliging nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Depictions or references to historical desecration"
+msgstr "Uitbeeldings of verwysings na historiese ontheiliging"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:338
+msgid "Depictions of modern-day human desecration"
+msgstr "Uitbeeldings van moderne menslike ontheiliging"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafiese uitbeeldings van moderne ontheiliging"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No visible dead human remains"
+msgstr "Geen sigbare dooie menslike oorskot"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:347
+msgid "Visible dead human remains"
+msgstr "Sigbare dooie menslike oorskot"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Dooie menslike oorskot wat aan die elemente blootgestel is"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:353
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafiese uitbeeldings van die ontheiliging van menslike liggame"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:356
+msgid "No references to slavery"
+msgstr "Geen verwysings na slawerny nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:359
+msgid "Depictions or references to historical slavery"
+msgstr "Uitbeeldings of verwysings na historiese slawerny"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:362
+msgid "Depictions of modern-day slavery"
+msgstr "Uitbeeldings van modererende slawerny"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:365
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafiese uitbeeldings van modererende slawerny"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:295
+msgid "An application"
+msgstr "'n Toepassing"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:301
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s vra addisionele lêerformaat ondersteuning aan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:303
+msgid "Additional MIME Types Required"
+msgstr "Addisionele MIME-tipes benodig"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:307
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s vra addisionele lettertipes aan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:309
+msgid "Additional Fonts Required"
+msgstr "Addisionele lettertipes benodig"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:313
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s vra addisionele multimediakodeks aan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:315
+msgid "Additional Multimedia Codecs Required"
+msgstr "Addisionele multimediakodeks benodig"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:319
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s vra addisionele drukkeraandrywers aan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:321
+msgid "Additional Printer Drivers Required"
+msgstr "Addisionele drukkeraandrywers benodig"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:325
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s vra addisionele pakkette aan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:327
+msgid "Additional Packages Required"
+msgstr "Addisionele pakkette benodig"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:336
+msgid "Find in Software"
+msgstr "Vind in Sagteware"
+
+#: src/gs-details-page.c:324
+msgid "Removing…"
+msgstr "Verwyder tans…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:343
+msgid "Pending installation…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:350
+msgid "Pending update…"
+msgstr "Hangende bywerkings…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:671
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Dié toepassing kan slegs gebruik word wanneer daar 'n werkende "
+"internetverbinding is."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:819 src/gs-details-page.c:847
+#: src/gs-details-page.ui:159 src/gs-third-party-repo-row.c:97
+#: src/gs-upgrade-banner.ui:122
+msgid "_Install"
+msgstr "_Installeer"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:852
+msgid "_Update"
+msgstr "_Opdateer"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:865 src/gs-third-party-repo-row.c:89
+msgid "_Install…"
+msgstr "_Installeer…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:899
+msgid "_Launch"
+msgstr "_Laat loop"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:924 src/gs-details-page.ui:184
+msgid "_Remove"
+msgstr "Ve_rwyder"
+
+#: src/gs-details-page.c:956 src/gs-update-dialog.c:106
+msgid "Network"
+msgstr "Netwerk"
+
+#: src/gs-details-page.c:956 src/gs-update-dialog.c:106
+msgid "Can communicate over the network"
+msgstr ""
+
+#: src/gs-details-page.c:957 src/gs-update-dialog.c:107
+msgid "System Services"
+msgstr "Stelseldienste"
+
+#: src/gs-details-page.c:957 src/gs-details-page.c:958
+#: src/gs-update-dialog.c:107 src/gs-update-dialog.c:108
+msgid "..."
+msgstr "..."
+
+#: src/gs-details-page.c:958 src/gs-update-dialog.c:108
+msgid "Session Services"
+msgstr ""
+
+#: src/gs-details-page.c:959 src/gs-update-dialog.c:109
+msgid "Devices"
+msgstr "Toestelle"
+
+#: src/gs-details-page.c:959 src/gs-update-dialog.c:109
+msgid "Can access system device files"
+msgstr ""
+
+#: src/gs-details-page.c:960 src/gs-details-page.c:961
+#: src/gs-update-dialog.c:110 src/gs-update-dialog.c:111
+msgid "Home folder"
+msgstr "Tuisgids"
+
+#: src/gs-details-page.c:960 src/gs-details-page.c:962
+#: src/gs-details-page.c:964 src/gs-update-dialog.c:110
+#: src/gs-update-dialog.c:112 src/gs-update-dialog.c:114
+msgid "Can view, edit and create files"
+msgstr ""
+
+#: src/gs-details-page.c:961 src/gs-details-page.c:963
+#: src/gs-details-page.c:965 src/gs-update-dialog.c:111
+#: src/gs-update-dialog.c:113 src/gs-update-dialog.c:115
+msgid "Can view files"
+msgstr ""
+
+#: src/gs-details-page.c:962 src/gs-details-page.c:963
+#: src/gs-update-dialog.c:112 src/gs-update-dialog.c:113
+msgid "File system"
+msgstr "Lêerstelsel"
+
+#: src/gs-details-page.c:964 src/gs-details-page.c:965
+#: src/gs-update-dialog.c:114 src/gs-update-dialog.c:115
+msgid "Downloads folder"
+msgstr "Aflaaigids"
+
+#: src/gs-details-page.c:966 src/gs-update-dialog.c:116
+msgid "Settings"
+msgstr "Instellings"
+
+#: src/gs-details-page.c:966 src/gs-update-dialog.c:116
+msgid "Can view and change any settings"
+msgstr ""
+
+#: src/gs-details-page.c:967 src/gs-update-dialog.c:117
+msgid "Legacy display system"
+msgstr ""
+
+#: src/gs-details-page.c:967 src/gs-update-dialog.c:117
+msgid "Uses an old, insecure display system"
+msgstr ""
+
+#: src/gs-details-page.c:982
+msgid "This application is fully sandboxed."
+msgstr ""
+
+#: src/gs-details-page.c:990
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1139
+msgctxt "version"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1152
+msgctxt "updated"
+msgid "Never"
+msgstr "Nooit"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1205
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: src/gs-details-page.c:1255
+msgid "Low"
+msgstr "Laag"
+
+#: src/gs-details-page.c:1257
+msgid "Medium"
+msgstr "Medium"
+
+#: src/gs-details-page.c:1259
+msgid "High"
+msgstr "Hoog"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1263 src/gs-details-page.ui:938 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "Onbekend"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1615
+msgid "You need internet access to write a review"
+msgstr "U het internettoegang nodig om 'n resensie te skryf"
+
+#: src/gs-details-page.c:1804 src/gs-details-page.c:1820
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Kan nie \"%s\" vind nie"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2363
+msgid "Public domain"
+msgstr "Publieke domein"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2366
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://af.wikipedia.org/wiki/Publieke_domein"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2373
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.af.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2383 src/gs-details-page.ui:1181
+msgid "Free Software"
+msgstr "Vrye sagteware"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2440
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Gebruikers word aan die volgende lisensie gebind:"
+msgstr[1] "Gebruikers word aan die volgende lisensies gebind:"
+
+#: src/gs-details-page.c:2467 src/gs-details-page.ui:1253
+msgid "More information"
+msgstr "Meer inligting"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Besonderhede bladsy"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:251
+msgid "_Add shortcut"
+msgstr "_Voeg kortpad by"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:262
+msgid "Re_move shortcut"
+msgstr "Ve_rwyder kortpad"
+
+#: src/gs-details-page.ui:336
+msgid "No screenshot provided"
+msgstr "Geen skermskoot verskaf nie"
+
+#: src/gs-details-page.ui:356
+msgid "Software Repository Included"
+msgstr "Sagtewarebron ingesluit"
+
+#: src/gs-details-page.ui:357
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Dié toepassing bevat 'n sagtewarebron wat bywerkings verskaf, asook toegang "
+"tot ander sagteware."
+
+#: src/gs-details-page.ui:364
+msgid "No Software Repository Included"
+msgstr "Geen sagtewarebron ingesluit nie"
+
+#: src/gs-details-page.ui:365
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Dié toepassing bevat nie 'n sagtewarebron nie. Dit gaan nie bygewerk word "
+"met nuwe weergawes nie."
+
+#: src/gs-details-page.ui:373
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Dié sagteware word reeds verskaf deur u verspreiding en moet nie vervang "
+"word nie."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:380
+msgid "Software Repository Identified"
+msgstr "Sagtewarebron geïdentifiseer"
+
+#: src/gs-details-page.ui:381
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Deur dié sagtewarebron by te voeg kry u toegang tot addisionele sagteware en "
+"bywerkings."
+
+#: src/gs-details-page.ui:382
+msgid "Only use software repositories that you trust."
+msgstr "Gebruik slegs sagtewarebronne wat u vertrou."
+
+#: src/gs-details-page.ui:392
+msgid "_Website"
+msgstr "_Webwerf"
+
+#: src/gs-details-page.ui:401
+msgid "_Donate"
+msgstr "_Skenk"
+
+#: src/gs-details-page.ui:511
+msgid "Localized in your Language"
+msgstr "Beskikbaar in Afrikaans"
+
+#: src/gs-details-page.ui:522
+msgid "Documentation"
+msgstr "Dokumentasie"
+
+#: src/gs-details-page.ui:533
+msgid "Release Activity"
+msgstr "Vrystellingsaktiwiteit"
+
+#: src/gs-details-page.ui:544
+msgid "System Integration"
+msgstr "Stelselintegrasie"
+
+#: src/gs-details-page.ui:555
+msgid "Sandboxed"
+msgstr "Sandput"
+
+#: src/gs-details-page.ui:574
+msgid "Version"
+msgstr "Weergawe"
+
+#: src/gs-details-page.ui:610
+msgid "Age Rating"
+msgstr "Ouderdomsgradering"
+
+#: src/gs-details-page.ui:648 src/gs-details-page.ui:1339
+msgid "Permissions"
+msgstr "Regte"
+
+#: src/gs-details-page.ui:686
+msgid "Updated"
+msgstr "Bygewerk"
+
+#: src/gs-details-page.ui:720
+msgid "Category"
+msgstr "Kategorie"
+
+#: src/gs-details-page.ui:757
+msgid "Installed Size"
+msgstr "Installasie grootte"
+
+#: src/gs-details-page.ui:788
+msgid "Download Size"
+msgstr "Aflaai grootte"
+
+#: src/gs-details-page.ui:850
+msgid "Developer"
+msgstr "Ontwikkelaar"
+
+#: src/gs-details-page.ui:895
+msgid "License"
+msgstr "Lisensie"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:914
+msgid "Free"
+msgstr "Vry"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:926
+msgid "Proprietary"
+msgstr "Alleenreg"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:976 src/gs-installed-page.c:492
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "Byvoegings"
+
+#: src/gs-details-page.ui:988
+msgid "Selected add-ons will be installed with the application."
+msgstr "Gekose byvoegings sal saam met die toepassing geïnstalleer word."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1026
+msgid "Reviews"
+msgstr "Resensies"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1044
+msgid "_Write a Review"
+msgstr "_Skryf 'n resensie"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1065
+msgid "_Show More"
+msgstr "_Wys meer"
+
+#: src/gs-details-page.ui:1192
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Dit beteken dat die sagteware vry gebruik, gekopieer, gedeel, bestudeer en "
+"verander mag word."
+
+#: src/gs-details-page.ui:1232
+msgid "Proprietary Software"
+msgstr "Alleenregsagteware"
+
+#: src/gs-details-page.ui:1243
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Dit beteken dat die sagteware deur 'n individu of maatskappy besit word. "
+"Daar is gewoonlik beperkings op die gebruik van die sagteware en toegang tot "
+"die bronkode word verbied."
+
+#: src/gs-details-page.ui:1275
+msgid "Unknown Software License"
+msgstr "Onbekende sagteware lisensie"
+
+#: src/gs-details-page.ui:1286
+msgid "The license terms of this software are unknown."
+msgstr "Die lisensie terme van die sagteware is onbekend."
+
+#: src/gs-details-page.ui:1306
+msgid "The application was rated this way because it features:"
+msgstr "Dit toepassing was so gegradeer aangesien dit die volgende bevat:"
+
+#: src/gs-details-page.ui:1320
+msgid "No details were available for this rating."
+msgstr "Geen besonderhede was beskikbaar vir die gradering nie."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "CSS gevalideer OK!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "Kon nie lêer laai nie"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "Ongestoorde veranderinge"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "Die toepassinglys is reeds gelaai."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "Smelt dokumente saam"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "Gooi veranderinge weg"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "Maak AppSream lêer oop"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "_Open"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "_Stoor"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "Kom nie lêer stoor nie"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "%s banier ontwerp geskrap."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "Banier ontwerp geskrap."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "Die toepassinglys het ongestoorde veranderinge."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr ""
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "GNOME Sagteware banierontwerper"
+
+#: src/gs-editor.ui:53 src/gs-editor.ui:62
+msgid "No Designs"
+msgstr "Geen ontwerpe"
+
+#: src/gs-editor.ui:137
+msgid "Error message here"
+msgstr "Foutboodskap hier"
+
+#: src/gs-editor.ui:196
+msgid "App ID"
+msgstr "Toep ID"
+
+#: src/gs-editor.ui:253 src/gs-review-dialog.ui:109
+msgid "Summary"
+msgstr "Opsomming"
+
+#: src/gs-editor.ui:278
+msgid "Editor’s Pick"
+msgstr "Glansitems"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:287
+msgid "Category Featured"
+msgstr "Uitgesoekte kategorie"
+
+#. button in the info bar
+#: src/gs-editor.ui:336
+msgid "Undo"
+msgstr "Ontdoen"
+
+#: src/gs-editor.ui:371 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Banierontwerper"
+
+#: src/gs-editor.ui:392
+msgid "New Banner"
+msgstr "Nuwe banier"
+
+#: src/gs-editor.ui:452
+msgid "Import from file"
+msgstr "Voer vanaf lêer in"
+
+#: src/gs-editor.ui:461
+msgid "Export to file"
+msgstr "Voer as lêer uit"
+
+#: src/gs-editor.ui:470
+msgid "Delete Design"
+msgstr "Skrap ontwerp"
+
+#: src/gs-editor.ui:491
+msgid "Featured App"
+msgstr "Uitgesoek toepassing"
+
+#: src/gs-editor.ui:500
+msgid "OS Upgrade"
+msgstr "BS Opgradering"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:147
+msgid " and "
+msgstr " en "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:150
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:176
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Beskikbare lettertipes vir %s skript"
+msgstr[1] "Beskikbare lettertipes vir %s skripte"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:184
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Beskikbare sagteware vir %s"
+msgstr[1] "Beskikbare sagteware vir %s"
+
+#: src/gs-extras-page.c:226
+msgid "Unable to Find Requested Software"
+msgstr "Kan nie aangevraagde sagteware vind nie"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:325
+#, c-format
+msgid "%s not found"
+msgstr "%s nie gevind nie"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:329
+msgid "on the website"
+msgstr "op die webwerf"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:336
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Geen toepassings is beskikbaar wat die lêer %s verskaf nie."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:351 src/gs-extras-page.c:362
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Inligting oor %s, asook moontlikhede vir hoe om ontbrekende toepassings te "
+"kry kan op %s gevind word."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:347 src/gs-extras-page.c:369
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Geen toepassings is vir %s ondersteuning beskikbaar nie."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:358
+#, c-format
+msgid "%s is not available."
+msgstr "%s is nie beskikbaar nie."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:373
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Inligting oor %s, asook opsies vir hoe om 'n toepassing wat die formaat "
+"ondersteun te kry, kan hier gevind word %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:380
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Geen lettertipes is beskikbaar vir %s skript ondersteuning nie."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:384
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Inligting oor %s, asook moontlikhede vir hoe om addisionele lettertipes te "
+"kry kan op %s gevind word."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:391
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Geen byvoeging-kodekke is beskikbaar vir die %s-formaat nie."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:395
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Inligting oor %s, asook moontlikhede vir hoe om 'n kodek wat die formaat kan "
+"speel kan op %s gevind word."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:402
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Geen Plasma hulpbronne is vir %s ondersteuning beskikbaar nie."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:406
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Inligting oor %s, asook moontlikhede vir hoe om addisionele Plasma "
+"hulpbronne te kry kan op %s gevind word."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:413
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Geen drukkeraandrywers is vir %s beskikbaar nie."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:417
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Inligting oor %s, asook moontlikhede vir hoe om 'n aandrywer wat die drukker "
+"ondersteun te kry kan op %s gevind word."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:461
+msgid "this website"
+msgstr "hierdie webtuiste"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:465
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Ongelukkig kan die %s waarvoor jy gesoek nie gevind word nie. Sien %s vir "
+"meer inligting."
+msgstr[1] ""
+"Ongelukkig kan die %s waarvoor jy gesoek nie gevind word nie. Sien %s vir "
+"meer inligting."
+
+#: src/gs-extras-page.c:533 src/gs-extras-page.c:589 src/gs-extras-page.c:628
+msgid "Failed to find any search results"
+msgstr "Kon nie enige soek resultate vind nie"
+
+#: src/gs-extras-page.c:816
+#, c-format
+msgid "%s file format"
+msgstr "%s lêer formaat"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kodeksbladsy"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Welkom"
+
+#: src/gs-first-run-dialog.ui:40
+msgid "Welcome to Software"
+msgstr "Welkom by Sagteware"
+
+#: src/gs-first-run-dialog.ui:50
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Sagteware laat mens alle nodige sagteware installeer, als op een plek. Sien "
+"gerus ons aanbevelings, blaai deur die kategorieë, of soek vir 'n program."
+
+#: src/gs-first-run-dialog.ui:59
+msgid "_Let’s Go Shopping"
+msgstr "_Laat ons kyk"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "Spasies"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "Die aantal spasie tussen kinders"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "Verwyder"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "Geïnstalleer"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:95
+msgctxt "app status"
+msgid "Updated"
+msgstr "Bygewerk"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:101
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Geskiedenis"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:488
+msgid "System Applications"
+msgstr "Stelseltoepassings"
+
+#: src/gs-installed-page.c:622
+msgid "Click on items to select them"
+msgstr "Klik op items om hulle te kies"
+
+#: src/gs-installed-page.c:826
+msgid "Select"
+msgstr "Kies"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Geïnstalleerbladsy"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_Voeg by gids…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "S_kuif na gids…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "Ve_rwyder uit gids"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:75
+msgid "Software catalog is being downloaded"
+msgstr "Sagteware katalogus word tans afgelaai"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:79
+msgid "Software catalog is being loaded"
+msgstr "Sagteware katalogus word tans gelaai"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Laaiskerm"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Skakel aan…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderasiebladsy"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Daar is geen bywerkings om te modereer nie"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formaat"
+
+#. add button
+#: src/gs-overview-page.c:332
+msgid "More…"
+msgstr "Meer…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:610
+msgid "Recommended Audio & Video Applications"
+msgstr "Aanbevole klank- en videotoepassings"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:615
+msgid "Recommended Games"
+msgstr "Aanbevole speletjies"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:620
+msgid "Recommended Graphics Applications"
+msgstr "Aanbevole grafikatoepassings"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:625
+msgid "Recommended Productivity Applications"
+msgstr "Aanbevole produktiwiteitstoepassings"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:1007 src/gs-repos-dialog.c:835
+msgid "Access additional software from selected third party sources."
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:1011 src/gs-repos-dialog.c:839
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:1016 src/gs-repos-dialog.c:844
+msgid "Find out more…"
+msgstr "Vind meer uit…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:1024 src/gs-repos-dialog.c:252
+msgid "Enable"
+msgstr "Aktiveer"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Oorsigbladsy"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Aktiveer derdeparty-sagtewarebronne?"
+
+#: src/gs-overview-page.ui:83
+msgid "Featured Applications"
+msgstr "Uitgesoekte toepassings"
+
+#: src/gs-overview-page.ui:116
+msgid "Categories"
+msgstr "Kategorieë"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:232
+msgid "Editor’s Picks"
+msgstr "Glansitems"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:258
+msgid "Recent Releases"
+msgstr "Onlangse vrystellings"
+
+#: src/gs-overview-page.ui:328
+msgid "No Application Data Found"
+msgstr "Geen toepassingdata gevind nie"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:496
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "Is u seker u wil %s koop?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:500
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "%s sal geïnstalleer word en u sal met %s gedebiteer word."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:513
+msgid "Purchase"
+msgstr "Koop"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:587
+#, c-format
+msgid "Prepare %s"
+msgstr "Berei voor %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:724
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Is u seker u wil die sagtewarebron: %s verwyder?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:728
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Alle toepassings van %s sal verwyder word, om hulle weer te gebruik sal die "
+"sagtewarebron weer geïnstalleer moet word."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:736
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Is u seker u wil %s verwyder?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:739
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s gaan verwyder word en sal weer geïnstalleer moet word om gebruik te kan "
+"word."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:71 src/gs-summary-tile.c:73
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Geïnstalleer)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Bywerk voorkeure"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Outomatiese bywerkings"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Kennisgewings vir outomatiese bywerkings"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Vertoon kennisgewings na bywerkings outomaties geïnstalleer is."
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:127
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Onversoenbare sagteware"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Gaan voort"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:110
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u toepassing geïnstalleer"
+msgstr[1] "%u toepassings geïnstalleer"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u byvoeging geïnstalleer"
+msgstr[1] "%u byvoegings geïnstalleer"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u toepassing"
+msgstr[1] "%u toepassings"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:131
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u byvoeging"
+msgstr[1] "%u byvoegings"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:138
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s en %s geïnstalleer"
+msgstr[1] "%s en %s geïnstalleer"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:312
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Verwyder \"%s\"?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:317
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Deaktiveer \"%s\"?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:321
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:339
+msgid "Disable"
+msgstr "Deaktiveer"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:748
+msgid "the operating system"
+msgstr "die bedryfstelsel"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:814 src/gs-repos-dialog.c:850
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:832
+msgid "Third Party Repositories"
+msgstr "Derdeparty-sagtewarebronne"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Geen addisionele bronne nie"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:110
+msgid "_Enable"
+msgstr "_Aktiveer"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:119
+msgid "_Remove…"
+msgstr "_Verwyder…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:124
+msgid "_Disable…"
+msgstr "_Deaktiveer…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:132
+msgid "Enabling"
+msgstr "Aktiveer tans"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:144
+msgid "Disabling"
+msgstr "Deaktiveer tans"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:158
+msgid "Enabled"
+msgstr "Geaktiveer"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:164
+msgid "Disabled"
+msgstr "Gedeaktiveer"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:95
+msgid "Hate it"
+msgstr "Hou niks daarvan"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:99
+msgid "Don’t like it"
+msgstr "Hou nie daarvan nie"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:103
+msgid "It’s OK"
+msgstr "Dit is ok"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:107
+msgid "Like it"
+msgstr "Hou daarvan"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:111
+msgid "Love it"
+msgstr "Hou baie daarvan"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:133
+msgid "Please take more time writing the review"
+msgstr "Neem asseblief meer tyd om die resensie te skryf"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:137
+msgid "Please choose a star rating"
+msgstr "Kies asseblief 'n ster gradering"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:141
+msgid "The summary is too short"
+msgstr "Die opsomming is te kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:145
+msgid "The summary is too long"
+msgstr "Die opsomming is te lank"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:149
+msgid "The description is too short"
+msgstr "Die beskrywing is te kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:153
+msgid "The description is too long"
+msgstr "Die beskrywing is te lank"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Plaas resensie"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Plaas"
+
+#: src/gs-review-dialog.ui:75
+msgid "Rating"
+msgstr "Gradering"
+
+#: src/gs-review-dialog.ui:119
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Gee 'n kort opsomming van jou resensie, byvoorbeeld: \"Goeie toepassing\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:144
+msgctxt "app review"
+msgid "Review"
+msgstr "Resensie"
+
+#: src/gs-review-dialog.ui:154
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Wat dink jy van die toep? Probeer redes vir jou stellings verskaf."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "graderings in totaal"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Jy kan beledigende, onbeskofte of diskriminerende resensies rapporteer."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Sodra 'n resensie gerapporteer is, sal dit weggesteek word tot dit deur 'n "
+"administrateur nagegaan kan word."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "Rapporteer resensie?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "Rapporteer"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Was die resensie hulpvaardig?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nee"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Ag"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Rapporteer…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Verwyder…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr "Skermskoot nie gevind nie"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr "Laai van prent het misluk"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr "Skermskootgrootte nie gevind nie"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:491
+msgid "Could not create cache"
+msgstr "Kon nie kas skep nie"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:551
+msgid "Screenshot not valid"
+msgstr "Skermskoot nie geldig nie"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:566
+msgid "Screenshot not available"
+msgstr "Skermskoot nie beskikbaar nie"
+
+#: src/gs-screenshot-image.c:619
+msgid "Screenshot"
+msgstr "Skermskoot"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:155
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u meer passende"
+msgstr[1] "%u meer passende"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Soekblad"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Geen toepassings gevind nie"
+
+#. TRANSLATORS: menu item that signs into the named account with a particular username
+#: src/gs-shell.c:741
+#, c-format
+msgid "Signed in as %s"
+msgstr "Ingeteken as %s"
+
+#. TRANSLATORS: menu item that signs into the named account
+#: src/gs-shell.c:745
+#, c-format
+msgid "Sign in…"
+msgstr "Teken in…"
+
+#. TRANSLATORS: menu item for signing out from the named account
+#: src/gs-shell.c:753
+#, c-format
+msgid "Sign out"
+msgstr "Teken uit"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:936 src/gs-shell.c:941 src/gs-shell.c:956 src/gs-shell.c:960
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1003
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Kan nie fermware bywerkings van %s aflaai nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1009
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Kan nie bywerkings van %s aflaai nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1016 src/gs-shell.c:1064
+msgid "Unable to download updates"
+msgstr "Kan nie bywerkings aflaai nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1022
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Kan nie bywerkings aflaai nie: internettoegang was benodig maar nie "
+"beskikbaar nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1031
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Kan nie bywerkings van %s aflaai nie: nie genoeg skyfspasie nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1036
+msgid "Unable to download updates: not enough disk space"
+msgstr "Kan nie bywerkings aflaai nie: nie genoeg skyfspasie nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1043
+msgid "Unable to download updates: authentication was required"
+msgstr "Kan nie bywerkings aflaai nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1048
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Kan nie bywerkings aflaai nie: verifikasie was ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1053
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Kan nie bywerkings aflaai nie: jy het nie die regte om sagteware te "
+"installeer nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1067
+msgid "Unable to get list of updates"
+msgstr "Kan nie 'n lys bywerkings kry nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1103
+#, c-format
+msgid "Unable to purchase %s: authentication was required"
+msgstr "Kan nie %s koop nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1110
+#, c-format
+msgid "Unable to purchase %s: authentication was invalid"
+msgstr "Kan nie %s koop nie: verifikasie was ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1117
+#, c-format
+msgid "Unable to purchase %s: no payment method setup"
+msgstr "Kan nie %s koop nie: geen betaalmetode is tans opgestel nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1124
+#, c-format
+msgid "Unable to purchase %s: payment was declined"
+msgstr "Kan nie %s koop nie: die betaling is afgekeur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1131
+#, c-format
+msgid "Unable to purchase %s"
+msgstr "Kan nie %s koop nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1164
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Kan nie %s installeer nie aangesien die aflaai van %s misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1170
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Kan nie %s installeer nie aangesien die aflaai misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1183
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Kan nie %s installeer nie aangesien runtime %s nie beskikbaar is nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1189
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Kan nie %s installeer nie aangesien dit nie ondersteun word nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1196
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Kan nie installeer nie: internettoegang was benodig maar nie beskikbaar nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1202
+msgid "Unable to install: the application has an invalid format"
+msgstr "Kan nie installeer nie: die toepassing het 'n ongeldige formaat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1207
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Kan nie %s installeer nie: nie genoeg skyfspasie nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1214
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Kan nie %s installeer nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1221
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Kan nie %s installeer nie: verifikasie was ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1228
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Kan nie %s installeer nie: jy het nie die regte om sagteware te installeer "
+"nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1236
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Kan nie %s installeer nie: WS krag word nodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1245
+#, c-format
+msgid "Unable to install %s"
+msgstr "Kan nie %s installeer nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1288
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Kan nie %s opdateer van %s nie, aangesien die aflaai misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1295
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Kan nie %s opdateer nie aangesien die aflaai misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1302
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Kan nie bywerkings van %s installeer nie aangesien die aflaai misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1306
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Kan nie bywerkings installeer nie aangesien die aflaai misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1312
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Kan nie opdateer nie: internettoegang was benodig maar nie beskikbaar nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1322
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Kan nie %s opdateer nie: nie genoeg skyfspasie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1327
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Kan nie bywerkings installeer nie: nie genoeg skyfspasie nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1337
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Kan nie %s opdateer nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1342
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Kan nie bywerkings installeer nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1351
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Kan nie %s opdateer nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1356
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Kan nie bywerkings installeer nie: verifikasie was ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Kan nie %s opdateer nie: jy het nie die regte om sagteware op te dateer nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1371
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Kan nie bywerkings installeer nie: jy het nie die regte om sagteware op te "
+"dateer nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1381
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Kan nie %s opdateer nie: WS krag word nodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1387
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Kan nie bywerkings installeer nie: WS krag word nodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1398
+#, c-format
+msgid "Unable to update %s"
+msgstr "Kon nie bywerking %s installeer nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1401
+#, c-format
+msgid "Unable to install updates"
+msgstr "Kan nie bywerkings installeer nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1444
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Kan nie na %s vanaf %s opgradeer nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1449
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Kan nie na %s opgradeer nie aangesien die aflaai misluk het"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1458
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Kan nie na %s opgradeer nie: toegang tot die internet word benodig maar is "
+"nie beskikbaar nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1467
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Kan nie na %s opgradeer nie: nie genoeg skyfspasie nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Kan nie na %s opgradeer nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1482
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Kan nie na %s opgradeer nie: verifikasie was ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Kan nie na %s opgradeer nie: jy het nie die regte om sagteware op te gradeer "
+"nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1496
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Kan nie na %s opgradeer nie: WS krag word benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1505
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Kan nie na %s opgradeer nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1543
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Kan nie %s verwyder nie: verifikasie was benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Kan nie %s verwyder nie: verifikasie was ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1555
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Kan nie %s verwyder nie: jy het nie die regte om sagteware te verwyder nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1562
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Kan nie %s verwyder nie: WS krag word benodig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1574
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Kan nie %s verwyder nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1617
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Kan nie %s uitvoer nie: %s is nie geïnstalleer nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1624 src/gs-shell.c:1675 src/gs-shell.c:1716
+#: src/gs-shell.c:1764
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Nie genoeg skyfspasie nie — maak asseblief ruimte en probeer weer"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1635 src/gs-shell.c:1686 src/gs-shell.c:1727
+#: src/gs-shell.c:1794
+msgid "Sorry, something went wrong"
+msgstr "Jammer! Iets het skeef geloop"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1667
+msgid "Failed to install file: not supported"
+msgstr "Kan nie lêer installeer nie: word nie ondersteun nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1671
+msgid "Failed to install file: authentication failed"
+msgstr "Kan nie lêer installeer nie: verifikasie het misluk"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1708
+msgid "Failed to install: not supported"
+msgstr "Kan nie installeer nie: word nie ondersteun nie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1712
+msgid "Failed to install: authentication failed"
+msgstr "Kan nie installeer nie: verifikasie het misluk"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1758
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Kan nie %s kontak nie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1773
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s moet herlaai word om nuwe inproppe te gebruik."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1778
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Die toepassing moet herlaai word om nuwe inproppe te gebruik."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1785
+msgid "AC power is required"
+msgstr "WS krag word benodig"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:270
+#, c-format
+msgid "Source: %s"
+msgstr "Bron: %s"
+
+#: src/gs-summary-tile.c:78
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Installeer tans)"
+
+#: src/gs-summary-tile.c:83
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Verwyder tans)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:106
+msgid "_Remove All"
+msgstr "_Verwyder alles"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:200
+msgid "No update description available."
+msgstr "Geen beskrywing vir die bywerking is beskikbaar nie."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:302
+#, c-format
+msgid "Installed on %s"
+msgstr "Geïnstalleer op %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:322
+msgid "Installed Updates"
+msgstr "Geïnstalleerde bywerkings"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:538
+msgid "Additions"
+msgstr "Byvoegings"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:542
+msgid "Removals"
+msgstr "Verwyderings"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:546
+msgid "Updates"
+msgstr "Bywerkings"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:550
+msgid "Downgrades"
+msgstr "Afgraderings"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Geen bywerkings is al op die stelsel geïnstalleer nie."
+
+#: src/gs-update-monitor.c:106
+msgid "Security Updates Pending"
+msgstr ""
+
+#: src/gs-update-monitor.c:107
+msgid "It is recommended that you install important updates now"
+msgstr "Dit word aangeraai om belangrike bywerkings nou te installeer"
+
+#: src/gs-update-monitor.c:110
+msgid "Restart & Install"
+msgstr "Herbegin en installeer"
+
+#: src/gs-update-monitor.c:114
+msgid "Software Updates Available"
+msgstr "Sagtewarebywerkings beskikbaar"
+
+#: src/gs-update-monitor.c:115
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Belangrike bywerkings vir die bedryfstelsel en toepassings is gereed om "
+"geïnstalleer te word"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:118 src/gs-updates-section.c:338
+msgid "Not Now"
+msgstr "Nie nou nie"
+
+#: src/gs-update-monitor.c:119
+msgid "View"
+msgstr "Vertoon"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:217
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Toepassing bygewerk — Herlaai die bedryfstelsel"
+msgstr[1] "%u Toepassings bygewerk — Herlaai die bedryfstelsel"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:223
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Toepassing bygewerk"
+msgstr[1] "%u Toepassings bygewerk"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:234
+#, c-format
+msgid "%s has been updated."
+msgstr "%s is bygewerk."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:237
+msgid "Please restart the application."
+msgstr "Herlaai die toepassing asseblief."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:245
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s en %s is suksesvol bygewerk."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:251 src/gs-update-monitor.c:270
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u toepassing moet herlaai word."
+msgstr[1] "%u toepassings moet herlaai word."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:263
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Sluit %s, %s en %s in."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:493 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Bedryfstelselbywerkings beskikbaar"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:495
+msgid "Upgrade to continue receiving security updates."
+msgstr "Gradeer op om aan te hou om sekuriteitbywerkings te ontvang."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:550
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "'n Nuwe weergawe van %s is beskikbaar om geïnstalleer te word"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:554
+msgid "Software Upgrade Available"
+msgstr "Sagtewarebywerkings beskikbaar"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:856
+msgid "Software Updates Failed"
+msgstr "Sagtewarebywerkings het misluk"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:858
+msgid "An important OS update failed to be installed."
+msgstr "'n Belangrike bedryfstelsel-bywerking kon nie geïnstalleer word nie."
+
+#: src/gs-update-monitor.c:859
+msgid "Show Details"
+msgstr "Vertoon besonderhede"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:882
+msgid "System Upgrade Complete"
+msgstr "Stelsel opgradering voltooid"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:887
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Welkom by %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:893
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Sagtewarebywerking geïnstalleer"
+msgstr[1] "Sagtewarebywerkings geïnstalleer"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:897
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "'n Belangrike bedryfstelsel-bywerking is geïnstalleer."
+msgstr[1] "Belangrike bedryfstelsel-bywerkings is geïnstalleer."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:908
+msgctxt "updates"
+msgid "Review"
+msgstr "Hersien"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:956
+msgid "Failed To Update"
+msgstr "Kon nie opdateer nie"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:962
+msgid "The system was already up to date."
+msgstr "Die stelsel was klaar op datum."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:967
+msgid "The update was cancelled."
+msgstr "Die bywerking is gekanselleer."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:973
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Toegang tot die internet word benodig maar was nie beskikbaar nie. Maak "
+"asseblief seker dat jy toegang tot die internet het, en probeer weer."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:979
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Daar was sekuriteitsprobleme met die bywerking. Konsulteer jou sagteware "
+"verskaffer vir meer besonderhede."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:985
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Daar was nie genoeg oop spasie op die skyf nie. Maak asseblief ruimte en "
+"probeer weer."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:990
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Ons is jammer, maar die opgradering kon nie installeer nie. Wag asseblief "
+"vir 'n nuwe opgradering en probeer weer. Indien die probleem aanhou, "
+"konsulteer jou sagteware verskaffer."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:239
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:242
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:248
+msgid "Yesterday, %R"
+msgstr "Gister, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:252
+msgid "Yesterday, %l:%M %p"
+msgstr "Gister, %l:%M %p"
+
+#: src/gs-updates-page.c:255
+msgid "Two days ago"
+msgstr "Twee dae gelede"
+
+#: src/gs-updates-page.c:257
+msgid "Three days ago"
+msgstr "Drie dae gelede"
+
+#: src/gs-updates-page.c:259
+msgid "Four days ago"
+msgstr "Vier dae gelede"
+
+#: src/gs-updates-page.c:261
+msgid "Five days ago"
+msgstr "Vyf dae gelede"
+
+#: src/gs-updates-page.c:263
+msgid "Six days ago"
+msgstr "Ses dae gelede"
+
+#: src/gs-updates-page.c:265
+msgid "One week ago"
+msgstr "'n Week gelede"
+
+#: src/gs-updates-page.c:267
+msgid "Two weeks ago"
+msgstr "Twee weke gelede"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:271
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:283
+msgid "Looking for new updates…"
+msgstr "Kontroleer tans vir nuwe bywerkings…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:352
+msgid "Setting up updates…"
+msgstr "Stel bywerkings op…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:353 src/gs-updates-page.c:360
+msgid "(This could take a while)"
+msgstr "(Dit kan 'n oomblik duur)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:467
+#, c-format
+msgid "Last checked: %s"
+msgstr "Laas gekontroleer: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:631
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s word nie meer ondersteun nie."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:636
+msgid "Your OS is no longer supported."
+msgstr "Jou bedryfstelsel word nie meer ondersteun nie."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:641
+msgid "This means that it does not receive security updates."
+msgstr "Dit beteken dat dit nie sekuriteitsbywerkings sal ontvang nie."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:645
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Dit word aanbeveel dat jy na 'n meer onlangse weergawe opgradeer."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:903
+msgid "Charges may apply"
+msgstr "Kostes mag van toepassing wees"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:907
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Bywerkingkontrole terwyl mens draagbare breëband data gebruik kan dalk geld "
+"kos."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:911
+msgid "Check Anyway"
+msgstr "Kontroleer in elk geval"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:927
+msgid "No Network"
+msgstr "Geen netwerk nie"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:931
+msgid "Internet access is required to check for updates."
+msgstr "Internettoegang word benodig om vir bywerkings te kontroleer."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1355
+msgid "Checking…"
+msgstr "Kyk tans…"
+
+#: src/gs-updates-page.c:1368
+msgid "Check for updates"
+msgstr "Kontroleer vir bywerkings"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Bywerkingsbladsy"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Sagteware is op datum"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Bywerkingkontrole terwyl mens draagbare breëband data gebruik kan dalk geld "
+"kos"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Kontroleer in elk geval"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Gaan aanlyn om te kontroleer vir bywerkings"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Netwerkinstellings"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Bywerkings sal outomaties bestuur word"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:288
+msgid "Restart & Update"
+msgstr "Herbegin en dateer op"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:294
+msgid "Update All"
+msgstr "Dateer almal op"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-section.c:334
+msgid "Updates have been installed"
+msgstr "Bywerking is geïnstalleer"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-section.c:336
+msgid "A restart is required for them to take effect."
+msgstr "Die rekenaar moet herbegin word vir hulle om effek te neem."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-section.c:340
+msgid "Restart"
+msgstr "Herbegin"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:438
+msgid "Integrated Firmware"
+msgstr "Geïntegreerde fermware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:442
+msgid "Requires Restart"
+msgstr "Moet herbegin word"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:446
+msgid "Application Updates"
+msgstr "Toepassingbywerkings"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:450
+msgid "Device Firmware"
+msgstr "Toestelfermware"
+
+#: src/gs-updates-section.c:478 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Laai af"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Nou beskikbaar"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Laai tans %s %s af"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Reg om te installeer"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+"'n Belangrike bywerking, met nuwe funksies en beter vertalings (as alles "
+"goed gaan)."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Meer inligting"
+
+#: src/gs-upgrade-banner.ui:85
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Voor daar met die opgradering begin word, sal dit aanbeveel word om 'n "
+"rugsteun van al jou data te maak."
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Installeer, verwyder of gradeer sagteware vir die rekenaar op"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"bywerkings;opgradeer;bronne;lêerstoor;voorkeure;installeer;verwyder;program;"
+"sagteware;toep;winkel;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "Ontwerp die uitgesoekte baniere vir GNOME-sagteware"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "appstream;sagteware;toep;"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Klank vervaardiging en redigering"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musiekspelers"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Ontfouting"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEs"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Kunsmatige intelligensie"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Sterrekunde"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemie"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Tale"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Wiskunde"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Aksie"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Avontuur"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkade"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokke"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Bord"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kaart"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulators"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Kinders"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rolspel"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategie"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafika"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografie"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skandering"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafika"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Vertoners"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalender"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Databasis"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finansies"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Woordverwerker"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Skriftipes"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeks"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Toevoerbronne"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Taalpakke"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Shell-uitbreidings"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisering"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardeware-aandrywers"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Gesels"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nuus"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webblaaiers"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Teksredigeerders"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Uitgesoek"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Kuns"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografie"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Strokiesprente"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiksie"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Gesondheid"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Geskiedenis"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Leefstyl"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politiek"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "Klank en video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "Ontwikkelingsgereedskap"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "Onderwys en wetenskap"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "Speletjies"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "Grafika en fotografie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "Produktiwiteit"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "Kommunikasie en nuus"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "Verwysing"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "Nutsgoed"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:68
+msgid "OS Updates"
+msgstr "Bedryfstelselbywerkings"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:73
+msgid "Includes performance, stability and security improvements."
+msgstr "Sluit verbeterde werkverrigting, stabiliteit en sekuriteit in."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "Laai tans uitgesoekte beelde af…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Webtoepassing ondersteuning"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Gebruik populêre webtoepassings in 'n webblaaier"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:138
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:140
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:147
+msgid "You need to specify exactly one filename"
+msgstr "Jy moet presies een lêernaam spesifiseer"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:154
+msgid "This program can only be used by the root user"
+msgstr "Die program kan slegs deur die wortel gebruiker uitgevoer word"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:162
+msgid "Failed to validate content type"
+msgstr "Kon nie inhoud tipe valideer nie"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:169
+msgid "Failed to copy"
+msgstr "Kon nie kopieer nie"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:243
+msgid "Downloading extra metadata files…"
+msgstr "Laai tans ekstra metadata lêers af…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:206
+msgid "Downloading upgrade information…"
+msgstr "Laai tans opgradering inligting af…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:297
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "Gradeer jou stelsel op vir die nuutste funksies en verbeteringe."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak ondersteuning"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak is 'n raamwerk vir Linux toepassings"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:834
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Kry tans flatpak metadata vir %s…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:673
+msgid "Downloading firmware update signature…"
+msgstr "Laai tans handtekening vir fermware opgradering af…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:714
+msgid "Downloading firmware update metadata…"
+msgstr "Laai tans metadata vir fermware opgradering af…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Ondersteuning vir die opgradering van fermware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Verskaf ondersteuning vir die opgradering van fermware"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:209
+msgid "Downloading application ratings…"
+msgstr "Laai tans toepassing-graderings af…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "\"Open Desktop Ratings\" Ondersteuning"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS is 'n diens wat gebruiker resensies van toepassings bied"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:405
+msgid "GNOME Shell Extensions Repository"
+msgstr "GNOME-koppelvlak uitbreidingsbron"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:793
+msgid "Downloading shell extension metadata…"
+msgstr "Laai tans GNOME-koppelvlak uitbreiding metadata af…"
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:887
+msgid "GNOME Shell Extension"
+msgstr "GNOME-koppelvlak uitbreidings"
+
+#: plugins/snap/gs-plugin-snap.c:81 plugins/snap/gs-plugin-snap.c:83
+msgid "To continue, you need to use an Ubuntu One account."
+msgstr "Om voort te gaan sal jy 'n \"Ubuntu One\" rekening moet gebruik."
+
+#: plugins/snap/gs-plugin-snap.c:82
+msgid "To continue, you need to use your Ubuntu One account."
+msgstr "Om voort te gaan sal jy jou \"Ubuntu One\" rekening moet gebruik."
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:238
+msgid "Snap Store"
+msgstr "Snap-winkel"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap-ondersteuning"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "'n Snap is 'n universele Linux pakket"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Wys profielinligting vir die diens"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Om voort te gaan moet jy by %s inteken."
+
+#~ msgid "Email address"
+#~ msgstr "E-pos adres"
+
+#~ msgid "I have an account already"
+#~ msgstr "Ek het klaar 'n rekening"
+
+#~ msgid "Password"
+#~ msgstr "Wagwoord"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Ek wil nou vir 'n rekeneing registreer"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Ek het my wagwoord vergeet"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Teken my volgende keer outomaties in"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Voer jou eenmalige pin vir twee-faktor-verifikasie in."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Verifieer"
+
+#~ msgid "_About"
+#~ msgstr "_Aangaande"
+
+#~ msgid "_Quit"
+#~ msgstr "_Sluit af"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Inligting oor %s, asook moontlikhede om die kodek te kry wat dié formaat "
+#~ "kan speel, kan op die webwerf gevind word."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Dit is nie moontlik om sagteware te installeer voor die nie opgelos is "
+#~ "nie."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Vir meer inligting, besoek %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Kan nie %s vanaf %s opdateer nie"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Laai tans nuwe bywerkings af…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Herbegin en dateer op"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Dateer almal _op"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Herbegin en _installeer"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Laai tans fermware bywerking af…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba ondersteuning"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba verskaf ontwikkelaars met 'n maklike manier om sagtewarebondels te "
+#~ "maak"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Laai tans die toestelbladsy af…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam ondersteuning"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Die baanbreker vermaaklikheidsplatform van Valve"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Speler-tot-speler vooraf ingestelde interaksies sonder kletsfunksies"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Verskaf toegang tot addisionele sagteware, insluitend webblaaiers en "
+#~ "speletjies."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Aktiveer alleenregsagteware bronne?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Geen toepassings of byvoegings geïnstalleer nie; ander sagteware mag nog "
+#~ "steeds wees"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Het tipies beperkings op gebruik en toegang tot die bronkode."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Alleenregsagteware bronne"
+
+#~ msgid "Remove Source"
+#~ msgstr "Verwyder bron"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Sagteware bronne kan deur die internet afgelaai word. Dit verleen toegang "
+#~ "tot addisionele sagteware wat nie deur %s verskaf word nie."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Deur 'n bron te verwyder, word enige sagteware wat daaruit geïnstalleer "
+#~ "is ook verwyder."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Geen sagteware vanuit dié bron geïnstalleer nie"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Geïnstalleer vanuit dié bron"
+
+#~ msgid "Source Details"
+#~ msgstr "Bron se besonderhede"
+
+#~ msgid "Last Checked"
+#~ msgstr "Laas gekontroleer"
+
+#~ msgid "Added"
+#~ msgstr "Bygevoeg"
+
+#~ msgid "Website"
+#~ msgstr "Webwerf"
+
+#~ msgid "About Software"
+#~ msgstr "Aangaande Sagteware"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "'n Vorige bywerking is nie voltooi nie."
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "'n Bywerking is nie korrek digitaal geteken nie."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Die bywerking kon nie voltooi word nie."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "'n Bywerking vanlyn is aangevra, maar geen pakkette het bywerking benodig "
+#~ "nie."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Geen plek beskikbaar op skyf nie."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "'n Bywerking kon nie korrek installeer nie."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Die bywerking vanlyn het op onverwagse manier gefaal."
+
+#~ msgid "_Installing"
+#~ msgstr "_Installeer tans"
+
+#~ msgid "_Removing"
+#~ msgstr "Ve_rwyder tans"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Onbekend"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Bereken tans…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Onbekend"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Internetafhanklike toepassing"
+
+#~ msgid "_History"
+#~ msgstr "_Geskiedenis"
+
+#~ msgid "Size"
+#~ msgstr "Grootte"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aanbevole kantoortoepassings"
+
+#~ msgid "No sources found."
+#~ msgstr "Geen bronne gevind nie."
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Sagtewarebronne gee mens toegang tot addisionele sagteware."
+
+#~ msgid "OK"
+#~ msgstr "Goed"
+
+#~ msgid "One Star"
+#~ msgstr "Een ster"
+
+#~ msgid "Two Stars"
+#~ msgstr "Twee sterre"
+
+#~ msgid "Three Stars"
+#~ msgstr "Drie sterre"
+
+#~ msgid "Four Stars"
+#~ msgstr "Vier sterre"
+
+#~ msgid "Five Stars"
+#~ msgstr "Vyf sterre"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Installasie van %s het misluk."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Kon nie %s verwyder nie."
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Geen AppStream-data gevind nie"
+
+#~ msgid " or "
+#~ msgstr " of "
+
+#~ msgid "Web app"
+#~ msgstr "Webtoepassing"
+
+#~ msgid "Audio"
+#~ msgstr "Oudio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Databasisse"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Skryf van skywe"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amateurradio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mengbank"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Musiek"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Opnemers"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Bou"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Databasisse"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Ontwikkelingsomgewings (IDE)"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profiele"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "Weergawebeheer"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Webontwikkeling"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Rekenaarwetenskap"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Konstruksie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Datavisualisering"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektrisiteit"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Ingenieurswese"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geowetenskap"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Geskiedenis"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Geesteswetenskappe"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Beeldverwerking"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Letterkunde"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Kaarte"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Musiek"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numeriese analise"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallelle verwerking"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fisika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Geestelik"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Skiet"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulasie"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D-grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Karakterherkenning (OCR)"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Roostergrafika"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Inbel"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-pos"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Nuusvoer"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Lêeroordrag"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amateurradio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Kitsboodskappe"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC-kliënte"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "Eweknienetwerke (P2P)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Eksterne toegang"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonie"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Webontwikkeling"
+
+#~ msgid "Office"
+#~ msgstr "Kantoor"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafiek"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Kontakbestuur"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Woordeboek"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-pos"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Vloeidiagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projekbestuur"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publisering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Sigblad"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Bekyker"
+
+#~ msgid "Science"
+#~ msgstr "Wetenskap"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Kuns"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Kunsmatige intelligensie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Sterrekunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chemie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Rekenaarwetenskap"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Konstruksie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Datavisualisering"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektrisiteit"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Ingenieurswese"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Aardrykskunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geowetenskap"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Geskiedenis"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Geesteswetenskappe"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Beeldverwerking"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Tale"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Letterkunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Kaarte"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Wiskunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medies"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numeriese analise"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallelle verwerking"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fisika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Geestelik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "System"
+#~ msgstr "Stelsel"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Lêerbestuur"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Lêergereedskap"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Sekuriteit"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Terminaalemulator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Toeganklikheid"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Argivering"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Sakrekenaar"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Horlosie"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Kompressie"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Lêergereedskap"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Kaarte"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Geestelik"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefoniegereedskap"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Redigering"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Databasis"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Skryf van skywe"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Spelers"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Opnemers"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..15470f7
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,5166 @@
+# Copyright (C) 2014 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Shuaib Zahda <shuaib.zahda@gmail.com>, 2014.
+# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2014, 2016, ٢٠١٦.
+# Muhannad Alrusayni <muhannad.alrusayni@gmail.com>, 2016.
+# Khaled Hosny <khaledhosny@eglug.org>, 2016, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: Gnome 3.14\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-05-30 11:26+0200\n"
+"PO-Revision-Date: 2018-05-30 12:36+0200\n"
+"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
+"Language-Team: Arabic <doc@arabeyes.org>\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Virtaal 1.0.0-beta1\n"
+"X-Project-Style: gnome\n"
+
+# الجمع أفضل لعنوان البرمجيّة
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "برمجيّات جنوم"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "مدير تطبيقات لجنوم"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"يسمح لك «برمجيّات» بالبحث عن تطبيقات جديدة وامتدادات للنّظام وإزالة التّ"
+"طبيقات المنصّبة."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"يعرض «برمجيّات جنوم» التّطبيقات المُختارة والشّعبيّة بأوصاف مفيدة وعدّة لقطات شاشة "
+"لكلّ تطبيق. يمكن العثور على التّطبيقات من تصفّح قائمة الفئات أو بالبحث. يسمح لك "
+"«برمجيّات جنوم» أيضًا بتحديث النّظام باستخدام تحديث دون اتّصال."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "لوحة النّظرة العامّة"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "لوحة التّفاصيل"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "لوحة المنصّبة"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "لوحة التّحديثات"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "تفاصيل التحديث"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1103
+msgid "The GNOME Project"
+msgstr "مشروع جنوم"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "قائمة من المشاريع المتوافقة"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "هذه قائمة المشاريع المتوافقة التي ستُعرض مثل جنوم، وكدي وXFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+#, fuzzy
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "فيما إذا كان هذا أول بدء ل‍«برمجيّات جنوم»"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically download updates"
+msgstr "فيما إذا كان يجب تنزيل تحديثات تلقائيا أم لا"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background "
+"and prompts the user to install them when ready."
+msgstr ""
+"إن فُعّل، سينزل «برمجيّات جنوم» التحديثات تلقائيا في الخلفية ويطلب من "
+"المستخدم تنصيبها عند جهوزها."
+
+#: data/org.gnome.software.gschema.xml:20
+#, fuzzy
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "فيما إذا كان يجب تنزيل تحديثات تلقائيا أم لا"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+#, fuzzy
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "فيما إذا كان هذا أول بدء ل‍«برمجيّات جنوم»"
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "اعرض النجوم التقيمية بجانب التطبيقات"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr "تعرض التطبيقات غير الحرة تحذيرا قبل تنصيبها"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr "يمكن عرض تحذير عند تنصيب تطبيقات غير حرة. يتحكم هذا في عرضه من عدمه."
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "قائمة للتطبيقات الشائعة"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "قائمة التطبيقات لكي تُستخدم، متجاوزة تلك المعرّفة في النظام."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The last update check timestamp"
+msgstr "الختم الزمني لآخر التماس للتحديثات"
+
+#: data/org.gnome.software.gschema.xml:51
+msgid "The last upgrade notification timestamp"
+msgstr "الختم الزمني لآخر ترقية"
+
+#: data/org.gnome.software.gschema.xml:55
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "الختم الزمني لأول تحديث أمني، يُمحى بعد التحديث"
+
+#: data/org.gnome.software.gschema.xml:59
+msgid "The last update timestamp"
+msgstr "الختم الزمني لآخر تحديث"
+
+#: data/org.gnome.software.gschema.xml:63
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid "The server to use for application reviews"
+msgstr "الخادوم لأخذ تقييمات التطبيقات منه"
+
+#: data/org.gnome.software.gschema.xml:77
+msgid "The minimum karma score for reviews"
+msgstr "أدنى عدد لنقاط السلوك للتقييمات"
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "التقييمات ذات نقاط السلوك الأقل من هذا العدد لن تظهر."
+
+#: data/org.gnome.software.gschema.xml:82
+#, fuzzy
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "قائمة المصادر الرسمية لكي لا تُعتبر طرفا ثالثا"
+
+#: data/org.gnome.software.gschema.xml:86
+#, fuzzy
+msgid "A list of official repositories that should be considered free software"
+msgstr "قائمة المصادر الرسمية كي تُعتبر برمجيات حرة"
+
+#: data/org.gnome.software.gschema.xml:90
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "عنوان الرخصة لكي يُستخدم لاعتبار تطبيق ما برمجيةً حرة"
+
+#: data/org.gnome.software.gschema.xml:94
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "نصّب تطبيقات لكل مستخدم النظام متى ما امكن"
+
+#: data/org.gnome.software.gschema.xml:98
+msgid "Show the folder management UI"
+msgstr "اعرض واجهة إدارة المجلدات"
+
+#: data/org.gnome.software.gschema.xml:102
+#, fuzzy
+msgid "Allow access to the Software Repositories dialog"
+msgstr "اسمح بالوصول إلى حوار مصادر البرمجيات"
+
+#: data/org.gnome.software.gschema.xml:106
+msgid "Offer upgrades for pre-releases"
+msgstr "يوفّر ترقيات لنسخ ما قبل الإصدار"
+
+#: data/org.gnome.software.gschema.xml:110
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "اعرض عناصر في الواجهة الرسومية تُخبر المستخدم بأن التطبيق غير حر"
+
+#: data/org.gnome.software.gschema.xml:114
+#, fuzzy
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "اعرض محثًا لتنصيب مصادر البرمجيات غير الحرة"
+
+#: data/org.gnome.software.gschema.xml:118
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:122
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+"'https://ar.wikipedia.org/wiki/%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA_%D8"
+"%A7%D8%AD%D8%AA%D9%83%D8%A7%D8%B1%D9%8A%D8%A9'"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "المسار الذي يشرح البرمجيات غير الحرة و المحتكرة"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "تنصيب البرمجيّات"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "نصّب البرمجيّات المحدّدة على النّظام"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "حدّد الكلّ"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "ألغِ التّحديد"
+
+# الجمع أفضل لعنوان البرمجيّة
+#: src/gnome-software.ui:24 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "برمجيّات"
+
+#: src/gnome-software.ui:43 src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "ارجع"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "ال_كلّ"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "ال_منصّبة"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "ال_تّحديثات"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "ابحث"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-repos-dialog.ui:6 src/gs-repos-dialog.ui:20
+msgid "Software Repositories"
+msgstr "مستودعات البرمجيات"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "افحص القرص"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1435
+msgid "Network Settings"
+msgstr "إعدادات الشّبكة"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "أعِد التشغيل الآن"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "مزيد من المعلومات"
+
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:424
+msgid "Pending"
+msgstr "ينتظر"
+
+#: src/gs-app-addon-row.c:102 src/gs-app-row.ui:209 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:87
+msgid "Installed"
+msgstr "مُنصّب"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:106 src/gs-app-row.c:215 src/gs-details-page.c:464
+#: src/gs-third-party-repo-row.c:113
+msgid "Installing"
+msgstr "ينصّب"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:110 src/gs-app-row.c:221 src/gs-repo-row.c:140
+#: src/gs-third-party-repo-row.c:120
+msgid "Removing"
+msgstr "يزيل"
+
+#: src/gs-app-folder-dialog.c:309
+msgid "Folder Name"
+msgstr "اسم المجلّد"
+
+#: src/gs-app-folder-dialog.c:320 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:329 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:610 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "أل_غِ"
+
+#: src/gs-app-folder-dialog.c:325 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "أ_ضف"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "أضف إلى مجلّد التّطبيقات"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:124
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"وضع البدء: واحدٌ من 'updates'، أو 'updated'، أو 'installed' أو 'overview'"
+
+#: src/gs-application.c:124
+msgid "MODE"
+msgstr "الوضع"
+
+#: src/gs-application.c:126
+msgid "Search for applications"
+msgstr "ابحث عن تطبيقات"
+
+#: src/gs-application.c:126
+msgid "SEARCH"
+msgstr "البحث"
+
+#: src/gs-application.c:128
+msgid "Show application details (using application ID)"
+msgstr "اعرض تفاصيل التّطبيق (باستخدام معرّفه)"
+
+#: src/gs-application.c:128 src/gs-application.c:132
+msgid "ID"
+msgstr "المعرّف"
+
+#: src/gs-application.c:130
+msgid "Show application details (using package name)"
+msgstr "اعرض تفاصيل التّطبيق (باستخدام اسم الحزمة)"
+
+# هذا يظهر في سطر الأوامر غالبًا
+#: src/gs-application.c:130
+msgid "PKGNAME"
+msgstr "اسم_الحزمة"
+
+#: src/gs-application.c:132
+msgid "Install the application (using application ID)"
+msgstr "نصّب التّطبيق (باستخدام معرّفه)"
+
+#: src/gs-application.c:134
+msgid "Open a local package file"
+msgstr "افتح ملفّ حزمة محليّة"
+
+# هذا يظهر في سطر الأوامر غالبًا
+#: src/gs-application.c:134
+msgid "FILENAME"
+msgstr "اسم_الملفّ"
+
+#: src/gs-application.c:136
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:139
+msgid "Show verbose debugging information"
+msgstr "اعرض معلومات تنقيح مطنبة"
+
+#: src/gs-application.c:141
+msgid "Show profiling information for the service"
+msgstr "اعرض معلومات التّعرفة للخدمة"
+
+#: src/gs-application.c:143
+msgid "Quit the running instance"
+msgstr "أنهِ السيرورة الجارية"
+
+#: src/gs-application.c:145
+msgid "Prefer local file sources to AppStream"
+msgstr "فضّل مصادر الملفّات المحليّة على AppStream"
+
+#: src/gs-application.c:147
+msgid "Show version number"
+msgstr "اعرض رقم الإصدارة"
+
+#: src/gs-application.c:344
+msgid "translator-credits"
+msgstr ""
+"فريق عربآيز للترجمة http://www.arabeyes.org :\n"
+"خالد حسني\t<khaledhosny@eglug.org>\n"
+"شعيب زاهدة\t<shuaib.zahda@gmail.com>\n"
+"صفا الفليج\t<safa1996alfulaij@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:351
+#, c-format
+msgid "About %s"
+msgstr "_عن %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:355
+msgid "A nice way to manage the software on your system."
+msgstr "طريقة لطيفة لإدارة البرمجيّات في النّظام."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:170
+msgid "Visit website"
+msgstr "زُر موقع الوِبّ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:175
+msgid "Install…"
+msgstr "نصّب…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:182
+msgid "Cancel"
+msgstr "ألغِ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:189 src/gs-common.c:276 src/gs-page.c:589
+msgid "Install"
+msgstr "نصّب"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:196
+msgid "Update"
+msgstr "حدّث"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:200 src/gs-app-row.c:209 src/gs-page.c:746
+#: src/gs-repos-dialog.c:336
+msgid "Remove"
+msgstr "أزل"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:326
+msgid "Device cannot be used during update."
+msgstr "لا يمكن استخدام الجهاز أثناء التحديث."
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:336 src/gs-details-page.ui:988
+msgid "Source"
+msgstr "المصدر"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:69
+msgid "To continue you need to sign in."
+msgstr "عليك الولوج للمتابعة."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:73
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "عليك الولوج إلى %s للمتابعة."
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "البريد الإلكتروني"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "لدي حساب بالفعل"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "كلمة السر"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "أريد تسجيل حساب الآن"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "نسيتُ كلمة السر"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "لِجني تلقائيا المرة القادمة"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "أدخل رمز الاستيثاق بمعاملين"
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "الرمز"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr "استوثق"
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "تابع"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:194
+msgid "Other"
+msgstr "أخرى"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:199
+msgid "All"
+msgstr "الكلّ"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:203
+msgid "Featured"
+msgstr "مُختارة"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:501
+#, c-format
+msgid "Featured %s"
+msgstr "مُختارات %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:24
+msgid "Top Rated"
+msgstr "الأعلى تقييمًا"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#: src/gs-category-page.ui:30 src/gs-editor.ui:296
+msgid "Name"
+msgstr "الاسم"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:137 src/gs-details-page.c:361
+msgid "Extension Settings"
+msgstr "إعدادات الامتدادات"
+
+#: src/gs-category-page.ui:166
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"استعمل الامتدادات على مسؤوليتك الخاصة. إن واجهت أية مشاكل في النظام، فمن "
+"المستحسن أن تعطلها."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:197
+msgid "Show"
+msgstr "اعرض"
+
+#: src/gs-category-page.ui:219
+msgid "Subcategories filter menu"
+msgstr "قائمة مرشح التصنيفات الفرعية"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:267
+msgid "Sort"
+msgstr "رتّب"
+
+#: src/gs-category-page.ui:288
+msgid "Subcategories sorting menu"
+msgstr "قائمة ترتيب التصنيفات الفرعية"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:206
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "رجاء أدخل رقما من ١ إلى %u:"
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:269
+msgid "Choose an application:"
+msgstr "اختر تطبيقًا:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:136
+msgid "OS updates are now installed"
+msgstr "نصّبت تحديثات نظام التشغيل"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:139
+msgid "Recently installed updates are available to review"
+msgstr "التطبيقات المنصبة حديثًا متاحة للمراجعة"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:143
+#, c-format
+msgid "%s is now installed"
+msgstr "نُصّب %s"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:146
+msgid "Application is ready to be used."
+msgstr "التطبيق جاهز للاستخدام."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:152
+msgid "Launch"
+msgstr "أطلِق"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "أأنصّب برمجيات من طرف ثالث؟"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214 src/gs-repos-dialog.c:247
+msgid "Enable Third-Party Software Repository?"
+msgstr "أأفعّل مستودعات برمجيات من طرف ثالث؟"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:230
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s ليست <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">برمجية حرّة و مفتوحة المصدر</a>، و موفّرها هو \"%s\"."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:240
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "يأتي %s من ”%s“."
+
+#: src/gs-common.c:249
+msgid "This software repository must be enabled to continue installation."
+msgstr "يجب تفعيل مستودع البرمجيات هذا لمتابعة التنصيب."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:259
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "قد يكون ممنوعا تنصيب %s أو استخدامها في بعض الدول."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:265
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "قد يكون ممنوعا تنصيب هذا المرماز أو استخدامه في بعض الدول."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:272
+msgid "Don’t Warn Again"
+msgstr "لا تحذّرني ثانيةً"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:281
+msgid "Enable and Install"
+msgstr "فعّل و نصّب"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:426
+msgid "Detailed errors from the package manager follow:"
+msgstr "فيما يلي الأعطال التّفصيليّة من مدير الحزم:"
+
+#: src/gs-common.c:445 src/gs-details-page.ui:595
+msgid "Details"
+msgstr "التّفاصيل"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "لا عنف كرتوني"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "شخصيات كرتونية في مواقف خطرة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "شخصيات كرتونية تتصراع بعدوانية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "عنف رسومي لشخصيات كرتونية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "لا عنف خيالي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "الشخصيات الكرتونية في مواقف خطرة يمكن تمييزها عن الواقع بسهولة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "الشخصيات الكرتونية وهي تتصارع بعدوانية يمكن تمييزها عن الواقع بسهولة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "العنف الرسومي سهل تفرقته عن الواقع"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "لا عنف واقعي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "شخصيات واقعية معتدلة في حالات غير آمنة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "تصوير شخصيات واقعية تتصراع بعدوانية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "عنف رسومي لشخصيات واقعية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "لا إراقة دماء"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "إراقة الدماء غير حقيقة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "إراقة الدماء حقيقة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "تصوير لسفك الدماء والتمثيل بأجزاء الجسد"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "لا عنف جنسي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "اغتصاب أو سلوك جنسي عنيف"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "لا إشارات لمشروبات كحولية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "إشارات لمشروبات كحولية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "استخدام مشروبات كحولية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "لا إشارات لمخدرات غير مشروعة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "إشارات لمخدرات غير مشروعة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "استخدام مخدرات غير مشروعة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "إشارات منتجات التبغ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "استخدام منتجات التبغ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "لا عري من أي نوع"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "عري فني بسيط"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "العري لفترة طويلة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "لا إشارات أو تصوير للجنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "تلميحات استفزازية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "إشارات أو تصوير للجنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "سلوك جنسي رسومي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "لا ألفاظ نابية من أي نوع"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "استخدام معتدل أو نادر للألفاظ النابية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "استعمال معتدل للألفاظ النابية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "استعمال قوي أو متكرر للألفاظ النابية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "لا فكاهة مبتذلة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "فكاهة تهريجية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "فكاهة مبتذلة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "نكت جنسية/للكبار"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "لا لغة متحيزة من أي نوع"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "السلبية تجاه مجموعة من الأشخاص"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "تمييز مفتعل للتسبب بضرر عاطفي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "تمييز صريح بناء على الجنس، أو السلاسة البشرية أو العقيدة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "لا إعلانات من أي نوع"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "إشهار منتجات"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "إشارات صريحة لعلامات تجارية ومنتجات معينة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "يُشجّع المستخدمين على شراء عناصر معينة في العالم الحقيقي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "لا مقامرة من أي نوع"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "مقامرة على أحداث عشوائية باستخدام عمل رمزية أو ائتمانات"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "مقامرة باستخدام مال ”ألعاب“"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "مقامرة باستخدام مال حقيقي"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "لا إمكانية إنفاق أموال"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Users are encouraged to donate real money"
+msgstr "يُشجّع المستخدمين على التبرع بنقود حقيقية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "Ability to spend real money in-game"
+msgstr "إمكانية إنفاق أموال حقيقية داخل اللعبة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "No way to chat with other users"
+msgstr "لا إمكانية للدردشة مع مستخدمين آخرين"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "User-to-user game interactions without chat functionality"
+msgstr "تفاعل المستخدمين مع بعض في اللعبة بدون ميزة دردشة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Moderated chat functionality between users"
+msgstr "ميزة مدارة دردشة بين المستخدمين"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Uncontrolled chat functionality between users"
+msgstr "ميزة دردشة بين المستخدمين بلا إدارة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "No way to talk with other users"
+msgstr "لا إمكانية للحديث مع مستخدمين آخرين"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "ميزة دردشة مرئية أو صوتية بين المستخدمين بلا إدارة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "No sharing of social network usernames or email addresses"
+msgstr "لا مشاركة لأسماء حسابات شبكات التواصل أو عناوين البريد"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "Sharing social network usernames or email addresses"
+msgstr "مشاركة أسماء حسابات شبكات التواصل أو عناوين البريد"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "No sharing of user information with 3rd parties"
+msgstr "لا مشاركة لمعلومات المستخدم مع أطراف ثالثة"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Checking for the latest application version"
+msgstr "يتم التحقق من أحدث إصدار للتطبيق"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "مشاركة بيانات التشخيص التي لا تسمح للآخرين بتحديد المستخدم"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:276
+#, fuzzy
+msgid "Sharing information that lets others identify the user"
+msgstr "معلومات المستخدم تُشارك مع أطراف ثالثة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+#, fuzzy
+msgid "No sharing of physical location to other users"
+msgstr "مشاركة الموقع الفيزيائي مع بقية المستخدمين"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:282
+msgid "Sharing physical location to other users"
+msgstr "مشاركة الموقع الفيزيائي مع بقية المستخدمين"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "No references to homosexuality"
+msgstr "لا توجد إشارات إلى المثلية الجنسية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "Indirect references to homosexuality"
+msgstr "إشارات غير مباشرة إلى المثلية الجنسية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:293
+msgid "Kissing between people of the same gender"
+msgstr "تقبيل بين الناس من نفس الجنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "السلوك الجنسي الجرافيكي بين الناس من نفس الجنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:299
+#, fuzzy
+msgid "No references to prostitution"
+msgstr "إشارات أو تصوير للجنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:302
+#, fuzzy
+msgid "Indirect references to prostitution"
+msgstr "تلميحات استفزازية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+#, fuzzy
+msgid "Direct references of prostitution"
+msgstr "تلميحات استفزازية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:308
+msgid "Graphic depictions of the act of prostitution"
+msgstr "تصوير جرافيك لممارسة البغاء"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:311
+#, fuzzy
+msgid "No references to adultery"
+msgstr "إشارات منتجات التبغ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "Indirect references to adultery"
+msgstr "إشارات غير مباشرة إلى الزنا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Direct references of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:320
+msgid "Graphic depictions of the act of adultery"
+msgstr "تصوير جرافيك لفعل الزنا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:323
+msgid "No sexualized characters"
+msgstr "بدون شخصيات جنسية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Scantily clad human characters"
+msgstr "يكتنفه الشخصيات البشرية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:329
+msgid "Overtly sexualized human characters"
+msgstr "شخصيات بشرية جنسية بشكل علني"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:332
+#, fuzzy
+msgid "No references to desecration"
+msgstr "إشارات أو تصوير للجنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Depictions or references to historical desecration"
+msgstr "تصوير أو إشارات تدنيس تاريخية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:338
+msgid "Depictions of modern-day human desecration"
+msgstr "تصوير تدنيس الإنسان الحديث"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of modern-day desecration"
+msgstr "صور جرافيك لتدنيس العصر الحديث"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No visible dead human remains"
+msgstr "لا توجد رفات بشرية ميتة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:347
+msgid "Visible dead human remains"
+msgstr "بقايا بشرية ميتة ظاهرة"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Dead human remains that are exposed to the elements"
+msgstr "بقايا بشرية ميتة تتعرض للعناصر"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:353
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "الرسوم البيانية لتدنيس الأجسام البشرية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:356
+msgid "No references to slavery"
+msgstr "لا إشارات إلى العبودية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:359
+msgid "Depictions or references to historical slavery"
+msgstr "تصوير أو إشارات إلى العبودية التاريخية"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:362
+msgid "Depictions of modern-day slavery"
+msgstr "تصوير الرق المعاصر"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:365
+msgid "Graphic depictions of modern-day slavery"
+msgstr "تصوير جرافيكي للعبودية الحديثة"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:295
+msgid "An application"
+msgstr "تطبيق ما"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:301
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "يطلب %s دعما لصيغة ملفات إضافية."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:303
+msgid "Additional MIME Types Required"
+msgstr "أنواع MIME أخرى مطلوبة"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:307
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "يطلب %s خطوطا إضافية."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:309
+msgid "Additional Fonts Required"
+msgstr "خطوط إضافية مطلوبة"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:313
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "يطلب %s مرمازات وسائط إضافية."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:315
+msgid "Additional Multimedia Codecs Required"
+msgstr "مرمازات وسائط إضافية مطلوبة"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:319
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "يطلب %s مشغلات طابعات إضافية."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:321
+msgid "Additional Printer Drivers Required"
+msgstr "مشغلات طابعات إضافية مطلوبة"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:325
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "يطلب %s حزما إضافية."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:327
+msgid "Additional Packages Required"
+msgstr "حزم إضافية مطلوبة"
+
+# الجمع أفضل لعنوان البرمجيّة
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:336
+msgid "Find in Software"
+msgstr "ابحث في «برمجيّات»"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:286 src/gs-details-page.c:314
+#: src/gs-details-page.ui:206 src/gs-third-party-repo-row.c:97
+#: src/gs-upgrade-banner.ui:146
+msgid "_Install"
+msgstr "_نصّب"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:319
+msgid "_Update"
+msgstr "ح_دث"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:332 src/gs-third-party-repo-row.c:89
+msgid "_Install…"
+msgstr "_نصّب…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:366
+msgid "_Launch"
+msgstr "أ_طلِق"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:391 src/gs-details-page.ui:241
+msgid "_Remove"
+msgstr "أ_زل"
+
+#: src/gs-details-page.c:459
+msgid "Removing…"
+msgstr "يزيل…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:478
+msgid "Pending installation…"
+msgstr "على وشك التنصيب…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:485
+msgid "Pending update…"
+msgstr "على وشك التّحديث…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:802
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "يمكن استخدام هذا التّطبيق فقط إن كان هناك اتّصال نشط بالإنترنت."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:967
+msgctxt "version"
+msgid "Unknown"
+msgstr "مجهول"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:980
+msgctxt "updated"
+msgid "Never"
+msgstr "أبدًا"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1028
+msgctxt "origin"
+msgid "Unknown"
+msgstr "مجهول"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1425
+msgid "You need internet access to write a review"
+msgstr "تحتاج اتصالا بالإنترنت لكتابة تعليق"
+
+#: src/gs-details-page.c:1559
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "تعذر العثور على ”%s“"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2162
+msgid "Public domain"
+msgstr "ملكية عامة"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2165
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+"https://ar.wikipedia.org/wiki/%D9%85%D9%84%D9%83%D9%8A%D8%A9_%D8%B9%D8%A7%D9%"
+"85%D8%A9"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2172
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.ar.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2182 src/gs-details-page.ui:1383
+msgid "Free Software"
+msgstr "برمجيات حرة"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2239
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "المستخدمون مقيدون بالرخصة الآتية:"
+msgstr[1] "المستخدمون مقيدون بالرخصة الآتية:"
+msgstr[2] "المستخدمون مقيدون بالرخصتين الآتيتين:"
+msgstr[3] "المستخدمون مقيدون بالرخص الآتية:"
+msgstr[4] "المستخدمون مقيدون بالرخص الآتية:"
+msgstr[5] "المستخدمون مقيدون بالرخص الآتية:"
+
+#: src/gs-details-page.c:2266 src/gs-details-page.ui:1492
+msgid "More information"
+msgstr "مزيد من المعلومات"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "صفحة التّفاصيل"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:346
+msgid "_Add shortcut"
+msgstr "أ_ضف اختصارا"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:361
+msgid "Re_move shortcut"
+msgstr "أ_زل الاختصار"
+
+#: src/gs-details-page.ui:456
+msgid "No screenshot provided"
+msgstr "لا لقطة شاشة"
+
+#: src/gs-details-page.ui:492
+msgid "Software Repository Included"
+msgstr "مستودعات البرمجيات مُضمَّنة"
+
+#: src/gs-details-page.ui:493
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"يتضمّن هذا التّطبيق مستودع برمجيّات يوفّر التّحديثات إلى جانب الوصول إلى "
+"برمجيّات أخرى."
+
+#: src/gs-details-page.ui:506
+msgid "No Software Repository Included"
+msgstr "لا مستودعات برمجيات مُضمَّنة"
+
+#: src/gs-details-page.ui:507
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr "لا يتضمّن هذا التّطبيق مستودع برمجيّات. لن يُحدَّث بالإصدارات الجديدة."
+
+#: src/gs-details-page.ui:521
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "تُوفِّر توزيعتك هذه البرمجيّة بالفعل و يستحسن عدم استبدالها."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:534
+msgid "Software Repository Identified"
+msgstr "تعرّفتُ على مستودع برمجيّات"
+
+#: src/gs-details-page.ui:535
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"إضافة مستودع البرمجيّات هذا سيُعطيك وصولًا إلى برمجيّات و ترقيات إضافيّة."
+
+#: src/gs-details-page.ui:536
+msgid "Only use software repositories that you trust."
+msgstr "استخدم مستودعات البرمجيّات التي تثق بها فقط."
+
+#: src/gs-details-page.ui:552
+msgid "_Website"
+msgstr "م_وقع الوِب"
+
+#: src/gs-details-page.ui:567
+msgid "_Donate"
+msgstr "_تبرّع"
+
+#: src/gs-details-page.ui:701
+msgid "Localized in your Language"
+msgstr "مُترجم إلى العربية"
+
+#: src/gs-details-page.ui:713
+msgid "Documentation"
+msgstr "التوثيق"
+
+#: src/gs-details-page.ui:725
+msgid "Release Activity"
+msgstr "نشاط الإصدارات"
+
+#: src/gs-details-page.ui:737
+msgid "System Integration"
+msgstr "التكامل مع النظام"
+
+# هذه البرمجية معزولة
+#: src/gs-details-page.ui:749
+msgid "Sandboxed"
+msgstr "معزولة"
+
+#: src/gs-details-page.ui:774
+msgid "Version"
+msgstr "الإصدار"
+
+#: src/gs-details-page.ui:811
+msgid "Age Rating"
+msgstr "تصنيف العمر"
+
+#: src/gs-details-page.ui:849
+msgid "Updated"
+msgstr "حُدِّث في"
+
+#: src/gs-details-page.ui:884
+msgid "Category"
+msgstr "الفئة"
+
+#: src/gs-details-page.ui:922
+msgid "Installed Size"
+msgstr "حجم التنصيب"
+
+#: src/gs-details-page.ui:955
+msgid "Download Size"
+msgstr "حجم التنزيل"
+
+#: src/gs-details-page.ui:1021
+msgid "Developer"
+msgstr "المُطوِّر"
+
+#: src/gs-details-page.ui:1055
+msgid "License"
+msgstr "الرّخصة"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1075
+msgid "Free"
+msgstr "حرة"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1092
+msgid "Proprietary"
+msgstr "محتكرة"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1109 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "مجهولة"
+
+# يفترض فصل المفردتين في البرمجيّة، واحدة للصنف وواحدة لترويسة الجدول!
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1163 src/gs-installed-page.c:490
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "الإضافات"
+
+#: src/gs-details-page.ui:1176
+msgid "Selected add-ons will be installed with the application."
+msgstr "الإضافات المحدّدة ستُثبَّت مع البرمجيّة."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1219
+msgid "Reviews"
+msgstr "المراجعات"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1235
+msgid "_Write a Review"
+msgstr "ا_كتب مراجعة"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1257
+msgid "_Show More"
+msgstr "ا_عرض المزيد"
+
+#: src/gs-details-page.ui:1400
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"يعني هذا أنه يمكن تشغيل البرمجية، ونسخها، وتوزيعها، ودراستها وتعديلها بحرية "
+"تامة."
+
+#: src/gs-details-page.ui:1459
+msgid "Proprietary Software"
+msgstr "برمجية محتكرة"
+
+#: src/gs-details-page.ui:1476
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"يعني هذا أن البرمجية مملوكة لشخص أو شركة. غالبا ما توجد تقييدات على "
+"استخدامها ولا يمكن الوصول إلى النص البرمجي لها."
+
+#: src/gs-details-page.ui:1521
+msgid "Unknown Software License"
+msgstr "رخصة البرمجية مجهولة"
+
+#: src/gs-details-page.ui:1538
+msgid "The license terms of this software are unknown."
+msgstr "شروط الترخيص لهذه البرمجية مجهولة."
+
+#: src/gs-details-page.ui:1565
+msgid "The application was rated this way because it features:"
+msgstr "صنف التطبيق على هذا النحو لاحتوائه على:"
+
+#: src/gs-details-page.ui:1591
+msgid "No details were available for this rating."
+msgstr "لا ااوفر أي تفاصيل لهذا التصنيف."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr ""
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "فشل تحميل الملف"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "تغييرات غير محفوظة"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "سبق تحميل قائمة التطبيقات"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "ادمج المستندات"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "تجاهل التغييرات"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "افتح ملف AppStream"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "ا_فتح"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "ا_حفظ"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "فشل حفظ الملف"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr ""
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr ""
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr ""
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr ""
+
+# الجمع أفضل لعنوان البرمجيّة
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+#, fuzzy
+msgid "GNOME Software Banner Designer"
+msgstr "برمجيّات جنوم"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+#, fuzzy
+msgid "No Designs"
+msgstr "مصمّمات الواجهات"
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr ""
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr ""
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "الملخص"
+
+#: src/gs-editor.ui:382
+#, fuzzy
+msgid "Editor’s Pick"
+msgstr "انتقاءات المحرّرين"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:397
+#, fuzzy
+msgid "Category Featured"
+msgstr "مُختارة"
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr "تراجع"
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+#, fuzzy
+msgid "Banner Designer"
+msgstr "مصمّمات الواجهات"
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr ""
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr ""
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr ""
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr ""
+
+#: src/gs-editor.ui:670
+#, fuzzy
+msgid "Featured App"
+msgstr "مُختارة"
+
+#: src/gs-editor.ui:684
+#, fuzzy
+msgid "OS Upgrade"
+msgstr "تحديثات لنظام التّشغيل"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:147
+msgid " and "
+msgstr " و "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:150
+msgid ", "
+msgstr "، "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:176
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "الخطوط المتوفرة لنظام الكتابة %s"
+msgstr[1] "الخطوط المتوفرة لنظامي الكتابة %s"
+msgstr[2] "الخطوط المتوفرة لأنظمة الكتابة %s"
+msgstr[3] "الخطوط المتوفرة لأنظمة الكتابة %s"
+msgstr[4] "الخطوط المتوفرة لأنظمة الكتابة %s"
+msgstr[5] "الخطوط المتوفرة لأنظمة الكتابة %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:184
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "البرمجيات المتوفرة لدعم %s"
+msgstr[1] "البرمجيات المتوفرة لدعم %s"
+msgstr[2] "البرمجيات المتوفرة لدعم %s"
+msgstr[3] "البرمجيات المتوفرة لدعم %s"
+msgstr[4] "البرمجيات المتوفرة لدعم %s"
+msgstr[5] "البرمجيات المتوفرة لدعم %s"
+
+#: src/gs-extras-page.c:226
+msgid "Unable to Find Requested Software"
+msgstr "تعذّر إيجاد البرمجية المطلوبة"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "%s not found"
+msgstr "تعذّر إيجاد %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:332
+msgid "on the website"
+msgstr "في موقع الوِب"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "لا تطبيقات متوفرة توفّر الملف %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:343 src/gs-extras-page.c:354 src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"المعلومات عنْ %s وخيارات طريقة الحصول على التطبيقات الناقصة قد تجدها %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350 src/gs-extras-page.c:372
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "لا تطبيقات متوفرة لدعم %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:361
+#, c-format
+msgid "%s is not available."
+msgstr "%s غير متوفّر."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"المعلومات عنْ %s وخيارات طريقة الحصول على التطبيقات التي توفّر هذه الصيغة قد "
+"تجدها %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "لا خطوط متوفّرة لدعم نظام الكتابة %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "المعلومات عنْ %s وخيارات طريقة الحصول على الخطوط الإضافية قد تجدها %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394 lib/gs-plugin-loader.c:1510
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "لا إضافات مِرمازات متوفّرة للنُسق %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"المعلومات عنْ %s وخيارات طريقة الحصول على المرماز الذي يمكنه تشغيل هذه الصيغة "
+"قد تجدها %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "لا موارد بلازما متوفرة لدعم %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"المعلومات عنْ %s وخيارات طريقة الحصول على موارد بلازما الإضافية قد تجدها %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:416
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "لا مشغلات طابعات متوفرة ل‍%s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:420
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"المعلومات عنْ %s وخيارات طريقة الحصول على المشغلات الذي يمكنه تشغيل هذه "
+"الطابعة قد تجدها %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:464
+msgid "this website"
+msgstr "موقع الوِب"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:468
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"للأسف، تعذّر إيجاد %s الذي كنت تبحث عنه. من فضلك طالع %s لمعلومات أخرى."
+msgstr[1] ""
+"للأسف، تعذّر إيجاد %s الذي كنت تبحث عنه. من فضلك طالع %s لمعلومات أخرى."
+msgstr[2] ""
+"للأسف، تعذّر إيجاد %s التين كنت تبحث عنهما. من فضلك طالع %s لمعلومات أخرى."
+msgstr[3] ""
+"للأسف، تعذّر إيجاد %s التي كنت تبحث عنها. من فضلك طالع %s لمعلومات أخرى."
+msgstr[4] ""
+"للأسف، تعذّر إيجاد %s التي كنت تبحث عنها. من فضلك طالع %s لمعلومات أخرى."
+msgstr[5] ""
+"للأسف، تعذّر إيجاد %s التي كنت تبحث عنها. من فضلك طالع %s لمعلومات أخرى."
+
+#: src/gs-extras-page.c:539 src/gs-extras-page.c:595 src/gs-extras-page.c:634
+msgid "Failed to find any search results"
+msgstr "فشل إيجاد أي نتيجة بحث"
+
+#: src/gs-extras-page.c:828
+#, c-format
+msgid "%s file format"
+msgstr "صيغة الملفات %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "صفحة المِرمازات"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "مرحبًا"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "مرحبًا في «برمجيّات»"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"يتيح لك «برمجيّات» تنصيب كلّ البرمجيّات التي تحتاج، ومِن مكان واحد. طالع "
+"تزكياتنا، تصفّح الفئات أو ابحث عن التّطبيقات التي تريد."
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_فلنتسوّق"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "فراغات"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "المسافة بين الأولاد"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "مُزال"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "مُنصّب"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:95
+msgctxt "app status"
+msgid "Updated"
+msgstr "مُحدّث"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:101
+msgctxt "app status"
+msgid "Unknown"
+msgstr "مجهول"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "التأريخ"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:486
+msgid "System Applications"
+msgstr "تطبيقات النّظام"
+
+#: src/gs-installed-page.c:618
+msgid "Click on items to select them"
+msgstr "انقر عناصر لتحديدها"
+
+#: src/gs-installed-page.c:820
+msgid "Select"
+msgstr "حدّد"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "صفحة المنصّبة"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "أ_ضف إلى مجلّد…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "ا_نقل إلى مجلّد…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "أ_زل من المجلّد"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:75
+msgid "Software catalog is being downloaded"
+msgstr "ينزّل كتالوج البرمجيات"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:79
+msgid "Software catalog is being loaded"
+msgstr "يحمّل كتالوج البرمجيات"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "يحمّل الصفحة"
+
+#: src/gs-loading-page.ui:53
+msgid "Starting up…"
+msgstr "يبدأ…"
+
+#: src/gs-menus.ui:7
+msgid "_Software Repositories"
+msgstr "مستودعات البر_مجيات"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_عنْ"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "أ_نهِ"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "صفحة الرقابة"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "لا تقييمات لمراقبتها"
+
+#. add button
+#: src/gs-overview-page.c:330
+msgid "More…"
+msgstr "أخرى…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:496
+msgid "Recommended Audio & Video Applications"
+msgstr "التّطبيقات الصّوتيّة والمرئية المُزكّاة"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:501
+msgid "Recommended Games"
+msgstr "الألعاب المُزكّاة"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:506
+msgid "Recommended Graphics Applications"
+msgstr "التّطبيقات الرّسوميّة المُزكّاة"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:511
+msgid "Recommended Productivity Applications"
+msgstr "التّطبيقات الإنتاجيّة المُزكّاة"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:889 src/gs-repos-dialog.c:840
+msgid "Access additional software from selected third party sources."
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:893 src/gs-repos-dialog.c:844
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"بعض البرمجيات محتكرة تضع قيودًا على استخدام الكود المصدري و الوصول إليه."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:898 src/gs-repos-dialog.c:849
+msgid "Find out more…"
+msgstr "اطّلع على المزيد…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:906 src/gs-repos-dialog.c:252
+msgid "Enable"
+msgstr "فعّل"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "صفحة النّظرة العامّة"
+
+#: src/gs-overview-page.ui:49
+msgid "Enable Third Party Software Repositories?"
+msgstr "أأفعّل مستودعات برمجيات من طرف ثالث؟"
+
+#: src/gs-overview-page.ui:117
+msgid "Featured Application"
+msgstr "تطبيق مُختار"
+
+#: src/gs-overview-page.ui:150
+msgid "Categories"
+msgstr "الفئات"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:310
+msgid "Editor’s Picks"
+msgstr "اختيارات المحرّرين"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:348
+msgid "Recent Releases"
+msgstr "الإصدارات الحديثة"
+
+#: src/gs-overview-page.ui:435
+msgid "No Application Data Found"
+msgstr "لم يُعثر على بيانات التّطبيقات"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:489
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "أتريد حقًّا شراء %s؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:493
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "سينصب %s، وسيكلفك %s."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:506
+msgid "Purchase"
+msgstr "اشترِ"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:580
+#, c-format
+msgid "Prepare %s"
+msgstr "حضّر %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:715
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "أتريد حقا إزالة المصدر %s؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:719
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr ""
+"ستُزال كل التطبيقات من %s، وسيكون عليك إعادة تنصيب المصدر لاستعمالها ثانية."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:727
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "أتريد حقًّا إزالة %s؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:730
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s سيُزال، وعليك تنصيبه مرّة أخرى إن أردت استخدامه لاحقًا."
+
+#: lib/gs-plugin-loader.c:1513
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"المعلومات عنْ %s وخيارات طريقة الحصول على المِرماز الذي يمكنه تشغيل هذا النُسق "
+"موجودة في موقع الوِب."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:69 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (منصّبة)"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-popular-tile.c:205 src/gs-shell-search-provider.c:271
+#, c-format
+msgid "Source: %s"
+msgstr "المصدر: %s"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr "%2$f %1$s"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"بعض البرمجيات المنصّبة حاليا غير متوافقة مع %s. إن تابعت فسيُزال الآتي "
+"تلقائيا أثناء الترقية:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "برمجية غير متوافقة"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_تابع"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:110
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "لا برمجيّات منصّبة"
+msgstr[1] "برمجيّة واحدة منصّبة"
+msgstr[2] "برمجيّتان منصّبتان"
+msgstr[3] "%u برمجيّات منصّبة"
+msgstr[4] "%u برمجيّة منصّبة"
+msgstr[5] "%u برمجيّة منصّبة"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "لا إضافات منصّبة"
+msgstr[1] "إضافة واحدة منصّبة"
+msgstr[2] "إضافتان منصّبتان"
+msgstr[3] "%u إضافات منصّبة"
+msgstr[4] "%u إضافة منصّبة"
+msgstr[5] "%u إضافة منصّبة"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "لا برمجيّة"
+msgstr[1] "برمجيّة واحدة"
+msgstr[2] "برمجيّتان"
+msgstr[3] "%u برمجيّات"
+msgstr[4] "%u برمجيّة"
+msgstr[5] "%u برمجيّة"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:131
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "لا إضافات"
+msgstr[1] "إضافة واحدة"
+msgstr[2] "إضافتان"
+msgstr[3] "%u إضافات"
+msgstr[4] "%u إضافة"
+msgstr[5] "%u إضافة"
+
+# الصيغة الأولى والثانية لن تظهرا أبدا. باقي الصيغ تعتمد على تمييز معدود "%i add-on".
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:138
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "لا شيء منصّب"
+msgstr[1] "%s و%s منصّبة"
+msgstr[2] "%s و%s منصّبتان"
+msgstr[3] "%s و%s منصّبة"
+msgstr[4] "%s و%s منصّبة"
+msgstr[5] "%s و%s منصّبة"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:312
+#, c-format
+msgid "Remove “%s”?"
+msgstr "أتريد إزالة ”%s“؟"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:317
+#, c-format
+msgid "Disable “%s”?"
+msgstr "أتريد تعطيل ”%s“؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:321
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:339
+msgid "Disable"
+msgstr "عطّل"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:750
+msgid "the operating system"
+msgstr "نظام التشغيل"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:819 src/gs-repos-dialog.c:855
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:837
+msgid "Third Party Repositories"
+msgstr ""
+
+#: src/gs-repos-dialog.ui:82
+msgid "No Additional Repositories"
+msgstr "لا مستودعات إضافية"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:110
+msgid "_Enable"
+msgstr "_فعّل"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:119
+msgid "_Remove…"
+msgstr "أ_زل…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:124
+msgid "_Disable…"
+msgstr "ع_طّل…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:132
+msgid "Enabling"
+msgstr "يفعّل"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:144
+msgid "Disabling"
+msgstr "يعطيل"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:158
+msgid "Enabled"
+msgstr "مفعّل"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:164
+msgid "Disabled"
+msgstr "معطّل"
+
+#: src/gs-repo-row.ui:89
+msgid "URL"
+msgstr "المسار"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:95
+msgid "Hate it"
+msgstr "أكرهه"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:99
+msgid "Don’t like it"
+msgstr "لم يعجبني"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:103
+msgid "It’s OK"
+msgstr "لا بأس به"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:107
+msgid "Like it"
+msgstr "أعجبني"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:111
+msgid "Love it"
+msgstr "أحببته"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:133
+msgid "Please take more time writing the review"
+msgstr "من فضلك خُذ وقتك في كتابة المراجعة"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:137
+msgid "Please choose a star rating"
+msgstr "من فضلك اختر نجمة تقييمية"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:141
+msgid "The summary is too short"
+msgstr "الملخص قصير جدا"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:145
+msgid "The summary is too long"
+msgstr "الملخص طويل جدا"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:149
+msgid "The description is too short"
+msgstr "الوصف قصير جدا"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:153
+msgid "The description is too long"
+msgstr "الوصف طويل جدا"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "نشر مراجعة"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "ان_شر"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "التقييم"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "أعط للمراجعة ملخصا قصيرا، مثل: \"تطبيق رائع، سأنصح به الجميع\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "المراجعة"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "كيف ترى التطبيق؟ حاول إعطاء أسباب لرأيك."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "يمكنك الإبلاغ عن المراجعات المسيئة أو الوقحة."
+
+# الجملتان هذه والتي فوقها واحدة أساسا
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "ما إن تفعل ذلك، سيُخفى التقييم حتى يتحقق منه مدير."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "أأبلغ عن المراجعة؟"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "أبلغ"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "أكانت هذه المراجعة مفيدة؟"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "نعم"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "لا"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "لا أهتم"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "أبلغ..."
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "أزل..."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:314
+msgid "Screenshot not found"
+msgstr "لم يُعثر على لقطة شاشة"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:329
+msgid "Failed to load image"
+msgstr "فشل في تحميل الصّورة"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:462
+msgid "Screenshot size not found"
+msgstr "لم يُعثر على حجم لقطة شاشة"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:492
+msgid "Could not create cache"
+msgstr "تعذّر إنشاء الخبيئة"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:553
+msgid "Screenshot not valid"
+msgstr "لقطة الشّاشة غير صالحة"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:568
+msgid "Screenshot not available"
+msgstr "لقطة الشّاشة غير متوفّرة"
+
+#: src/gs-screenshot-image.c:621
+msgid "Screenshot"
+msgstr "لقطة شاشة"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:158
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "صفحة البحث"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "لم يُعثر على التّطبيق"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:834 src/gs-shell.c:839 src/gs-shell.c:854 src/gs-shell.c:858
+#, c-format
+msgid "“%s”"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:910
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:916
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:923
+#, fuzzy
+msgid "Unable to download updates"
+msgstr "فيما إذا كان يجب تنزيل تحديثات تلقائيا أم لا"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:928
+#, fuzzy
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "الوصول إلى الإنترنت كان مطلوبا ولكنه لم يكن متاحا."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:937
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:942
+#, fuzzy
+msgid "Unable to download updates: not enough disk space"
+msgstr "لم تكن هناك مساحة حرة في القرص."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:950
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:960
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:967
+#, fuzzy
+msgid "Unable to get list of updates"
+msgstr "اتّصل بالإنترنت لالتماس التّحديثات"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1006
+#, c-format
+msgid "Unable to purchase %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1013
+#, c-format
+msgid "Unable to purchase %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1020
+#, c-format
+msgid "Unable to purchase %s: no payment method setup"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1027
+#, c-format
+msgid "Unable to purchase %s: payment was declined"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1034
+#, c-format
+msgid "Unable to purchase %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1070
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1076
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1088
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1094
+#, fuzzy, c-format
+msgid "Unable to install %s as not supported"
+msgstr "الملف ليس مدعوما."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1101
+#, fuzzy
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "الوصول إلى الإنترنت كان مطلوبا ولكنه لم يكن متاحا."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1107
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1112
+#, fuzzy, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "لم تكن هناك مساحة حرة في القرص."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1120
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1127
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1134
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1147
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1151
+msgid "It is not possible to install software until this has been resolved."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1162
+#, fuzzy, c-format
+msgid "For more information, visit %s."
+msgstr "معلومات أخرى"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1171
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1180
+#, fuzzy, c-format
+msgid "Unable to install %s"
+msgstr "فعّل ونصّب"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1226
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1232
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1238
+#, fuzzy
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "الوصول إلى الإنترنت كان مطلوبا ولكنه لم يكن متاحا."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1246
+#, fuzzy, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "لم تكن هناك مساحة حرة في القرص."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1255
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1262
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1269
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1277
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1286
+#, fuzzy, c-format
+msgid "Unable to update %s"
+msgstr "فشل في التّحديث"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1331
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1336
+#, fuzzy, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "فشلت ترقية %s."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1343
+#, fuzzy
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr "الوصول إلى الإنترنت كان مطلوبا ولكنه لم يكن متاحا."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1351
+#, fuzzy, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "لم تكن هناك مساحة حرة في القرص."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1360
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1367
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1381
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1390
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1432
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1438
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1444
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1451
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1506
+#, fuzzy, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s منصّب الآن"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1513 src/gs-shell.c:1564 src/gs-shell.c:1605
+#: src/gs-shell.c:1653
+#, fuzzy
+msgid "Not enough disk space — free up some space and try again"
+msgstr "لم تبق مساحة حرة في القرص. من فضلك أفرغ بعض المساحة وحاول مجددا."
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1521 src/gs-shell.c:1572 src/gs-shell.c:1613
+#: src/gs-shell.c:1680
+#, fuzzy
+msgid "Sorry, something went wrong"
+msgstr "آسفون، هذا لم يعمل"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1556
+#, fuzzy
+msgid "Failed to install file: not supported"
+msgstr "الملف ليس مدعوما."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1560
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1597
+#, fuzzy
+msgid "Failed to install: not supported"
+msgstr "الملف ليس مدعوما."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1601
+msgid "Failed to install: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1647
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1662
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1667
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1674
+msgid "AC power is required"
+msgstr ""
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (يجري تنصيبها)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (تجري إزالتها)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:106
+msgid "_Remove All"
+msgstr "أ_زل الكل"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:131
+msgid "No update description available."
+msgstr "لا وصف متوفّر للتّحديث."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:226
+#, c-format
+msgid "Installed on %s"
+msgstr "ثُبِّت في %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:246
+msgid "Installed Updates"
+msgstr "التّحديثات المنصّبة"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:452
+msgid "Additions"
+msgstr "المضاف"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:456
+msgid "Removals"
+msgstr "المزال"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:460
+msgid "Updates"
+msgstr "المحدّث"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:464
+msgid "Downgrades"
+msgstr "المخفّض"
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "لا تحديثات منصّبة في النظام"
+
+#: src/gs-update-monitor.c:93
+msgid "Security Updates Pending"
+msgstr "هناك تحديثات أمنية منتظرة"
+
+#: src/gs-update-monitor.c:94
+msgid "It is recommended that you install important updates now"
+msgstr "من المستحسن تنصيب التحديثات المهمة الآن"
+
+#: src/gs-update-monitor.c:97
+msgid "Restart & Install"
+msgstr "أعد التشغيل ونصّب"
+
+#: src/gs-update-monitor.c:101
+msgid "Software Updates Available"
+msgstr "توجد تحديثات للبرمجيّات"
+
+#: src/gs-update-monitor.c:102
+msgid "Important OS and application updates are ready to be installed"
+msgstr "تحديثات التّطبيقات ونظام التّشغيل المهمّة جاهزة لتُثبَّت"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:105 src/gs-updates-page.c:750
+msgid "Not Now"
+msgstr "ليس الآن"
+
+#: src/gs-update-monitor.c:106
+msgid "View"
+msgstr "اعرض"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:260 src/gs-updates-page.ui:46
+msgid "Operating System Updates Unavailable"
+msgstr "تحديثات نظام التشغيل غير متاحة"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:262
+msgid "Upgrade to continue receiving security updates."
+msgstr "رقِّ لتستمر في الحصول على التحديثات الأمنية."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:316
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "توجد إصدارة جديدة من %s متوفرة للتنصيب"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:320
+msgid "Software Upgrade Available"
+msgstr "ترقية البرمجيات متوفرة"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:633
+msgid "Software Updates Failed"
+msgstr "فشلت تحديثات البرمجيّات"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:635
+msgid "An important OS update failed to be installed."
+msgstr "فشل تنصيب تحديث مهمّ لنظام التّشغيل."
+
+#: src/gs-update-monitor.c:636
+msgid "Show Details"
+msgstr "اعرض التّفاصيل"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:659
+msgid "System Upgrade Complete"
+msgstr "اكتملت ترقية النظان"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:664
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "أهلا في %s %s"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:670
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "لم تُنصّب أيّة تحديات للبرمجيّات"
+msgstr[1] "ثُبِّت تحديث واحد للبرمجيّات"
+msgstr[2] "ثُبِّت تحديثان للبرمجيّات"
+msgstr[3] "ثُبِّتت تحديثات للبرمجيّات"
+msgstr[4] "ثُبِّتت تحديثات للبرمجيّات"
+msgstr[5] "ثُبِّتت تحديثات للبرمجيّات"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:674
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "لم تنصّب أيّة تحديثات مهمّة لنظام التّشغيل."
+msgstr[1] "ثُبِّت تحديث واحد مهمّ لنظام التّشغيل."
+msgstr[2] "ثُبِّت تحديثان مهمّان لنظام التّشغيل."
+msgstr[3] "ثُبِّتت تحديثات مهمّة لنظام التّشغيل."
+msgstr[4] "ثُبِّتت تحديثات مهمّة لنظام التّشغيل."
+msgstr[5] "ثُبِّتت تحديثات مهمّة لنظام التّشغيل."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:685
+msgctxt "updates"
+msgid "Review"
+msgstr "راجع"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:734
+msgid "Failed To Update"
+msgstr "فشل في التّحديث"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:740
+msgid "The system was already up to date."
+msgstr "النظام محدث بالفعل."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:745
+msgid "The update was cancelled."
+msgstr "أُلغِيَ التّحديث."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:751
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"الوصول إلى الإنترنت كان مطلوبا ولكنه لم يكن متاحا. من فضلك تأكد من اتصال "
+"الحاسوب بالإنترنت وحاول مجددا."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:757
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"هناك مشاكل أمنية في هذا التحديث. من فضلك راجع موفّر البرمجية للمزيد من "
+"التفاصيل."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:763
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "لم تبق مساحة حرة في القرص. من فضلك أفرغ بعض المساحة وحاول مجددا."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:768
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"آسفون، تعذّر تنصيب التحديث. من فضلك انتظر تحديثا آخر وحاول مجددا. إن استمرت "
+"المشكلة راسل موفّر البرمجية."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:298
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:301
+msgid "%l:%M %p"
+msgstr "%Ol:%OM %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:307
+msgid "Yesterday, %R"
+msgstr "الأمس، %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:311
+msgid "Yesterday, %l:%M %p"
+msgstr "الأمس، %Ol:%OM %p"
+
+#: src/gs-updates-page.c:314
+msgid "Two days ago"
+msgstr "منذ يومين"
+
+#: src/gs-updates-page.c:316
+msgid "Three days ago"
+msgstr "منذ ثلاثة أيّام"
+
+#: src/gs-updates-page.c:318
+msgid "Four days ago"
+msgstr "منذ أربعة أيّام"
+
+#: src/gs-updates-page.c:320
+msgid "Five days ago"
+msgstr "منذ خمسة أيّام"
+
+#: src/gs-updates-page.c:322
+msgid "Six days ago"
+msgstr "منذ ستة أيّام"
+
+#: src/gs-updates-page.c:324
+msgid "One week ago"
+msgstr "منذ أسبوع"
+
+#: src/gs-updates-page.c:326
+msgid "Two weeks ago"
+msgstr "منذ أسبوعان"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:330
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:343
+msgid "Downloading new updates…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:347
+msgid "Looking for new updates…"
+msgstr "يلتمس التّحديثات..."
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:414
+msgid "Setting up updates…"
+msgstr "يُعدّ التّحديثات..."
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:415 src/gs-updates-page.c:422
+msgid "(This could take a while)"
+msgstr "(قد يستغرق هذا بعض الوقت)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:527
+#, c-format
+msgid "Last checked: %s"
+msgstr "آخر التماس: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:746
+msgid "Updates have been installed"
+msgstr "ثُبّتت التحديثات"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:748
+msgid "A restart is required for them to take effect."
+msgstr "إعادة التشغيل مطلوبة ليأخذ التحديث مفعوله."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:752
+msgid "Restart"
+msgstr "أعد التشغيل"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:822
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:825 src/gs-updates-page.c:835
+msgid "Restart & Update"
+msgstr "أعد التشغيل و حدّث"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:832
+msgid "Requires Restart"
+msgstr "يتطلب إعادة التشغيل"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:842
+msgid "Application Updates"
+msgstr "تحديثات التطبيقات"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:845
+msgid "Update All"
+msgstr "حدّث الكل"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:852
+msgid "Device Firmware"
+msgstr ""
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:1041
+msgid "_Restart & Update"
+msgstr "أعد التشغيل و _حدّث"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:1045
+msgid "U_pdate All"
+msgstr "ح_دّث الكل"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1132
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "لم تعد %s %s مدعومة."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1137
+msgid "Your OS is no longer supported."
+msgstr "لم يعد نظام تشغيلك مدعوما."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1142
+msgid "This means that it does not receive security updates."
+msgstr "هذا يعمي أنه لا يحصل على تحديثات أمنية."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1146
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "من المستحسن الترقية إلى إصدارة أحدث."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1403
+msgid "Charges may apply"
+msgstr "قد تُطبَّق الرّسوم"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1407
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "التماس التّحديثات أثناء الاتّصال بشبكة الجوّال قد يسبّب لك تحمّلًا للرّسوم."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1411
+msgid "Check Anyway"
+msgstr "التمس بأيّ حال"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1427
+msgid "No Network"
+msgstr "لا شبكة"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1431
+msgid "Internet access is required to check for updates."
+msgstr "الوصول بالإنترنت مطلوب لالتماس التّحديثات."
+
+#: src/gs-updates-page.c:1836
+msgid "Restart & _Install"
+msgstr "أعد التشغيل و_نصّب"
+
+#: src/gs-updates-page.c:1854
+msgid "Check for updates"
+msgstr "التمس التّحديثات"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "صفحة التّحديثات"
+
+#: src/gs-updates-page.ui:194
+msgid "Software is up to date"
+msgstr "البرمجيّات مُحدَّثة"
+
+#: src/gs-updates-page.ui:245
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "التماس التّحديثات عند الاتّصال بشبكة الجوّال قد يسبّب لك تحمّلًا للرّسوم"
+
+#: src/gs-updates-page.ui:257
+msgid "_Check Anyway"
+msgstr "ال_تمس بأيّ حال"
+
+#: src/gs-updates-page.ui:300
+msgid "Go online to check for updates"
+msgstr "اتّصل بالإنترنت لالتماس التّحديثات"
+
+#: src/gs-updates-page.ui:311
+msgid "_Network Settings"
+msgstr "إعدادات ال_شّبكة"
+
+#: src/gs-updates-page.ui:393
+msgid "Updates are automatically managed"
+msgstr "التحديثات مُدارة تلقائية"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "باتت %s %s متوفرة"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "ينزل %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "باتت %s %s جاهزة للتنصيب"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "ترقية رئيسية فيها مزايا جديدة وتحسينات."
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "ا_طلع على المزيد"
+
+#: src/gs-upgrade-banner.ui:98
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "من المستحسن أخذ نسخة احتياطية عن البيانات والملفات قبل الترقية."
+
+#: src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "ن_زّل"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "أضف، أزل أو حدّث البرمجيّات على هذا الحاسوب"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"تحديثات;ترقيات;مصادر;مستودعات;تفضيلات;تنصيب;إزالة;برنامج;برمجية;تطبيق;سوق;تحد"
+"يث;ترقية;مصدر;مستودع;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "صمم صورة البرمجيات المختارة لتطبيق برمجيات جنوم"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "إنشاء الصوتيات وتحريرها"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "مشغلات الموسيقى"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "المنقّحات"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "بيئات التطوير المتكاملة"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "الذّكاء الاصطناعيّ"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "الفلك"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "الكيمياء"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "اللّغات"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "الرّياضيّات"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "الروبوتات"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "الكل"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "مختارة"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "الإثارة"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "المغامرة"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "الممرّات"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "الكُتل"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "الألواح"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "الورق"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "المحاكيات"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "الأطفال"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "المنطق"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "لعب الأدوار"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "الرّياضة"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "الاستراتيجيّة"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "الرّسوميّات ثلاثيّة الأبعاد"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "التّصوير"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "المسح الضوئي"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "الرّسوميّات المتّجهيّة"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "العارضات"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "التّقويم"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "قواعد البيانات"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "الماليّة"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "معالِجات الكلمات"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "الخطوط"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "المِرمازات"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "مصادر الدخل"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "حزم اللغات"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "امتدادات الصدفة"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "التوطين"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "مشغلات العتاد"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "الدردشة"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "الأخبار"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "متصفّحات الوِب"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "محرّرات النّصوص"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "الكلّ"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "مُختارة"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "الفنّ"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "السير الذاتية"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "القصص المصوّرة"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "الخيال"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "الصحة"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "التاريخ"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "نمط الحياة"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "السياسة"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "الرّياضة"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "الصوتيات والمرئيات"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "أدوات التّطوير"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "التّعليم و العلوم"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "الألعاب"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "الرسومات والتّصوير"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "الإنتاجية"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "التواصل والأخبار"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "المراجع"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "الأدوات"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:71
+msgid "OS Updates"
+msgstr "تحديثات لنظام التّشغيل"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:76
+msgid "Includes performance, stability and security improvements."
+msgstr "يتضمّن تحسينات الأداء، والثّبات والأمن."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+#, fuzzy
+msgid "Downloading featured images…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:112
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:114
+#, fuzzy
+msgid "Failed to parse command line arguments"
+msgstr "فشل في تحميل الصّورة"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:121
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:128
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:136
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:143
+#, fuzzy
+msgid "Failed to copy"
+msgstr "فشل في التّحديث"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:243
+#, fuzzy
+msgid "Downloading extra metadata files…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+#, fuzzy
+msgid "Downloading upgrade information…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:311
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:607
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:2781
+#, fuzzy
+msgid "Getting runtime source…"
+msgstr "يُعدّ التّحديثات..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:695
+#, fuzzy
+msgid "Downloading firmware update signature…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:736
+#, fuzzy
+msgid "Downloading firmware update metadata…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:826
+#, fuzzy
+msgid "Downloading firmware update…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr ""
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+#, fuzzy
+msgid "Downloading application ratings…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:392
+#, fuzzy
+msgid "GNOME Shell Extensions Repository"
+msgstr "امتدادات الصدفة"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:704
+#, fuzzy
+msgid "Downloading shell extension metadata…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:205
+msgid "Snap Store"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+#, fuzzy
+msgid "Downloading application page…"
+msgstr "ينزّل تحديثات جديدة..."
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr ""
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr ""
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "قائمة المصادر الإضافية التي فُعّلت سابقا"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr "قائمة المصادر التي فُعّلت سابقا عند تثبيت تطبيقات طرف ثالث."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "اعرض البرمجيات غير الحرة في نتائج البحث"
+
+#~| msgid "The list of extra sources that have been previously enabled"
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "قائمة المصادر غير الحرة التي يمكن تفعيلها اختياريًا"
+
+#~ msgid "About Software"
+#~ msgstr "عنْ «برمجيّات»"
+
+#~ msgid "Total"
+#~ msgstr "المجموع"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "تعذّر إيجاد '%s'"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "يتيح الوصول لبرمجياتت إضافية، بما فيها متصفحات الوب و الألعاب."
+
+#~| msgid "Enable Third-Party Software Source?"
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "أأفعّل مصادر البرمجيات المحتكرة؟"
+
+#~ msgid "_Install All"
+#~ msgstr "_ثبّتها كلها"
+
+#~ msgid "Other Updates"
+#~ msgstr "تحديثات أخرى"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "لا تطبيقات أو إضافات مثبّتة، ولكن قد تكون هناك برمجيات أخرى كذلك"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "تضع عادة قيودًا على استخدام الكود المصدري و الوصول إليه."
+
+#~| msgid "Proprietary Software"
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "مصادر البرمجيات المحتكرة"
+
+#~ msgid "Remove Source"
+#~ msgstr "أزل المصدر"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "يمكن تنزيل مصادر البرمجيات من الإنترنت، فتُعطيك وصولًا إلى برمجيّات أخرى لا "
+#~ "توفّرها %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr "إزالة مصدر يزيل أيضًا أيّة برمجيّة ثبّتّها منه."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "لا برمجيّات مثبّتة من هذا المصدر"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "مُثبّت من هذا المصدر"
+
+#~ msgid "Source Details"
+#~ msgstr "تفاصيل المصدر"
+
+#~ msgid "Last Checked"
+#~ msgstr "آخر التماس"
+
+#~ msgid "Added"
+#~ msgstr "أُضيف في"
+
+#~ msgid "Website"
+#~ msgstr "موقع الوِب"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "فشل تثبيت %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "فشلت إزالة %s."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "من فضلك تأكد من اتصال الحاسوب بالإنترنت وحاول مجددا."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "من فضلك أفرغ بعض المساحة وحاول مجددا."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "إن استمرت المشكلة راسل موفّر البرمجية."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "تفاعل اللاعبين مع بعض في إعداد بدون ميزة دردشة"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "بلا"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "الكلّ"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "الفلك"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "الكيمياء"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "الرّياضيّات"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "الكل"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "مختارة"
+
+#~ msgid "Science"
+#~ msgstr "العلوم"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "مصادر البرمجيّات تُعطيك وصولًا إلى برمجيّات إضافيّة."
+
+#~ msgid "3rd party"
+#~ msgstr "من طرف ثالث"
+
+#~ msgid "web app"
+#~ msgstr "تطبيق وِب"
+
+#~ msgid "nonfree"
+#~ msgstr "ليس حرّا"
+
+#~ msgid "shell extension"
+#~ msgstr "امتداد صدفة"
+
+# no need be translatable
+#~ msgid "page0"
+#~ msgstr "الصفحة0"
+
+# no need be translatable
+#~ msgid "page1"
+#~ msgstr "الصفحة1"
+
+#~ msgid "_Installing"
+#~ msgstr "ي_ثبّت"
+
+#~ msgid "_Removing"
+#~ msgstr "يُ_زال"
+
+#~ msgid " or "
+#~ msgstr " أو "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "مجهولة"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "هذه البرمجية من طرف ثالث."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr "هذه البرمجية من طرف ثالث ولربما يكون فيها ما هو غير حر."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "قد يكون في هذه البرمجية ما هو غير حر."
+
+# هذا وسم في صفحة التطبيق
+#~| msgid "nonfree"
+#~ msgid "non-free"
+#~ msgstr "غير حر"
+
+#~ msgid "One Star"
+#~ msgstr "نجمة واحدة"
+
+#~ msgid "Two Stars"
+#~ msgstr "نجمتان"
+
+#~ msgid "Three Stars"
+#~ msgstr "ثلاث نجوم"
+
+#~ msgid "Four Stars"
+#~ msgstr "أربع نجوم"
+
+#~ msgid "Five Stars"
+#~ msgstr "خمس نجوم"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "لم يكتمل التّحديث السّابق."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "تعذّر تثبيت التحديث، أغلب الظن أنها مشكلة مع التحديث نفسه. من فضلك انتظر "
+#~ "تحديثا آخر وحاول مجددا."
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "يحسب…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "مجهول"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "تطبيق إنترنت فقط"
+
+#~ msgid "_History"
+#~ msgstr "ال_تّأريخ"
+
+#~ msgid "Size"
+#~ msgstr "الحجم"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "التّطبيقات المكتبيّة المُزكّاة"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "لم يُعثر على بيانات AppStream"
+
+#~ msgid "Audio"
+#~ msgstr "الصّوت"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "قواعد البيانات"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "حرق الأقراص"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "هواة المذياع"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "المازجات"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "الموسيقى"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "المسجّلات"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "المتسلسلات"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "الموالفات"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "البناء"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "قواعد البيانات"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "بيئات التّطوير المتكاملة"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "التّعرفة"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "التحكّم بالمراجعات"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "التّرجمة"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "تطوير الوِب"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "الأحياء"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "علوم الحاسوب"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "التشييد"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "التّصوير البيانيّ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "الاقتصاد"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "الكهرباء"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "الإلكترونيّات"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "الهندسة"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "الجيولوجيا"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "علوم الأرض"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "التّاريخ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "الإنسانيّات"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "معالجة الصور"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "الأدب"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "الخرائط"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Medical"
+#~ msgstr "الدواء"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "الموسيقى"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "المحلّلات الرّقميّة"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "الحوسبة المتوازية"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "الفيزياء"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "الروحانيّات"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "إطلاق النّار"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "المحاكاة"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "الرّياضة"
+
+#~ msgid "Graphics"
+#~ msgstr "الرّسوميّات"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "الرّسوميّات ثنائيّة الأبعاد"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "التّعرّف الضّوئيّ على المحارف"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "النّشر"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "الرّسوميّات التّسامتيّة"
+
+#~ msgid "Internet"
+#~ msgstr "الإنترنت"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "الطلب الهاتفيّ"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "البريد الإلكترونيّ"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "التّغذيات"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "نقل الملفّات"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "هواة المذياع"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "التّراسل الفوريّ"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "عملاء IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "المِرقابات"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "ندّ إلى ندّ (P2P)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "الوصول البعيد"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "الهاتف"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "تطوير الوِب"
+
+#~ msgid "Office"
+#~ msgstr "المكتب"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "الرّسم البيانيّ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "إدارة المتراسلين"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "القواميس"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "البريد الإلكترونيّ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "الرّسوم البيانيّة الانسيابيّة"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "المساعدات الرّقميّة الشّخصيّة"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "التّصوير"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "العروض التقديميّة"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "إدارة المشاريع"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "النّشر"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "الجداول الممتدّة"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "العارضات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "الفنّ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "الذّكاء الاصطناعيّ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "الفلك"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "الأحياء"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "الكيمياء"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "علوم الحاسوب"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "التشييد"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "التّصوير البيانيّ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "الاقتصاد"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "الكهرباء"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "الإلكترونيّات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "الهندسة"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "الجغرافيا"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "الجيولوجيا"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "علوم الأرض"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "التّاريخ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "الإنسانيّات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "معالجة الصّور"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "اللّغات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "الأدب"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "الخرائط"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "الرّياضيّات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "الدّواء"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "المحلّلات الرّقميّة"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "الحوسبة المتوازية"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "الفيزياء"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "الرّوبوتات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "الرّوحانيّات"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "الرّياضة"
+
+#~ msgid "System"
+#~ msgstr "النّظام"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "المحاكيات"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "مدراء ملفّات"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File System"
+#~ msgstr "نظام الملفّات"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "أدوات الملفّات"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "المِرقابات"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "الأمن"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "محاكيات الطّرفيّة"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "الإتاحة"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "الأرشفة"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "الآلات الحاسبة"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "السّاعات"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "الضغط"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "أدوات الملفّات"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "الخرائط"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "الرّوحانيّات"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "أدوات الهاتف"
+
+#~ msgid "Video"
+#~ msgstr "الفيديو"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "التّحرير"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "قواعد البيانات"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "حرق الأقراص"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "المشغّلات"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "المسجّلات"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "التلفزة"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "ادخُل وضع خدمة GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "أحد التّحديثات لم يكن مُوقّعًا كما ينبغي."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "تعذّر إكمال التّحديث."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "طُلب تحديث دون اتّصال لكن لم تحتج أيّ حزم تحديثًا."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "لم تبق أيّ مساحة على القرص."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "فشل تثبيت تحديث كما ينبغي."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "فشل التّحديث دون اتّصال بصورة غير مُتوقّعة."
+
+#~ msgid "Checking for updates…"
+#~ msgstr "يلتمس التّحديثات..."
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "لا تطبيق و %i من الملحقات مثبتة"
+#~ msgstr[1] "تطبيق واحد (%i) و %i من الملحقات مثبتة"
+#~ msgstr[2] "تطبيقان (%i) و %i من الملحقات مثبتة"
+#~ msgstr[3] "%i تطبيقات و %i من الملحقات مثبتة"
+#~ msgstr[4] "%i تطبيقًا و %i من الملحقات مثبتة"
+#~ msgstr[5] "%i تطبيق و %i من الملحقات مثبتة"
+
+#~ msgid "No sources found."
+#~ msgstr "لم يُعثر على مصادر."
+
+#~ msgid "OK"
+#~ msgstr "حسنًا"
diff --git a/po/as.po b/po/as.po
new file mode 100644
index 0000000..8f0dee0
--- /dev/null
+++ b/po/as.po
@@ -0,0 +1,2007 @@
+# Assamese translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Nilamdyuti Goswami <ngoswami@redhat.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-09-06 07:37+0000\n"
+"PO-Revision-Date: 2014-09-06 18:06+0530\n"
+"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
+"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
+"Language: as\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "Application manager for GNOME"
+msgstr "GNOME ৰ বাবে এপ্লিকেচন ব্যৱস্থাপক"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"চফ্টৱেৰে আপোনাক নতুন এপ্লিকেচনসমূহ আৰু চিস্টেম স্প্ৰসাৰনসমূহ সন্ধান কৰি "
+"ইনস্টল কৰাৰ আৰু "
+"স্থায়ী ইনস্টল্ড এপ্লিকেচনসমূহ আতৰোৱাৰ সুবিধা দিয়ে।"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME চফ্টৱেৰে উপযোগী বিৱৰণসমূহ আৰু প্ৰতি এপ্লিকেচন একাধিক স্ক্ৰিনশ্বটৰ সৈতে "
+"জনপ্ৰিয় "
+"এপ্লিকেচনসমূহ দেখুৱায়। এপ্লিকেচনসমূহক বিভাগসমূহৰ তালিকা ব্ৰাউছ কৰি অথবা "
+"সন্ধান কৰি "
+"বিচাৰি পোৱা যাব। ই লগতে এটা অফলাইন আপডেইট ব্যৱহাৰ কৰি আপোনাক চিস্টেম আপডেইট "
+"কৰাৰ সুবিধা দিয়ে।"
+
+#: ../src/app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr "এপ্লিকেচন ফোল্ডাৰলৈ যোগ কৰক"
+
+#: ../src/app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:337
+#: ../src/gs-shell-details.c:225 ../src/gs-shell-installed.c:603
+msgid "_Cancel"
+msgstr "বাতিল কৰক (_C)"
+
+#: ../src/app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:342
+msgid "_Add"
+msgstr "যোগ কৰক (_A)"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#: ../src/app-tile.ui.h:1 ../src/gs-app-addon-row.c:103
+#: ../src/gs-app-tile.c:72 ../src/gs-app-tile.c:75 ../src/gs-feature-tile.c:66
+#: ../src/gs-popular-tile.c:73 ../src/gs-popular-tile.c:76
+#: ../src/popular-tile.ui.h:1
+msgid "Installed"
+msgstr "ইনস্টল্ড"
+
+#. TRANSLATORS: this is the application name
+#. set the window title back to default
+#. TRANSLATORS: this is the main window title
+#: ../src/org.gnome.Software.desktop.in.h:1 ../src/gnome-software.ui.h:3
+#: ../src/gs-application.c:265 ../src/gs-shell.c:156
+msgid "Software"
+msgstr "চফ্টৱেৰ"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr "এই কমপিউটাৰৰ চফ্টৱেৰ যোগ কৰক, আতৰাওক অথবা আপডেইট কৰক"
+
+#: ../src/org.gnome.Software.desktop.in.h:3
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"আপডেইটসমূহ;উন্নয়ন;উৎসসমূহ;ভঁৰালসমূহ;পছন্দসমূহ;ইনস্টল;আনইনস্টল;প্ৰগ্ৰাম;চফ্টৱেৰ"
+";এপ;সংৰক্ষণ;"
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr "চফ্টৱেৰ ইনস্টল"
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr "চিস্টেমত নিৰ্বাচিত চফ্টৱেৰ ইনস্টল কৰক"
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr "সকলো বাছক"
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr "একো নাবাছিব"
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-sources-dialog.ui.h:2
+#: ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr "উভতি যাওক"
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "সকলো (_A)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "ইনস্টল্ড (_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "আপডেইটসমূহ (_U)"
+
+#: ../src/gnome-software.ui.h:11
+msgid "Restart & _Install"
+msgstr "পুনাৰম্ভ কৰক আৰু ইনস্টল কৰক (_I)"
+
+#: ../src/gnome-software.ui.h:12
+msgid "Select"
+msgstr "বাছক"
+
+#: ../src/gnome-software.ui.h:13
+msgid "Check for updates"
+msgstr "আপডেইসমূহৰ বাবে নিৰীক্ষণ কৰক"
+
+#: ../src/gs-app-folder-dialog.c:325
+msgid "Folder Name"
+msgstr "ফোল্ডাৰৰ নাম"
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:263
+msgid "About Software"
+msgstr "চফ্টৱেৰৰ বিষয়ে"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:268
+msgid "A nice way to manage the software on your system."
+msgstr "আপোনাৰ চিস্টেমৰ চফ্টৱেৰ ব্যৱস্থাপনা কৰাৰ এটা ধূনীয়া পদ্ধতি।"
+
+#: ../src/gs-application.c:272
+msgid "translator-credits"
+msgstr "নীলমদ্যুতি গোস্বামী (ngoswami@redhat.com)"
+
+#: ../src/gs-application.c:531
+msgid "Enter GApplication service mode"
+msgstr "GApplication সেৱা অৱস্থাত যাওক"
+
+#. TRANSLATORS: this is a command line option
+#: ../src/gs-application.c:534
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "আৰম্ভণি অৱস্থা: ‘আপডেইটসমূহ’, ‘আপডেইটেড’, ‘ইনস্টল্ড’ অথবা ‘অভাৰভিউ’"
+
+#: ../src/gs-application.c:534
+msgid "MODE"
+msgstr "অৱস্থা"
+
+#: ../src/gs-application.c:536
+msgid "Search for applications"
+msgstr "এপ্লিকেচনসমূহ সন্ধান কৰক"
+
+#: ../src/gs-application.c:536
+msgid "SEARCH"
+msgstr "সন্ধান কৰক"
+
+#: ../src/gs-application.c:538
+msgid "Show application details"
+msgstr "এপ্লিকেচনৰ বিৱৰণসমূহ দেখুৱাওক"
+
+#: ../src/gs-application.c:538
+msgid "ID"
+msgstr "ID"
+
+#: ../src/gs-application.c:540
+msgid "Open a local package file"
+msgstr "এটা স্থানীয় পেকেইজ ফাইল খোলক"
+
+#: ../src/gs-application.c:540
+msgid "FILENAME"
+msgstr "ফাইলনাম"
+
+#: ../src/gs-application.c:542
+msgid "Show verbose debugging information"
+msgstr "ভাৰবৌছ ডিবাগিং তথ্য দেখুৱাওক"
+
+#: ../src/gs-application.c:544
+msgid "Show profiling information for the service"
+msgstr "সেৱাৰ বাবে আলেখ্য তথ্য দেখুৱাওক"
+
+#: ../src/gs-application.c:546
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream ৰ পৰিৱৰ্তে স্থানীয় ফাইল উৎসসমূহ পছন্দ"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-addon-row.c:98 ../src/gs-app-row.c:201
+#: ../src/gs-shell-details.ui.h:4
+msgid "Pending"
+msgstr "বাকি আছে"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being installing
+#: ../src/gs-app-addon-row.c:107 ../src/gs-app-row.c:228
+#: ../src/gs-app-tile.c:81 ../src/gs-app-tile.c:84
+msgid "Installing"
+msgstr "ইনস্টল কৰা হৈছে"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being removed
+#: ../src/gs-app-addon-row.c:111 ../src/gs-app-row.c:237
+#: ../src/gs-app-tile.c:90 ../src/gs-app-tile.c:93
+msgid "Removing"
+msgstr "আতৰোৱা হৈছে"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-row.c:191
+msgid "Visit website"
+msgstr "ৱেবছাইট চাওক"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-row.c:198
+msgid "Cancel"
+msgstr "বাতিল কৰক"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-row.c:208
+msgid "Install"
+msgstr "ইনস্টল কৰক"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-row.c:217 ../src/gs-shell-details.c:1128
+#: ../src/gs-shell-installed.c:182 ../src/gs-shell-search.c:164
+msgid "Remove"
+msgstr "আতৰাওক"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user there is an update for the installed
+#. * application available
+#: ../src/gs-app-tile.c:99 ../src/gs-app-tile.c:103
+#: ../src/gs-feature-tile.c:71 ../src/gs-popular-tile.c:82
+#: ../src/gs-popular-tile.c:86
+msgid "Updates"
+msgstr "আপডেইটসমূহ"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:207
+msgid "Other"
+msgstr "অন্য"
+
+#. vim: set noexpandtab:
+#: ../src/gs-first-run-dialog.ui.h:1
+msgid "Welcome"
+msgstr "স্বাগতম"
+
+#: ../src/gs-first-run-dialog.ui.h:2
+msgid "Welcome to Software"
+msgstr "চফ্টৱেৰলৈ স্বাগতম"
+
+#: ../src/gs-first-run-dialog.ui.h:3
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"চফ্টৱেৰে আপোনাক আপোনাৰ প্ৰয়োজনৰ সকলো চফ্টৱেৰ, এটা স্থানৰ পৰা ইনস্টল কৰাৰ "
+"সুবিধা "
+"দিয়ে। আমাৰ পৰামৰ্শ চাওক, বিভাগসমূহ ব্ৰাউছ কৰক, অথবা আপুনি বিচৰা "
+"এপ্লিকেচনসমূহৰ "
+"বাবে সন্ধান কৰক।"
+
+#: ../src/gs-first-run-dialog.ui.h:4
+msgid "_Let’s Go Shopping"
+msgstr "বোলক কিনিব যাও (_L)"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "আতৰোৱা হৈছে"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: ../src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "ইনস্টল্ড"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gs-history-dialog.c:93
+msgctxt "app status"
+msgid "Updated"
+msgstr "আপডেইটেড"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: ../src/gs-history-dialog.c:99
+msgctxt "app status"
+msgid "Unknown"
+msgstr "অজ্ঞাত"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "ইতিহাস"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-offline-updates.c:254
+msgid "Failed To Update"
+msgstr "আপডেইট কৰিবলে ব্যৰ্থ"
+
+#. TRANSLATORS: the transaction could not be completed
+#. * as a previous transaction was unfinished
+#: ../src/gs-offline-updates.c:260
+msgid "A previous update was unfinished."
+msgstr "এটা পূৰ্বৱৰ্তী আপডেইট অসম্পূৰ্ণ আছিল।"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-offline-updates.c:270
+msgid "Network access was required but not available."
+msgstr "নেটৱৰ্ক অভিগমৰ প্ৰয়োজন আছিল কিন্তু উপলব্ধ নাছিল।"
+
+#. TRANSLATORS: if the package is not signed correctly
+#. *
+#: ../src/gs-offline-updates.c:279
+msgid "An update was not signed in the correct way."
+msgstr "এটা আপডেইট সঠিকভাৱে স্বাক্ষৰ কৰা হোৱা নাছিল।"
+
+#. TRANSLATORS: the transaction failed in a way the user
+#. * probably cannot comprehend. Package management systems
+#. * really are teh suck.
+#: ../src/gs-offline-updates.c:289
+msgid "The update could not be completed."
+msgstr "আপডেইট সম্পূৰ্ণ কৰিব পৰা নগল।"
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-offline-updates.c:294
+msgid "The update was cancelled."
+msgstr "আপডেইট বাতিল কৰা হৈছিল।"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-offline-updates.c:300
+msgid "An offline update was requested but no packages required updating."
+msgstr ""
+"এটা অফলাইন আপডেইটৰ অনুৰোধ কৰা হৈছিল কিন্তু পেকেইজৰ আপডেইটৰ প্ৰয়োজন নাছিল।"
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-offline-updates.c:304
+msgid "No space was left on the drive."
+msgstr "ডিভাইচত কোনো স্থান অৱশিষ্ট নাছিল।"
+
+#. TRANSLATORS: the update process failed in a general
+#. * way, usually this message will come from source distros
+#. * like gentoo
+#: ../src/gs-offline-updates.c:312
+msgid "An update failed to install correctly."
+msgstr "এটা আপডেইট সঠিকভাৱে ইনস্টল হবলে ব্যৰ্থ হল।"
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-offline-updates.c:317
+msgid "The offline update failed in an unexpected way."
+msgstr "অফলাইন আপডেইট এটা অপ্ৰত্যাশিত পদ্ধতিত ব্যৰ্থ হল।"
+
+#. TRANSLATORS: these are geeky messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-offline-updates.c:326
+msgid "Detailed errors from the package manager follow:"
+msgstr "পেকেইজ ব্যৱস্থাপকৰ পৰা বিৱৰিত ত্ৰুটি অনুকৰণ কৰে:"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:900
+msgid "OS Updates"
+msgstr "OS আপডেইটসমূহ"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: ../src/gs-plugin-loader.c:905
+msgid "Includes performance, stability and security improvements."
+msgstr "পৰিৱেশন, স্থিৰতা আৰু সুৰক্ষা উন্নয়নসমূহ অন্তৰ্ভুক্ত কৰে।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-plugin-loader.c:1503
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s বিন্যাসৰ বাবে কোনো এডঅন কডেক উপলব্ধ নাই।"
+
+#: ../src/gs-plugin-loader.c:1506
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"%s ৰ বিষয়ে তথ্য, লগতে এই বিন্যাস চলাব পৰা এটা কডেক কেনেকৈ প্ৰাপ্ত কৰিব তাৰ "
+"বিষয়ে "
+"বিকল্পসমূহ ৱেবছাইটত পাব।"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:208
+msgid "Screenshot not found"
+msgstr "স্ক্ৰিনশ্বট পোৱা নগল"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: ../src/gs-screenshot-image.c:226
+msgid "Failed to load image"
+msgstr "ছবি ল'ড কৰিবলে ব্যৰ্থ"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:354
+msgid "Screenshot size not found"
+msgstr "স্ক্ৰিনশ্বট আকাৰ পোৱা নগল"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:373
+msgid "Could not create cache"
+msgstr "ক্যাশ সৃষ্টি কৰিব পৰা নগল"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:390
+msgid "Screenshot not valid"
+msgstr "স্ক্ৰিনশ্বট বৈধ নহয়"
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:396
+msgid "Screenshot not available"
+msgstr "স্ক্ৰিনশ্বট উপলব্ধ নহয়"
+
+#: ../src/gs-screenshot-image.c:454
+msgid "Screenshot"
+msgstr "স্ক্ৰিনশ্বট"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#: ../src/gs-shell-details.c:175 ../src/gs-shell-details.ui.h:2
+msgid "_Install"
+msgstr "ইনস্টল কৰক (_I)"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:186
+msgid "_Installing"
+msgstr "ইনস্টল কৰা হৈছে (_I)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: ../src/gs-shell-details.c:212 ../src/gs-shell-details.ui.h:3
+msgid "_Remove"
+msgstr "আতৰাওক (_R)"
+
+#. TRANSLATORS: button text in the header when an application can be installed
+#: ../src/gs-shell-details.c:219
+msgid "_Removing"
+msgstr "আতৰোৱা হৈছে (_R)"
+
+#. TRANSLATORS: this is where the licence is not known
+#: ../src/gs-shell-details.c:584
+msgctxt "license"
+msgid "Unknown"
+msgstr "অজ্ঞাত"
+
+#. TRANSLATORS: this is where the version is not known
+#: ../src/gs-shell-details.c:597
+msgctxt "version"
+msgid "Unknown"
+msgstr "অজ্ঞাত"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:603
+msgctxt "size"
+msgid "Calculating…"
+msgstr "গণনা কৰা হৈছে…"
+
+#. TRANSLATORS: this is where the size is not known
+#: ../src/gs-shell-details.c:606
+msgctxt "size"
+msgid "Unknown"
+msgstr "অজ্ঞাত"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:618
+msgctxt "updated"
+msgid "Never"
+msgstr "কেতিয়াও নহয়"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined menu category
+#: ../src/gs-shell-details.c:633
+msgctxt "menu category"
+msgid "None"
+msgstr "কোনো নহয়"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-shell-details.c:643
+msgctxt "origin"
+msgid "Unknown"
+msgstr "অজ্ঞাত"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-shell-details.c:1113 ../src/gs-shell-installed.c:167
+#: ../src/gs-shell-search.c:149
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "আপুনি %s ক আতৰাবলৈ নিশ্চিত নে?"
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-shell-details.c:1125 ../src/gs-shell-installed.c:179
+#: ../src/gs-shell-search.c:161
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s ক আতৰোৱা হব, আৰু আপুনি ইয়াক পুনৰ ব্যৱহাৰ কৰিবলে ইয়াক ইনস্টল কৰিব লাগিব।"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-details.ui.h:1
+msgid "Details page"
+msgstr "বিৱৰণসমূহ পৃষ্ঠা"
+
+#: ../src/gs-shell-details.ui.h:5
+msgid "Software Source Included"
+msgstr "চফ্টৱেৰ উৎস অন্তৰ্ভুক্ত"
+
+#: ../src/gs-shell-details.ui.h:6
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+"এই এপ্লিকেচনে এটা চফ্টৱেৰ উৎস অন্তৰ্ভুক্ত কৰে যি আপডেইটসমূহ, লগতে অন্য "
+"চফ্টৱেৰলৈ "
+"অভিগম প্ৰদান কৰে।"
+
+#: ../src/gs-shell-details.ui.h:7
+msgid "No Software Source Included"
+msgstr "কোনো চফ্টৱেৰ উৎস অন্তৰ্ভুক্ত নহয়"
+
+#: ../src/gs-shell-details.ui.h:8
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr ""
+"এই এপ্লিকেচনে এটা চফ্টৱেৰ উৎস অন্তৰ্ভুক্ত নকৰে। ইয়াক নতুন সংস্কৰণসমূহৰ সৈতে "
+"আপডেইট "
+"কৰা নহব।"
+
+#: ../src/gs-shell-details.ui.h:9
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"এই চফ্টৱেৰক আপোনাৰ বিতৰন দ্বাৰা ইতিমধ্যে প্ৰদান কৰা হৈছে আৰু প্ৰতিস্থাপন কৰা "
+"হব "
+"নালাগে।"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: ../src/gs-shell-details.ui.h:11
+msgid "Software Source Identified"
+msgstr "চফ্টৱেৰ উৎস চিনাক্ত কৰা হৈছে"
+
+#: ../src/gs-shell-details.ui.h:12
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr "এই চফ্টৱেৰ যোগ কৰিলে আপুনি অতিৰিক্ত চফ্টৱেৰ আৰু উন্নয়নসমূহ পাব।"
+
+#: ../src/gs-shell-details.ui.h:13
+msgid "Only use software sources that you trust."
+msgstr "কেৱলক আপুনি ভৰষা কৰা চফ্টৱেৰ উৎসসমূহ ব্যৱহাৰ কৰক।"
+
+#: ../src/gs-shell-details.ui.h:14
+msgid "Internet Only Application"
+msgstr "কেৱল ইন্টাৰনেট এপ্লিকেচন"
+
+#: ../src/gs-shell-details.ui.h:15
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"এই এপ্লিকেচনক কেৱল এটা সক্ৰিয় ইন্টাৰনেট সংযোগ থাকোতে ব্যৱহাৰ কৰিব পাৰি।"
+
+#: ../src/gs-shell-details.ui.h:16
+msgid "_Website"
+msgstr "ৱেবছাইট (_W)"
+
+#: ../src/gs-shell-details.ui.h:17
+msgid "_History"
+msgstr "ইতিহাস (_H)"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gs-shell-details.ui.h:19
+msgid "_Launch"
+msgstr "আৰম্ভ কৰক (_L)"
+
+#: ../src/gs-shell-details.ui.h:20
+msgid "Details"
+msgstr "বিৱৰণসমূহ"
+
+#: ../src/gs-shell-details.ui.h:21 ../src/gs-sources-dialog.ui.h:9
+msgid "Version"
+msgstr "সংস্কৰণ"
+
+#: ../src/gs-shell-details.ui.h:22
+msgid "Updated"
+msgstr "আপডেইটেড"
+
+#: ../src/gs-shell-details.ui.h:23
+msgid "Category"
+msgstr "বিভাগ"
+
+#: ../src/gs-shell-details.ui.h:24
+msgid "Source"
+msgstr "উৎস"
+
+#: ../src/gs-shell-details.ui.h:25
+msgid "License"
+msgstr "অনুজ্ঞা"
+
+#: ../src/gs-shell-details.ui.h:26
+msgid "Size"
+msgstr "আকাৰ"
+
+#: ../src/gs-shell-details.ui.h:27
+msgid "Developer"
+msgstr "উন্নয়নকাৰী"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-details.ui.h:28 ../src/gs-shell-installed.c:515
+#: ../src/gs-update-list.c:88 ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr "এড-অনসমূহ"
+
+#: ../src/gs-shell-details.ui.h:29
+msgid "Selected add-ons will be installed with the application."
+msgstr "নিৰ্বাচিত এড-অনসমূহক এপ্লিকেচনৰ সৈতে ইনস্টল কৰা হব।"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: ../src/gs-shell-installed.c:505
+msgid "System Applications"
+msgstr "চিস্টেম এপ্লিকেচনসমূহ"
+
+#: ../src/gs-shell-installed.c:611
+msgid "Click on items to select them"
+msgstr "বস্তুবোৰ নিৰ্বাচন কৰিবলে সিহতত ক্লিক কৰক"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-installed.ui.h:1
+msgid "Installed page"
+msgstr "ইনস্টল্ড পৃষ্ঠা"
+
+#: ../src/gs-shell-installed.ui.h:2
+msgid "_Add to Folder…"
+msgstr "ফোল্ডাৰত যোগ কৰক…"
+
+#: ../src/gs-shell-installed.ui.h:3
+msgid "_Move to Folder…"
+msgstr "ফোল্ডাৰত স্থানান্তৰ কৰক…"
+
+#: ../src/gs-shell-installed.ui.h:4
+msgid "_Remove from Folder"
+msgstr "ফোল্ডাৰৰ পৰা আতৰাওক (_R)"
+
+#. TRANSLATORS: this is a heading for audio applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:315
+msgid "Recommended Audio Applications"
+msgstr "উপদেশিত অডিঅ' এপ্লিকেচনসমূহ"
+
+#. TRANSLATORS: this is a heading for games which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:320
+msgid "Recommended Games"
+msgstr "উপদেশিত খেলসমূহ"
+
+#. TRANSLATORS: this is a heading for graphics applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:325
+msgid "Recommended Graphics Applications"
+msgstr "উপদেশিত গ্ৰাফিক্স এপ্লিকেচনসমূহ"
+
+#. TRANSLATORS: this is a heading for office applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:330
+msgid "Recommended Office Applications"
+msgstr "উপদেশিত অফিচ এপ্লিকেচনসমূহ"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-overview.ui.h:1
+msgid "Overview page"
+msgstr "অভাৰভিউ পৃষ্ঠা"
+
+#: ../src/gs-shell-overview.ui.h:2
+msgid "Featured Application"
+msgstr "বৈশিষ্ট্যপূৰ্ণ এপ্লিকেচন"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: ../src/gs-shell-overview.ui.h:4
+msgid "Editor's Picks"
+msgstr "সম্পাদকৰ পছন্দ"
+
+#: ../src/gs-shell-overview.ui.h:5
+msgid "Categories"
+msgstr "বিভাগসমূহ"
+
+#: ../src/gs-shell-overview.ui.h:6
+msgid "No Application Data Found"
+msgstr "কোনো এপ্লিকেচন তথ্য পোৱা নগল"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-search.ui.h:1
+msgid "Search page"
+msgstr "সন্ধান পৃষ্ঠা"
+
+#: ../src/gs-shell-search.ui.h:2
+msgid "No Application Found"
+msgstr "কোনো এপ্লিকেচন পোৱা নগল"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:146
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:149
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: ../src/gs-shell-updates.c:155
+msgid "Yesterday, %R"
+msgstr "যোৱাকালি, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: ../src/gs-shell-updates.c:159
+msgid "Yesterday, %l:%M %p"
+msgstr "যোৱাকালী, %l:%M %p"
+
+#: ../src/gs-shell-updates.c:162
+msgid "Two days ago"
+msgstr "দুই দিন আগত"
+
+#: ../src/gs-shell-updates.c:164
+msgid "Three days ago"
+msgstr "তিনি দিন আগত"
+
+#: ../src/gs-shell-updates.c:166
+msgid "Four days ago"
+msgstr "চাৰি দিন আগত"
+
+#: ../src/gs-shell-updates.c:168
+msgid "Five days ago"
+msgstr "পাঁচ দিন আগত"
+
+#: ../src/gs-shell-updates.c:170
+msgid "Six days ago"
+msgstr "ছয় দিন আগত"
+
+#: ../src/gs-shell-updates.c:172
+msgid "One week ago"
+msgstr "এক সপ্তাহ আগত"
+
+#: ../src/gs-shell-updates.c:174
+msgid "Two weeks ago"
+msgstr "দুই সপ্তাহ আগত"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:178
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: ../src/gs-shell-updates.c:197
+msgid "Downloading new updates…"
+msgstr "নতুন আপডেইটসমূহ ডাউনল'ড কৰা…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: ../src/gs-shell-updates.c:201
+msgid "Looking for new updates…"
+msgstr "নতুন আপডেইটসমূহৰ বাবে সন্ধান কৰা হৈছে…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:255
+msgid "Setting up updates…"
+msgstr "আপডেইটসমূহ সংস্থাপন কৰা হৈছে…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:256 ../src/gs-shell-updates.c:263
+msgid "(This could take a while)"
+msgstr "(ই অলপ সময় লব পাৰে)"
+
+#. TRANSLATORS: this is when the updates panel is starting up
+#: ../src/gs-shell-updates.c:269
+msgid "Checking for updates…"
+msgstr "আপডেইটসমূহৰ বাবে নিৰীক্ষণ কৰা হৈছে…"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:403
+#, c-format
+msgid "Last checked: %s"
+msgstr "সৰ্বশেষ নিৰীক্ষিত: %s"
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:781
+msgid "No Network"
+msgstr "কোনো নেটৱৰ্ক নাই"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:785
+msgid "Internet access is required to check for updates."
+msgstr "আপডেইটসমূহৰ বাবে নিৰীক্ষণ কৰিবলে ইন্টাৰনেট অভিগমৰ প্ৰয়োজন।"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:789
+msgid "Network Settings"
+msgstr "নেটৱৰ্ক সংহতিসমূহ"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: ../src/gs-shell-updates.c:808
+msgid "Charges may apply"
+msgstr "চাৰ্জ প্ৰযোজ্য হব পাৰে"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:812
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"মবাইল ব্ৰডবেণ্ড ব্যৱহাৰ কৰি আপডেইটসমূহ নিৰীক্ষণ কৰিলে আপোনাক চাৰ্জ লাগিব পাৰে।"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:816
+msgid "Check Anyway"
+msgstr "তথাপিও নিৰীক্ষণ কৰক"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-updates.ui.h:1
+msgid "Updates page"
+msgstr "আপডেইটসমূহ পৃষ্ঠা"
+
+#: ../src/gs-shell-updates.ui.h:2
+msgid "Software is up to date"
+msgstr "চফ্টৱেৰ বৰ্তমান তাৰিখলৈ উন্নত"
+
+#: ../src/gs-shell-updates.ui.h:3
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"মবাইল ব্ৰডবেণ্ড ব্যৱহাৰ কৰি আপডেইটসমূহ নিৰীক্ষণ কৰিলে আপোনাক চাৰ্জ লাগিব পাৰে"
+
+#: ../src/gs-shell-updates.ui.h:4
+msgid "_Check Anyway"
+msgstr "তথাপিও নিৰীক্ষণ কৰক (_C)"
+
+#: ../src/gs-shell-updates.ui.h:5
+msgid "Go online to check for updates"
+msgstr "আপডেইসমূহৰ বাবে নিৰীক্ষণ কৰিবলে অনলাইন হওক"
+
+#: ../src/gs-shell-updates.ui.h:6
+msgid "_Network Settings"
+msgstr "নেটৱৰ্ক সংহতিসমূহ (_N)"
+
+#. TRANSLATORS: this source has no apps installed from it
+#: ../src/gs-sources-dialog.c:91
+msgid "No software installed"
+msgstr "কোনো চফ্টৱেৰ ইনস্টল নাই"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-sources-dialog.c:94
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] "%i এপ্লিকেচন ইনস্টল কৰা হল"
+msgstr[1] "%i এপ্লিকেচনসমূহ ইনস্টল কৰা হল"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-sources-dialog.c:99
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] "%i এড-অন ইনস্টল কৰা হল"
+msgstr[1] "%i এড-অনসমূহ ইনস্টল কৰা হল"
+
+#. TRANSLATORS: this source has some apps and addons installed from it
+#: ../src/gs-sources-dialog.c:104
+#, c-format
+msgid "%i application and %i add-ons installed"
+msgid_plural "%i applications and %i add-ons installed"
+msgstr[0] "%i এপ্লিকেচন আৰু %i এড-অন ইনস্টল কৰা হল"
+msgstr[1] "%i এপ্লিকেচনসমূহ আৰু %i এড-অনসমূহ ইনস্টল কৰা হল"
+
+#: ../src/gs-sources-dialog.c:296 ../src/gs-sources-dialog.ui.h:13
+msgid "Remove Source"
+msgstr "উৎস আতৰাওক"
+
+#: ../src/gs-sources-dialog.c:311
+msgid "Removing…"
+msgstr "আতৰোৱা হৈছে…"
+
+#. vim: set noexpandtab:
+#: ../src/gs-sources-dialog.ui.h:1
+msgid "Software Sources"
+msgstr "চফ্টৱেৰ উৎসসমূহ"
+
+#: ../src/gs-sources-dialog.ui.h:3
+msgid "No sources found."
+msgstr "কোনো উৎস পোৱা নগল।"
+
+#: ../src/gs-sources-dialog.ui.h:4
+msgid "Software sources give you access to additional software."
+msgstr "চফ্টৱেৰ উৎসসমূহে আপোনাক অতিৰিক্ত চফ্টৱেৰলৈ অভিগম প্ৰদান কৰে।"
+
+#: ../src/gs-sources-dialog.ui.h:5
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr "এটা উৎস আতৰালে আপুনি ইয়াৰ পৰা ইনস্টল কৰা যিকোনো চফ্টৱেৰ আতৰি যাব।"
+
+#: ../src/gs-sources-dialog.ui.h:6
+msgid "No software installed from this source"
+msgstr "এই উৎসৰ পৰা কোনো চফ্টৱেৰ ইনস্টল কৰা হোৱা নাই"
+
+#: ../src/gs-sources-dialog.ui.h:7
+msgid "Installed from this Source"
+msgstr "এই উৎসৰ পৰা ইনস্টল কৰা"
+
+#: ../src/gs-sources-dialog.ui.h:8
+msgid "Source Details"
+msgstr "উৎসৰ বিৱৰণসমূহ"
+
+#: ../src/gs-sources-dialog.ui.h:10
+msgid "Last Checked"
+msgstr "সৰ্বশেষ নিৰীক্ষিত"
+
+#: ../src/gs-sources-dialog.ui.h:11
+msgid "Added"
+msgstr "যোগ কৰা হৈছে"
+
+#: ../src/gs-sources-dialog.ui.h:12
+msgid "Website"
+msgstr "ৱেবছাইট"
+
+#. TRANSLATORS: this is where the packager did not write a
+#. * description for the update
+#: ../src/gs-update-dialog.c:107
+msgid "No update description available."
+msgstr "কোনো আপডেইটৰ বিৱৰণ উপলব্ধ নাই।"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: ../src/gs-update-dialog.c:167
+msgid "Installed Updates"
+msgstr "ইনস্টল্ড আপডেইটসমূহ"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window
+#: ../src/gs-update-dialog.c:180
+#, c-format
+msgid "Installed on %s"
+msgstr "%s ত ইনস্টল্ড"
+
+#: ../src/gs-update-monitor.c:99
+msgid "Software Updates Available"
+msgstr "চফ্টৱেৰ আপডেইটসমূহ উপলব্ধ"
+
+#: ../src/gs-update-monitor.c:100
+msgid "Important OS and application updates are ready to be installed"
+msgstr "গুৰুত্বপূৰ্ণ OS আৰু এপ্লিকেচন আপডেইট ইনস্টল হবলৈ প্ৰস্তুত"
+
+#: ../src/gs-update-monitor.c:103
+msgid "View"
+msgstr "দৰ্শন"
+
+#: ../src/gs-update-monitor.c:104
+msgid "Not Now"
+msgstr "এতিয়া নহয়"
+
+#: ../src/gs-update-monitor.c:144
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "চফ্টৱেৰ আপডেইট ইনস্টল কৰা হল"
+msgstr[1] "চফ্টৱেৰ আপডেইটসমূহ ইনস্টল কৰা হল"
+
+#. TRANSLATORS: message when we've done offline updates
+#: ../src/gs-update-monitor.c:148
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "এটা গুৰুত্বপূৰ্ণ OS আপডেইট ইনস্টল কৰা হৈছে।"
+msgstr[1] "গুৰুত্বপূৰ্ণ OS আপডেইটসমূহ ইনস্টল কৰা হৈছে।"
+
+#: ../src/gs-update-monitor.c:153
+msgid "Software Updates Failed"
+msgstr "চফ্টৱেৰ আপডেইটসমূহ ব্যৰ্থ হল"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:155
+msgid "An important OS update failed to be installed."
+msgstr "এটা গুৰুত্বপূৰ্ণ OS আপডেইট ইনস্টল হবলে ব্যৰ্থ হল।"
+
+#: ../src/gs-update-monitor.c:164
+msgid "Review"
+msgstr "পুনৰদৰ্শন"
+
+#: ../src/gs-update-monitor.c:166
+msgid "Show Details"
+msgstr "বিৱৰণসমূহ দেখুৱাওক"
+
+#: ../src/gs-update-monitor.c:167
+msgid "OK"
+msgstr "ঠিক আছে"
+
+#. vim: set noexpandtab:
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "এটা তঁৰা"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "দুটা তঁৰা"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "তিনিটা তঁৰা"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "চাৰিটা তঁৰা"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "পাঁচটা তঁৰা"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:131
+#, c-format
+msgid "%s is now installed"
+msgstr "%s এতিয়া ইনস্টল্ড"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:135
+msgid "Launch"
+msgstr "লঞ্চ"
+
+#: ../src/gs-utils.c:159
+msgid "Sorry, this did not work"
+msgstr "ক্ষমা কৰিব, ই কাম নকৰিলে"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:163
+#, c-format
+msgid "Installation of %s failed."
+msgstr "%s ৰ ইনস্টলেষণ ব্যৰ্থ হল।"
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:168
+#, c-format
+msgid "Removal of %s failed."
+msgstr "%s আতৰাব পৰা নগল।"
+
+#: ../src/plugins/gs-plugin-appstream.c:162
+#, c-format
+msgid "No AppStream data found"
+msgstr "কোনো AppStream তথ্য পোৱা নগল"
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * be considered a "Conjunctive AND Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 and MIT and BSD-2-Clause"
+#: ../src/plugins/gs-plugin-appstream.c:305
+msgid " and "
+msgstr " আৰু "
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * be considered a "Disjunctive OR Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 or MIT"
+#: ../src/plugins/gs-plugin-appstream.c:313
+msgid " or "
+msgstr " অথবা "
+
+#. TRANSLATORS: this is when a webapp has no comment
+#: ../src/plugins/gs-plugin-epiphany.c:143
+#, c-format
+msgid "Web app"
+msgstr "ৱেব এপ"
+
+#. TRANSLATORS: this is the licence of the web-app
+#: ../src/plugins/gs-plugin-epiphany.c:151
+msgid "Proprietary"
+msgstr "মালিকবৰ্গ"
+
+#: ../src/plugins/gs-plugin-hardcoded-categories.c:160
+msgid "Featured"
+msgstr "বৈশিষ্ট্যপূৰ্ণ"
+
+#. TRANSLATORS: this is the menu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "অডিঅ'"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Menu subcategory of Audio"
+msgid "Editing"
+msgstr "সম্পাদন"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Menu subcategory of Audio"
+msgid "Databases"
+msgstr "ডাটাবেইচসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Menu subcategory of Audio"
+msgid "Disc Burning"
+msgstr "ডিস্ক বাৰ্ণিং"
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Menu subcategory of Audio"
+msgid "Ham Radio"
+msgstr "হেম ৰেডিঅ'"
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Menu subcategory of Audio"
+msgid "MIDI"
+msgstr "MIDI"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Menu subcategory of Audio"
+msgid "Mixer"
+msgstr "মিক্সাৰ"
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Menu subcategory of Audio"
+msgid "Music"
+msgstr "সংগীত"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Menu subcategory of Audio"
+msgid "Players"
+msgstr "প্লেয়াৰসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Menu subcategory of Audio"
+msgid "Recorders"
+msgstr "ৰেকৰ্ডাৰসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Menu subcategory of Audio"
+msgid "Sequencers"
+msgstr "চিকুৱেন্সাৰসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Menu subcategory of Audio"
+msgid "Tuners"
+msgstr "টিউনাৰসমূহ"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr "উন্নয়নকাৰী সঁজুলিসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Menu subcategory of Development Tools"
+msgid "Building"
+msgstr "নিৰ্মাণ"
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Menu subcategory of Development Tools"
+msgid "Databases"
+msgstr "ডাটাবেইচসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Menu subcategory of Development Tools"
+msgid "Debuggers"
+msgstr "ডিবাগাৰসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Menu subcategory of Development Tools"
+msgid "GUI Designers"
+msgstr "GUI ৰূপাঙ্ককসকল"
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Menu subcategory of Development Tools"
+msgid "IDE"
+msgstr "IDE"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Menu subcategory of Development Tools"
+msgid "Profiling"
+msgstr "আলেখ্যন"
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Menu subcategory of Development Tools"
+msgid "Project Management"
+msgstr "প্ৰকল্প ব্যৱস্থাপনা"
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Menu subcategory of Development Tools"
+msgid "Revision Control"
+msgstr "ৰিভিষণ কনট্ৰল"
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Menu subcategory of Development Tools"
+msgid "Translation"
+msgstr "অনুবাদ"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Menu subcategory of Development Tools"
+msgid "Web Development"
+msgstr "ৱেব উন্নয়ন"
+
+#. TRANSLATORS: this is the menu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "শিক্ষা"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Menu subcategory of Education"
+msgid "Art"
+msgstr "শিল্প"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Menu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr "কৃত্ৰিম বুদ্ধি"
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Menu subcategory of Education"
+msgid "Astronomy"
+msgstr "জ্যোতিৰ্বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Menu subcategory of Education"
+msgid "Biology"
+msgstr "জীৱবিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Menu subcategory of Education"
+msgid "Chemistry"
+msgstr "ৰসায়ন"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Menu subcategory of Education"
+msgid "Computer Science"
+msgstr "কমপিউটাৰ বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Menu subcategory of Education"
+msgid "Construction"
+msgstr "নিৰ্মাণ"
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Menu subcategory of Education"
+msgid "Data Visualization"
+msgstr "তথ্য দৃশ্যমানতা"
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Menu subcategory of Education"
+msgid "Economy"
+msgstr "অৰ্থনীতি"
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Menu subcategory of Education"
+msgid "Electricity"
+msgstr "বিদ্যুত"
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Menu subcategory of Education"
+msgid "Electronics"
+msgstr "ইলেকট্ৰনিক্স"
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Menu subcategory of Education"
+msgid "Engineering"
+msgstr "অভিযান্ত্ৰিকী"
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Menu subcategory of Education"
+msgid "Geography"
+msgstr "ভূগল"
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Menu subcategory of Education"
+msgid "Geology"
+msgstr "ভূতত্ত্ব"
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Menu subcategory of Education"
+msgid "Geoscience"
+msgstr "ভূ-বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Menu subcategory of Education"
+msgid "History"
+msgstr "ইতিহাস"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Menu subcategory of Education"
+msgid "Humanities"
+msgstr "মনুষ্যত্ব"
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Menu subcategory of Education"
+msgid "Image Processing"
+msgstr "ছবি প্ৰক্ৰিয়াকৰণ"
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Menu subcategory of Education"
+msgid "Languages"
+msgstr "ভাষাসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Menu subcategory of Education"
+msgid "Literature"
+msgstr "সাহিত্য"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Menu subcategory of Education"
+msgid "Maps"
+msgstr "মানচিত্ৰ"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Menu subcategory of Education"
+msgid "Math"
+msgstr "মেথ"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Menu subcategory of Education"
+msgid "Medical"
+msgstr "মেডিকেল"
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Menu subcategory of Education"
+msgid "Music"
+msgstr "সংগীত"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Menu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr "সাংখ্যিক বিশ্লেষণ"
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Menu subcategory of Education"
+msgid "Parallel Computing"
+msgstr "সমান্তৰাল কমপিউটিং"
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Menu subcategory of Education"
+msgid "Physics"
+msgstr "পদাৰ্থবিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Menu subcategory of Education"
+msgid "Robotics"
+msgstr "ৰব'টিক্স"
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Menu subcategory of Education"
+msgid "Spirituality"
+msgstr "আধ্যাত্মিক"
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Menu subcategory of Education"
+msgid "Sports"
+msgstr "খেলসমূহ"
+
+#. TRANSLATORS: this is the menu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr "খেলসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Menu subcategory of Games"
+msgid "Action"
+msgstr "কাৰ্য্য"
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Menu subcategory of Games"
+msgid "Adventure"
+msgstr "অভিযান"
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Menu subcategory of Games"
+msgid "Arcade"
+msgstr "আৰ্কেইড"
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Menu subcategory of Games"
+msgid "Blocks"
+msgstr "খণ্ডসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Menu subcategory of Games"
+msgid "Board"
+msgstr "বৰ্ড"
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Menu subcategory of Games"
+msgid "Card"
+msgstr "কাৰ্ড"
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Menu subcategory of Games"
+msgid "Emulators"
+msgstr "ইমুলেটৰ"
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Menu subcategory of Games"
+msgid "Kids"
+msgstr "শিশু"
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Menu subcategory of Games"
+msgid "Logic"
+msgstr "যুক্তি"
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Menu subcategory of Games"
+msgid "Role Playing"
+msgstr "ভূমিকা পালন"
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Menu subcategory of Games"
+msgid "Shooter"
+msgstr "চুটাৰ"
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Menu subcategory of Games"
+msgid "Simulation"
+msgstr "চিমুলেষণ"
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Menu subcategory of Games"
+msgid "Sports"
+msgstr "খেলসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Menu subcategory of Games"
+msgid "Strategy"
+msgstr "কৌশল"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr "গ্ৰাফিক্স"
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Menu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr "2D গ্ৰাফিক্স"
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Menu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr "3D গ্ৰাফিক্স"
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Menu subcategory of Graphics"
+msgid "OCR"
+msgstr "OCR"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Menu subcategory of Graphics"
+msgid "Photography"
+msgstr "ফ'টোগ্ৰাফি"
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Menu subcategory of Graphics"
+msgid "Publishing"
+msgstr "প্ৰকাশন"
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Menu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr "ৰেস্টাৰ গ্ৰাফিক্স"
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Menu subcategory of Graphics"
+msgid "Scanning"
+msgstr "স্কেনিং"
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Menu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr "ভেক্টৰ গ্ৰাফিক্স"
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Menu subcategory of Graphics"
+msgid "Viewer"
+msgstr "দৰ্শক"
+
+#. TRANSLATORS: this is the menu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "ইন্টাৰনেট"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Menu subcategory of Internet"
+msgid "Chat"
+msgstr "চেট"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Menu subcategory of Internet"
+msgid "Dialup"
+msgstr "ডায়েলআপ"
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Menu subcategory of Internet"
+msgid "Email"
+msgstr "ইমেইল"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Menu subcategory of Internet"
+msgid "Feed"
+msgstr "ফীড"
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Menu subcategory of Internet"
+msgid "File Transfer"
+msgstr "ফাইল স্থানান্তৰ"
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Menu subcategory of Internet"
+msgid "Ham Radio"
+msgstr "হেম ৰেডিঅ'"
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Menu subcategory of Internet"
+msgid "Instant Messaging"
+msgstr "তৎক্ষনাত বাৰ্তা"
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Menu subcategory of Internet"
+msgid "IRC Clients"
+msgstr "IRC ক্লাএণ্টসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Menu subcategory of Internet"
+msgid "Monitor"
+msgstr "মনিটৰ"
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Menu subcategory of Internet"
+msgid "News"
+msgstr "বাতৰি"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Menu subcategory of Internet"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Menu subcategory of Internet"
+msgid "Remote Access"
+msgstr "দূৰৱৰ্তী অভিগম"
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Menu subcategory of Internet"
+msgid "Telephony"
+msgstr "টেলিফোনী"
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Menu subcategory of Internet"
+msgid "Video Conference"
+msgstr "ভিডিঅ' কনফাৰেঞ্চ"
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Menu subcategory of Internet"
+msgid "Web Browser"
+msgstr "ৱেব ব্ৰাউছাৰ"
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Menu subcategory of Internet"
+msgid "Web Development"
+msgstr "ৱেব উন্নয়ন"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "অফিচ"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Menu subcategory of Office"
+msgid "Calendar"
+msgstr "কেলেন্ডাৰ"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Menu subcategory of Office"
+msgid "Chart"
+msgstr "চাৰ্ট"
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Menu subcategory of Office"
+msgid "Contact Management"
+msgstr "পৰিচয় ব্যৱস্থাপনা"
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Menu subcategory of Office"
+msgid "Database"
+msgstr "ডাটাবেইচ"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Menu subcategory of Office"
+msgid "Dictionary"
+msgstr "অভিধান"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Menu subcategory of Office"
+msgid "Email"
+msgstr "ইমেইল"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Menu subcategory of Office"
+msgid "Finance"
+msgstr "বিত্ত"
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Menu subcategory of Office"
+msgid "Flow Chart"
+msgstr "ফ্ল' চাৰ্ট"
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Menu subcategory of Office"
+msgid "PDA"
+msgstr "PDA"
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Menu subcategory of Office"
+msgid "Photography"
+msgstr "ফ'টোগ্ৰাফি"
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Menu subcategory of Office"
+msgid "Presentation"
+msgstr "পৰিৱেশন"
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Menu subcategory of Office"
+msgid "Project Management"
+msgstr "প্ৰকল্প ব্যৱস্থাপনা"
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Menu subcategory of Office"
+msgid "Publishing"
+msgstr "প্ৰকাশন"
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Menu subcategory of Office"
+msgid "Spreadsheet"
+msgstr "স্প্ৰেডশ্বিট"
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Menu subcategory of Office"
+msgid "Viewer"
+msgstr "দৰ্শক"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Menu subcategory of Office"
+msgid "Word Processor"
+msgstr "ৱাৰ্ড প্ৰচেছৰ"
+
+#. TRANSLATORS: this is the menu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Menu subcategory of Science"
+msgid "Art"
+msgstr "শিল্প"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Menu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr "কৃত্ৰিম বুদ্ধি"
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Menu subcategory of Science"
+msgid "Astronomy"
+msgstr "জ্যোতিৰ্বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Menu subcategory of Science"
+msgid "Biology"
+msgstr "জীৱবিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Menu subcategory of Science"
+msgid "Chemistry"
+msgstr "ৰসায়ন"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Menu subcategory of Science"
+msgid "Computer Science"
+msgstr "কমপিউটাৰ বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Menu subcategory of Science"
+msgid "Construction"
+msgstr "নিৰ্মাণ"
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Menu subcategory of Science"
+msgid "Data Visualization"
+msgstr "তথ্য দৃশ্যমানতা"
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Menu subcategory of Science"
+msgid "Economy"
+msgstr "অৰ্থনীতি"
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Menu subcategory of Science"
+msgid "Electricity"
+msgstr "বিদ্যুত"
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Menu subcategory of Science"
+msgid "Electronics"
+msgstr "ইলেকট্ৰনিক্স"
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Menu subcategory of Science"
+msgid "Engineering"
+msgstr "অভিযান্ত্ৰিকী"
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Menu subcategory of Science"
+msgid "Geography"
+msgstr "ভূগল"
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Menu subcategory of Science"
+msgid "Geology"
+msgstr "ভূতত্ত্ব"
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Menu subcategory of Science"
+msgid "Geoscience"
+msgstr "ভূ-বিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Menu subcategory of Science"
+msgid "History"
+msgstr "ইতিহাস"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Menu subcategory of Science"
+msgid "Humanities"
+msgstr "মনুষ্যত্ব"
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Menu subcategory of Science"
+msgid "Image Processing"
+msgstr "ছবি প্ৰক্ৰিয়াকৰণ"
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Menu subcategory of Science"
+msgid "Languages"
+msgstr "ভাষাসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Menu subcategory of Science"
+msgid "Literature"
+msgstr "সাহিত্য"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Menu subcategory of Science"
+msgid "Maps"
+msgstr "মানচিত্ৰ"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Menu subcategory of Science"
+msgid "Math"
+msgstr "মেথ"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Menu subcategory of Science"
+msgid "Medical"
+msgstr "মেডিকেল"
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Menu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr "সাংখ্যিক বিশ্লেষণ"
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Menu subcategory of Science"
+msgid "Parallel Computing"
+msgstr "সমান্তৰাল কমপিউটিং"
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Menu subcategory of Science"
+msgid "Physics"
+msgstr "পদাৰ্থবিজ্ঞান"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Menu subcategory of Science"
+msgid "Robotics"
+msgstr "ৰব'টিক্স"
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Menu subcategory of Science"
+msgid "Spirituality"
+msgstr "আধ্যাত্মিক"
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Menu subcategory of Science"
+msgid "Sports"
+msgstr "খেলসমূহ"
+
+#. TRANSLATORS: this is the menu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "চিস্টেম"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Menu subcategory of System"
+msgid "Emulator"
+msgstr "ইমুলেটৰ"
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Menu subcategory of System"
+msgid "File Manager"
+msgstr "ফাইল ব্যৱস্থাপক"
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Menu subcategory of System"
+msgid "File System"
+msgstr "ফাইল চিস্টেম"
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Menu subcategory of System"
+msgid "File Tools"
+msgstr "ফাইল সঁজুলিসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Menu subcategory of System"
+msgid "Monitor"
+msgstr "মনিটৰ"
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Menu subcategory of System"
+msgid "Security"
+msgstr "সুৰক্ষা"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Menu subcategory of System"
+msgid "Terminal Emulator"
+msgstr "টাৰ্মিনেল ইমুলেটৰ"
+
+#. TRANSLATORS: this is the menu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr "সঁজুলিসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Menu subcategory of Utilities"
+msgid "Accessibility"
+msgstr "অভিগম্যতা"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Menu subcategory of Utilities"
+msgid "Archiving"
+msgstr "আৰ্কাইভিং"
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Menu subcategory of Utilities"
+msgid "Calculator"
+msgstr "গণক"
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Menu subcategory of Utilities"
+msgid "Clock"
+msgstr "ঘড়ী"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Menu subcategory of Utilities"
+msgid "Compression"
+msgstr "সংকোচন"
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Menu subcategory of Utilities"
+msgid "File Tools"
+msgstr "ফাইল সঁজুলিসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Menu subcategory of Utilities"
+msgid "Maps"
+msgstr "মানচিত্ৰ"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Menu subcategory of Utilities"
+msgid "Spirituality"
+msgstr "আধ্যাত্মিক"
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Menu subcategory of Utilities"
+msgid "Telephony Tools"
+msgstr "টেলিফোনী সঁজুলিসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Menu subcategory of Utilities"
+msgid "Text Editor"
+msgstr "লিখনি সম্পাদক"
+
+#. TRANSLATORS: this is the menu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "ভিডিঅ'"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Menu subcategory of Video"
+msgid "Editing"
+msgstr "সম্পাদন"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Menu subcategory of Video"
+msgid "Database"
+msgstr "ডাটাবেইচ"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Menu subcategory of Video"
+msgid "Disc Burning"
+msgstr "ডিস্ক বাৰ্ণিং"
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Menu subcategory of Video"
+msgid "Players"
+msgstr "প্লেয়াৰসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Menu subcategory of Video"
+msgid "Recorders"
+msgstr "ৰেকৰ্ডাৰসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Menu subcategory of Video"
+msgid "TV"
+msgstr "TV"
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Menu subcategory of Add-ons"
+msgid "Fonts"
+msgstr "ফণ্টসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Menu subcategory of Add-ons"
+msgid "Codecs"
+msgstr "কডেকসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Menu subcategory of Add-ons"
+msgid "Input Sources"
+msgstr "ইনপুট উৎসসমূহ"
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Menu subcategory of Add-ons"
+msgid "Language Packs"
+msgstr "ভাষা পেকসমূহ"
+
+#: ../src/menus.ui.h:1
+msgid "_Software Sources"
+msgstr "চফ্টৱেৰ উৎসসমূহ (_S)"
+
+#: ../src/menus.ui.h:2
+msgid "_About"
+msgstr "বিষয়ে (_A)"
+
+#: ../src/menus.ui.h:3
+msgid "_Quit"
+msgstr "প্ৰস্থান কৰক (_Q)"
+
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..9a5bba4
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,4000 @@
+# Bulgarian translation of gnome-software po-file.
+# Copyright (C) 2017 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Lyubomir Vasilev <lyubomirv@abv.bg>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=General\n"
+"POT-Creation-Date: 2017-10-01 14:53+0000\n"
+"PO-Revision-Date: 2017-10-02 07:42+0200\n"
+"Last-Translator: Lyubomir Vasilev <lyubomirv@abv.bg>\n"
+"Language-Team: Bulgarian <dict-notifications@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Управление на програмите"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Програма за управление на програмите в GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"С тази програма можете да търсите и инсталирате нови приложения и системни "
+"разширения, както и да премахвате вече инсталираните приложения."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Програмата показва на преден план избрани и популярни приложения, като за "
+"всяко може да се види описание и няколко снимки. Приложенията могат да бъдат "
+"намерени чрез преглеждане на категоризирания списък или чрез търсене. Освен "
+"това, програмата може да обновява системата без връзка с мрежата."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Преглед"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Подробности"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Инсталирани"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Обновления"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Подробности за обновлението"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:861
+msgid "The GNOME Project"
+msgstr "Проектът GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Инсталиране на файл на „AppStream“ в системата"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Инсталиране на файл на „AppStream“ в системата"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Списък със съвместими проекти"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Това е списък със съвместими проекти, които трябва да показваме, като GNOME, "
+"KDE и XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates in GNOME Software"
+msgstr "Дали обновленията да се управляват от тази програма"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel and not perform any "
+"automatic updates actions."
+msgstr ""
+"Ако е изключено, разделът с обновленията ще бъде скрит и програмата няма да "
+"извършва никакви автоматични действия спрямо обновленията."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically download updates"
+msgstr "Дали обновленията да се изтеглят автоматично"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background "
+"and prompts the user to install them when ready."
+msgstr ""
+"Когато е включено, обновленията ще се изтеглят автоматично на заден фон и "
+"когато са готови, потребителят ще бъде помолен за разрешение за "
+"инсталирането им."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Дали да се извършва автоматично опресняване, когато връзката се таксува "
+"според количеството данни"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Когато е включено, ще се извършва автоматично опресняване на заден фон, дори "
+"когато връзката се таксува според количеството данни (ще се извършва "
+"изтегляне на метаданни, проверка за обновления и т.н., което може да струва "
+"пари на потребителя)."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Дали това е първото пускане на „Управление на програмите“"
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "Показване на оценка в звезди до програмите"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Филтриране на програмите според клона по подразбиране на отдалеченото "
+"хранилище"
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Предупреждение преди инсталиране на програми, които не са свободни"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"При инсталиране на програми, които не са свободни, може да бъде показано "
+"предупреждение. Тази настройка определя дали това предупреждение да не се "
+"показва."
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "Списък с популярни програми"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Списък с програмите, които да се използват вместо стандартните за системата."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The list of extra sources that have been previously enabled"
+msgstr "Списъкът с допълнителни източници, които преди са били включени"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid ""
+"The list of sources that have been previously enabled when installing third-"
+"party applications."
+msgstr ""
+"Списъкът с източници, които преди са били включени при инсталирането на "
+"програми от трети страни."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Време на последната проверка за обновления"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Време на последното известие за надграждане"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Време на първото обновление по сигурността. Изчиства се след обновяване"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Време на последното обновление"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Възрастта в секунди, която се ползва за проверка дали снимката на сървъра "
+"все още е правилна"
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Задаването на по-голяма стойност ще означава по-малко изтегляне на данни от "
+"сървъра, но ако снимките бъдат обновени, потребителят може да не ги види "
+"веднага. Стойност 0 означава никога да не се прави проверка за снимката на "
+"сървъра, ако тя вече е в кеша."
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "Сървърът, който да се ползва за оценки на програмите"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr "Минимална оценка за рецензиите"
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Рецензиите с по-ниска оценка няма да бъдат показани."
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr ""
+"Списък от официални източници, които не трябва да се смятат за такива от "
+"трети страни"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official sources that should be considered free software"
+msgstr ""
+"Списък от официални източници, които трябва да се смятат за свободни програми"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Адресът на лиценза, който да се ползва, когато програмата трябва да се смята "
+"за свободна"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Инсталиране на комплектованите програми за всички потребители на системата, "
+"когато е възможно"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr "Показване на интерфейса за управление на папките"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Sources dialog"
+msgstr "Дава достъп до прозореца за източниците на софтуер"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Предлагане на надграждане до предварителни издания"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Показване на елементи в интерфейса, които да покажат на потребителя, че "
+"дадена програма не е свободна"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software sources"
+msgstr ""
+"Показване на въпрос за инсталирането на източници на софтуер, който не е "
+"свободен"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show non-free software in search results"
+msgstr ""
+"Показване на програми, които не са свободни, в резултатите от търсенията"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Показване на размера на програмите в списъка с инсталирани програми"
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+"Адресът, където може да бъде намерена информация относно собственическия "
+"софтуер и програми, които не са свободни"
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "A list of non-free sources that can be optionally enabled"
+msgstr ""
+"Списък от източници на несвободни програми, които могат да бъдат включени"
+
+#: data/org.gnome.software.gschema.xml:139
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Списък от адреси, водещи към файлове на „AppStream“, които ще бъдат "
+"изтеглени в папка с информация за програмата"
+
+#: data/org.gnome.software.gschema.xml:143
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Инсталиране на файловете на „AppStream“ в системна папка, за всички "
+"потребители"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Инсталиране на програми"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Инсталиране на избраните програми на системата"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Избиране на всички"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Отмяна на избора"
+
+#: src/gnome-software.ui:24 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Програми"
+
+#: src/gnome-software.ui:43 src/gs-sources-dialog.ui:23
+#: src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "Назад"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "_Всичко"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "_Инсталирани"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "_Обновления"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "Търсене"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-sources-dialog.ui:6
+#: src/gs-sources-dialog.ui:46
+msgid "Software Sources"
+msgstr "Източници на софтуер"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "Проучване на диска"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1393
+msgid "Network Settings"
+msgstr "Мрежови настройки"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "Рестартиране сега"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "Допълнителна информация"
+
+#: src/gs-app-addon-row.c:95 src/gs-app-row.c:430 src/gs-details-page.ui:344
+msgid "Pending"
+msgstr "Чакащи"
+
+#: src/gs-app-addon-row.c:101 src/gs-app-row.ui:209 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Инсталирани"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: src/gs-app-addon-row.c:105 src/gs-app-row.c:218 src/gs-details-page.c:439
+msgid "Installing"
+msgstr "Инсталира се"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: src/gs-app-addon-row.c:109 src/gs-app-row.c:224
+msgid "Removing"
+msgstr "Премахва се"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "Име на папката"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.c:379 src/gs-details-page.ui:330 src/gs-editor.c:623
+#: src/gs-editor.c:655 src/gs-installed-page.c:609 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "_Отказ"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Добавяне"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Добавяне в папката с програми"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:99
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Режим на стартиране. Един от следните: „updates“ (обновления), "
+"„updated“ (обновени), „installed“ (инсталирани) или „overview“ (преглед)"
+
+#: src/gs-application.c:99
+msgid "MODE"
+msgstr "РЕЖИМ"
+
+#: src/gs-application.c:101
+msgid "Search for applications"
+msgstr "Търсене на програми"
+
+#: src/gs-application.c:101
+msgid "SEARCH"
+msgstr "ТЪРСЕНЕ"
+
+#: src/gs-application.c:103
+msgid "Show application details (using application ID)"
+msgstr ""
+"Показване на подробностите за програма (по идентификатор на приложение)"
+
+#: src/gs-application.c:103 src/gs-application.c:107
+msgid "ID"
+msgstr "ИД"
+
+#: src/gs-application.c:105
+msgid "Show application details (using package name)"
+msgstr "Показване на подробностите за програма (по име на пакета)"
+
+#: src/gs-application.c:105
+msgid "PKGNAME"
+msgstr "ИМЕ_НА_ПАКЕТ"
+
+#: src/gs-application.c:107
+msgid "Install the application (using application ID)"
+msgstr "Инсталиране на програма (по идентификатор на програмата)"
+
+#: src/gs-application.c:109
+msgid "Open a local package file"
+msgstr "Отваряне на локален пакетен файл"
+
+#: src/gs-application.c:109
+msgid "FILENAME"
+msgstr "ИМЕ_НА_ФАЙЛ"
+
+#: src/gs-application.c:111
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Видът взаимодействие очаквано за това действие. Едно от следните: "
+"„none“ (никакво), „notify“ (известяване) или „full“ (пълно)"
+
+#: src/gs-application.c:114
+msgid "Show verbose debugging information"
+msgstr "Показване на допълнителна информация за изчистване на грешки"
+
+#: src/gs-application.c:116
+msgid "Show profiling information for the service"
+msgstr "Показване на информация за профилиране на услугата"
+
+#: src/gs-application.c:118
+msgid "Quit the running instance"
+msgstr "Затваряне на работещата програма"
+
+#: src/gs-application.c:120
+msgid "Prefer local file sources to AppStream"
+msgstr "Предпочитане на локални файлове като източници пред „AppStream“"
+
+#: src/gs-application.c:122
+msgid "Show version number"
+msgstr "Показване на номера на версията"
+
+#: src/gs-application.c:306
+msgid "translator-credits"
+msgstr ""
+"Любомир Василев <lyubomirv@abv.bg>\n"
+"\n"
+"Проектът за превод на GNOME има нужда от подкрепа.\n"
+"Научете повече за нас на <a href='http://gnome.cult.bg'>http://gnome.cult."
+"bg</a>\n"
+"Докладвайте за грешки на <a href='http://gnome.cult.bg/bugs'>http://gnome."
+"cult.bg/bugs</a>"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:313
+#, c-format
+msgid "About %s"
+msgstr "Относно „%s“"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:317
+msgid "A nice way to manage the software on your system."
+msgstr "Лесен начин за управление на програмите на системата."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:171
+msgid "Visit website"
+msgstr "Посещаване на уеб сайта"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:176
+msgid "Install…"
+msgstr "Инсталиране…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:183
+msgid "Cancel"
+msgstr "Отказ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:192 src/gs-common.c:279 src/gs-page.c:544
+msgid "Install"
+msgstr "Инсталиране"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:199
+msgid "Update"
+msgstr "Обновяване"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: src/gs-app-row.c:203 src/gs-app-row.c:212 src/gs-page.c:700
+msgid "Remove"
+msgstr "Премахване"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:330
+msgid "Device cannot be used during update."
+msgstr "Устройството не може да се използва по време на обновяване."
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:340 src/gs-details-page.ui:1000
+msgid "Source"
+msgstr "Източник"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:68
+msgid "To continue you need to sign in."
+msgstr "За да продължите, трябва да се впишете."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:72
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "За да продължите, трябва да се впишете в „%s“."
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "Е-поща"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "Вече имам регистрация"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "Парола"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "Искам да се регистрирам сега"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "Забравих паролата си"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "Автоматично вписване следващия път"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "Въведете своя еднократен ПИН за двустепена защита."
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "ПИН"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr "Идентификация"
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "Продължаване"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:193
+msgid "Other"
+msgstr "Други"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:198
+msgid "All"
+msgstr "Всички"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:202
+msgid "Featured"
+msgstr "Избрани"
+
+#. TRANSLATORS: button text when apps have been sorted alphabetically
+#: src/gs-category-page.c:99
+msgid "Sorted by Name"
+msgstr "По име"
+
+#. TRANSLATORS: button text when apps have been sorted by their rating
+#: src/gs-category-page.c:102
+msgid "Sorted by Rating"
+msgstr "По ограничение"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:24
+msgid "Top Rated"
+msgstr "По оценка"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#: src/gs-category-page.ui:30 src/gs-editor.ui:296
+msgid "Name"
+msgstr "Име"
+
+#: src/gs-category-page.ui:117
+msgid "Extension Settings"
+msgstr "Настройки за разширенията"
+
+#: src/gs-category-page.ui:146
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Използвайте разширенията на собствен риск. Ако имате проблеми със системата, "
+"е препоръчително да ги изключите."
+
+#: src/gs-category-page.ui:182
+msgid "Subcategories filter menu"
+msgstr "Меню за подбор на подкатегориите"
+
+#: src/gs-category-page.ui:235
+msgid "Subcategories sorting menu"
+msgstr "Меню за подредба на подкатегориите"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:205
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Въведете число между 1 и %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:268
+msgid "Choose an application:"
+msgstr "Изберете програма:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:135
+msgid "OS updates are now installed"
+msgstr "Обновленията на операционната система са инсталирани"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:138
+msgid "Recently installed updates are available to review"
+msgstr "Последно инсталираните обновления могат да бъдат прегледани"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:142
+#, c-format
+msgid "%s is now installed"
+msgstr "Инсталирането на „%s“ приключи"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:145
+msgid "Application is ready to be used."
+msgstr "Програмата е готова за ползване."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:151
+msgid "Launch"
+msgstr "Пускане"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "Инсталиране на програми от трети страни?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+msgid "Enable Third-Party Software Source?"
+msgstr "Включване на източниците на софтуер от трети страни?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#.
+#: src/gs-common.c:232
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"„%s“ не е <a href=\"https://bg.wikipedia.org/wiki/Свободен_софтуер"
+"\">свободен софтуер</a> с <a href=\"https://bg.wikipedia.org/wiki/"
+"Софтуер_с_отворен_код\">отворен код</a> и се осигурява от „%s“."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:242
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "„%s“ се осигурява от „%s“."
+
+#. TRANSLATORS: a software source is a repo
+#: src/gs-common.c:252
+msgid "This software source must be enabled to continue installation."
+msgstr ""
+"Този източник на софтуер трябва да бъде включен, за да продължи "
+"инсталирането."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:262
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"В някои държави инсталирането и използването на „%s“ може да е незаконно."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"В някои държави инсталирането и използването на този кодек може да е "
+"незаконно."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:275
+msgid "Don’t Warn Again"
+msgstr "Без това предупреждение"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:284
+msgid "Enable and Install"
+msgstr "Включване и инсталиране"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:429
+msgid "Detailed errors from the package manager follow:"
+msgstr "Следват подробните съобщения от пакетната система:"
+
+#: src/gs-common.c:448 src/gs-details-page.ui:607
+msgid "Details"
+msgstr "Подробности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "Без анимирано насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "Анимационни персонажи в опасни ситуации"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Анимационни персонажи в насилствен конфликт"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "Визуално представено насилие, включващо анимационни персонажи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "Без фантастично насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Персонажи в опасни ситуации, които са лесно различими от реалността"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Персонажи в насилствен конфликт, които са лесно различими от реалността"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Визуално представено насилие, лесно различимо от реалността"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "Без реалистично насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Донякъде реалистични персонажи в опасни ситуации"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Реалистични персонажи в насилствен конфликт"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "Визуално представено насилие, включващо реалистични персонажи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "Без проливане на кръв"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "Нереалистично проливане на кръв"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "Реалистично проливане на кръв"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Проливане на кръв и разчленяване"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "Без сексуално насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "Изнасилвания или друг вид насилствено сексуално поведение"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "Без споменаване на алкохол"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "Споменаване на алкохолни напитки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "Използване на алкохолни напитки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "Без споменаване на наркотични вещества"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "Споменаване на наркотични вещества"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "Използване на наркотични вещества"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "Споменаване на тютюневи изделия"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "Използване на тютюневи изделия"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "Без каквато и да било голота"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "Кратка, артистична голота"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "Продължителна голота"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "Без препратки или представяне на сцени със сексуален характер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "Провокативни препратки или сцени"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "Сексуални препратки или сцени"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "Визуално представено сексуално поведение"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "Без неприличен език"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "Леко или рядко използван неприличен език"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "Умерено използване на неприличен език"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "Силно или често използван неприличен език"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "Без неуместен хумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "Глуповат хумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "Вулгарен или тоалетен хумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "Сексуален или друг вид хумор за възрастни"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "Без какъвто и да било дискриминационен език"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "Негативни намеци към определена група хора"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Дискриминация, целяща да причини емоционална вреда"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Явна дискриминация спрямо пол, сексуална ориентация, раса или религия"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "Без реклами"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "Продуктово позициониране"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Явни споменаване на конкретни марки продукти"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Players are encouraged to purchase specific real-world items"
+msgstr "Играчите биват насърчавани да купуват определени реални предмети"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "Без залагания"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "Залагания на случайни събития чрез жетони или кредити"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "Залагания на „игрални“ пари"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "Залагания на истински пари"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "Без възможност за харчене на пари"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Ability to spend real money in-game"
+msgstr "Възможност за харчене на истински пари в играта"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "No way to chat with other players"
+msgstr "Без възможност за обмен на съобщения с другите играчи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Player-to-player game interactions without chat functionality"
+msgstr "Взаимодействия между играчите без възможност за обмен на съобщения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "Player-to-player preset interactions without chat functionality"
+msgstr ""
+"Предварително определени взаимодействия между играчите без възможност за "
+"обмен на съобщения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Uncontrolled chat functionality between players"
+msgstr "Неограничена възможност за обмен на съобщения между играчите"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "No way to talk with other players"
+msgstr "Без възможност за гласови разговори с другите играчи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "Uncontrolled audio or video chat functionality between players"
+msgstr "Неограничена възможност за гласови и видео разговори между играчите"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Без споделяне на потребителски имена за социални мрежи или адреси на е-пощи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Споделяне на потребителски имена за социални мрежи или адреси на е-пощи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "No sharing of user information with 3rd parties"
+msgstr "Без споделяне на данните за потребителите с трети страни"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "Sharing user information with 3rd parties"
+msgstr "Споделяне на данните за потребителите с трети страни"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location to other users"
+msgstr "Без споделяне на реалното местоположение с другите потребители"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing physical location to other users"
+msgstr "Споделяне на реалното местоположение с другите потребители"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:294
+msgid "An application"
+msgstr "Програма"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "„%s“ изисква поддръжка на допълнителен файлов формат."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional MIME Types Required"
+msgstr "Изискват се допълнителни видове MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "„%s“ изисква допълнителни шрифтове."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Fonts Required"
+msgstr "Изискват се допълнителни шрифтове"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "„%s“ изисква допълнителни мултимедийни кодеци."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Multimedia Codecs Required"
+msgstr "Изискват се допълнителни мултимедийни кодеци"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "„%s“ изисква допълнителни драйвери за принтер."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:320
+msgid "Additional Printer Drivers Required"
+msgstr "Изискват се допълнителни драйвери за принтер"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:324
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "„%s“ изисква допълнителни пакети."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:326
+msgid "Additional Packages Required"
+msgstr "Изискват се допълнителни пакети"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:335
+msgid "Find in Software"
+msgstr "Търсене в „Управление на програмите“"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#: src/gs-details-page.c:278 src/gs-details-page.c:308
+#: src/gs-details-page.ui:206 src/gs-upgrade-banner.ui:146
+msgid "_Install"
+msgstr "_Инсталиране"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:313
+msgid "_Update"
+msgstr "_Обновяване"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: src/gs-details-page.c:326
+msgid "_Install…"
+msgstr "_Инсталиране…"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:373 src/gs-details-page.ui:242
+msgid "_Remove"
+msgstr "_Премахване"
+
+#: src/gs-details-page.c:434 src/gs-sources-dialog.c:513
+msgid "Removing…"
+msgstr "Премахване…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:744
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Тази програма може да бъде използвана само при наличие на връзка с Интернет."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:909
+msgctxt "version"
+msgid "Unknown"
+msgstr "Неизвестна"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:920
+msgctxt "updated"
+msgid "Never"
+msgstr "Никога"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:964
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Неизвестен"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1368
+msgid "You need internet access to write a review"
+msgstr "За да публикувате рецензия, се нуждаете от връзка с Интернет"
+
+#: src/gs-details-page.c:1502
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Търсенето на „%s“ беше неуспешно"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2076
+msgid "Public domain"
+msgstr "Обществено достояние"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2092 src/gs-details-page.ui:1395
+msgid "Free Software"
+msgstr "Свободен софтуер"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2149
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Потребителите се съгласяват със следния лиценз:"
+msgstr[1] "Потребителите се съгласяват със следните лицензи:"
+
+#: src/gs-details-page.c:2176 src/gs-details-page.ui:1504
+msgid "More information"
+msgstr "Повече информация"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Подробности"
+
+#. Translators: A label for a button to execute the selected application.
+#: src/gs-details-page.ui:228
+msgid "_Launch"
+msgstr "_Стартиране"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:358
+msgid "_Add shortcut"
+msgstr "_Добавяне на пряк път"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:373
+msgid "Re_move shortcut"
+msgstr "_Премахване на прекия път"
+
+#: src/gs-details-page.ui:468
+msgid "No screenshot provided"
+msgstr "Няма снимки"
+
+#: src/gs-details-page.ui:504
+msgid "Software Source Included"
+msgstr "Включва източник на софтуер"
+
+#: src/gs-details-page.ui:505
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+"Тази програма включва източник на софтуер, който предоставя обновления, "
+"както и достъп до още програми."
+
+#: src/gs-details-page.ui:518
+msgid "No Software Source Included"
+msgstr "Не включва източник на софтуер"
+
+#: src/gs-details-page.ui:519
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr "Тази програма не включва източник на софтуер. Тя няма да се обновява."
+
+#: src/gs-details-page.ui:533
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Тази програма вече се предоставя от дистрибуцията ви и не трябва да бъде "
+"заменяна."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:546
+msgid "Software Source Identified"
+msgstr "Открит е източник на софтуер"
+
+#: src/gs-details-page.ui:547
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr ""
+"Добавянето на този източник на софтуер ще ви даде достъп до допълнителни "
+"програми и подобрения."
+
+#: src/gs-details-page.ui:548
+msgid "Only use software sources that you trust."
+msgstr "Използвайте само източници на софтуер, на които вярвате."
+
+#: src/gs-details-page.ui:564
+msgid "_Website"
+msgstr "_Уеб сайт"
+
+#: src/gs-details-page.ui:579
+msgid "_Donate"
+msgstr "_Дарение"
+
+#: src/gs-details-page.ui:713
+msgid "Localized in your Language"
+msgstr "С превод на вашия език"
+
+#: src/gs-details-page.ui:725
+msgid "Documentation"
+msgstr "Документация"
+
+#: src/gs-details-page.ui:737
+msgid "Release Activity"
+msgstr "Дейност по изданията"
+
+#: src/gs-details-page.ui:749
+msgid "System Integration"
+msgstr "Системна интеграция"
+
+#: src/gs-details-page.ui:761
+msgid "Sandboxed"
+msgstr "В пясъчник"
+
+#: src/gs-details-page.ui:786 src/gs-sources-dialog.ui:359
+msgid "Version"
+msgstr "Версия"
+
+#: src/gs-details-page.ui:823
+msgid "Age Rating"
+msgstr "Възрастово ограничение"
+
+#: src/gs-details-page.ui:861
+msgid "Updated"
+msgstr "Обновено"
+
+#: src/gs-details-page.ui:896
+msgid "Category"
+msgstr "Категория"
+
+#: src/gs-details-page.ui:934
+msgid "Installed Size"
+msgstr "Размер след инсталация"
+
+#: src/gs-details-page.ui:967
+msgid "Download Size"
+msgstr "Размер за изтегляне"
+
+#: src/gs-details-page.ui:1033
+msgid "Developer"
+msgstr "Разработчик"
+
+#: src/gs-details-page.ui:1067
+msgid "License"
+msgstr "Лиценз"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1087
+msgid "Free"
+msgstr "Свободен"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1104
+msgid "Proprietary"
+msgstr "Собственически"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1121 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "Неизвестен"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1175 src/gs-installed-page.c:487
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "Добавки"
+
+#: src/gs-details-page.ui:1188
+msgid "Selected add-ons will be installed with the application."
+msgstr "Избраните добавки ще бъдат инсталирани заедно с програмата."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1231
+msgid "Reviews"
+msgstr "Рецензии"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1247
+msgid "_Write a Review"
+msgstr "_Писане на рецензия"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1269
+msgid "_Show More"
+msgstr "_Преглед на още"
+
+#: src/gs-details-page.ui:1412
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Това означава, че програмата може да бъде свободно изпълнявана, копирана, "
+"разпространявана, изучавана и променяна."
+
+#: src/gs-details-page.ui:1471
+msgid "Proprietary Software"
+msgstr "Собственически софтуер"
+
+#: src/gs-details-page.ui:1488
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Това означава, че софтуерът се притежава от частно лице или компания. Често "
+"има ограничения относно ползването му и изходният му код обикновено е "
+"недостъпен."
+
+#: src/gs-details-page.ui:1533
+msgid "Unknown Software License"
+msgstr "Неизвестен софтуерен лиценз"
+
+#: src/gs-details-page.ui:1550
+msgid "The license terms of this software are unknown."
+msgstr "Условията на лиценза на този софтуер са неизвестни."
+
+#: src/gs-details-page.ui:1577
+msgid "The application was rated this way because it features:"
+msgstr "Програмата е оценена по този начин, защото включва:"
+
+#: src/gs-details-page.ui:1603
+msgid "No details were available for this rating."
+msgstr "Няма данни за оценката."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "Кодът на CSS е валиден!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "Файлът не може да бъде зареден"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "Незапазени промени"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "Списъкът с програми вече е зареден."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "Сливане на документите"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "Отхвърляне на промените"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "Отваряне на файл на „AppStream“"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "_Отваряне"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "_Запазване"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "Файлът не може да бъде запазен"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "Дизайнът на представящото изображение „%s“ е изтрит."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "Дизайнът на представящото изображение е изтрит."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "Списъкът с програми има незапазени промени."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr "Подробни записи в журнала"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "Дизайн на представящи изображения за GNOME"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr "Няма дизайни"
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr "Въведете съобщение за грешка"
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr "Идентификатор на програмата"
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "Обобщение"
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr "Избор на редактора"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr "Категория „Избрани“"
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr "Отмяна"
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Дизайнер на представящи изображения"
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr "Ново представящо изображение"
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr "Внасяне от файл"
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr "Изнасяне към файл"
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr "Изтриване на дизайна"
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr "Избрана програма"
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr "Надграждане на системата"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:145
+msgid " and "
+msgstr " и "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:148
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:174
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Налични шрифтове за скрипта: %s"
+msgstr[1] "Налични шрифтове за скриптовете: %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:182
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Налични програми за: %s"
+msgstr[1] "Налични програми за: %s"
+
+#: src/gs-extras-page.c:224
+msgid "Unable to Find Requested Software"
+msgstr "Търсената програма не може да бъде открита"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:322
+#, c-format
+msgid "%s not found"
+msgstr "„%s“ не е намерен"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:326
+msgid "on the website"
+msgstr "в уеб сайта"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:333
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Няма програми, които предоставят файла „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:337 src/gs-extras-page.c:348 src/gs-extras-page.c:359
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с липсващите програми, %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:344 src/gs-extras-page.c:366
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Няма програми, които поддържат „%s“."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:355
+#, c-format
+msgid "%s is not available."
+msgstr "„%s“ не е налично."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:370
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с програма, която поддържа тоци формат, %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:377
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Няма шрифтове, които поддържат скрипта „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:381
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с допълнителни шрифтове, %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:388 lib/gs-plugin-loader.c:1425
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Няма кодеци-добавки за формата „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:392
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с кодек, който може да възпроизведе този формат, %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:399
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Няма ресурси на „Plasma“ налични за поддръжката на „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:403
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с допълнителни ресурси на „Plasma“, %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:410
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Няма драйвери за принтер за „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:414
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с драйвер за този принтер, %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:459
+msgid "this website"
+msgstr "този уеб сайт"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:463
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"За съжаление кодекът „%s“, който търсехте, не може да бъде открит. "
+"Прегледайте %s за повече информация."
+msgstr[1] ""
+"За съжаление кодеците %s, които търсехте, не могат да бъдат открити. "
+"Прегледайте %s за повече информация."
+
+#: src/gs-extras-page.c:535 src/gs-extras-page.c:591 src/gs-extras-page.c:630
+msgid "Failed to find any search results"
+msgstr "Няма резултати от търсенето"
+
+#: src/gs-extras-page.c:824
+#, c-format
+msgid "%s file format"
+msgstr "Файлов формат %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Страница с кодеци"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "Добре дошли"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "Добре дошли в „Управление на програмите“"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"„Управление на програмите“ ви позволява да инсталирате всички програми, "
+"които Ви трябват, от едно централизирано място. Вижте препоръките ни, "
+"разгледайте категориите или потърсете програмите, от които се нуждаете."
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_Хайде на пазар"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "Разредка"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "Разстоянието между дъщерни елементи"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "Премахнато"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "Инсталирано"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr "Обновено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "История"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:483
+msgid "System Applications"
+msgstr "Системни програми"
+
+#: src/gs-installed-page.c:617
+msgid "Click on items to select them"
+msgstr "Избирайте елементи като натиснете върху тях"
+
+#: src/gs-installed-page.c:823
+msgid "Select"
+msgstr "Избиране"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Страница с инсталираните"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_Добавяне в папка…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "Пре_местване в папка…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "_Премахване от папката"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:74
+msgid "Software catalog is being downloaded"
+msgstr "Каталогът с програми се изтегля"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:78
+msgid "Software catalog is being loaded"
+msgstr "Каталогът с програми се зарежда"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Страница за зареждане"
+
+#: src/gs-loading-page.ui:53
+msgid "Starting up…"
+msgstr "Стартиране…"
+
+#: src/gs-menus.ui:7
+msgid "_Software Sources"
+msgstr "_Източници на софтуер"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_Относно"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "_Изход"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Страница за модериране"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "Няма рецензии за модериране"
+
+#. add button
+#: src/gs-overview-page.c:317
+msgid "More…"
+msgstr "Още…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:483
+msgid "Recommended Audio & Video Applications"
+msgstr "Препоръчани програми за музика и видео"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:488
+msgid "Recommended Games"
+msgstr "Препоръчани игри"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:493
+msgid "Recommended Graphics Applications"
+msgstr "Препоръчани програми за работа с графика"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:498
+msgid "Recommended Productivity Applications"
+msgstr "Препоръчани програми за продуктивност"
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:841
+msgid ""
+"Provides access to additional software, including web browsers and games."
+msgstr "Дава достъп до допълнителни програми, включително уеб браузъри и игри."
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:845
+msgid "Proprietary software has restrictions on use and access to source code."
+msgstr ""
+"Собственическият софтуер има ограничения спрямо начина на ползване и достъпа "
+"до изходния код."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the proprietary info bar
+#: src/gs-overview-page.c:852 src/gs-sources-dialog.c:267
+msgid "Find out more…"
+msgstr "Прочетете повече…"
+
+#. TRANSLATORS: button to turn on proprietary software sources
+#: src/gs-overview-page.c:887
+msgid "Enable"
+msgstr "Включване"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Страница за общ преглед"
+
+#: src/gs-overview-page.ui:49
+msgid "Enable Proprietary Software Sources?"
+msgstr "Включване на източниците на собственически софтуер?"
+
+#: src/gs-overview-page.ui:117
+msgid "Featured Application"
+msgstr "Страница с избраните"
+
+#: src/gs-overview-page.ui:150
+msgid "Categories"
+msgstr "Категории"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:310
+msgid "Editor’s Picks"
+msgstr "Избрано от редактора"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:348
+msgid "Recent Releases"
+msgstr "Публикувани наскоро"
+
+#: src/gs-overview-page.ui:421
+msgid "No Application Data Found"
+msgstr "Не са открити програмни данни"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:445
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "Наистина ли искате да купите „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:449
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "„%s“ ще се инсталира, а вие ще трябва да заплатите %s."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:462
+msgid "Purchase"
+msgstr "Купуване"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:535
+#, c-format
+msgid "Prepare %s"
+msgstr "Подготовка на „%s“"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:669
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "Наистина ли искате да премахнете източника „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:673
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr ""
+"Всички програми от „%s“ ще бъдат премахнати, и ако искате да ги ползвате "
+"отново, ще трябва да инсталирате източника отново."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:681
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Наистина ли искате да премахнете „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:684
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Програмата „%s“ ще бъде премахната, и ако искате да я ползвате отново, ще "
+"трябва да я инсталирате пак."
+
+#: lib/gs-plugin-loader.c:1428
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"Можете да откриете информация за „%s“, както и за възможните начини да се "
+"сдобиете с кодек, който може да възпроизведе този формат, могат да бъдат "
+"открити в уеб сайта."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:70 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Инсталирано)"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-popular-tile.c:205
+#, c-format
+msgid "Source: %s"
+msgstr "Източник: %s"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "%.2f $ (Австр.)"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "%.2f $ (Кан.)"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "%.2f ¥ (Китай)"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "%.2f €"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "%.2f £"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "%.2f ¥"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "%.2f $ (НЗ)"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "%.2f ₽"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "%.2f $ (САЩ)"
+
+#: lib/gs-price.c:129
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Част от инсталирания софтуер е несъвместим с „%s“. Ако продължите, следните "
+"пакети ще бъдат премахнати автоматично по време на надграждането:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "Несъвместим софтуер"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_Продължаване"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:98
+msgid "Hate it"
+msgstr "Отврат"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:102
+msgid "Don’t like it"
+msgstr "Не ми харесва"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:106
+msgid "It’s OK"
+msgstr "Става"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:110
+msgid "Like it"
+msgstr "Харесва ми"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:114
+msgid "Love it"
+msgstr "Страхотно"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:136
+msgid "Please take more time writing the review"
+msgstr "Отделете малко повече време за рецензията"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "Please choose a star rating"
+msgstr "Изберете оценка в брой звезди"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:144
+msgid "The summary is too short"
+msgstr "Обобщението е твърде кратко"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:148
+msgid "The summary is too long"
+msgstr "Обобщението е твърде дълго"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:152
+msgid "The description is too short"
+msgstr "Описанието е твърде кратко"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:156
+msgid "The description is too long"
+msgstr "Описанието е твърде дълго"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "Публикуване на рецензия"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "_Публикуване"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "Оценка"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Направете кратко обобщение на рецензията си, например: „Страхотна програма, "
+"препоръчвам я!“."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "Рецензия"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Какво мислите за програмата? Опитайте се да обосновете мнението си."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr "оценки общо"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Можете да докладвате рецензия, ако смятате, че тя е неуместна, груба или "
+"дискриминираща."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"След като рецензията бъде докладвана, тя ще бъде скрита, докато не бъде "
+"проверена от администратор."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "Докладване на рецензията?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "Докладване"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "Полезна ли е тази рецензия според Вас?"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "Да"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "Не"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "Без мнение"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "Докладване…"
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "Премахване…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr "Снимката не може да бъде открита"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr "Изображението не може да бъде заредено"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr "Търсеният размер на снимката не може да бъде открит"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:489
+msgid "Could not create cache"
+msgstr "Кешът не може да бъде създаден"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:550
+msgid "Screenshot not valid"
+msgstr "Снимката е неправилна"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:565
+msgid "Screenshot not available"
+msgstr "Снимката не е налична"
+
+#: src/gs-screenshot-image.c:618
+msgid "Screenshot"
+msgstr "Снимка на екрана"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:155
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "Още %u съвпадение"
+msgstr[1] "Още %u съвпадения"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Страница за търсене"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Няма намерени програми"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:832 src/gs-shell.c:837 src/gs-shell.c:852 src/gs-shell.c:856
+#, c-format
+msgid "“%s”"
+msgstr "„%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:884
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Обновленията на фърмуера не могат да бъдат изтеглени от %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:890
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Обновленията не могат да бъдат изтеглени от %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:897
+msgid "Unable to download updates"
+msgstr "Обновленията не могат да бъдат изтеглени"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:902
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "Обновленията не могат да бъдат изтеглени: няма връзка с мрежата"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:911
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Обновленията не могат да бъдат изтеглени от %s: няма достатъчно свободно "
+"място на диска"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:916
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Обновленията не могат да бъдат изтеглени: няма достатъчно свободно място на "
+"диска"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:924
+msgid "Unable to download updates: authentication was required"
+msgstr "Обновленията не могат да бъдат изтеглени: изисква се удостоверяване"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:929
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+"Обновленията не могат да бъдат изтеглени: удостоверяването беше неправилно"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:934
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Обновленията не могат да бъдат изтеглени: нямате правомощия за инсталиране "
+"на софтуер"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:941
+msgid "Unable to get list of updates"
+msgstr "Списъкът с обновления не може да бъде получен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:987
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"„%s“ не може да се инсталира, тъй като изтеглянето от „%s“ беше неуспешно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:993
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "„%s“ не може да се инсталира, тъй като изтеглянето беше неуспешно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1005
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "„%s“ не може да се инсталира, тъй като „%s“ липсва"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1011
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "„%s“ не може да се инсталира, тъй като не се поддържа"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1018
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Инсталирането е невъзможно: няма връзка с мрежата"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1024
+msgid "Unable to install: the application has an invalid format"
+msgstr "Инсталирането е невъзможно: програмата има неправилен формат"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1029
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "„%s“ не може да се инсталира: няма достатъчно свободно място на диска"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1037
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "„%s“ не може да се инсталира: изисква се удостоверяване"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1044
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "„%s“ не може да се инсталира: удостоверяването беше неправилно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1051
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"„%s“ не може да се инсталира: нямате правомощия за инсталиране на софтуер"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1064
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr "Регистрацията ви в „%s“ е прекратена."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1068
+msgid "It is not possible to install software until this has been resolved."
+msgstr ""
+"Докато този проблем не бъде отстранен, няма да можете да инсталирате софтуер."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1079
+#, c-format
+msgid "For more information, visit %s."
+msgstr "За повече информация посетете %s."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1088
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "„%s“ не може да се инсталира: изисква се захранване с кабел"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1097
+#, c-format
+msgid "Unable to install %s"
+msgstr "„%s“ не може да се инсталира"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1143
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr "„%s“ не може да се обнови от „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1149
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "„%s“ не може да се обнови, тъй като изтеглянето беше неуспешно"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1155
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Обновяването е невъзможно: няма връзка с мрежата"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1163
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "„%s“ не може да се обнови: няма достатъчно свободно място на диска"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1172
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "„%s“ не може да се обнови: изисква се удостоверяване"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1179
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "„%s“ не може да се обнови: удостоверяването беше неправилно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1186
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "„%s“ не може да се обнови: нямате правомощия за обновяване на софтуер"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1194
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "„%s“ не може да се обнови: изисква се захранване с кабел"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1203
+#, c-format
+msgid "Unable to update %s"
+msgstr "„%s“ не може да се обнови"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1248
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Надграждането до „%s“ от „%s“ е невъзможно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1253
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+"Надграждането до „%s“ е невъзможно, тъй като изтеглянето беше неуспешно"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1260
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr "Надграждането е невъзможно: няма връзка с мрежата"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1268
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+"Надграждането до „%s“ е невъзможно: няма достатъчно свободно място на диска"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1277
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Надграждането до „%s“ е невъзможно: изисква се удостоверяване"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1284
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Надграждането до „%s“ е невъзможно: удостоверяването беше неправилно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1291
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Надграждането до „%s“ е невъзможно: нямате правомощия за надграждане"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1298
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Надграждането до „%s“ е невъзможно: изисква се захранване от електрическата "
+"мрежа"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1307
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Надграждането до „%s“ е невъзможно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1349
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "„%s“ не може да се премахне: изисква се удостоверяване"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1355
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "„%s“ не може да се премахне: удостоверяването беше неправилно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1361
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"„%s“ не може да се премахне: нямате правомощия за премахване на софтуер"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1368
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+"„%s“ не може да се премахне: изисква се захранване от електрическата мрежа"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1377
+#, c-format
+msgid "Unable to remove %s"
+msgstr "„%s“ не може да се премахне"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1423
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Стартирането на „%s“ е невъзможно: липсва „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1430 src/gs-shell.c:1478 src/gs-shell.c:1526
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Няма достатъчно свободно място на диска — освободете малко място и опитайте "
+"отново"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1438 src/gs-shell.c:1486 src/gs-shell.c:1553
+msgid "Sorry, something went wrong"
+msgstr "Съжаляваме, нещо се обърка"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1473
+msgid "Failed to install file: authentication failed"
+msgstr "Неуспешно инсталиране на файла: удостоверяването беше неуспешно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Свързването с „%s“ е невъзможно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "„%s“ трябва да се рестартира, за да може да използва новите приставки."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1540
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Тази програма трябва да се рестартира, за да може да използва новите "
+"приставки."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1547
+msgid "AC power is required"
+msgstr "Изисква се захранване от електрическата мрежа"
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: src/gs-sources-dialog.c:98
+msgid "No applications or addons installed; other software might still be"
+msgstr "Няма инсталирани програми или добавки: може да има друг софтуер"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:103
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u инсталирана програма"
+msgstr[1] "%u инсталирани програми"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:110
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u инсталирана добавка"
+msgstr[1] "%u инсталирани добавки"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: src/gs-sources-dialog.c:118
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u програма"
+msgstr[1] "%u програми"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-sources-dialog.c:124
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u добавка"
+msgstr[1] "%u добавки"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-sources-dialog.c:131
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "Инсталирани: %s и %s"
+msgstr[1] "Инсталирани: %s и %s"
+
+#. TRANSLATORS: nonfree software
+#: src/gs-sources-dialog.c:257
+msgid "Typically has restrictions on use and access to source code."
+msgstr ""
+"Обикновено има различни ограничения спрямо ползването и достъпа до изходния "
+"код."
+
+#. TRANSLATORS: list header
+#: src/gs-sources-dialog.c:278
+msgid "Proprietary Software Sources"
+msgstr "Източници на собственически софтуер"
+
+#: src/gs-sources-dialog.c:498 src/gs-sources-dialog.ui:487
+msgid "Remove Source"
+msgstr "Премахване на източника"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-sources-dialog.c:584
+msgid "the operating system"
+msgstr "операционната система"
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-sources-dialog.c:677
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr ""
+"Източниците на софтуер могат да бъдат да бъдат изтеглени от Интернет. Те "
+"дават достъп до допълнителен софтуер, който не се осигурява от %s."
+
+#: src/gs-sources-dialog.ui:155
+msgid "Additional Sources"
+msgstr "Допълнителни източници"
+
+#: src/gs-sources-dialog.ui:175
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr ""
+"Ако премахнете източник, ще бъде премахнат и всичкият софтуер, който е "
+"инсталиран от него."
+
+#: src/gs-sources-dialog.ui:260
+msgid "No software installed from this source"
+msgstr "Няма инсталиран софтуер от този източник"
+
+#: src/gs-sources-dialog.ui:287
+msgid "Installed from this Source"
+msgstr "Инсталирано от този източник"
+
+#: src/gs-sources-dialog.ui:333
+msgid "Source Details"
+msgstr "Подробности за източника"
+
+#: src/gs-sources-dialog.ui:390
+msgid "Last Checked"
+msgstr "Последна проверка"
+
+#: src/gs-sources-dialog.ui:407
+msgid "Added"
+msgstr "Добавен"
+
+#: src/gs-sources-dialog.ui:424
+msgid "Website"
+msgstr "Уеб сайт"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Инсталира се)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Премахва се)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:129
+msgid "No update description available."
+msgstr "Няма информация за обновлението."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:224
+#, c-format
+msgid "Installed on %s"
+msgstr "Инсталирани на %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:244
+msgid "Installed Updates"
+msgstr "Обновленията са инсталирани"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:419
+msgid "Additions"
+msgstr "Добавяне"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:423
+msgid "Removals"
+msgstr "Премахване"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:427
+msgid "Updates"
+msgstr "Обновяване"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:431
+msgid "Downgrades"
+msgstr "Понижаване"
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "На тази система не са инсталирани обновления."
+
+#: src/gs-update-monitor.c:88
+msgid "Security Updates Pending"
+msgstr "Има чакащи обновления по сигурността"
+
+#: src/gs-update-monitor.c:89
+msgid "It is recommended that you install important updates now"
+msgstr "Препоръчително е да инсталирате важните обновления сега"
+
+#: src/gs-update-monitor.c:92
+msgid "Restart & Install"
+msgstr "Рестартиране и инсталиране"
+
+#: src/gs-update-monitor.c:96
+msgid "Software Updates Available"
+msgstr "Има налични обновления"
+
+#: src/gs-update-monitor.c:97
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Важни обновления за системата и програмите са готови за инсталиране"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:100 src/gs-updates-page.c:705
+msgid "Not Now"
+msgstr "Не сега"
+
+#: src/gs-update-monitor.c:101
+msgid "View"
+msgstr "Преглед"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:255 src/gs-updates-page.ui:46
+msgid "Operating System Updates Unavailable"
+msgstr "Няма обновления за системата"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:257
+msgid "Upgrade to continue receiving security updates."
+msgstr "Надградете, за да продължите да получавате обновления по сигурността."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:305
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Има нова версия на „%s“, която е налична за инсталиране"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:309
+msgid "Software Upgrade Available"
+msgstr "Има налично надграждане"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:610
+msgid "Software Updates Failed"
+msgstr "Обновяването беше неуспешно"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:612
+msgid "An important OS update failed to be installed."
+msgstr "Важно обновление за системата не успя да се инсталира."
+
+#: src/gs-update-monitor.c:613
+msgid "Show Details"
+msgstr "Показване на подробностите"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:635
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Обновлението е инсталирано"
+msgstr[1] "Обновленията са инсталирани"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:639
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Важно обновление за системата беше инсталирано."
+msgstr[1] "Важни обновления за системата бяха инсталирани."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:650
+msgctxt "updates"
+msgid "Review"
+msgstr "Преглед"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:697
+msgid "Failed To Update"
+msgstr "Обновяването беше неуспешно"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:703
+msgid "The system was already up to date."
+msgstr "Системата вече е напълно актуална."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:708
+msgid "The update was cancelled."
+msgstr "Обновяването беше отменено."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:714
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Няма връзка с Интернет. Уверете се, че имате връзка с Интернет и опитайте "
+"отново."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:720
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Имаше проблеми по сигурността при обновяването. Обърнете се към доставчика "
+"си на софтуер за повече информация."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:726
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Няма достатъчно свободно място на диска. Освободете малко място и опитайте "
+"отново."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:731
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Съжаляваме, но обновяването беше неуспешно. Почакайте да се появи друго "
+"обновление и опитайте отново. Ако този проблем се повтори, свържете се с "
+"доставчика си на софтуер."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:275
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:278
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:284
+msgid "Yesterday, %R"
+msgstr "Вчера, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:288
+msgid "Yesterday, %l:%M %p"
+msgstr "Вчера, %l:%M %p"
+
+#: src/gs-updates-page.c:291
+msgid "Two days ago"
+msgstr "Преди два дни"
+
+#: src/gs-updates-page.c:293
+msgid "Three days ago"
+msgstr "Преди три дни"
+
+#: src/gs-updates-page.c:295
+msgid "Four days ago"
+msgstr "Преди четири дни"
+
+#: src/gs-updates-page.c:297
+msgid "Five days ago"
+msgstr "Преди пет дни"
+
+#: src/gs-updates-page.c:299
+msgid "Six days ago"
+msgstr "Преди шест дни"
+
+#: src/gs-updates-page.c:301
+msgid "One week ago"
+msgstr "Преди седмица"
+
+#: src/gs-updates-page.c:303
+msgid "Two weeks ago"
+msgstr "Преди две седмици"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:307
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:320
+msgid "Downloading new updates…"
+msgstr "Изтегляне на обновленията…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:324
+msgid "Looking for new updates…"
+msgstr "Търсене на нови обновления…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:363
+msgid "Setting up updates…"
+msgstr "Подготовка на обновленията…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:364 src/gs-updates-page.c:371
+msgid "(This could take a while)"
+msgstr "(Това може да отнеме известно време)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:476
+#, c-format
+msgid "Last checked: %s"
+msgstr "Последна проверка: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:701
+msgid "Updates have been installed"
+msgstr "Обновленията бяха инсталирани"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:703
+msgid "A restart is required for them to take effect."
+msgstr "За да влязат в сила промените, е нужно рестартиране на системата."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:707
+msgid "Restart"
+msgstr "Рестартиране"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:768
+msgid "Integrated Firmware"
+msgstr "Интегриран фърмуеър"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:771 src/gs-updates-page.c:781
+msgid "Restart & Update"
+msgstr "Рестартиране и обновяване"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:778
+msgid "Requires Restart"
+msgstr "Изисква рестартиране"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:788
+msgid "Application Updates"
+msgstr "Програмни обновления"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:791
+msgid "Update All"
+msgstr "Обновяване на всички"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:798
+msgid "Device Firmware"
+msgstr "Фърмуеър за устройство"
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:988
+msgid "_Restart & Update"
+msgstr "_Рестартиране и обновяване"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:992
+msgid "U_pdate All"
+msgstr "_Обновяване на всички"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1090
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s вече не се поддържа."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1095
+msgid "Your OS is no longer supported."
+msgstr "Операционната ви система вече не се поддържа."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1100
+msgid "This means that it does not receive security updates."
+msgstr "Това означава, че няма да получавате повече обновления по сигурността."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1104
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Препоръчително е да надградите до по-нова версия."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1361
+msgid "Charges may apply"
+msgstr "Може да има такси"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1365
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Проверяването за обновления при използване на мобилна връзка може да "
+"натовари сметката ви."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1369
+msgid "Check Anyway"
+msgstr "Проверяване въпреки всичко"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1385
+msgid "No Network"
+msgstr "Няма връзка с мрежата"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1389
+msgid "Internet access is required to check for updates."
+msgstr "Проверката за обновления изисква връзка с Интернет."
+
+#: src/gs-updates-page.c:1794
+msgid "Restart & _Install"
+msgstr "Рестартиране и _инсталиране"
+
+#: src/gs-updates-page.c:1812
+msgid "Check for updates"
+msgstr "Проверка за обновления"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Страница с обновленията"
+
+#: src/gs-updates-page.ui:194
+msgid "Software is up to date"
+msgstr "Всички програми са с актуални версии"
+
+#: src/gs-updates-page.ui:245
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Проверяването за обновления при използване на мобилна връзка може да "
+"натовари сметката ви"
+
+#: src/gs-updates-page.ui:257
+msgid "_Check Anyway"
+msgstr "_Проверяване въпреки всичко"
+
+#: src/gs-updates-page.ui:300
+msgid "Go online to check for updates"
+msgstr "Свържете се с Интернет, за да проверим за обновления"
+
+#: src/gs-updates-page.ui:311
+msgid "_Network Settings"
+msgstr "_Мрежови настройки"
+
+#: src/gs-updates-page.ui:393
+msgid "Updates are automatically managed"
+msgstr "Обновленията да се управляват автоматично"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Вече налично: %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Изтегляне на %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s — готово за инсталиране"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "Голямо обновление с нови функционалности и по-завършен вид."
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "_Научете повече"
+
+#: src/gs-upgrade-banner.ui:98
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Препоръчително е да запазите резервни копия на данните и файловете си преди "
+"надграждането."
+
+#: src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "_Изтегляне"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Добавяне, премахване или обновяване на софтуера на този компютър"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"updates;upgrade;sources;repositories;preferences;install;uninstall;program;"
+"software;app;store;обновления;надграждане;източници;хранилища;предпочитания;"
+"настройки;инсталиране;деинсталиране;програма;софтуер;приложение;магазин;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr ""
+"Проектиране на представящи изображения за избраните програми в „Управление "
+"на програмите“"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "appstream;software;app;софтуер;програма;приложение;"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Създаване и обработка на звуци"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Изпълнение на музика"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Отстраняване на грешки"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Среди за разработка"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Изкуствен интелект"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Астрономия"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Химия"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Езици"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Математика"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Роботика"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Екшън"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Приключенски"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Аркадни"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Блокчета"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Настолни"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Карти"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Емулатори"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "За деца"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Логически"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Ролеви"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Спортни"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Стратегически"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Тримерна графика"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Фотография"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Сканиране"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Векторна графика"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Преглед"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Календар"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Бази от данни"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Финанси"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Текстови редактори"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Шрифтове"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Кодеци"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Входни устройства"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Езикови пакети"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Разширения на обвивката"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Преводи"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Драйвери"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Разговори"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Новини"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Браузъри"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Текстови редактори"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Всички"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Избрани"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Изкуство"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Биография"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Комикси"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Белетристика"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Здраве"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "История"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Начин на живот"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Политика"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Спорт"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "Звук и видео"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "Инструменти за разработка"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "Образование и наука"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "Игри"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "Графика и фотография"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "Производителност"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "Общуване и новини"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "Справка"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "Инструменти"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-appstream.c:693
+msgid "Downloading extra metadata files…"
+msgstr "Изтегляне на допълнителни файлове с метаданни…"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr "Обновления на операционната система"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr "Подобрения по производителността, стабилността и сигурността."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "Изтегляне на избраните изображения…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Поддръжка на уеб-програми"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Изпълнение на популярни уеб-програми в браузър"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:118
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Системен инсталатор за „AppStream“ на „Управление на програми“"
+
+#: plugins/external-appstream/gs-install-appstream.c:120
+msgid "Failed to parse command line arguments"
+msgstr "Аргументите подадени на програмата не могат да бъдат анализирани"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:127
+msgid "You need to specify exactly one filename"
+msgstr "Трябва да посочите само едно име на файл"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:134
+msgid "This program can only be used by the root user"
+msgstr "Тази програма може да се използва само от системния администратор"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:142
+msgid "Failed to validate content type"
+msgstr "Видът на съдържанието не може да бъде проверен"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:149
+msgid "Failed to copy"
+msgstr "Копирането е неуспешно"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:212
+msgid "Downloading upgrade information…"
+msgstr "Изтегляне на информация за надграждането…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:303
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr ""
+"Надградете своята система „Fedora“, за да използвате най-новите "
+"функционалности и подобрения."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Поддръжка на „Flatpak“"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "„Flatpak“ е система за пакетиране на програми за Линукс"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:597
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Получаване на метаданни на „flatpak“ за „%s“…"
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:2651
+msgid "Getting runtime source…"
+msgstr "Получаване на източника за изпълнимите файлове…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:797 plugins/fwupd/gs-plugin-fwupd.c:896
+msgid "Downloading firmware update signature…"
+msgstr "Изтегляне на подписа за обновлението на фърмуера…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:838 plugins/fwupd/gs-plugin-fwupd.c:942
+msgid "Downloading firmware update metadata…"
+msgstr "Изтегляне на метаданните за обновлението на фърмуера…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:1033
+msgid "Downloading firmware update…"
+msgstr "Изтегляне на обновлението на фърмуера…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Поддръжка за надграждането на фърмуера"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Осигурява поддръжка за надгражданията на фърмуера"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr "Поддръжка на „Limba“"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+"„Limba“ осигурява на разработчиците начин за лесно създаване на софтуерни "
+"пакети"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr "Изтегляне на оценките на програмата…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Поддръжка на системата „Отворени оценки за програми“"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"Системата „Отворени оценки за програми“ предоставя потребителски рецензии за "
+"програмите"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:669
+msgid "Downloading shell extension metadata…"
+msgstr "Изтегляне на метаданните за разширението на обвивката…"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:206
+msgid "Snap Store"
+msgstr "Поддръжка на „Snappy“"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr "Поддръжка на „Snappy“"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+"„Snappy“ е система за създаване и разпространение на универсални пакети за "
+"Линукс"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr "Изтегляне на страницата на програмата…"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr "Поддръжка на „Steam“"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr "Цялостната система за развлечения на „Valve“"
diff --git a/po/bn.po b/po/bn.po
new file mode 100644
index 0000000..37a5b0e
--- /dev/null
+++ b/po/bn.po
@@ -0,0 +1,3883 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Translators:
+# Aditi Kabir <aditi.kabir@gmail.com>, 2016
+# Roddy Shuler <roddy@endlessm.com>, 2016-2017
+# Shimon Sharmin <oparthib@gmail.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-12 13:14-0700\n"
+"PO-Revision-Date: 2018-06-12 20:17+0000\n"
+"Last-Translator: Roddy Shuler <roddy@endlessm.com>\n"
+"Language-Team: Bengali (http://www.transifex.com/endless-os/gnome-software/language/bn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bn\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME সফটওয়্যার"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME এর জন্য এ্যাপ্লিকেশন ম্যানেজার"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr "সফটওয়্যারের মাধ্যমে আপনি নতুন এ্যাপ্লিকেশন ও সিস্টেম সংযোজন খোঁজ ও সংস্থাপন করতে পারেন এবং বিদ্যমান সংস্থাপিত এ্যাপ্লিকেশন মুছে ফেলতে পারবেন।"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr "GNOME সফটওয়্যারে দরকারী বর্ণনাসহ এবং প্রতি এ্যাপ্লিকেশন অনুসারে একের অধিক স্ক্রিনশটসহ বৈশিষ্ট্যসম্পন্ন ও জনপ্রিয় এ্যাপ্লিকেশন প্রদর্শিত হয়। বিভাগের তালিকা অনুসারে অথবা অনুসন্ধান করে এ্যাপ্লিকেশন খুঁজে বের করা যাবে। একটি অফলাইন আপডেট ব্যবহার করে আপনার সিস্টেম আপডেট অনুমোদিত করা হয়।"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "পরিচিতি প্যানেল"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "বিস্তারিত প্যানেল"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "সংস্থাপিত প্যানেল"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "হালনাগাদ প্যানেল"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "হালনাগাদের বিস্তারিত"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1007
+msgid "The GNOME Project"
+msgstr "GNOME প্রজেক্ট"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "উপযুক্ত প্রজেক্টসমূহের একটি তালিকা"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "এটি উপযুক্ত প্রজেক্টসমূহের একটি তালিকা যা আমাদের প্রদর্শন করতে হবে যেমন GNOME, KDE এবং XFCE ।"
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates in GNOME Software"
+msgstr "GNOME সফটওয়্যারের হালনাগাদগুলো নিয়ন্ত্রণ করা হবে কিনা"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel and not perform any "
+"automatic updates actions."
+msgstr "নিষ্ক্রিয় করা হলে, GNOME সফটওয়্যার এর হালনাগাদ সূচী লুকিয়ে রাখবে এবং স্বয়ংক্রিয়ভাবে হালনাগাদ করার কোন পদক্ষেপ নেবে না।"
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically perform updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads and installs updates in "
+"the background (except for some app types like packages, where it prompts "
+"the user to install them when ready)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "মিটার সংযোগকালে স্বংক্রিয়ভাবে রিফ্রেশ হবে কিনা "
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr "যদি সক্রিয় করা থাকে, নোম সফটওয়্যার পেছনে স্বয়ংক্রিয়ভাবে রিফ্রেশ হবে এমনকি মিটারকৃত সংযোগ ব্যবহারকালেও (অবশেষে কিছু মেটাডাটা ডাউনলোড করে, হালনাগাদ করণ দেখে ইত্যাদি, যা ব্যবহারকারীকেই খরচ বহন করতে হবে)। "
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "এ্যাপ্লিকেশনের পাশে নক্ষত্র দিয়ে রেটিং প্রদর্শন করুন"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr "সংস্থাপনের আগে নন-ফ্রি এ্যাপ্লিকেশনসমূহে একটি সতর্কতামূলক বাণী দেখানো হয়"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This"
+" controls if that dialog is suppressed."
+msgstr "যখন নন-ফ্রি এ্যাপ্লিকেশনসমূহ সংস্থাপন করা হয় তখন একটি সতর্কতামূলক বাণী দেখানো যায়। সেই বাণীটি দেখানো হবে কি হবে না এটি তা নিয়ন্ত্রণ করে।"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "জনপ্রিয় এ্যাপ্লিকেশনসমূহের একটি তালিকা"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "সিস্টেম কর্তৃক নির্ধারিতগুলো বাতিল করে ব্যবহারযোগ্য এ্যাপ্লিকেশনসমূহের একটি তালিকা।"
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The list of extra sources that have been previously enabled"
+msgstr "অতিরিক্ত উৎসসমূহের একটি তালিকা যা আগে সক্রিয় করা হয়েছিল।"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid ""
+"The list of sources that have been previously enabled when installing third-"
+"party applications."
+msgstr "তৃতীয় পক্ষ এ্যাপ্লিকেশন সংস্থাপনের সময় আগে থেকে সক্রিয় করা উৎসের একটি তালিকা।"
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "শেষবার আপডেট পরীক্ষা করার সময়"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "সর্বশেষ হালনাগাদ বিজ্ঞপ্তির সময়"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "আপডেট হবার পর হওয়া প্রথম নিরাপত্তা আপডেটের সময়"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "শেষবার আপডেট হবার সময়"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0"
+" means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "এ্যাপ্লিকেশন রিভিউ করার জন্য সার্ভারের ব্যবহার"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr "রিভিউয়ের জন্য সর্বনিম্ন কার্মা স্কোর"
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "এই সংখ্যার চেয়ে কম কার্মাসহ রিভিউ প্রদর্শিত হবে না"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr "আনুষ্ঠানিক উৎসের একটি তালিকা যাদের তৃতীয় পক্ষ বিবেচনা করা হবে না"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official sources that should be considered free software"
+msgstr "আনুষ্ঠানিক উৎসের একটি তালিকা যাদের মুক্ত সফটওয়্যার বিবেচনা করা হবে"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free "
+"software"
+msgstr "যখন একটি এ্যাপ্লিকেশনকে মুক্ত সফটওয়্যার বিবেচনা করা হবে তখন যে লাইসেন্স URL ব্যবহার করা হবে"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"Install bundled applications for all users on the system where possible"
+msgstr "সিস্টেমে যেখানে সম্ভব সেখানে সকল ব্যবহারকারীর জন্য বান্ডিল এ্যাপ্লিকেশন সংস্থাপন করুন"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr "ম্যানেজমেন্ট UI ফোল্ডার প্রদর্শন করুন"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Sources dialog"
+msgstr "সফটওয়্যার উৎস বাণীতে প্রবেশাধিকার দিন"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "প্রাক-মুক্তির জন্য আপগ্রেড প্রস্তাব করুন"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "একটি এ্যাপ অ-বিনামূল্য সেটা ব্যবহারকারীকে বুঝাতে কিছু UI উপাদান প্রদর্শন করুন"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software sources"
+msgstr "অ-বিনামূল্যের সফটওয়্যার উৎসগুলো সংস্থাপন করার বিজ্ঞপ্তি প্রদর্শন"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show non-free software in search results"
+msgstr "অনুসন্ধান ফলাফলে অ-বিনামূল্যের সফটওয়্যার প্রদর্শন"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "যে URI অ-বিনামূল্য ও স্বত্বসহ সফটওয়্যার ব্যাখ্যা করে"
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "A list of non-free sources that can be optionally enabled"
+msgstr "অ-বিনামূল্য উৎসগুলোর একটি তালিকা যা ঐচ্ছিকভাবে সক্রিয় করা যায়"
+
+#: data/org.gnome.software.gschema.xml:139
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "অ্যাপসস্ট্রিম ফাইলে দেয়া ইউআরএল তালিকা অ্যাপস-ইনফো ফোল্ডারে ডাউনলোড হবে "
+
+#: data/org.gnome.software.gschema.xml:143
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "Sorts the apps shown in the overview in alphabetical order"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:151
+msgid ""
+"Overrides the name of the \"Featured\" entry in the side-filter (category "
+"list)"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "সফটওয়্যার সংস্থাপন"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "সিস্টেমে নির্বাচিত সফটওয়্যার সংস্থাপন করুন"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon
+#. file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr ""
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "সব নির্বাচিত করুন"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "কোনোটাই নির্বাচিত করবেন না"
+
+#: src/gnome-software.ui:24
+msgid "Software"
+msgstr ""
+
+#: src/gnome-software.ui:43 src/gs-sources-dialog.ui:23
+#: src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "পেছনে যান"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "_সকল"
+
+#. Translators: A label for a button to show only software which is already
+#. installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "_সংস্থাপিত"
+
+#. Translators: A label for a button to show only updates which are available
+#. to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "_আপডেটসমূহ"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-sources-dialog.ui:6
+#: src/gs-sources-dialog.ui:46
+msgid "Software Sources"
+msgstr "সফটওয়্যার উৎস"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr ""
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1478
+msgid "Network Settings"
+msgstr "নেটওয়ার্ক সেটিংস"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr ""
+
+#: src/gs-app-addon-row.c:95 src/gs-app-row.c:430
+msgid "Pending"
+msgstr "অমীমাংসিত"
+
+#: src/gs-app-addon-row.c:101 src/gs-app-row.ui:210 src/gs-app-tile.ui:51
+#: src/gs-background-tile.ui:67 src/gs-feature-tile.c:88
+#: src/gs-popular-tile.c:70
+msgid "Installed"
+msgstr "সংস্থাপিত"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: src/gs-app-addon-row.c:105 src/gs-app-row.c:218 src/gs-details-page.c:466
+msgid "Installing"
+msgstr "সংস্থাপন হচ্ছে"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: src/gs-app-addon-row.c:109 src/gs-app-row.c:224
+msgid "Removing"
+msgstr "মুছে ফেলা হচ্ছে"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "ফোল্ডারের নাম"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:342 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:612 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "_বাতিল"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_সংযুক্তি"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "এ্যাপ্লিকেশন ফোল্ডারে সংযুক্ত করুন"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:128
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "শুরুর রূপ: হয় 'আপডেট', 'আপডেট হয়েছে', 'সংস্থাপিত' অথবা 'পরিচিতি'"
+
+#: src/gs-application.c:128
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:130
+msgid "Search for applications"
+msgstr "এ্যাপ্লিকেশন অনুসন্ধান"
+
+#: src/gs-application.c:130
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:132
+msgid "Show application details (using application ID)"
+msgstr "এ্যাপ্লিকেশনের বিশদ প্রদর্শন করুন (এ্যাপ্লিকেশন ID ব্যবহার করে)"
+
+#: src/gs-application.c:132 src/gs-application.c:136
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:134
+msgid "Show application details (using package name)"
+msgstr "এ্যাপ্লিকেশনের বিশদ প্রদর্শন করুন (প্যাকেজের নাম ব্যবহার করে)"
+
+#: src/gs-application.c:134
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:136
+msgid "Install the application (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:138
+msgid "Open a local package file"
+msgstr "একটি স্থানীয় প্যাকেজ ফাইল খুলুন"
+
+#: src/gs-application.c:138
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: src/gs-application.c:140
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:143
+msgid "Show verbose debugging information"
+msgstr "শব্দবহুল ডিবাগ তথ্য প্রদর্শন করুন"
+
+#: src/gs-application.c:145
+msgid "Show profiling information for the service"
+msgstr "এই পরিসেবার জন্য প্রোফাইলিং তথ্য প্রদর্শন করুন"
+
+#: src/gs-application.c:147
+msgid "Quit the running instance"
+msgstr "চলমান কাজটি বন্ধ করুন"
+
+#: src/gs-application.c:149
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream থেকে স্থানীয় ফাইলের উৎস পছন্দ করবেন"
+
+#: src/gs-application.c:151
+msgid "Show version number"
+msgstr "ভার্সন সংখ্যা প্রদর্শন"
+
+#: src/gs-application.c:353
+msgid "translator-credits"
+msgstr "অনুবাদক-কৃতিত্ব"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:360
+#, c-format
+msgid "About %s"
+msgstr ""
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:364
+msgid "A nice way to manage the software on your system."
+msgstr "আপনার সিস্টেমে সফটওয়্যারটি পরিচালনা করার একটি ভাল উপায়।"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:171
+msgid "Visit website"
+msgstr "ওয়েবসাইটে ঘুরে আসুন"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:176
+msgid "Install…"
+msgstr "সংস্থাপন..."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:183
+msgid "Cancel"
+msgstr "বাতিল"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:192 src/gs-common.c:279 src/gs-page.c:544
+msgid "Install"
+msgstr "সংস্থাপন"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:199
+msgid "Update"
+msgstr "হালনাগাদ "
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: src/gs-app-row.c:203 src/gs-app-row.c:212 src/gs-page.c:700
+msgid "Uninstall"
+msgstr "আনইনস্টল "
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:330
+msgid "Device cannot be used during update."
+msgstr "আপডেটের সময় ডিভাইস ব্যবহার করা যাবে না।"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:340 src/gs-details-page.ui:991
+msgid "Source"
+msgstr "উৎস"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:68
+msgid "To continue you need to sign in."
+msgstr "চালিয়ে যেতে হলে আপনাকে প্রবেশ করতে হবে।"
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:72
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "চালিয়ে যেতে হলে আপনাকে প্রবেশ %s করতে হবে।"
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "ইমেইল ঠিকানা"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "আমার ইতিমধ্যেই একটি একাউন্ট আছে"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "পাসওয়ার্ড"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "আমি এখন একটি একাউন্ট নিবন্ধিত করতে আগ্রহী"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "আমি আমার পাসওয়ার্ড ভুলে গেছি"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "পরবর্তীবার স্বয়ংক্রিয়ভাবে প্রবেশ করুন"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "দুই-ধাপ বিশিষ্ট যাচাইকরণের জন্য আপনার একবার-ব্যবহারযোগ্য পিন নাম্বার প্রবেশ করান"
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "PIN"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "চালিয়ে যান"
+
+#. TRANSLATORS: This is the name and state of an app for the ATK object
+#: src/gs-background-tile.c:159 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (সংস্থাপিত)"
+
+#: src/gs-background-tile.ui:81
+msgid "Scheduled update"
+msgstr ""
+
+#: src/gs-background-tile.ui:95
+msgid "Available in a USB drive"
+msgstr ""
+
+#: src/gs-background-tile.ui:109
+msgid "Requires download"
+msgstr ""
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:193
+msgid "Other"
+msgstr "অন্যকিছু"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:198
+msgid "All"
+msgstr "সকল"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:202 src/gs-shell.c:2325
+msgid "Featured"
+msgstr "বৈশিষ্ট্যসম্পন্ন"
+
+#: src/gs-category-page.ui:81
+msgid "Extension Settings"
+msgstr "সংযোজন সেটিংস"
+
+#: src/gs-category-page.ui:110
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is"
+" recommended to disable them."
+msgstr "আপনার নিজ দায়িত্বে সংযোজনসমূহ ব্যবহার করবেন। এদের দ্বারা আপনার যদি কোন সিস্টেমজনিত সমস্যা হয়, তাহলে তাদের অকার্যকরী করে ফেলাকেই আমরা সুপারিশ করি।"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:205
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:268
+msgid "Choose an application:"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:135
+msgid "OS updates are now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:138
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:142
+#, c-format
+msgid "%s is now installed"
+msgstr "%s এখন সংস্থাপিত হয়েছে"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:145
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:151
+msgid "Launch"
+msgstr "আরম্ভ"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "তৃতীয়-পক্ষ সফটওয়্যার সংস্থাপন করুন?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+msgid "Enable Third-Party Software Source?"
+msgstr "তৃতীয়-পক্ষ সফটওয়্যার উৎস সচল করুন?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:232
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by "
+"“%s”."
+msgstr "%s <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">মুক্ত ও উন্মুক্ত উৎস সফটওয়্যার</a> নয়, এবং “%s” কর্তৃক সরবরাহকৃত।"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:242
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "“%s” দ্বারা সরবরাহকৃত %s "
+
+#. TRANSLATORS: a software source is a repo
+#: src/gs-common.c:252
+msgid "This software source must be enabled to continue installation."
+msgstr "সংস্থাপন চালিয়ে যেতে সফটওয়্যার উৎস সচল করতে হবে।"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:262
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "%s সংস্থাপন অথবা ব্যবহার কিছু দেশে বেআইনী হতে পারে।"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "এই কোডেক সংস্থাপন অথবা ব্যবহার কিছু দেশে বেআইনী হতে পারে।"
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:275
+msgid "Don’t Warn Again"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:284
+msgid "Enable and Install"
+msgstr "সচল করুন এবং সংস্থাপন করুন"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:429
+msgid "Detailed errors from the package manager follow:"
+msgstr "প্যাকেজ পরিচালনায় নিম্নো্ক্ত বিশদ ভুলসমূহ:"
+
+#: src/gs-common.c:448 src/gs-details-page.ui:579
+msgid "Details"
+msgstr "বিশদ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "অনিরাপদ অবস্থায় কার্টুন চরিত্র"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "আক্রমণাত্মক মতবিরোধে কার্টুন চরিত্র"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "কার্টুন চরিত্র নিয়ে স্পষ্ট দ্বন্দ্ব"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "অনিরাপদ অবস্থানে থাকা চরিত্রগুলোকে সহজেই বাস্তব থেকে আলাদা করা যায়"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "আক্রমণাত্মক মতবিরোধে থাকা চরিত্রগুলোকে সহজেই বাস্তব থেকে আলাদা করা যায়"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "স্পষ্ট দ্বন্দ্বকে সহজেই বাস্তব থেকে আলাদা করা যায়"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "অনিরাপদ পরিস্থিতিতে কিছুটা বাস্তব চরিত্রসমূহ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "আক্রমণাত্মক দ্বন্দ্বে বাস্তব চরিত্রসমূহের রূপায়ণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "বাস্তব চরিত্র নিয়ে স্পষ্ট দ্বন্দ্ব"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "অবাস্তবিক রক্তপাত"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "বাস্তবিক রক্তপাত"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "রক্তপাতের চিত্রায়ণ এবং শারিরীক অঙ্গপ্রত্যঙ্গের বিকৃতি"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "ধর্ষণ অথবা অন্য যৌন আচরণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "মদ্যপ পানীয়ের প্রসঙ্গ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "মদ্যপ পানীয়ের ব্যবহার"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "অবৈধ মাদকের প্রসঙ্গ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "অবৈধ মাদকের ব্যবহার"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "তামাকজাতীয় দ্রব্যের প্রসঙ্গ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "তামাকজাতীয় দ্রব্যের ব্যবহার"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "সংক্ষিপ্ত শৈল্পিক নগ্নতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "সম্প্রসারিত নগ্নতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "উত্তেজক প্রসঙ্গ অথবা চিত্রায়ণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "যৌন প্রসঙ্গ অথবা চিত্রায়ণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "স্পষ্ট যৌন আচরণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "ধর্মদ্রোহিতার হালকা অথবা অনিয়মিত ব্যবহার"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "ধর্মদ্রোহিতার মাঝারি ব্যবহার"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "ধর্মদ্রোহিতার শক্তিশালী অথবা নিয়মিত ব্যবহার"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "অস্বস্তিকর রসিকতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "অমার্জিত অথবা বাথরুম রসিকতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "বয়স্ক বা যৌন রসিকতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "কোন নির্দিষ্ট দলের মানুষদের প্রতি নেতিবাচক আচরণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "মানসিক ক্ষতিসাধন করার জন্য সাজানো বৈষম্যমূলক আচরণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "লিঙ্গ, যৌনতা, বর্ণ অথবা ধর্ম নিয়ে সুস্পষ্ট বৈষম্যমূলক আচরণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "দ্রব্যের স্থান নির্ধারণ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "নির্দিষ্ট ব্র্যান্ড বা ট্রেডমার্কের কোন পণ্যের সুস্পষ্ট প্রসঙ্গ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Players are encouraged to purchase specific real-world items"
+msgstr "খেলোয়াড়দেরকে নির্দিষ্ট বাস্তব-দুনিয়ার পণ্য কিনতে উৎসাহিত করা হয়"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "সাধারণ কোন স্থানে টোকেন বা ধারের মাধ্যমে জুয়া"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "আসল টাকা ব্যবহারের মাধ্যমে জুয়া"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Ability to spend real money in-game"
+msgstr "খেলায় আসল টাকা ব্যবহারের ক্ষমতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "No way to chat with other players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Player-to-player game interactions without chat functionality"
+msgstr "খেলার মধ্যে আড্ডার কার্যকারিতাসহ খেলোয়াড়ের সাথে খেলোয়াড়ের মিথষ্ক্রিয়া"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "Player-to-player preset interactions without chat functionality"
+msgstr "খেলার মধ্যে আড্ডার কার্যকারিতা ছাড়া খেলোয়াড়ের সাথে খেলোয়াড়ের পূর্ব নির্ধারিত মিথষ্ক্রিয়া"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Uncontrolled chat functionality between players"
+msgstr "খেলোয়াড়দের মধ্যে অনিয়ন্ত্রিত আড্ডার কার্যকারিতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "No way to talk with other players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "Uncontrolled audio or video chat functionality between players"
+msgstr "খেলোয়াড়দের মধ্যে অনিয়ন্ত্রিত অডিও অথবা ভিডিও আড্ডার কার্যকারিতা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing social network usernames or email addresses"
+msgstr "সামাজিক নেটওয়ার্কের ব্যবহারকারী নাম অথবা ইমেইল ঠিকানা ভাগাভাগি করা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "No sharing of user information with 3rd parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "Sharing user information with 3rd parties"
+msgstr "3rd পক্ষের সাথে ব্যবহারকারীর তথ্য ভাগাভাগি করা"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location to other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing physical location to other users"
+msgstr "অন্য খেলোয়াড়দের সাথে শারিরীক অবস্থান ভাগাভাগি করা"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is
+#. unknown
+#: src/gs-dbus-helper.c:294
+msgid "An application"
+msgstr "একটি এ্যাপ্লিকেশন"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. MIME types.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s অতিরিক্ত ফাইল ফরম্যাটে সমর্থনের জন্য অনুরোধ করছে।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional MIME Types Required"
+msgstr "অতিরিক্ত MIME ধরণ প্রয়োজন"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. fonts.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s অতিরিক্ত ফন্টের জন্য অনুরোধ করছে।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Fonts Required"
+msgstr "অতিরিক্ত ফন্ট প্রয়োজন"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. codecs.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s অতিরিক্ত মাল্টিমিডিয়া কোডেকের জন্য অনুরোধ করছে।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Multimedia Codecs Required"
+msgstr "অতিরিক্ত মাল্টিমিডিয়া কোডেক প্রয়োজন"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. printer drivers.
+#: src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s অতিরিক্ত প্রিন্টার ড্রাইভার অনুরোধ করছে।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:320
+msgid "Additional Printer Drivers Required"
+msgstr "অতিরিক্ত প্রিন্টার ড্রাইভার প্রয়োজন"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install
+#. additional packages.
+#: src/gs-dbus-helper.c:324
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s অতিরিক্ত প্যাকেজ অনুরোধ করছে।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:326
+msgid "Additional Packages Required"
+msgstr "অতিরিক্ত প্যাকেজ প্রয়োজন"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:335
+msgid "Find in Software"
+msgstr "সফটওয়্যারে অনুসন্ধান করুন"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#: src/gs-details-page.c:296 src/gs-details-page.c:330
+#: src/gs-details-page.ui:237
+msgid "_Install"
+msgstr "_সংস্থাপন"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed but needs to be downloaded first
+#: src/gs-details-page.c:300 src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "_ডাউনলোড"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:334
+msgid "_Update"
+msgstr "_আপডেট"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: src/gs-details-page.c:346
+msgid "_Install…"
+msgstr "_সংস্থাপন..."
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:393 src/gs-details-page.ui:536
+msgid "_Uninstall"
+msgstr "_আনইনস্টল "
+
+#: src/gs-details-page.c:461
+msgid "Removing…"
+msgstr "সরানো হচ্ছে..."
+
+#: src/gs-details-page.c:480
+msgid "Pending installation…"
+msgstr ""
+
+#: src/gs-details-page.c:487
+msgid "Pending update…"
+msgstr ""
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:844
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "সক্রিয় ইন্টারনেট সংযোগ থাকলেই শুধুমাত্র এই এ্যাপ্লিকেশনটি ব্যবহার করা যাবে।"
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:988
+msgctxt "version"
+msgid "Unknown"
+msgstr "অপরিচিত"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1024
+msgctxt "updated"
+msgid "Never"
+msgstr ""
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1072
+msgctxt "origin"
+msgid "Unknown"
+msgstr "অপরিচিত"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1481
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1610
+#, c-format
+msgid "Unable to find “%s”"
+msgstr ""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2217
+msgid "Public domain"
+msgstr "সর্বজনীন ডোমেইন"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2233 src/gs-details-page.ui:1386
+msgid "Free Software"
+msgstr "উন্মুক্ত সফটওয়্যার"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2290
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "ব্যবহারকারীরা নিম্নোক্ত লাইসেন্সসমূহ দ্বারা আবদ্ধ:"
+msgstr[1] "ব্যবহারকারীরা নিম্নোক্ত লাইসেন্সসমূহ দ্বারা আবদ্ধ:"
+
+#: src/gs-details-page.c:2306 src/gs-details-page.ui:1495
+msgid "More information"
+msgstr "আরো তথ্য"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "বিশদ পাতা"
+
+#. Translators: A label for a button to add a shortcut to the selected
+#. application.
+#: src/gs-details-page.ui:209
+msgid "_Add to Desktop"
+msgstr "_ডেস্কটপে যোগ করুন "
+
+#. Translators: A label for a button to remove a shortcut to the selected
+#. application.
+#: src/gs-details-page.ui:226
+msgid "_Remove from Desktop"
+msgstr "_ডেস্কটপ থেকে সরান "
+
+#. Translators: A label for a button to execute the selected application.
+#: src/gs-details-page.ui:259
+msgid "_Launch"
+msgstr "_আরম্ভ"
+
+#: src/gs-details-page.ui:439
+msgid "No screenshot provided"
+msgstr "কোন স্ক্রিনশট দেয়া হয়নি"
+
+#: src/gs-details-page.ui:475
+msgid "Software Source Included"
+msgstr "সফটওয়্যার উৎস সংযোজিত"
+
+#: src/gs-details-page.ui:476
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr "এই এ্যাপ্লিকেশনে একটি সফটওয়্যার উৎস সংযোজিত আছে যাতে আপডেট, ও সেইসাথে অন্যান্য সফটওয়্যারে প্রবেশাধিকার সরবরাহ করা হয়েছে।"
+
+#: src/gs-details-page.ui:489
+msgid "No Software Source Included"
+msgstr "কোন সফটওয়্যার উৎস সংযোজিত হয়নি"
+
+#: src/gs-details-page.ui:490
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr "এই এ্যাপ্লিকেশনে কোন সফটওয়্যার উৎস উল্লেখ করা হয়নি। কোন নতুন ভার্সন দ্বারা এটি আপডেট হবে না।"
+
+#: src/gs-details-page.ui:504
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "আপনার বিতরণকারী দ্বারা এই সফটওয়্যারটি ইতিমধ্যেই সরবরাহ করা হয়েছে এবং পরিবর্তন করা ঠিক হবে না।"
+
+#. Translators: a repository file used for installing software has been
+#. discovered.
+#: src/gs-details-page.ui:517
+msgid "Software Source Identified"
+msgstr "সফটওয়্যার উৎস চিহ্নিত"
+
+#: src/gs-details-page.ui:518
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr "এই সফটওয়্যার উৎস সংযুক্ত করলে এটি আপনাকে অন্যান্য সফটওয়্যার ও আপগ্রেডে প্রবেশাধিকার দেবে।"
+
+#: src/gs-details-page.ui:519
+msgid "Only use software sources that you trust."
+msgstr "শুধুমাত্র যে সকল সফটওয়্যার উৎসে আস্থা আছে তাদের ব্যবহার করুন।"
+
+#: src/gs-details-page.ui:551
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:592
+msgid "Developer _Website"
+msgstr "ওয়েবসাইট_উন্নয়নকারী "
+
+#: src/gs-details-page.ui:704
+msgid "Localized in your Language"
+msgstr "আপনার স্থানীয় ভাষায় পরিবর্তন করুন"
+
+#: src/gs-details-page.ui:716
+msgid "Documentation"
+msgstr "নথিপত্র"
+
+#: src/gs-details-page.ui:728
+msgid "Release Activity"
+msgstr "কর্মকান্ড খালাস"
+
+#: src/gs-details-page.ui:740
+msgid "System Integration"
+msgstr "সিস্টেম ইন্টেগ্রেশন"
+
+#: src/gs-details-page.ui:752
+msgid "Sandboxed"
+msgstr "স্যান্ডবক্স"
+
+#: src/gs-details-page.ui:777 src/gs-sources-dialog.ui:365
+msgid "Version"
+msgstr "ভার্সন"
+
+#: src/gs-details-page.ui:814
+msgid "Age Rating"
+msgstr ""
+
+#: src/gs-details-page.ui:852
+msgid "Updated"
+msgstr "আপডেট হয়েছে"
+
+#: src/gs-details-page.ui:887
+msgid "Category"
+msgstr "বিভাগ"
+
+#: src/gs-details-page.ui:925
+msgid "Installed Size"
+msgstr "সংস্থাপিত আকৃতি"
+
+#: src/gs-details-page.ui:958
+msgid "Download Size"
+msgstr "ডাউনলোড আকৃতি"
+
+#: src/gs-details-page.ui:1024
+msgid "Developer"
+msgstr "ডেভেলপার"
+
+#: src/gs-details-page.ui:1058
+msgid "License"
+msgstr "লাইসেন্স"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1078
+msgid "Free"
+msgstr "বিনামূল্য"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1095
+msgid "Proprietary"
+msgstr "মালিকানা"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1112 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "অপরিচিত"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#: src/gs-details-page.ui:1166 src/gs-installed-page.c:490
+msgid "Add-ons"
+msgstr "এ্যাড-অন"
+
+#: src/gs-details-page.ui:1179
+msgid "Selected add-ons will be installed with the application."
+msgstr "নির্বাচিত এ্যাড-অনসমূহ এ্যাপ্লিকেশনের সাথে সংস্থাপিত হবে।"
+
+#. Translators: Header of the section with other users' opinions about the
+#. app.
+#: src/gs-details-page.ui:1222
+msgid "Reviews"
+msgstr "রিভিউ"
+
+#. Translators: Button opening a dialog where the users can write and publish
+#. their opinions about the apps.
+#: src/gs-details-page.ui:1238
+msgid "_Write a Review"
+msgstr "_একটি রিভিউ লিখুন"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1260
+msgid "_Show More"
+msgstr "_আরো প্রদর্শন করুন"
+
+#: src/gs-details-page.ui:1403
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied"
+" and modified."
+msgstr "এর অর্থ হচ্ছে এই সফটওয়্যারটি অবাধে চালানো, কপি করা, বিতরণ করা, গবেষণা করা এবং পরিবর্তন করা যাবে।"
+
+#: src/gs-details-page.ui:1462
+msgid "Proprietary Software"
+msgstr "স্বত্বাধিকৃত সফটওয়্যার"
+
+#: src/gs-details-page.ui:1479
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr "এর অর্থ হচ্ছে এই সফটওয়্যারটি একজন ব্যক্তি বা একটি সংস্থা দ্বারা স্বত্বাধিকৃত। এর ব্যবহারের উপর প্রায়ই সীমাবদ্ধতা থাকবে এবং এর সোর্স কোডসমূহে সাধারণত প্রবেশাধিকার থাকবে না।"
+
+#: src/gs-details-page.ui:1524
+msgid "Unknown Software License"
+msgstr "অপরিচিত সফটওয়্যার লাইসেন্স"
+
+#: src/gs-details-page.ui:1541
+msgid "The license terms of this software are unknown."
+msgstr "এই সফটওয়্যারের লাইসেন্সের শর্তসমূহ অপরিচিত।"
+
+#: src/gs-details-page.ui:1568
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1594
+msgid "No details were available for this rating."
+msgstr ""
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr ""
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr ""
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr ""
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr ""
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr ""
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr ""
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr ""
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr ""
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr ""
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr ""
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr ""
+
+#. TRANSLATORS: program name, an application to add and remove software
+#. repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr ""
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr ""
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr ""
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr ""
+
+#: src/gs-editor.ui:296
+msgid "Name"
+msgstr ""
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "সারাংশ"
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr ""
+
+#. This check button controls whether the application’s banner appears in the
+#. “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr ""
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr ""
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr ""
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr ""
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr ""
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr ""
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr ""
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr ""
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:146
+msgid " and "
+msgstr "এবং"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:149
+msgid ", "
+msgstr ","
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:175
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s স্ক্রিপ্টের জন্য সহজলভ্য ফন্টসমূহ"
+msgstr[1] "%s স্ক্রিপ্টের জন্য সহজলভ্য ফন্টসমূহ"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:183
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s জন্য সহজলভ্য সফটওয়্যার"
+msgstr[1] "%s জন্য সহজলভ্য সফটওয়্যার"
+
+#: src/gs-extras-page.c:225
+msgid "Unable to Find Requested Software"
+msgstr "অনুরোধকৃত সফটওয়্যার পাওয়া যায়নি"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:325
+#, c-format
+msgid "%s not found"
+msgstr "%s পাওয়া যায়নি"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:329
+msgid "on the website"
+msgstr "ওয়েবসাইটে"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:336
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "%s ফাইলটি সরবরাহ করার মতো কোন এ্যাপ্লিকেশন পাওয়া যায়নি।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:351 src/gs-extras-page.c:362
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications"
+" might be found %s."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে হারিয়ে যাওয়া এ্যাপ্লিকেশন পাবার উপায়সমূহ হয়তো %s পাওয়া যাবে।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:347 src/gs-extras-page.c:369
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s সমর্থনের জন্য কোন এ্যাপ্লিকেশন পাওয়া যায়নি।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:358
+#, c-format
+msgid "%s is not available."
+msgstr "%s পাওয়া যায়নি।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:373
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে এই ফরম্যাট চালানোর জন্য এ্যাপ্লিকেশন পাবার উপায়সমূহ %s পাওয়া যাবে।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:380
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s স্ক্রিপ্ট সমর্থনের জন্য কোন ফন্ট পাওয়া যায়নি।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:384
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে অতিরিক্ত ফন্ট পাবার উপায়সমূহ হয়তো %s পাওয়া যাবে।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:391 lib/gs-plugin-loader.c:1458
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s ফরম্যাটে কোন এ্যাডঅন কোডেক পাওয়া যায়নি।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:395
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে এই ফরম্যাট চালানোর জন্য কোডেক পাবার উপায়সমূহ %s পাওয়া যাবে।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:402
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s সমর্থনের জন্য কোন প্লাজমা সংস্থান পাওয়া যায়নি।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:406
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে অতিরিক্ত প্লাজমা সংস্থান পাবার উপায়সমূহ হয়তো %s পাওয়া যাবে।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:413
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s জন্য কোন প্রিন্টার ড্রাইভার পাওয়া যায়নি।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:417
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে এই প্রিন্টার সমর্থন দেবার মতো ড্রাইভার পাবার উপায়সমূহ হয়তো %s পাওয়া যাবে।"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:462
+msgid "this website"
+msgstr "এই ওয়েবসাইট"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual
+#. codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:466
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "দুর্ভাগ্যক্রমে, আপনি যে %s অনুসন্ধান করছে তা পাওয়া যায়নি। আরো তথ্যের জন্য অনুগ্রহ করে %s দেখুন।"
+msgstr[1] "দুর্ভাগ্যক্রমে, আপনি যে %s অনুসন্ধান করছে তা পাওয়া যায়নি। আরো তথ্যের জন্য অনুগ্রহ করে %s দেখুন।"
+
+#: src/gs-extras-page.c:538 src/gs-extras-page.c:594 src/gs-extras-page.c:633
+msgid "Failed to find any search results"
+msgstr "অনুসন্ধান করে ফললাভ করতে ব্যর্থ"
+
+#: src/gs-extras-page.c:827
+#, c-format
+msgid "%s file format"
+msgstr "%s ফাইল ফরম্যাট"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "কোডেকস পাতা"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "স্বাগতম"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "সফটওয়্যারে স্বাগতম"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See"
+" our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr "এই সফটওয়্যারের সাহায্যে আপনার প্রয়োজনীয় সকল সফটওয়্যার সংস্থাপন করে নিন একটিমাত্র জায়গা থেকে। আমাদের সুপারিশসমূহ দেখুন, বিভাগগুলো ঘুরে দেখুন অথবা আপনি যে এ্যাপ্লিকেশনটি চান তা অনুসন্ধান করুন।"
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_চলুন কেনাকাটা করি"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "স্পেসিং"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "বাচ্চাদের মাঝে জায়গার পরিমাণ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "মুছে ফেলা হয়েছে"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "সংস্থাপিত হয়েছে"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr "আপডেট করা হয়েছে"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "অপরিচিত"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "ইতিহাস"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:486
+msgid "System Applications"
+msgstr "সিস্টেম এ্যাপ্লিকেশন"
+
+#: src/gs-installed-page.c:620
+msgid "Click on items to select them"
+msgstr "নির্বাচিত করতে উক্ত বস্তুতে চাপ দিন"
+
+#: src/gs-installed-page.c:826
+msgid "Select"
+msgstr "নির্বাচিত করুন"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "সংস্থাপিত পাতা"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_ফোল্ডারে সংযুক্তি..."
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "_ফোল্ডারে সরান..."
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "_ফোল্ডার থেকে সরান"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:76
+msgid "Software catalog is being downloaded"
+msgstr "সফটওয়্যার ক্যাটালগ ডাউনলোড হচ্ছে"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:80
+msgid "Software catalog is being loaded"
+msgstr "সফটওয়্যার ক্যাটালগ জমা হচ্ছে"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "পাতা জমা হচ্ছে"
+
+#: src/gs-loading-page.ui:37
+msgid "Starting up…"
+msgstr "শুরু হচ্ছে..."
+
+#: src/gs-menus.ui:7
+msgid "_Software Sources"
+msgstr "_সফটওয়্যার উৎস"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_সম্পর্কে"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "_বেরিয়ে যান"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "পরীক্ষক পাতা"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "পরীক্ষা করার জন্য কোন রিভিউ নেই"
+
+#. add button
+#: src/gs-overview-page.c:372
+msgid "More…"
+msgstr "আরো..."
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:588
+msgid "Recommended Audio & Video Applications"
+msgstr "সুপারিশকৃত অডিও ও ভিডিও এ্যাপ্লিকেশনসমূহ"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:593
+msgid "Recommended Games"
+msgstr "সুপারিশকৃত খেলাসমূহ"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:598
+msgid "Recommended Graphics Applications"
+msgstr "সুপারিশকৃত গ্রাফিক্স এ্যাপ্লিকেশনসমূহ"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:603
+msgid "Recommended Productivity Applications"
+msgstr "সুপারিশকৃত প্রমোদ এ্যাপ্লিকেশনসমূহ"
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:992
+msgid ""
+"Provides access to additional software, including web browsers and games."
+msgstr "ওয়েব ব্রাউজার ও খেলাসহ, অতিরিক্ত সফটওয়্যারে প্রবেশাধিকার দেয়।"
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:996
+msgid ""
+"Proprietary software has restrictions on use and access to source code."
+msgstr "স্বত্বসহ সফটওয়্যারের ব্যবহার ও এর উৎস কোডে প্রবেশাধিকারে বিধিনিষেধ রয়েছে।"
+
+#. TRANSLATORS: this is the clickable
+#. * link on the proprietary info bar
+#: src/gs-overview-page.c:1003 src/gs-sources-dialog.c:290
+msgid "Find out more…"
+msgstr "আরো জানুন..."
+
+#. TRANSLATORS: button to turn on proprietary software sources
+#: src/gs-overview-page.c:1054
+msgid "Enable"
+msgstr "সক্রিয় করুন"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "পরিচিতি পাতা"
+
+#: src/gs-overview-page.ui:54
+msgid "Enable Proprietary Software Sources?"
+msgstr "স্বত্বসহ সফটওয়্যারের উৎসগুলো সক্রিয় করবেন?"
+
+#: src/gs-overview-page.ui:122
+msgid "Featured Application"
+msgstr ""
+
+#: src/gs-overview-page.ui:155
+msgid "Categories"
+msgstr "বিভাগ"
+
+#. Translators: This is a heading for software which has been featured
+#. ('picked') by the distribution.
+#: src/gs-overview-page.ui:315
+msgid "Editor’s Picks"
+msgstr ""
+
+#. Translators: This is a heading for software which has been recently
+#. released upstream.
+#: src/gs-overview-page.ui:359
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:446
+msgid "No Application Data Found"
+msgstr "কোন এ্যাপ্লিকেশন তথ্য পাওয়া যায়নি"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:445
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:449
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr ""
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:462
+msgid "Purchase"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:535
+#, c-format
+msgid "Prepare %s"
+msgstr "%s তৈরি করুন"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:669
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "আপনি কি নিশ্চিত আপনি %s উ্ৎসটি মুছতে চান?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:673
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr "%s থেকে সকল এ্যাপ্লিকেশন মুছে ফেলা হবে, এবং এদের ব্যবহার করতে হলে আপনাকে আবার উৎসটি পুনঃসংস্থাপন করতে হবে।"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:681
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "আপনি কি নিশ্চিত আপনি %s মুছতে চান?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:684
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s মুছে ফেলা হবে, এবং এটা ব্যবহার করতে হলে আপনাকে আবার সংস্থাপিত করতে হবে।"
+
+#: lib/gs-plugin-loader.c:1461
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr "%s সম্পর্কে তথ্য, সেইসাথে এই ফরম্যাট চালানোর জন্য কোডেক পাবার উপায়সমূহ এই ওয়েবসাইটে পাওয়া যাবে।"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr ""
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr ""
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr ""
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr ""
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr ""
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr ""
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr ""
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr ""
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr ""
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr ""
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr "বর্তমানে সংস্থাপিত সফটওয়্যারসমূহের মধ্যে কিছু সংখ্যক %s সাথে সামঞ্জস্যপূর্ণ নয়। আপনি যদি চালাতে থাকেন, তবে আপগ্রেডের সময় নিম্নোক্তগুলো স্বয়ংক্রিয়ভাবে সরিয়ে ফেলা হবে:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "অসঙ্গতিপূর্ণ সফটওয়্যার"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_চলবে"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:98
+msgid "Hate it"
+msgstr "ঘৃণা করছি"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:102
+msgid "Don’t like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:106
+msgid "It’s OK"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:110
+msgid "Like it"
+msgstr "পছন্দ হয়েছে"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:114
+msgid "Love it"
+msgstr "খুব ভাল লেগেছে"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:136
+msgid "Please take more time writing the review"
+msgstr "অনুগ্রহ করে রিভিউ লিখতে আরো সময় নিন"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "Please choose a star rating"
+msgstr "অনুগ্রহ করে একটি নক্ষত্র রেটিং বেছে নিন"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:144
+msgid "The summary is too short"
+msgstr "এই সারাংশটি বেশি ছোট"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:148
+msgid "The summary is too long"
+msgstr "এই সারাংশটি বেশি লম্বা"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:152
+msgid "The description is too short"
+msgstr "এই বর্ণনাটি বেশি ছোট"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:156
+msgid "The description is too long"
+msgstr "এই বর্ণনাটি বেশি লম্বা"
+
+#. Translators: Title of the dialog box where the users can write and publish
+#. their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "রিভিউ পোস্ট করুন"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "_পোস্ট"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "রেটিং"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "আপনার রিভিউয়ের জন্য একটি ছোট সারাংশ লিখুন, উদাহরণস্বরূপ: \"দারুণ এ্যাপ, আমি সুপারিশ করছি।\""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "রিভিউ"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "এ্যাপটি সম্পর্কে আপনার মতামত কী? আপনার মতামতের পেছনে কারণ দেখানোর চেষ্টা করুন।"
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "অবমাননাকর, অভদ্র বা বৈষম্যমূলক আচরণের জন্য আপনি কোন রিভিউ সম্পর্কে অভিযোগ জানাতে পারেন।"
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "একবার অভিযোগ জানালে, উক্ত রিভিউটি একজন প্রশাসক দ্বারা পরীক্ষা না করা পর্যন্ত লুকানো থাকবে।"
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "রিভিউ সম্পর্কে অভিযোগ করবেন?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "অভিযোগ"
+
+#. Translators: Users can express their opinions about other users' opinions
+#. about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "এই রিভিউ পড়ে কি আপনার কোন সাহায্য হয়েছে?"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "হ্যাঁ"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "না"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "এহ"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "অভিযোগ..."
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "মুছে ফেলুন..."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr "স্ক্রিনশট পাওয়া যায়নি"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr "ছবি আনতে ব্যর্থ"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr "স্ক্রিনশটের আকৃতি পাওয়া যায়নি"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:491
+msgid "Could not create cache"
+msgstr "ক্যাশ তৈরি করা যায়নি"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:552
+msgid "Screenshot not valid"
+msgstr "স্ক্রিনশট কার্যকরী নয়"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:567
+msgid "Screenshot not available"
+msgstr "স্ক্রিনশট পাওয়া যায়নি"
+
+#: src/gs-screenshot-image.c:626
+msgid "Screenshot"
+msgstr "স্ক্রিনশট"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:157
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "অনুসন্ধান পাতা"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "কোন এ্যাপ্লিকেশন পাওয়া যায়নি"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:890 src/gs-shell.c:895 src/gs-shell.c:910 src/gs-shell.c:914
+#, c-format
+msgid "“%s”"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:942
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:948
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955
+msgid "Unable to download updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:960
+msgid ""
+"Unable to download updates: internet access was required but wasn’t "
+"available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:969
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:974
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:982
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:987
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:992
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:999
+msgid "Unable to get list of updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1045
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1051
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1063
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1069
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1076
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1082
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1087
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1095
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1102
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1122
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1126
+msgid "It is not possible to install software until this has been resolved."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1137
+#, c-format
+msgid "For more information, visit %s."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1146
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1155
+#, c-format
+msgid "Unable to install %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1201
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1207
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1213
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1221
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1230
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1237
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1244
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1252
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1261
+#, c-format
+msgid "Unable to update %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1306
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1326
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1335
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1342
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1349
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1356
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1407
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1413
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1419
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1426
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1481
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1488 src/gs-shell.c:1536 src/gs-shell.c:1584
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1496 src/gs-shell.c:1544 src/gs-shell.c:1611
+msgid "Sorry, something went wrong"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1531
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1578
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1593
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1598
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1605
+msgid "AC power is required"
+msgstr ""
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: src/gs-sources-dialog.c:109
+msgid "No applications or addons installed; other software might still be"
+msgstr "কোনো এ্যাপ্লিকেশন অথবা এ্যাডঅন সংস্থাপন করা নেই; অন্য সফটওয়্যার থাকতে পারে"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:114
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u এ্যাপ্লিকেশনসমূহ সংস্থাপিত"
+msgstr[1] "%u এ্যাপ্লিকেশনসমূহ সংস্থাপিত"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:121
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u এ্যাড-অন সংস্থাপিত"
+msgstr[1] "%u এ্যাড-অনসমূহ সংস্থাপিত"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: src/gs-sources-dialog.c:129
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u এ্যাপ্লিকেশন"
+msgstr[1] "%u এ্যাপ্লিকেশনসমূহ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-sources-dialog.c:135
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u এ্যাড-অন"
+msgstr[1] "%u এ্যাড-অনসমূহ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-sources-dialog.c:142
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s এবং %s সংস্থাপিত"
+msgstr[1] "%s এবং %s সংস্থাপিত"
+
+#. TRANSLATORS: nonfree software
+#: src/gs-sources-dialog.c:280
+msgid "Typically has restrictions on use and access to source code."
+msgstr "সাধারণত ব্যবহার ও উৎস কোডে প্রবেশাধিকারে বিধিনিষেধ রয়েছে।"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-sources-dialog.c:587
+msgid "the operating system"
+msgstr "অপারেটিং সিস্টেম"
+
+#. TRANSLATORS: list header
+#: src/gs-sources-dialog.c:679
+msgid "Proprietary Software Sources"
+msgstr "স্বত্বসহ সফটওয়্যারের উৎসগুলো"
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-sources-dialog.c:687
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr "সফটওয়্যার উৎসসমূহ ইন্টারনেট থেকে ডাউনলোড করা যাবে। সেসব অতিরিক্ত সফটওয়্যারে প্রবেশাধিকার দেয় যা %s কর্তৃক সরবরাহকৃত নয়।"
+
+#: src/gs-sources-dialog.ui:161
+msgid "Additional Sources"
+msgstr "অতিরিক্ত উৎসগুলো"
+
+#: src/gs-sources-dialog.ui:181
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr "একটি উৎস মুছে ফেলার মানে সেই উৎস থেকে যে সফটওয়্যার সংস্থাপন করা হয়েছে তাও মুছে ফেলা।"
+
+#: src/gs-sources-dialog.ui:266
+msgid "No software installed from this source"
+msgstr "এই উৎস থেকে কোন সফটওয়্যার সংস্থাপন করা হয়নি"
+
+#: src/gs-sources-dialog.ui:293
+msgid "Installed from this Source"
+msgstr "এই উৎস থেকে সংস্থাপন করা হয়েছে"
+
+#: src/gs-sources-dialog.ui:339
+msgid "Source Details"
+msgstr "উৎসের বিশদ"
+
+#: src/gs-sources-dialog.ui:396
+msgid "Last Checked"
+msgstr "শেষবার পরীক্ষা করা হয়েছে"
+
+#: src/gs-sources-dialog.ui:413
+msgid "Added"
+msgstr "সংযুক্ত"
+
+#: src/gs-sources-dialog.ui:430
+msgid "Website"
+msgstr "ওয়েবসাইট"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (সংস্থাপিত হচ্ছে)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (সরানো হচ্ছে)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:129
+msgid "No update description available."
+msgstr "কোন আপডেটের বর্ণনা পাওয়া যায়নি"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:224
+#, c-format
+msgid "Installed on %s"
+msgstr "%s সংস্থাপিত"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:244
+msgid "Installed Updates"
+msgstr "আপডেট সংস্থাপিত করা হয়েছে"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:420
+msgid "Additions"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:424
+msgid "Removals"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:428
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:432
+msgid "Downgrades"
+msgstr ""
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "এই সিস্টেমে কোন আপডেট সংস্থাপিত হয়নি।"
+
+#: src/gs-update-monitor.c:169
+msgid "Security Updates Pending"
+msgstr "নিরাপত্তা আপডেট বাকি আছে"
+
+#: src/gs-update-monitor.c:170
+msgid "It is recommended that you install important updates now"
+msgstr "গুরুত্বপূর্ণ আপডেট এখন সংস্থাপিত করতে সুপারিশ করা হচ্ছে।"
+
+#: src/gs-update-monitor.c:173
+msgid "Restart & Install"
+msgstr "পুনরায় চালু করুন এবং সংস্থাপন করুন"
+
+#: src/gs-update-monitor.c:177
+msgid "Software Updates Available"
+msgstr "সফটওয়্যার আপডেট পাওয়া যাবে"
+
+#: src/gs-update-monitor.c:178
+msgid "Important OS and application updates are ready to be installed"
+msgstr "গুরুত্বপূর্ণ OS এবং এ্যাপ্লিকেশন আপডেট সংস্থাপনের জন্য তৈরি"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:181 src/gs-updates-page.c:800
+msgid "Not Now"
+msgstr "এখন নয়"
+
+#: src/gs-update-monitor.c:182
+msgid "View"
+msgstr "মতামত"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:696 src/gs-updates-page.ui:79
+msgid "Operating System Updates Unavailable"
+msgstr ""
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:698
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:752
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s একটি নতুন ভার্সন সংস্থাপনের জন্য পাওয়া যাবে"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:756
+msgid "Software Upgrade Available"
+msgstr "সফটওয়্যার আপগ্রেড পাওয়া যাবে"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:1040
+msgid "Software Updates Failed"
+msgstr "সফটওয়্যার আপডেট করা ব্যর্থ"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:1042
+msgid "An important OS update failed to be installed."
+msgstr "একটি গুরুত্বপূর্ণ OS আপডেট সংস্থাপনে ব্যর্থ হয়েছে।"
+
+#: src/gs-update-monitor.c:1043
+msgid "Show Details"
+msgstr "বিশদ প্রদর্শন করুন"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1065
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "সফটওয়্যার আপডেট সংস্থাপন করা হয়েছে"
+msgstr[1] "সফটওয়্যার আপডেট সংস্থাপন করা হয়েছে"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1069
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "একটি গুরুত্বপূর্ণ OS আপডেট সংস্থাপন করা হয়েছে।"
+msgstr[1] "গুরুত্বপূর্ণ OS আপডেট সংস্থাপন করা হয়েছে।"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1080
+msgctxt "updates"
+msgid "Review"
+msgstr "রিভিউ"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1127
+msgid "Failed To Update"
+msgstr "আপডেট করতে ব্যর্থ"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1133
+msgid "The system was already up to date."
+msgstr "সিস্টেম ইতিমধ্যেই হালনাগাদকৃত।"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1138
+msgid "The update was cancelled."
+msgstr "আপডেট বাতিল করা হয়েছে।"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1144
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you"
+" have internet access and try again."
+msgstr "ইন্টারনেট সংযোগ প্রয়োজন হলেও ইন্টারনেট সংযোগ পাওয়া যায়নি। অনুগ্রহ করে নিশ্চিত করুন আপনার ইন্টারনেট সংযোগ রয়েছে এবং আবার চেষ্টা করুন।"
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1150
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "আপডেট সম্পর্কিত নিরাপত্তা ইস্যু দেখা দিয়েছে। আরো তথ্যের জন্য অনুগ্রহ করে আপনার সফটওয়্যার সরবরাহকারীর সাথে যোগাযোগ করুন।"
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1156
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "ডিস্কে পর্যাপ্ত জায়গা ছিল না। অনুগ্রহ করে কিছু জায়গা খালি করুন এবং আবার চেষ্টা করুন।"
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1161
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr "আমরা দুঃখিত: আপডেট সংস্থাপিত হতে ব্যর্থ হয়েছে। আরেকটি আপডেটের জন্য অপেক্ষা করুন এবং আবার চেষ্টা করুন। যদি সমস্যা হতে থাকে, তাহলে আপনার সফটওয়্যার সরবরাহকারীর সাথে যোগাযোগ করুন।"
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:306
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:309
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:315
+msgid "Yesterday, %R"
+msgstr "গতকাল, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:319
+msgid "Yesterday, %l:%M %p"
+msgstr "গতকাল, %l:%M %p"
+
+#: src/gs-updates-page.c:322
+msgid "Two days ago"
+msgstr "দুই দিন আগে"
+
+#: src/gs-updates-page.c:324
+msgid "Three days ago"
+msgstr "তিন দিন আগে"
+
+#: src/gs-updates-page.c:326
+msgid "Four days ago"
+msgstr "চার দিন আগে"
+
+#: src/gs-updates-page.c:328
+msgid "Five days ago"
+msgstr "পাঁচ দিন আগে"
+
+#: src/gs-updates-page.c:330
+msgid "Six days ago"
+msgstr "ছয় দিন আগে"
+
+#: src/gs-updates-page.c:332
+msgid "One week ago"
+msgstr "এক সপ্তাহ আগে"
+
+#: src/gs-updates-page.c:334
+msgid "Two weeks ago"
+msgstr "দুই সপ্তাহ আগে"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:338
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. FIXME: We are commenting out the code that checked the status because
+#. * the message it returned is not what a plugin may be doing (it can be
+#. * simply refreshing the metadata), so we need to fix this (maybe adding
+#. * different types of 'downloading' status) in the future.
+#. if (status == GS_PLUGIN_STATUS_DOWNLOADING) {
+#. /\* TRANSLATORS: the updates are being downloaded *\/
+#. return _("Downloading new updates…");
+#. }
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:359
+msgid "Looking for new updates…"
+msgstr "নতুন আপডেট খোঁজ করা হচ্ছে..."
+
+#: src/gs-updates-page.c:389
+msgid "automatic updates on"
+msgstr ""
+
+#: src/gs-updates-page.c:392
+msgid "automatic updates off"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:440
+msgid "Setting up updates…"
+msgstr "আপডেট সেটআপ করা হচ্ছে..."
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:441 src/gs-updates-page.c:448
+msgid "(This could take a while)"
+msgstr "(একটু সময় লাগতে পারে)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:554
+#, c-format
+msgid "Last checked: %s"
+msgstr "শেষবার দেখা হয়েছে: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:796
+msgid "Updates have been installed"
+msgstr "আপডেটসমূহ সংস্থাপন করা হয়েছে"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:798
+msgid "A restart is required for them to take effect."
+msgstr "এগুলো কার্যকরী হতে পুনরায় চালু করা দরকার।"
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:802
+msgid "Restart"
+msgstr "পুনরায় চালু করুন"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:872
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:875 src/gs-updates-page.c:885
+msgid "Restart & Update"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:882
+msgid "Requires Restart"
+msgstr ""
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:892
+msgid "Application Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:895
+msgid "Update All"
+msgstr ""
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:902
+msgid "Device Firmware"
+msgstr ""
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:1087
+msgid "_Restart & Update"
+msgstr "_পুনঃ চালু ও হালনাগাদ "
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:1091
+msgid "U_pdate All"
+msgstr "সব হা_লানাগাদ "
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1175
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1180
+msgid "Your OS is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1185
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1189
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1446
+msgid "Charges may apply"
+msgstr "মূল্য পরিশোধ করতে হতে পারে"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1450
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "মোবাইলে ব্রডব্যান্ড ব্যবহার করার সময় আপডেট খোঁজ করতে গেলে আপনাকে মূল্য পরিশোধ করতে হতে পারে।"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1454
+msgid "Check Anyway"
+msgstr "তবুও খোঁজ করুন"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1470
+msgid "No Network"
+msgstr "নেটওয়ার্ক নেই"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1474
+msgid "Internet access is required to check for updates."
+msgstr "আপডেট খোঁজ করতে ইন্টারনেট সংযোগ প্রয়োজন।"
+
+#: src/gs-updates-page.c:1907
+msgid "Restart & _Install"
+msgstr "পুনরায় চালু করুন এবং _সংস্থাপন করুন"
+
+#: src/gs-updates-page.c:1925
+msgid "Check for updates"
+msgstr "আপডেট খোঁজ করেন"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "আপডেট পাতা"
+
+#: src/gs-updates-page.ui:227
+msgid "Software is up to date"
+msgstr "সফটওয়্যার হালনাগাদকৃত আছে"
+
+#: src/gs-updates-page.ui:278
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "মোবাইলে ব্রডব্যান্ড ব্যবহার করার সময় আপডেট খোঁজ করতে গেলে আপনাকে মূল্য পরিশোধ করতে হতে পারে"
+
+#: src/gs-updates-page.ui:290
+msgid "_Check Anyway"
+msgstr "_তবুও খোঁজ করুন"
+
+#: src/gs-updates-page.ui:333
+msgid "Go online to check for updates"
+msgstr "আপডেট খোঁজ করতে অনলাইনে যান"
+
+#: src/gs-updates-page.ui:344
+msgid "_Network Settings"
+msgstr "_নেটওয়ার্ক সেটিংস"
+
+#: src/gs-updates-page.ui:426
+msgid "Updates are automatically managed"
+msgstr "আপডেটসমূহ স্বয়ংক্রিয়ভাবে পরিচালিত হয়"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s এখন পাওয়া যাবে"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s ডাউনলোড করা হচ্ছে"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s সংস্থাপিত হতে তৈরি"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "নতুন বৈশিষ্ট্য সম্পন্ন একটি গুরুত্বপূর্ণ আপগ্রেড"
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "_আরো জানুন"
+
+#: src/gs-upgrade-banner.ui:98
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:146
+msgid "_Restart Now"
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:3
+msgid "App Center"
+msgstr "এ্যাপ সেন্টার"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "More Apps"
+msgstr "আরও অ্যাপস"
+
+#: src/org.gnome.Software.desktop.in:5
+msgid "Add, remove or update software on this computer"
+msgstr "এই কম্পিউটারে সফটওয়্যার সংযুক্তি, মুছে ফেলা অথবা আপডেট"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon
+#. file name)!
+#: src/org.gnome.Software.desktop.in:7
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or
+#. localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:13
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;"
+msgstr "আপডেট;আপগ্রেড;উৎস;ভান্ডার;পছন্দ;সংস্থাপন;অসংস্থাপন;প্রোগ্রাম;সফটওয়্যার;এ্যাপ;দোকান;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or
+#. localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:31
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:35
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:39
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:45
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:49
+msgctxt "Menu of Graphics"
+msgid "3D Graphics"
+msgstr "3D গ্রাফিক্স"
+
+#: plugins/core/gs-desktop-common.c:52
+msgctxt "Menu of Graphics"
+msgid "Photography"
+msgstr "ফটোগ্রাফি"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Graphics"
+msgid "Scanning"
+msgstr "বিশ্লেষণ"
+
+#: plugins/core/gs-desktop-common.c:58
+msgctxt "Menu of Graphics"
+msgid "Vector Graphics"
+msgstr "ভেক্টর গ্রাফিক্স"
+
+#: plugins/core/gs-desktop-common.c:61
+msgctxt "Menu of Graphics"
+msgid "Viewers"
+msgstr "দর্শক"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:72
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:87
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:91
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:102
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "সকল"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "বৈশিষ্ট্যসম্পন্ন"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "লড়াই"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "অভিযান"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "আর্কেড"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "ব্লক"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "বোর্ড"
+
+#: plugins/core/gs-desktop-common.c:147
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "কার্ড"
+
+#: plugins/core/gs-desktop-common.c:150
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "প্রতিদ্বন্দ্বিতাপূর্ণ"
+
+#: plugins/core/gs-desktop-common.c:153
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "বাচ্চা"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "যুক্তি"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "ভূমিকায় অভিনয়"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "খেলা"
+
+#: plugins/core/gs-desktop-common.c:166
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "কৌশল"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:177
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:180
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:184
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:187
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:191
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Utility"
+msgid "All"
+msgstr "সকল"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Utility"
+msgid "Featured"
+msgstr "বৈশিষ্ট্যসম্পন্ন"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:213
+msgctxt "Menu of Communication"
+msgid "Chat"
+msgstr "আড্ডা"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:229
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:232
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:238
+msgctxt "Menu of Utility"
+msgid "Text Editors"
+msgstr "শব্দ সম্পাদনা"
+
+#: plugins/core/gs-desktop-common.c:241
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:244
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Settings"
+msgid "Settings"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of System"
+msgid "System"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:270 plugins/core/gs-desktop-common.c:314
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "সকল"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "বৈশিষ্ট্যসম্পন্ন"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Art"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "আত্মজীবনী"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "প্রহসন"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Feed"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "গল্প"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "স্বাস্থ্য"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "ইতিহাস"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "জীবনচর্যা"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "News"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "রাজনীতি"
+
+#: plugins/core/gs-desktop-common.c:306
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "খেলাধুলা"
+
+#. TRANSLATORS: this is the menu spec main category for Learning
+#: plugins/core/gs-desktop-common.c:324
+msgid "Learning"
+msgstr "শিক্ষা"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:327
+msgid "Games"
+msgstr "খেলা"
+
+#. TRANSLATORS: this is the menu spec main category for Multimedia
+#: plugins/core/gs-desktop-common.c:330
+msgid "Multimedia"
+msgstr "মাল্টিমিডিয়া"
+
+#. TRANSLATORS: this is the menu spec main category for Work
+#: plugins/core/gs-desktop-common.c:333
+msgid "Work"
+msgstr "কাজ"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:336
+msgid "Reference & News"
+msgstr "প্রসঙ্গক্রম এবং খবর"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:339
+msgid "Utilities"
+msgstr "উপযোগিতা"
+
+#. TRANSLATORS: this is the menu spec main category for Dev Tools; it
+#. * should be a relatively short label; as an example, in Portuguese and
+#. * Spanish the direct translation of "Programming" (noun) is used
+#: plugins/core/gs-desktop-common.c:344
+msgid "Dev Tools"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:346
+msgid "USB"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-appstream.c:693
+msgid "Downloading extra metadata files…"
+msgstr ""
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr "OS আপডেট"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr "কর্মক্ষমতা, স্থিতিশীলতা ও নিরাপত্তার অগ্রগতি সংযোজিত।"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr ""
+
+#: plugins/eos/gs-plugin-eos.c:1917
+#, c-format
+msgid "Could not launch this application."
+msgstr ""
+
+#: plugins/eos/gs-plugin-eos.c:1974
+msgid "Endless Platform"
+msgstr "এন্ডলেস প্রাঙ্গণ"
+
+#: plugins/eos/gs-plugin-eos.c:1977
+msgid "Framework for applications"
+msgstr "এ্যাপ্লিকেশনসমূহের জন্য ফ্রেমওয়ার্ক"
+
+#: plugins/eos/gs-plugin-eos.c:2126
+msgid "An Endless update with new features and fixes."
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:102
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:104
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:111
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:118
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:126
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:133
+msgid "Failed to copy"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+msgid "Downloading upgrade information…"
+msgstr ""
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:311
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:871
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#: plugins/flatpak/gs-flatpak.c:2114
+#, c-format
+msgid ""
+"The app %s is missing its runtime. Update the app to repair this problem."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:3274
+msgid "Getting runtime source…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:864 plugins/fwupd/gs-plugin-fwupd.c:963
+msgid "Downloading firmware update signature…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:905 plugins/fwupd/gs-plugin-fwupd.c:1009
+msgid "Downloading firmware update metadata…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:1100
+msgid "Downloading firmware update…"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr ""
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:674
+msgid "Downloading shell extension metadata…"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr ""
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr ""
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr ""
diff --git a/po/bs.po b/po/bs.po
new file mode 100644
index 0000000..26d3429
--- /dev/null
+++ b/po/bs.po
@@ -0,0 +1,2321 @@
+# Bosnian translation for bosnianuniversetranslation
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the bosnianuniversetranslation package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bosnianuniversetranslation\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2015-02-26 20:45+0000\n"
+"PO-Revision-Date: 2015-03-09 23:40+0100\n"
+"Last-Translator: Selma Glavić <sglavic1@etf.unsa.ba>\n"
+"Language-Team: Bosnian <bs@li.org>\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n"
+"%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Poedit 1.7.4\n"
+"X-Launchpad-Export-Date: 2015-02-15 06:20+0000\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "GNOME Software"
+msgstr "Gnomovi programi"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid "Application manager for GNOME"
+msgstr "GNOME aplikacijski menadžer"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"Software allows you to find and install new applications and system extensions and remove "
+"existing installed applications."
+msgstr ""
+"Programi vam omogućavaju da nađete i instalirate nove aplikacije i sistemska proširenja i "
+"uklanjanje postojećih instaliranih aplikacija."
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:4
+msgid ""
+"GNOME Software showcases featured and popular applications with useful descriptions and "
+"multiple screenshots per application. Applications can be found either through browsing "
+"the list of categories or by searching. It also allows you to update your system using an "
+"offline update."
+msgstr ""
+"GNOME Softver prikazuje istaknute i popularne aplikacije s korisnim opisima i više snimki "
+"ekrana po aplikaciji. Aplikacije se mogu naći bilo kroz pregledavanje listi ili "
+"pretraživanjem. Također omogućava da izvršite ažuriranje sistema koristeći ažuriranje bez "
+"pristupa internet mreži."
+
+#: ../src/app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr "Dodaj u Aplikacijski direktorij"
+
+#: ../src/app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:336
+#: ../src/gs-shell-details.c:237 ../src/gs-shell-installed.c:536
+msgid "_Cancel"
+msgstr "_Odustani"
+
+#: ../src/app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:341
+msgid "_Add"
+msgstr "_Dodaj"
+
+#. TRANSLATORS: this is the small blue label on the tili
+#. * that tells the user the application is installed
+#: ../src/app-tile.ui.h:1 ../src/gs-app-addon-row.c:98 ../src/gs-app-tile.c:75
+#: ../src/gs-app-tile.c:78 ../src/gs-feature-tile.c:70 ../src/gs-popular-tile.c:76
+#: ../src/gs-popular-tile.c:79 ../src/popular-tile.ui.h:1
+msgid "Installed"
+msgstr "Instalirano"
+
+#. TRANSLATORS: this is the application nami
+#. set the window title back to default
+#. TRANSLATORS: this is the main window title
+#: ../src/org.gnome.Software.desktop.in.h:1 ../src/gnome-software.ui.h:3
+#: ../src/gs-application.c:267 ../src/gs-shell.c:161
+msgid "Software"
+msgstr "Program"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr "Dodaj, ukloni ili ažuriraj prorame na ovom račuanru"
+
+#: ../src/org.gnome.Software.desktop.in.h:3
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;"
+"Store;"
+msgstr ""
+"Ažuriranje;Nadogradnja;Izvor;Repozicija;Postavke;Instalacija;Deinstalacija;Program;Sofver;"
+"App;Radnja;"
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr "Instalacija Softvera"
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr "Instaliraj selektovani softver na sistem"
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr "Označi sve"
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr "Ne izabiraj ništa"
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-sources-dialog.ui.h:2
+#: ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr "Idi nazad"
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "_Sve"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "_Instalirano"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "_Ažuriranja"
+
+#: ../src/gnome-software.ui.h:11
+msgid "Restart & _Install"
+msgstr "Pokrenuti &_Instalirati"
+
+#: ../src/gnome-software.ui.h:12
+msgid "Select"
+msgstr "Izaberi"
+
+#: ../src/gnome-software.ui.h:13
+msgid "Check for updates"
+msgstr "Provjeri ažuriranja"
+
+#: ../src/gs-app-folder-dialog.c:325
+msgid "Folder Name"
+msgstr "Ime direktorija"
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:265
+msgid "About Software"
+msgstr "O programu"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:270
+msgid "A nice way to manage the software on your system."
+msgstr "Dobar put za upravljanje programima na vašem sistemu."
+
+#: ../src/gs-application.c:274
+msgid "translator-credits"
+msgstr ""
+" Haris Helac https://launchpad.net/~hhelac1\n"
+" Samir Ribić https://launchpad.net/~megaribi\n"
+" Selma Glavić https://launchpad.net/~sglavic1"
+
+#: ../src/gs-application.c:565
+msgid "Enter GApplication service mode"
+msgstr "Ući u GAaplikacijski servisni mod"
+
+#. TRANSLATORS: this is a command linije option
+#: ../src/gs-application.c:568
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Pokreni mod: ili 'ažuriranja','ažurirano','instalirano' ili 'pregled'"
+
+#: ../src/gs-application.c:568
+msgid "MODE"
+msgstr "MODE"
+
+#: ../src/gs-application.c:570
+msgid "Search for applications"
+msgstr "Potraga za aplikacijom"
+
+#: ../src/gs-application.c:570
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: ../src/gs-application.c:572
+msgid "Show application details"
+msgstr "Prikaži aplikacijske detalje"
+
+#: ../src/gs-application.c:572
+msgid "ID"
+msgstr "ID"
+
+#: ../src/gs-application.c:574
+msgid "Open a local package file"
+msgstr "Otvori lokalnu paketnu datoteku"
+
+#: ../src/gs-application.c:574
+msgid "FILENAME"
+msgstr "IME FAJLA"
+
+#: ../src/gs-application.c:576
+msgid "Show verbose debugging information"
+msgstr "Prikaži verbalne otklonjene greške informacija"
+
+#: ../src/gs-application.c:578
+msgid "Show profiling information for the service"
+msgstr "Prikaži profilirane informacije za servise"
+
+#: ../src/gs-application.c:580
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferiraj lokanu izvornu datoteku prema AppStream-u"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-addon-row.c:93 ../src/gs-app-row.c:214 ../src/gs-shell-details.ui.h:4
+msgid "Pending"
+msgstr "U čekanju"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is the small blue label on the tili
+#. * that tells the user the application is being installing
+#: ../src/gs-app-addon-row.c:102 ../src/gs-app-row.c:240 ../src/gs-app-tile.c:84
+#: ../src/gs-app-tile.c:87
+msgid "Installing"
+msgstr "Instaliranje"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is the small blue label on the tili
+#. * that tells the user the application is being removed
+#: ../src/gs-app-addon-row.c:106 ../src/gs-app-row.c:249 ../src/gs-app-tile.c:93
+#: ../src/gs-app-tile.c:96
+msgid "Removing"
+msgstr "Uklanjanje"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to bje easily installed
+#: ../src/gs-app-row.c:198
+msgid "Visit website"
+msgstr "Posjetite internet stranicu"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to bje easily installed.
+#. * The ellipsis indicates that further steps are required
+#: ../src/gs-app-row.c:203
+msgid "Install…"
+msgstr "Instaliraj..."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-row.c:211
+msgid "Cancel"
+msgstr "Odustanite"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to bje easily installed
+#. TRANSLATORS: button text
+#: ../src/gs-app-row.c:221 ../src/gs-utils.c:313
+msgid "Install"
+msgstr "Instalirajte"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to bje easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-row.c:229 ../src/gs-page.c:176
+msgid "Remove"
+msgstr "Uklonite"
+
+#. TRANSLATORS: this is the small blue label on the tili
+#. * that tells the user there is an update for the installed
+#. * application available
+#: ../src/gs-app-tile.c:102 ../src/gs-app-tile.c:106 ../src/gs-feature-tile.c:75
+#: ../src/gs-popular-tile.c:85 ../src/gs-popular-tile.c:89
+msgid "Updates"
+msgstr "Ažuriranja"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:207
+msgid "Other"
+msgstr "Ostali"
+
+#. TRANSLATORS: this is a what we usi in notifications if the app's nami is unknown
+#: ../src/gs-dbus-helper.c:312
+msgid "An application"
+msgstr "Aplikacija"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: ../src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s zahtijeva podršku za dodatni format datoteke."
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:320
+msgid "Additional MIME Types Required"
+msgstr "Potrebni dodatni MIME tipovi"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: ../src/gs-dbus-helper.c:324
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s zahtijeva dodatne fontove"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:326
+msgid "Additional Fonts Required"
+msgstr "Potrebni dodatni fontovi"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: ../src/gs-dbus-helper.c:330
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s zahtijeva dodatne multimedijalne kodeke"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:332
+msgid "Additional Multimedia Codecs Required"
+msgstr "Potrebni dodatni multimedijalni kodeci"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: ../src/gs-dbus-helper.c:336
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s zahtijeva dodatne drajvere za štampač"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:338
+msgid "Additional Printer Drivers Required"
+msgstr "Potrebni dodatni drajveri za printer"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: ../src/gs-dbus-helper.c:342
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s zahtijeva dodatne pakete."
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:344
+msgid "Additional Packages Required"
+msgstr "Potrebni dodatni paketi"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: ../src/gs-dbus-helper.c:353
+msgid "Find in Software"
+msgstr "Nađi u softveru"
+
+#. vim: set noexpandtab:
+#: ../src/gs-first-run-dialog.ui.h:1
+msgid "Welcome"
+msgstr "Dobrodošli"
+
+#: ../src/gs-first-run-dialog.ui.h:2
+msgid "Welcome to Software"
+msgstr "Dobrodošli u softver"
+
+#: ../src/gs-first-run-dialog.ui.h:3
+msgid ""
+"Software lets you install all the software you need, all from one place. See our "
+"recommendations, browse the categories, or search for the applications you want."
+msgstr ""
+"Softver dopušta instalaciju svih softvera koji su potrebni, svih sa jednog mjesta. "
+"Pogledaj naše preporuke, pretraži kategorije, ili traži aplikacije koje želiš."
+
+#: ../src/gs-first-run-dialog.ui.h:4
+msgid "_Let’s Go Shopping"
+msgstr "_Idemo u šoping"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "Uklonjeno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: ../src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalirano"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr "Ažurirano"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: ../src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nepoznat"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "Povjest"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-offline-updates.c:54
+msgid "Failed To Update"
+msgstr "Nije uspjelo ažuriranje"
+
+#. TRANSLATORS: the transaction could not bje completed
+#. * as a previous transaction was unfinished
+#: ../src/gs-offline-updates.c:60
+msgid "A previous update was unfinished."
+msgstr "Prethodno ažuriranje je nedovršeno."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-offline-updates.c:70
+msgid "Network access was required but not available."
+msgstr "Pristup mreži je bio potreban ali ne i dostupan."
+
+#. TRANSLATORS: if the package is not signed correctly
+#. *
+#: ../src/gs-offline-updates.c:79
+msgid "An update was not signed in the correct way."
+msgstr "Ažuriranje nije pravilno označeno."
+
+#. TRANSLATORS: the transaction failed in a way the user
+#. * probably cannot comprehend. Package management systems
+#. * really are tih suck.
+#: ../src/gs-offline-updates.c:89
+msgid "The update could not be completed."
+msgstr "Ažuriranje se ne može dovršiti."
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-offline-updates.c:94
+msgid "The update was cancelled."
+msgstr "Ožuriranje je prekinuto."
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-offline-updates.c:100
+msgid "An offline update was requested but no packages required updating."
+msgstr "Zahtjevano je izvan mrežno ažuriranje ali paketi nisu zatražili ažuriranje."
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-offline-updates.c:104
+msgid "No space was left on the drive."
+msgstr "Nema prostora na disku."
+
+#. TRANSLATORS: the update process failed in a general
+#. * way, usually this message will come from source distros
+#. * liki gentoo
+#: ../src/gs-offline-updates.c:112
+msgid "An update failed to install correctly."
+msgstr "Ažuriranje nije ispravno instalirano."
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-offline-updates.c:117
+msgid "The offline update failed in an unexpected way."
+msgstr "Izvan mrežno ažuriranje neočekivanim putem nije uspjelo."
+
+#. TRANSLATORS: these are geeky messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-offline-updates.c:126
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detaljnije greške upravnika paketa u nastavku:"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-page.c:161
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Jeste li sigurni da želite ukloniti %s?"
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-page.c:173
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s će biti obrisan, i morat ćete ga instalirati za ponovo korišzenje."
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:932
+msgid "OS Updates"
+msgstr "Auriranje OS"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: ../src/gs-plugin-loader.c:937
+msgid "Includes performance, stability and security improvements."
+msgstr "Uključuje performanse, stabilnost i sigurnosna poboljšanja."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-plugin-loader.c:1521 ../src/gs-shell-extras.c:376
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Proširenja koda nisu dostupna za %s format."
+
+#: ../src/gs-plugin-loader.c:1524
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can play this format "
+"can be found on the website."
+msgstr ""
+"Informacije o %s, kao i mogućnost za dobijanje kodeka koji može pustiti ovaj format mogu "
+"biti nađeni na internet stranici."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:242
+msgid "Screenshot not found"
+msgstr "Snimak ekrana nije nađen"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: ../src/gs-screenshot-image.c:260
+msgid "Failed to load image"
+msgstr "Nije uspjelo učitavanje slike"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:390
+msgid "Screenshot size not found"
+msgstr "Veličina snimke ekrana nije nađena."
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:409
+msgid "Could not create cache"
+msgstr "Nije moguće kreirati predmemoriju"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:439
+msgid "Screenshot not valid"
+msgstr "Snimak ekrana nije tačan"
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:455
+msgid "Screenshot not available"
+msgstr "Snimak ekrana nije dostupan"
+
+#: ../src/gs-screenshot-image.c:511
+msgid "Screenshot"
+msgstr "Slika zaslona"
+
+#. TRANSLATORS: separator for a list of items
+#. TRANSLATORS: This is how we join the licences and can
+#. * bje considered a "Conjunctive AND Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 and MIT and BSD-2-Clause"
+#: ../src/gs-shell-extras.c:144 ../src/plugins/gs-plugin-appstream.c:410
+msgid " and "
+msgstr " and "
+
+#. TRANSLATORS: separator for a list of items
+#: ../src/gs-shell-extras.c:147
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for codec installation. %s will bje replaced by actual codec nami(s)
+#: ../src/gs-shell-extras.c:170
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Dostupan softver za %s"
+msgstr[1] "Dostupan softver za %s"
+msgstr[2] "Dostupan softver za %s"
+
+#: ../src/gs-shell-extras.c:211
+msgid "Unable to Find Requested Software"
+msgstr "Ne mogu da nađem zahtijevani softver"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: ../src/gs-shell-extras.c:310
+#, c-format
+msgid "%s not found"
+msgstr "%s nije nađen"
+
+#. TRANSLATORS: hyperlink title
+#: ../src/gs-shell-extras.c:314
+msgid "on the website"
+msgstr "na web stranici"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-shell-extras.c:321
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nema dostupnih aplikacija koje pružaju datoteku %s"
+
+#. TRANSLATORS: first %s is the codec nami, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:325 ../src/gs-shell-extras.c:336 ../src/gs-shell-extras.c:347
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications might be "
+"found %s."
+msgstr ""
+"Informacije o %s, kao i opcije za dobijanje nedostajućih aplikacija mogu biti nađeni na "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-shell-extras.c:332 ../src/gs-shell-extras.c:354
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nema dostupnih aplikacija koje pružaju podršku za %s"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-shell-extras.c:343
+#, c-format
+msgid "%s is not available."
+msgstr "%s nije dostupan"
+
+#. TRANSLATORS: first %s is the codec nami, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:358
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that can support "
+"this format might be found %s."
+msgstr ""
+"Informacije o %s, kao i opcije za dobijanje aplikacije koja podržava ovaj format mogu "
+"biti nađeni na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-shell-extras.c:365
+#, c-format
+msgid "No addon fonts are available for %s support."
+msgstr "Nema dodatnih fontova koji pružaju podršku za %s"
+
+#. TRANSLATORS: first %s is the codec nami, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:369
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts might be found "
+"%s."
+msgstr ""
+"Informacije o %s, kao i opcije za dobijanje dodatnih fontova mogu biti nađeni na %s."
+
+#. TRANSLATORS: first %s is the codec nami, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:380
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can play this format "
+"might be found %s."
+msgstr ""
+"Informacije o %s, kao i opcije za dobijanje kodeka koji mogu izvoditi ovaj format mogu "
+"biti nađeni na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-shell-extras.c:387
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nema Plazma resursa koji pružaju podršku za %s"
+
+#. TRANSLATORS: first %s is the codec nami, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:391
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma resources might "
+"be found %s."
+msgstr ""
+"Informacije o %s, kao i opcije za dobijanje dodatnih Plasma resursa mogu biti nađeni na "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't bje listed for some reason
+#: ../src/gs-shell-extras.c:398
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nijedan drajver printera nije dostupan za %s."
+
+#. TRANSLATORS: first %s is the codec nami, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:402
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that supports this "
+"printer might be found %s."
+msgstr ""
+"Informacije o %s, kao i opcije za dobijanje drajvera koji podržava ovaj printer mogu biti "
+"nađeni na %s."
+
+#: ../src/gs-shell-extras.c:448
+msgid "this website"
+msgstr "ova web stranica"
+
+#. TRANSLATORS: no codecs were found. First %s will bje replaced by actual codec nami(s), second %s is a link titled "this website"
+#: ../src/gs-shell-extras.c:452
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see %s for more "
+"information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see %s for more "
+"information."
+msgstr[0] ""
+"Nažalost, %s koga tražite ne može se naći. Molim pogledajte %s za više informacija."
+msgstr[1] ""
+"Nažalost, %s koga tražite ne može se naći. Molim pogledajte %s za više informacija."
+msgstr[2] ""
+"Nažalost, %s koga tražite ne može se naći. Molim pogledajte %s za više informacija."
+
+#: ../src/gs-shell-extras.c:534 ../src/gs-shell-extras.c:583 ../src/gs-shell-extras.c:634
+msgid "Failed to find any search results"
+msgstr "Neuspjelo nalaženje rezultata pretrage"
+
+#: ../src/gs-shell-extras.c:804
+#, c-format
+msgid "%s file format"
+msgstr "%s datotečni format"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-extras.ui.h:1
+msgid "Codecs page"
+msgstr "Stranica kodeka"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can bje installed
+#: ../src/gs-shell-details.c:176 ../src/gs-shell-details.ui.h:2
+msgid "_Install"
+msgstr "_Instaliraj"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:187
+msgid "_Installing"
+msgstr "_Instaliranje"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * bje installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the liki
+#: ../src/gs-shell-details.c:204
+msgid "_Install…"
+msgstr "_Instaliraj"
+
+#. TRANSLATORS: button text in the header when an application can bje erased
+#: ../src/gs-shell-details.c:224 ../src/gs-shell-details.ui.h:3
+msgid "_Remove"
+msgstr "_Obriši"
+
+#. TRANSLATORS: button text in the header when an application can bje installed
+#: ../src/gs-shell-details.c:231
+msgid "_Removing"
+msgstr "_Uklanjanje"
+
+#. TRANSLATORS: this is where the licence is not known
+#: ../src/gs-shell-details.c:578
+msgctxt "license"
+msgid "Unknown"
+msgstr "Nepoznata"
+
+#. TRANSLATORS: this is where the version is not known
+#: ../src/gs-shell-details.c:591
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nepoznata"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:597
+msgctxt "size"
+msgid "Calculating…"
+msgstr "Izračunavam…"
+
+#. TRANSLATORS: this is where the size is not known
+#: ../src/gs-shell-details.c:600
+msgctxt "size"
+msgid "Unknown"
+msgstr "Nepoznat"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:612
+msgctxt "updated"
+msgid "Never"
+msgstr "Nikad"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined mijenu category
+#: ../src/gs-shell-details.c:627
+msgctxt "mijenu category"
+msgid "None"
+msgstr "Ništa"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-shell-details.c:637
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nepoznat"
+
+#: ../src/gs-shell-details.c:895 ../src/gs-utils.c:162
+msgid "Sorry, this did not work"
+msgstr "Žao nam je, to ne radi"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-details.ui.h:1
+msgid "Details page"
+msgstr "Stranica s detaljima"
+
+#: ../src/gs-shell-details.ui.h:5
+msgid "Software Source Included"
+msgstr "Softverski izvor uključen"
+
+#: ../src/gs-shell-details.ui.h:6
+msgid ""
+"This application includes a software source which provides updates, as well as access to "
+"other software."
+msgstr ""
+"Ova aplikacije uključuje izvor softvera koji omogućava ažuriranje, kao i pristup ostalom "
+"softveru."
+
+#: ../src/gs-shell-details.ui.h:7
+msgid "No Software Source Included"
+msgstr "Izvor softvera nije uključen"
+
+#: ../src/gs-shell-details.ui.h:8
+msgid ""
+"This application does not include a software source. It will not be updated with new "
+"versions."
+msgstr "Ova aplikacija ne uključuje izvor softvera. I neće biti ažuriran sa novom verzijom."
+
+#: ../src/gs-shell-details.ui.h:9
+msgid "This software is already provided by your distribution and should not be replaced."
+msgstr "Ovaj softver je već dobijate sa svojom distribucijom i ne treba ga zamijeniti."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: ../src/gs-shell-details.ui.h:11
+msgid "Software Source Identified"
+msgstr "Izvor softvera identifikovan"
+
+#: ../src/gs-shell-details.ui.h:12
+msgid ""
+"Adding this software source will give you access to additional software and upgrades."
+msgstr ""
+"Dodavanjem ovog izvornog softvera daće ti pristup dodatnim softverima i nadogradnjama."
+
+#: ../src/gs-shell-details.ui.h:13
+msgid "Only use software sources that you trust."
+msgstr "Koristiti samo izvorni softver kojem vjerujete."
+
+#: ../src/gs-shell-details.ui.h:14
+msgid "Internet Only Application"
+msgstr "Samo internet aplikacija"
+
+#: ../src/gs-shell-details.ui.h:15
+msgid "This application can only be used when there is an active internet connection."
+msgstr "Ova aplikacija može biti korištena samo kada postoji aktivna internet konekcija."
+
+#: ../src/gs-shell-details.ui.h:16
+msgid "_Website"
+msgstr "_Web stranica"
+
+#: ../src/gs-shell-details.ui.h:17
+msgid "_History"
+msgstr "_Historijat"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gs-shell-details.ui.h:19
+msgid "_Launch"
+msgstr "_Pokreni"
+
+#: ../src/gs-shell-details.ui.h:20
+msgid "Details"
+msgstr "Detalji"
+
+#: ../src/gs-shell-details.ui.h:21 ../src/gs-sources-dialog.ui.h:9
+msgid "Version"
+msgstr "Verzija"
+
+#: ../src/gs-shell-details.ui.h:22
+msgid "Updated"
+msgstr "Ažurirano"
+
+#: ../src/gs-shell-details.ui.h:23
+msgid "Category"
+msgstr "Kategorija"
+
+#: ../src/gs-shell-details.ui.h:24
+msgid "Source"
+msgstr "Izvor"
+
+#: ../src/gs-shell-details.ui.h:25
+msgid "License"
+msgstr "Licenca"
+
+#: ../src/gs-shell-details.ui.h:26
+msgid "Size"
+msgstr "Veličina"
+
+#: ../src/gs-shell-details.ui.h:27
+msgid "Developer"
+msgstr "Razvojni programer"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-details.ui.h:28 ../src/gs-shell-installed.c:451
+#: ../src/gs-update-list.c:89 ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr "Dodaci"
+
+#: ../src/gs-shell-details.ui.h:29
+msgid "Selected add-ons will be installed with the application."
+msgstr "Izabrana proširenja će biti instalirana uz aplikaciju."
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: ../src/gs-shell-installed.c:441
+msgid "System Applications"
+msgstr "Sistemske aplikacije"
+
+#: ../src/gs-shell-installed.c:544
+msgid "Click on items to select them"
+msgstr "Kliknite na stavke da bi ih označili"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-installed.ui.h:1
+msgid "Installed page"
+msgstr "Instalirana stranica"
+
+#: ../src/gs-shell-installed.ui.h:2
+msgid "_Add to Folder…"
+msgstr "_Dodaj u mapu"
+
+#: ../src/gs-shell-installed.ui.h:3
+msgid "_Move to Folder…"
+msgstr "_Pomakni u mapu"
+
+#: ../src/gs-shell-installed.ui.h:4
+msgid "_Remove from Folder"
+msgstr "_Ukloni iz mape"
+
+#. TRANSLATORS: this is a heading for audio applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:331
+msgid "Recommended Audio Applications"
+msgstr "Preporučena zvučna aplikacija"
+
+#. TRANSLATORS: this is a heading for games which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:336
+msgid "Recommended Games"
+msgstr "Preporučene igre"
+
+#. TRANSLATORS: this is a heading for graphics applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:341
+msgid "Recommended Graphics Applications"
+msgstr "Preporučene grafičke aplikacije"
+
+#. TRANSLATORS: this is a heading for office applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:346
+msgid "Recommended Office Applications"
+msgstr "Preporučene uredske aplikacije"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-overview.ui.h:1
+msgid "Overview page"
+msgstr "Pregled stranice"
+
+#: ../src/gs-shell-overview.ui.h:2
+msgid "Featured Application"
+msgstr "Istaknute aplikacije"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: ../src/gs-shell-overview.ui.h:4
+msgid "Editor's Picks"
+msgstr "Odabir urednika"
+
+#: ../src/gs-shell-overview.ui.h:5
+msgid "Categories"
+msgstr "Kategorije"
+
+#: ../src/gs-shell-overview.ui.h:6
+msgid "No Application Data Found"
+msgstr "Podatak o aplikaciji nije pronađen"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-search.ui.h:1
+msgid "Search page"
+msgstr "Pretraži stranicu"
+
+#: ../src/gs-shell-search.ui.h:2
+msgid "No Application Found"
+msgstr "Aplikacija nije pronađena"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:145
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:148
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: ../src/gs-shell-updates.c:154
+msgid "Yesterday, %R"
+msgstr "Jučer. %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: ../src/gs-shell-updates.c:158
+msgid "Yesterday, %l:%M %p"
+msgstr "Jučer, %l:%M %p"
+
+#: ../src/gs-shell-updates.c:161
+msgid "Two days ago"
+msgstr "Prije dva dana"
+
+#: ../src/gs-shell-updates.c:163
+msgid "Three days ago"
+msgstr "Prije tri dana"
+
+#: ../src/gs-shell-updates.c:165
+msgid "Four days ago"
+msgstr "Prije četiri dana"
+
+#: ../src/gs-shell-updates.c:167
+msgid "Five days ago"
+msgstr "Prije pet dana"
+
+#: ../src/gs-shell-updates.c:169
+msgid "Six days ago"
+msgstr "Prije šest dana"
+
+#: ../src/gs-shell-updates.c:171
+msgid "One week ago"
+msgstr "Prošle sedmice"
+
+#: ../src/gs-shell-updates.c:173
+msgid "Two weeks ago"
+msgstr "Prije dvije sedmice"
+
+#. TRANSLATORS: This is the date string with: day number, month nami, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:177
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: ../src/gs-shell-updates.c:196
+msgid "Downloading new updates…"
+msgstr "Preuzimanje novih ažuriranja…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: ../src/gs-shell-updates.c:200
+msgid "Looking for new updates…"
+msgstr "U potrazi za novim ažuriranjima…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:255
+msgid "Setting up updates…"
+msgstr "Podešavanje ažiriranja…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:256 ../src/gs-shell-updates.c:262
+msgid "(This could take a while)"
+msgstr "( Ovo može potrajati )"
+
+#. TRANSLATORS: this is when the updates panel is starting up
+#: ../src/gs-shell-updates.c:267
+msgid "Checking for updates…"
+msgstr "Provjera ažuriranja…"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:401
+#, c-format
+msgid "Last checked: %s"
+msgstr "Provjerimo: %s"
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:777
+msgid "No Network"
+msgstr "Nema mreže"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:781
+msgid "Internet access is required to check for updates."
+msgstr "Potreban je pristup internetu za provjere ažuriranja."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:785
+msgid "Network Settings"
+msgstr "Mrežne postavke"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: ../src/gs-shell-updates.c:804
+msgid "Charges may apply"
+msgstr "Moguća je novčana naknada"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:808
+msgid "Checking for updates while using mobile broadband could cause you to incur charges."
+msgstr ""
+"Provjera ažuriranja tijekom korištenja mobilnog interneta može uzrokovati dodatnu novčanu "
+"naknadu."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:812
+msgid "Check Anyway"
+msgstr "Provjerite svakom slučaju"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-updates.ui.h:1
+msgid "Updates page"
+msgstr "Stranica ažuriranja"
+
+#: ../src/gs-shell-updates.ui.h:2
+msgid "Software is up to date"
+msgstr "Softver je do datuma"
+
+#: ../src/gs-shell-updates.ui.h:3
+msgid "Checking for updates when using mobile broadband could cause you to incur charges"
+msgstr ""
+"Provjera ažuriranja prilikom korištenja mobilnog interneta može uzrokovati dodatnu "
+"novčanu naknadu."
+
+#: ../src/gs-shell-updates.ui.h:4
+msgid "_Check Anyway"
+msgstr "_Provjerite svakom slučaju"
+
+#: ../src/gs-shell-updates.ui.h:5
+msgid "Go online to check for updates"
+msgstr "Provjeri ažuriranja na internetu"
+
+#: ../src/gs-shell-updates.ui.h:6
+msgid "_Network Settings"
+msgstr "_Mrežne postavke"
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: ../src/gs-sources-dialog.c:96
+msgid "No software installed"
+msgstr "Nema instaliranog softvera"
+
+# translations.
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: ../src/gs-sources-dialog.c:100
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] "%i aplikacija instalirana"
+msgstr[1] "%i aplikacije instalirane"
+msgstr[2] "%i aplikacija instalirano"
+
+# translations.
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: ../src/gs-sources-dialog.c:106
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] "%i proširenje instalirano"
+msgstr[1] "%i proširenja instalirana"
+msgstr[2] "%i proširenja instalirano"
+
+# translations.
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: ../src/gs-sources-dialog.c:113
+#, c-format
+msgid "%i application"
+msgid_plural "%i applications"
+msgstr[0] "%i aplikacija"
+msgstr[1] "%i aplikacije"
+msgstr[2] "%i aplikacija"
+
+# translations.
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: ../src/gs-sources-dialog.c:119
+#, c-format
+msgid "%i add-on"
+msgid_plural "%i add-ons"
+msgstr[0] "%i proširenje"
+msgstr[1] "%i proširenja"
+msgstr[2] "%i proširenja"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: ../src/gs-sources-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s i %s instaliran"
+msgstr[1] "%s i %s instalirani"
+msgstr[2] "%s i %s instalirani"
+
+#: ../src/gs-sources-dialog.c:315 ../src/gs-sources-dialog.ui.h:13
+msgid "Remove Source"
+msgstr "Ukloni izvor"
+
+#: ../src/gs-sources-dialog.c:330
+msgid "Removing…"
+msgstr "Uklanjanje…"
+
+#. vim: set noexpandtab:
+#: ../src/gs-sources-dialog.ui.h:1
+msgid "Software Sources"
+msgstr "Izvoi softvera"
+
+#: ../src/gs-sources-dialog.ui.h:3
+msgid "No sources found."
+msgstr "Izvor nije pronađen."
+
+#: ../src/gs-sources-dialog.ui.h:4
+msgid "Software sources give you access to additional software."
+msgstr "Izvor softvera daje pristup dodatnom softveru."
+
+#: ../src/gs-sources-dialog.ui.h:5
+msgid "Removing a source will also remove any software you have installed from it."
+msgstr "Uklanjanje izvora također će ukloniti svaki softver koji je instaliran putem njega."
+
+#: ../src/gs-sources-dialog.ui.h:6
+msgid "No software installed from this source"
+msgstr "Sofver nije instaliran putem ovog izvora."
+
+#: ../src/gs-sources-dialog.ui.h:7
+msgid "Installed from this Source"
+msgstr "Instalirano iz ovog Izvorom."
+
+#: ../src/gs-sources-dialog.ui.h:8
+msgid "Source Details"
+msgstr "Detalji izvora"
+
+#: ../src/gs-sources-dialog.ui.h:10
+msgid "Last Checked"
+msgstr "Posljednja provjera"
+
+#: ../src/gs-sources-dialog.ui.h:11
+msgid "Added"
+msgstr "Dodano"
+
+#: ../src/gs-sources-dialog.ui.h:12
+msgid "Website"
+msgstr "Veb stranica"
+
+#. TRANSLATORS: this is where the packager did not write a
+#. * description for the update
+#: ../src/gs-update-dialog.c:114
+msgid "No update description available."
+msgstr "Opis ažuriramka moke dostupan."
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: ../src/gs-update-dialog.c:173
+msgid "Installed Updates"
+msgstr "Instalirana ažuriranja"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window
+#: ../src/gs-update-dialog.c:187
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalirano na %s"
+
+#: ../src/gs-update-monitor.c:99
+msgid "Software Updates Available"
+msgstr "Dostupna softverska ažuriranja"
+
+#: ../src/gs-update-monitor.c:100
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Važna OS i aplikacijska ažuriranja su spremna za instalaciju"
+
+#: ../src/gs-update-monitor.c:103
+msgid "View"
+msgstr "Prikaz"
+
+#: ../src/gs-update-monitor.c:104
+msgid "Not Now"
+msgstr "Ne sada"
+
+# translations.
+#: ../src/gs-update-monitor.c:144
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Softversko ažuriranje je instalirano"
+msgstr[1] "Softverska ažuriranja su instalirana"
+msgstr[2] "Softverska ažuriranja su instalirana"
+
+# translations.
+#. TRANSLATORS: message when we've donje offline updates
+#: ../src/gs-update-monitor.c:148
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Važno OS ažuriranje je instalirano."
+msgstr[1] "Važna OS ažuriranja su instalirana."
+msgstr[2] "Važna OS ažuriranja su instalirana."
+
+#: ../src/gs-update-monitor.c:154
+msgid "Software Updates Failed"
+msgstr "Softversko ažuriranje nije uspjelo"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:156
+msgid "An important OS update failed to be installed."
+msgstr "Instalacija važnog OS ažuriranja nije uspjela."
+
+#: ../src/gs-update-monitor.c:164
+msgid "Review"
+msgstr "Recenzija"
+
+#: ../src/gs-update-monitor.c:166
+msgid "Show Details"
+msgstr "Prikaži detalje"
+
+#: ../src/gs-update-monitor.c:167
+msgid "OK"
+msgstr "U redu"
+
+#. vim: set noexpandtab:
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "Jedna zvijezda"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "Dvije zvijezde"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "Tri zvijezde"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "Četiri zvijezde"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "Pet zvijezda"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:136
+#, c-format
+msgid "%s is now installed"
+msgstr "%s je sad instaliran"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:140
+msgid "Launch"
+msgstr "Pokreni"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:166
+#, c-format
+msgid "Installation of %s failed."
+msgstr "Instalacija %s nije uspjela."
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:171
+#, c-format
+msgid "Removal of %s failed."
+msgstr "Uklanjanje %s nije uspjelo."
+
+#. TRANSLATORS: window title
+#: ../src/gs-utils.c:244
+msgid "Install Third-Party Software?"
+msgstr "Instaliraj softver treće strane?"
+
+#. TRANSLATORS: window title
+#: ../src/gs-utils.c:248
+msgid "Enable Third-Party Software Source?"
+msgstr "Uključi izvore softvera treće strane?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application nami, e.g. "Firefox"
+#. * 2. Software source nami, e.g. fedora-optional
+#.
+#: ../src/gs-utils.c:266
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">free "
+"and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nije<a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">slobodan "
+"softver otvorenog koda</a>, i pruža ga “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application nami, e.g. "Firefox"
+#. * 2. Software source nami, e.g. fedora-optional
+#: ../src/gs-utils.c:276
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s je pružen od “%s”."
+
+#. TRANSLATORS: a software source is a repo
+#: ../src/gs-utils.c:286
+msgid "This software source must be enabled to continue installation."
+msgstr "Izvor softvera mora biti omogućen za nastavak instalacije-"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: ../src/gs-utils.c:296
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Možda je nelegalno instalirati ili koristiti %s u nekim zemljama."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: ../src/gs-utils.c:302
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Možda je nelegalno instalirati ili koristiti ovaj kodek u nekim zemljama."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: ../src/gs-utils.c:309
+msgid "Don't Warn Again"
+msgstr "Ne upozoravaj ponovo"
+
+#. TRANSLATORS: button text
+#: ../src/gs-utils.c:318
+msgid "Enable and Install"
+msgstr "Omogući i instaliraj"
+
+#: ../src/plugins/gs-plugin-appstream.c:219
+#, c-format
+msgid "No AppStream data found"
+msgstr "Podatak AppStream nije pronađen"
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * bje considered a "Disjunctive OR Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 or MIT"
+#: ../src/plugins/gs-plugin-appstream.c:418
+msgid " or "
+msgstr " or "
+
+#: ../src/plugins/gs-plugin-hardcoded-categories.c:161
+msgid "Featured"
+msgstr "Istaknuto"
+
+#. TRANSLATORS: this is the mijenu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "Zvučni"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Mijenu subcategory of Audio"
+msgid "Editing"
+msgstr "Uređivanje"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Mijenu subcategory of Audio"
+msgid "Databases"
+msgstr "Baze podataka"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Mijenu subcategory of Audio"
+msgid "Disc Burning"
+msgstr "Rezanje diskova"
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Mijenu subcategory of Audio"
+msgid "Ham Radio"
+msgstr "Radio amater"
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Mijenu subcategory of Audio"
+msgid "MIDI"
+msgstr "MIDI"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Mijenu subcategory of Audio"
+msgid "Mixer"
+msgstr "Mikser"
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Mijenu subcategory of Audio"
+msgid "Music"
+msgstr "Muzika"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Mijenu subcategory of Audio"
+msgid "Players"
+msgstr "Igrači"
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Mijenu subcategory of Audio"
+msgid "Recorders"
+msgstr "Snimači"
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Mijenu subcategory of Audio"
+msgid "Sequencers"
+msgstr "Sekvenceri"
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Mijenu subcategory of Audio"
+msgid "Tuners"
+msgstr "Prijemnici"
+
+#. TRANSLATORS: this is the mijenu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr "Alati za razvoj"
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Building"
+msgstr "Izgradnja"
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Databases"
+msgstr "Baze podataka"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Debuggers"
+msgstr "Debageri"
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "GUI Designers"
+msgstr "Projektovanje korisničkog sučelja"
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "IDE"
+msgstr "IDE"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Profiling"
+msgstr "Profiliranje"
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Project Management"
+msgstr "Upravljanje projektom"
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Revision Control"
+msgstr "Kontrola verzijama"
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Translation"
+msgstr "Pijevod"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Mijenu subcategory of Development Tools"
+msgid "Web Development"
+msgstr "Veb razvoj"
+
+#. TRANSLATORS: this is the mijenu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "Obrazovanje"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Mijenu subcategory of Education"
+msgid "Art"
+msgstr "Umjetnost"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Mijenu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr "Vještačka inteligencija"
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Mijenu subcategory of Education"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Mijenu subcategory of Education"
+msgid "Biology"
+msgstr "Biologija"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Mijenu subcategory of Education"
+msgid "Chemistry"
+msgstr "Hemija"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Mijenu subcategory of Education"
+msgid "Computer Science"
+msgstr "Računarstvo"
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Mijenu subcategory of Education"
+msgid "Construction"
+msgstr "Izgradnja"
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Mijenu subcategory of Education"
+msgid "Data Visualization"
+msgstr "Vizualizacija podataka"
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Mijenu subcategory of Education"
+msgid "Economy"
+msgstr "Ekonomija"
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Mijenu subcategory of Education"
+msgid "Electricity"
+msgstr "Elektrotehnika"
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Mijenu subcategory of Education"
+msgid "Electronics"
+msgstr "Elektronika"
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Mijenu subcategory of Education"
+msgid "Engineering"
+msgstr "Inženjering"
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Mijenu subcategory of Education"
+msgid "Geography"
+msgstr "Geografija"
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Mijenu subcategory of Education"
+msgid "Geology"
+msgstr "Geologija"
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Mijenu subcategory of Education"
+msgid "Geoscience"
+msgstr "Geološke nauke"
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Mijenu subcategory of Education"
+msgid "History"
+msgstr "Historija"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Mijenu subcategory of Education"
+msgid "Humanities"
+msgstr "Humanističke znanosti"
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Mijenu subcategory of Education"
+msgid "Image Processing"
+msgstr "Obrada slika"
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Mijenu subcategory of Education"
+msgid "Languages"
+msgstr "Jezici"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Mijenu subcategory of Education"
+msgid "Literature"
+msgstr "Književnost"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Mijenu subcategory of Education"
+msgid "Maps"
+msgstr "Mape"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Mijenu subcategory of Education"
+msgid "Math"
+msgstr "Matematika"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Mijenu subcategory of Education"
+msgid "Medical"
+msgstr "Medicina"
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Mijenu subcategory of Education"
+msgid "Music"
+msgstr "Muzika"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Mijenu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr "Numerička analiza"
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Mijenu subcategory of Education"
+msgid "Parallel Computing"
+msgstr "Paralelno računastvo"
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Mijenu subcategory of Education"
+msgid "Physics"
+msgstr "Fizika"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Mijenu subcategory of Education"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Mijenu subcategory of Education"
+msgid "Spirituality"
+msgstr "Duhovnost"
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Mijenu subcategory of Education"
+msgid "Sports"
+msgstr "Sportovi"
+
+#. TRANSLATORS: this is the mijenu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr "Igre"
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Mijenu subcategory of Games"
+msgid "Action"
+msgstr "Radnja"
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Mijenu subcategory of Games"
+msgid "Adventure"
+msgstr "Avantura"
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Mijenu subcategory of Games"
+msgid "Arcade"
+msgstr "Arkada"
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Mijenu subcategory of Games"
+msgid "Blocks"
+msgstr "Blokovi"
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Mijenu subcategory of Games"
+msgid "Board"
+msgstr "Tabla"
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Mijenu subcategory of Games"
+msgid "Card"
+msgstr "Karta"
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Mijenu subcategory of Games"
+msgid "Emulators"
+msgstr "Emulatori"
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Mijenu subcategory of Games"
+msgid "Kids"
+msgstr "Djeca"
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Mijenu subcategory of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Mijenu subcategory of Games"
+msgid "Role Playing"
+msgstr "Igranje uloga"
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Mijenu subcategory of Games"
+msgid "Shooter"
+msgstr "Pucač"
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Mijenu subcategory of Games"
+msgid "Simulation"
+msgstr "Simulacija"
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Mijenu subcategory of Games"
+msgid "Sports"
+msgstr "Sportovi"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Mijenu subcategory of Games"
+msgid "Strategy"
+msgstr "Strategija"
+
+#. TRANSLATORS: this is the mijenu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr "Grafika"
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Mijenu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr "2D grafika"
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Mijenu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Mijenu subcategory of Graphics"
+msgid "OCR"
+msgstr "OCR"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Mijenu subcategory of Graphics"
+msgid "Photography"
+msgstr "Fotografija"
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Mijenu subcategory of Graphics"
+msgid "Publishing"
+msgstr "Objavljivanje"
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Mijenu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr "Bitmap grafika"
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Mijenu subcategory of Graphics"
+msgid "Scanning"
+msgstr "Skeniranje"
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Mijenu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr "Vektorska grafika"
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Mijenu subcategory of Graphics"
+msgid "Viewer"
+msgstr "Preglednik"
+
+#. TRANSLATORS: this is the mijenu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "Internet"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Mijenu subcategory of Internet"
+msgid "Chat"
+msgstr "Ćaskanje"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Mijenu subcategory of Internet"
+msgid "Dialup"
+msgstr "Dialup"
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Mijenu subcategory of Internet"
+msgid "Email"
+msgstr "Elektronska pošta"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Mijenu subcategory of Internet"
+msgid "Feed"
+msgstr "Dovod"
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Mijenu subcategory of Internet"
+msgid "File Transfer"
+msgstr "Podatkovni prijenos"
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Mijenu subcategory of Internet"
+msgid "Ham Radio"
+msgstr "Radio amater"
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Mijenu subcategory of Internet"
+msgid "Instant Messaging"
+msgstr "Brze poruke"
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Mijenu subcategory of Internet"
+msgid "IRC Clients"
+msgstr "IRC korisnici"
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Mijenu subcategory of Internet"
+msgid "Monitor"
+msgstr "Ekran"
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Mijenu subcategory of Internet"
+msgid "News"
+msgstr "Vijesti"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Mijenu subcategory of Internet"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Mijenu subcategory of Internet"
+msgid "Remote Access"
+msgstr "Udaljeni pristup"
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Mijenu subcategory of Internet"
+msgid "Telephony"
+msgstr "Telefonija"
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Mijenu subcategory of Internet"
+msgid "Video Conference"
+msgstr "Video konferencija"
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Mijenu subcategory of Internet"
+msgid "Web Browser"
+msgstr "Veb preglednik"
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Mijenu subcategory of Internet"
+msgid "Web Development"
+msgstr "Veb razvoj"
+
+#. TRANSLATORS: this is the mijenu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "Ured"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Mijenu subcategory of Office"
+msgid "Calendar"
+msgstr "Kalendar"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Mijenu subcategory of Office"
+msgid "Chart"
+msgstr "Dijagram"
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Mijenu subcategory of Office"
+msgid "Contact Management"
+msgstr "Upravljanje kontaktima"
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Mijenu subcategory of Office"
+msgid "Database"
+msgstr "Baza podataka"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Mijenu subcategory of Office"
+msgid "Dictionary"
+msgstr "Riječnik"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Mijenu subcategory of Office"
+msgid "Email"
+msgstr "E-pošta"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Mijenu subcategory of Office"
+msgid "Finance"
+msgstr "Finansije"
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Mijenu subcategory of Office"
+msgid "Flow Chart"
+msgstr "Dijagram"
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Mijenu subcategory of Office"
+msgid "PDA"
+msgstr "PDA"
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Mijenu subcategory of Office"
+msgid "Photography"
+msgstr "Fotografija"
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Mijenu subcategory of Office"
+msgid "Presentation"
+msgstr "Prezentacija"
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Mijenu subcategory of Office"
+msgid "Project Management"
+msgstr "Upravljanje projektom"
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Mijenu subcategory of Office"
+msgid "Publishing"
+msgstr "Objavljivanje"
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Mijenu subcategory of Office"
+msgid "Spreadsheet"
+msgstr "Tabelarni prikaz"
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Mijenu subcategory of Office"
+msgid "Viewer"
+msgstr "Preglednik"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Mijenu subcategory of Office"
+msgid "Word Processor"
+msgstr "Program za obradu teksta"
+
+#. TRANSLATORS: this is the mijenu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "Nauka"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Mijenu subcategory of Science"
+msgid "Art"
+msgstr "Umjetnost"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Mijenu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr "Vještačka inteligencija"
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Mijenu subcategory of Science"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Mijenu subcategory of Science"
+msgid "Biology"
+msgstr "Biologija"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Mijenu subcategory of Science"
+msgid "Chemistry"
+msgstr "Hemija"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Mijenu subcategory of Science"
+msgid "Computer Science"
+msgstr "Računarstvo"
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Mijenu subcategory of Science"
+msgid "Construction"
+msgstr "Izgradnja"
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Mijenu subcategory of Science"
+msgid "Data Visualization"
+msgstr "Vizualizacija podataka"
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Mijenu subcategory of Science"
+msgid "Economy"
+msgstr "Ekonomija"
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Mijenu subcategory of Science"
+msgid "Electricity"
+msgstr "Elektrotehnika"
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Mijenu subcategory of Science"
+msgid "Electronics"
+msgstr "Elektronika"
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Mijenu subcategory of Science"
+msgid "Engineering"
+msgstr "Inženjering"
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Mijenu subcategory of Science"
+msgid "Geography"
+msgstr "Geografija"
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Mijenu subcategory of Science"
+msgid "Geology"
+msgstr "Geologija"
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Mijenu subcategory of Science"
+msgid "Geoscience"
+msgstr "Geološke nauke"
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Mijenu subcategory of Science"
+msgid "History"
+msgstr "Historija"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Mijenu subcategory of Science"
+msgid "Humanities"
+msgstr "Humanističke znanosti"
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Mijenu subcategory of Science"
+msgid "Image Processing"
+msgstr "Obrada slika"
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Mijenu subcategory of Science"
+msgid "Languages"
+msgstr "Jezici"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Mijenu subcategory of Science"
+msgid "Literature"
+msgstr "Književnost"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Mijenu subcategory of Science"
+msgid "Maps"
+msgstr "Mape"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Mijenu subcategory of Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Mijenu subcategory of Science"
+msgid "Medical"
+msgstr "Medicina"
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Mijenu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr "Numerička analiza"
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Mijenu subcategory of Science"
+msgid "Parallel Computing"
+msgstr "Paralelno računastvo"
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Mijenu subcategory of Science"
+msgid "Physics"
+msgstr "Fizika"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Mijenu subcategory of Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Mijenu subcategory of Science"
+msgid "Spirituality"
+msgstr "Duhovnost"
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Mijenu subcategory of Science"
+msgid "Sports"
+msgstr "Sportovi"
+
+#. TRANSLATORS: this is the mijenu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "Sistem"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Mijenu subcategory of System"
+msgid "Emulator"
+msgstr "Emulator"
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Mijenu subcategory of System"
+msgid "File Manager"
+msgstr "Upravnik datoteka"
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Mijenu subcategory of System"
+msgid "File System"
+msgstr "Sistem datoteka"
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Mijenu subcategory of System"
+msgid "File Tools"
+msgstr "Alat za rad sa datotekama"
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Mijenu subcategory of System"
+msgid "Monitor"
+msgstr "Monitor"
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Mijenu subcategory of System"
+msgid "Security"
+msgstr "Sigurnost"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Mijenu subcategory of System"
+msgid "Terminal Emulator"
+msgstr "Emulator terminala"
+
+#. TRANSLATORS: this is the mijenu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr "Uslužni programi"
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Accessibility"
+msgstr "Pristup"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Archiving"
+msgstr "Arhiviranje"
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Calculator"
+msgstr "Kalkulator"
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Clock"
+msgstr "Sat"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Compression"
+msgstr "Sažimanje"
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Mijenu subcategory of Utilities"
+msgid "File Tools"
+msgstr "Alati za datoteke"
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Maps"
+msgstr "Karte"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Spirituality"
+msgstr "Duhovnost"
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Telephony Tools"
+msgstr "Telefonski alati"
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Mijenu subcategory of Utilities"
+msgid "Text Editor"
+msgstr "Uređivaš teksta"
+
+#. TRANSLATORS: this is the mijenu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "Video"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Mijenu subcategory of Video"
+msgid "Editing"
+msgstr "Uređivanje"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Mijenu subcategory of Video"
+msgid "Database"
+msgstr "Baza podataka"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Mijenu subcategory of Video"
+msgid "Disc Burning"
+msgstr "Rezanje diskova"
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Mijenu subcategory of Video"
+msgid "Players"
+msgstr "Igrači"
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Mijenu subcategory of Video"
+msgid "Recorders"
+msgstr "Snimači"
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Mijenu subcategory of Video"
+msgid "TV"
+msgstr "TV"
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Mijenu subcategory of Add-ons"
+msgid "Fonts"
+msgstr "Fontovi"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Mijenu subcategory of Add-ons"
+msgid "Codecs"
+msgstr "Kedci"
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Mijenu subcategory of Add-ons"
+msgid "Input Sources"
+msgstr "Izvori ulaza"
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Mijenu subcategory of Add-ons"
+msgid "Language Packs"
+msgstr "Jezički paketi"
+
+#: ../src/menus.ui.h:1
+msgid "_Software Sources"
+msgstr "_Izvor softvera"
+
+#: ../src/menus.ui.h:2
+msgid "_About"
+msgstr "_O programu"
+
+#: ../src/menus.ui.h:3
+msgid "_Quit"
+msgstr "_Izlaz"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..66b1cb4
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,5677 @@
+# Catalan translation for gnome-software.
+# Copyright (C) 2012 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-calendar package.
+#
+# Jordi Mas i Hernandez <jmas@softcatala.org>, 2013-2020
+# Gil Forcada <gilforcada@guifi.net>, 2014-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: unnamed project\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-01 15:47+0000\n"
+"PO-Revision-Date: 2020-07-03 01:29+0200\n"
+"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
+"Language-Team: Catalan <tradgnome@softcatala.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Id-Version: gnome-software master\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Gtranslator 3.36.0\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Programari del GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestor d'aplicacions per al GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"El Programari us permet cercar i instal·lar aplicacions noves i extensions "
+"del sistema així com eliminar aplicacions ja instal·lades."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"El Programari del GNOME mostra aplicacions populars i destacades amb "
+"descripcions útils i amb múltiples captures de pantalla per aplicació. Les "
+"aplicacions es poden trobar tan navegant per la llista de categories com "
+"cercant. També us permet actualitzar el sistema utilitzant l'actualització "
+"fora de línia."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Quadre de resum"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Quadre de detalls"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "S'ha instal·lat el quadre"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Quadre d'actualitzacions"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detalls de l'actualització"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "El projecte GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instal·la un fitxer Appstream en una ubicació de sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "S'està instal·lant un fitxer Appstream en una ubicació de sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Una llista de projectes compatibles"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Aquesta és una llista de projectes compatibles que hem de mostrar com ara el "
+"GNOME, el KDE i l'XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Si es gestionen les actualitzacions amb el Programari del GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Si s'inhabilita, el Programari del GNOME ocultarà el quadre "
+"d'actualitzacions i no realitzarà cap acció automàtica d'actualització o "
+"notificarà quan hi hagi actualitzacions."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Baixa i instal·la les actualitzacions automàticament"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Si s'habilita, el Programari del GNOME baixa actualitzacions automàticament "
+"en segon pla, i també instal·la les que no requereixen un reinici."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"Notifica a l'usuari que hi ha una actualització de programari en segon pla"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Si s'habilita, el Programari del GNOME notifica a l'usuari de les "
+"actualitzacions que s'han produït mentre l'usuari no era present."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Si s'ha de refrescar automàticament en una connexió limitada"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Si s'habilita, el Programari del GNOME refresca automàticament en rerefons "
+"inclús quan s'utilitza una connexió limitada (finalment baixant metadades, "
+"comprovant actualitzacions, etc., el que pot representar una despesa per "
+"l'usuari)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Si és la primera execució del Programari del GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostra les valoracions en estrelles al costat de les aplicacions"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtra les aplicacions basant-se en la branca per defecte configurada pel "
+"remot"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Les aplicacions no lliures mostren un diàleg d'avís abans d'instal·lar-se"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quan s'instal·lin aplicacions no lliures es pot mostrar un diàleg d'avís. "
+"Això controla si el diàleg se suprimeix."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Una llista d'aplicacions populars"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Una llista d'aplicacions a usar, substituint les definides pel sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "La marca horària de l'última comprovació d'actualització"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "La marca horària de l'última comprovació d'actualització"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"La marca horària de la primera actualització de seguretat, netejada després "
+"de l'actualització"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "La marca horària de l'última actualització"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"L'última marca de temps en què el sistema va estar en línia i va obtenir "
+"actualitzacions"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"El temps en segons per a verificar si la captura de pantalla font és encara "
+"vàlida"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Si escolliu un valor gran hi haurà menys connexions al servidor remot però "
+"les captures de pantalla poden trigar més temps a mostrar-se actualitzades a "
+"l'usuari. Un valor de 0 significa que no es comprovi mai el servidor si "
+"existeix una imatge en la memòria cau."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "El servidor a utilitzar per a les ressenyes d'aplicacions"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "La puntuació de karma mínima per a les ressenyes"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Ressenyes amb karma inferior a aquest nombre no es mostraran."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Una llista de dipòsits oficials que no han de ser considerats de terceres "
+"parts"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Una llista de dipòsits oficials que han de ser considerats de programari "
+"lliure"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"L'URL de la llicència a usar quan l'aplicació ha de ser considerada "
+"programari lliure"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instal·la paquets d'aplicacions per a tots els usuaris del sistema quan "
+"sigui possible"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permet l'accés al diàleg dipòsits de programari"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ofereix actualitzacions per versions preliminars"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostra alguns elements d'interfície d'usuari indicant que l'aplicació no és "
+"lliure"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Mostra la pregunta abans d'instal·lar de dipòsits de programari no lliures"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostra la mida de les aplicacions instal·lades a la llista d'aplicacions "
+"instal·lades"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://ca.wikipedia.org/wiki/Programari_de_propietat'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "L'URI que explica programari no lliure i de propietat"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Una llista dels URL que apunten als fitxers Appstream que es baixaran a la "
+"carpeta app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instal·la un fitxer Appstream en una ubicació de sistema per a tots els "
+"usuaris"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Habilita el dipòsit d'extensions del GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Una cadena utilitzada per a emmagatzemar l'identificador de gnome-online-"
+"account usat per a iniciar la sessió"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instal·lació de programari"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instal·la el programari seleccionat al sistema"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Selecciona-ho tot"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "No seleccionis res"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Dipòsits de programari"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Preferències d'actualització"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programari"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Vés enrere"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explora"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instal·lat"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Act_ualitzacions"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Cerca"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Font"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Dipòsits de programari"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examina el disc"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Paràmetres de xarxa"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Reinicia ara"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Més informació"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "S'ha posat en pausa les actualitzacions automàtiques"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "_Descobriu-ne més"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Fitxer local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paquet"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Pendent"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instal·lat"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "S'està instal·lant"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "S'està suprimint"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mode d'inici: sigui «updates» (actualitzacions), «updated» (actualitzat), "
+"«installed» (instal·lat) o «overview» (resum)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Cerca aplicacions"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "CERCA"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostra els detalls de l'aplicació (utilitzant l'ID d'aplicació)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostra els detalls de l'aplicació (utilitzant el nom de paquet)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instal·la l'aplicació (utilitzant l'ID d'aplicació)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Obre un fitxer de paquet local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NOM DE FITXER"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"El tipus d'interacció que s'espera per aquesta acció: ‘none’, ‘notify’, o "
+"‘full’"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostra informació de depuració detallada"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instal·la les actualitzacions pendents en segon pla"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostra les preferències d'actualització"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Surt de la instància en execució"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Prefereix fonts de fitxer locals abans que de l'AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostra el número de versió"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Jordi Mas i Hernàndez <jmas@softcatala.org>, 2013-2018"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Quant al programari"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Una forma engrescadora de gestionar el programari del sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "No hi ha detalls per a aquesta aplicació."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visiteu el lloc web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instal·la..."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instal·la"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Actualitza"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Suprimeix"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "El dispositiu no pot utilitzar-se durant l'actualització."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Requereix permisos addicionals"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Cal autenticació pel remot %s (regne %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Cal autenticació"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Cancel·la"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Entra"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Usuari"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Contrasen_ya"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Altres"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Tots"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Destacat"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s destacat"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Valoració"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nom"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostra"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menú de filtre per subcategories"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordena per"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menú d'ordenació per subcategories"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Introduïu un nombre de l'1 al %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Escolliu una aplicació:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "S'han instal·lat les actualitzacions del SO"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Les actualitzacions instal·lades recentment estan disponibles per a ser "
+"revisades"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "S'ha instal·lat %s"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "És necessari un reinici perquè els canvis tinguin efecte."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "L'aplicació ja està a punt per a fer-se servir."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Reinicia"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Executa"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Voleu instal·lar programari de tercers?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Voleu habilitar els dipòsits de programari de tercers?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s no és <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">programari lliure o de codi obert</a>, i es proporciona "
+"amb «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s es proporciona amb «%s»."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Cal habilitar aquest dipòsit de programari per a poder continuar amb la "
+"instal·lació."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Pot ser il·legal instal·lar o utilitzar %s en alguns països."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Pot ser il·legal instal·lar o utilitzar aquest còdec en alguns països."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "No tornis a avisar-me"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Habilita i instal·la"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Els errors detallats del gestor de paquets es mostren a continuació:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detalls"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "S'ha instal·lat una actualització"
+msgstr[1] "S'han instal·lat actualitzacions"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "És necessari un reinici perquè el canvi tingui efecte."
+msgstr[1] "És necessari un reinici perquè els canvis tinguin efecte."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ara no"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Sense violència en personatges animats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personatges animats en situacions insegures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personatges animats en conflictes agressius"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violència gràfica amb personatges animats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Sense violència fantàstica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personatges en situacions insegures fàcilment distingibles de la realitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Personatges en conflictes agressius fàcilment distingibles de la realitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violència gràfica fàcilment distingible de la realitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Sense violència realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personatges mig reals en situacions insegures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Representacions de personatges realistes en conflictes agressius"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Violència gràfica amb personatges realistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Sense matances"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Matances no realistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Matances realistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Representacions de matances i mutilacions de parts del cos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Sense violència sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Violació o altres comportaments sexuals violents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Sense referències a l'alcohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referències a begudes alcohòliques"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Ús de begudes alcohòliques"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Sense referències a drogues il·legals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referències a drogues il·legals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Ús de drogues il·legals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Sense referències als productes del tàbac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referències als productes del tàbac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Ús de productes del tàbac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Sense nuesa de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Nuesa artística breu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Nuesa prolongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Sense referències o representacions sexuals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Referències o representacions provocatives"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Referències o representacions sexuals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Comportament sexual gràfic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Sense blasfèmia de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Ús lleu o poc freqüent de la blasfèmia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Ús moderat de la blasfèmia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Ús extensiu o freqüent de la blasfèmia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Sense humor inapropiat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Humor vulgar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Humor groller"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor adult o sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Sense llenguatge discriminatori de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatiu respecte a un grup específic de gent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminació pensada per a causar dany emocional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Discriminació explicita basada en gènere, sexualitat, raça o religió"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Sense publicitat de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Emplaçament de producte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Referències explícites a marques específiques o productes de marques "
+"registrades"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "S'anima als usuaris a comprar coses específiques del món real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Sense apostes de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Apostes en esdeveniments aleatoris utilitzant testimonis o crèdits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Apostes usant moneda virtual al joc"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Apostes usant diners reals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Sense possibilitat de gastar diners"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "S'anima als usuaris a comprar coses específiques del món real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Possibilitat de gastar diners de veritat al joc"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Sense possibilitat de fer xat amb els altres usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interaccions usuari a usuari sense funcionalitat xat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funcionalitat de xat no supervisada entre usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funcionalitat de xat no supervisada entre usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Sense possibilitat de parlar amb els altres usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Funcionalitat de xat d'àudio o vídeo no supervisada entre usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Sense compartició en les xarxes socials de noms d'usuari ni adreces de "
+"correu electrònic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Compartició en les xarxes socials de noms d'usuari o adreces de correu "
+"electrònic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "No es comparteix informació de l'usuari amb terceres parts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Comprova si hi ha una versió més nova de l'aplicació"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"La compartició de dades de diagnòstic no permet a altres identificar l'usuari"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"La compartició de dades de diagnòstic permet a altres identificar l'usuari"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "No es comparteix la ubicació física amb altres usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Es comparteix la ubicació física amb altres usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Sense referències a homosexualitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Referències indirectes a l'homosexualitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Petons entre persones del mateix sexe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportament sexual gràfic entre gent del mateix sexe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Sense referències a la prostitució"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referències indirectes a la prostitució"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referències directes a la prostitució"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Representacions gràfiques de l'acte de prostitució"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Sense referències a l'adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referències indirectes a l'adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referències directes a l'adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Representacions gràfiques de l'acte d'adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Sense personatges sexualitzats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Personatges humans lleugers de roba"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Personatges humans obertament sexualitzats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Sense referències a la profanació"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Representacions o referències històriques de profanació"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Representacions d'avui en dia de profanació"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Representacions gràfiques d'avui en dia de profanació"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Sense restes mortals humanes visibles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Restes mortals humanes visibles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Restes mortals humanes són exposades als elements"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Representacions gràfiques de profanació de cossos humans"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Sense referències a l'esclavitud"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Representacions o referències històriques d'esclavitud"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Representacions de l'esclavitud avui en dia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Representacions gràfiques de l'esclavitud avui en dia"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "General"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Tots"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Només adults"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Madur"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescents"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Majors de 10 anys"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Tothom"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Infantesa"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Una aplicació"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s està demanant compatibilitat addicional de formats de fitxers."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Calen tipus MIME addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s està demanant tipus de lletra addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Calen tipus de lletra addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s està demanant còdecs multimèdia addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Calen còdecs multimèdia addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s està demanant controladors d'impressora addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Calen controladors d'impressora addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s està demanant paquets addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Calen paquets addicionals"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Cerca al programari"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "S'està suprimint…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Pendent d'instal·lació..."
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Pendent de les actualitzacions…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "S'està preparant…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Aquesta aplicació només es pot fer servir si hi ha una connexió activa a "
+"Internet."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instal·la"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instal·la..."
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Executa"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Suprimeix"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Xarxa"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Es pot comunicar per la xarxa"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Serveis del sistema"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Pot accedir als serveis D-Bus al bus del sistema"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Serveis de sessió"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Pot accedir als serveis D-Bus al bus de la sessió"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositius"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Pot accedir a fitxers de dispositiu del sistema"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Carpeta d'usuari"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Pot veure, editar i crear fitxers"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Pot veure fitxers"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistema de fitxers"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Carpeta de baixada"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Paràmetres"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Pot veure i canviar qualsevol paràmetre"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistema de visualització antic"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Usa un sistema antic i insegur de visualització"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Escapament de l'entorn de proves"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Pot escapar-se de l'entorn de proves i eludir cap altres restriccions"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Aquesta aplicació està completament en un espai aïllat."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"No s'ha pogut determinar quines parts del sistema l'aplicació accedeix. Això "
+"succeeix normalment amb aplicacions antigues."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Mai"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Baix"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Mitjà"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Alt"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Cal accés a Internet perquè pugueu escriure una ressenya"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "No s'ha trobat «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domini públic"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://ca.wikipedia.org/wiki/Domini_p%C3%BAblic"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.ca"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Programari lliure"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Els usuaris estan lligats a la següent llicència:"
+msgstr[1] "Els usuaris estan lligats a les següents llicències:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Més informació"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pàgina de detalls"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "S'està baixant"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Actualitza"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Afegeix una drecera"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "S_uprimeix la drecera"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "No s'ha proporcionat cap captura de pantalla"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "S'inclou dipòsit de programari"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"L'aplicació inclou un dipòsit de programari que proporciona actualitzacions "
+"així com accés a altre programari."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "No s'inclouen dipòsits de programari"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"L'aplicació no inclou cap dipòsit de programari. No s'actualitzarà a "
+"versions més noves."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Aquest programari ja es proporciona amb la vostra distribució i no heu de "
+"substituir-ho."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "S'ha identificat un dipòsit de programari"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"En afegir aquest dipòsit de programari tindreu accés a programari i "
+"actualitzacions addicionals."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Utilitzeu només fonts de programari de confiança."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Lloc _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Fes un donatiu"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Traduït a la vostra llengua"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentació"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Activitat de publicacions"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integració amb el sistema"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Entorn de proves"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versió"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Valoració per edat"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Nivell de permisos"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Actualitzat"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categoria"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Mida instal·lat"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Mida de la baixada"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Desenvolupador"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Llicència"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Lliure"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Propietària"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Complements"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "S'instal·laran els complements seleccionats juntament amb l'aplicació."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Ressenyes"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Escriviu una ressenya"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mostra'n més"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Això vol dir que el programari pot ser usat, copiat, distribuït, estudiat i "
+"modificat lliurement."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Programari de propietat"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Això vol dir que el programari és propietat d'una persona o empresa. Hi ha "
+"habitualment restriccions en el seu ús i normalment no es pot accedir al seu "
+"codi font."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Llicència del programari desconeguda"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Els termes de llicència d'aquest programa són desconeguts."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+"L'aplicació va ser valorada d'aquesta manera per les seves característiques:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "No hi ha detalls disponibles per aquesta valoració."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " i "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tipus de lletres disponibles per a l'script %s"
+msgstr[1] "Tipus de lletres disponibles per als scripts %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Programari disponible per %s"
+msgstr[1] "Programari disponible per %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "No s'ha pogut trobar el programari demanat"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "No s'ha trobat %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "al lloc web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "No s'ha trobat cap aplicació disponible que proporcioni el fitxer %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per a saber com obtenir aplicacions "
+"que falten poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+"No s'ha trobat cap aplicació disponible per a la compatibilitat amb %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s no està disponible."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per a saber com obtenir una aplicació "
+"que pugui reproduir aquest format poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+"No s'ha trobat cap tipus de lletra disponible per a la compatibilitat amb "
+"l'script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per a saber com obtenir tipus de "
+"lletra addicionals poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "No s'ha trobat cap còdec disponible per al format %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per a saber com obtenir un còdec que "
+"pugui reproduir aquest format poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "No s'ha trobat cap recurs Plasma per a la compatibilitat amb %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per a saber com obtenir recursos "
+"Plasma addicionals poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "No s'ha trobat cap controlador d'impressora per %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per a saber com obtenir un controlador "
+"per aquesta impressora poden trobar-se %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "aquest lloc web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Desafortunadament, %s que cercàveu no s'ha pogut trobar. Vegeu %s per a més "
+"informació."
+msgstr[1] ""
+"Desafortunadament, %s que cercàveu no s'han pogut trobar. Vegeu %s per a més "
+"informació."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "No s'ha pogut trobar cap resultat de cerca"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Format de fitxer %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Pàgina de còdecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Us donem la benvinguda"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Us donem la benvinguda al Programari"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"El Programari us permet instal·lar tot el programari que necessiteu des d'un "
+"sol lloc. Vegeu les recomanacions, navegueu per les categories o cerqueu les "
+"aplicacions que voleu."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Anem de compres"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Suprimida"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instal·lada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Actualitzada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Desconegut"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B de %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historial"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicacions del sistema"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Pàgina d'instal·lació"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "S'està baixant el catàleg de programari"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "S'està carregant la pàgina"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "S'està iniciant…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"La xarxa actual està limitada. Les connexions limitades tenen límits de "
+"dades o càrrecs associats amb ells. Per a estalviar dades, les "
+"actualitzacions automàtiques s'han posat en pausa.\n"
+"\n"
+"Les actualitzacions automàtiques es reprendran quan una xarxa no limitada "
+"estigui disponible. Fins llavors, encara és possible instal·lar "
+"actualitzacions manuals.\n"
+"\n"
+"Alternativament, si la xarxa actual ha estat identificada incorrectament com "
+"a limitada, es pot canviar aquesta configuració."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Obre els _paràmetres de xarxa"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Pàgina de moderació"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "No hi ha ressenyes per a moderar"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "system"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "user"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Branca"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installation"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Més…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicacions d'àudio i vídeo recomanades"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Jocs recomanats"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicacions gràfiques recomanades"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicacions de productivitat recomanades"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Accedeix a programari addicional des de fonts de programari de tercers "
+"seleccionades."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Alguns d'aquests programes són propietaris i, per tant, tenen restriccions "
+"en l'ús, compartició, i accés al seu codi font."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Descobriu-ne més..."
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Habilita"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Pàgina de resum"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Voleu habilitar la font de programari de tercers?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Previ"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Següent"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Selecció de l'editor"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Publicacions recents"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categories"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "No s'ha trobat cap descripció detallada de l'aplicació"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Prepara %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Esteu segur de voler suprimir el dipòsit %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Se suprimiran totes les aplicacions de %s. Haureu de tornar a instal·lar el "
+"dipòsit per a utilitzar-les de nou."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Esteu segur de voler suprimir %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "Se suprimirà %s i haureu d'instal·lar-la per a utilitzar-la de nou."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (instal·lat)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferències d'actualització"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Actualitzacions automàtiques"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Les actualitzacions automàtiques estan inhabilitades quan s'està en mòbil o "
+"amb una connexió limitada."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificacions de les actualitzacions automàtiques"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Mostra notificacions quan les actualitzacions s'han instal·lat "
+"automàticament."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Alguns dels programes actualment instal·lats no són compatibles amb %s. Si "
+"continueu, els programes següents seran suprimits automàticament durant "
+"l'actualització:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Programari incompatible"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continua"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "S'ha instal·lat %u aplicació"
+msgstr[1] "S'han instal·lat %u aplicacions"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "S'ha instal·lat %u connector"
+msgstr[1] "S'han instal·lat %u connectors"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicació"
+msgstr[1] "%u aplicacions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u connector"
+msgstr[1] "%u connectors"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "S'ha instal·lat %s i %s"
+msgstr[1] "S'han instal·lat %s i %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Suprimeix «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Inhabilita «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"El programari que s'ha instal·lat des d'aquest dipòsit ja no rebrà més "
+"actualitzacions, incloent-hi correccions de seguretat."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Inhabilita"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "el sistema operatiu"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Aquests dipòsits complementen el programari per defecte proveït per %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Dipòsits de tercers parts"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "No hi ha cap dipòsit addicional"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Habilita"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Suprimeix..."
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Inhabilita..."
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "S'està habilitant"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "S'està inhabilitant"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Habilitat"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Inhabilitat"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "L'odio"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "No m'agrada"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Està bé"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "M'agrada"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "N'estic enamorat"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Preneu-vos més temps per a escriure la ressenya"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Seleccioneu la valoració en estrelles"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "El resum és massa curt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "El resum és massa llarg"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "La descripció és massa curta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "La descripció és massa llarga"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publica una ressenya"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Publica"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Resum"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Doneu un resum curt de la ressenya. Per exemple, «una aplicació molt bona "
+"que recomano»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Ressenya"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Què penseu de l'aplicació? Intenteu donar les raons de la vostra opinió."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Conegueu quines dades que s'envien en la nostra <a href=\"https://odrs.gnome."
+"org/privacy\">política de privadesa</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "valoracions en total"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "Podeu informar de contingut abusiu, groller o discriminatori."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Un cop heu informat, la ressenya s'ocultarà fins que un administrador la "
+"revisi."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Voleu informar d'una ressenya?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Informeu"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Li ha estat útil aquesta ressenya?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sí"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "No"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Pse"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Informeu..."
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Suprimeix..."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "No s'ha trobat la captura de pantalla"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "No s'ha pogut carregar la imatge"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "No s'ha trobat la mida de la captura de pantalla"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "No s'ha pogut crear la memòria cau"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "La captura de pantalla no és vàlida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "La captura de pantalla no està disponible"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Captura de pantalla"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u coincidència més"
+msgstr[1] "%u coincidències més"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Pàgina de cerca"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "No s'ha trobat cap aplicació"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+"No s'han pogut baixar les actualitzacions del microprogramari des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "No s'han pogut baixar les actualitzacions des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "No s'han pogut baixar les actualitzacions"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: calia accés a Internet però no "
+"estava disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"No s'han pogut baixar les actualitzacions des de %s: no hi havia prou espai "
+"al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: no hi havia prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "No s'han pogut baixar les actualitzacions: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: l'autenticació no era vàlida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: no teniu permís per a instal·lar "
+"programari"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "No s'ha pogut obtenir una llista d'actualitzacions"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "No s'ha pogut instal·lar %s ja que ha fallat la baixada des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "No s'ha pogut instal·lar %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"No s'ha pogut instal·lar %s ja que l'entorn d'execució %s no està disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "No s'ha pogut instal·lar %s ja que no és compatible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"No s'ha pogut instal·lar: calia accés a Internet però no estava disponible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "No s'ha pogut instal·lar: l'aplicació tenia un format invàlid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "No s'ha pogut instal·lar %s: no hi ha prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "No s'ha pogut instal·lar %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "No s'ha pogut instal·lar %s: l'autenticació era invàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"No s'ha pogut instal·lar %s: no teniu permisos per a instal·lar el programari"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "No s'ha pogut instal·lar %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "No s'ha pogut instal·lar %s: el nivell de la bateria és massa baix"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "No s'ha pogut instal·lar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "No s'ha pogut actualitzar %s des de %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "No s'ha pogut actualitzar %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "No s'ha pogut instal·lar %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"No s'han pogut instal·lar les actualitzacions ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"No s'ha pogut actualitzar: calia accés a Internet però no estava disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "No s'ha pogut actualitzar %s: no hi havia prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"No s'han pogut instal·lar les actualitzacions: no hi ha prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "No s'ha pogut actualitzar %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "No s'han pogut instal·lar les actualitzacions: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "No s'ha pogut actualitzar %s: l'autenticació no era vàlida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"No s'han pogut instal·lar les actualitzacions: l'autenticació era invàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"No s'ha pogut actualitzar %s: no teniu permís per a actualitzar programari"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"No s'han pogut instal·lar les actualitzacions: no teniu permís per a "
+"actualitzar programari"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "No s'ha pogut actualitzar %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"No s'han pogut instal·lar les actualitzacions: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "No s'ha pogut actualitzar %s: el nivell de la bateria és massa baix"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"No s'han pogut instal·lar les actualitzacions: el nivell de la bateria és "
+"massa baix"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "No es pot actualitzar %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "No s'han pogut instal·lar les actualitzacions"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "No es pot actualitzar a %s des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "No s'ha pogut actualitzar a %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"No s'ha pogut actualitzar a %s: calia accés a Internet però no estava "
+"disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "No s'ha pogut actualitzar %s: no hi havia prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "No s'ha pogut actualitzar %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "No s'ha pogut actualitzar %s: l'autenticació no era vàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "No s'ha pogut actualitzar %s: o teniu permís per a actualitzar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "No s'ha pogut actualitzar %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "No s'ha pogut actualitzar %s: el nivell de la bateria és massa baix"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "No s'ha pogut actualitzar a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "No s'ha pogut suprimir %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "No s'ha pogut suprimir %s: l'autenticació era invàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "No s'ha pogut suprimir %s: no teniu permís per a suprimir programari"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "No s'ha pogut suprimir %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "No s'ha pogut suprimir %s: el nivell de la bateria és massa baix"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "No s'ha pogut suprimir %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "No s'ha pogut executar %s: %s no està instal·lat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"No hi havia prou espai al disc. Allibereu espai a disc i torneu-ho a provar"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "S'ha produït un error"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "No s'ha pogut instal·lar el fitxer: no és compatible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr ""
+"S'ha produït un error en instal·lar el fitxer: ha fallat l'autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "No s'ha pogut instal·lar: no és compatible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "S'ha produït un error en instal·lar: ha fallat l'autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "No s'ha pogut contactar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Cal reiniciar %s per a utilitzar els nous connectors."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Cal reiniciar aquesta aplicació per a utilitzar els nous connectors."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Cal estar connectat al corrent"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "El nivell de la bateria és massa baix"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Font: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (s'està instal·lant)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (s'està suprimint)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Suprimeix-ho tot"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "No hi ha cap descripció sobre l'actualització disponible."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instal·lat al %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Actualitzacions instal·lades"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Afegits"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Suprimits"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Actualitzacions"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Desactualitzacions"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "No s'ha instal·lat cap actualització en aquest sistema."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Actualitzacions de seguretat pendents"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Us recomanem que instal·leu les actualitzacions importants ara"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Reinicia i instal·la"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Hi ha actualitzacions disponibles"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Hi ha actualitzacions importants del sistema operatiu i d'aplicacions "
+"preparades per a instal·lar-se"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Mostra"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicació actualitzada. Cal reiniciar"
+msgstr[1] "%u aplicacions actualitzades. Cal reiniciar"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicació actualitzada"
+msgstr[1] "%u aplicacions actualitzades"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s s'ha actualitzat."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Reinicieu l'aplicació."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s and %s s'han actualitzat."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicació requereix un reinici."
+msgstr[1] "%u aplicacions requereixen un reinici."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inclou %s, %s i %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Hi ha actualitzacions del sistema operatiu disponibles"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Actualitzeu-vos per a continuar rebent actualitzacions de seguretat."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Una nova versió de %s està disponible per a instal·lar"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Hi ha actualitzacions disponibles"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "No s'ha pogut realitzar l'actualització de programari"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"No s'ha pogut realitzar una actualització important del sistema operatiu."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostra els detalls"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "S'ha completat l'actualització del sistema"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Us donem la benvinguda a %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "S'ha instal·lat l'actualització de programari"
+msgstr[1] "S'han instal·lat les actualitzacions de programari"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "S'ha instal·lat una actualització important del sistema operatiu."
+msgstr[1] "S'han instal·lat actualitzacions importants del sistema operatiu."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Revisa"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "No s'ha pogut actualitzar"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "El sistema ja estava actualitzat."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Es va cancel·lar l'actualització."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Calia accés a Internet però no estava disponible. Assegureu-vos que teniu "
+"accés a Internet i torneu-ho a provar."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Hi ha hagut problemes de seguretat amb l'actualització. Consulteu el "
+"proveïdor per a més detalls."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"No hi havia prou espai a disc. Allibereu espai a disc i torneu-ho a provar."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"S'ha produït un error en instal·lar l'actualització. Espereu a una "
+"actualització nova i torneu a provar-ho. Si el problema persisteix, "
+"contacteu amb el vostre proveïdor de programari."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%-H:%M"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Ahir, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Ahir, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Fa dos dies"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Fa tres dies"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Fa quatre dies"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Fa cinc dies"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Fa sis dies"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Fa una setmana"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Fa dues setmanes"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "S'estan cercant actualitzacions…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "S'estan preparant les actualitzacions…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Això pot trigar una estona)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Darrera comprovació: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s no és compatible."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "El vostre sistema operatiu no és compatible."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Això vol dir que no rebreu actualitzacions de seguretat."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Us recomanem que actualitzeu a una versió més nova."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Es poden aplicar càrrecs"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"La comprovació d'actualitzacions mentre s'utilitza la xarxa mòbil pot "
+"incórrer en càrrecs."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Comprova-ho de totes maneres"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Sense xarxa"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr ""
+"Es requereix accés a Internet per a comprovar si hi ha actualitzacions."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "S'està comprovant…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Comprova si hi ha actualitzacions"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Pàgina d'actualitzacions"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Tot el programari està actualitzat"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"La comprovació d'actualitzacions quan utilitzeu la xarxa mòbil pot incórrer "
+"en l'aplicació de càrrecs"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Comprova de totes formes"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Connecta't per a comprovar si hi ha actualitzacions"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Paràmetres de la _xarxa"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Les actualitzacions es gestionen automàticament"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Reinicia i actualitza"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Actualitza-ho tot"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Microprogramari integrat"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Cal reiniciar"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Actualitzacions d'aplicacions"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Microprogramari del dispositiu"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Baixa"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Us recomanem que feu una còpia de seguretat de les vostres dades abans "
+"d'actualitzar."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Reinicia ara"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Les actualitzacions s'aplicaran quan es reiniciï l'ordinador."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s ara disponible"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "S'està esperant per a baixar %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "S'estan baixant %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s preparat per a instal·lar-se"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Una actualització major, amb noves funcionalitat i més polida."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Més informació"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Afegeix, suprimeix o actualitza programari en aquest ordinador"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Actualitzacions;Actualització;Fonts;Dipòsits;Preferències;Instal·lació;"
+"Desinstal·lació;Aplicació;Programa;Apli;Botiga;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Edició i creació d'àudio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Reproductors de música"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depuradors"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Entorns integrats de desenvolupament"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Intel·ligència artificial"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Química"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Llengües"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemàtiques"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robòtica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Acció"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocs"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Taula"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartes"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladors"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Mainada"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lògica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Jocs de rol"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Esports"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estratègia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Gràfics 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Escaneig"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Gràfics vectorials"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visualitzador"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendari"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base de dades"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finances"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Processador de textos"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tipus de lletra"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Còdecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Fonts d'entrada"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Paquets d'idioma"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localització"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Controladors de maquinari"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Xat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Notícies"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navegador web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editors de text"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Còmics"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficció"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Salut"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Història"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estil de vida"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Política"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Esports"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Àudio i vídeo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Eines de desenvolupament"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educació i ciència"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Jocs"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Gràfics i fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Productivitat"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Notícies i comunicació"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referència"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilitats"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Actualitzacions del SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclou millores de rendiment, d'estabilitat i de seguretat."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "S'estan baixant les imatges destacades…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Una actualització major del sistema operatiu Endless, amb noves "
+"funcionalitat i més polida."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"El servei d'actualitzacions EOS no ha pogut obtenir i aplicar "
+"l'actualització."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "L'instal·lador d'AppStream del Programari del GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Ha fallat l'anàlisi dels arguments de la línia d'ordres"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Heu d'especificar un nom de fitxer exactament"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Aquest programa només pot ser utilitzat per l'usuari root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "No s'ha pogut validar el tipus de contingut"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "S'ha produït un error en copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "S'estan baixant fitxers de metadades extres…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "S'està baixant la informació de l'actualització…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Actualitzeu per a obtenir les últimes funcions, millores rendiment i "
+"estabilitat."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Compatibilitat amb Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak és un espai de treball per aplicacions d'escriptori a Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "S'estan obtenint les metadades del flatpak per %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Actualització del dispositiu %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Actualització del sistema %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Actualització del controlador encastat %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Actualització ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Actualització ME corporatiu %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Actualització ME del consumidor %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Actualització del controlador %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Actualització del controlador Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Actualització del microcodi CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Actualització de la configuració %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "S'està baixant la signatura de l'actualització del microprogramari…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "S'estan baixant les metadades de l'actualització del microprogramari…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Compatibilitat amb actualitzacions de microprogramari"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Proveeix compatibilitat amb actualitzacions de microprogramari"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "S'estan baixant les valoracions de l'aplicació…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Compatibilitat amb Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS que proporciona ressenyes d'usuaris d'aplicacions"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Botiga de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Compatibilitat amb Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un «snap» és un paquet Linux universal"
+
+#~ msgid "About %s"
+#~ msgstr "Quant a %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Paràmetres de l'extensió"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Les extensions les useu sota la vostra responsabilitat. Si teniu cap "
+#~ "problema de sistema, us recomanem inhabilitar-les."
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensions del Shell"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Dipòsit d'extensions del GNOME Shell"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "S'estan baixant les metadades de l'extensió del shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Extensió del GNOME Shell"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Mostra la interfície de gestió de carpetes"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nom de la carpeta"
+
+#~ msgid "_Add"
+#~ msgstr "_Afegeix"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Afegeix a la carpeta d'aplicacions"
+
+#~ msgid "Top Rated"
+#~ msgstr "Valoració"
+
+#~ msgid "Failed to load components"
+#~ msgstr "No s'han pogut carregar els components"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validat correctament"
+
+#~ msgid "Failed to load file"
+#~ msgstr "No s'ha pogut carregar la imatge"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Canvis sense desar"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "L'aplicació ja està a punt per fer-se servir."
+
+#~ msgid "Merge documents"
+#~ msgstr "Fusiona documents"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Descarta els canvis"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Obre un fitxer Appstream"
+
+#~ msgid "_Open"
+#~ msgstr "_Obre"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Desa un fitxer Appstream"
+
+#~ msgid "_Save"
+#~ msgstr "_Desa"
+
+#~ msgid "Failed to save file"
+#~ msgstr "No s'ha pogut desar la imatge"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "El disseny del bàner %s s'ha suprimit."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "El disseny del bàner s'ha suprimit."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "La llista d'aplicacions té canvis no desats."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Mostra el registre detallat"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Dissenyador de bàners del Programari del GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Cap disseny"
+
+#~ msgid "Error message here"
+#~ msgstr "El missatge d'error va aquí"
+
+#~ msgid "App ID"
+#~ msgstr "Identificador de l'aplicació"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Selecció de l'editor"
+
+#~ msgid "Category Featured"
+#~ msgstr "Categoria destacada"
+
+#~ msgid "Undo"
+#~ msgstr "Desfés"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Dissenyador de bàners"
+
+#~ msgid "New Banner"
+#~ msgstr "Bàner nou"
+
+#~ msgid "Import from file"
+#~ msgstr "Importa des del fitxer"
+
+#~ msgid "Export to file"
+#~ msgstr "Exporta a un fitxer"
+
+#~ msgid "Delete Design"
+#~ msgstr "Suprimeix el disseny"
+
+#~ msgid "Featured App"
+#~ msgstr "Aplicació destacada"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Actualització del SO"
+
+#~ msgid "Spacing"
+#~ msgstr "Espaiat"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "La quantitat d'espai entre fills"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Feu clic als elements per seleccionar-los"
+
+#~ msgid "Select"
+#~ msgstr "Selecciona"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Afegeix a la carpeta…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Mou a la carpeta…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Suprimeix de la carpeta"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplicacions destacades"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Dissenyeu bàners destacats pel Programari del GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Programari;Aplicació;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Compatibilitat amb Web Apps"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Executeu aplicacions populars al navegador"
+
+#~ msgid "_All"
+#~ msgstr "_Tot"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Inicia la sessió / Registreu-vos…"
+
+#~ msgid "Continue"
+#~ msgstr "Continua"
+
+#~ msgid "Use"
+#~ msgstr "Utilitza"
+
+#~ msgid "Add another…"
+#~ msgstr "Afegeix un altre…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Esteu segur de voler comprar %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s s'instal·larà, i se us cobrarà %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Compra"
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2f A$"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2f C$"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2f CN¥"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f €"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f £"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f ¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2f NZ$"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f ₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2f US$"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Sessió iniciada com a %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Inicia la sessió…"
+
+#~ msgid "Sign out"
+#~ msgstr "Tanca la sessió"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "No s'ha pogut comprar %s: calia una autenticació"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "No s'ha pogut comprar %s: l'autenticació no era vàlida"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "No s'ha pogut comprar %s: no hi ha un mètode de pagament configurat"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "No s'ha pogut comprar %s: el pagament s'ha rebutjat"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "No es pot comprar %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Per a continuar us cal utilitzar un compte d'Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Per a continuar us cal utilitzar el compte d'Ubuntu One."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "S'està carregant el catàleg de programari"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "No s'ha pogut actualitzar %s des de %s"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Mostra informació de depuració per al servei"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Per a continuar heu d'iniciar la sessió a %s."
+
+#~ msgid "Email address"
+#~ msgstr "Adreça electrònica"
+
+#~ msgid "I have an account already"
+#~ msgstr "Ja tinc un compte"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Vull registrar un compte ara"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "He oblidat la contrasenya"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Inicieu la sessió automàticament la propera vegada"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Introduïu el PIN d'un ús per l'autenticació amb dos components."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autentica"
+
+#~ msgid "_About"
+#~ msgstr "_Quant"
+
+#~ msgid "_Quit"
+#~ msgstr "_Surt"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Al lloc web es pot trobar informació sobre %s, així com diferents opcions "
+#~ "de com obtenir un còdec que pugui reproduir aquest format."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "El vostre compte a «%s» ha estat suspès."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "No és possible instal·lar programari fins que això s'hagi resolt."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Per a més informació, visiteu %s."
+
+#~ msgid "Applications Updated"
+#~ msgstr "Aplicacions actualitzades"
+
+#~ msgid "Includes: ."
+#~ msgstr "Inclou: ."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "S'estan baixant actualitzacions noves…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "S'està baixant la pàgina de l'aplicació…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Compatibilitat amb Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "La plataforma d'entreteniment de Valve"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Reinicia i actualitza"
+
+#~ msgid "U_pdate All"
+#~ msgstr "_Actualitza-ho tot"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Reinicia i _instal·la"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "S'estan preparant les actualitzacions…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "S'està baixant l'actualització del microprogramari…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Compatibilitat amb Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba proveeix als desenvolupadors una manera senzilla de fer paquets de "
+#~ "programari"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Ordenat per nom"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Ordenat per valoració"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "La llista de fonts extra que han sigut prèviament habilitades"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "La llista de fonts que han estat prèviament habilitades quan s'han "
+#~ "instal·lat aplicacions de tercers."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Mostra programari no lliure als resultats de la cerca"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "La llista de fonts no lliures que poden habilitar-se opcionalment"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Proveeix accés a programari addicional, incloent-hi navegadors web i jocs."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Voleu habilitar les fonts de programari de propietat?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "No s'han instal·lat aplicacions o connectors. És possible que encara hi "
+#~ "hagi altres programes"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Normalment té restriccions en l'ús i accés al seu codi font."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Fonts de programari de propietat"
+
+#~ msgid "Remove Source"
+#~ msgstr "Suprimeix la font"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Les fonts de programari poden baixar-se des d'Internet. Us proporcionen "
+#~ "accés a programari addicional que no es proporciona amb %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "En eliminar una font també eliminareu qualsevol programa que hàgiu "
+#~ "instal·lat des de la mateixa."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "No hi ha cap programari instal·lat des d'aquesta font."
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instal·lat des d'aquesta font"
+
+#~ msgid "Source Details"
+#~ msgstr "Detalls de la font"
+
+#~ msgid "Last Checked"
+#~ msgstr "Darrera comprovació"
+
+#~ msgid "Added"
+#~ msgstr "Afegit"
+
+#~ msgid "Website"
+#~ msgstr "Lloc web"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Interaccions jugador a jugador predefinides del joc sense funcionalitat "
+#~ "xat"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Compartició d'informació de l'usuari amb terceres parts"
+
+#~ msgid "page1"
+#~ msgstr "pàgina 1"
+
+#~ msgid "page2"
+#~ msgstr "pàgina 2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Totes"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "«{%s}» [%s]"
+
+#~ msgid "Other Updates"
+#~ msgstr "Altres actualitzacions"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instal·la-ho tot"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Ha fallat la instal·lació de %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Ha fallat la supressió de %s."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Assegureu-vos que teniu accés a Internet i torneu-ho a provar."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Allibereu espai a disc i torneu-ho a provar."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Si el problema continua, contacteu el proveïdor del programari."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matemàtiques"
+
+#~ msgid "Science"
+#~ msgstr "Ciència"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Les fonts de programari us donen accés a programari addicional."
+
+#~ msgid "3rd party"
+#~ msgstr "De terceres parts"
+
+#~ msgid "web app"
+#~ msgstr "aplicació web"
+
+#~ msgid "nonfree"
+#~ msgstr "no lliure"
+
+#~ msgid "shell extension"
+#~ msgstr "Extensió del Shell"
+
+#~ msgid "_Installing"
+#~ msgstr "S'està _instal·lant"
+
+#~ msgid "_Removing"
+#~ msgstr "S'està _suprimint"
+
+#~ msgid " or "
+#~ msgstr " o "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Desconeguda"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Aquest programa ve d'una tercera part."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Aquest programa ve d'una tercera part i pot contenir components no "
+#~ "lliures."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Aquest programa pot contenir components no lliures."
+
+#~ msgid "non-free"
+#~ msgstr "no lliure"
+
+#~ msgid "One Star"
+#~ msgstr "Una estrella"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dues estrelles"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tres estrelles"
+
+#~ msgid "Four Stars"
+#~ msgstr "Quatre estrelles"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinc estrelles"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicacions d'ofimàtica recomanades"
+
+#~ msgid "Audio"
+#~ msgstr "Àudio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Bases de dades"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Enregistrament de disc"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioaficionat"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mesclador"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Enregistradores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Seqüenciadors"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Sintonitzadors"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Construcció"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Bases de dades"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Entorn de desenvolupament integrat"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Depuració"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Gestió de projectes"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traducció"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolupament web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Informàtica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Construcció"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualització de dades"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Electricitat"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Electrònica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Enginyeria"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Ciències de la terra"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Història"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanitats"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Processament d'imatge"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapes"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Anàlisi numèrica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computació paral·lela"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Trets"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulació"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Esports"
+
+#~ msgid "Graphics"
+#~ msgstr "Gràfics"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Gràfics 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Gràfics matricials"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Marcatge"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Correu electrònic"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Canals de difusió"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Transferència de fitxers"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioafició"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Missatgeria instantània"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Clients IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitorització"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Accés remot"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonia"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolupament web"
+
+#~ msgid "Office"
+#~ msgstr "Oficina"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagrames"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Gestió de contactes"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Diccionaris"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Correu electrònic"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Diagrames de flux"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografia"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentacions"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Gestió de projectes"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Fulls de càlcul"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visualitzadors"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Art"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Intel·ligència artificial"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Informàtica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Construcció"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualització de dades"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Electricitat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Electrònica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Enginyeria"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Ciències de la terra"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Història"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanitats"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Processament d'imatges"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Llengües"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapes"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matemàtiques"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Anàlisi numèrica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computació paral·lela"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robòtica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Esports"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emuladors"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Gestors de fitxers"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Eines de fitxers"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitorització"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Seguretat"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emuladors de terminal"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Accessibilitat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arxivament"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calculadores"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Rellotges"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compressió"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Eines de fitxers"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapes"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Eines de telefonia"
+
+#~ msgid "Video"
+#~ msgstr "Vídeo"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Base de dades"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Enregistrament de discos"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Reproductors"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Enregistradores"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "S'està calculant…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Desconeguda"
+
+#~ msgid "_History"
+#~ msgstr "_Historial"
+
+#~ msgid "Size"
+#~ msgstr "Mida"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "No s'ha trobat les dades d'AppStream"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "No s'havia finalitzat una actualització anterior."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "No s'ha pogut instal·lar l'actualització. Això és degut habitualment a un "
+#~ "problema amb l'actualització. Espereu a una actualització nova i torneu-"
+#~ "ho a provar."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Aplicació d'Internet"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Entra al mode de servei GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Una actualització no s'ha signat de la forma correcta."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "No es va poder completar l'actualització."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Es va sol·licitar una actualització fora de línia però no hi havia cap "
+#~ "paquet per actualitzar. "
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "No quedava espai lliure al disc."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "No es va poder instal·lar una actualització."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr ""
+#~ "L'actualització fora de línia va fallar d'una manera no determinada."
+
+#~ msgid "No sources found."
+#~ msgstr "No s'ha trobat cap font."
+
+#~ msgid "OK"
+#~ msgstr "D'acord"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "S'ha instal·lat %i aplicació i %i connector"
+#~ msgstr[1] "S'ha instal·lat %i aplicacions i %i connectors"
diff --git a/po/ca@valencia.po b/po/ca@valencia.po
new file mode 100644
index 0000000..1b64272
--- /dev/null
+++ b/po/ca@valencia.po
@@ -0,0 +1,4789 @@
+# Catalan translation for gnome-software.
+# Copyright (C) 2012 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-calendar package.
+#
+# Jordi Mas i Hernandez <jmas@softcatala.org>, 2013, 2015, 2016, 2017
+# Gil Forcada <gilforcada@guifi.net>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=General\n"
+"POT-Creation-Date: 2017-09-30 08:23+0000\n"
+"PO-Revision-Date: 2017-08-21 09:10+0200\n"
+"Last-Translator: Xavi Ivars <xavi.ivars@gmail.com>\n"
+"Language-Team: Catalan <tradgnome@softcatala.org>\n"
+"Language: ca-valencia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Id-Version: gnome-software master\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.0.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Programari del GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestor d'aplicacions per al GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"El Programari vos permet buscar i instal·lar aplicacions noves i extensions "
+"del sistema així com eliminar aplicacions ja instal·lades."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"El Programari del GNOME mostra aplicacions populars i destacades amb "
+"descripcions útils i amb múltiples captures de pantalla per aplicació. Les "
+"aplicacions es poden trobar tan navegant per la llista de categories com "
+"cercant. També vos permet actualitzar el sistema utilitzant l'actualització "
+"fora de línia."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Quadre de resum"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Quadre de detalls"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "S'ha instal·lat el quadre"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Quadre d'actualitzacions"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detalls de l'actualització"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:884
+msgid "The GNOME Project"
+msgstr "El projecte GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instal·la un fitxer Appstream en una ubicació de sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "S'està instal·lant un fitxer Appstream en una ubicació de sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Una llista de projectes compatibles"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Esta és una llista de projectes compatibles que hem de mostrar com ara el "
+"GNOME, el KDE i l'XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates in GNOME Software"
+msgstr "Si es gestionen les actualitzacions amb el Programari del GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel and not perform any "
+"automatic updates actions."
+msgstr ""
+" Si s'inhabilita, el Programari del GNOME ocultarà el quadre "
+"d'actualitzacions i no realitzarà cap acció automàtica d'actualització."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically download updates"
+msgstr "Si s'han de baixar les actualitzacions automàticament"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background "
+"and prompts the user to install them when ready."
+msgstr ""
+"Si s'habilita, el Programari del GNOME baixa actualitzacions automàticament "
+"en segon pla i demana a l'usuari instal·lar-les quan estan llestes."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Si s'ha de refrescar automàticament en una connexió limitada"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Si s'habilita, el Programari del GNOME refresca automàticament en rerefons "
+"inclús quan s'utilitza una connexió limitada (finalment baixant metadades, "
+"comprovant actualitzacions, etc el que podria representar despesa per "
+"l'usuari)."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Si és la primera execució del Programari del GNOME"
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "Mostra les valoracions en estrelles al costat de les aplicacions"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtra les aplicacions basant-se en la branca per defecte configurada pel "
+"remot"
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Les aplicacions no lliures mostren un diàleg d'avís abans d'instal·lar-se"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quan s'instal·len aplicacions no lliures es pot mostrar un diàleg d'avís. "
+"Això controla si el diàleg se suprimeix."
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "Una llista d'aplicacions populars"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Una llista d'aplicacions a usar, substituint les definides pel sistema."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The list of extra sources that have been previously enabled"
+msgstr "La llista de fonts extra que han sigut prèviament habilitades"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid ""
+"The list of sources that have been previously enabled when installing third-"
+"party applications."
+msgstr ""
+"La llista de fonts que han estat prèviament habilitades quan s'han "
+"instal·lat aplicacions de tercers."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "La marca horària de l'última comprovació d'actualització"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "La marca horària de l'última comprovació d'actualització"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"La marca horària de la primera actualització de seguretat, netejada després "
+"de l'actualització"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "La marca horària de l'última actualització"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"El temps en segons per verificar si la captura de pantalla font és encara "
+"vàlida"
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Si escolliu un valor gran hi haurà menys connexions al servidor remot però "
+"les captures de pantalla poden trigar més temps a mostrar-se actualitzades a "
+"l'usuari. Un valor de 0 significa que no es comprovi mai el servidor si "
+"existeix una imatge en la memòria cau."
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "El servidor a utilitzar per les ressenyes d'aplicacions"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr "La puntuació de karma mínima per les ressenyes"
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Ressenyes amb karma inferior a este nombre no es mostraran."
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr ""
+"Una llista de fonts oficials que no han de ser considerades de terceres parts"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official sources that should be considered free software"
+msgstr ""
+"Una llista de fonts oficials que han de ser considerades de programari lliure"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"L'URL de la llicència a usar quan l'aplicació ha de ser considerada "
+"programari lliure"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instal·la paquets d'aplicacions per a tots els usuaris del sistema quan "
+"siga possible "
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr "Mostra la interfície de gestió de carpetes"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Sources dialog"
+msgstr "Permet l'accés al diàleg fonts de programari"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ofereix actualitzacions per versions preliminars"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostra alguns elements d'interfície d'usuari indicant que l'aplicació no és "
+"lliure"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software sources"
+msgstr ""
+"Mostra la pregunta abans d'instal·lar de fonts de programari no lliures"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show non-free software in search results"
+msgstr "Mostra programari no lliure als resultats de la busca"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostra la mida de les aplicacions instal·lades a la llista d'aplicacions "
+"instal·lades"
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "L'URI que explica programari no lliure i de propietat"
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "A list of non-free sources that can be optionally enabled"
+msgstr "La llista de fonts no lliures que poden habilitar-se opcionalment"
+
+#: data/org.gnome.software.gschema.xml:139
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Una llista dels URL que apunten als fitxers Appstream que es baixaran a la "
+"carpeta app-info"
+
+#: data/org.gnome.software.gschema.xml:143
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instal·la un fitxer Appstream en una ubicació de sistema per a tots els "
+"usuaris"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instal·lació de programari"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instal·la el programari seleccionat al sistema"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Selecciona-ho tot"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "No seleccionis res"
+
+#: src/gnome-software.ui:24 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programari"
+
+#: src/gnome-software.ui:43 src/gs-sources-dialog.ui:23
+#: src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "Vés arrere"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "_Tot"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "Instal·lat"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "Act_ualitzacions"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "Busca"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-sources-dialog.ui:6
+#: src/gs-sources-dialog.ui:46
+msgid "Software Sources"
+msgstr "Fonts de programari"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "Examina el disc"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1391
+msgid "Network Settings"
+msgstr "Paràmetres de xarxa"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "Reinicia ara"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "Més informació"
+
+#: src/gs-app-addon-row.c:95 src/gs-app-row.c:430 src/gs-details-page.ui:344
+msgid "Pending"
+msgstr "Pendent"
+
+#: src/gs-app-addon-row.c:101 src/gs-app-row.ui:209 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88 src/gs-popular-tile.c:70
+msgid "Installed"
+msgstr "Instal·lat"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: src/gs-app-addon-row.c:105 src/gs-app-row.c:218 src/gs-details-page.c:439
+msgid "Installing"
+msgstr "S'està instal·lant"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: src/gs-app-addon-row.c:109 src/gs-app-row.c:224
+msgid "Removing"
+msgstr "S'està suprimint"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "Nom de la carpeta"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.c:379 src/gs-details-page.ui:330 src/gs-editor.c:623
+#: src/gs-editor.c:655 src/gs-installed-page.c:609 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "_Cancel·la"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Afig"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Afig a la carpeta d'aplicacions"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:99
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mode d'inici: siga «updates» (actualitzacions), «updated» (actualitzat), "
+"«installed» (instal·lat) o «overview» (resum)"
+
+#: src/gs-application.c:99
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:101
+msgid "Search for applications"
+msgstr "Busca aplicacions"
+
+#: src/gs-application.c:101
+msgid "SEARCH"
+msgstr "CERCA"
+
+#: src/gs-application.c:103
+msgid "Show application details (using application ID)"
+msgstr "Mostra els detalls de l'aplicació (utilitzant l'ID d'aplicació)"
+
+#: src/gs-application.c:103 src/gs-application.c:107
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:105
+msgid "Show application details (using package name)"
+msgstr "Mostra els detalls de l'aplicació (utilitzant el nom de paquet)"
+
+#: src/gs-application.c:105
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:107
+msgid "Install the application (using application ID)"
+msgstr "Instal·la l'aplicació (utilitzant l'ID d'aplicació)"
+
+#: src/gs-application.c:109
+msgid "Open a local package file"
+msgstr "Obri un fitxer de paquet local"
+
+#: src/gs-application.c:109
+msgid "FILENAME"
+msgstr "NOM DE FITXER"
+
+#: src/gs-application.c:111
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"El tipus d'interacció que s'espera per esta acció: ‘none’, ‘notify’, o "
+"‘full’"
+
+#: src/gs-application.c:114
+msgid "Show verbose debugging information"
+msgstr "Mostra informació de depuració detallada"
+
+#: src/gs-application.c:116
+msgid "Show profiling information for the service"
+msgstr "Mostra informació de depuració per al servei"
+
+#: src/gs-application.c:118
+msgid "Quit the running instance"
+msgstr "Ix de la instància en execució"
+
+#: src/gs-application.c:120
+msgid "Prefer local file sources to AppStream"
+msgstr "Prefereix fonts de fitxer locals abans que de l'AppStream"
+
+#: src/gs-application.c:122
+msgid "Show version number"
+msgstr "Mostra el número de versió"
+
+#: src/gs-application.c:306
+msgid "translator-credits"
+msgstr "Jordi Mas i Hernàndez <jmas@softcatala.org>, 2013-2017"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:313
+#, c-format
+msgid "About %s"
+msgstr "Quant a %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:317
+msgid "A nice way to manage the software on your system."
+msgstr "Una forma atractiva de gestionar el programari del sistema."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:171
+msgid "Visit website"
+msgstr "Visiteu el lloc web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:176
+msgid "Install…"
+msgstr "Instal·la..."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:183
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:192 src/gs-common.c:279 src/gs-page.c:544
+msgid "Install"
+msgstr "Instal·la"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:199
+msgid "Update"
+msgstr "Actualitza"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: src/gs-app-row.c:203 src/gs-app-row.c:212 src/gs-page.c:700
+msgid "Remove"
+msgstr "Suprimeix"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:330
+msgid "Device cannot be used during update."
+msgstr "El dispositiu no pot utilitzar-se durant l'actualització."
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:340 src/gs-details-page.ui:1000
+msgid "Source"
+msgstr "Font"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:68
+msgid "To continue you need to sign in."
+msgstr "Per a continuar heu d'iniciar la sessió."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:72
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "Per a continuar heu d'iniciar la sessió a %s."
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "Adreça electrònica"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "Ja tinc un compte"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "Contrasenya"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "Vull registrar un compte ara"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "He oblidat la contrasenya"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "Inicieu la sessió automàticament la propera vegada"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "Introduïu el PIN d'un ús per l'autenticació amb dos components."
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "PIN"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "Continua"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:193
+msgid "Other"
+msgstr "Altres"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:198
+msgid "All"
+msgstr "Tots"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:202
+msgid "Featured"
+msgstr "Destacat"
+
+#: src/gs-category-page.ui:81
+msgid "Extension Settings"
+msgstr "Paràmetres de l'extensió"
+
+#: src/gs-category-page.ui:110
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Les extensions les useu sota la vostra responsabilitat. Si teniu cap "
+"problema de sistema, vos recomanem inhabilitar-les."
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:205
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Introduïu un nombre de l'1 al %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:268
+msgid "Choose an application:"
+msgstr "Escolliu una aplicació:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:135
+msgid "OS updates are now installed"
+msgstr "S'han instal·lat les actualitzacions del SO"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:138
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Les actualitzacions instal·lades recentment estan disponibles per ser "
+"revisades"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:142
+#, c-format
+msgid "%s is now installed"
+msgstr "S'ha instal·lat %s"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:145
+msgid "Application is ready to be used."
+msgstr "L'aplicació ja està a punt per fer-se servir."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:151
+msgid "Launch"
+msgstr "Executa"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "Voleu instal·lar programari de tercers?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+msgid "Enable Third-Party Software Source?"
+msgstr "Voleu habilitar la font de programari de tercers?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#.
+#: src/gs-common.c:232
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s no és <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">programari lliure o de codi obert</a>, i es proporciona "
+"amb «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:242
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s es proporciona amb «%s»."
+
+#. TRANSLATORS: a software source is a repo
+#: src/gs-common.c:252
+msgid "This software source must be enabled to continue installation."
+msgstr ""
+"Cal habilitar esta font de programari per poder continuar amb la "
+"instal·lació."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:262
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Pot ser il·legal instal·lar o utilitzar %s en alguns països."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Pot ser il·legal instal·lar o utilitzar este còdec en alguns països."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:275
+msgid "Don’t Warn Again"
+msgstr "No tornes a avisar-me"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:284
+msgid "Enable and Install"
+msgstr "Habilita i instal·la"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:429
+msgid "Detailed errors from the package manager follow:"
+msgstr "Els errors detallats del gestor de paquets es mostren a continuació:"
+
+#: src/gs-common.c:448 src/gs-details-page.ui:607
+msgid "Details"
+msgstr "Detalls"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "Sense violència en personatges animats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personatges animats en situacions insegures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personatges animats en conflictes agressius"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violència gràfica amb personatges animats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "Sense violència fantàstica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personatges en situacions insegures fàcilment distingibles de la realitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Personatges en conflictes agressius fàcilment distingibles de la realitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violència gràfica fàcilment distingible de la realitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "Sense violència realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personatges mig reals en situacions insegures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Representacions de personatges realistes en conflictes agressius"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "Violència gràfica amb personatges realistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "Sense matances"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "Matances no realistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "Matances realistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Representacions de matances i mutilacions de parts del cos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "Sense violència sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "Violació o altres comportaments sexuals violents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "Sense referències a l'alcohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "Referències a begudes alcohòliques"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "Ús de begudes alcohòliques"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "Sense referències a drogues il·legals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "Referències a drogues il·legals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "Ús de drogues il·legals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "Referències als productes del tàbac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "Ús de productes del tàbac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "Sense nuesa de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "Nuesa artística breu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "Nuesa prolongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "Sense referències o representacions sexuals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "Referències o representacions provocatives"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "Referències o representacions sexuals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "Comportament sexual gràfic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "Sense blasfèmia de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "Ús lleu o poc freqüent de la blasfèmia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "Ús moderat de la blasfèmia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "Ús extensiu o freqüent de la blasfèmia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "Sense humor inapropiat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "Humor vulgar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "Humor groller"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "Humor adult o sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "Sense llenguatge discriminatori de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "Negatiu respecte a un grup específic de gent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminació pensada per causar dany emocional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Discriminació explicita basada en gènere, sexualitat, raça o religió"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "Sense publicitat de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "Emplaçament de producte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Referències explícites a marques específiques o productes de marques "
+"registrades"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Players are encouraged to purchase specific real-world items"
+msgstr "S'anima als jugadors a comprar coses específiques del món real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "Sense apostes de cap tipus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "Apostes en esdeveniments aleatoris utilitzant testimonis o crèdits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "Apostes usant moneda virtual al joc"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "Apostes usant diners reals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "Sense possibilitat de gastar diners"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Ability to spend real money in-game"
+msgstr "Possibilitat de gastar diners de veritat al joc"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "No way to chat with other players"
+msgstr "Sense possibilitat de fer xat amb els altres jugadors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Player-to-player game interactions without chat functionality"
+msgstr "Interaccions jugador a jugador del joc sense funcionalitat xat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "Player-to-player preset interactions without chat functionality"
+msgstr ""
+"Interaccions jugador a jugador predefinides del joc sense funcionalitat xat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Uncontrolled chat functionality between players"
+msgstr "Funcionalitat de xat no supervisada entre jugadors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "No way to talk with other players"
+msgstr "Sense possibilitat de parlar amb els altres jugadors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "Uncontrolled audio or video chat functionality between players"
+msgstr "Funcionalitat de xat d'àudio o vídeo no supervisada entre jugadors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Sense compartició en les xarxes socials de noms d'usuari ni adreces de "
+"correu electrònic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Compartició en les xarxes socials de noms d'usuari o adreces de correu "
+"electrònic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "No sharing of user information with 3rd parties"
+msgstr "No es comparteix informació de l'usuari amb terceres parts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "Sharing user information with 3rd parties"
+msgstr "Compartició d'informació de l'usuari amb terceres parts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location to other users"
+msgstr "No es comparteix la ubicació física amb altres usuaris"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing physical location to other users"
+msgstr "Compartició la ubicació física amb altres usuaris"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:294
+msgid "An application"
+msgstr "Una aplicació"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s està demanant compatibilitat addicional de formats de fitxers."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional MIME Types Required"
+msgstr "Calen tipus MIME addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s està demanant tipus de lletra addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Fonts Required"
+msgstr "Calen tipus de lletra addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s està demanant còdecs multimèdia addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Multimedia Codecs Required"
+msgstr "Calen còdecs multimèdia addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s està demanant controladors d'impressora addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:320
+msgid "Additional Printer Drivers Required"
+msgstr "Calen controladors d'impressora addicionals"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:324
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s està demanant paquets addicionals."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:326
+msgid "Additional Packages Required"
+msgstr "Calen paquets addicionals"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:335
+msgid "Find in Software"
+msgstr "Busca al programari"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#: src/gs-details-page.c:278 src/gs-details-page.c:308
+#: src/gs-details-page.ui:206 src/gs-upgrade-banner.ui:146
+msgid "_Install"
+msgstr "_Instal·la"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:313
+msgid "_Update"
+msgstr "_Actualitza"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: src/gs-details-page.c:326
+msgid "_Install…"
+msgstr "_Instal·la..."
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:373 src/gs-details-page.ui:242
+msgid "_Remove"
+msgstr "_Suprimeix"
+
+#: src/gs-details-page.c:434 src/gs-sources-dialog.c:513
+msgid "Removing…"
+msgstr "S'està suprimint…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:744
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Esta aplicació només es pot fer servir si hi ha una connexió activa a "
+"Internet."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:879
+msgctxt "version"
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:913
+msgctxt "updated"
+msgid "Never"
+msgstr "Mai"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:957
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Desconegut"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1361
+msgid "You need internet access to write a review"
+msgstr "Cal accés a Internet perquè pugueu escriure una ressenya"
+
+#: src/gs-details-page.c:1490
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "No s'ha trobat «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2065
+msgid "Public domain"
+msgstr "Domini públic"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2081 src/gs-details-page.ui:1395
+msgid "Free Software"
+msgstr "Programari lliure"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2138
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Els usuaris estan lligats a la següent llicència:"
+msgstr[1] "Els usuaris estan lligats a les següents llicències:"
+
+#: src/gs-details-page.c:2154 src/gs-details-page.ui:1504
+msgid "More information"
+msgstr "Més informació"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pàgina de detalls"
+
+#. Translators: A label for a button to execute the selected application.
+#: src/gs-details-page.ui:228
+msgid "_Launch"
+msgstr "_Executa"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:358
+msgid "_Add shortcut"
+msgstr "_Afig una drecera"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:373
+msgid "Re_move shortcut"
+msgstr "S_uprimeix la drecera"
+
+#: src/gs-details-page.ui:468
+msgid "No screenshot provided"
+msgstr "No s'ha proporcionat cap captura de pantalla"
+
+#: src/gs-details-page.ui:504
+msgid "Software Source Included"
+msgstr "S'inclouen fonts de programari"
+
+#: src/gs-details-page.ui:505
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+"L'aplicació inclou una font de programari que proporciona actualitzacions "
+"així com accés a altre programari."
+
+#: src/gs-details-page.ui:518
+msgid "No Software Source Included"
+msgstr "No s'inclouen fonts de programari"
+
+#: src/gs-details-page.ui:519
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr ""
+"L'aplicació no inclou cap font de programari. No s'actualitzarà a versions "
+"més noves."
+
+#: src/gs-details-page.ui:533
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Este programari ja es proporciona amb la vostra distribució i no heu de "
+"substituir-ho."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:546
+msgid "Software Source Identified"
+msgstr "S'ha identificat una font de programari"
+
+#: src/gs-details-page.ui:547
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr ""
+"En afegir esta font de programari tindreu accés a programari i "
+"actualitzacions addicionals."
+
+#: src/gs-details-page.ui:548
+msgid "Only use software sources that you trust."
+msgstr "Utilitzeu només fonts de programari de confiança."
+
+#: src/gs-details-page.ui:564
+msgid "_Website"
+msgstr "Lloc _web"
+
+#: src/gs-details-page.ui:579
+msgid "_Donate"
+msgstr "_Fes un donatiu"
+
+#: src/gs-details-page.ui:713
+msgid "Localized in your Language"
+msgstr "Traduït a la vostra llengua"
+
+#: src/gs-details-page.ui:725
+msgid "Documentation"
+msgstr "Documentació"
+
+#: src/gs-details-page.ui:737
+msgid "Release Activity"
+msgstr "Activitat de publicacions"
+
+#: src/gs-details-page.ui:749
+msgid "System Integration"
+msgstr "Integració amb el sistema"
+
+#: src/gs-details-page.ui:761
+msgid "Sandboxed"
+msgstr "Entorn de proves"
+
+#: src/gs-details-page.ui:786 src/gs-sources-dialog.ui:359
+msgid "Version"
+msgstr "Versió"
+
+#: src/gs-details-page.ui:823
+msgid "Age Rating"
+msgstr "Valoració per edat"
+
+#: src/gs-details-page.ui:861
+msgid "Updated"
+msgstr "Actualitzat"
+
+#: src/gs-details-page.ui:896
+msgid "Category"
+msgstr "Categoria"
+
+#: src/gs-details-page.ui:934
+msgid "Installed Size"
+msgstr "Mida instal·lat"
+
+#: src/gs-details-page.ui:967
+msgid "Download Size"
+msgstr "Mida de la baixada"
+
+#: src/gs-details-page.ui:1033
+msgid "Developer"
+msgstr "Desenvolupador"
+
+#: src/gs-details-page.ui:1067
+msgid "License"
+msgstr "Llicència"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1087
+msgid "Free"
+msgstr "Lliure"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1104
+msgid "Proprietary"
+msgstr "Propietària"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1121 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "Desconegut"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1175 src/gs-installed-page.c:487
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "Complements"
+
+#: src/gs-details-page.ui:1188
+msgid "Selected add-ons will be installed with the application."
+msgstr "S'instal·laran els complements seleccionats juntament amb l'aplicació."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1231
+msgid "Reviews"
+msgstr "Ressenyes"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1247
+msgid "_Write a Review"
+msgstr "_Escriviu una ressenya"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1269
+msgid "_Show More"
+msgstr "_Mostra'n més"
+
+#: src/gs-details-page.ui:1412
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Això vol dir que el programari pot ser lliurement usat, copiat, distribuït, "
+"estudiat i modificat."
+
+#: src/gs-details-page.ui:1471
+msgid "Proprietary Software"
+msgstr "Programari de propietat"
+
+#: src/gs-details-page.ui:1488
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Això vol dir que el programari és propietat d'una persona o empresa. Hi ha "
+"habitualment restriccions en el seu ús i normalment no es pot accedir al seu "
+"codi font."
+
+#: src/gs-details-page.ui:1533
+msgid "Unknown Software License"
+msgstr "Llicència del programari desconeguda"
+
+#: src/gs-details-page.ui:1550
+msgid "The license terms of this software are unknown."
+msgstr "Els termes de llicència d'este programa són desconeguts."
+
+#: src/gs-details-page.ui:1577
+msgid "The application was rated this way because it features:"
+msgstr ""
+"L'aplicació va ser valorada d'esta manera per les seues característiques:"
+
+#: src/gs-details-page.ui:1603
+msgid "No details were available for this rating."
+msgstr "No hi ha detalls disponibles per esta valoració."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "CSS validat correctament"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "No s'ha pogut carregar la imatge"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "Canvis sense guardar"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "L'aplicació ja està a punt per fer-se servir."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "Fusiona documents"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "Descarta els canvis"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "Obri un fitxer Appstream"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "_Obri"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "Al_ça"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "No s'ha pogut guardar la imatge"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "El disseny del bàner %s s'ha suprimit."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "El disseny del bàner s'ha suprimit."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "La llista d'aplicacions té canvis no guardats."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr "Mostra el registre detallat"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "Dissenyador de bàners del Programari del GNOME"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr "Cap disseny"
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr "El missatge d'error va ací"
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr "Identificador de l'aplicació"
+
+#: src/gs-editor.ui:296
+msgid "Name"
+msgstr "Nom"
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "Resum"
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr "Selecció de l'editor"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr "Categoria destacada"
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr "Desfés"
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Dissenyador de bàners"
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr "Bàner nou"
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr "Importa des del fitxer"
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr "Exporta a un fitxer"
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr "Suprimeix el disseny"
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr "Aplicació destacada"
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr "Actualització del SO"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:145
+msgid " and "
+msgstr " i "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:148
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:174
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tipus de lletres disponibles per a l'script %s"
+msgstr[1] "Tipus de lletres disponibles per als scripts %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:182
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Programari disponible per %s"
+msgstr[1] "Programari disponible per %s"
+
+#: src/gs-extras-page.c:224
+msgid "Unable to Find Requested Software"
+msgstr "No s'ha pogut trobar el programari demanat"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:322
+#, c-format
+msgid "%s not found"
+msgstr "No s'ha trobat %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:326
+msgid "on the website"
+msgstr "al lloc web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:333
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "No s'ha trobat cap aplicació disponible que proporcioni el fitxer %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:337 src/gs-extras-page.c:348 src/gs-extras-page.c:359
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per saber com obtindre aplicacions que "
+"falten poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:344 src/gs-extras-page.c:366
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+"No s'ha trobat cap aplicació disponible per a la compatibilitat amb %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:355
+#, c-format
+msgid "%s is not available."
+msgstr "%s no està disponible."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:370
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per saber com obtindre una aplicació "
+"que puga reproduir este format poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:377
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+"No s'ha trobat cap tipus de lletra disponible per a la compatibilitat amb "
+"l'script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:381
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per saber com obtindre tipus de lletra "
+"addicionals poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:388 lib/gs-plugin-loader.c:1417
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "No s'ha trobat cap còdec disponible per al format %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:392
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per saber com obtindre un còdec que "
+"puga reproduir este format poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:399
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "No s'ha trobat cap recurs Plasma per a la compatibilitat amb %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:403
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per saber com obtindre recursos Plasma "
+"addicionals poden trobar-se %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:410
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "No s'ha trobat cap controlador d'impressora per %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:414
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informació sobre %s, així com opcions per saber com obtindre un controlador "
+"per esta impressora poden trobar-se %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:459
+msgid "this website"
+msgstr "este lloc web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:463
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Desafortunadament, %s que cercàveu no s'ha pogut trobar. Vegeu %s per a més "
+"informació."
+msgstr[1] ""
+"Desafortunadament, %s que cercàveu no s'han pogut trobar. Vegeu %s per a més "
+"informació."
+
+#: src/gs-extras-page.c:535 src/gs-extras-page.c:591 src/gs-extras-page.c:630
+msgid "Failed to find any search results"
+msgstr "No s'ha pogut trobar cap resultat de busca"
+
+#: src/gs-extras-page.c:824
+#, c-format
+msgid "%s file format"
+msgstr "Format de fitxer %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Pàgina de còdecs"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "Vos donem la benvinguda"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "Vos donem la benvinguda al Programari"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"El Programari vos permet instal·lar tot el programari que necessiteu des d'un "
+"sol lloc. Vegeu les recomanacions, navegueu per les categories o cerqueu les "
+"aplicacions que voleu."
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_Anem de compres"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "Espaiat"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "La quantitat d'espai entre fills"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "Suprimida"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instal·lada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr "Actualitzada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "Historial"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:483
+msgid "System Applications"
+msgstr "Aplicacions del sistema"
+
+#: src/gs-installed-page.c:617
+msgid "Click on items to select them"
+msgstr "Feu clic als elements per seleccionar-los"
+
+#: src/gs-installed-page.c:823
+msgid "Select"
+msgstr "Selecciona"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Pàgina d'instal·lació"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_Afig a la carpeta…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "_Mou a la carpeta…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "_Suprimeix de la carpeta"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:74
+msgid "Software catalog is being downloaded"
+msgstr "S'està baixant el catàleg de programari"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:78
+msgid "Software catalog is being loaded"
+msgstr "S'està carregant el catàleg de programari"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "S'està carregant la pàgina"
+
+#: src/gs-loading-page.ui:53
+msgid "Starting up…"
+msgstr "S'està iniciant…"
+
+#: src/gs-menus.ui:7
+msgid "_Software Sources"
+msgstr "_Fonts de programari"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_Quant"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "I_x"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Pàgina de moderació"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "No hi ha ressenyes per moderar"
+
+#. add button
+#: src/gs-overview-page.c:317
+msgid "More…"
+msgstr "Més…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:483
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicacions d'àudio i vídeo recomanades"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:488
+msgid "Recommended Games"
+msgstr "Jocs recomanats"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:493
+msgid "Recommended Graphics Applications"
+msgstr "Aplicacions gràfiques recomanades"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:498
+msgid "Recommended Productivity Applications"
+msgstr "Aplicacions de productivitat recomanades"
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:841
+msgid ""
+"Provides access to additional software, including web browsers and games."
+msgstr ""
+"Proveeix accés a programari addicional, incloent-hi navegadors web i jocs."
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:845
+msgid "Proprietary software has restrictions on use and access to source code."
+msgstr ""
+"El programari de propietat té restriccions en l'ús i accés al seu codi font."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the proprietary info bar
+#: src/gs-overview-page.c:852 src/gs-sources-dialog.c:267
+msgid "Find out more…"
+msgstr "Descobriu-ne més..."
+
+#. TRANSLATORS: button to turn on proprietary software sources
+#: src/gs-overview-page.c:887
+msgid "Enable"
+msgstr "Habilita"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Pàgina de resum"
+
+#: src/gs-overview-page.ui:49
+msgid "Enable Proprietary Software Sources?"
+msgstr "Voleu habilitar les fonts de programari de propietat?"
+
+#: src/gs-overview-page.ui:117
+msgid "Featured Application"
+msgstr "Aplicacions destacades"
+
+#: src/gs-overview-page.ui:150
+msgid "Categories"
+msgstr "Categories"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:310
+msgid "Editor’s Picks"
+msgstr "Selecció de l'editor"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:348
+msgid "Recent Releases"
+msgstr "Publicacions recents"
+
+#: src/gs-overview-page.ui:421
+msgid "No Application Data Found"
+msgstr "No s'ha trobat cap descripció detallada de l'aplicació"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:445
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "Esteu segur de voler comprar %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:449
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "%s s'instal·larà, i se vos cobrarà %s."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:462
+msgid "Purchase"
+msgstr "Compra"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:535
+#, c-format
+msgid "Prepare %s"
+msgstr "Prepara %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:669
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "Esteu segur de voler suprimir la font %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:673
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr ""
+"Se suprimiran totes les aplicacions de %s. Haureu d'instal·lar-les per "
+"utilitzar-les de nou."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:681
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Esteu segur de voler suprimir %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:684
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "Se suprimirà %s i haureu d'instal·lar-la per utilitzar-la de nou."
+
+#: lib/gs-plugin-loader.c:1420
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"Al lloc web es pot trobar informació sobre %s, així com diferents opcions de "
+"com obtindre un còdec que puga reproduir este format."
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "%.2f A$"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "%.2f C$"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "%.2f CN¥"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "%.2f €"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "%.2f £"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "%.2f ¥"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "%.2f NZ$"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "%.2f ₽"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "%.2f US$"
+
+#: lib/gs-price.c:129
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Alguns dels programes actualment instal·lats no són compatibles amb %s. Si "
+"continueu, els programes següents seran suprimits automàticament durant "
+"l'actualització:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "Programari incompatible"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_Continua"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:98
+msgid "Hate it"
+msgstr "L'odio"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:102
+msgid "Don’t like it"
+msgstr "No m'agrada"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:106
+msgid "It’s OK"
+msgstr "Està bé"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:110
+msgid "Like it"
+msgstr "M'agrada"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:114
+msgid "Love it"
+msgstr "N'estic enamorat"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:136
+msgid "Please take more time writing the review"
+msgstr "Preneu-vos més temps per escriure la ressenya"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "Please choose a star rating"
+msgstr "Seleccioneu la valoració en estrelles"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:144
+msgid "The summary is too short"
+msgstr "El resum és massa curt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:148
+msgid "The summary is too long"
+msgstr "El resum és massa llarg"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:152
+msgid "The description is too short"
+msgstr "La descripció és massa curta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:156
+msgid "The description is too long"
+msgstr "La descripció és massa llarga"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "Publica una ressenya"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "_Publica"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "Valoració"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Doneu un resum curt de la ressenya. Per exemple, «una aplicació molt bona "
+"que recomano»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "Ressenya"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Què penseu de l'aplicació? Intenteu donar les raons de la vostra opinió."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr "valoracions en total"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "Podeu informar de contingut abusiu, groller o discriminatori."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Un cop heu informat, la ressenya s'ocultarà fins que un administrador la "
+"revisi."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "Voleu informar d'una ressenya?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "Informeu"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "Li ha estat útil esta ressenya?"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "Sí"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "No"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "Pse"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "Informeu..."
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "Suprimeix..."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr "No s'ha trobat la captura de pantalla"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr "No s'ha pogut carregar la imatge"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr "No s'ha trobat la mida de la captura de pantalla"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:489
+msgid "Could not create cache"
+msgstr "No s'ha pogut crear la memòria cau"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:550
+msgid "Screenshot not valid"
+msgstr "La captura de pantalla no és vàlida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:565
+msgid "Screenshot not available"
+msgstr "La captura de pantalla no està disponible"
+
+#: src/gs-screenshot-image.c:618
+msgid "Screenshot"
+msgstr "Captura de pantalla"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:155
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u coincidència més"
+msgstr[1] "%u coincidències més"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Pàgina de busca"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "No s'ha trobat cap aplicació"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:806 src/gs-shell.c:811 src/gs-shell.c:826 src/gs-shell.c:830
+#, c-format
+msgid "“%s”"
+msgstr "{%s}"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:858
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+"No s'han pogut baixar les actualitzacions del microprogramari des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:864
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "No s'han pogut baixar les actualitzacions des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:871
+msgid "Unable to download updates"
+msgstr "No s'han pogut baixar les actualitzacions"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:876
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: calia accés a Internet però no "
+"estava disponible."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:885
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"No s'han pogut baixar les actualitzacions des de %s: no hi havia prou espai "
+"al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:890
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: no hi havia prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:898
+msgid "Unable to download updates: authentication was required"
+msgstr "No s'han pogut baixar les actualitzacions: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:903
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: l'autenticació no era vàlida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:908
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"No s'han pogut baixar les actualitzacions: no teniu permís per a instal·lar "
+"programari"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:915
+msgid "Unable to get list of updates"
+msgstr "No s'ha pogut obtindre una llista d'actualitzacions"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:961
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "No s'ha pogut instal·lar %s ja que ha fallat la baixada des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:967
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "No s'ha pogut instal·lar %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:979
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"No s'ha pogut instal·lar %s ja que l'entorn d'execució %s no està disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:985
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "No s'ha pogut instal·lar %s ja que no és compatible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:992
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"No s'ha pogut instal·lar: calia accés a Internet però no estava disponible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:998
+msgid "Unable to install: the application has an invalid format"
+msgstr "No s'ha pogut instal·lar: l'aplicació tenia un format invàlid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1003
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "No s'ha pogut instal·lar %s: no hi ha prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1011
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "No s'ha pogut instal·lar %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1018
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "No s'ha pogut instal·lar %s: l'autenticació era invàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1025
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"No s'ha pogut instal·lar %s: no teniu permisos per a instal·lar el programari"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1038
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr "El vostre compte a «%s» ha estat suspès."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1042
+msgid "It is not possible to install software until this has been resolved."
+msgstr "No és possible instal·lar programari fins que això s'haja resolt."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1053
+#, c-format
+msgid "For more information, visit %s."
+msgstr "Per a més informació, visiteu %s."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1062
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "No s'ha pogut instal·lar %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1071
+#, c-format
+msgid "Unable to install %s"
+msgstr "No s'ha pogut instal·lar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1117
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr "No s'ha pogut actualitzar %s des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1123
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "No s'ha pogut actualitzar %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1129
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"No s'ha pogut actualitzar: calia accés a Internet però no estava disponible."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1137
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "No s'ha pogut actualitzar %s: no hi havia prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1146
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "No s'ha pogut actualitzar %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1153
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "No s'ha pogut actualitzar %s: l'autenticació no era vàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1160
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"No s'ha pogut actualitzar %s: no teniu permís per a actualitzar programari"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1168
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "No s'ha pogut actualitzar %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1177
+#, c-format
+msgid "Unable to update %s"
+msgstr "No es pot actualitzar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1222
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "No es pot actualitzar a %s des de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1227
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "No s'ha pogut actualitzar a %s ja que ha fallat la baixada"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1234
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr ""
+"No s'ha pogut actualitzar: calia accés a Internet però no estava disponible."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1242
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "No s'ha pogut actualitzar %s: no hi havia prou espai al disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1251
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "No s'ha pogut actualitzar %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1258
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "No s'ha pogut actualitzar %s: l'autenticació no era vàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1265
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "No s'ha pogut actualitzar %s: o teniu permís per a actualitzar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1272
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "No s'ha pogut actualitzar %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1281
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "No s'ha pogut actualitzar a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1323
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "No s'ha pogut suprimir %s: calia una autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "No s'ha pogut suprimir %s: l'autenticació era invàlida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1335
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "No s'ha pogut suprimir %s: no teniu permís per a suprimir programari"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1342
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "No s'ha pogut suprimir %s: cal estar connectat al corrent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1351
+#, c-format
+msgid "Unable to remove %s"
+msgstr "No s'ha pogut suprimir %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1397
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "No s'ha pogut executar %s: %s no està instal·lat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1404 src/gs-shell.c:1452 src/gs-shell.c:1500
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"No hi havia prou espai al disc. Allibereu espai a disc i torneu-ho a provar"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1412 src/gs-shell.c:1460 src/gs-shell.c:1527
+msgid "Sorry, something went wrong"
+msgstr "No ha funcionat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1447
+msgid "Failed to install file: authentication failed"
+msgstr ""
+"S'ha produït un error en instal·lar el fitxer: ha fallat l'autenticació"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1494
+#, c-format
+msgid "Unable to contact %s"
+msgstr "No s'ha pogut contactar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1509
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Cal reiniciar %s per a utilitzar els nous connectors."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1514
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Cal reiniciar esta aplicació per a utilitzar els nous connectors."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1521
+msgid "AC power is required"
+msgstr "Cal estar connectat al corrent"
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: src/gs-sources-dialog.c:98
+msgid "No applications or addons installed; other software might still be"
+msgstr ""
+"No s'han instal·lat aplicacions o connectors. És possible que encara hi haja "
+"altres programes"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:103
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "S'ha instal·lat %u aplicació"
+msgstr[1] "S'han instal·lat %u aplicacions"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:110
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "S'ha instal·lat %u connector"
+msgstr[1] "S'han instal·lat %u connectors"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: src/gs-sources-dialog.c:118
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicació"
+msgstr[1] "%u aplicacions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-sources-dialog.c:124
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u connector"
+msgstr[1] "%u connectors"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-sources-dialog.c:131
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "S'ha instal·lat %s i %s"
+msgstr[1] "S'han instal·lat %s i %s"
+
+#. TRANSLATORS: nonfree software
+#: src/gs-sources-dialog.c:257
+msgid "Typically has restrictions on use and access to source code."
+msgstr "Normalment té restriccions en l'ús i accés al seu codi font."
+
+#. TRANSLATORS: list header
+#: src/gs-sources-dialog.c:278
+msgid "Proprietary Software Sources"
+msgstr "Fonts de programari de propietat"
+
+#: src/gs-sources-dialog.c:498 src/gs-sources-dialog.ui:487
+msgid "Remove Source"
+msgstr "Suprimeix la font"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-sources-dialog.c:584
+msgid "the operating system"
+msgstr "el sistema operatiu"
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-sources-dialog.c:677
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr ""
+"Les fonts de programari poden baixar-se des d'Internet. Vos proporcionen "
+"accés a programari addicional que no es proporciona amb %s."
+
+#: src/gs-sources-dialog.ui:155
+msgid "Additional Sources"
+msgstr "Fonts addicionals"
+
+#: src/gs-sources-dialog.ui:175
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr ""
+"En eliminar una font també eliminareu qualsevol programa que hàgeu "
+"instal·lat des de la mateixa."
+
+#: src/gs-sources-dialog.ui:260
+msgid "No software installed from this source"
+msgstr "No hi ha cap programari instal·lat des d'esta font."
+
+#: src/gs-sources-dialog.ui:287
+msgid "Installed from this Source"
+msgstr "Instal·lat des d'esta font"
+
+#: src/gs-sources-dialog.ui:333
+msgid "Source Details"
+msgstr "Detalls de la font"
+
+#: src/gs-sources-dialog.ui:390
+msgid "Last Checked"
+msgstr "Darrera comprovació"
+
+#: src/gs-sources-dialog.ui:407
+msgid "Added"
+msgstr "Afegit"
+
+#: src/gs-sources-dialog.ui:424
+msgid "Website"
+msgstr "Lloc web"
+
+#: src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (instal·lat)"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (s'està instal·lant)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (s'està suprimint)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:129
+msgid "No update description available."
+msgstr "No hi ha cap descripció sobre l'actualització disponible."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:224
+#, c-format
+msgid "Installed on %s"
+msgstr "Instal·lat al %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:244
+msgid "Installed Updates"
+msgstr "Actualitzacions instal·lades"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:419
+msgid "Additions"
+msgstr "Afegits"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:423
+msgid "Removals"
+msgstr "Suprimits"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:427
+msgid "Updates"
+msgstr "Actualitzacions"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:431
+msgid "Downgrades"
+msgstr "Desactualitzacions"
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "No s'ha instal·lat cap actualització en este sistema."
+
+#: src/gs-update-monitor.c:88
+msgid "Security Updates Pending"
+msgstr "Actualitzacions de seguretat pendents"
+
+#: src/gs-update-monitor.c:89
+msgid "It is recommended that you install important updates now"
+msgstr "Vos recomanem que instal·leu les actualitzacions importants ara"
+
+#: src/gs-update-monitor.c:92
+msgid "Restart & Install"
+msgstr "Reinicia i instal·la"
+
+#: src/gs-update-monitor.c:96
+msgid "Software Updates Available"
+msgstr "Hi ha actualitzacions disponibles"
+
+#: src/gs-update-monitor.c:97
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Hi ha actualitzacions importants del sistema operatiu i d'aplicacions "
+"preparades per instal·lar-se"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:100 src/gs-updates-page.c:703
+msgid "Not Now"
+msgstr "Ara no"
+
+#: src/gs-update-monitor.c:101
+msgid "View"
+msgstr "Mostra"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:255 src/gs-updates-page.ui:46
+msgid "Operating System Updates Unavailable"
+msgstr "Hi ha actualitzacions del sistema operatiu disponibles"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:257
+msgid "Upgrade to continue receiving security updates."
+msgstr "Actualitzeu-vos per continuar rebent actualitzacions de seguretat."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:305
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Una nova versió de %s està disponible per instal·lar"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:309
+msgid "Software Upgrade Available"
+msgstr "Hi ha actualitzacions disponibles"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:610
+msgid "Software Updates Failed"
+msgstr "No s'ha pogut realitzar l'actualització de programari"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:612
+msgid "An important OS update failed to be installed."
+msgstr ""
+"No s'ha pogut realitzar una actualització important del sistema operatiu."
+
+#: src/gs-update-monitor.c:613
+msgid "Show Details"
+msgstr "Mostra els detalls"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:635
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "S'ha instal·lat l'actualització de programari"
+msgstr[1] "S'han instal·lat les actualitzacions de programari"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:639
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "S'ha instal·lat una actualització important del sistema operatiu."
+msgstr[1] "S'han instal·lat actualitzacions importants del sistema operatiu."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:650
+msgctxt "updates"
+msgid "Review"
+msgstr "Revisa"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:697
+msgid "Failed To Update"
+msgstr "No s'ha pogut actualitzar"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:703
+msgid "The system was already up to date."
+msgstr "El sistema ja estava actualitzat."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:708
+msgid "The update was cancelled."
+msgstr "Es va cancel·lar l'actualització."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:714
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Calia accés a Internet però no estava disponible. Assegureu-vos que teniu "
+"accés a Internet i torneu-ho a provar."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:720
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Hi ha hagut problemes de seguretat amb l'actualització. Consulteu el "
+"proveïdor per a més detalls."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:726
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"No hi havia prou espai a disc. Allibereu espai a disc i torneu-ho a provar."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:731
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"S'ha produït un error en instal·lar l'actualització. Espereu a una "
+"actualització nova i torneu a provar-ho. Si el problema persisteix, "
+"contacteu amb el vostre proveïdor de programari."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:273
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:276
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:282
+msgid "Yesterday, %R"
+msgstr "Ahir, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:286
+msgid "Yesterday, %l:%M %p"
+msgstr "Ahir, %l:%M %p"
+
+#: src/gs-updates-page.c:289
+msgid "Two days ago"
+msgstr "Fa dos dies"
+
+#: src/gs-updates-page.c:291
+msgid "Three days ago"
+msgstr "Fa tres dies"
+
+#: src/gs-updates-page.c:293
+msgid "Four days ago"
+msgstr "Fa quatre dies"
+
+#: src/gs-updates-page.c:295
+msgid "Five days ago"
+msgstr "Fa cinc dies"
+
+#: src/gs-updates-page.c:297
+msgid "Six days ago"
+msgstr "Fa sis dies"
+
+#: src/gs-updates-page.c:299
+msgid "One week ago"
+msgstr "Fa una setmana"
+
+#: src/gs-updates-page.c:301
+msgid "Two weeks ago"
+msgstr "Fa dues setmanes"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:305
+msgid "%e %B %Y"
+msgstr "%e de %B de %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:318
+msgid "Downloading new updates…"
+msgstr "S'estan baixant actualitzacions noves…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:322
+msgid "Looking for new updates…"
+msgstr "S'estan cercant actualitzacions…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:361
+msgid "Setting up updates…"
+msgstr "S'estan preparant les actualitzacions…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:362 src/gs-updates-page.c:369
+msgid "(This could take a while)"
+msgstr "(Això pot trigar una estona)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:474
+#, c-format
+msgid "Last checked: %s"
+msgstr "Darrera comprovació: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:699
+msgid "Updates have been installed"
+msgstr "S'han instal·lat les actualitzacions."
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:701
+msgid "A restart is required for them to take effect."
+msgstr "És necessari un reinici perquè els canvis tinguen efecte."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:705
+msgid "Restart"
+msgstr "Reinicia"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:766
+msgid "Integrated Firmware"
+msgstr "Microprogramari integrat"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:769 src/gs-updates-page.c:779
+msgid "Restart & Update"
+msgstr "Reinicia i actualitza"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:776
+msgid "Requires Restart"
+msgstr "Cal reiniciar"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:786
+msgid "Application Updates"
+msgstr "Actualitzacions d'aplicacions"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:789
+msgid "Update All"
+msgstr "Actualitza-ho tot"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:796
+msgid "Device Firmware"
+msgstr "Microprogramari del dispositiu"
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:986
+msgid "_Restart & Update"
+msgstr "_Reinicia i actualitza"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:990
+msgid "U_pdate All"
+msgstr "_Actualitza-ho tot"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1088
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s no és compatible."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1093
+msgid "Your OS is no longer supported."
+msgstr "El vostre sistema operatiu no és compatible."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1098
+msgid "This means that it does not receive security updates."
+msgstr "Això vol dir que no rebreu actualitzacions de seguretat."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1102
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Vos recomanem que actualitzeu a una versió més nova."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1359
+msgid "Charges may apply"
+msgstr "Es poden aplicar càrrecs"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1363
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"La comprovació d'actualitzacions mentre s'utilitza la xarxa mòbil pot "
+"incórrer en càrrecs."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1367
+msgid "Check Anyway"
+msgstr "Comprova-ho de totes maneres"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1383
+msgid "No Network"
+msgstr "Sense xarxa"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1387
+msgid "Internet access is required to check for updates."
+msgstr "Es requereix accés a Internet per comprovar si hi ha actualitzacions."
+
+#: src/gs-updates-page.c:1792
+msgid "Restart & _Install"
+msgstr "Reinicia i _instal·la"
+
+#: src/gs-updates-page.c:1810
+msgid "Check for updates"
+msgstr "Comprova si hi ha actualitzacions"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Pàgina d'actualitzacions"
+
+#: src/gs-updates-page.ui:194
+msgid "Software is up to date"
+msgstr "Tot el programari està actualitzat"
+
+#: src/gs-updates-page.ui:245
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"La comprovació d'actualitzacions quan utilitzeu la xarxa mòbil pot incórrer "
+"en l'aplicació de càrrecs"
+
+#: src/gs-updates-page.ui:257
+msgid "_Check Anyway"
+msgstr "_Comprova de totes formes"
+
+#: src/gs-updates-page.ui:300
+msgid "Go online to check for updates"
+msgstr "Connecta't per comprovar si hi ha actualitzacions"
+
+#: src/gs-updates-page.ui:311
+msgid "_Network Settings"
+msgstr "Paràmetres de la _xarxa"
+
+#: src/gs-updates-page.ui:393
+msgid "Updates are automatically managed"
+msgstr "Les actualitzacions es gestionen automàticament"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s ara disponible"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "S'estan baixant %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s preparat per instal·lar-se"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "Una actualització major, amb noves funcionalitat i més polida."
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "_Més informació"
+
+#: src/gs-upgrade-banner.ui:98
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Vos recomanem que feu una còpia de seguretat de les vostres dades abans "
+"d'actualitzar."
+
+#: src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "_Baixa"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Afig, suprimeix o actualitza programari en este ordinador"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Actualitzacions;Actualització;Fonts;Dipòsits;Preferències;Instal·lació;"
+"Desinstal·lació;Aplicació;Programa;Apli;Botiga;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "Dissenyeu bàners destacats pel Programari del GNOME"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "AppStream;Programari;Aplicació;"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Edició i creació d'àudio"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Reproductors de música"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depuradors"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Entorns integrats de desenvolupament"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Intel·ligència artificial"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Química"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Llengües"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemàtiques"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robòtica"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Acció"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventura"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocs"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Taula"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartes"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladors"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Mainada"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lògica"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Jocs de rol"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Esports"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estratègia"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Gràfics 3D"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Escaneig"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Gràfics vectorials"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visualitzador"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendari"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base de dades"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finances"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Processador de textos"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tipus de lletra"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Còdecs"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Fonts d'entrada"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Paquets d'idioma"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Extensions del Shell"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localització"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Controladors de maquinari"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Xat"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Notícies"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navegador web"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editors de text"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tots"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Destacat"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Còmics"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficció"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Salut"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Història"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estil de vida"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Política"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Esports"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "Àudio i vídeo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "Eines de desenvolupament"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "Educació i ciència"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "Jocs"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "Gràfics i fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "Productivitat"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "Notícies i comunicació"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "Referència"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "Utilitats"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-appstream.c:693
+msgid "Downloading extra metadata files…"
+msgstr "S'estan baixant fitxers de metadades extres…"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr "Actualitzacions del SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclou millores de rendiment, d'estabilitat i de seguretat."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "S'estan baixant les imatges destacades…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Compatibilitat amb Web Apps"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Executeu aplicacions populars al navegador"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:118
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "L'instal·lador d'AppStream del Programari del GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:120
+msgid "Failed to parse command line arguments"
+msgstr "Ha fallat l'anàlisi dels arguments de la línia d'ordes"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:127
+msgid "You need to specify exactly one filename"
+msgstr "Heu d'especificar un nom de fitxer exactament"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:134
+msgid "This program can only be used by the root user"
+msgstr "Este programa només pot ser utilitzat per l'usuari root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:142
+msgid "Failed to validate content type"
+msgstr "No s'ha pogut validar el tipus de contingut"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:149
+msgid "Failed to copy"
+msgstr "S'ha produït un error en copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:212
+msgid "Downloading upgrade information…"
+msgstr "S'està baixant la informació de l'actualització…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:303
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr ""
+"Actualitzeu el vostre sistema Fedora per obtindre les últimes funcions i "
+"millores."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Compatibilitat amb Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak és un espai de treball per aplicacions d'escriptori a Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:563
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "S'estan obtenint les metadades del flatpak per %s…"
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:2617
+msgid "Getting runtime source…"
+msgstr "S'estan preparant les actualitzacions…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:801
+msgid "Downloading firmware update signature…"
+msgstr "S'està baixant la signatura de l'actualització del microprogramari…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:847
+msgid "Downloading firmware update metadata…"
+msgstr "S'estan baixant les metadades de l'actualització del microprogramari…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:941
+msgid "Downloading firmware update…"
+msgstr "S'està baixant l'actualització del microprogramari…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Compatibilitat amb actualitzacions de microprogramari"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Proveeix compatibilitat amb actualitzacions de microprogramari"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr "Compatibilitat amb Limba"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+"Limba proveeix als desenvolupadors una manera senzilla de fer paquets de "
+"programari"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr "S'estan baixant les valoracions de l'aplicació…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Compatibilitat amb Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS que proporciona ressenyes d'usuaris d'aplicacions"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:669
+msgid "Downloading shell extension metadata…"
+msgstr "S'estan baixant les metadades de l'extensió del shell…"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr "Compatibilitat amb Snappy"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un «snap» és un paquet Linux universal"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr "S'està baixant la pàgina de l'aplicació…"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr "Compatibilitat amb Steam"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr "La plataforma d'entreteniment de Valve"
+
+#~ msgid "page1"
+#~ msgstr "pàgina 1"
+
+#~ msgid "page2"
+#~ msgstr "pàgina 2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Totes"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "«{%s}» [%s]"
+
+#~ msgid "About Software"
+#~ msgstr "Quant al programari"
+
+#~ msgid "Other Updates"
+#~ msgstr "Altres actualitzacions"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instal·la-ho tot"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Ha fallat la instal·lació de %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Ha fallat la supressió de %s."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Assegureu-vos que teniu accés a Internet i torneu-ho a provar."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Allibereu espai a disc i torneu-ho a provar."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Si el problema continua, contacteu el proveïdor del programari."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Cap"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Tots"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Destacat"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matemàtiques"
+
+#~ msgid "Science"
+#~ msgstr "Ciència"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Les fonts de programari us donen accés a programari addicional."
+
+#~ msgid "3rd party"
+#~ msgstr "De terceres parts"
+
+#~ msgid "web app"
+#~ msgstr "aplicació web"
+
+#~ msgid "nonfree"
+#~ msgstr "no lliure"
+
+#~ msgid "shell extension"
+#~ msgstr "Extensió del Shell"
+
+#~ msgid "_Installing"
+#~ msgstr "S'està _instal·lant"
+
+#~ msgid "_Removing"
+#~ msgstr "S'està _suprimint"
+
+#~ msgid " or "
+#~ msgstr " o "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Desconeguda"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Aquest programa ve d'una tercera part."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Aquest programa ve d'una tercera part i pot contenir components no "
+#~ "lliures."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Aquest programa pot contenir components no lliures."
+
+#~ msgid "non-free"
+#~ msgstr "no lliure"
+
+#~ msgid "One Star"
+#~ msgstr "Una estrella"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dues estrelles"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tres estrelles"
+
+#~ msgid "Four Stars"
+#~ msgstr "Quatre estrelles"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinc estrelles"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicacions d'ofimàtica recomanades"
+
+#~ msgid "Audio"
+#~ msgstr "Àudio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Bases de dades"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Enregistrament de disc"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioaficionat"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mesclador"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Enregistradores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Seqüenciadors"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Sintonitzadors"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Construcció"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Bases de dades"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Entorn de desenvolupament integrat"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Depuració"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Gestió de projectes"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "Control de versions"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traducció"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolupament web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Informàtica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Construcció"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualització de dades"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Electricitat"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Electrònica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Enginyeria"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Ciències de la terra"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Història"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanitats"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Processament d'imatge"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapes"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Anàlisi numèrica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computació paral·lela"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Trets"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulació"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Esports"
+
+#~ msgid "Graphics"
+#~ msgstr "Gràfics"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Gràfics 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Gràfics matricials"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Marcatge"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Correu electrònic"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Canals de difusió"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Transferència de fitxers"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioafició"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Missatgeria instantània"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Clients IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitorització"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Accés remot"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonia"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolupament web"
+
+#~ msgid "Office"
+#~ msgstr "Oficina"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagrames"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Gestió de contactes"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Diccionaris"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Correu electrònic"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Diagrames de flux"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografia"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentacions"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Gestió de projectes"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Fulls de càlcul"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visualitzadors"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Art"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Intel·ligència artificial"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Informàtica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Construcció"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualització de dades"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Electricitat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Electrònica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Enginyeria"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Ciències de la terra"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Història"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanitats"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Processament d'imatges"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Llengües"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapes"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matemàtiques"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Anàlisi numèrica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computació paral·lela"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robòtica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Esports"
+
+#~ msgid "System"
+#~ msgstr "Sistema"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emuladors"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Gestors de fitxers"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File System"
+#~ msgstr "Sistema de fitxers"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Eines de fitxers"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitorització"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Seguretat"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emuladors de terminal"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Accessibilitat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arxivament"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calculadores"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Rellotges"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compressió"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Eines de fitxers"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapes"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Eines de telefonia"
+
+#~ msgid "Video"
+#~ msgstr "Vídeo"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Edició"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Base de dades"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Enregistrament de discos"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Reproductors"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Enregistradores"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "S'està calculant…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Desconeguda"
+
+#~ msgid "_History"
+#~ msgstr "_Historial"
+
+#~ msgid "Size"
+#~ msgstr "Mida"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "No s'ha trobat les dades d'AppStream"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "No s'havia finalitzat una actualització anterior."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "No s'ha pogut instal·lar l'actualització. Això és degut habitualment a un "
+#~ "problema amb l'actualització. Espereu a una actualització nova i torneu-"
+#~ "ho a provar."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Aplicació d'Internet"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Entra al mode de servei GApplication"
+
+#~ msgid "Checking for updates…"
+#~ msgstr "S'està comprovant si hi ha actualitzacions…"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Una actualització no s'ha signat de la forma correcta."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "No es va poder completar l'actualització."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Es va sol·licitar una actualització fora de línia però no hi havia cap "
+#~ "paquet per actualitzar. "
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "No quedava espai lliure al disc."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "No es va poder instal·lar una actualització."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr ""
+#~ "L'actualització fora de línia va fallar d'una manera no determinada."
+
+#~ msgid "No sources found."
+#~ msgstr "No s'ha trobat cap font."
+
+#~ msgid "OK"
+#~ msgstr "D'acord"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "S'ha instal·lat %i aplicació i %i connector"
+#~ msgstr[1] "S'ha instal·lat %i aplicacions i %i connectors"
diff --git a/po/ckb.po b/po/ckb.po
new file mode 100644
index 0000000..7427a4f
--- /dev/null
+++ b/po/ckb.po
@@ -0,0 +1,4174 @@
+# Central Kurdish translation for gnome-software.
+# Copyright (C) 2020 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Jwtiyar Nariman <jwtiyar@gmail.com>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software gnome-3-36\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-07-18 13:48+0000\n"
+"PO-Revision-Date: 2020-08-04 23:53+0300\n"
+"Language-Team: Central Kurdish <kurdish-ckb@zkurd.org>\n"
+"Language: ckb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Last-Translator: Jwtiyar Nariman <jwtiyar@gmail.com>\n"
+"X-Generator: Poedit 2.4\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "نەرمەکاڵای گنۆم"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "بەڕێوەبەری داوانامە بۆ گنۆم"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "بەشی پوختە"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "بەشی زانیاری"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "بەشی دامەزراوەکان"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "بەشی نوێکاری"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "زانیاری نوێکردنەوە"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1515
+msgid "The GNOME Project"
+msgstr "پرۆژەی گنۆم"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "دامەزراندنی نەرمەکاڵا"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "نەرمەکاڵای دیاریکراو دابمەزرێنە"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "هەمووی دیاریبکە"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "هیچ دیاری مەکە"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr ""
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_نوێکردنەوە هەڵبژاردنەکان"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "نەرمەکاڵا"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "بڕۆدواوە"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_گەڕان"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_دامەزراوە"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_نوێکاری"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "گەڕان"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:285 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "سەرچاوە"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr ""
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "ڕێکخستنی ڕایەڵە"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "دەسپێکردنەوە ئەنجام بدە"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "زانیاریی زیاتر"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr ""
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr ""
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4506
+msgid "Local file"
+msgstr ""
+
+#: lib/gs-app.c:4558
+msgid "Package"
+msgstr "گورزە"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:392
+msgid "Pending"
+msgstr "لە چاوەڕوانیدایە"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:162 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:68
+msgid "Installed"
+msgstr "دامەزرا"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:163 src/gs-details-page.c:329
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "دادەمەزرێت"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:169 src/gs-repo-row.c:125
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "سڕینەوە"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr ""
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr ""
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr ""
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ناسنامە"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr ""
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr ""
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr ""
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr ""
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr ""
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr ""
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr ""
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr ""
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr ""
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+" Jwtiyar Nariman https://launchpad.net/~jwtiyar"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:2104
+#, c-format
+msgid "About %s"
+msgstr ""
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:567
+msgid "Sorry! There are no details for that application."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:118
+msgid "Visit website"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:123
+msgid "Install…"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:130 src/gs-updates-section.c:478
+msgid "Cancel"
+msgstr "لابردن"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:137 src/gs-common.c:287 src/gs-page.c:273
+msgid "Install"
+msgstr "دامەزراندن"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:144
+msgid "Update"
+msgstr "نوێكردنه‌وه‌"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:148 src/gs-app-row.c:157 src/gs-page.c:434
+#: src/gs-repos-dialog.c:325
+msgid "Remove"
+msgstr "سڕینەوە"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:275
+msgid "Device cannot be used during update."
+msgstr ""
+
+#: src/gs-app-row.c:450 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr ""
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:177
+msgid "Other"
+msgstr "هیتر"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:182
+msgid "All"
+msgstr "هەمووی"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:186
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:467
+#, c-format
+msgid "Featured %s"
+msgstr "هەڵبژێردراو %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "نرخاندن"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:58
+msgid "Name"
+msgstr "ناو"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "پیشاندان"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "ڕیزکردن"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr ""
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+msgid "A restart is required for the changes to take effect."
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-common.c:638
+msgid "Restart"
+msgstr "دووبارە پێکردنەوە"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "پێکردن"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:234
+msgid "Enable Third-Party Software Repository?"
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr ""
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr ""
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:440
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+
+#: src/gs-common.c:459 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "وردەکارییەکان"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:624
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:629
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:636 src/gs-update-monitor.c:122
+msgid "Not Now"
+msgstr "ئێستا نا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:59
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:70
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:103
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:112
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "References to alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "Use of alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "References to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Use of illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "No references to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "Use of tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:142
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Brief artistic nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "No references to or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "Provocative references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Sexual references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:163
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:196
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "Product placement"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "No ability to spend money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "Users are encouraged to donate real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:223
+msgid "Ability to spend real money in-app"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "No way to chat with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "User-to-user interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "Moderated chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Uncontrolled chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "No way to talk with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "No sharing of user information with third parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "Checking for the latest application version"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:268
+msgid "No sharing of physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Sharing physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "Indirect references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Kissing between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "No references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "Indirect references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Direct references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic depictions of the act of prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "No references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:312
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:315
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+msgid "No references to desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:333
+msgid "No visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No references to slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "Depictions of or references to historical slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Graphic depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:406
+#, c-format
+msgid "%s (%s)"
+msgstr ""
+
+#: src/gs-content-rating.c:540
+msgid "General"
+msgstr "گشتی"
+
+#: src/gs-content-rating.c:549
+msgid "ALL"
+msgstr ""
+
+#: src/gs-content-rating.c:553
+msgid "Adults Only"
+msgstr ""
+
+#: src/gs-content-rating.c:555
+msgid "Mature"
+msgstr ""
+
+#: src/gs-content-rating.c:557
+msgid "Teen"
+msgstr ""
+
+#: src/gs-content-rating.c:559
+msgid "Everyone 10+"
+msgstr ""
+
+#: src/gs-content-rating.c:561
+msgid "Everyone"
+msgstr ""
+
+#: src/gs-content-rating.c:563
+msgid "Early Childhood"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr ""
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr ""
+
+#: src/gs-details-page.c:324
+msgid "Removing…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:343
+msgid "Pending installation…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:350
+msgid "Pending update…"
+msgstr ""
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:710
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:855 src/gs-details-page.c:872
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.c:63
+msgid "_Install"
+msgstr "_دامەزراندن"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:886 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr ""
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:928
+msgid "_Launch"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:952 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "ـسڕینەوە"
+
+#: src/gs-details-page.c:983 src/gs-update-dialog.c:92
+msgid "Network"
+msgstr "ڕایەڵە"
+
+#: src/gs-details-page.c:983 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr ""
+
+#: src/gs-details-page.c:984 src/gs-update-dialog.c:93
+msgid "System Services"
+msgstr ""
+
+#: src/gs-details-page.c:984 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr ""
+
+#: src/gs-details-page.c:985 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr ""
+
+#: src/gs-details-page.c:985 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr ""
+
+#: src/gs-details-page.c:986 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "ئامێرەکان"
+
+#: src/gs-details-page.c:986 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr ""
+
+#: src/gs-details-page.c:987 src/gs-details-page.c:988
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+msgid "Home folder"
+msgstr "بوخچەی سەرەکی"
+
+#: src/gs-details-page.c:987 src/gs-details-page.c:989
+#: src/gs-details-page.c:991 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr ""
+
+#: src/gs-details-page.c:988 src/gs-details-page.c:990
+#: src/gs-details-page.c:992 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr ""
+
+#: src/gs-details-page.c:989 src/gs-details-page.c:990
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+msgid "File system"
+msgstr ""
+
+#: src/gs-details-page.c:991 src/gs-details-page.c:992
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+msgid "Downloads folder"
+msgstr ""
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:102
+msgid "Settings"
+msgstr "ڕێکخستنەکان"
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr ""
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr ""
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr ""
+
+#: src/gs-details-page.c:995 src/gs-update-dialog.c:104
+msgid "Sandbox escape"
+msgstr ""
+
+#: src/gs-details-page.c:995 src/gs-update-dialog.c:104
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+
+#: src/gs-details-page.c:1010
+msgid "This application is fully sandboxed."
+msgstr ""
+
+#: src/gs-details-page.c:1018
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1177
+msgctxt "version"
+msgid "Unknown"
+msgstr "نەناسراو"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1190
+msgctxt "updated"
+msgid "Never"
+msgstr "هه‌رگیز"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1243
+msgctxt "origin"
+msgid "Unknown"
+msgstr "نەناسراو"
+
+#: src/gs-details-page.c:1296
+msgid "Low"
+msgstr "نزم"
+
+#: src/gs-details-page.c:1298
+msgid "Medium"
+msgstr "ناوەند"
+
+#: src/gs-details-page.c:1300
+msgid "High"
+msgstr "بەرز"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1302 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "نەناسراو"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1640
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1826 src/gs-details-page.c:1842
+#, c-format
+msgid "Unable to find “%s”"
+msgstr ""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2420
+msgid "Public domain"
+msgstr ""
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2423
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2430
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr ""
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2440 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr ""
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2497
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-details-page.c:2524 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr ""
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr ""
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr ""
+
+#: src/gs-details-page.ui:252 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_پاشگەزبوونەوە"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_نوێکردنەوە"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr ""
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr ""
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr ""
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr ""
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr ""
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr ""
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr ""
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "به‌ڵگه‌سازی"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr ""
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr ""
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr ""
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:102
+msgid "Channel"
+msgstr "کەناڵ"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "وەشان"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr ""
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "دەسەڵاتەکان"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "بارکراوە"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "هاوپۆل"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr ""
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr ""
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr ""
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "مۆڵەت"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr ""
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr ""
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:442
+#: plugins/core/gs-desktop-common.c:314
+msgid "Add-ons"
+msgstr ""
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr ""
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr ""
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr ""
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr ""
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr ""
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr ""
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:134
+msgid " and "
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:137
+msgid ", "
+msgstr ""
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:163
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:171
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:213
+msgid "Unable to Find Requested Software"
+msgstr ""
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:318
+#, c-format
+msgid "%s not found"
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:322
+msgid "on the website"
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:329
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:333 src/gs-extras-page.c:344 src/gs-extras-page.c:355
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:362
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:351
+#, c-format
+msgid "%s is not available."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:366
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:373
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:377
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:384
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:388
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:395
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:399
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:406
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:410
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:454
+msgid "this website"
+msgstr ""
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:458
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:526 src/gs-extras-page.c:582 src/gs-extras-page.c:621
+msgid "Failed to find any search results"
+msgstr ""
+
+#: src/gs-extras-page.c:809
+#, c-format
+msgid "%s file format"
+msgstr ""
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "بەخێرهاتی"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "دامەزرا"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "بارکراوە"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "نەناسراو"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:110 src/gs-review-row.c:64 src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr ""
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "مێژوو"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:438
+msgid "System Applications"
+msgstr ""
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr ""
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr ""
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr ""
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr ""
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr ""
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:83
+msgid "system"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:86
+msgid "user"
+msgstr ""
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:107 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr ""
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "بەستەر"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "فۆرمات"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr ""
+
+#. add button
+#: src/gs-overview-page.c:312
+msgid "More…"
+msgstr "زیاتر..."
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:562
+msgid "Recommended Audio & Video Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:567
+msgid "Recommended Games"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:572
+msgid "Recommended Graphics Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:577
+msgid "Recommended Productivity Applications"
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:925 src/gs-repos-dialog.c:831
+msgid "Access additional software from selected third party sources."
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:929 src/gs-repos-dialog.c:835
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:934 src/gs-repos-dialog.c:840
+msgid "Find out more…"
+msgstr ""
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:942 src/gs-repos-dialog.c:239
+msgid "Enable"
+msgstr "چالاککردن %s"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr ""
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr ""
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "پێشتر"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "دواتر"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr ""
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "هاوپۆلەکان"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:264
+#, c-format
+msgid "Prepare %s"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:403
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:407
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:415
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:418
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:52 src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Installed)"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:119
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:97
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:104
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:112
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:118
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:301
+#, c-format
+msgid "Remove “%s”?"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:306
+#, c-format
+msgid "Disable “%s”?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:310
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:328
+msgid "Disable"
+msgstr "ناچالاککردن %s"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:744
+msgid "the operating system"
+msgstr ""
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:810 src/gs-repos-dialog.c:846
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:828
+msgid "Third Party Repositories"
+msgstr ""
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:95
+msgid "_Enable"
+msgstr "_چالاککردن"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:104
+msgid "_Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:109
+msgid "_Disable…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:117
+msgid "Enabling"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:129
+msgid "Disabling"
+msgstr ""
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:143
+msgid "Enabled"
+msgstr "چالاككراو"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:149
+msgid "Disabled"
+msgstr "ناچالاککراوە"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr ""
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr ""
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr ""
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr ""
+
+#: src/gs-review-dialog.ui:108
+msgid "Summary"
+msgstr "پوختە"
+
+#: src/gs-review-dialog.ui:118
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:143
+msgctxt "app review"
+msgid "Review"
+msgstr ""
+
+#: src/gs-review-dialog.ui:153
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+
+#: src/gs-review-dialog.ui:185
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:222
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:227
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:241
+msgid "Report Review?"
+msgstr ""
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:245
+msgid "Report"
+msgstr "هێنان"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr ""
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "بەڵێ"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr ""
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr ""
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr ""
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr ""
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr ""
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:381
+msgid "Screenshot size not found"
+msgstr ""
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:411
+msgid "Could not create cache"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:471
+msgid "Screenshot not valid"
+msgstr ""
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:486
+msgid "Screenshot not available"
+msgstr ""
+
+#: src/gs-screenshot-image.c:544
+msgid "Screenshot"
+msgstr "ڕووپەڕ"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:142
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr ""
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr ""
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1090 src/gs-shell.c:1095 src/gs-shell.c:1110
+#: src/gs-shell.c:1114
+#, c-format
+msgid "“%s”"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1161
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1167
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1174 src/gs-shell.c:1219
+msgid "Unable to download updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1180
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1189
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1194
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1206
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1211
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to get list of updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1265
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1271
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1284
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1290
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1297
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1303
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1308
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1315
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1322
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1337
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1344
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1353
+#, c-format
+msgid "Unable to install %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1400
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1407
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1414
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1418
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1424
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1434
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1449
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1454
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1463
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1468
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1477
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1483
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1493
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1499
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1508
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1525
+#, c-format
+msgid "Unable to update %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1528
+#, c-format
+msgid "Unable to install updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1571
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1576
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1585
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1594
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1602
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1609
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1616
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1639
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1677
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1683
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1689
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1696
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1703
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1715
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1758
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1765 src/gs-shell.c:1816 src/gs-shell.c:1857
+#: src/gs-shell.c:1905
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1776 src/gs-shell.c:1827 src/gs-shell.c:1868
+#: src/gs-shell.c:1939
+msgid "Sorry, something went wrong"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1808
+msgid "Failed to install file: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1812
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1849
+msgid "Failed to install: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1853
+msgid "Failed to install: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1899
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1914
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1919
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1926
+msgid "AC power is required"
+msgstr ""
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1930
+msgid "The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr ""
+
+#: src/gs-summary-tile.c:90
+#, c-format
+msgid "%s (Installing)"
+msgstr ""
+
+#: src/gs-summary-tile.c:95
+#, c-format
+msgid "%s (Removing)"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr ""
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:187
+msgid "No update description available."
+msgstr ""
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:291
+#, c-format
+msgid "Installed on %s"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:311
+msgid "Installed Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:527
+msgid "Additions"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:531
+msgid "Removals"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:535
+msgid "Updates"
+msgstr "نوێکارییەکان"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:539
+msgid "Downgrades"
+msgstr ""
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr ""
+
+#: src/gs-update-monitor.c:110
+msgid "Security Updates Pending"
+msgstr ""
+
+#: src/gs-update-monitor.c:111
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: src/gs-update-monitor.c:114
+msgid "Restart & Install"
+msgstr ""
+
+#: src/gs-update-monitor.c:118
+msgid "Software Updates Available"
+msgstr ""
+
+#: src/gs-update-monitor.c:119
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#: src/gs-update-monitor.c:123
+msgid "View"
+msgstr "نیشاندان"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:231
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:237
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:248
+#, c-format
+msgid "%s has been updated."
+msgstr ""
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:251
+msgid "Please restart the application."
+msgstr ""
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:259
+#, c-format
+msgid "%s and %s have been updated."
+msgstr ""
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:265 src/gs-update-monitor.c:284
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:277
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr ""
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:518 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr ""
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:520
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:575
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:579
+msgid "Software Upgrade Available"
+msgstr ""
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:968
+msgid "Software Updates Failed"
+msgstr ""
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:970
+msgid "An important OS update failed to be installed."
+msgstr ""
+
+#: src/gs-update-monitor.c:971
+msgid "Show Details"
+msgstr "زانیاری پیشان بدە"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:994
+msgid "System Upgrade Complete"
+msgstr ""
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:999
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr ""
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1005
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1009
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1020
+msgctxt "updates"
+msgid "Review"
+msgstr ""
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1068
+msgid "Failed To Update"
+msgstr ""
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1074
+msgid "The system was already up to date."
+msgstr ""
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1079
+msgid "The update was cancelled."
+msgstr ""
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1085
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1091
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1097
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1102
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr ""
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr ""
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr ""
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr ""
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr ""
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr ""
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+msgid "Charges May Apply"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+msgid "Check _Anyway"
+msgstr ""
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr ""
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1340
+msgid "Checking…"
+msgstr ""
+
+#: src/gs-updates-page.c:1353
+msgid "Check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr ""
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr ""
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr ""
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr ""
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr ""
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:280
+msgid "Restart & Update"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:286
+msgid "Update All"
+msgstr "هەمووی نوێبکەرەوە"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:417
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:421
+msgid "Requires Restart"
+msgstr ""
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:425
+msgid "Application Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:429
+msgid "Device Firmware"
+msgstr ""
+
+#: src/gs-updates-section.c:457 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr ""
+
+#: src/gs-upgrade-banner.c:65
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+
+#: src/gs-upgrade-banner.c:69
+msgid "_Restart Now"
+msgstr ""
+
+#: src/gs-upgrade-banner.c:71
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:86
+#, c-format
+msgid "%s %s Now Available"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:96
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "Downloading %s %s"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:117
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "زمانەکان"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "بیرکاری"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "کردار"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "پشکینینی دەکات"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "ڕۆژژمێر"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "بنکەی دراو"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "چارەسەرکەری وۆرد"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "جۆرەپیت"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "سەرچاوەی تێخستن"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:230
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "هەواڵەکان"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:242
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:256
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "هەمووی"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "هەڵبژێردراو"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "مێژوو"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:296
+msgid "Audio & Video"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:299
+msgid "Developer Tools"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:302
+msgid "Education & Science"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:305
+msgid "Games"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:308
+msgid "Graphics & Photography"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:311
+msgid "Productivity"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:317
+msgid "Communication & News"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:320
+msgid "Reference"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:323
+msgid "Utilities"
+msgstr ""
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr ""
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:561
+msgid "Endless OS"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:564
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:825
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:139
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:148
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:155
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:163
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:173
+msgid "Failed to copy"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:235
+msgid "Downloading extra metadata files…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr ""
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:282
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:863
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:135
+#, c-format
+msgid "%s Device"
+msgstr ""
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:140
+#, c-format
+msgid "%s System"
+msgstr ""
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:145
+#, c-format
+msgid "%s Embedded Controller"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:150
+#, c-format
+msgid "%s ME"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:155
+#, c-format
+msgid "%s Corporate ME"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:160
+#, c-format
+msgid "%s Consumer ME"
+msgstr ""
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:166
+#, c-format
+msgid "%s Controller"
+msgstr ""
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:172
+#, c-format
+msgid "%s Thunderbolt Controller"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:671
+msgid "Downloading firmware update signature…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:712
+msgid "Downloading firmware update metadata…"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:196
+msgid "Downloading application ratings…"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:239
+msgid "Snap Store"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..202f150
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,4382 @@
+# Czech translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Petr Kovar <pknbe@volny.cz>, 2015.
+# Marek Černocký <marek@manet.cz>, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-01 15:47+0000\n"
+"PO-Revision-Date: 2020-08-28 20:16+0200\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Poedit 2.3\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Software GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Správa aplikací pro GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Aplikace Software umožňuje vyhledávat a instalovat aplikace a systémová "
+"rozšíření a odebírat stávající nainstalované aplikace."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Software GNOME vám představí významné a oblíbené aplikace pomocí "
+"srozumitelného popisu a několika snímků obrazovky. Aplikace můžete najít buď "
+"ručním procházení podle kategorií nebo pomocí textového vyhledávání. Rovněž "
+"můžete aktualizovat svůj systém a to i bez aktuálního připojení k Internetu."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel s přehledem"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel s podrobnostmi o softwaru"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel s nainstalovaným softwarem"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel s aktualizacemi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Podrobnosti o aktualizaci"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "Projekt GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalovat soubor appstream do systémového umístění"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalování souboru appstream do systémového umístění"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Seznam kompatibilních projektů"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Seznam kompatibilních projektů, jako je GNOME, KDE a XFCE, které by se měly "
+"zobrazovat."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Zda se o aktualizace a povýšení starat v Softwaru GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Když je vypnuto, Software GNOME skryje panel s aktualizacemi a nebude "
+"provádět automatické činnosti ohledně aktualizací, nebo se ptát na povýšení."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automaticky stahovat a instalovat aktualizace"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Když je zapnuto, bude Software GNOME na pozadí automaticky stahovat "
+"softwarové aktualizace a ty, které nevyžadují restart, také nainstaluje."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Oznamovat uživateli softwarové aktualizace na pozadí"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Když je zapnuto, oznamuje Software GNOME uživateli, když během jeho "
+"nečinnosti proběhnou na pozadí aktualizace."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Zda se má automaticky aktualizovat informace na měřeném připojení"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Když je zapnuto, bude Software GNOME na pozadí automaticky aktualizovat "
+"informace, i v případě, že připojení není účtované paušální částkou "
+"(případně stahovat některá metadata, kontrolovat aktualizace atd., což se "
+"může projevit v ceně za připojení)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Zda se jedná o úplně první spuštění Softwaru GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Zobrazovat vedle aplikace hodnocení hvězdičkami"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrovat aplikace podle výchozí větve nastavené pro vzdálený protějšek"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Před instalací nesvobodných aplikací zobrazit varovné dialogové okno"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Když se instaluje nesvobodná aplikace, může být zobrazeno varovné dialogové "
+"okno. Tímto se řídí potlačení tohoto dialogového okna."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Seznam populárních aplikací"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Seznam aplikací, které se mají použít. Přepíše ty definované v systému."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Datum a čas poslední kontroly aktualizací"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Datum a čas posledního upozornění na povýšení"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Datum a čas první bezpečnostní aktualizace, smaže se po aktualizaci"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Datum a čas poslední aktualizace"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Datum a čas, kdy byl systém naposledy on-line a dostal nějaké aktualizace"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Doba v sekundách, po které se má ověřit, jestli je snímek obrazovky z "
+"hlavního zdroje stále platný"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Čím větší hodnotu zvolíte, tím méně návštěv vzdáleného serveru se provede, "
+"ale může trvat déle, než se uživateli zobrazí aktuálnější snímek. Hodnota 0 "
+"znamená, že se kontroly na serveru nemají provádět vůbec, pokud je již "
+"snímek v mezipaměti."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Server, který se má používat pro recenze aktualizací"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Minimální karma pro recenze"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Recenze s karmou nižší než toto číslo nebudou zobrazovány."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Seznam oficiálních repozitářů, které by neměly být považovány za třetí stranu"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Seznam oficiálních repozitářů, které by měly být považovány za svobodný "
+"software"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Adresa URL licence, která se má použít, když má aplikace považována za "
+"svobodný software"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Kde je to možné, instalovat všem uživatelům v systému přibalené aplikace"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Umožnit přístup k dialogovému oknu s repozitáři softwaru"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Nabízet povýšení na předběžná vydání"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Zobrazovat v rozhraní prvky, které informují uživatele, že aplikace není "
+"svobodná"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Zobrazovat dotaz na instalaci repozitářů nesvobodného softwaru"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Zobrazovat velikost instalace pro aplikace v seznamu nainstalovaných aplikací"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://cs.wikipedia.org/wiki/Propriet%C3%A1rn%C3%AD_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Adresa URI, která vysvětluje nesvobodný a komerční software"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Seznam adres URL ukazujících na soubory appstream, které byly stažené do "
+"složky app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalovat soubory AppStream do celosystémového umístění pro všechny "
+"uživatele"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Povolit repozitář s rozšířeními pro GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Řetězec uchovávající ID gnome-online-account pro přihlášení"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalace softwaru"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Nainstalujte si vybraný software do systému"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Vybrat vše"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Zrušit výběr"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Softwarové repozitáře"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Předvolby akt_ualizací"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Přejít zpět"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Procházet"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "Na_instalované"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Aktualizace"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Hledat"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Zdroj"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Softwarové repozitáře"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Prozkoumat disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Nastavení sítě"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Restartovat hned"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Další informace"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatické aktualizace jsou pozastaveny"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Dozvědět se _více…"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Místní soubor"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Balíček"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Čeká na zpracování"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Nainstalováno"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instaluje se"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Odebírá se"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Režim spuštění: buď „updates“ (aktualizace), „updated“ (aktualizované), "
+"„installed“ (nainstalované) nebo „overview“ (přehled)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "REŽIM"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Hledat aplikaci"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "HLEDAT"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Zobrazit informace o aplikaci (pomocí ID aplikace)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Zobrazit informace o aplikaci (pomocí názvu balíčku)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NÁZEV_BALÍČKU"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Nainstalovat aplikaci (pomocí ID aplikace)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Otevřít místní soubor s balíčkem"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NÁZEV_SOUBORU"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Pro tuto činnost je očekáván druh interakce: buď „none“ (nic), "
+"„notify“ (upozornit) nebo „full“ (úplná)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Zobrazovat podrobné ladicí informace"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Nainstalovat na pozadí případné čekající aktualizace"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Zobrazit předvolby aktualizací"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Ukončit běžící instanci"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Upřednostnit zdroje v místních souborech před zdroji on-line"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Zobrazit číslo verze"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Marek Černocký <marek@manet.cz>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "O aplikaci Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Elegantní způsob správy softwaru ve vašem počítači."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Omlouváme se, ale pro tuto aplikaci nejsou k dispozici detaily."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Navštívit webové stránky"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalovat…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Zrušit"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalovat"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Aktualizovat"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Odebrat"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Zařízení nelze během aktualizace používat."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Vyžaduje dodatečná oprávnění"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Vyžadováno přihlášení vzdáleným %s (sféra %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Vyžadováno přihlášení"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Zrušit"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "Přih_lásit"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Uživatel"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Heslo"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Ostatní"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Vše"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Významné"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Významné v kategorii %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Hodnocení"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Název"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Zobrazovat"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Nabídka filtrování podkategorií"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Řadit podle"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Nabídka řazení podkategorií"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Zadejte prosím číslo od 1 do %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Vyberte aplikaci:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Aktualizace OS jsou nyní nainstalované"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nedávno nainstalované aktualizace jsou k dispozici pro recenze"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "Aplikace %s je nyní nainstalována"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Aby se změny projevily, je zapotřebí provést restart."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplikace je připravená k použití."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Restartovat"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Spustit"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalovat software třetí strany?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Povolit repozitář softwaru třetí strany?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s není <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">svobodný a otevřený software</a> a poskytuje jej „%s“."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s poskytuje „%s“."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Aby bylo možné pokračovat v instalaci, je nutné povolit tento repozitář "
+"softwaru."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"V některých zemích nemusí být instalace a používání softwaru %s legální."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"V některých zemích nemusí být instalace a používání tohoto kodeku legální."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Příště nevarovat"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Povolit a nainstalovat"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Dále jsou uvedeny podrobnosti o chybě získané od správy balíčků:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Podrobnosti"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Aktualizace byla nainstalována"
+msgstr[1] "Aktualizace byly nainstalovány"
+msgstr[2] "Aktualizace byly nainstalovány"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Aby se projevila, je zapotřebí provést restart."
+msgstr[1] "Aby se projevily, je zapotřebí provést restart."
+msgstr[2] "Aby se projevily, je zapotřebí provést restart."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Nyní ne"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Žádné kreslené násilí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Kreslené postavy v nebezpečných situacích"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Kreslené postavy v agresivních střetech"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafické vyobrazení násilí páchaného na kreslených postavách"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Žádné fantazie o násilí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Osoby v nebezpečných situacích snadno odlišitelných od skutečnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Osoby v agresivních střetech snadno odlišitelných od skutečnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafické násilí snadno odlišitelné od reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Žádné realistické násilí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Mírně realistické osoby v nebezpečných situacích"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Vyobrazení skutečných osob v agresivních konfliktech"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafické násilí páchané na skutečných osobách"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Žádné zabíjení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Nerealistické zabíjení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistické zabíjení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Vyobrazení krveprolití a mrzačení lidí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Žádné sexuální násilí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Znásilnění nebo jiné násilné sexuální chování"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Žádné zmínky o alkoholu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Zmínky o alkoholických nápojích"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Požívání alkoholických nápojů"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Žádné zmínky o zakázaných drogách"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Zmínky o zakázaných drogách"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Používání zakázaných drog"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Žádné zmínky o tabákových výrobcích"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Zmínky o tabákových výrobcích"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Používání tabákových výrobků"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Žádná nahota jakéhokoliv typu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Občasná umělecká nahota"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Dlouhotrvající nahota"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Žádné zmínky o sexu nebo jeho vyobrazení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokativní zmínky nebo vyobrazení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Zmínky o sexu nebo jeho vyobrazení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafické znázornění sexuálního chování"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Žádné vulgární výrazy jakéhokoliv typu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Lehké nebo občasné používání vulgárních výrazů"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Střídmé používání vulgárních výrazů"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Hrubé nebo časté používání vulgárních výrazů"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Žádný nevhodný humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Bláznivý humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgární nebo postelový humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor o sexu a pro dospělé"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Žádné diskriminační řeči jakéhokoliv druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Špatný pohled na konkrétní skupinu lidí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminace cílící na způsobení citové újmy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Výslovná diskriminace založená na pohlaví, sexuální orientaci, rase nebo "
+"náboženství"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Žádná reklama jakéhokoliv druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Vyobrazení produktů"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Výslovné odkazy na konkrétní výrobce nebo značky výrobků"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Uživatelé jsou vybízení k nákupu konkrétního skutečného zboží"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Žádné hraní jakéhokoliv druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Příležitostné hraní s žetony nebo kreditem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Hraní o fiktivní peníze"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Hraní o skutečné peníze"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Žádná možnost prohrát skutečné peníze"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Uživatelé jsou vybízení k přispění skutečnými penězi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Možnost prohrát v aplikaci skutečné peníze"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Žádný způsob, jak komunikovat s ostatními uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interakce uživatel s uživatelem, bez textové komunikace"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderovaná textová komunikace mezi uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Neřízená textová komunikace mezi uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Žádný způsob, jako hovořit s ostatními uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Neřízená zvuková nebo obrazová komunikace mezi uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Žádné sdílení uživatelských jmen ze sociálních sítí a e-mailových adres"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Sdílení uživatelských jmen ze sociálních sítí a e-mailových adres"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Žádné sdílení informací o uživateli se třetími stranami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Zjišťuje se nejnovější verze aplikace"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Sdílení diagnostických dat, dle kterých se nedá identifikovat uživatel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Sdílení informací, dle kterých se dá identifikovat uživatel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Žádné sdílení fyzické polohy s ostatními uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Sdílení fyzické polohy s ostatními uživateli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Žádné zmínky o homosexualitě"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Nepřímé zmínky o homosexualitě"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Polibky dvou lidí stejného pohlaví"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafické vyobrazení sexuálního chování mezi lidmi stejného pohlaví"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Žádné zmínky o prostituci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Nepřímé zmínky o prostituci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Přímé zmínky o prostituci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafické vyobrazení aktu prostituce"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Žádné zmínky o cizoložství"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Nepřímé zmínky o cizoložství"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Přímé zmínky o cizoložství"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafické vyobrazení aktu cizoložství"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Žádné sexualizované postavy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Skrovně oděné lidské postavy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Otevřeně sexualizované lidské postavy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Žádné zmínky o znesvěcení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Vyobrazení nebo zmínky o znesvěcení v dávné minulosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Vyobrazení znesvěcení lidmi v moderní době"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafické vyobrazení znesvěcení v moderní době"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Žádné viditelné pozůstatky lidských mrtvol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Viditelné pozůstatky lidských mrtvol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Ostatky lidských mrtvol zabrané do detailů"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafické vyobrazení znesvěcení lidských těl"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Žádné zmínky o otroctví"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Vyobrazení nebo zmínky o otroctví v dávné minulosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Vyobrazení otroctví v moderní době"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafické vyobrazení otroctví v moderní době"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Obecné"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "VŠECHNY"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "pouze dospělé"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "plnoleté"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "mládež"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "všechny 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "všechny"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "malé děti"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Nějaká aplikace"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s požaduje dodatečnou podporu formátů souborů."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Požadavek na dodatečné typy MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s požaduje dodatečná písma."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Požadavek na dodatečná písma"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s požaduje dodatečné multimediální kodeky."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Požadavek na dodatečné multimediální kodeky"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s požaduje dodatečné tiskové ovladače."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Požadavek na dodatečné tiskové ovladače"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s požaduje dodatečné balíčky."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Požadavek na dodatečné balíčky"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Najít v aplikaci Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Odebírá se…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Probíhá instalace…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Probíhá aktualizace…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Připravuje se…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Tuto aplikaci je možné používat, jen když je funkční připojení k Internetu."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalovat"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalovat…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Spustit"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Odeb_rat"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Síť"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Může komunikovat přes síť"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Služby systému"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Může přistupovat k službám D-Bus na systémové sběrnici"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Služby sezení"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Může přistupovat k službám D-Bus na sběrnici sezení"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Zařízení"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Může přistupovat k souborům na systémovém zařízení"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Domovská složka"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Může zobrazovat, upravovat a vytvářet soubory"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Může zobrazovat soubory"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Souborový systém"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Složka se staženými"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Nastavení"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Může zobrazovat a měnit libovolná nastavení"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Zastaralý zobrazovací systém"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Používá starý, ne zcela bezpečný, zobrazovací systém"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Opuštění izolovaného prostředí"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Může opustit izolované prostředí a obejít další omezení"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Tato aplikace je v plně izolovaném prostředí."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nelze určit, ke kterým částem systému tato aplikace přistupuje. To je "
+"obvyklé u starších aplikací."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "neznámá"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "nikdy"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "neznámý"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "nízké"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "střední"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "vysoké"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "neznámá"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Abyste mohli napsat recenzi, musíte být připojeni k Internetu"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nelze najít „%s“"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Volné dílo"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://cs.wikipedia.org/wiki/Voln%C3%A9_d%C3%ADlo"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Svobodný software"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Uživatelé jsou vázáni následující licencí:"
+msgstr[1] "Uživatelé jsou vázáni následujícími licencemi:"
+msgstr[2] "Uživatelé jsou vázáni následujícími licencemi:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Podrobné informace"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Stránka s podrobnostmi"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Stahuje se"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Aktualizovat"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Přid_at klávesovu zkratku"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Odst_ranit klávesovou zkratku"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nemá snímek obrazovky"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Součástí je repozitář softwaru"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Součástí této aplikace je repozitář softwaru, který poskytuje aktualizace a "
+"přístup k dalšímu softwaru."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Součástí není žádný repozitář softwaru"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Součástí této aplikace není žádný repozitář softwaru. Nebude tak průběžně "
+"aktualizována na novější verze."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Tento software již poskytuje vaše distribuce a neměli byste jej nahrazovat."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Rozpoznán repozitář softwaru"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Přídáním tohoto repozitáře softwaru získáte přístup k dalšímu softwaru a "
+"aktualizacím."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Používejte pouze repozitáře softwaru, kterým věříte."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Webové stránky"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "Věnovat _dar"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Přeloženo do vašeho jazyka"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentace"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Vydávání nových verzí"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integrováno do systému"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "V izolovaném prostředí"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanál"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Verze"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Hodnocení podle věku"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Oprávnění"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Aktualizováno"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Instalace na disku"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Stahovaná velikost"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Vývojář"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licence"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "svobodná"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "uzavřená"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Doplňky"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Vybrané doplňky budou nainstalovány spolu s aplikací."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recenze"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Nap_sat recenzi"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Zobrazit další"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"To znamená, že software můžete svobodně používat, kopírovat, šířit, studovat "
+"a upravovat."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Uzavřený software"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"To znamená, že software je vlastněn jednotlivcem nebo firmou. Často jste "
+"nějak omezeni v jeho používání a obvykle nemáte přístup k jeho zdrojovým "
+"kódům."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Neznámá softwarová licence"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Licenční podmínky k tomuto softwaru nejsou známy."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Aplikace byla takto ohodnocena, protože součástí je:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "K tomuto hodnocení nejsou k dispozici žádné podrobnosti."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " a "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Dostupné fonty pro písmo %s"
+msgstr[1] "Dostupné fonty pro písma %s"
+msgstr[2] "Dostupné fonty pro písma %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Dostupný software pro kodek %s"
+msgstr[1] "Dostupný software pro kodeky %s"
+msgstr[2] "Dostupný software pro kodeky %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nelze najít požadovaný software"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s nebyl nalezen"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "na webových stránkách"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nejsou k dispozici žádné aplikace, které by poskytovaly soubor %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informace o formátu %s, včetně toho, jak získat chybějící aplikace, najdete "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Pro podporu %s nejsou k dispozici žádné aplikace."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s není k dispozici."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informace o formátu %s, včetně toho, jak získat aplikaci, který umí tento "
+"tento formát podporovat, najdete %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Pro podporu písma %s nejsou k dispozici žádné fonty."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informace o písmu %s, včetně toho, jak získat dodatečná písma, najdete %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Pro formát %s nejsou k dispozici žádné dodatečné kodeky."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informace o kodeku %s, včetně toho, jak získat kodek, který umí tento formát "
+"přehrát, najdete %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Pro podporu %s nejsou k dispozici žádné prostředky Plasma."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informace o kodeku %s, včetně toho, jak získat dodatečné prostředky Plasma, "
+"najdete %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Pro %s nejsou k dispozici žádné tiskové ovladače."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informace o tiskárně %s, včetně toho, jak získat ovladač, který podporuje "
+"tuto tiskárnu, najdete %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "tyto webové stránky"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Bohužel, ale pro „%s“ nebylo nic nalezeno. Na další informace se prosím "
+"podívejte na %s."
+msgstr[1] ""
+"Bohužel, ale pro „%s“ nebylo nic nalezeno. Na další informace se prosím "
+"podívejte na %s."
+msgstr[2] ""
+"Bohužel, ale pro „%s“ nebylo nic nalezeno. Na další informace se prosím "
+"podívejte na %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Selhalo získání jakýchkoliv výsledků hledání"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "formát souboru %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Stránka kodeků"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Vítejte"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Vítejte v aplikaci Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Pomocí aplikace Software můžete nainstalovat veškerý software, který "
+"potřebujete, naráz z jediného místa. Podívejte se na naše doporučení, "
+"procházejte si kategorie nebo vyhledejte přímo aplikaci, kterou chcete."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "Vzhůru na nákupy"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Odebráno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Nainstalováno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Aktualizováno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Neznámo"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historie"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systémové aplikace"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Stránka s nainstalovanými"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Stahuje se katalog softwaru"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Načítá se stránka"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Spouští se…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Současná síť používá měřené připojení. Ta mívají omezené množství "
+"přenesených dat nebo účtované poplatky za přenesená data. Aby se ušetřil "
+"přenos dat, byly pozastaveny automatické aktualizace.\n"
+"\n"
+"Jakmile bude dostupné neměřené připojení, budou automatické aktualizace "
+"pokračovat. Do té doby je stále možné instalovat aktualizace ručně.\n"
+"\n"
+"Případně, pokud bylo současné připojení určeno nesprávně jako měřené, lze to "
+"změnit nastavením."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Otevřít nastavení _sítě"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Stránka pro moderování"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Nejsou k dispozici žádné recenze k moderování"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "systém"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "uživatel"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Větev"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Adresa URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formát"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalace"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Více…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Z kategorie zvuk a video doporučujeme"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Z her doporučujeme"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Z kategorie grafika doporučujeme"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Z kategorie kancelář doporučujeme"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Zpřístupnit další software z vybraných zdrojů třetích stran."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Některý z tohoto softwaru může být nesvobodný a mít tak různá omezení "
+"ohledně používání, sdílení a přístupu ke zdrojovému kódu."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Dozvědět se více…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Povolit"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Stránka s přehledem"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Povolit repozitáře softwaru třetích stran?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Předchozí"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Další"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Doporučujeme"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nově vydáno"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorie"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "O aplikaci nebyly nalezeny žádné informace"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Příprava aplikace %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Opravdu chcete odebrat repozitář %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Všechny aplikace pocházející ze repozitáře %s budou odebrány. Abyste je "
+"mohli znovu použít, budete muset repozitář znovu nainstalovat."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Opravdu chcete odebrat %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s bude odebrán a když jej budete chtít použít, budete jej muset znovu "
+"nainstalovat."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (nainstalováno)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Předvolby aktualizací"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatické aktualizace"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatické aktualizace jsou zakázané při mobilním nebo měřeném připojení."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Oznamovat automatické aktualizace"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Zobrazovat oznámení, když jsou automaticky nainstalovány aplikace."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Některý z právě instalovaného softwaru není kompatibilní s distribucí %s. "
+"Pokud budete pokračovat, následujíc se během povýšení odstraní:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Nekompatibilní software"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Pokračovat"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Nainstalována %u aplikace"
+msgstr[1] "Nainstalovány %u aplikace"
+msgstr[2] "Nainstalováno %u aplikací"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Nainstalován %u doplněk"
+msgstr[1] "Nainstalovány %u doplňky"
+msgstr[2] "Nainstalováno %u doplňků"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplikace"
+msgstr[1] "%u aplikace"
+msgstr[2] "%u aplikací"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u doplněk"
+msgstr[1] "%u doplňky"
+msgstr[2] "%u doplňků"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s a %s"
+msgstr[1] "%s a %s"
+msgstr[2] "%s a %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Odebrat repozitář „%s“?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Zakázat repozitář „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Software, který byl nainstalovaný z tohoto repozitáře, nebude již nadále "
+"dostávat aktualizace, a to ani bezpečnostní opravy."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Zakázat"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operačního systému"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Tyto repozitáře doplňují výchozí nabídku softwaru poskytovaného distribucí "
+"%s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repozitáře třetích stran"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nejsou žádné dodatečné repozitáře"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Povolit"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Odeb_rat…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Zakázat…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Povoluje se"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Zakazuje se"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Povolený"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Zakázaný"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Nenávidím ji"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Nemám ji rád"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Běžná aplikace"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Mám ji rád"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Zbožňuji ji"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Věnujte prosím trochu času napsaní recenze"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Ohodnoťte prosím hvězdičkami"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Celkové hodnocení je příliš krátké"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Celkové hodnocení je příliš dlouhé"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Recenze je příliš krátká"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Recenze je příliš dlouhá"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Příspěvek do recenzí"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Odeslat"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Celkový dojem"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Uveďte krátké shrnutí své recenze, například: „Skvělá aplikace, doporučuji“."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recenze"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Co si o aplikaci myslíte? Snažte se uvést důvody svého hodnocení."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Najděte si v našich <a href=\"https://odrs.gnome.org/privacy\">zásadách "
+"soukromí</a>, jaká data jsou odesílána."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "celkové hodnocení"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Můžete nahlásit recenze, které jsou urážlivé, sprosté nebo diskriminační."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "Po nahlášení bude recenze skryta, dokud ji nezkontroluje správce."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Nahlásit recenzi?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Nahlásit"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Byla pro vás tato recenze přínosná?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ano"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ne"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Nezájem"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Nahlásit…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Odebrat…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Snímek nebyl nalezen"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Selhalo načtení obrázku"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Velikost snímku nebyla nalezena"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nelze vytvoři mezipaměť"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Snímek není platný"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Snímek není k dispozici"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Snímek"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u další výsledek hledání"
+msgstr[1] "%u další výsledky hledání"
+msgstr[2] "%u dalších výsledků hledání"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Stránka hledání"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Žádná aplikace nebyla nalezena"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Nelze stáhnout aktualizace firmwaru z %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nelze stáhnout aktualizace z %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nelze stáhnout aktualizace"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nelze stáhout aktualizace: přístup k internetu je nezbytný, ale není k "
+"dispozici"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Nelze stáhnout aktualizace z %s: není dostatek místa na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Nelze stáhnout aktualizace: není dostatek místa na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Nelze stáhnout aktualizace: je vyžadováno ověření"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nelze stáhnout aktualizace: ověření nebylo platné"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Nelze stáhnout aktualizace: nemáte oprávnění instalovat software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nelze získat seznam aktualizací"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Nelze nainstalovat balíček %s, protože selhalo jeho stažení z %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Nelze nainstalovat balíček %s, protože selhalo stažení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Nelze nainstalovat balíček %s, protože není k dispozici běhové prostředí %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nelze nainstalovat balíček %s, protože není podporovaný"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Nelze nainstalovat: přístup k internetu je nezbytný, ale není k dispozici"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nelze nainstalovat: aplikace má neplatný formát"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nelze nainstalovat balíček %s: není dostatek místa na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Nelze nainstalovat balíček %s: je vyžadováno ověření"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Nelze nainstalovat balíček %s: ověření nebylo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Nelze nainstalovat balíček %s: nemáte oprávnění k instalaci softwaru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nelze nainstalovat balíček %s: je vyžadováno připojené napájení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Nelze nainstalovat balíček %s: úroveň nabití baterie je příliš nízká"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nelze nainstalovat balíček %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Nelze aktualizovat balíček %s z %s, protože selhalo stažení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Nelze aktualizovat balíček %s, protože selhalo stažení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Nelze nainstalovat aktualizace z %s, protože selhalo stažení"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nelze nainstalovat aktualizace, protože selhalo stažení"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Nelze aktualizovat: přístup k internetu je nezbytný, ale není k dispozici"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nelze aktualizovat balíček %s: nedostatek místa na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nelze nainstalovat aktualizace: nedostatek místa na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Nelze aktualizovat balíček %s: je vyžadováno ověření"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nelze nainstalovat aktualizace: je vyžadováno ověření"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Nelze aktualizovat balíček %s: ověření bylo neplatné"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Nelze nainstalovat aktualizace: ověření bylo neplatné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Nelze aktualizovat balíček %s: nemáte oprávnění k aktualizaci softwaru"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nelze nainstalovat aktualizace: nemáte oprávnění k aktualizaci softwaru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+"Nelze aktualizovat balíček %s: je vyžadováno napájení z elektrické sítě"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Nelze nainstalovat aktualizace: je vyžadováno napájení z elektrické sítě"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Nelze aktualizovat balíček %s: úroveň nabití baterie je příliš nízká"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Nelze nainstalovat aktualizace: úroveň nabití baterie je příliš nízká"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nelze aktualizovat balíček %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nelze nainstalovat aktualizace"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nelze povýšit na %s z %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nelze povýšit na %s, protože selhalo stažení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nelze povýšit na %s: přístup k Internetu je nezbytný a přitom není k "
+"dispozici"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nelze povýšit na %s: není dostatek místa na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nelze povýšit na %s: je vyžadováno ověření"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Nelze povýšit na %s: ověření nebylo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nelze povýšit na %s: nemáte oprávnění k povyšování"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nelze povýšit na %s: je vyžadováno připojené napájení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Nelze povýšit na %s: úroveň nabití baterie je příliš nízká"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nelze povýšit na %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Nelze odstranit balíček %s: je vyžadováno ověření"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nelze odstranit balíček %s: ověření nebylo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Nelze odstranit balíček %s: nemáte oprávnění k odstranění softwaru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nelze odstranit balíček %s: je vyžadováno připojené napájení"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Nelze odstranit balíček %s: úroveň nabití baterie je příliš nízká"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nelze odstranit balíček %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nelze spustit aplikaci %s: balíček %s není nainstalovaný"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Nebyl dostatek místa na disku – uvolněte nějaké místo a pak to zkuste znovu"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Litujeme, ale něco se stalo špatně"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Selhala instalace souboru: není podporován"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Selhala instalace souboru: selhalo ověření"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Selhala instalace: není podporováno"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Selhala instalace: selhalo ověření"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nelze kontaktovat %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+"Aplikace %s musí být restartována, aby mohla používat nový zásuvný modul."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Tato aplikace musí být restartována, aby mohla používat nový zásuvný modul."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Je vyžadováno připojené napájení"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Úroveň nabití baterie je příliš nízká"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Zdroj: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (instaluje se)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (odebírá se)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Odeb_rat vše"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Není k dispozici žádný popis aktualizace."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Nainstalováno %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Instalované aktualizace"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Přidávání"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Odstraňování"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Aktualizace"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Ponižování"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Z tohoto zdroje nejsou nainstalovány žádné aktualizace."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Bezpečnostní aplikace čekají na zpracování"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Doporučuje se důležité aktualizace nainstalovat okamžitě"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Restartovat a instalovat"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Dostupné aktualizace softwaru"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Jsou připraveny k instalaci důležité aktualizace OS a aplikací"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Zobrazit"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "Byla aktualizována %u aplikace — vyžaduje restart"
+msgstr[1] "Byly aktualizovány %u aplikace — vyžaduje restart"
+msgstr[2] "Bylo aktualizováno %u aplikací — vyžaduje restart"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "Byla aktualizována %u aplikace"
+msgstr[1] "Byly aktualizovány %u aplikace"
+msgstr[2] "Bylo aktualizováno %u aplikací"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "Aplikace %s byla aktualizována."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Restartujte ji prosím."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "Aplikace %s a %s byly aktualizovány."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikace vyžaduje restart."
+msgstr[1] "%u aplikace vyžadují restart."
+msgstr[2] "%u aplikací vyžaduje restart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Včetně %s, %s a %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Aktualizace operačního systému nejsou dostupné"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Povýšit, aby byly nadále přijímány bezpečnostní aktualizace."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "K instalaci je dostupná nová verze distribuce %s"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Dostupné povýšení softwaru"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Aktualizace softwaru selhaly"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Selhala instalace důležité aktualizace OS."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Zobrazit podrobnosti"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Povýšení systému bylo dokončeno"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Vítejte ve vydání %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Aktualizace softwaru nainstalována"
+msgstr[1] "Aktualizace softwaru nainstalovány"
+msgstr[2] "Aktualizace softwaru nainstalovány"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Důležitá aktualizace OS byla nainstalována."
+msgstr[1] "Důležité aktualizace OS byly nainstalovány."
+msgstr[2] "Důležité aktualizace OS byly nainstalovány."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Přehled"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Aktualizace selhala"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Systém již byl aktuální."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Aktualizace byla zrušena."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Je vyžadován přístup k Internetu, ale není dostupný. Zkontrolujte své "
+"připojení k Internetu a zkuste to znovu."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"S aktualizací nastal bezpečnostní problém. Podrobnosti prosím proberte se "
+"svým poskytovatelem softwaru."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Nebyl dostatek místa na disku. Uvolněte prosím nějaké místo a pak to zkuste "
+"znovu."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Bohužel, instalace aktualizace selhala. Vyčkejte prosím na další aktualizaci "
+"a pak to zkuste znovu. Pokud problém přetrvá, kontaktujte svého "
+"poskytovatele softwaru."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%k∶%M"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l∶%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Včera %k∶%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Včera %l∶%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Před dvěma dny"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Před třemi dny"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Před čtyřmi dny"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Před pěti dny"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Před šesti dny"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Před jedním týdnem"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Před dvěma týdny"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Vyhledávají se nové aktualizace…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Nastavují se aktualizace…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(může to chvilku trvat)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Poslední kontrola: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Systém %s %s již není podporován."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Váš operační systém není nadále podporován."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr ""
+"Znamená to, že pro něj již nadále nejsou poskytovány bezpečnostní opravy."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Doporučuje se povýšit na nejnovější verzi."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Možné zpoplatnění"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Kontrola aktualizací přes mobilní připojení může být zpoplatněna vaším "
+"operátorem."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Přesto zkontrolovat"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Žádné připojení k síti"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Přístup k internetu je nezbytný pro kontrolu aktualizací."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Kontroluje se…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Zkontrolovat aktualizace"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Stránka s aktualizacemi"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Software je aktuální"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Kontrola aktualizací přes mobilní připojení může způsobit finanční náklady "
+"ze strany operátora připojení"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Přesto zkontrolovat"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Kvůli kontrole aktualizací se musíte připojit k síti"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Nastavení sítě"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Aktualizace jsou spravovány automaticky"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Restartovat a aktualizovat"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Aktualizovat vše"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrovaný Firmware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Vyžaduje restart"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Aktualizace aplikací"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware zařízení"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "S_táhnout"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Doporučuje se zazálohovat si před povýšením svá data a soubory."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Restartovat hned"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Aktualizace budou použity při restartu počítače."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Je k dispozici %s %s"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Čeká se na stažení %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Stahuje se %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s se může nainstalovat"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Povýšení na novou verzi s novými funkcemi a vylepšeními."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Dozvědět se více"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Přidat, odebrat nebo aktualizovat software v tomto počítači"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"aktualizace;povýšení;zdroje;repozitáře;předvolby;nastavení;instalace;"
+"odinstalace;odebrání;program;software;aplikace;obchod;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Vytváření a úprava zvuku"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Hudební přehrávače"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Ladicí programy"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Integrovaná vývojová prostředí"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Umělá inteligence"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomie"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemie"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Jazyky"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Akční"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Adventury"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkádové"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokové"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Deskové"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Karetní"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulátory"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Dětské"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logické"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Na hrdiny"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sporty"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategické"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafika 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografie"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skenování"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorová grafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Prohlížeče"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendáře"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Databáze"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finance"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Textové procesory"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fonty"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeky"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Vstupní zdroje"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Jazykové balíčky"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalizace"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Ovladače hardwaru"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Pokec"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Diskuzní skupiny"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webové prohlížeče"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Textové editory"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Vše"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Významné"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Umění"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Životopisy"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komiksy"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Beletrie"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Zdraví"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historie"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Životní styl"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sporty"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Zvuk a video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Vývojářské nástroje"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Výuka a věda"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Hry"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika a fotografie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Kancelář"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikace a diskuzní skupiny"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Knihy"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Nástroje"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Aktualizace OS"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Zahrnuje zdokonalení výkonu, stability a bezpečnosti."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Stahují se obrázky k významným aplikacím…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Aktualizace Endless OS s novými funkcemi a vylepšeními."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Aktualizační služba EOS nemohla stáhnout a nasadit aktualizaci."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Software GNOME – instalátor AppStream do celého systému"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Selhalo zpracování argumentů příkazové řádky"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Musíte zadat právě jeden název souboru"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Tento program může používat jen superuživatel"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Selhalo ověření typu obsahu"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Selhalo kopírování"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Stahují se dodatečné soubory s metadaty…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Stahují se informace o povýšení…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Proveďte povýšení, abyste získali nejnovější funkce a zlepšení výkonu a "
+"stability."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Podpora pro Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak je systém pro provozování aplikací na Linuxu"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Získávají se metadata Flatpak pro %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Aktualizace zařízení %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Aktualizace systému pro %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Aktualizace vestavěného řadiče pro %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Aktualizace ME pro %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Aktualizace ME pro firmy pro %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Aktualizace ME pro běžné spotřebitele pro %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Aktualizace řadiče pro %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Aktualizace řadiče Thunderbolt pro %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Aktualizace mikrokódu CPU pro %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Aktualizace nastavení pro %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Stahuje se podpis aktualizace firmwaru…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Stahují se metadata aktualizace firmwaru…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Podpora aktualizací firmwaru"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Poskytuje podporu pro povyšování verzí firmwaru"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Stahují se hodnocení aplikací…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS je služba poskytující uživatelům hodnocení aplikací"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Podpora pro Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap je univerzální linuxový balíček"
+
+#~ msgid "About %s"
+#~ msgstr "O aplikaci %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..615b8c3
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,5705 @@
+# Danish translation for gnome-software.
+# Copyright (C) 2013-2018 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Joe Hansen <joedalton2@yahoo.dk>, 2013.
+# Kris Thomsen <mail@kristhomsen.dk>, 2013-2017.
+# Ask Hjorth Larsen <asklarsen@gmail.com>, 2014.
+# Alan Mortensen <alanmortensen.am@gmail.com>, 2018-20.
+# scootergrisen, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-24 19:28+0200\n"
+"Last-Translator: Alan Mortensen <alanmortensen.am@gmail.com>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.3\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Programhåndtering til GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software lader dig finde og installere nye programmer og systemudvidelser, "
+"samt fjerne allerede installerede programmer."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software fremviser udvalgte og populære programmer med nyttige "
+"beskrivelser og adskillige skærmbilleder per program. Programmer kan findes "
+"enten ved gennemsyn af oversigten over kategorier eller gennem søgning. "
+"Dette program giver dig også mulighed for at opdatere dit system ved brug af "
+"offlineopdatering."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Oversigtspanel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Detaljepanel"
+
+# i modsætning til "oversigtsside" mv. tidliger og senere
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Installerede-panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Opdateringspanel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Opdateringsdetaljerne"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "GNOME-projektet"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installér en appstream-fil på en systemplacering"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installerer en appstream-fil på en systemplacering"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "En liste over kompatible projekter"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Dette er en liste over kompatible projekter, som vi skal vise, som f.eks. "
+"GNOME, KDE og XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Om opdateringer og opgraderinger skal håndteres i GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Hvis deaktiveret vil GNOME Software skjule opdateringspanelet og ikke udføre "
+"nogen automatiske opdateringshandlinger eller anmode om opgraderinger."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Hent og installér automatisk opdateringer"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Hvis aktiveret, vil GNOME Software automatisk hente opdateringer i "
+"baggrunden og installere dem, der ikke kræver en genstart."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Gør brugeren opmærksom på software, som blev opdateret i baggrunden"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Hvis aktiveret, vil GNOME Software gøre brugeren opmærksom på opdateringer, "
+"der skete, mens brugeren var inaktiv."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Om der automatisk skal genopfriskes på en forbrugsafregnet forbindelse"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Hvis aktiveret, vil GNOME Software automatisk genopfriske i baggrunden, også "
+"når en forbrugsafregnet forbindelse er i brug (til tider hente metadata, "
+"kontrollere efter opdateringer osv. som kan betyde udgifter for brugeren)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Om det er første gang, GNOME Software køres"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Vis stjernevurderinger ved siden af programmerne"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrér programmer baseret på standard-branchen angivet for fjernenheden"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Ikke-frie programmer viser en advarselsdialog før installation"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Når ikke-frie programmer installeres, vil en advarselsdialog blive vist. "
+"Dette kontrollerer om den dialog undertrykkes."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "En liste over populære programmer"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "En liste over programmer som skal bruges frem for de systemdefinerede."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Tidsstemplet for seneste søgning efter opdatering"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Tidsstemplet for seneste påmindelse om opgradering"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Tidsstemplet for den første sikkerhedsopdatering; ryddes efter opdatering"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Tidsstemplet for seneste opdatering"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "Tidsstemplet da systemet senest var online og modtog opdateringer"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Alderen i sekunder til at verificere at upstream-screenshot'et stadig er "
+"gyldigt"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"At vælge en større værdi vil betyde færre kald til fjernserveren, men "
+"screenshot-opdateringer kan tage længere tid, før brugeren ser dem. Værdien "
+"0 betyder at serveren aldrig skal kontrolleres, hvis billedet allerede "
+"findes i cachen."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Serveren, som bruges til programanmeldelser"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Mindste karmascore for anmeldelser"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Anmeldelser med mindre karma end dette nummer vil ikke blive vist."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "En liste over officielle arkiver, som ikke skal anses som tredjepart"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "En liste over officielle arkiver, der skal anses som fri software"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Licens-URL'en, som skal bruges, når et program skal betragtes som fri "
+"software"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Installér bundtede programmer for alle brugere på systemet, hvor det er "
+"muligt"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Tillad adgang til dialogen Softwarearkiver"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Tilbyd opgraderinger ved før-udgivelser"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Vis brugerfladeelementer, som informerer brugeren om at programmet ikke er "
+"frit"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Vis dialogen for at installere fra ikke-frie softwarearkiver"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Vis installationsstørrelsen for programmer i listen over installerede "
+"programmer"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://da.wikipedia.org/wiki/Propriet%C3%A6r_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI'en, som forklarer hvad ikke-fri og proprietær software er"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"En liste over url'er, som peger på appstream-filter, som vil blive hentet "
+"ned i en app-info-mappe"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Installér en AppStream-fil på en systemplacering for alle brugere"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Aktivér GNOME Shell-udvidelserarkivet"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"En streng indeholdende id til gnome-online-account, som anvendes til login"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Softwareinstallation"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installér valgte programmer på systemet"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Vælg alle"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Vælg ingen"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Softwarearkiver"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Opdateringsindstillinger"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Gå tilbage"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Udforsk"
+
+# Installerede, mon ikke?
+# (men Installeret virker vist egentlig også)
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installerede"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Opdateringer"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Søg"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Kilde"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Softwarearkiver"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Undersøg disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Netværksindstillinger"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Genstart nu"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Mere information"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatiske opdateringer sat på pause"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Find ud af _mere …"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokal fil"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pakke"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Venter"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installeret"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installerer"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Fjerner"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Opstartstilstand: enten “updates”, “updated”, “installed” eller “overview”"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "TILSTAND"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Søg efter programmer"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SØG"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Vis programdetaljer (ud fra program-id)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "Id"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Vis programdetaljer (ud fra pakkenavn)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PAKKENAVN"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Installér programmet (ud fra program-id)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Åbn en lokal pakkefil"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILNAVN"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Handlingens forventet interaktionstype: enten “none”, “notify” eller “full”"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Vis udvidet fejlsøgningsinformation"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installerer afventende opdateringer i baggrunden"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Vis opdateringsindstillinger"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Afslut den kørende instans"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Foretræk lokale filkilder fremfor AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Vis versionsnummer"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Kris Thomsen\n"
+"Joe Hansen\n"
+"Ask Hjorth Larsen\n"
+"Alan Mortensen\n"
+"\n"
+"Dansk-gruppen\n"
+"Websted http://dansk-gruppen.dk\n"
+"E-mail <dansk@dansk-gruppen.dk>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Om Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "En god måde at håndtere softwaren på dit system."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Beklager! Der er ingen detaljer om programmet."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Besøg websted"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installér …"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Annullér"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installér"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Opdatér"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Fjern"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Enhed kan ikke bruges under opdatering."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Kræver flere rettigheder"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Login krævet til fjern %s (domæne %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Login krævet"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Annullér"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Login"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Bruger"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "A_dgangskode"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Andet"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Alle"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Udvalgte"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Udvalgte i %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Vurdering"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Navn"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Vis"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Filtermenu for underkategorier"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sortering"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Sorteringsmenu for underkategorier"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Vælg venligst et tal mellem 1 og %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Vælg et program:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Systemopdateringer er nu installeret"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nyligt installerede opdateringer er tilgængelige for gennemsyn"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s er nu installeret"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Der kræves en genstart, før ændringerne træder i kraft."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Programmet er klar til at blive taget i brug."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Genstart"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Kør"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Installér tredjeparts-software?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Aktivér softwarearkiver fra tredjepart?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s er ikke <a href=\"https://da.wikipedia.org/wiki/Free/"
+"Libre_and_Open_Source_Software\">fri og åben kildekode-software</a>, og er "
+"leveret af “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s er leveret af “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Dette softwarearkiv skal aktiveres for at fortsætte installationen."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Det er muligvis ulovligt at installere eller bruge %s i visse lande."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Det er muligvis ulovligt at installere og bruge dette codec i visse lande."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Advar mig ikke igen"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Aktivér og installér"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detaljerede fejlbeskeder fra pakkehåndteringen følger:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detaljer"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "En opdatering er blevet installeret"
+msgstr[1] "Opdateringer er blevet installeret"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Der kræves en genstart, før den træder i kraft."
+msgstr[1] "Der kræves en genstart, før de træder i kraft."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ikke nu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Ingen tegneserie-vold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Tegneseriefigurer i farlige situationer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Tegneseriefigurer i aggressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Visuel fremstilling af vold som involverer tegneseriefigurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Ingen fantasy-vold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Karakterer, som er nemme at skelne fra virkeligheden, i farlige situationer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Karakterer, som er nemme at skelne fra virkeligheden, i aggressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Visuel fremstilling af vold som er nemt at skelne fra virkeligheden"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Ingen realistisk vold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Lettere realistiske karakterer i farlige situationer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Skildringer af realistiske karakterer i aggressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Visuel fremstilling af vold som involverer realistiske karakterer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Ingen blodsudgydelser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Urealistiske blodsudgydelser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistiske blodsudgydelser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Skildringer af blodsudgydelser og lemlæstelse af kropsdele"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Ingen seksuel vold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Voldtægt eller anden voldelig seksuel opførsel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Ingen referencer til alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referencer til alkoholiske drikke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Brug af alkoholiske drikke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Ingen referencer til ulovlige stoffer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referencer til ulovlige stoffer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Brug af ulovlige stoffer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Ingen referencer til tobaksvarer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referencer til tobaksvarer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Brug af tobaksvarer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Ingen nøgenhed af nogen art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Kortvarig kunstnerisk nøgenhed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Længerevarende nøgenhed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Ingen referencer til eller skildringer af seksuel art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokerende referencer eller skildringer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksuelle referencer eller skildringer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Visuel fremstilling af seksuel opførsel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Ingen bandeord af nogen art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Lettere eller sjælden brug af bandeord"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Moderat brug af bandeord"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Stærk eller udbredt brug af bandeord"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Ingen upassende humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstick-humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Toilet- eller vulgær humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Voksen- eller seksuel humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Intet diskriminerende sprog af nogen art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativitet mod en specifik gruppe af mennesker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminering med følelsesmæssig skade som formål"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Eksplicit diskriminering baseret på køn, seksualitet, race eller religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Ingen reklamer af nogen art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Product placement"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Eksplicitte referencer til specifikke brands eller varemærkede produkter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Brugere opfordres til at købe specifikke ting fra den virkelige verden"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Ingen hasardspil af nogen art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+"Hasardspil om tilfældige lejligheder, med brug af spille-tokens eller kredit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Hasardspil med “legetøjs”-penge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Hasardspil med rigtige penge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Ingen mulighed for at bruge penge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Brugere opfordres til at donere virkelige penge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Mulighed for at bruge rigtige penge i programmet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Ingen mulighed for at chatte med andre brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Bruger til bruger-interaktioner uden chatfunktionalitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Modereret chat-funktionalitet mellem brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Ubegrænset chat-funktionalitet mellem brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Ingen mulighed for at tale med andre brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Ubegrænset lyd- eller video-chat-funktionalitet mellem brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Ingen deling af brugernavne eller e-mailadresser fra sociale netværk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Deling af brugernavne eller e-mailadresser fra sociale netværk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Ingen deling af brugerinformation med tredjeparter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Søger efter den seneste version af programmet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Deling af diagnostiske data som ikke lader andre identificere brugeren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Deling af information som lader andre identificere brugeren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Ingen deling af fysisk placering med andre brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Deler fysisk placering med andre brugere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Ingen referencer til homoseksualitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Indirekte referencer til homoseksualitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Personer af samme køn som kysser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Visuel fremstilling af seksuel opførsel mellem mennesker af samme køn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Ingen referencer til prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Indirekte referencer til prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Direkte referencer til prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Visuel fremstilling af prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Ingen referencer til utroskab"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Indirekte referencer til utroskab"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Direkte referencer til utroskab"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Visuel fremstilling af utroskab"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Ingen seksualiserede personer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Sparsomt påklædte personer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Åbenlyst seksualiserede personer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Ingen referencer til vanhelligelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Fremstilling af eller referencer til historisk vanhelligelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Fremstilling af nutidig vanhelligelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Visuel fremstilling af nutidig vanhelligelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Ingen synlige ligdele"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Synlige ligdele"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Ligdele i forfald"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Visuel fremstilling af ligskænding"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Ingen referencer til slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Fremstilling af eller referencer til historisk slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Fremstilling af nutidigt slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Visuel fremstilling af nutidigt slaveri"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Generelt"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ALLE"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Kun for voksne"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Voksne"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Teen"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Alle"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Småbørn"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Et program"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s efterspørger yderligere filformat-understøttelse."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Flere MIME-typer påkrævet"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s efterspørger flere skrifttyper."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Flere skrifttyper påkrævet"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s efterspørger flere multimedie-codecs."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Flere multimedie-codecs påkrævet"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s efterspørger flere printerdrivere."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Flere printerdrivere påkrævet"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s efterspørger flere pakker."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Flere pakker påkrævet"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Find i Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Fjerner …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Afventer installering …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Afventer opdatering …"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Klargør …"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Dette program kan kun bruges når der er en aktiv internet-forbindelse."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installér"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installér …"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Kør"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Fjern"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Netværk"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Kan kommunikere over netværket"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Systemtjenester"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Kan tilgå D-Bustjenester på systembussen"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Sessionstjenester"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Kan tilgå D-Bustjenester på sessionsbussen"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Enheder"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Kan tilgå filer på systemenheden"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Hjemmemappe"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Kan se, redigere og oprette filer"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Kan se filer"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Filsystem"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Mappe til hentede filer"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Indstillinger"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Kan se og ændre alle indstillinger"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Forældet system til visning"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Bruger et gammelt, usikkert system til visning"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Sandkasse-undvige"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Kan undvige sandkassen og omgå andre begrænsninger"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Dette program køres i sandkassetilstand."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Kan ikke fastslå hvilke dele af systemet, dette program tilgår. Dette er "
+"typisk for ældre programmer."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Ukendt"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Aldrig"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Ukendt"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Lav"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Middel"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Høj"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Ukendt"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Du skal have internetadgang for at skrive en anmeldelse"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Kunne ikke finde “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Public domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://da.wikipedia.org/wiki/Offentligt_dom%C3%A6ne"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.da.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Fri software"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Brugere er bundet af følgende licens:"
+msgstr[1] "Brugere er bundet af følgende licenser:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mere information"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Detaljeside"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Henter"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Opdatér"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Tilføj genvej"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "F_jern kilde"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Intet skærmbillede angivet"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Softwarearkiv inkluderet"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Dette program inkluderer et softwarearkiv, som tilbyder opdateringer så vel "
+"som adgang til anden software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Intet softwarearkiv inkluderet"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Dette program inkluderer ikke et softwarearkiv. Det vil ikke blive opdateret "
+"med nye versioner."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Denne software udbydes allerede af din distribution og bør ikke erstattes."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Softwarearkiv fundet"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Tilføjelse af dette softwarearkiv vil give dig adgang til mere software samt "
+"opdateringer."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Brug kun softwarearkiver, du stoler på."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Websted"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donér"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Oversat til dit sprog"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentation"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Udgivelsesaktivitet"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Systemintegration"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Sandkassetilstand"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Aldersvurdering"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Rettigheder"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Opdateret"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategori"
+
+# i modsætning til "oversigtsside" mv. tidliger og senere
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Størrelse på installation"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Størrelse på download"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Udvikler"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licens"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Fri"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietær"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Udvidelser"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Valgte udvidelser vil blive installeret sammen med programmet."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Anmeldelser"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Skriv en anmeldelse"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Vis mere"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Dette betyder, at softwaren frit kan køres, kopieres, distribueres, "
+"undersøges og ændres."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Proprietær software"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Dette betyder, at softwaren er ejet af en privat person eller et firma. Der "
+"er ofte begrænsninger for dets brug, og dets kildekode kan normalvis ikke "
+"tilgås."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Ukendt softwarelicens"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Licens-betingelserne for dette software er ukendte."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Dette program er vurderet på denne måde, fordi det indeholder:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Ingen detaljer var tilgængelige for denne vurdering."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " og "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tilgængelige skrifttyper til %s-skriptet"
+msgstr[1] "Tilgængelige skrifttyper til %s-skripterne"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Tilgængelig software til %s"
+msgstr[1] "Tilgængelig software til %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Kunne ikke finde den ønskede software"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s ikke fundet"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "på webstedet"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Ingen programmer er tilgængelige til at udbyde filen %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Information om %s, såvel som muligheder for at hente manglende programmer "
+"kan muligvis findes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Ingen programmer er tilgængelige for understøttelse af %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s ikke tilgængelig."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Information om %s, såvel som muligheder for at hente et codec, der kan "
+"understøtte dette format, kan findes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Ingen tilgængelige skrifttyper, som understøtter %s-skriptet."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Information om %s, såvel som muligheder for at hente flere skrifttyper kan "
+"findes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Ingen tilføjelses-codec tilgængelig for formatet %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Information om %s, såvel som muligheder for hvordan man henter et codec, der "
+"kan afspille dette format, kan findes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Ingen Plasma-ressourcer tilgængelige for %s-understøttelse."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Information om %s, såvel som muligheder for at hente flere Plasma-ressourcer "
+"kan findes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Ingen printerdrivere tilgængelige for %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Information om %s, såvel som muligheder for at hente en driver, der "
+"understøtter denne printer, kan findes %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "dette websted"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Desværre kunne %s, som du søgte efter, ikke findes. Se venligst %s for mere "
+"information."
+msgstr[1] ""
+"Desværre kunne %s, som du søgte efter, ikke findes. Se venligst %s for mere "
+"information."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Kunne ikke finde nogen søgeresultater"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s-filformatet"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Codecsside"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Velkommen"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Velkommen til Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software giver dig mulighed for at installere al den software du har brug "
+"for fra ét samlet sted. Se vores anbefalinger, gennemse kategorierne eller "
+"søg efter de programmer du ønsker."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Lad os handle"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Fjernet"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installeret"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Opdateret"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Ukendt"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historik"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systemprogrammer"
+
+# i modsætning til "oversigtsside" mv. tidliger og senere
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Installerede-side"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Softwarekataloget er ved at blive hentet"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Indlæser side"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Starter …"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Det nuværende netværk er forbrugsafregnet. Forbrugsafregnede forbindelser "
+"har begrænset mængde data eller koster penge. For at spare på dataforbruget "
+"er automatiske opdateringer sat på pause.\n"
+"\n"
+"Automatiske opdateringer genoptages, når et netværk uden forbrugsafregning "
+"bliver tilgængeligt. Indtil da er det stadig muligt at installere "
+"opdateringer manuelt.\n"
+"\n"
+"Er det nuværende netværk forkert blevet klassificeret som forbrugsafregnet, "
+"kan indstillingen ændres."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "_Åbn netværksindstillinger"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Administrer side"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Der er ingen anmeldelser at administrere"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "system"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "bruger"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Gren"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installation"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Flere …"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Anbefalede lyd- og videoprogrammer"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Anbefalede spil"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Anbefalede grafikprogrammer"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Anbefalede produktivitetsprogrammer"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Tilgå mere software fra udvalgte tredjepartskilder."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Noget af dette software er proprietært, og der er derfor begrænsninger på "
+"dets brug og adgang til kildekoden."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Find ud af mere …"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Aktivér"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Oversigtsside"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Aktivér softwarearkiver fra tredjepart?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Forrige"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Næste"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Redaktørens valg"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Seneste udgivelser"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorier"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Ingen programdata fundet"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Forbered %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Er du sikker på, du vil fjerne arkivet %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Alle programmer fra %s vil blive fjernet, og du skal geninstallere arkivet "
+"for at bruge dem igen."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Er du sikker på at du vil fjerne %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s vil blive fjernet og du skal installere det for at bruge den igen."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Installeret)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Opdateringsindstillinger"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatiske opdateringer"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatiske opdateringer deaktiveres på en mobil eller forbrugsafregnet "
+"forbindelse."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Påmindelser om automatiske opdateringer"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Vis påmindelser når opdateringer er installeret automatisk."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Noget af det software, som er installeret, er ikke kompatibelt med %s. Hvis "
+"du fortsætter, vil følgende blive fjernet automatisk under opgraderingen:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Inkompatibelt software"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Fortsæt"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u program installeret"
+msgstr[1] "%u programmer installeret"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u tilføjelse installeret"
+msgstr[1] "%u tilføjelser installeret"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u program"
+msgstr[1] "%u programmer"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tilføjelse"
+msgstr[1] "%u tilføjelser"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s og %s er nu installeret"
+msgstr[1] "%s og %s er nu installeret"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Fjern “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Deaktivér “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Software, som er blevet installeret fra dette arkiv, vil ikke længere blive "
+"opdateret heller ikke med sikkerhedsopdateringer."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Deaktivér"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "styresystemet"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Disse arkiver supplerer standardsoftwaren leveret af %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Tredjepartsarkiver"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Ingen yderligere arkiver"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "A_ktivér"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Fjern …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Deaktivér …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Aktiverer"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Deaktiverer"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Aktiveret"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Hader det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Kan ikke lide det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Det er OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Kan lide det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Elsker det"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Tag venligst tiden til at skrive anmeldelsen"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Vælg venligst en stjernevurdering"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Opsummeringen er for kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Opsummeringen er for lang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Beskrivelsen er for kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Beskrivelsen er for lang"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Send anmeldelse"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Send"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Opsummering"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Giv en kort opsummering af din anmeldelse, for eksempel: “Godt program, kan "
+"anbefales”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Anmeldelse"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Hvad synes du om programmet? Prøv at give begrundelser for dine synspunkter."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Se hvilke data som sendes i vores <a href=\"https://odrs.gnome.org/privacy"
+"\">privatlivspolitik</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "vurderinger i alt"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Du kan rapportere anmeldelser for aggressivt, uforskammet eller "
+"diskriminerende indhold."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Når en anmeldelse er rapporteret, vil den være skjult, indtil den er "
+"kontrolleret af en administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Rapportér anmeldelse?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Rapportér"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Kunne du bruge anmeldelsen?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nej"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Hmm"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Rapportér …"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Fjern …"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Skærmbillede ikke fundet"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Kunne ikke indlæse billede"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Skærmbilledstørrelse ikke fundet"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Kunne ikke oprette mellemlager"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Skærmbillede ugyldigt"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Skærmbillede ikke tilgængeligt"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Skærmbillede"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u match mere"
+msgstr[1] "%u matches mere"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Søgeside"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Intet program fundet"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Kunne ikke hente firmware-opdateringer fra %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Kunne ikke hente opdateringer fra %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Kunne ikke hente opdateringer"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Kunne ikke hente opdateringer: netværksadgang var påkrævet, men var ikke "
+"tilgængelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Kunne ikke hente opdateringer fra %s: ikke nok diskplads"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Kunne ikke hente opdateringer: ikke nok diskplads"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Kunne ikke hente opdateringer: godkendelse var påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Kunne ikke hente opdateringer: godkendelse var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Kunne ikke hente opdateringer: du har ikke rettigheder til at installere "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Kunne ikke hente liste over opdateringer"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Kunne ikke installere %s fordi download mislykkedes fra %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Kunne ikke installere %s fordi download mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Kunne ikke installere %s, fordi %s-runtimen ikke er tilgængelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Kunne ikke installere %s fordi det ikke understøttes"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Kunne ikke installere: netværksadgang var påkrævet, men var ikke tilgængelig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Kunne ikke installere: programmet har et ugyldigt format"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Kunne ikke installere %s: ikke nok diskplads"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Kunne ikke installere %s: godkendelse var påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Kunne ikke installere %s: godkendelse var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Kunne ikke installere %s: du har ikke rettigheder til at installere software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Kunne ikke installere %s: strømforsyning er påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Kunne ikke installere %s: batteriniveauet er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Kunne ikke installere %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Kunne ikke opdatere %s fra %s, fordi download mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Kunne ikke opdatere %s fordi download mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Kunne ikke installere opdateringer fra %s, fordi download mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Kunne ikke installere opdateringer, fordi download mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Kunne ikke opdatere: netværksadgang var påkrævet, men var ikke tilgængelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Kunne ikke opdatere %s: ikke nok diskplads"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Kunne ikke installere opdateringer: ikke nok diskplads"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Kunne ikke opdatere %s: godkendelse var påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Kunne ikke installere opdateringer: godkendelse var påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Kunne ikke opdatere %s: godkendelse var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Kunne ikke installere opdateringer: godkendelse var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Kunne ikke opdatere %s: du har ikke rettigheder til at opdatere software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Kunne ikke installere opdateringer: du har ikke rettigheder til at opdatere "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Kunne ikke opdatere %s: strømforsyning er påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Kunne ikke installere opdateringer: strømforsyning er påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Kunne ikke opdatere %s: batteriniveauet er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Kunne ikke installere opdateringer: batteriniveauet er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Kunne ikke opdatere %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Kunne ikke installere opdateringer"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Kunne ikke opgradere fra %s til %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Kunne ikke opgradere til %s fordi download mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Kunne ikke opgradere til %s: netværksadgang var påkrævet, men var ikke "
+"tilgængelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Kunne ikke opgradere til %s: ikke nok diskplads"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Kunne ikke opgradere til %s: godkendelse var påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Kunne ikke opgradere til %s: godkendelse var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Kunne ikke opgradere til %s: du har ikke rettigheder til at opgradere"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Kunne ikke opgradere til %s: strømforsyning er påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Kunne ikke opgradere til %s: batteriniveauet er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Kunne ikke opgradere til %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Kunne ikke fjerne %s: godkendelse var påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Kunne ikke fjerne %s: godkendelse var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Kunne ikke fjerne %s: du har ikke rettigheder til at fjerne software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Kunne ikke fjerne %s: strømforsyning er påkrævet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Kunne ikke fjerne %s: batteriniveauet er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Kunne ikke fjerne %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Kunne ikke starte %s: %s er ikke installeret"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Ikke nok diskplads — frigør venligst noget plads og forsøg igen"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Beklager, noget gik galt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Kunne ikke installere fil: understøttes ikke"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Kunne ikke installere fil: godkendelse mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Kunne ikke installere: understøttes ikke"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Kunne ikke installere: godkendelse mislykkedes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Kunne ikke kontakte %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s skal genstartes for at bruge nye udvidelsesmoduler."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Dette program skal genstartes for at bruge nye udvidelsesmoduler."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Strømforsyning er påkrævet"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Batteriniveauet er for lavt"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Kilde: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Installerer)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Fjerner)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Fjern alle"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Ingen opdateringsbeskrivelse tilgængelig."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installeret på %s"
+
+# i modsætning til "oversigtsside" mv. tidliger og senere
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Installerede opdateringer"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Tilføjelser"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Fjernelser"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Opdateringer"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Nedgraderinger"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Ingen opdateringer er blevet installeret på dette system."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Sikkerhedsopdateringer afventer"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Det anbefales at du installerer vigtige opdateringer nu"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Genstart og installér"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Softwareopdateringer tilgængelige"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Vigtige OS- og programopdateringer er klar til installation"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Vis"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u program opdateret — genstart nødvendig"
+msgstr[1] "%u programmer opdateret — genstart nødvendig"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u program opdateret"
+msgstr[1] "%u programmer opdateret"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s er blevet opdateret."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Genstart venligst programmet."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s og %s er blevet opdateret."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u program kræver en genstart."
+msgstr[1] "%u programmer kræver en genstart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inkluderer %s, %s og %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Systemopdateringer er ikke tilgængelige"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Opgradér for fortsat at modtage sikkerhedsopdateringer."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "En ny version af %s er klar til at blive installeret"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Softwareopgradering er tilgængelig"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Softwareopdateringer mislykkedes"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "En vigtig systemopdatering kunne ikke installeres."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Vis detaljer"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Opgradering af systemet er fuldført"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Velkommen til %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Softwareopdatering installeret"
+msgstr[1] "Softwareopdateringer installeret"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Der er blevet installeret en vigtig systemopdatering."
+msgstr[1] "Der er blevet installeret vigtige systemopdateringer."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Gennemse"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Kunne ikke opdatere"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Systemet var allerede opdateret."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Opdateringen blev annulleret."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internetadgang var påkrævet, men var ikke tilgængelig. Kontrollér venligst "
+"om du har internetadgang og forsøg igen."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Der var sikkerhedsmæssige problemer med opdateringen. Konsultér venligst din "
+"softwareudbyder for flere detaljer."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Der var ikke nok diskplads. Frigør venligst noget plads og forsøg igen."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Vi beklager: opdateringen kunne ikke installeres. Vent på en anden "
+"opdatering og forsøg igen. Hvis problemet fortsætter kan du kontakte din "
+"softwareudbyder."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "I går, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "I går, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "To dage siden"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Tre dage siden"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Fire dage siden"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Fem dage siden"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Seks dage siden"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "En uge siden"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "To uger siden"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Søger efter nye opdateringer …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Sætter opdateringer op …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Dette kan tage et stykke tid)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Seneste søgning: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s understøttes ikke længere."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Dit system understøttes ikke længere."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Dette betyder at det ikke modtager sikkerhedsopdateringer."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Det anbefales at du opgraderer til en nyere version."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Dette kan koste penge"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Det kan koste penge at søge efter opdateringer, når der bruges mobilbredbånd."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Søg _alligevel"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Intet netværk"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Der kræves internetadgang for at søge efter opdateringer."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Søger …"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Søg efter opdateringer"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Opdateringsside"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Software er opdateret"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Det kan koste penge at søge efter opdateringer, når der bruges mobilbredbånd"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Søg alligevel"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Gå online for at søge efter opdateringer"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Netværksindstillinger"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Opdateringer håndteres automatisk"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Genstart og opdatér"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Opdatér alle"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integreret firmware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Kræver genstart"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Programopdateringer"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Enhedsfirmware"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Hent"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Det anbefales at du tager en sikkerhedskopi af dine data inden opgraderingen."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Genstart nu"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Opdateringerne anvendes, når computeren er blevet genstartet."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s er nu tilgængelig"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Venter på at hente %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Henter %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s er klar til at blive installeret"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "En stor opgradering med nye funktioner og mere finpudsning."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Lær mere"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Tilføj, fjern eller opdatér software på denne computer"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Opdateringer;Opgrader;Kilder;Pakkearkiver;Indstillinger;Installer;"
+"Afinstaller;Program;Software;App;Butik;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Oprettelse og redigering af lyd"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musikafspillere"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Fejlsøgere"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Udviklingsmiljøer"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Kunstig intelligens"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kemi"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Sprog"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematik"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotteknologi"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Eventyr"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokke"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Brætspil"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kortspil"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatorer"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Børn"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logik"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rollespil"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategi"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafik"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografi"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skanning"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafik"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Fremvisere"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalender"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Database"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finans"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Tekstbehandling"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Skrifttyper"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codec"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Indtastningskilder"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Sprogpakker"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisering"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardwaredrivere"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nyheder"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webbrowsere"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Tekstredigering"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Udvalgte"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Kunst"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografi"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Tegneserier"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiktion"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Sundhed"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historie"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Livsstil"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politik"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Lyd og video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Udviklingsværktøjer"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Uddannelse og videnskab"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Spil"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafik og fotografi"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivitet"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Kommunikation og nyheder"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Reference"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Værktøjer"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Systemopdateringer"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inkluderer forbedringer af ydelse, stabilitet og sikkerhed."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Henter udvalgte billeder …"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "En Endless OS-opdatering med nye funktioner og rettelser."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS-opdateringstjenesten kunne ikke hente og anvende opdateringen."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Software AppStream-installeringsprogram på systemniveau"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Kunne ikke tolke kommandolinje-argumenter"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Du skal angive præcis ét filnavn"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Dette program kan kun bruges af root-brugeren"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Kunne ikke validere indholdstype"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kunne ikke kopiere"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Henter ekstra metadatafiler …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Henter opgraderingsinformation …"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Opgradér for at få de seneste funktioner samt forbedringer af ydelse og "
+"stabilitet."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Understøttelse af Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak er et framework til skrivebordsprogrammer på Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Henter flatpak-metadata til %s …"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Enhedsopdatering til %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Systemopdatering til %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Indlejret styringsenhedsopdatering til %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "ME-opdatering til %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Virksomheds-ME-opdatering til %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Forbruger-ME-opdatering til %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Styringsenhedsopdatering til %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Thunderbolt-styringsenhedsopdatering til %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "CPU Microcode-opdatering til %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Konfigurationsopdatering til %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Henter signatur til firmwareopdatering …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Henter metadata til firmwareopdatering …"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Understøttelse af firmwareopgradering"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Giver understøttelse for firmwareopgraderinger"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Henter programvurderinger …"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Understøttelse af Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS er en tjeneste, der giver brugeranmeldelser af programmer"
+
+# https://docs.snapcraft.io/core/store
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snapbutik"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Understøttelse af Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "En snap er en universel Linux-pakke"
+
+#~ msgid "About %s"
+#~ msgstr "Om %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Vis brugerfladen for mappehåndtering"
+
+#~ msgid "Folder Name"
+#~ msgstr "Mappenavn"
+
+#~ msgid "_Add"
+#~ msgstr "_Tilføj"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Føj til programmappe"
+
+# scootergrisen: jeg har foreslået at ændre fra "Top Rated" til "Rating" i kilden.
+#~ msgid "Top Rated"
+#~ msgstr "Vurdering"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Udvidelsesindstillinger"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Udvidelser bruges under eget ansvar. Hvis du har nogen systemproblemer, "
+#~ "anbefales det at deaktivere dem."
+
+#~| msgid "Failed to load image"
+#~ msgid "Failed to load components"
+#~ msgstr "Kunne ikke indlæse komponenterne"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS-valideret OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Kunne ikke indlæse fil"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Ændringer, som ikke er gemt"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Programlisten er allerede indlæst."
+
+#~ msgid "Merge documents"
+#~ msgstr "Saml dokumenter"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Forkast ændringerne"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Åbn AppStream-fil"
+
+#~ msgid "_Open"
+#~ msgstr "_Åbn"
+
+#~| msgid "Open AppStream File"
+#~ msgid "Save AppStream File"
+#~ msgstr "Gem AppStream-fil"
+
+#~ msgid "_Save"
+#~ msgstr "_Gem"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Kunne ikke gemme fil"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Bannerdesign for %s slettet."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Bannerdesign slettet."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Programlisten har ændringer, som ikke er gemt."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Brug detaljeret logning"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Software-bannerdesigner"
+
+#~ msgid "No Designs"
+#~ msgstr "Ingen designs"
+
+#~ msgid "Error message here"
+#~ msgstr "Fejlbesked her"
+
+#~ msgid "App ID"
+#~ msgstr "App-id"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Redaktørens valg"
+
+#~ msgid "Category Featured"
+#~ msgstr "Udvalgt i kategori"
+
+#~ msgid "Undo"
+#~ msgstr "Omgør"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Bannerdesigner"
+
+#~ msgid "New Banner"
+#~ msgstr "Nyt banner"
+
+#~ msgid "Import from file"
+#~ msgstr "Importér fra fil"
+
+#~ msgid "Export to file"
+#~ msgstr "Eksportér til fil"
+
+#~ msgid "Delete Design"
+#~ msgstr "Slet design"
+
+#~ msgid "Featured App"
+#~ msgstr "Udvalgt program"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Systemopgradering"
+
+#~ msgid "Spacing"
+#~ msgstr "Mellemrum"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Hvor meget mellemrum der er mellem underelementerne"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Klik på elementer for at vælge dem"
+
+#~ msgid "Select"
+#~ msgstr "Vælg"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Føj til mappe …"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "Fl_yt til mappe …"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Fjern fra mappe"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Udvalgte programmer"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Design udvalgte-bannerne til GNOME Software"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;Program;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell-udvidelser"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Understøttelse af web-apps"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Kør populære web-programmer i en browser"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell-udvidelserarkiv"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Henter metadata til shell-udvidelse …"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell-udvidelse"
+
+#~ msgid "_All"
+#~ msgstr "_Alle"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Log på/registrér …"
+
+#~ msgid "Continue"
+#~ msgstr "Fortsæt"
+
+#~ msgid "Use"
+#~ msgstr "Brug"
+
+#~ msgid "Add another…"
+#~ msgstr "Tilføj en mere …"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Er du sikker på, at du vil købe %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s vil blive installeret, og du vil blive opkrævet %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Køb"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Logget på som %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Log på …"
+
+#~ msgid "Sign out"
+#~ msgstr "Log af"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Kunne ikke købe %s: godkendelse var påkrævet"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Kunne ikke købe %s: godkendelse var ugyldig"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Kunne ikke købe %s: betalingsmetode er ikke sat op"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Kunne ikke købe %s: betaling blev afvist"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Kunne ikke købe %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "For at fortsætte skal du bruge en Ubuntu One-konto."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "For at fortsætte skal du bruge din Ubuntu One-konto."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Softwarekataloget er ved at blive indlæst"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "…"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Vis ydelsesinformation for tjenesten"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "For at fortsætte, skal du logge ind på %s."
+
+#~ msgid "Email address"
+#~ msgstr "E-mail-adresse"
+
+#~ msgid "I have an account already"
+#~ msgstr "Jeg har allerede en konto"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Jeg vil gerne oprette en konto nu"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Jeg har glemt min adgangskode"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Log automatisk ind næste gang"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Indtast din engangskode til to-faktor-godkendelse."
+
+#~ msgid "PIN"
+#~ msgstr "Pinkode"
+
+#~ msgid "Authenticate"
+#~ msgstr "Godkend"
+
+#~ msgid "_About"
+#~ msgstr "_Om"
+
+#~ msgid "_Quit"
+#~ msgstr "_Afslut"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Information om %s, såvel som muligheder for at hente et codec, der kan "
+#~ "afspille dette format, kan findes på websiden."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Din %s-konto er blevet suspenderet."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Det er ikke muligt at installere software indtil dette er blevet løst."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "For mere information, besøg %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Kunne ikke opdatere %s fra %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Henter nye opdateringer …"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Henter programside …"
+
+#~ msgid "Steam Support"
+#~ msgstr "Understøttelse af Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Den ultimative underholdningsplatform fra Valve"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Programmer er blevet opdateret"
+
+#~ msgid "Includes: ."
+#~ msgstr "Inkluderer: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Genstart og opdaté_r"
+
+#~ msgid "U_pdate All"
+#~ msgstr "O_pdater alle"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Genstart og _installér"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Henter kørselskilder …"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Henter firmwareopdatering …"
+
+#~ msgid "Limba Support"
+#~ msgstr "Understøttelse af Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba giver udviklere en mulighed for at oprette software-pakker på en "
+#~ "enkel måde"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Listen over ekstra kilder, som tidligere er bleveret aktiveret"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Listen over kilder, som tidligere er blevet aktiveret når der blev "
+#~ "installeret tredjepartsprogrammer."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Vis ikke-fri software i søgeresultater"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "En liste over ikke-frie kilder, som kan aktiveres efter eget valg"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Foruddefinerede spiller til spiller-interaktiioner uden chat-"
+#~ "funktionalitet"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Giver adgang til yderligere software, inklusive internetbrowsere og spil."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Aktivér proprietære softwarekilder?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Ingen programmer eller udvidelser installeret; andet software er muligvis"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Har oftest begrænsninger på dets brug og adgangen til kildekoden."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Proprietære softwarekilder"
+
+#~ msgid "Remove Source"
+#~ msgstr "Fjern kilde"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Softwarekilder kan hentes på internettet. De giver dig adgang til "
+#~ "yderligere software, som ikke udbydes af %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Fjernelse af kilder vil også fjerne alle programmer, du har installeret "
+#~ "fra dem."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Ingen software installeret fra denne kilde"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Installeret fra denne kilde"
+
+#~ msgid "Source Details"
+#~ msgstr "Detaljer om kilde"
+
+#~ msgid "Last Checked"
+#~ msgstr "Sidst tjekket"
+
+#~ msgid "Added"
+#~ msgstr "Tilføjet"
+
+#~ msgid "Website"
+#~ msgstr "Webside"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgid "Total"
+#~ msgstr "Samlet"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Kunne ikke finde “%s”"
+
+#~ msgid "_Install All"
+#~ msgstr "_Installér alle"
+
+#~ msgid "Other Updates"
+#~ msgstr "Andre opdateringer"
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Alle"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Anbefalede"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomi"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemi"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematik"
+
+#~ msgid "Science"
+#~ msgstr "Videnskab"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Installation af %s mislykkedes."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Fjernelse af %s mislykkedes."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Kontrollér at du har internetadgang, og prøv igen."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Frigør venligst noget plads og forsøg igen."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Hvis problemet fortsætter, bør du kontakte din softwareudbyder."
+
+#~ msgid " or "
+#~ msgstr " eller "
+
+#~ msgid "3rd party"
+#~ msgstr "3. part"
+
+#~ msgid "web app"
+#~ msgstr "webprogram"
+
+#~ msgid "nonfree"
+#~ msgstr "ikke-fri"
+
+#~ msgid "shell extension"
+#~ msgstr "Shell-udvidelser"
+
+#~ msgid "_Installing"
+#~ msgstr "_Installerer"
+
+#~ msgid "_Removing"
+#~ msgstr "_Fjerner"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Ukendt"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Dette software kommer fra en tredjepart."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Dette software kommer fra en tredjepart og kan indeholde ikke-frie "
+#~ "komponenter."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Dette software kan indeholder ikke-frie komponenter."
+
+#~ msgid "non-free"
+#~ msgstr "ikke-fri"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Anbefalede kontorprogrammer"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Softwarekilder giver dig adgang til mere software."
+
+#~ msgid "One Star"
+#~ msgstr "En stjerne"
+
+#~ msgid "Two Stars"
+#~ msgstr "To stjerner"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tre stjerner"
+
+#~ msgid "Four Stars"
+#~ msgstr "Fire stjerner"
+
+#~ msgid "Five Stars"
+#~ msgstr "Fem stjerner"
+
+#~ msgid "Audio"
+#~ msgstr "Lyd"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Redigering"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Databaser"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Diskbrænding"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham-radio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Musik"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Optagere"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sequencere"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Tunere"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Bygning"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Databaser"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Integreret udviklingsmiljø (IDE)"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilering"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Projekthåndtering"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Oversættelse"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Webudvikling"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Computervidenskab"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Konstruktion"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Datavisualisering"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Økonomi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektricitet"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Ingeniørvidenskab"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geovidenskab"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Historie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humaniora"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Billedbehandling"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Litteratur"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Kort"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Musik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerisk analyse"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallel beregning"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fysik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitet"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Skydespil"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulering"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafik"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D-grafik"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publicering"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rastergrafik"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Opkaldsforbindelse"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Kilde (Feed)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Filoverførsel"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham-radio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Instant messaging"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC-klienter"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Overvågning"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Fjernadgang"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefoni"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Webudvikling"
+
+#~ msgid "Office"
+#~ msgstr "Kontor"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Kontakthåndtering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Ordbog"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Rutediagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografi"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Præsentation"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projekthåndtering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publicering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Regneark"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Fremviser"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Kunst"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Kunstig intelligens"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Computervidenskab"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Konstruktion"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Datavisualisering"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Økonomi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektricitet"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Ingeniørvidenskab"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geovidenskab"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Historie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humaniora"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Billedbehandling"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Sprog"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Litteratur"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Kort"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicinsk"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerisk analyse"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallel beregning"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fysik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotteknologi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitet"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Filhåndtering"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Filværktøjer"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Overvågning"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Sikkerhed"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Teminalemulator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Tilgængelighed"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arkivering"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Lommeregner"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Ur"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Komprimering"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Filværktøjer"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Kort"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitet"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefoniværktøjer"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Redigering"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Database"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Diskbrænding"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Afspillere"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Optagere"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Beregner …"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Ukendt"
+
+#~ msgid "_History"
+#~ msgstr "_Historik"
+
+#~ msgid "Size"
+#~ msgstr "Størrelse"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Ingen AppStream-data fundet"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "En tidligere opdatering blev ikke færdiggjort."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Opdateringen kunne ikke installeres. Dette er ofte et problem med "
+#~ "opdateringen i sig selv. Vent på en anden opdatering og prøv igen."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Kun internetprogrammer"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Indtast tjenestetilstand for GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "En opdatering blev ikke underskrevet korrekt."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Opdateringen kunne ikke fuldføres."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "En offline-opdatering blev forespurgt, men ingen pakker krævede "
+#~ "opdatering."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Der var ingen resterende plads på drevet."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "En opdatering kunne ikke installeres korrekt."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "En offline-opdatering mislykkedes på uventet vis."
+
+#~ msgid "No sources found."
+#~ msgstr "Ingen kilder fundet."
+
+#~ msgid "OK"
+#~ msgstr "O.k."
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i program og %i tilføjelser installeret"
+#~ msgstr[1] "%i programmer og %i tilføjelser installeret"
+
+#~ msgid "Picks"
+#~ msgstr "Udvalgte"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "30. januar 2014"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Angiv fejlsøgningsniveau"
+
+#~ msgid "_Pending"
+#~ msgstr "_Venter"
+
+#~ msgid "Complicated!"
+#~ msgstr "Indviklet!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Nylige softwareopdateringer"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "Databaser"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham-radio"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "Webudvikling"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "Filværktøjer"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "Kort"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitet"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "Skrifttyper"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "Codec"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "Input-kilder"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "Sprogpakker"
+
+#~ msgid "Done"
+#~ msgstr "Færdig"
+
+#~ msgctxt "Menu subcategory of Settings"
+#~ msgid "Accessibility"
+#~ msgstr "Tilgængelighed"
+
+#~ msgctxt "Menu subcategory of Settings"
+#~ msgid "Printing"
+#~ msgstr "Udskrivning"
+
+#~ msgctxt "Menu subcategory of Settings"
+#~ msgid "Security"
+#~ msgstr "Sikkerhed"
+
+#~ msgid "New"
+#~ msgstr "Nye"
+
+#~ msgid "Popular"
+#~ msgstr "Populære"
+
+#~ msgid "Waiting for package manager..."
+#~ msgstr "Venter på pakkehåndteringen …"
+
+#~ msgid "Querying..."
+#~ msgstr "Forespørger …"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..8840c42
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,4850 @@
+# German translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+#
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2013, 2016-2018, 2020.
+# Alexander Wilms <f.alexander.wilms _at_ gmail.com>, 2013.
+# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2015, 2017.
+# Bernd Homuth <dev@hmt.im>, 2015.
+# Christian Kirbach <christian.kirbach@gmail.com>, 2015.
+# Wolfgang Stöggl <c72578@yahoo.de>, 2016-2017, 2020.
+# Tim Sabsch <tim@sabsch.com>, 2017-2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-09-06 19:15+0200\n"
+"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
+"Language-Team: Deutsch <gnome-de@gnome.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 20.08.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Anwendungsverwaltung für GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software ermöglicht es Ihnen, neue Anwendungen und Systemerweiterungen zu "
+"finden und zu installieren sowie bereits installierte Anwendungen zu "
+"entfernen."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software präsentiert vorgestellte und beliebte Anwendungen mit "
+"nützlichen Beschreibungen und mehreren Bildschirmfotos je Anwendung. "
+"Anwendungen können entweder durch Stöbern in den verschiedenen Kategorien "
+"oder mithilfe der Suchfunktion gefunden werden. Zudem ermöglicht es Ihnen, "
+"Ihr System mittels einer Offline-Aktualisierung auf den neuesten Stand zu "
+"bringen."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Übersichtsseite"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Seite mit Details"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Seite der Installationen"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Seite mit Aktualisierungen"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Details zur Aktualisierung"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Das GNOME-Projekt"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Eine Appstream-Datei im System installieren"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Eine Appstream-Datei wird im System installiert"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Eine Liste kompatibler Projekte"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Hier ist eine Liste kompatibler Projekte, die wir anzeigen sollten, z.B. "
+"GNOME, KDE und XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Legt fest, ob Aktualisierungen und Systemaktualisierungen von GNOME-Software "
+"verwaltet werden sollen"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Wenn deaktiviert, wird GNOME Software das Aktualisierungsfeld nicht "
+"anzeigen, keine automatischen Aktualisierungen durchführen und keine "
+"Systemaktualisierungen vorschlagen."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Aktualisierungen automatisch herunterladen und installieren"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Wenn aktiviert, wird GNOME Software Aktualisierungen automatisch und im "
+"Hintergrund herunterladen und diejenigen installieren, die keinen Neustart "
+"erfordern."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"Den Benutzer über Software benachrichtigen, die im Hintergrund aktualisiert "
+"wird"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Wenn aktiviert, wird GNOME Software den Benutzer über Aktualisierungen "
+"benachrichtigen, die durchgeführt wurden, während er inaktiv war."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Legt fest, ob automatisch aktualisiert werden soll, wenn die "
+"Internetverbindung des Rechners volumenbasiert abgerechnet wird"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Wenn aktiviert, wird GNOME Software automatisch im Hintergrund aktualisiert, "
+"auch wenn die Internetverbindung des Rechners volumenbasiert abgerechnet "
+"wird. Dabei können Metadaten, Aktualisierungsinformationen, usw. "
+"heruntergeladen werden, was Kosten für den Nutzer verursachen kann."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Legt fest, ob es die erste Ausführung von GNOME-Software ist"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Sternchenbewertungen neben den Anwendungen anzeigen"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtern der Anwendungen in Abhängigkeit vom festgelegten Standard-Branch der "
+"entfernten Quelle"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Unfreie Anwendungen zeigen einen Warnhinweis, bevor sie installiert werden "
+"können"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Wenn unfreie Anwendungen installiert werden, kann dieser Dialog angezeigt "
+"werden. Diese Einstellung legt fest, ob die Meldung unterdrückt werden soll."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Eine Liste beliebter Anwendungen"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Eine Liste von Anwendungen, die verwendet werden sollen; überschreibt die "
+"Systemeinstellungen."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Zeitstempel der letzten Aktualisierungsanfrage"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Zeitstempel der Benachrichtigung zur letzten Systemaktualisierung"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Der Zeitstempel der ersten Sicherheitsaktualisierung, wird entfernt nach "
+"einer Aktualisierung"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Zeitstempel der letzten Aktualisierung"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Der letzte Zeitstempel, an dem das System online war und Aktualisierungen "
+"erhalten hat"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Das Alter in Sekunden, bis zu dem ein Bildschirmfoto des Upstream-Projekts "
+"noch als aktuell angesehen wird"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Die Wahl eines größeren Werts verursacht weniger Datenaustausch mit dem "
+"entfernten Server, aber Aktualisierungen der Bildschirmfotos benötigen mehr "
+"Zeit, bis sie angezeigt werden. Ein Wert von 0 bedeutet, dass der Server "
+"niemals abgefragt wird, wenn das Bild bereits im Zwischenspeicher vorhanden "
+"ist."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Server zur Verwendung von Anwendungsrezensionen"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Mindest-Karma-Punktestand für Rezensionen"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+"Rezensionen mit einem Karma unterhalb der angegebenen Punktezahl werden "
+"nicht angezeigt."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Eine Liste von offiziellen Softwarequellen, die nicht als Drittanbieter "
+"angesehen werden sollten"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Eine Liste von offiziellen Softwarequellen, die als freie Software gelten "
+"sollen"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Die Adresse der genutzten Lizenz für den Fall, dass die Software als frei "
+"angesehen werden kann"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Mitgelieferte Anwendungen für alle Benutzer auf dem System installieren, "
+"sofern möglich"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Zugriff auf den Softwarequellen-Dialog erlauben"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Systemaktualisierungen für Vorab-Veröffentlichungen anbieten"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Elemente der grafischen Oberfläche anzeigen, die den Benutzer auf den "
+"unfreien Status einer Anwendung hinweisen"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Abfrage anzeigen, ob unfreie Softwarequellen eingerichtet werden sollen"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Zeigen der installierten Größe in der Liste installierter Anwendungen"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://de.wikipedia.org/wiki/Proprietäre_Software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Adresse, die unfreie und proprietäre Software erklärt"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Eine Liste von Adressen von Appstream-Dateien, die in einen app-info-Ordner "
+"heruntergeladen werden"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Eine Appstream-Datei im System für alle Benutzer installieren"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Softwarequelle für GNOME Shell-Erweiterungen aktivieren"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Eine Zeichenkette, die die Kennung gnome-online-account zur Anmeldung "
+"speichert"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Software-Installation"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Gewählte Software auf dem System installieren"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Alle auswählen"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Nichts auswählen"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Softwarequellen"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "A_ktualisierungs-Einstellungen"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Zurück gehen"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Erkunden"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installiert"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "A_ktualisierungen"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Suchen"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Quelle"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Softwarequellen"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Datenträger untersuchen"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Netzwerkeinstellungen"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Jetzt neustarten"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Weitere Informationen"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatische Aktualisierungen pausiert"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Mehr _herausfinden"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokale Datei"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Ausstehend"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installiert"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installieren"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Entfernen"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Startmodus: entweder »updates« (Aktualisierungen), »updated« (aktualisiert), "
+"»installed« (installiert) oder »overview« (Übersicht)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODUS"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Nach Anwendungen suchen"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SUCHE"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Details zur Anwendung zeigen (mit der Kennung der Anwendung)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "Kennung"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Details zur Anwendung zeigen (mit Hilfe des Paketnamens)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PAKETNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Anwendung installieren (mit der Kennung der Anwendung)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Ein lokales Paket öffnen"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "DATEINAME"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Die erwartete Interaktion für diese Aktion. Entweder »none« (keine), "
+"»notify« (benachrichtigen) oder »full« (vollständig)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Ausführliche Informationen zur Fehlerdiagnose anzeigen"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installiert ausstehende Aktualisierungen im Hintergrund"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Einstellungen zu Aktualisierungen anzeigen"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Die laufende Instanz beenden"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Lokale Quelldateien dem AppStream vorziehen"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Versionsnummer anzeigen"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Eduard Gotwig <gotwig@ubuntu.com>, 2013\n"
+"Christian Kirbach <christian.kirbach@gmail.com>, 2013, 2019\n"
+"Benjamin Steinwender <b@stbe.at>, 2014\n"
+"Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2015, 2017\n"
+"Bernd Homuth <dev@hmt.im>, 2015, 2016, 2019\n"
+"Christian Kirbach <christian.kirbach@gmail.com>, 2015\n"
+"J.M. Ruetter <jm@jublo.net>, 2015\n"
+"Mario Blättermann <mario.blaettermann@gmail.com>, 2016, 2018\n"
+"Tim Sabsch <tim@sabsch.com>, 2019"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+#| msgid "Software"
+msgid "About Software"
+msgstr "Info zu Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Ein einfacher Weg, um Software auf Ihrem System zu verwalten."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Tut uns leid! Für diese Anwendung gibt es keine Details."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Internetseite besuchen"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installieren …"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installieren"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Aktualisieren"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Entfernen"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Gerät kann während der Aktualisierung nicht verwendet werden."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Benötigt zusätzliche Berechtigungen"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Anmeldung auf %s erforderlich (Realm %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Anmeldung erforderlich"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Abbrechen"
+
+#: src/gs-basic-auth-dialog.ui:39
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "Anmel_den"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Ben_utzer"
+
+#: src/gs-basic-auth-dialog.ui:119
+#| msgid "Password"
+msgid "_Password"
+msgstr "_Passwort"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Andere"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Alle"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Vorstellung von %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Bewertung"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Name"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Anzeige von"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Filtermenü für Unterkategorien"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sortierung nach"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Sortiermenü für Unterkategorien"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Bitte geben Sie eine Zahl von 1 bis %u ein: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Wählen Sie eine Anwendung:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Betriebssystemaktualisierungen sind jetzt installiert"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Kürzlich installierte Aktualisierungen stehen für Bewertungen zur Verfügung"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s ist jetzt installiert"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Ein Neustart ist erforderlich, damit die Änderungen wirksam werden."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Anwendung steht zur Nutzung bereit."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Neustart"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Starten"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Soll die Software von Drittanbietern installiert werden?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Soll die Softwarequelle von Drittanbietern aktiviert werden?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s ist nicht <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">freie und quelloffene Software</a> und wird durch »%s« "
+"bereitgestellt."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s wird durch »%s« zur Verfügung gestellt."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Diese Softwarequelle muss aktiviert werden, um mit der Installation "
+"fortzufahren."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"In manchen Ländern ist es möglicherweise illegal, %s zu installieren oder zu "
+"benutzen."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"In manchen Ländern ist es möglicherweise illegal, diesen Codec zu "
+"installieren oder zu benutzen."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Nicht erneut warnen"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Aktivieren und installieren"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+"Siehe nachfolgend die detaillierten Fehlermeldungen von der Paketverwaltung:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Details"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Eine Aktualisierung wurde installiert"
+msgstr[1] "Aktualisierungen wurden installiert"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Ein Neustart ist erforderlich, damit die Änderung wirksam wird."
+msgstr[1] "Ein Neustart ist erforderlich, damit die Änderungen wirksam werden."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Jetzt nicht"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Keine Gewalt in Cartoons"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Animationsfiguren in unsicheren Situationen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Animationsfiguren in aggressivem Konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafische Gewaltdarstellung durch Animationsfiguren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Keine Gewalt in Fantasy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Figuren in unsicheren Situationen, die einfach von der Realität zu "
+"unterscheiden sind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Figuren in aggressiven Konflikten, die einfach von der Realität zu "
+"unterscheiden sind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Graphische Gewalt, die realitätsfremd ist"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Keine realistische Gewalt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Harmlose realistische Figuren in unsicheren Situationen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+"Darstellung von realistischen Charakteren, die im aggressiven Konflikt "
+"zueinander stehen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Graphische Gewalt von realistischen Charakteren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Kein Blutvergießen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Unrealistisches Blutvergießen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistisches Blutvergießen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Darstellung von Blutvergießen und Verstümmeln von Körperteilen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Keine sexuelle Gewalt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Vergewaltigung oder andere gewaltsame Sexualhandlungen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Keine Erwähnung alkoholischer Getränke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Bezug auf alkoholische Getränke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Genuss von alkoholischen Getränken"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Keine Erwähnung unerlaubter Drogen/Medikamente"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Erwähnung unerlaubter Drogen/Medikamente"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Konsum von unerlaubten Drogen/Medikamenten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Kein Bezug auf Tabakprodukte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Bezug auf Tabakprodukte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Genuss von Tabakprodukten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Keine Nacktszenen irgendeiner Form"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Kurzzeitige, künstlerische Darbietung von Nacktszenen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Ausgiebige Nacktszenen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Keine Anspielungen oder Darstellungen sexueller Natur"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokative Anspielungen oder Darstellungen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Sexuelle Anspielungen oder Darstellungen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Graphische Sexualhandlungen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Keine Obszönität irgendeiner Art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Geringe oder seltene Obszönität"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Gemäßigte Obszönität"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Starke oder häufige Obszönität"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Kein unangemessener Humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstick-Humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgärer oder Kneipenstammtischhumor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Nicht jugendfreier oder sexueller Humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Keine diskriminierende Sprache irgendeiner Art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Abwertende Äußerungen gegenüber spezifischen Gruppierungen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminierung mit dem Ziel der emotionellen Kränkung"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Explizite Diskriminierung von Geschlecht, Sexualität, Rasse oder Religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Keine Werbung irgendeiner Art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Produktplatzierung"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Explizite Anspielungen auf bestimmte Marken oder Handelsprodukte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Benutzer werden ermuntert, bestimmte reale Objekte zu erwerben"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Kein Glücksspiel irgendeiner Art"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Glücksspiele mit Jetons oder Guthaben"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Glücksspiel mit Spielgeld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Glücksspiel mit echtem Geld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Keine Möglichkeit, reales Geld auszugeben"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Benutzer werden ermuntert, echtes Geld zu spenden"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Möglichkeit, reales Geld in Anwendungen auszugeben"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Keine Möglichkeit zum Chat mit anderen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Zwei-Teilnehmer-Interaktionen ohne Chat-Funktion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderierte Chat-Funktion zwischen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nicht kontrollierte Chat-Funktion zwischen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Keine Möglichkeit zum Gespräch mit anderen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nicht kontrollierte Audio- oder Video-Chat-Funktion zwischen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Kein Teilen von Benutzernamen in sozialen Netzwerken oder E-Mail-Adressen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Teilen von Benutzernamen in sozialen Netzwerken oder E-Mail-Adressen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Kein Teilen von Benutzerinformationen mit Dritten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Suchen nach der neuesten Anwendungsversion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Teilen von Diagnosedaten, die eine Identifizierung des Benutzers durch "
+"andere nicht ermöglichen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Teilen von Informationen, die eine Identifizierung des Benutzers durch "
+"andere ermöglichen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Kein Teilen des physischen Aufenthaltsortes mit anderen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Teilen des physischen Aufenthaltsortes mit anderen Benutzern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Keine Erwähnung von Homosexualität"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Indirekte Erwähnung von Homosexualität"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Küssen von Personen desselben Geschlechts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafisches Sexualverhalten von Personen desselben Geschlechts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Keine Erwähnung von Prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Indirekte Erwähnung von Prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Direkte Erwähnung von Prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafische Darstellungen des Akts der Prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Keine Erwähnung von Ehebruch"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Indirekte Erwähnung von Ehebruch"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Direkte Erwähnung von Ehebruch"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafische Darstellungen des Akts des Ehebruchs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Keine sexualisierten Charaktere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Leicht bekleidete menschliche Charaktere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Offen sexualisierte menschliche Charaktere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Keine Erwähnung von Schändung"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Darstellungen oder Erwähnungen von historischer Schändung"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Darstellungen von moderner menschlicher Schändung"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafische Darstellungen von moderner Schändung"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Keine sichtbaren menschlichen Überreste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Sichtbare menschliche Überreste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Menschliche Überreste, die der Natur ausgesetzt sind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafische Darstellungen von Schändung menschlicher Körper"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Keine Erwähnung von Sklaverei"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Darstellungen oder Erwähnungen von historischer Sklaverei"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Darstellungen oder Erwähnungen von moderner Sklaverei"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafische Darstellungen von moderner Sklaverei"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Allgemein"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ALLE"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Nur Erwachsene"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Erwachsen"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Jugendliche"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Alle ab 10 Jahren"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Alle"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Frühe Kindheit"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Eine Anwendung"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s verlangt Unterstützung für zusätzliche Dateiformate."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Es werden zusätzliche MIME-Typen benötigt"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s benötigt zusätzliche Schriftarten."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Zusätzliche Schriftarten werden benötigt"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s benötigt zusätzliche Multimedia-Codecs."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Zusätzliche Multimedia-Codecs werden benötigt"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s benötigt zusätzliche Druckertreiber."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Zusätzliche Druckertreiber werden benötigt"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s benötigt zusätzliche Pakete."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Zusätzliche Pakete werden benötigt"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Software suchen"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Wird entfernt …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Ausstehende Installation …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Ausstehende Aktualisierung …"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "Wird vorbereitet …"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Diese Anwendung kann nur bei bestehender Internetverbindung verwendet werden."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installieren"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installieren …"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Starten"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Entfernen"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Netzwerk"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Darf über das Netzwerk kommunizieren"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Systemdienste"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Über den System-Bus kann auf D-Bus-Dienste zugegriffen werden"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Sitzungsdienste"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Über den Sitzungs-Bus kann auf D-Bus-Dienste zugegriffen werden"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Geräte"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Darf auf Systemdateien zugreifen"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Persönlicher Ordner"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Darf Dateien lesen, bearbeiten und erstellen"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Darf Dateien lesen"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Dateisystem"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Download-Ordner"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Darf alle Einstellungen sehen und verändern"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Veraltetes Anzeigesystem"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Verwendet ein veraltetes, unsicheres Anzeigesystem"
+
+# https://encyclopedia.kaspersky.com/glossary/sandbox-escape/
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Sandbox-Ausbruch"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Kann aus der Sandbox ausbrechen und andere Beschränkungen umgehen"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr ""
+"Diese Anwendung läuft vollständig in einer isolierten Umgebung (Sandbox)."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Es ist nicht möglich festzustellen, auf welche Teile des Systems diese "
+"Anwendung zugreift. Das ist typisch für ältere Anwendungen."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nie"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Niedrig"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Mittel"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Hoch"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Unbekannte"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr ""
+"Sie brauchen eine Verbindung mit dem Internet, um eine Bewertung abgeben zu "
+"können"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "»%s« konnte nicht gefunden werden"
+
+# Gemeinfrei versteht kein Mensch
+# Schon möglich, aber es wird im nächsten String per Wikipedia-Link erklärt -mb
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Gemeinfrei"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://de.wikipedia.org/wiki/Gemeinfreiheit"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.de"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Freie Software"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Benutzer sind an die folgende Lizenz gebunden:"
+msgstr[1] "Benutzer sind an die folgenden Lizenzen gebunden:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Weitere Informationen"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Seite mit Details"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Wird heruntergeladen"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Akt_ualisieren"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Tastenkombination _hinzufügen"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Tastenkombination _entfernen"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Kein Bildschirmfoto verfügbar"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Softwarequelle eingeschlossen"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Diese Anwendung enthält eine Softwarequelle, die sowohl Aktualisierungen als "
+"auch Zugriff auf weitere Software anbietet."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Keine Softwarequelle eingeschlossen"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Diese Anwendung enthält keine Softwarequelle. Sie wird nicht mit neuen "
+"Versionen aktualisiert."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Diese Software wird bereits von Ihrer Distribution angeboten und sollte "
+"nicht ersetzt werden."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Softwarequelle identifiziert"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Hinzufügen dieser Softwarequelle gewährt Ihnen Zugriff auf zusätzliche "
+"Software und Systemaktualisierungen."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Verwenden Sie nur Softwarequellen, denen Sie vertrauen."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Internetseite"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "Spen_den"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "In Ihre Sprache übersetzt"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentation"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Veröffentlichungsaktivität"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "System-Einbindung"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Isoliert (Sandbox)"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Altersfreigabe"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Berechtigungen"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Aktualisiert"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Installierte Größe"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Heruntergeladene Größe"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Entwickler"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lizenz"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Frei"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietär"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Erweiterungen"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Die gewählten Erweiterungen werden mit der Anwendung installiert."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Rezensionen"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Eine _Rezension schreiben"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mehr anzeigen"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Dies bedeutet, dass die Software frei eingesetzt, kopiert, weitergegeben, "
+"inspiziert und verändert werden darf."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Proprietäre Software"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Dies bedeutet, dass die Softwarerechte in den Händen einer Person oder eines "
+"Unternehmens liegen. Die Nutzung ist oftmals beschränkt und der Quellcode "
+"ist normalerweise nicht zugänglich."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Unbekannte Softwarelizenz"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Die Lizenzbestimmungen dieser Software sind unbekannt."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Die Anwendung wurde so eingestuft, weil sie folgendes enthält:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Für diese Freigabe sind keine Details verfügbar."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " und "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Verfügbare Schriften für das %s-Schriftsystem"
+msgstr[1] "Verfügbare Schriften für die %s-Schriftsysteme"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Verfügbare Software für %s"
+msgstr[1] "Verfügbare Software für %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Die angeforderte Software kann nicht gefunden werden"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s wurde nicht gefunden"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "auf der Internetseite"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+"Es sind keine Anwendungen verfügbar, welche die Datei %s bereitstellen."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informationen über %s sowie Möglichkeiten, fehlende Anwendungen zu erhalten, "
+"finden Sie %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Es sind keine Anwendungen für %s-Unterstützung verfügbar."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s ist nicht verfügbar."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informationen über %s sowie Möglichkeiten, eine Anwendung zu finden, die "
+"dieses Format wiedergeben kann, finden Sie %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+"Es sind keine Schriftarten für die Unterstützung des %s-Schriftsystems "
+"verfügbar."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informationen über %s sowie Möglichkeiten, zusätzliche Schriften zu "
+"erhalten, finden Sie %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Es sind keine zusätzlichen Codecs für das Format %s verfügbar."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informationen über %s sowie Möglichkeiten, einen Codec zu erhalten, der "
+"dieses Format wiedergeben kann, finden Sie %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+"Es sind keine Plasma-Ressourcen für die Unterstützung von %s verfügbar."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informationen über %s sowie Möglichkeiten, zusätzliche Plasma-Ressourcen zu "
+"erhalten, finden Sie %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Es sind keine Druckertreiber für %s verfügbar."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informationen über %s sowie Möglichkeiten, einen Treiber zu erhalten, der "
+"diesen Drucker unterstützt, finden Sie %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "diese Internetseite"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "%s wurde nicht gefunden. Besuchen Sie %s für weitere Informationen."
+msgstr[1] ""
+"%s wurden nicht gefunden. Besuchen Sie %s für weitere Informationen."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Es gab keine Suchtreffer"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s-Dateiformat"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Seite mit Codecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Willkommen"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Willkommen zu GNOME-Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software ermöglicht es Ihnen, gewünschte Software zu installieren. Schauen "
+"Sie sich unsere Empfehlungen an, durchsuchen Sie Kategorien und suchen Sie "
+"nach gewünschten Anwendungen."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Gehen wir einkaufen"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Entfernt"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installiert"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Aktualisiert"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%d.%B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Verlauf"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systemanwendungen"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Installierte Seite"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Software-Katalog wird heruntergeladen"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Seite wird geladen"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Starten …"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Die aktuelle Netzwerkverbindung ist getaktet. Getaktete Verbindungen "
+"besitzen ein beschränktes Datenvolumen oder damit verbundene Kosten. Um das "
+"Datenvolumen zu reduzieren, wurden automatische Aktualisierungen daher "
+"pausiert.\n"
+"\n"
+"Automatische Aktualisierungen werden fortgesetzt, sobald eine nicht-"
+"getaktete Verbindung vorhanden ist. Bis dahin können Sie Aktualisierungen "
+"weiterhin manuell installieren.\n"
+"\n"
+"Sollte die aktuelle Netzwerkverbindung fälschlicherweise als getaktet "
+"identifiziert worden sein, können Sie diese Einstellung ändern."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "_Netzwerkeinstellungen öffnen"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderationsseite"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Es stehen keine Rezensionen zur Moderation zur Verfügung"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "System"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "Benutzer"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Zweig"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Adresse"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installation"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Weitere …"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Empfohlene Audio- und Video-Anwendungen"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Empfohlene Spiele"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Empfohlene Grafik-Anwendungen"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Empfohlene Anwendungen zur Produktivität"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Zugriff auf zusätzliche Software von ausgewählten Drittanbieter-"
+"Softwarequellen."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Ein Teil dieser Software ist proprietär und unterliegt deshalb "
+"Einschränkungen bezüglich Verwendung, Weitergabe und Zugriff auf den "
+"Quellcode."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Mehr herausfinden …"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Aktivieren"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Übersichtsseite"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Sollen Softwarequellen von Drittanbietern aktiviert werden?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Vorherige"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Nächste"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Unsere Empfehlungen"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Letzte Veröffentlichungen"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorien"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Keine Anwendungsdaten gefunden"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s vorbereiten"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Soll die Quelle %s wirklich entfernt werden?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Alle Anwendungen von %s werden entfernt. Sie müssen die Quellen erneut "
+"installieren, um diese wieder nutzen zu können."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Soll %s wirklich entfernt werden?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s wird entfernt und muss erneut installiert werden, um genutzt werden zu "
+"können."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (installiert)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Aktualisierungs-Einstellungen"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatische Aktualisierungen"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatische Aktualisierungen sind bei einer mobilen oder volumenbasierten "
+"Internetverbindung deaktiviert."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Benachrichtigungen bei automatischen Aktualisierungen"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Benachrichtigungen anzeigen, wenn Aktualisierungen automatisch installiert "
+"wurden."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Einige der aktuell installierten Software ist nicht mit %s kompatibel. Wenn "
+"Sie fortfahren, wird die folgende automatisch während der "
+"Systemaktualisierung entfernt:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Nicht kompatible Software"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Fortfahren"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u Anwendung installiert"
+msgstr[1] "%u Anwendungen installiert"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u Erweiterung installiert"
+msgstr[1] "%u Erweiterungen installiert"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u Anwendung"
+msgstr[1] "%u Anwendungen"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u Erweiterung"
+msgstr[1] "%u Erweiterungen"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s und %s wurde installiert"
+msgstr[1] "%s und %s wurden installiert"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "»%s« entfernen?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "»%s« deaktivieren?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Software, die aus diesem Quelle installiert wurde, wird nicht länger "
+"Aktualisierungen erhalten, Sicherheitsupdates eingeschlossen."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Deaktivieren"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "das Betriebssystem"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Diese Softwarequelle ergänzt die von %s gelieferte, voreingestellte Software."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Drittanbieter-Softwarequellen"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Keine zusätzlichen Softwarequellen"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Aktivieren"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Entfernen …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Deaktivieren …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Wird aktiviert"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Wird deaktiviert"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Aktiviert"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Finde ich furchtbar"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Mag ich nicht"
+
+# Sagt in den Kommentaren "fairly good". Das bedeutet sowas wie "ziemlich gut". Ja, das ist anders als "it's OK", aber ich gehe nach dem Kommentar
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Ziemlich gut"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Mag ich"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Finde ich perfekt"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Nehmen Sie sich bitte etwas mehr Zeit zum Schreiben der Rezension"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Wählen Sie eine Sternchenbewertung"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Die Zusammenfassung ist zu kurz"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Die Zusammenfassung ist zu lang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Die Beschreibung ist zu kurz"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Die Beschreibung ist zu lang"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Rezension abschicken"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Veröffentlichen"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Zusammenfassung"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Geben Sie eine kurze Zusammenfassung für Ihre Rezension, z.B. »Großartiges "
+"Programm, klare Empfehlung«."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Rezension"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Was halten Sie von dieser Anwendung? Versuchen Sie Ihre Meinung zu begründen."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Informationen zum Umgang mit Ihren Daten finden Sie in unseren <a href="
+"\"https://odrs.gnome.org/privacy\">Datenschutzbestimmungen</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "Gesamtzahl der Rezensionen"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Sie können Rezensionen wegen abfälligem Verhalten, Diskriminierung oder "
+"Missbrauch melden."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Sobald eine Rezension gemeldet wurde, wird sie solange verdeckt bleiben, bis "
+"sie von einem Administrator geprüft worden ist."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Rezension melden?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Melden"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "War diese Rezension hilfreich für Sie?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nein"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Hm"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Melden …"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Entfernen …"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Bildschirmfoto nicht gefunden"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Bild konnte nicht geladen werden"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Bildschirmfotogröße nicht gefunden"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Zwischenspeicher konnte nicht erstellt werden"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Bildschirmfoto nicht gültig"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Bildschirmfoto nicht verfügbar"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Bildschirmfoto"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u weiterer Treffer"
+msgstr[1] "%u weitere Treffer"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Suchseite"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Keine Anwendung gefunden"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "»%s«"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Fehler beim Herunterladen von Firmware-Aktualisierungen von %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Herunterladen von Aktualisierungen von %s nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Herunterladen von Aktualisierungen nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Herunterladen von Aktualisierungen nicht möglich: Internet-Zugriff war "
+"erforderlich, jedoch nicht verfügbar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Herunterladen von Aktualisierungen von %s nicht möglich: Nicht genug freier "
+"Speicherplatz verfügbar"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Herunterladen von Aktualisierungen nicht möglich: Es war nicht genug freier "
+"Speicherplatz vorhanden"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+"Herunterladen von Aktualisierungen nicht möglich: Anmeldedaten werden zur "
+"Legitimierung benötigt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+"Herunterladen von Aktualisierungen nicht möglich: Legitimierung war nicht "
+"erfolgreich"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Herunterladen von Aktualisierungen nicht möglich: Keine ausreichenden "
+"Benutzerrechte, um Anwendungen zu installieren"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Aktualisierungsliste konnte nicht aktualisiert werden"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Installation von %s nicht möglich, weil das Herunterladen von %s fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Installation von %s nicht möglich, weil das Herunterladen fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Installation von %s nicht möglich, weil die Laufzeit %s nicht verfügbar ist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Installation von %s nicht möglich, weil es nicht unterstützt wird"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Installation fehlgeschlagen: Internet-Zugriff war erforderlich, jedoch nicht "
+"verfügbar"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Installation nicht möglich: Die Anwendung hat ein ungültiges Format"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+"Installation von %s fehlgeschlagen: Es war nicht genug freier Speicherplatz "
+"vorhanden"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Installation von %s nicht möglich: Legitimierung notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Installation von %s nicht möglich: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Installation von %s nicht möglich: Keine ausreichenden Benutzerrechte, um "
+"Anwendungen zu installieren"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Installation von %s nicht möglich: Netzanschluss notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Installation von %s nicht möglich: Akkustand zu niedrig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Installation von %s nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Aktualisierung von %s aus %s nicht möglich, weil das Herunterladen fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Aktualisierung von %s nicht möglich, weil das Herunterladen fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Installation der Aktualisierungen von %s nicht möglich, weil das "
+"Herunterladen fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"Installation von Aktualisierungen nicht möglich, weil das Herunterladen "
+"fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Aktualisierung fehlgeschlagen: Internet-Zugriff war erforderlich, jedoch "
+"nicht verfügbar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+"Aktualisierung von %s fehlgeschlagen: Es ist nicht genug freier "
+"Speicherplatz vorhanden"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Installation von Aktualisierungen fehlgeschlagen: Es ist nicht genug freier "
+"Speicherplatz vorhanden"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Aktualisierung von %s nicht möglich: Legitimierung notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+"Installation von Aktualisierungen nicht möglich: Legitimierung notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Aktualisierung von %s nicht möglich: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Installation von Aktualisierungen nicht möglich: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Aktualisierung von %s nicht möglich: Keine ausreichenden Benutzerrechte, um "
+"Aktualisierungen zu installieren"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Installation von Aktualisierungen nicht möglich: Keine ausreichenden "
+"Benutzerrechte, um Aktualisierungen zu installieren"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Aktualisierung von %s nicht möglich: Netzanschluss notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Installation von Aktualisierungen nicht möglich: Netzanschluss notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Aktualisierung von %s nicht möglich: Akkustand zu niedrig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Installation von Aktualisierungen nicht möglich: Akkustand zu niedrig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Aktualisierung von %s fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Installation von Aktualisierungen nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Systemaktualisierung von %s auf %s nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+"Systemaktualisierung auf %s nicht möglich, weil das Herunterladen fehlschlug"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Systemaktualisierung auf %s fehlgeschlagen: Internet-Zugriff war "
+"erforderlich, jedoch nicht verfügbar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+"Systemaktualisierung auf %s fehlgeschlagen: Es war nicht genug freier "
+"Speicherplatz vorhanden"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Systemaktualisierung auf %s nicht möglich: Legitimierung notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+"Systemaktualisierung auf %s nicht möglich: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Systemaktualisierung auf %s nicht möglich: Keine ausreichenden "
+"Benutzerrechte zur Systemaktualisierung"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Systemaktualisierung auf %s nicht möglich: Netzanschluss notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Systemaktualisierung auf %s nicht möglich: Akkustand zu niedrig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Systemaktualisierung auf %s nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Entfernen von %s nicht möglich: Legitimierung notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Entfernen von %s nicht möglich: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Entfernen von %s nicht möglich: Keine ausreichenden Benutzerrechte, um "
+"Anwendungen zu entfernen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Entfernen von %s nicht möglich: Netzanschluss notwendig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Entfernen von %s nicht möglich: Akkustand zu niedrig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Entfernen von %s nicht möglich"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Starten von %s fehlgeschlagen: %s ist nicht installiert"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Es ist nicht genug freier Speicher vorhanden. Bitte schaffen Sie ein "
+"bisschen Platz und versuchen Sie es anschließend erneut"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Hoppla! Etwas ist schief gegangen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Installation der Datei schlug fehl: nicht unterstützt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Installation der Datei schlug fehl: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Installation schlug fehl: nicht unterstützt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Installation schlug fehl: Legitimierung fehlgeschlagen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s kann nicht kontaktiert werden"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s muss zur Einbindung der Erweiterungen neu gestartet werden."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Diese Anwendung muss neu gestartet werden, damit die neuen Erweiterungen "
+"benutzt werden können."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Netzanschluss benötigt"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Der Akkustand ist zu niedrig"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Quelle: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (wird installiert)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (wird entfernt)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Alle entfe_rnen"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Es stehen keine Details zur Aktualisierung bereit."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installiert am %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Installierte Aktualisierungen"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Hinzufügungen"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Entfernungen"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Aktualisierungen"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Herunterstufungen"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Auf diesem System wurden keine Aktualisierungen installiert."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Sicherheitsaktualisierungen stehen aus"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr ""
+"Es wird empfohlen, dass Sie wichtige Aktualisierungen sofort installieren"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Neu starten und installieren"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Software-Aktualisierungen sind verfügbar"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Wichtige Betriebssystemaktualisierungen und Anwendungsaktualisierungen "
+"stehen zur Installation bereit"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Ansehen"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Anwendung aktualisiert – Neustart erforderlich"
+msgstr[1] "%u Anwendungen aktualisiert – Neustart erforderlich"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Anwendung aktualisiert"
+msgstr[1] "%u Anwendungen aktualisiert"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s wurde aktualisiert."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Bitte starten Sie die Anwendung neu."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s und %s wurden aktualisiert."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u Anwendung erfordert einen Neustart."
+msgstr[1] "%u Anwendungen erfordern einen Neustart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Beinhaltet %s, %s und %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Betriebssystemaktualisierungen sind nicht verfügbar"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Aktualisieren Sie Ihr System, um weiterhin Sicherheitsaktualisierungen zu "
+"erhalten."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Eine neue Version von %s steht zur Installation bereit"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Software-Systemaktualisierung verfügbar"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Software-Aktualisierungen fehlgeschlagen"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"Eine wichtige Betriebssystemaktualisierung konnte nicht installiert werden."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Details anzeigen"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Betriebssystemaktualisierung ist abgeschlossen"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Willkommen zu %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Software-Aktualisierung installiert"
+msgstr[1] "Software-Aktualisierungen installiert"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Eine wichtige Betriebssystemaktualisierung wurde installiert."
+msgstr[1] "Wichtige Betriebssystemaktualisierungen wurden installiert."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Ansehen"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Aktualisierung fehlgeschlagen"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Das System ist bereits auf dem neusten Stand."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Die Aktualisierung wurde abgebrochen."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internetzugang war erforderlich, aber nicht verfügbar. Bitte stellen Sie "
+"sicher, dass ein Internetzugang vorhanden ist und versuchen Sie es erneut."
+
+# Sollte dann nicht auch gleich auf eine fehlerhafte Signatur hingewiesen werden?
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Es gab ein Sicherheitsproblem mit der Aktualisierung. Bitte wenden Sie sich "
+"an den Autor bzw. Hersteller des Programms für weitere Einzelheiten."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Es ist nicht genug freier Speicher vorhanden. Bitte schaffen Sie ein "
+"bisschen Platz und versuchen Sie es anschließend erneut."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Leider konnte die Aktualisierung nicht installiert werden. Bitte warten Sie "
+"auf eine neue Aktualisierung und versuchen Sie es erneut. Sollte das Problem "
+"bestehen bleiben, treten Sie bitte mit dem Autor/Hersteller in Kontakt."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Gestern, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Gestern %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Vor zwei Tagen"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Vor drei Tagen"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Vor vier Tagen"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Vor fünf Tagen"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Vor sechs Tagen"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Vor einer Woche"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Vor zwei Wochen"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Es wird nach neuen Aktualisierungen gesucht …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Aktualisierungen werden eingerichtet …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Dies kann einen Moment dauern)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Zuletzt überprüft: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s wird nicht mehr unterstützt."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Ihr Betriebssystem wird nicht mehr unterstützt."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Das bedeutet, dass es keine Sicherheitsaktualisierungen mehr erhält."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Es wird empfohlen, dass Sie auf eine neuere Version aktualisieren."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Kosten könnten anfallen"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Ein Suchen nach Aktualisierungen über mobiles Breitband kann Ihnen Kosten "
+"verursachen."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Trotzdem prüfen"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Kein Netzwerk"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr ""
+"Für die Suche nach Aktualisierungen ist Zugriff auf das Internet notwendig."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Wird überprüft …"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Nach Aktualisierungen suchen"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Seite mit Aktualisierungen"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Die Software ist aktuell"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Ein Suchen nach Aktualisierungen über mobiles Breitband kann Ihnen Kosten "
+"verursachen"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Trotzdem _prüfen"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Online gehen und nach Aktualisierungen suchen"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Netzwerkeinstellungen"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Aktualisierungen werden automatisch verwaltet"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Neu starten und Aktualisierungen installieren"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Alle Aktualisieren"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrierte Firmware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Neustart erforderlich"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Aktualisierungen"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Geräte-Firmware"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "Herunterla_den"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Es wird empfohlen, dass Sie Ihre Daten sichern, bevor Sie aktualisieren."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Jetzt _neustarten"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+"Die Aktualisierungen werden bei einem Neustart des Rechners übernommen."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s ist jetzt verfügbar"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Es wird auf das Herunterladen von %s %s gewartet"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s wird heruntergeladen"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s ist bereit zur Installation"
+
+# CHECK
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+"Eine größere Aktualisierung mit neuen Funktionen und überarbeiteter "
+"Oberfläche."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Mehr er_fahren"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Software auf diesem Rechner hinzufügen, entfernen oder aktualisieren"
+
+# Was steckt hinter diesem String? -fh
+# Das sind Suchbegriffe, anhand denen der Benutzer das Programm finden kann. -mb
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Aktualisierungen;Systemaktualisierung;Quellen;Einstellungen;Installieren;"
+"Entfernen;Programm;Software;App;Store;Anwendung;Update;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Tonerzeugung und Tonbearbeitung"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musikwiedergabe"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Fehlerdiagnose"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Entwicklungsumgebungen"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Künstliche Intelligenz"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomie"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemie"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Sprachen"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Mathematik"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotik"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Abenteuer"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blockspiele"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Brettspiele"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kartenspiele"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatoren"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Kinderspiele"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logik"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rollenspiele"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategie"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-Grafik"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografie"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scannen"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafiken"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Betrachter"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalender"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Datenbank"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanzwesen"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Textverarbeitung"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Schriftarten"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Eingabequellen"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Sprachpakete"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisierung"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Gerätetreiber"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Unterhaltung"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nachrichten"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Internet-Browser"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Texteditoren"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Vorgestellt"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Kunst"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografie"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Comics"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiktion"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Gesundheit"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Geschichte"
+
+# »Lifestyle« ist durchaus auch im Deutschen schon ein geflügeltes Wort,
+# mit »Lebensgewohnheit« kann ich dagegen in diesem Zusammenhang gar nichts
+# anfangen.
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Lifestyle"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politik"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio und Video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Entwicklungswerkzeuge"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Bildung und Wissenschaft"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Spiele"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafik und Fotografie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivität"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Kommunikation und Nachrichten"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referenz"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Zubehör"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Betriebssystemaktualisierungen"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Beinhaltet Leistungs-, Stabilitäts- und Sicherheitsverbesserungen."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Vorgestellte Bilder werden heruntergeladen …"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Eine Aktualisierung von Endless OS mit neuen Funktionen und Fehlerbehebungen."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Der EOS-Aktualisierungsdienst konnte die Aktualisierung nicht empfangen und "
+"anwenden."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME-Software systemweiter AppStream-Installer"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Befehlszeilenargumente konnten nicht gelesen werden"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Sie müssen genau einen Dateinamen angeben"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Dieses Programm kann nur durch den root-Benutzer ausgeführt werden"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Inhalt konnte nicht bestätigt werden"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kopieren fehlgeschlagen"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Zusätzliche Metadaten-Dateien werden heruntergeladen …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Systemaktualisierungsinformationen werden heruntergeladen …"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Aktualisieren Sie Ihr System, um die neuesten Funktionen und Verbesserungen "
+"zu erhalten."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak-Unterstützung"
+
+# Ich gebe zu, das ist frei uebersetzt - was besseres fiel mir nicht ein. FH.
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+"Flatpak ist eine Laufzeitumgebung für Linux-Desktop-Anwendungen, deren "
+"Pakete distributionsunabhängig laufen"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Flatpak-Metadaten für %s werden geholt …"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+#| msgid "%s Device"
+msgid "%s Device Update"
+msgstr "Geräteaktualisierung von %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+#| msgid "%s System"
+msgid "%s System Update"
+msgstr "Systemaktualisierung auf %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+#| msgid "%s Embedded Controller"
+msgid "%s Embedded Controller Update"
+msgstr "Aktualisierung des eingebetteten Geräts %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "ME-Aktualisierung auf %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+#| msgid "%s Corporate ME"
+msgid "%s Corporate ME Update"
+msgstr "Kommerzielle ME-Aktualisierung auf %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+#| msgid "%s Consumer ME"
+msgid "%s Consumer ME Update"
+msgstr "Anwender-ME-Aktualisierung auf %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+#| msgid "%s Controller"
+msgid "%s Controller Update"
+msgstr "Steuergerät-Aktualisierung auf %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+#| msgid "%s Thunderbolt Controller"
+msgid "%s Thunderbolt Controller Update"
+msgstr "Thunderbolt-Steuergerät-Aktualisierung auf %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "CPU-Microcode-Aktualisierung auf %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%u Application Updated"
+#| msgid_plural "%u Applications Updated"
+msgid "%s Configuration Update"
+msgstr "Konfigurationsaktualisierung auf %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Signatur für Firmware-Aktualisierung wird heruntergeladen …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Metadaten für Firmware-Aktualisierung werden heruntergeladen …"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Unterstützung für Firmware-Aktualisierungen"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Stellt Unterstützung für Firmware-Aktualisierungen bereit"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Anwendungsbewertungen werden heruntergeladen …"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Unterstützung für OpenDesktop-Bewertungen"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"OpenDesktop-Bewertungen (ODRS) ist ein Dienst, der Benutzerbewertungen von "
+"Programmen bereitstellt"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Unterstützung von Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Ein Snap ist ein universelles Linux-Paket"
+
+#~ msgid "About %s"
+#~ msgstr "Info zu %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Grafische Oberfläche der Ordnerverwaltung anzeigen"
+
+#~ msgid "Folder Name"
+#~ msgstr "Ordnername"
+
+#~ msgid "_Add"
+#~ msgstr "_Hinzufügen"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Zu Anwendungsordner hinzufügen"
+
+#~ msgid "Top Rated"
+#~ msgstr "Beste Bewertung"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Erweiterungseinstellungen"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Erweiterungen werden auf eigene Gefahr verwendet. Bei Systemproblemen "
+#~ "wird empfohlen, sie wieder abzuschalten."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Komponenten konnten nicht geladen werden"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS-Validierung OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Datei konnte nicht geladen werden"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Ungespeicherte Änderungen"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Die Anwendungsliste ist bereits geladen."
+
+#~ msgid "Merge documents"
+#~ msgstr "Dokumente zusammenführen"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Änderungen verwerfen"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "AppStream-Datei öffnen"
+
+#~ msgid "_Open"
+#~ msgstr "Ö_ffnen"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "AppStream-Datei speichern"
+
+#~ msgid "_Save"
+#~ msgstr "_Speichern"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Datei konnte nicht gespeichert werden"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s Banner-Design wurde gelöscht."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Banner-Design wurde gelöscht."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "In der Anwendungsliste gibt es ungespeicherte Änderungen."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Ausführliche Protokollierung aktivieren"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Software Banner-Designer"
+
+#~ msgid "No Designs"
+#~ msgstr "Keine Designs"
+
+#~ msgid "Error message here"
+#~ msgstr "Fehlermeldung hier"
+
+#~ msgid "App ID"
+#~ msgstr "App-Kennung"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Unsere Empfehlungen"
+
+#~ msgid "Category Featured"
+#~ msgstr "Vorstellungskategorie"
+
+#~ msgid "Undo"
+#~ msgstr "Rückgängig"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Banner-Designer"
+
+#~ msgid "New Banner"
+#~ msgstr "Neues Banner"
+
+#~ msgid "Import from file"
+#~ msgstr "Aus Datei importieren"
+
+#~ msgid "Export to file"
+#~ msgstr "In Datei exportieren"
+
+#~ msgid "Delete Design"
+#~ msgstr "Design löschen"
+
+#~ msgid "Featured App"
+#~ msgstr "Vorgestellte Anwendung"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Betriebssystemaktualisierung"
+
+#~ msgid "Spacing"
+#~ msgstr "Abstand"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Der Abstand zwischen Kindelementen"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Klicken Sie auf Objekte, um diese auszuwählen"
+
+#~ msgid "Select"
+#~ msgstr "Auswählen"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "Zu _Ordner hinzufügen …"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "In Ordner _verschieben …"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Von Ordner _entfernen"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Vorgestellte Anwendungen"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Vorgestellte Banner für GNOME Software entwerfen"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell-Erweiterungen"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Unterstützung für Web-Anwendungen"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Beliebte Web-Anwendungen in einem Browser ausführen"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Softwarequelle für GNOME Shell-Erweiterungen"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Metadaten für Shell-Erweiterung werden heruntergeladen …"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell-Erweiterungen"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Alle"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Anmelden / Registrieren …"
+
+#~ msgid "Continue"
+#~ msgstr "Fortfahren"
+
+#~ msgid "Use"
+#~ msgstr "Verwendung"
+
+#~ msgid "Add another…"
+#~ msgstr "Weiteren hinzufügen …"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Software-Katalog wird geladen"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Sind Sie sicher, dass Sie %s kaufen wollen?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s wird installiert, wofür Ihnen %s berechnet wird."
+
+#~ msgid "Purchase"
+#~ msgstr "Kaufen"
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2f A$"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2f C$"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2f CN¥"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f €"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f £"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f ¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2f NZ$"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f ₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2f US$"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Angemeldet als %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Anmelden …"
+
+#~ msgid "Sign out"
+#~ msgstr "Abmelden"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Kaufen von %s nicht möglich: Legitimierung notwendig"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Kaufen von %s nicht möglich: Legitimierung fehlgeschlagen"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr ""
+#~ "Kaufen von %s fehlgeschlagen: Bezahlmethode wurde nicht eingerichtet"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Kaufen von %s nicht möglich: Bezahlung wurde abgewiesen"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Kaufen von %s fehlgeschlagen"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Sie benötigen im weiteren Verlauf ein Ubuntu-One-Konto."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Sie müssen sich bei Ubuntu-One anmelden, um fortsetzen zu können."
+
+#~ msgid "..."
+#~ msgstr "…"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Aktualisierung von %s auf %s nicht möglich"
+
+#~ msgid "New System Access"
+#~ msgstr "Neuer Systemzugriff"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Profiling-Informationen für den Dienst anzeigen"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Sie müssen sich bei %s anmelden, um fortsetzen zu können."
+
+#~ msgid "Email address"
+#~ msgstr "E-Mail-Adresse"
+
+#~ msgid "I have an account already"
+#~ msgstr "Ich habe bereits ein Benutzerkonto"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Ich möchte mich für ein neues Benutzerkonto registrieren"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Ich habe mein Passwort vergessen"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Das nächste Mal automatisch anmelden"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Geben Sie Ihre einmalige PIN für die Zwei-Stufen-Legitimierung ein."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Legitimieren"
+
+#~ msgid "_About"
+#~ msgstr "_Info"
+
+#~ msgid "_Quit"
+#~ msgstr "_Beenden"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informationen über %s sowie Möglichkeiten, einen Codec zu erhalten, der "
+#~ "dieses Format wiedergeben kann, finden Sie auf der Internet-Seite."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Das Konto %s wurde deaktiviert."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Installation von Software nicht möglich, bis das Problem gelöst ist."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Besuchen Sie %s für weitere Informationen."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Neue Aktualisierungen werden heruntergeladen …"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Anwendungsseite wird heruntergeladen …"
+
+#~ msgid "Steam Support"
+#~ msgstr "Unterstützung von Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Die ultimative Unterhaltungsplattform von Valve"
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..b7ad61e
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,5820 @@
+# Greek translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Dimitris Spingos <dmtrs32@gmail.com>, 2013.
+# Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2013, 2014, 2015.
+# Efstathios Iosifidis <iosifidis@opensuse.org>, 2015-2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-12 23:51+0300\n"
+"Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
+"Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.3\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Λογισμικό GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Διαχειριστής εφαρμογών για το GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Η εφαρμογή Λογισμικό σας επιτρέπει να βρείτε και να εγκαταστήσετε νέες "
+"εφαρμογές και επεκτάσεις συστήματος και να αφαιρέσετε υπάρχουσες "
+"εγκατεστημένες εφαρμογές."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Το Λογισμικό GNOME προβάλλει χαρακτηριστικά και δημοφιλείς εφαρμογές με "
+"χρήσιμες περιγραφές και πολλαπλά στιγμιότυπα οθόνης ανά εφαρμογή. Οι "
+"εφαρμογές μπορούν να βρεθούν είτε μέσα από περιήγηση της λίστας των "
+"κατηγοριών ή με αναζήτηση. Σας επιτρέπει επίσης να ενημερώνετε το σύστημά "
+"σας χρησιμοποιώντας μια ενημέρωση χωρίς σύνδεση."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Πίνακας επισκόπησης"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Πίνακας λεπτομερειών"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Πίνακας εγκατεστημένων"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Πίνακας ενημερώσεων"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Λεπτομέρειες ενημέρωσης"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "Το έργο GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Εγκατάσταση αρχείου appstream σε τοποθεσία συστήματος"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Γίνεται εγκατάσταση αρχείου appstream σε τοποθεσία συστήματος"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Λίστα με συμβατά έργα"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Είναι μια λίστα με συμβατά έργα που πρέπει να εμφανιστούν όπως GNOME, KDE "
+"και XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Εάν θα διαχειρίζονται οι ενημερώσεις και οι αναβαθμίσεις στο Λογισμικό GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Εάν είναι απενεργοποιημένο, το Λογισμικό GNOME θα αποκρύψει τον πίνακα "
+"ενημερώσεων και δεν θα εκτελέσει καμία ενέργεια αυτόματων ενημερώσεων ή "
+"προτροπή αναβαθμίσεων."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Αυτόματη λήψη και εγκατάσταση των ενημερώσεων"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Αν είναι ενεργό, το Λογισμικό GNOME κάνει αυτόματη λήψη των ενημερώσεων στο "
+"παρασκήνιο, επίσης εγκαθιστά τις ενημερώσεις που δεν απαιτούν επανεκκίνηση."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"Ειδοποίηση του χρήστη σχετικά με το λογισμικό που ενημερώθηκε στο παρασκήνιο"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Εάν είναι ενεργοποιημένο, το Λογισμικό GNOME ειδοποιεί τον χρήστη για "
+"ενημερώσεις που συνέβησαν ενώ ο χρήστης ήταν αδρανής."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Εάν πρόκειται να ανανεωθεί αυτόματα όταν βρίσκεστε σε μια μετρημένη σύνδεση"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Εάν είναι ενεργοποιημένο, το Λογισμικό GNOME ανανεώνεται αυτόματα στο "
+"παρασκήνιο, ακόμη και όταν χρησιμοποιεί μια μετρημένη σύνδεση (τελικά "
+"λαμβάνει μερικά μεταδεδομένα, ελέγχει για ενημερώσεις κλπ., μπορεί να "
+"προκύψει κόστος για τον χρήστη)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Αν είναι η πρώτη εκτέλεση του Λογισμικό GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Εμφάνιση βαθμολογιών δίπλα από τις εφαρμογές"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Φιλτράρισμα εφαρμογών με βάση τον προεπιλεγμένο κλάδο που ορίστηκε για το "
+"απομακρυσμένο"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Οι μη ελεύθερες εφαρμογές εμφανίζουν μια προειδοποίηση πριν την εγκατάσταση "
+"τους"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Όταν εγκαθίστανται μη ελεύθερες εφαρμογές, ένας διάλογος προειδοποίησης θα "
+"εμφανιστεί. Αυτό ελέγχει εάν ο διάλογος καταστέλλεται."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Λίστα με δημοφιλείς εφαρμογές"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Μια λίστα με εφαρμογές που θα χρησιμοποιηθούν, αντικαθιστώντας τις "
+"καθορισμένες του συστήματος."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Η χρονική σήμανση του τελευταίου ελέγχου ενημέρωσης"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Η χρονική σήμανση του τελευταίου ελέγχου αναβάθμισης"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Η χρονική σήμανση της πρώτης ενημέρωσης ασφαλείας, εκκαθαρίζεται μετά την "
+"ενημέρωση"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Η τελευταία ενημερωμένη χρονική σήμανση"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Η τελευταία χρονική σήμανση όταν το σύστημα ήταν σε σύνδεση και πήρε τυχόν "
+"ενημερώσεις"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Η ηλικία σε δευτερόλεπτα για την επαλήθευση του upstream στιγμιοτύπου "
+"εξακολουθεί να είναι έγκυρη"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Η επιλογή μεγαλύτερης τιμής θα σημαίνει λιγότερη επικοινωνία με τον "
+"απομακρυσμένο διακομιστή, αλλά οι ενημερώσεις των στιγμιότυπων ενδέχεται να "
+"χρειαστούν περισσότερο χρόνο για να εμφανιστούν στο χρήστη. Μια τιμή 0 "
+"σημαίνει να μην ελέγχεται ποτέ ο διακομιστής εαν η εικόνα υπάρχει ήδη στην "
+"λανθάνουσα μνήμη."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Ο διακομιστής που θα χρησιμοποιηθεί για τις κριτικές των εφαρμογών"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Η ελάχιστη βαθμολογία-κάρμα για τις κριτικές"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Κριτικές με κάρμα μικρότερο από αυτόν τον αριθμό δεν θα εμφανίζονται."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Μια λίστα με επίσημων αποθετηρίων που δεν θα πρέπει να θεωρούνται πηγές "
+"τρίτων"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Μια λίστα με επίσημα αποθετήρια που θα πρέπει να θεωρούνται ελεύθερο "
+"λογισμικό"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Η διεύθυνση άδειας που θα χρησιμοποιηθεί όταν μια εφαρμογή θεωρείται "
+"ελεύθερο λογισμικό"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Εγκατάσταση εφαρμογών για όλους τους χρήστες στο σύστημα, όπου είναι δυνατόν"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Επιτρέπεται η πρόσβαση στον διάλογο Αποθετήρια Λογισμικού"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Προσφέρει αναβαθμίσεις για προ-εκδόσεις"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Εμφάνιση ορισμένων στοιχείων περιβάλλοντος χρήστη που ενημερώνουν τον χρήστη "
+"ότι μια εφαρμογή δεν είναι δωρεάν"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Εμφάνιση του διαλόγου για εγκατάσταση μη ελεύθερων αποθετηρίων λογισμικού"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Εμφάνιση μεγέθους εγκατάστασης για τις εφαρμογές στην λίστα των "
+"εγκατεστημένων εφαρμογών"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Το URI που επεξηγεί μη ελεύθερο και ιδιοταγές λογισμικό"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Μια λίστα με τα URL που καταδεικνύουν σε αρχεία appstream τα οποία θα "
+"ληφθούν σε ένα συγκεκριμένο φάκελο"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Εγκατάσταση αρχείων AppStream σε τοποθεσία για όλο το σύστημα και για όλους "
+"τους χρήστες"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Ενεργοποίηση αποθετηρίου προσθέτων του κελύφους GNOME"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Μια συμβολοσειρά που αποθηκεύει το αναγνωριστικό των δικτυακών λογαριασμών "
+"gnome που χρησιμοποιείται για σύνδεση"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Εγκατάσταση λογισμικού"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Εγκατάσταση του επιλεγμένου λογισμικού στο σύστημα"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Επιλογή όλων"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Χωρίς επιλογή"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Αποθετήρια _λογισμικού"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Ενημέρωση προτιμήσεων"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Λογισμικό"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Επιστροφή"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Εξερεύνηση"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "Ε_γκατεστημένο"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Ε_νημερώσεις"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Αναζήτηση"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Πηγή"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Αποθετήρια λογισμικού"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Εξέταση δίσκου"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Ρυθμίσεις δικτύου"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Επανεκκίνηση τώρα"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Περισσότερες πληροφορίες"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Αυτόματες ενημερώσεις σε παύση"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Μάθετε _περισσότερα"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Τοπικό αρχείο"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Πακέτο"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Εκκρεμεί"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Εγκατεστημένο"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Εγκαθίσταται"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Αφαίρεση"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Λειτουργία εκκίνησης : είτε ‘updates’, ‘updated’, ‘installed’ ή ‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "ΛΕΙΤΟΥΡΓΙΑ"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Αναζήτηση για εφαρμογές"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "ΑΝΑΖΗΤΗΣΗ"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr ""
+"Εμφάνιση λεπτομερειών εφαρμογής (χρησιμοποιώντας το αναγνωριστικό της "
+"εφαρμογής)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ΑΝΑΓΝΩΡΙΣΤΙΚΟ"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Εμφάνιση λεπτομερειών εφαρμογής (χρησιμοποιώντας το όνομα πακέτου)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Εγκατάσταση εφαρμογής (χρησιμοποιώντας το αναγνωριστικό της)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Άνοιγμα τοπικού πακέτου"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "ΟΝΟΜΑ ΑΡΧΕΙΟΥ"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Το είδος της αλληλεπίδρασης που αναμένεται για αυτήν τη ενέργεια: είτε "
+"«none», «notify», ή «full»"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Εμφάνιση πληροφοριών αποσφαλμάτωσης"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Εγκαθιστά τυχόν εκκρεμείς ενημερώσεις στο παρασκήνιο"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Εμφάνιση προτιμήσεων ενημέρωσης"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Έξοδος από την εφαρμογή"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Προτιμήστε τοπικές πηγές αρχείων σε AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Προβολή του αριθμού έκδοσης"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Ελληνική μεταφραστική ομάδα GNOME\n"
+" Δημήτρης Σπίγγος <dmtrs32@gmail.com>\n"
+" Μαρία Θουκυδίδου <marablack3@gmail.com>\n"
+" Μαρία Μαυρίδου <mavridou@gmail.com>\n"
+" Ευστάθιος Ιωσηφίδης <iosifidis@opensuse.org>\n"
+" Θάνος Τρυφωνίδης <tomtryf@gnome.org>\n"
+"\n"
+"Για περισσότερες πληροφορίες, επισκεφθείτε τη σελίδα\n"
+"http://gnome.gr/"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Περί του λογισμικού"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Ένας ωραίος τρόπος για τη διαχείριση του λογισμικού στο σύστημά σας."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Συγγνώμη! Δεν υπάρχουν λεπτομέρειες γι' αυτή την εφαρμογή."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Επισκεφθείτε τον ιστότοπο"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Εγκατάσταση…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Εγκατάσταση"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Ενημέρωση"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Αφαίρεση"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr ""
+"Η συσκευή δεν μπορεί να χρησιμοποιηθεί κατά τη διάρκεια της ενημέρωσης."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Απαιτεί πρόσθετα δικαιώματα"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Απαιτείται σύνδεση απομακρυσμένου %s (τομέας %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Απαιτείται σύνδεση"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Ακύρωση"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Σύνδεση"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Χρήστης"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Συνθηματικό"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Άλλο"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Όλες"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Δημοφιλέστερο"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Προτεινόμενο %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Βαθμολόγηση"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Όνομα"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Εμφάνιση"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Υποκατηγορίες μενού φιλτραρίσματος"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ταξινόμηση"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Υποκατηγορίες μενού ταξινόμησης"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Παρακαλούμε εισάγετε έναν αριθμό από το 1 έως το %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Επιλογή εφαρμογής:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Έχουν εγκατασταθεί οι ενημερώσεις του λειτουργικού"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Πρόσφατες εγκατεστημένες ενημερώσεις είναι διαθέσιμες για κριτική"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "Το %s είναι τώρα εγκατεστημένο"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Απαιτείται επανεκκίνηση για να εφαρμοστούν αυτές οι αλλαγές."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Η εφαρμογή είναι έτοιμη να χρησιμοποιηθεί."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Επανεκκίνηση"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Εκκίνηση"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Να εγκατασταθεί λογισμικό από τρίτον;"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Να ενεργοποιηθεί αποθετήριο λογισμικού τρίτου;"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"Το %s δεν είναι <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">ελεύθερου και ανοικτού κώδικα λογισμικό</a>, και παρέχεται "
+"από το «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "Το %s παρέχεται από το «%s»."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Αυτό το αποθετήριο λογισμικού πρέπει να ενεργοποιηθεί για να συνεχιστεί η "
+"εγκατάσταση."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Μπορεί να είναι παράνομη η εγκατάσταση ή χρήση του %s σε κάποιες χώρες."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Μπορεί να είναι παράνομη η εγκατάσταση ή χρήση αυτού του κωδικοποιητή σε "
+"κάποιες χώρες."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Να μην εμφανιστεί ξανά αυτό το μήνυμα"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Ενεργοποίηση και εγκατάσταση"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Ακολουθούν λεπτομερή σφάλματα από τον διαχειριστή πακέτων:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Λεπτομέρειες"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Μια ενημέρωση έχει εγκατασταθεί"
+msgstr[1] "Οι ενημερώσεις έχουν εγκατασταθεί"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Απαιτείται επανεκκίνηση για να εφαρμοστεί η αλλαγή."
+msgstr[1] "Απαιτείται επανεκκίνηση για να εφαρμοστούν αυτές οι αλλαγές."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Όχι τώρα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Κινούμενα σχέδια χωρίς βία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Χαρακτήρες κινουμένων σχεδίων σε επικίνδυνες καταστάσεις"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Χαρακτήρες κινουμένων σχεδίων σε επιθετική σύγκρουση"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Γραφική βία μεταξύ χαρακτήρων κινουμένων σχεδίων"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Χωρίς φανταστική βία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Χαρακτήρες σε επικίνδυνες καταστάσεις όπου διακρίνονται εύκολα από την "
+"πραγματικότητα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Χαρακτήρες σε επιθετικές συγκρούσεις όπου διακρίνονται εύκολα από την "
+"πραγματικότητα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Γραφική βία όπου διακρίνεται εύκολα από την πραγματικότητα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Χωρίς ρεαλιστική βία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Ήπιοι ρεαλιστικοί χαρακτήρες σε επικίνδυνες καταστάσεις"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Απεικονίσεις ρεαλιστικών χαρακτήρων σε επιθετική σύγκρουση"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Γραφική βία μεταξύ πραγματικών χαρακτήρων"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Χωρίς αιματοχυσία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Μη ρεαλιστική αιματοχυσία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Ρεαλιστική αιματοχυσία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Απεικονίσεις αιματοχυσίας και ακρωτηριασμού μερών του σώματος"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Χωρίς σεξουαλική βία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Βιασμός ή άλλη βίαιη σεξουαλική συμπεριφορά"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Χωρίς αναφορές σε αλκοόλ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Αναφορές σε αλκοολούχα ποτά"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Χρήση αλκοολούχων ποτών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Χωρίς αναφορές σε παράνομα ναρκωτικά"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Αναφορές σε παράνομα ναρκωτικά"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Χρήση παράνομων ναρκωτικών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Καμία αναφορά σε προϊόντα καπνού"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Αναφορές σε προϊόντα καπνού"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Χρήση προϊόντων καπνού"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Χωρίς γυμνό οποιοδήποτε είδους"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Σύντομο καλλιτεχνικό γυμνό"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Παρατεταμένο γυμνό"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Χωρίς αναφορές ή απεικονίσεις σεξουαλικού χαρακτήρα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Προκλητικές αναφορές ή απεικονίσεις"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Σεξουαλικές αναφορές ή απεικονίσεις"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Γραφική σεξουαλική συμπεριφορά"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Χωρίς βωμολοχίες κάθε είδους"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Ήπια ή σπάνια χρήση βωμολοχιών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Μέτρια χρήση βωμολοχιών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Συχνή χρήση βωμολοχιών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Χωρίς ακατάλληλο χιούμορ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Χονδροειδές χιούμορ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Χυδαίο ή βρώμικο χιόυμορ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Σεξουαλικό χιόυμορ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Χωρίς βωμολοχίες κάθε είδους"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Αρνητικότητα προς μια συγκεκριμένη ομάδα ανθρώπων"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Διακρίσεις με σκοπό συναισθηματική βλάβη"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Σαφής διάκριση με βάση το φύλο, τη σεξουαλικότητα, το γένος ή τη θρησκεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Χωρίς διαφήμιση κάθε είδους"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Τοποθέτηση προϊόντος"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Ρητές αναφορές σε συγκεκριμένες μάρκες ή εμπορικά σήματα προϊόντων"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Οι χρήστες ενθαρρύνονται να αγοράζουν συγκεκριμένα πραγματικά αντικείμενα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Χωρίς τζόγο κάθε είδους"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Τζόγος σε τυχαία γεγονότα χρησιμοποιώντας μάρκες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Τζόγος χρησιμοποιώντας «εικονικά» χρήματα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Τζόγος με πραγματικά χρήματα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Χωρίς δυνατότητα χρήσης χρημάτων"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Οι παίκτες ενθαρρύνονται να αγοράζουν πραγματικά χρήματα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Δυνατότητα χρήσης πραγματικών χρημάτων στην εφαρμογή"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Χωρίς δυνατότητας συνομιλίας με άλλους χρήστες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Οι αλληλεπιδράσεις μεταξύ χρηστών χωρίς λειτουργία συνομιλίας"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Ελεγχόμενη λειτουργία συνομιλίας μεταξύ των χρηστών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Ανεξέλεγκτη λειτουργία συνομιλίας μεταξύ των χρηστών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Χωρίς δυνατότητας συνομιλίας με άλλους χρήστες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Ανεξέλεγκτη λειτουργία συνομιλίας με ήχο ή βίντεο μεταξύ των χρηστών"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Δεν γίνεται κοινή χρήση των ονομάτων χρηστών κοινωνικής δικτύωσης ή των "
+"διευθύνσεων ηλεκτρονικού ταχυδρομείου"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Γίνεται κοινή χρήση των ονομάτων χρηστών κοινωνικής δικτύωσης ή των "
+"διευθύνσεων ηλεκτρονικού ταχυδρομείου"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Χωρίς διαμοιρασμό πληροφοριών του χρήστη με τρίτους"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Γίνεται έλεγχος για την πιο πρόσφατη έκδοση της εφαρμογής"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Διαμοιρασμός διαγνωστικών δεδομένων που δεν επιτρέπουν σε άλλους να "
+"αναγνωρίσουν τον χρήστη"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Διαμοιρασμός πληροφοριών που επιτρέπει σε άλλους να αναγνωρίσουν τον χρήστη"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Χωρίς διαμοιρασμό φυσικής τοποθεσίας σε άλλους χρήστες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Διαμοιρασμός φυσικής τοποθεσίας σε άλλους χρήστες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Χωρίς αναφορές σε ομοφυλοφιλία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Έμμεσες αναφορές στην ομοφυλοφιλία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Φιλί μεταξύ ανθρώπων του ίδιου φύλου"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Γραφική σεξουαλική συμπεριφορά μεταξύ ατόμων του ίδιου φύλου"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Χωρίς αναφορές σε πορνεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Έμμεσες αναφορές στην πορνεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Άμεσες αναφορές σε πορνεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Γραφικές απεικονίσεις της πράξης πορνείας"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Χωρίς αναφορές σε μοιχεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Έμμεσες αναφορές σε μοιχεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Άμεσες αναφορές σε μοιχεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Γραφικές απεικονίσεις της μοιχείας"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Δεν υπάρχουν σεξουαλικοποιημένοι χαρακτήρες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Ελαφρά ντυμένοι ανθρώπινοι χαρακτήρες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Εξαιρετικά σεξουαλικοποιημένοι ανθρώπινοι χαρακτήρες"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Χωρίς αναφορές σε βεβήλωση"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Απεικονίσεις ή αναφορές στην ιστορική βεβήλωση"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Απεικονίσεις της σύγχρονης ανθρώπινης βεβήλωσης"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Γραφικές απεικονίσεις της σύγχρονης βεβήλωσης"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Δεν υπάρχουν ορατά νεκρά ανθρώπινα κατάλοιπα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Ορατά νεκρά ανθρώπινα κατάλοιπα"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Νεκρά ανθρώπινα λείψανα που εκτίθενται στα στοιχεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Γραφικές απεικονίσεις της βεβήλωσης των ανθρώπινων σωμάτων"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Χωρίς αναφορές σε δουλεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Απεικονίσεις ή αναφορές στην ιστορική δουλεία"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Απεικονίσεις της σύγχρονης δουλείας"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Γραφικές απεικονίσεις της σύγχρονης δουλείας"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Γενικά"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ΟΛΟΙ"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Μόνο ενήλικες"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Ώριμος"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Έφηβοι"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Όλοι 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Όλοι"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Παιδική ηλικία"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Μια εφαρμογή"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "Το %s ζητά πρόσθετη υποστήριξη μορφής αρχείου."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Απαιτούνται πρόσθετοι τύποι MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "Το %s ζητά πρόσθετες γραμματοσειρές."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Απαιτούνται πρόσθετες γραμματοσειρές"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "Το %s ζητά πρόσθετους κωδικοποιητές πολυμέσων."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Απαιτούνται πρόσθετοι κωδικοποιητές πολυμέσων"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "Το %s ζητά πρόσθετους οδηγούς εκτυπωτή."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Απαιτούνται πρόσθετοι οδηγοί εκτυπωτή"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "Το %s ζητά πρόσθετα πακέτα."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Απαιτούνται πρόσθετα πακέτα"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Εύρεση στο λογισμικό"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Αφαιρείται…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Εκκρεμεί εγκατάσταση…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Εκκρεμής ενημέρωση…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Προετοιμάζεται…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Η εφαρμογή αυτή μπορεί να χρησιμοποιηθεί μόνο όταν υπάρχει ενεργή σύνδεση "
+"διαδικτύου."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "Ε_γκατάσταση"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "Ε_γκατάσταση…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "Ε_κκίνηση"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Α_φαίρεση"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Δίκτυο"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Δυνατότητα επικοινωνίας μέσω δικτύου"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Υπηρεσίες συστήματος"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Δυνατότητα πρόσβασης στις υπηρεσίες D-Bus στο δίαυλο συστήματος"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Υπηρεσίες συνεδρίας"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Δυνατότητα πρόσβασης στις υπηρεσίες D-Bus στο δίαυλο συνεδρίας"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Συσκευές"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Δυνατότητα πρόσβασης αρχείων συσκευών συστήματος"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Προσωπικός φάκελος"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Δυνατότητα προβολής, επεξεργασίας και δημιουργίας αρχείων"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Δυνατότητα προβολής αρχείων"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Σύστημα αρχείων"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Φάκελος λήψεων"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Ρυθμίσεις"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Δυνατότητα προβολής και αλλαγής οποιονδήποτε ρυθμίσεων"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Σύστημα προβολής παλαιού τύπου"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Χρησιμοποιεί ένα παλιό, ανασφαλές σύστημα προβολής"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Αποφυγή φιλτραρισματος"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+"Μπορεί να ξεφύγει από το φιλτράρισμα και να παρακάμψει άλλους περιορισμούς"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Αυτή η εφαρμογή είναι πλήρως φιλτραρισμένη."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Δεν είναι δυνατό να προσδιοριστεί ποια μέρη του συστήματος έχει πρόσβαση "
+"αυτή η εφαρμογή. Αυτό είναι χαρακτηριστικό για παλαιότερες εφαρμογές."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Άγνωστη"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Ποτέ"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Άγνωστη"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Χαμηλό"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Μέσο"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Υψηλό"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Άγνωστο"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Απαιτείται σύνδεση στο διαδίκτυο για να γράψετε μια κριτική"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Αδύνατη η εύρεση του «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Δημόσιος τομέας"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Ελεύθερο λογισμικό"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Οι χρήστες δεσμεύονται από την εξής άδεια χρήσης:"
+msgstr[1] "Οι χρήστες δεσμεύονται από τις εξής άδειες χρήσης:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Περισσότερες πληροφορίες"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Σελίδα λεπτομερειών"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Γίνεται λήψη"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Ε_νημέρωση"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Π_ροσθήκη συντόμευσης"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Αφαίρεση συντόμευσης"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Δεν δόθηκε στιγμιότυπο"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Συμπεριελήφθη αποθετήριο λογισμικού"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Αυτή η εφαρμογή περιλαμβάνει ένα αποθετήριο λογισμικού που παρέχει "
+"ενημερώσεις, καθώς και πρόσβαση σε άλλο λογισμικό."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Δεν συμπεριελήφθη αποθετήριο λογισμικού"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Αυτή η εφαρμογή δεν περιλαμβάνει αποθετήριο λογισμικού. Δεν θα ενημερωθεί με "
+"νέες εκδόσεις."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Αυτό το λογισμικό παρέχεται ήδη από τη διανομή σας και δεν πρέπει να "
+"αντικατασταθεί."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Αναγνωρίστηκε αποθετήριο λογισμικού"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Η προσθήκη αυτού του αποθετηρίου λογισμικού θα σας δώσει πρόσβαση σε "
+"πρόσθετο λογισμικό και αναβαθμίσεις."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Χρησιμοποιήστε μόνο τα αποθετήρια λογισμικού που εμπιστεύεστε."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Ιστότοπος"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Δωρεά"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Μεταφρασμένο στη γλώσσα σας"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Τεκμηρίωση"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Δραστηριότητα έκδοσης"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Ενσωμάτωση συστήματος"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Φιλτραρισμένη"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Κανάλι"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Έκδοση"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Βαθμολόγηση ηλικίας"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Δικαιώματα"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Ενημερωμένο"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Κατηγορία"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Μέγεθος εγκατάστασης"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Μέγεθος λήψης"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Προγραμματιστής"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Άδεια"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Ελεύθερο"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Ιδιοταγές"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Πρόσθετα"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Τα επιλεγμένα πρόσθετα θα εγκατασταθούν με την εφαρμογή."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Κριτικές"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Γράψτε τη δική σας κριτική"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Εμ_φάνιση περισσότερων"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Αυτό σημαίνει ότι το λογισμικό μπορεί ελεύθερα να εκτελεστεί, αντιγραφτεί, "
+"διανεμηθεί, μελετηθεί και τροποποιηθεί."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Ιδιοταγές λογισμικό"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Αυτό σημαίνει ότι το λογισμικό ανήκει σε ένα άτομο ή σε μια εταιρεία. "
+"Υπάρχουν συχνά περιορισμοί στη χρήση του και συνήθως πηγαίος του κώδικας "
+"είναι κλειστός."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Άγνωστη άδεια λογισμικού"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Οι όροι άδειας αυτού του λογισμικού είναι άγνωστοι."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Η εφαρμογή αξιολογήθηκε με αυτόν τον τρόπο επειδή διαθέτει:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Δεν υπήρχαν διαθέσιμες λεπτομέρειες γι' αυτήν την κριτική."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " και "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Διαθέσιμες γραμματοσειρές για το σενάριο %s"
+msgstr[1] "Διαθέσιμες γραμματοσειρές για τα σενάρια %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Διαθέσιμο λογισμικό για το %s"
+msgstr[1] "Διαθέσιμο λογισμικό για το %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Αδύνατη η εύρεση του ζητούμενου λογισμικού"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Δεν βρέθηκε το %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "στον ιστότοπο"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Δεν υπάρχουν διαθέσιμες εφαρμογές που παρέχουν το αρχείο %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε τις εφαρμογές "
+"που λείπουν μπορούν να βρεθούν στο %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Δεν υπάρχουν διαθέσιμες εφαρμογές για υποστήριξη του %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "Το %s δεν είναι διαθέσιμο."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε μια εφαρμογή "
+"που μπορεί να υποστηρίξει αυτή τη μορφή μπορούν να βρεθούν στο %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Δεν υπάρχουν διαθέσιμες γραμματοσειρές για υποστήριξη του σεναρίου %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε πρόσθετες "
+"γραμματοσειρές μπορούν να βρεθούν στο %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Δεν υπάρχουν διαθέσιμα πρόσθετα κωδικοποιητών για τη μορφή %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε έναν "
+"κωδικοποιητή που μπορεί να αναπαράγει αυτήν τη μορφή μπορούν να βρεθούν στο "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Δεν υπάρχουν διαθέσιμοι πόροι πλάσματος για υποστήριξη του %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε πρόσθετους "
+"πόρους πλάσματος μπορούν να βρεθούν στο %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Δεν υπάρχουν διαθέσιμοι οδηγοί εκτυπωτή για το %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε έναν οδηγό "
+"που υποστηρίζει αυτόν τον εκτυπωτή μπορούν να βρεθούν στο %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "αυτός ο ιστότοπος"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Δυστυχώς, το %s που αναζητούσατε δεν μπόρεσε να βρεθεί. Παρακαλούμε δείτε το "
+"%s για περισσότερες πληροφορίες."
+msgstr[1] ""
+"Δυστυχώς, το %s που αναζητούσατε δεν μπόρεσε να βρεθεί. Παρακαλούμε δείτε το "
+"%s για περισσότερες πληροφορίες."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Αποτυχία εύρεσης αποτελεσμάτων αναζήτησης"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Μορφή αρχείου %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Σελίδα κωδικοποιητών"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Καλώς ήλθατε"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Καλώς ήλθατε στο Λογισμικό"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Η εφαρμογή Λογισμικό σας επιτρέπει να εγκαταστήσετε λογισμικό που "
+"χρειάζεστε, όλα από ένα μέρος. Δείτε τις προτάσεις μας, περιηγηθείτε στις "
+"κατηγορίες ή αναζητήστε μια εφαρμογή που επιθυμείτε."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Πάμε για ψώνια"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Αφαιρέθηκε"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Εγκατεστημένο"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Ενημερωμένο"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Άγνωστο"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Ιστορικό"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Εφαρμογές συστήματος"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Εγκατεστημένη σελίδα"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Γίνεται λήψη του καταλόγου λογισμικού"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Φόρτωση σελίδας"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Γίνεται εκκίνηση…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Το τρέχον δίκτυο μετράται. Οι μετρήσιμες συνδέσεις έχουν όρια δεδομένων ή "
+"χρεώσεις που σχετίζονται με αυτές. Για να γλιτώσετε δεδομένα, οι αυτόματες "
+"ενημερώσεις έχουν διακοπεί.\n"
+"\n"
+"Οι αυτόματες ενημερώσεις θα συνεχιστούν όταν γίνει διαθέσιμο ένα μη "
+"μετρήσιμο δίκτυο. Μέχρι τότε, εξακολουθεί να είναι δυνατή η χειροκίνητη "
+"εγκατάσταση ενημερώσεων.\n"
+"\n"
+"Εναλλακτικά, αν το τρέχον δίκτυο έχει αναγνωριστεί εσφαλμένα ως μετρήσιμο, η "
+"ρύθμιση αυτή μπορεί να αλλάξει."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Άνοιγμα _ρυθμίσεων δικτύου"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Σελίδα διαχείρισης"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Δεν υπάρχουν κριτικές προς διαχείριση"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "σύστημα"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "χρήστης"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Κλάδος"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Διεύθυνση"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Μορφή"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Εγκατάσταση"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Περισσότερα…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Προτεινόμενες εφαρμογές ήχου & βίντεο"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Προτεινόμενα παιχνίδια"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Προτεινόμενες εφαρμογές γραφικών"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Συνιστώμενες εφαρμογές παραγωγικότητας"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Πρόσβαση σε πρόσθετο λογισμικό από επιλεγμένες πηγές τρίτων."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Ορισμένα από αυτά τα λογισμικά είναι ιδιόκτητα και επομένως έχουν "
+"περιορισμούς στη χρήση, τον διαμοιρασμό και την πρόσβαση στον πηγαίο κώδικα."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Μάθετε περισσότερα…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Ενεργοποίηση"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Σελίδα επισκόπησης"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Να ενεργοποιηθούν τα αποθετήρια λογισμικού τρίτων;"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Προηγούμενο"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Επόμενο"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Επιλογές συντακτών"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Πρόσφατες εκδόσεις"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Κατηγορίες"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Δε βρέθηκαν δεδομένα εφαρμογών"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Προετοιμασία του %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Είστε σίγουροι ότι θέλετε να αφαιρέσετε το αποθετήριο %s;"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Όλες οι εφαρμογές από το %s θα καταργηθούν, και θα χρειαστεί να "
+"επανεγκαταστήσετε το αποθετήριο για να τις χρησιμοποιήσετε ξανά."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Είστε σίγουροι ότι θέλετε να αφαιρέσετε το %s;"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Το %s θα αφαιρεθεί και θα πρέπει να το εγκαταστήσετε ξανά για να το "
+"χρησιμοποιήσετε."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (εγκαταστάθηκε)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Ενημέρωση προτιμήσεων"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Αυτόματες ενημερώσεις"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Οι αυτόματες ενημερώσεις είναι απενεργοποιημένες όταν βρίσκεστε σε δίκτυο "
+"κινητής ή σε σύνδεση με ογκοχρέωση."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Ειδοποιήσεις αυτόματης ενημέρωσης"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Εμφάνιση ειδοποιήσεων όταν οι ενημερώσεις έχουν εγκατασταθεί αυτόματα."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Μερικές από τις εγκατεστημένες εφαρμογές δεν είναι συμβατές με το %s. Αν "
+"συνεχίσετε, τα ακόλουθα θα αφαιρεθούν αυτόματα από την αναβάθμιση:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Ασύμβατο λογισμικό"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Συνέχεια"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u εφαρμογή εγκαταστάθηκε"
+msgstr[1] "%u εφαρμογές εγκαταστάθηκαν"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u πρόσθετο εγκαταστάθηκε"
+msgstr[1] "%u πρόσθετα εγκαταστάθηκαν"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u εφαρμογή"
+msgstr[1] "%u εφαρμογές"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u πρόσθετο"
+msgstr[1] "%u πρόσθετα"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "Τα %s και %s εγκαταστάθηκαν"
+msgstr[1] "Τα %s και %s εγκαταστάθηκαν"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Αφαίρεση του «%s»;"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Απενεργοποίηση του «%s»;"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Το λογισμικό που έχει εγκατασταθεί από αυτό το αποθετήριο δεν θα λαμβάνει "
+"πλέον ενημερώσεις, συμπεριλαμβανομένων των διορθώσεων ασφαλείας."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Απενεργοποίηση"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "το λειτουργικό σύστημα"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Αυτά τα αποθετήρια συμπληρώνουν το προεπιλεγμένο λογισμικό που παρέχεται από "
+"το %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Αποθετήρια τρίτων"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Κανένα επιπρόσθετο αποθετήριο"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Ενεργοποίηση"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Απομάκρυνση…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Απενεργοποίηση…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Ενεργοποιείται"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Απενεργοποίηση"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Ενεργοποιημένο"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Απενεργοποιημένο"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Το μισώ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Δεν μου αρέσει"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Είναι εντάξει"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Μου αρέσει"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Το αγαπώ"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Παρακαλούμε, αφιερώστε περισσότερο χρόνο για τη κριτική σας"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Παρακαλούμε επιλέξτε μια βαθμολογία"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Η σύνοψη είναι πολύ μιρκή"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Η σύνοψη είναι πολύ μεγάλη"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Η περιγραφή είναι πολύ μικρή"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Η περιγραφή είναι πολύ μεγάλη"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Δημοσίευση κριτικής"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Δημοσίευση"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Σύνοψη"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Δώστε μια σύντομη σύνοψη της κριτικής σας, για παράδειγμα: «Υπέροχη "
+"εφαρμογή, τη συνιστώ»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Κριτική"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Ποια είναι η γνώμη σας για την εφαρμογή; Προσπαθήστε να αιτιολογήσετε στις "
+"κριτικές σας."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Βρείτε τα δεδομένα που αποστέλλονται στην <a href=\"https://odrs.gnome.org/"
+"privacy\">πολιτική απορρήτου</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "συνολικές αξιολογήσεις"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Μπορείτε να αναφέρετε τις κριτικές για καταχρηστική, αγενής, ή μεροληπτική "
+"συμπεριφορά."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Αφού αναφερθεί, μια κριτική παραμένει κρυφή μέχρι να ελεγχθεί από τον "
+"διαχειριστή."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Αναφορά κριτικής;"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Αναφορά"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Ήταν η κριτική χρήσιμη σε εσάς;"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ναι"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Όχι"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Έτσι και έτσι"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Αναφορά…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Αφαίρεση…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Δεν βρέθηκε στιγμιότυπο"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Αποτυχία φόρτωσης εικόνας"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Δεν βρέθηκε μέγεθος στιγμιοτύπου"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Αδυναμία δημιουργίας λανθάνουσας μνήμης"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Άκυρο στιγμιότυπο οθόνης"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Μη διαθέσιμο στιγμιότυπο οθόνης"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Στιγμιότυπο οθόνης"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u περισσότερη αντιστοιχία"
+msgstr[1] "%u περισσότερες αντιστοιχίες"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Σελίδα αναζήτησης"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Δε βρέθηκαν εφαρμογές"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Αδύνατη η λήψη ενημερώσεων υλικολογισμικού από το %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Αδύνατη η λήψη ενημερώσεων από το %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Αδύνατη η λήψη ενημερώσεων"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Αδύνατη η λήψη ενημερώσεων: ήταν απαραίτητη η πρόσβαση στο διαδίκτυο αλλά "
+"δεν ήταν διαθέσιμη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Αδύνατη η λήψη ενημερώσεων από %s: δεν υπάρχει επαρκής χώρος στον δίσκο"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Αδύνατη η λήψη ενημερώσεων: δεν υπάρχει επαρκής χώρος στον δίσκο"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Αδύνατη η λήψη ενημερώσεων: απαιτείται πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Αδύνατη η λήψη ενημερώσεων: ήταν άκυρη η πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Αδύνατη η λήψη των ενημερώσεων: δεν έχετε άδεια για να εγκαταστήσετε "
+"λογισμικό"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Αδύνατη η λήψη της λίστας ενημερώσεων"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Αδύνατη η εγκατάσταση του %s καθώς απέτυχε η λήψη από το %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Αδύνατη η εγκατάσταση του %s καθώς απέτυχε η λήψη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Αδύνατη η εγκατάσταση του %s καθώς δεν είναι διαθέσιμο το περιβάλλον "
+"εκτέλεσης %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Αδύνατη η εγκατάσταση του %s καθώς δεν υποστηρίζεται"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Αδύνατη η εγκατάσταση: ήταν απαραίτητη η πρόσβαση στο διαδίκτυο αλλά δεν "
+"ήταν διαθέσιμη"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Αδύνατη η εγκατάσταση: η εφαρμογή έχει άκυρη μορφή"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Αδύνατη η εγκατάσταση του %s: δεν υπάρχει επαρκής χώρος στον δίσκο"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Αδύνατη η εγκατάσταση του %s: απαιτείται πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Αδύνατη η εγκατάσταση του %s: ήταν άκυρη η πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Αδύνατη η εγκατάσταση του %s: δεν έχετε άδεια για να εγκαταστήσετε λογισμικό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Αδύνατη η εγκατάσταση του %s: απαιτείται συνεχόμενη παροχή ρεύματος"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+"Αδύνατη η εγκατάσταση του %s: Το επίπεδο της μπαταρίας είναι πολύ χαμηλό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Αδύνατη η εγκατάσταση του %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Αδύνατη η ενημέρωση του %s από %s καθώς απέτυχε η λήψη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Αδύνατη η ενημέρωση του %s καθώς απέτυχε η λήψη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Αδύνατη η εγκατάσταση ενημερώσεων από %s καθώς απέτυχε η λήψη"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Αδύνατη η εγκατάσταση ενημερώσεων καθώς απέτυχε η λήψη"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Αδύνατη η ενημέρωση: ήταν απαραίτητη η πρόσβαση στο διαδίκτυο αλλά δεν ήταν "
+"διαθέσιμη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Αδύνατη η ενημέρωση του %s: δεν υπάρχει επαρκής χώρος στον δίσκο"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Αδύνατη η εγκατάσταση ενημερώσεων: δεν υπάρχει επαρκής χώρος στον δίσκο"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Αδύνατη η ενημέρωση του %s: απαιτείται πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Αδύνατη η εγκατάσταση ενημερώσεων: απαιτείται πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Αδύνατη η ενημέρωση του %s: ήταν άκυρη η πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Αδύνατη η εγκατάσταση ενημερώσεων: μη έγκυρη πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Αδύνατη η ενημέρωση του %s: δεν έχετε άδεια για να ενημερώσετε λογισμικό"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Αδύνατη η εγκατάσταση ενημερώσεων: δεν έχετε δικαιώματα για να ενημερώσετε "
+"λογισμικό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Αδύνατη η ενημέρωση του %s: απαιτείται συνεχόμενη παροχή ρεύματος"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Αδύνατη η εγκατάσταση ενημερώσεων: απαιτείται συνεχόμενη παροχή ρεύματος"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Αδύνατη η ενημέρωση του %s: Το επίπεδο της μπαταρίας είναι πολύ χαμηλό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Αδύνατη η εγκατάσταση ενημερώσεων: Το επίπεδο της μπαταρίας είναι πολύ χαμηλό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Αδύνατη η ενημέρωση του %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Αδυναμία εγκατάστασης ενημερώσεων"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Αδύνατη η αναβάθμιση του %s από το %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Αδύνατη η αναβάθμιση του %s καθώς απέτυχε η λήψη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Αδύνατη η αναβάθμιση σε %s: ήταν απαραίτητη η πρόσβαση στο διαδίκτυο αλλά "
+"δεν ήταν διαθέσιμη"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Αδύνατη η αναβάθμιση του %s: δεν υπάρχει επαρκής χώρος στον δίσκο"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Αδύνατη η αναβάμιση του %s: απαιτείται πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Αδύνατη η αναβάθμιση του %s: ήταν άκυρη η πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Αδύνατη η αναβάθμιση του %s: δεν έχετε άδεια για να αναβαθμίσετε"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Αδύνατη η αναβάμιση του %s: απαιτείται συνεχόμενη παροχή ρεύματος"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Αδύνατη η αναβάθμιση του %s: Το επίπεδο της μπαταρίας είναι πολύ χαμηλό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Αδύνατη η αναβάθμιση του %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Αδύνατη η αφαίρεση του %s: απαιτείται πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Αδύνατη η αφαίρεση του %s: ήταν άκυρη η πιστοποίηση"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Αδύνατη η αφαίρεση του %s: δεν έχετε άδεια για να αφαιρέσετε λογισμικό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Αδύνατη η αφαίρεση του %s: απαιτείται συνεχόμενη παροχή ρεύματος"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Αδύνατη η αφαίρεση του %s: Το επίπεδο της μπαταρίας είναι πολύ χαμηλό"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Αδύνατη η αφαίρεση του %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Αδύνατη η εκκίνηση του %s: δεν είναι εγκατεστημένο το %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Δεν υπάρχει αρκετός χώρος στον δίσκο — ελευθερώστε κάποιο χώρο και "
+"προσπαθήστε ξανά"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Συγνώμη, κάτι πήγε λάθος"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Αδύνατη η εγκατάσταση του αρχείου: δεν υποστηρίζεται"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Απέτυχε η εγκατάσταση του αρχείου: αποτυχία πιστοποίησης"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Αδύνατη η εγκατάσταση: δεν υποστηρίζεται"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Απέτυχε η εγκατάσταση: αποτυχία πιστοποίησης"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Αδύνατη η επικοινωνία με το %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Απαιτείται επανεκκίνηση του %s για να χρησιμοποιηθούν τα νέα πρόσθετα."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Απαιτείται επανεκκίνηση της εφαρμογής για να χρησιμοποιηθούν τα νέα πρόσθετα."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Απαιτείται συνεχόμενη παροχή ρεύματος"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Το επίπεδο της μπαταρίας είναι πολύ χαμηλό"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Πηγή: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (εγκαθίσταται)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (αφαιρείται)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Α_φαίρεση όλων"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Μη διαθέσιμη περιγραφή της ενημέρωσης."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Εγκατεστημένο στο %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Εγκατεστημένες ενημερώσεις"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Προσθήκες"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Αφαιρέσεις"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Ενημερώσεις"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Υποβαθμίσεις"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Δεν έχουν εγκατασταθεί ενημερώσεις σε αυτό το σύστημα."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Εκκρεμούν ενημερώσεις ασφάλειας"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Συνιστάται να εγκαταστήσετε τώρα τις σημαντικές ενημερώσεις"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Επανεκκίνηση & εγκατάσταση"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Υπάρχουν διαθέσιμες ενημερώσεις λογισμικού"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Σημαντικές ενημερώσεις λειτουργικού συστήματος και εφαρμογών είναι έτοιμες "
+"να εγκατασταθούν"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Προβολή"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Εφαρμογή ενημερώθηκε — Απαιτείται επανεκκίνηση"
+msgstr[1] "%u Εφαρμογές ενημερώθηκαν — Απαιτείται επανεκκίνηση"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Ενημέρωση εφαρμογής"
+msgstr[1] "%u Ενημερώσεις εφαρμογών"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "η εφαρμογή %s έχουν ενημερωθεί."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Παρακαλούμε επανεκκινήστε την εφαρμογή."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "οι εφαρμογές %s και %s έχουν ενημερωθεί."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u εφαρμογή απαιτεί επανεκκίνηση."
+msgstr[1] "%u εφαρμογές απαιτούν επανεκκίνηση."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Περιλαμβάνει %s, %s και %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Υπάρχουν διαθέσιμες ενημερώσεις του λειτουργικού συστήματος"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Αναβαθμίστε για να συνεχίσετε να λαμβάνετε ενημερώσεις ασφαλείας."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Η νέα έκδοση του %s είναι διαθέσιμη προς εγκατάσταση"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Υπάρχουν διαθέσιμες ενημερώσεις λογισμικού"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Αποτυχία ενημερώσεων λογισμικού"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Απέτυχε να εγκατασταθεί μία σημαντική ενημέρωση λογισμικού."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Εμφάνιση λεπτομερειών"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Η αναβάθμιση του συστήματος ολοκληρώθηκε"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Καλώς ήλθατε στο %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Εγκαταστάθηκε ενημέρωση λογισμικού"
+msgstr[1] "Εγκαταστάθηκαν ενημερώσεις λογισμικού"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Εγκαταστάθηκε μια σημαντική ενημέρωση του λειτουργικού συστήματος."
+msgstr[1] "Εγκαταστάθηκαν σημαντικές ενημερώσεις του λειτουργικού συστήματος."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Επισκόπηση"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Αποτυχία ενημέρωσης"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Το σύστημα ήταν ήδη ενημερωμένο."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Η ενημέρωση ακυρώθηκε."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Ζητήθηκε πρόσβαση διαδικτύου, αλλά δεν ήταν διαθέσιμη. Παρακαλούμε, "
+"βεβαιωθείτε ότι έχετε πρόσβαση διαδικτύου και ξαναδοκιμάστε."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Υπήρξαν θέματα ασφάλειας με την ενημέρωση. Παρακαλούμε, συμβουλευτείτε τον "
+"πάροχο του λογισμικού σας για περισσότερες λεπτομέρειες."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Δεν υπήρξε αρκετός χώρος στον δίσκο. Παρακαλούμε, ελευθερώστε κάποιο χώρο "
+"και ξαναπροσπαθήστε."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Συγνώμη: αποτυχία εγκατάστασης της ενημέρωσης. Παρακαλούμε, περιμένετε μια "
+"άλλη ενημέρωση και ξαναπροσπαθήστε. Αν το πρόβλημα επιμένει, επικοινωνήστε "
+"με τον πάροχο λογισμικού σας."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Χθες, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Χθες, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Δύο ημέρες πριν"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Τρεις ημέρες πριν"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Τέσσερις ημέρες πριν"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Πέντε ημέρες πριν"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Έξι ημέρες πριν"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Πριν από μία εβδομάδα"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Πριν από δύο εβδομάδες"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Αναζήτηση νέων ενημερώσεων…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Ρύθμιση ενημερώσεων…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Αυτό ίσως απαιτήσει λίγο χρόνο)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Ελέγχθηκε τελευταία φορά: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Το %s %s δεν υποστηρίζεται πλέον."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Το λειτουργικό σύστημα δεν υποστηρίζεται πλέον."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Αυτό σημαίνει ότι δεν λαμβάνει ενημερώσεις ασφαλείας."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Συνιστάται να κάνετε αναβάθμιση σε μια πιο πρόσφατη έκδοση."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Μπορεί υπάρξουν χρεώσεις"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Ο έλεγχος για ενημερώσεις κατά τη χρήση ευρυζωνικής σύνδεσης δεδομένων, "
+"μπορεί να επιφέρει σημαντικές επιπλέον χρεώσεις."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Να ελεγχθεί οπωσδήποτε"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Χωρίς δίκτυο"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Απαιτείται πρόσβαση διαδικτύου για τον έλεγχο ενημερώσεων."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Γίνεται έλεγχος…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Έλεγχος για ενημερώσεις"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Σελίδα ενημερώσεων"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Το λογισμικό σας είναι ενημερωμένο"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Ο έλεγχος για ενημερώσεις κατά τη χρήση ευρυζωνικής σύνδεσης δεδομένων, "
+"μπορεί να επιφέρει σημαντικές επιπλέον χρεώσεις"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Να ελεγχθεί οπωσδήποτε"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Συνδεθείτε στο δίκτυο για να γίνει έλεγχος ενημερώσεων"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Ρυθμίσεις _δικτύου"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Οι ενημερώσεις διαχειρίζονται αυτόματα"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Επανεκκίνηση & ενημέρωση"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Ενημέρωση όλων"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Ενσωματωμένο υλικολογισμικό"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Απαιτεί επανεκκίνηση"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Ενημερώσεις εφαρμογών"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Υλικολογισμικό συσκευής"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "Λή_ψη"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Συνιστάται να κρατήσετε ένα αντίγραφο ασφαλείας των αρχείων σας πριν την "
+"αναβάθμιση."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Επανεκκίνηση τώρα"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+"Οι ενημερώσεις θα εφαρμοστούν όταν θα γίνει επανεκκίνηση του υπολογιστή."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Το %s %s είναι διαθέσιμο"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Αναμονή για λήψη του %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Λήψη του %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "Το %s %s είναι έτοιμο προς εγκατάσταση"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Μια σημαντική ενημέρωση, με νέα χαρακτηριστικά και διορθώσεις."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Μά_θετε περισσότερα"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Προσθέστε, αφαιρέστε ή ενημερώστε το λογισμικό αυτού του υπολογιστή"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Ενημερώσεις;Αναβαθμίσεις;Πηγές;Αποθετήρια;Προτιμήσεις;Εγκατάσταση;"
+"Απεγκατάσταση;Πρόγραμμα;Λογισμικό;Εφαρμογή;Αποθήκευση;Updates;Upgrade;"
+"Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;"
+"Store;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Δημιουργία και επεξεργασία ήχου"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Αναπαραγωγείς μουσικής"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Αποσφαλματωτές"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Ολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE)"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Τεχνητή νοημοσύνη"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Αστρονομία"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Χημεία"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Γλώσσες"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Μαθηματικά"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Ρομποτική"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Όλα"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Δημοφιλέστερο"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Δράση"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Περιπέτεια"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Κύβοι"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Επιτραπέζια"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Κάρτες"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Προσομοιωτές"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Παιδικά"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Λογική"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Παιχνίδια ρόλων"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Αθλητικά"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Στρατηγική"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Γραφικά 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Φωτογραφία"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Σάρωση"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Διανυσματικά γραφικά"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Εφαρμογές προβολής"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Ημερολόγιο"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Βάση δεδομένων"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Οικονομικά"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Επεξεργαστής κειμένου"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Γραμματοσειρές"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Κωδικοποιητές"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Πηγές εισόδου"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Πακέτα γλωσσών"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Τοπικοποίηση"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Οδηγοί υλικού"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Συνομιλία"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Ειδήσεις"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Περιηγητές Ιστού"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Όλες"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Δημοφιλέστερες"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Επεξεργαστές κειμένου"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Όλα"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Δημοφιλέστερο"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Τέχνη"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Βιογραφία"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Κόμικ"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Φαντασία"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Υγεία"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Ιστορία"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Lifestyle"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Πολιτική"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Αθλητικά"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Ήχος & βίντεο"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Εργαλεία προγραμματιστή"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Εκπαίδευση & επιστήμη"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Παιχνίδια"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Γραφικά & φωτογραφία"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Παραγωγικότητα"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Επικοινωνία & ειδήσεις"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Αναφορά"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Βοηθήματα"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Ενημερώσεις λειτουργικού"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"Περιλαμβάνει βελτιώσεις απόδοσης, σταθερότητας και ασφάλειας για όλους τους "
+"χρήστες."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Λήψη εικόνων δημοφιλέστερων…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Μια ενημέρωση του Endless OS με νέες δυνατότητες και επιδιορθώσεις."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Η υπηρεσία ενημέρωσης του EOS δεν μπορεί να κάνει λήψη και εφαρμογή της "
+"ενημέρωσης."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Εγκαταστάτης Λογισμικού GNOME AppStream σε όλο το σύστημα"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Αποτυχία ανάλυσης των ορισμάτων της γραμμής εντολής"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Πρέπει να ορίσετε ακριβώς ένα όνομα αρχείου"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Το πρόγραμμα μπορεί να χρησιμοποιηθεί μόνο από τον χρήστη root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Αποτυχία επικύρωσης τύπου περιεχομένου"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Αποτυχία αντιγραφής"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Λήψη επιπλέον μεταδεδομένων αρχείων…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Λήψη πληροφοριών αναβάθμισης…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Αναβαθμίστε για τις τελευταίες λειτουργίες, βελτιώσεις απόδοσης και "
+"σταθερότητας."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Υποστήριξη Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Το Flatpak είναι ένα framework για εφαρμογές στο Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Λήψη μεταδεδομένων flatpak για %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s Ενημέρωση συσκευής"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s Ενημέρωση συστήματος"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s Ενημέρωση ελεγκτή Embedded"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s Ενημέρωση ME"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s Εταιρική ενημέρωση ME"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s Καταναλωτική ενημέρωση ME"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s Ενημέρωση ελεγκτή"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Ενημέρωση ελεγκτή Thunderbolt"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s Ενημέρωση μικροκώδικα CPU"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s Ενημέρωση ρύθμισης"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Λήψη υπογραφής ενημέρωσης firmware…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Λήψη μεταδεδομένων ενημέρωσης firmware…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Υποστήριξη αναβάθμισης υλικολογισμικού"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Παρέχει υποστήριξη για αναβαθμίσεις υλικολογισμικού"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Λήψη αξιολογήσεων εφαρμογών…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Υποστήριξη βαθμολογιών Open Desktop"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"Το ODRS είναι μια υπηρεσία όπου παρέχει κριτικές χρηστών στις εφαρμογές"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Κατάστημα Snappy"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Υποστήριξη Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Το snap είναι ένα καθολικό πακέτο του Linux"
+
+#~ msgid "About %s"
+#~ msgstr "Περί %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Ρυθμίσεις επέκτασης"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Οι επεκτάσεις χρησιμοποιούνται με δικό σας ρίσκο. Αν έχετε κάποιο "
+#~ "πρόβλημα με το σύστημα μας, τότε είναι συνετό να τις απενεργοποιήσετε."
+
+#~ msgid "Spacing"
+#~ msgstr "Διάστημα"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Το μέγεθος του διαστήματος μεταξύ θυγατρικών"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Δημοφιλέστερες εφαρμογές"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Επεκτάσεις κελύφους"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Υποστήριξη εφαρμογών Ιστού"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Εκτέλεση δημοφιλών εφαρμογών Ιστού στον περιηγητή"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Αποθετήριο επεκτάσεις κελύφους GNOME"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Λήψη μεταδεδομένων επέκτασης κελύφους…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Επεκτάσεις κελύφους GNOME"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Εμφάνιση διαχείσισης φακέλου του περιβάλλοντος χρήστη"
+
+#~ msgid "Folder Name"
+#~ msgstr "Όνομα φακέλου"
+
+#~ msgid "_Add"
+#~ msgstr "_Προσθήκη"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Προσθήκη στον φάκελο εφαρμογών"
+
+#~ msgid "Top Rated"
+#~ msgstr "Υψηλή βαθμολογία"
+
+#~| msgid "Failed to load image"
+#~ msgid "Failed to load components"
+#~ msgstr "Αποτυχία φόρτωσης στοιχείων"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "Το CSS επικυρώθηκε!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Αποτυχία φόρτωσης αρχείου"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Μη αποθηκευμένες αλλαγές"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Η λίστα εφαρμογών έχει ήδη φορτωθεί."
+
+#~ msgid "Merge documents"
+#~ msgstr "Συγχώνευση εγγράφων"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Δεν θα αποθηκευτούν οι αλλαγές"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Άνοιγμα αρχείου AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "Ά_νοιγμα"
+
+#~| msgid "Open AppStream File"
+#~ msgid "Save AppStream File"
+#~ msgstr "Αποθήκευση αρχείου AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Αποθήκευση"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Αποτυχία αποθήκευσης αρχείου"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s διαγράφηκε το σχέδιο μπάνερ."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Διαγράφηκε το σχέδιο μπάνερ."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Η λίστα εφαρμογών έχει μη αποθηκευμένες αλλαγές."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Χρησιμοποίηση λεπτομερούς καταγραφής"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Εφαρμογή σχεδιασμού μπάνερ Λογισμικού GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Κανένα σχέδιο"
+
+#~ msgid "Error message here"
+#~ msgstr "Μήνυμα σφάλματος"
+
+#~ msgid "App ID"
+#~ msgstr "ID εφαρμογής"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Επιλογές συντακτών"
+
+#~ msgid "Category Featured"
+#~ msgstr "Κατηγορία Δημοφιλέστερων"
+
+#~ msgid "Undo"
+#~ msgstr "Αναίρεση"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Εφαρμογή σχεδίασης μπάνερ"
+
+#~ msgid "New Banner"
+#~ msgstr "Νέο μπάνερ"
+
+#~ msgid "Import from file"
+#~ msgstr "Εισαγωγή από αρχείο"
+
+#~ msgid "Export to file"
+#~ msgstr "Εξαγωγή σε αρχείο"
+
+#~ msgid "Delete Design"
+#~ msgstr "Διαγραφή σχεδίου"
+
+#~ msgid "Featured App"
+#~ msgstr "Δημοφιλέστερη εφαρμογή"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Αναβάθμιση λειτουργικού"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Πατήστε στα αντικείμενα για να τα επιλέξετε"
+
+#~ msgid "Select"
+#~ msgstr "Επιλογή"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Προσθήκη σε φάκελο…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Μετακίνηση σε φάκελο…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Α_φαίρεση από τον κατάλογο"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Σχεδιασμός μπάνερ δημοφιλέστερων στο Λογισμικό GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Λογισμικό;Εφαρμογή;AppStream;Software;App;"
+
+#~ msgid "_All"
+#~ msgstr "Ό_λα"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Σύνδεση / Εγγραφή…"
+
+#~ msgid "Continue"
+#~ msgstr "Συνέχεια"
+
+#~ msgid "Use"
+#~ msgstr "Χρήση"
+
+#~ msgid "Add another…"
+#~ msgstr "Προσθήκη άλλου…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Είστε σίγουροι ότι θέλετε να αγοράσετε το %s;"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s θα εγκατασταθούν, και θα χρεωθείτε %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Αγορά"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Συνδεθήκατε ως %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Σύνδεση…"
+
+#~ msgid "Sign out"
+#~ msgstr "Αποσύνδεση"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Αδύνατη η αγορά του %s: απαιτείται πιστοποίηση"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Αδύνατη η αγορά του %s: μη έγκυρη πιστοποίηση"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Αδύνατη η αγορά του %s: δεν έχει οριστεί μέθοδος πληρωμής"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Αδύνατη η αγορά του %s: η πληρωμή απορρίφθηκε"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Αδύνατη η αγορά του %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr ""
+#~ "Για να συνεχίσετε πρέπει να χρησιμοποιήσετε έναν λογαριασμό Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr ""
+#~ "Για να συνεχίσετε πρέπει να χρησιμοποιήσετε τον λογαριασμό σας στο Ubuntu "
+#~ "One."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Φορτώνεται ο κατάλογος λογισμικού"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Αδύνατη η ενημέρωση του %s από το %s"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Εμφάνιση πληροφοριών προφίλ για την υπηρεσία"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Για να συνεχίσετε πρέπει να συνδεθείτε στο %s."
+
+#~ msgid "Email address"
+#~ msgstr "Διεύθυνση ηλ. αλληλογραφίας"
+
+#~ msgid "I have an account already"
+#~ msgstr "Έχω ήδη λογαριασμό"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Θέλω να εγγραφώ για ένα λογαριασμό τώρα"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Ξεχάσα τον κωδικό πρόσβασης μου"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Αυτόματη είσοδος την επόμενη φορά"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr ""
+#~ "Πληκτρολογήστε τον μοναδικό κωδικό pin για την πιστοποίηση δύο παραγόντων."
+
+#~ msgid "PIN"
+#~ msgstr "Κωδικός PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Πιστοποίηση"
+
+#~ msgid "_About"
+#~ msgstr "_Περί"
+
+#~ msgid "_Quit"
+#~ msgstr "Έ_ξοδος"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Πληροφορίες για το %s, καθώς και επιλογές για το πώς θα πάρετε έναν "
+#~ "κωδικοποιητή που μπορεί να αναπαράγει αυτήν τη μορφή μπορούν να βρεθούν "
+#~ "στον ιστότοπο."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Ο λογαριασμός σας %s έχει ανασταλεί."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Δεν είναι δυνατόν να εγκαταστήσετε λογισμικό έως ότου επιλυθεί."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Για περισσότερες πληροφορίες, επισκεφθείτε %s."
+
+#~ msgid "Applications Updated"
+#~ msgstr "Ενημερωμένες εφαρμογές"
+
+#~ msgid "Includes: ."
+#~ msgstr "Περιλαμβάνει: ."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Λήψη νέων ενημερώσεων…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Λήψη σελίδας εφαρμογής…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Υποστήριξη Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Η υπέρτατη πλατφόρμα διασκέδασης από την Valve"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Λίστα με επιπλέον πηγές που έχουν προηγουμένως ενεργοποιηθεί"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Μια λίστα με πηγές που έχουν προηγουμένως ενεργοποιηθεί κατά την "
+#~ "εγκατάσταση εφαρμογών τρίτων."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Εμφάνιση μη ελεύθερου λογισμικού στα αποτελέσματα αναζήτησης"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Λίστα μη ελεύθερων πηγών που μπορούν προαιρετικά να ενεργοποιηθούν"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Προεπιλεγμένες αλληλεπιδράσεις παικτών χωρίς λειτουργία συνομιλίας"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Παρέχει πρόσβαση σε επιπρόσθετο λογισμικό, συμπεριλαμβανομένων των "
+#~ "περιηγητών Ιστού και παιχνίδια."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Ενεργοποίηση πηγών κλειστού λογισμικού;"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Δεν έχουν εγκατασταθεί εφαρμογές ή πρόσθετα, ή κάποιο άλλο λογισμικό"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Συνήθως έχει περιορισμούς ως προς τη χρήση του και την πρόσβαση στον "
+#~ "πηγαίο κώδικα."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Ιδιοταγείς πηγές λογισμικού"
+
+#~ msgid "Remove Source"
+#~ msgstr "Αφαίρεση πηγής"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Οι πηγές λογισμικού μπορούν να μεταφορτωθούν από το διαδίκτυο. Σας δίνουν "
+#~ "πρόσβαση σε πρόσθετο λογισμικό που δεν παρέχεται από το %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Η αφαίρεση μιας πηγής θα απομακρύνει επίσης και οποιοδήποτε λογισμικό που "
+#~ "εγκαταστήσατε από αυτήν."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Δεν υπάρχει λογισμικό που να εγκαταστάθηκε από αυτή την πηγή"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Εγκαταστάθηκε από αυτή την πηγή"
+
+#~ msgid "Source Details"
+#~ msgstr "Λεπτομέρειες πηγής"
+
+#~ msgid "Last Checked"
+#~ msgstr "Ελέγχθηκε τελευταία φορά"
+
+#~ msgid "Added"
+#~ msgstr "Προστέθηκε"
+
+#~ msgid "Website"
+#~ msgstr "Ιστότοπος"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Επανεκκίνηση & ενημέρωση"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Ε_νημέρωση όλων"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Επανεκκίνηση & ε_γκατάσταση"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Λήψη εκτελέσιμου πηγαίου αρχείου..."
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Λήψη ενημέρωσης firmware…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Υποστήριξη Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Το Limba παρέχει στους προγραμματιστές έναν εύκολο τρόπο να δημιουργήσουν "
+#~ "πακέτα λογισμικού"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "«%s» [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgid "Total"
+#~ msgstr "Σύνολο"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Αδυναμία εύρεσης του '%s'"
+
+#~ msgid "_Install All"
+#~ msgstr "Εγ_κατάσταση όλων"
+
+#~ msgid "Other Updates"
+#~ msgstr "Άλλες ενημερώσεις"
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Κανένα"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Όλα"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Δημοφιλέστερο"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Αστρονομία"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Χημεία"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Μαθηματικά"
+
+#~ msgid "Science"
+#~ msgstr "Επιστήμες"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Οι πηγές λογισμικού σας δίνουν πρόσβαση σε πρόσθετο λογισμικό."
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Απέτυχε η εγκατάσταση του %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Απέτυχε η αφαίρεση του %s."
+
+#, fuzzy
+#~| msgid "Removal of %s failed."
+#~ msgid "Upgrade to %s failed."
+#~ msgstr "Απέτυχε η αφαίρεση του %s."
+
+#, fuzzy
+#~| msgid "Network access was required but not available."
+#~ msgid "Internet access was required but wasn’t available."
+#~ msgstr "Απαιτείται πρόσβαση στο δίκτυο αλλά δεν είναι διαθέσιμη."
+
+#, fuzzy
+#~| msgid ""
+#~| "Internet access was required but wasn’t available. Please make sure that "
+#~| "you have internet access and try again."
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr ""
+#~ "Ζητήθηκε πρόσβαση διαδικτύου, αλλά δεν ήταν διαθέσιμη. Παρακαλούμε, "
+#~ "βεβαιωθείτε ότι έχετε πρόσβαση διαδικτύου και ξαναδοκιμάστε."
+
+#, fuzzy
+#~| msgid ""
+#~| "There wasn’t enough disk space. Please free up some space and try again."
+#~ msgid "There wasn’t enough disk space."
+#~ msgstr ""
+#~ "Δεν υπήρξε αρκετός χώρος στον δίσκο. Παρακαλούμε, ελευθερώστε κάποιο χώρο "
+#~ "και ξαναπροσπαθήστε."
+
+#, fuzzy
+#~| msgid ""
+#~| "There wasn’t enough disk space. Please free up some space and try again."
+#~ msgid "Please free up some space and try again."
+#~ msgstr ""
+#~ "Δεν υπήρξε αρκετός χώρος στον δίσκο. Παρακαλούμε, ελευθερώστε κάποιο χώρο "
+#~ "και ξαναπροσπαθήστε."
+
+#~ msgid " or "
+#~ msgstr " ή "
+
+#~ msgid "3rd party"
+#~ msgstr "εφαρμογή τρίτου"
+
+#~ msgid "web app"
+#~ msgstr "εφαρμογή ιστού"
+
+#~ msgid "nonfree"
+#~ msgstr "μη ελεύθερο"
+
+#~ msgid "_Installing"
+#~ msgstr "Ε_γκαθίσταται"
+
+#~ msgid "_Removing"
+#~ msgstr "Α_φαιρείται"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Άγνωστη"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Υπολογισμός…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Άγνωστο"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Αυτό είναι λογισμικού από τρίτο."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Αυτό το λογισμικό έχει αναπτυχθεί από κάποιον τρίτο και μπορεί να "
+#~ "περιέχει μη ελεύθερα στοχεία."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Αυτό το λογισμικό μπορεί να περιέχει μη ελεύθερα στοιχεία."
+
+#~ msgid "_History"
+#~ msgstr "Ι_στορικό"
+
+#~ msgid "Size"
+#~ msgstr "Μέγεθος"
+
+#~ msgid "non-free"
+#~ msgstr "μη ελεύθερο"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Προτεινόμενες εφαρμογές γραφείου"
+
+#~ msgid "One Star"
+#~ msgstr "Ένα αστέρι"
+
+#~ msgid "Two Stars"
+#~ msgstr "Δύο αστέρια"
+
+#~ msgid "Three Stars"
+#~ msgstr "Τρία αστέρια"
+
+#~ msgid "Four Stars"
+#~ msgstr "Τέσσερα αστέρια"
+
+#~ msgid "Five Stars"
+#~ msgstr "Πέντε αστέρια"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Δεν βρέθηκαν δεδομένα AppStream"
+
+#~ msgid "Audio"
+#~ msgstr "Ήχος"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Επεξεργασία"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Βάσεις δεδομένων"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Εγγραφή δίσκων"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Ραδιοερασιτέχνες"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Μείκτης"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Μουσική"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Συσκευές εγγραφής"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Συσκευές εγγραφής μουσικής"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Δέκτες"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Δόμηση"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Βάσεις δεδομένων"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Προφίλ"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Μετάφραση"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Ανάπτυξη εφαρμογών διαδικτύου"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Βιολογία"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Επιστήμη υπολογιστών"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Κατασκευές"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Οπτικοποίηση δεδομένων"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Οικονομία"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Ηλεκτρισμός"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Ηλεκτρονικά"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Μηχανική"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Γεωλογία"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Γεωλογικές επιστήμες"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Ιστορία"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Ανθρωπιστικές επιστήμες"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Επεξεργασία εικόνας"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Λογοτεχνία"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Χάρτες"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Μουσική"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Αριθμητική ανάλυση"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Παράλληλος υπολογισμός"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Φυσική"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Πνευματικότητα"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Σκοπευτές"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Προσομοίωση"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Αθλητισμός"
+
+#~ msgid "Graphics"
+#~ msgstr "Γραφικά"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Γραφικά 2Δ"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Δημοσίευση"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Γραφικά εικονογραφιών"
+
+#~ msgid "Internet"
+#~ msgstr "Διαδίκτυο"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Τηλεφωνική σύνδεση"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Αλληλογραφία"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Ροή"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Μεταφορά αρχείων"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ραδιοερασιτέχνες"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Άμεσα μηνύματα"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Πελάτες IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Οθόνες"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Απομακρυσμένη πρόσβαση"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Τηλεφωνία"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Ανάπτυξη εφαρμογών διαδικτύου"
+
+#~ msgid "Office"
+#~ msgstr "Γραφείο"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Διάγραμμα"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Διαχείριση επαφών"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Λεξικό"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Αλληλογραφία"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Διάγραμμα ροής"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Υπολογιστής χειρός"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Φωτογραφία"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Παρουσίαση"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Διαχείριση έργου"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Δημοσιεύσεις"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Υπολογιστικά φύλλα"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Προβολείς"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Τέχνη"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Τεχνητή νοημοσύνη"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Αστρονομία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Βιολογία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Χημεία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Επιστήμη υπολογιστών"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Κατασκευές"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Οπτικοποίηση δεδομένων"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Οικονομία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Ηλεκτρισμός"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Ηλεκτρονικά"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Μηχανική"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Γεωγραφία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Γεωλογία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Γεωλογικές επιστήμες"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Ιστορία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Ανθρωπιστικές επιστήμες"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Επεξεργασία εικόνας"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Γλώσσες"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Λογοτεχνία"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Χάρτες"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Μαθηματικά"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Ιατρικά"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Αριθμητική ανάλυση"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Παράλληλος υπολογισμός"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Φυσική"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Ρομποτική"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Πνευματικότητα"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Αθλητισμός"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Προσομοιωτές"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Διαχειριστής αρχείου"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Εργαλεία αρχείων"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Οθόνες"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Ασφάλεια"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Προσομοιωτής τερματικού"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Προσιτότητα"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Αρχειοθέτηση"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Αριθμομηχανή"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Χρονιστές"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Συμπίεση"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Εργαλεία αρχείων"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Χάρτες"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Πνευματικότητα"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Εργαλεία τηλεφωνίας"
+
+#~ msgid "Video"
+#~ msgstr "Βίντεο"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Επεξεργασία"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Βάση δεδομένων"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Εγγραφή δίσκων"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Συσκευές αναπαραγωγής"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Συσκευές εγγραφής"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Τηλεόραση"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Fonts"
+#~ msgstr "Γραμματοσειρές"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Input Sources"
+#~ msgstr "Πηγές εισόδου"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Language Packs"
+#~ msgstr "Γλωσσικά πακέτα"
+
+#~ msgid "Report Abuse"
+#~ msgstr "Αναφορά"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Δεν ολοκληρώθηκε μια προηγούμενη ενημέρωση."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Η ενημέρωση δεν μπόρεσε να εγκατασταθεί· αυτό συχνά είναι ένα πρόβλημα με "
+#~ "την ίδια την ενημέρωση. Παρακαλούμε, περιμένετε μια άλλη ενημέρωση και "
+#~ "ξαναδοκιμάστε."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Μόνο διαδικτυακή εφαρμογή"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Εισαγωγή λειτουργίας υπηρεσίας GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Μια ενημέρωση δεν υπεγράφη με τον σωστό τρόπο."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Η ενημέρωση δεν μπόρεσε να ολοκληρωθεί."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Ζητήθηκε μια ενημέρωση εκτός σύνδεσης, αλλά κανένα πακέτο δεν χρειάζεται "
+#~ "ενημέρωση."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Δεν έχει απομείνει χώρος στον δίσκο."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Απέτυχε να εγκατασταθεί σωστά μια ενημέρωση."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Απέτυχε η ενημέρωση εκτός σύνδεσης με απροσδόκητο τρόπο."
+
+#~ msgid "No sources found."
+#~ msgstr "Δεν βρέθηκαν πηγές."
+
+#~ msgid "OK"
+#~ msgstr "Εντάξει"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i εφαρμογή και %i πρόσθετα εγκαταστάθηκαν"
+#~ msgstr[1] "%i εφαρμογές και %i πρόσθετα εγκαταστάθηκαν"
+
+#~ msgid "You're About to Install Non-Free Software"
+#~ msgstr "Πρόκειται να εγκαταστήσετε μη ελεύθερο λογισμικό"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr ""
+#~ "Ανάλογα με την χώρα διαμονής σας, εγκαθιστώντας το λογισμικό μπορεί να "
+#~ "διωχθείτε ποινικά."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr "Αν δεν είσαστε σίγουρος για αυτό συμβουλευτείτε έναν νομικό."
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "Είστε σίγουροι ότι θέλετε να το ενεργοποιήσετε;"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Ορισμός του συγκεκριμένου επιπέδου αποσφαλμάτωσης"
+
+#~ msgid "Picks"
+#~ msgstr "Επιλεγμένα"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "30 Ιανουαρίου 2014"
+
+#~ msgid "Complicated!"
+#~ msgstr "Περίπλοκο!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Πρόσφατες ενημερώσεις λογισμικού"
+
+#~ msgid "_Pending"
+#~ msgstr "Ε_κκρεμεί"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "Βάσεις δεδομένων"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "Ραδιοερασιτέχνες"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "Ανάπτυξη εφαρμογών διαδικτύου"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "Εργαλεία αρχείων"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "Χάρτες"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "Πνευματικότητα"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "Γραμματοσειρές"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "Κωδικοποιητές-αποκωδικοποιητές"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "Πηγές εισόδου"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "Γλωσσικά πακέτα"
+
+#~ msgid "Done"
+#~ msgstr "Έτοιμο"
+
+#~ msgid "Goals:"
+#~ msgstr "Σκοποί:"
+
+#~ msgid ""
+#~ "<li>View installed applications</li> <li>Remove installed applications</"
+#~ "li> <li>View available application updates</li> <li>Install available "
+#~ "updates</li> <li>Find new applications</li> <li>Install new applications</"
+#~ "li> <li>Find an application to handle a specific type of file</li> "
+#~ "<li>Installed apps and updates should be available when offline</li>"
+#~ msgstr ""
+#~ "<li>Προβολή εγκατεστημένων εφαρμογών</li> <li>Αφαίρεση εγκατεστημένων "
+#~ "εφαρμογών</li> <li>Προβολή διαθέσιμων ενημερώσεων εφαρμογών</li> "
+#~ "<li>Εγκατάσταση διαθέσιμων ενημερώσεων</li> <li>Εύρεση νέων εφαρμογών</"
+#~ "li> <li>Εγκατάσταση νέων εφαρμογών</li> <li>Εύρεση μιας εφαρμογής για να "
+#~ "χειριστεί έναν ειδικό τύπο αρχείου</li> <li>Οι εγκατεστημένες εφαρμογές "
+#~ "και ενημερώσεις πρέπει να είναι διαθέσιμες χωρίς σύνδεση</li>"
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..4fb69f1
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,5180 @@
+# English (British) translation.
+# Copyright (C) 2016 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Translators:
+# Richard Hughes <richard@hughsie.com>, 2012.
+# Philip Withnall <philip@tecnocode.co.uk>, 2013.
+# Zander Brown <zbrown@gnome.org>, 2019-2020.
+# Bruce Cowan <bruce@bcowan.me.uk>, 2017-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-24 19:12+0100\n"
+"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
+"Language-Team: English - United Kingdom <en@li.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 3.36.0\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Application manager for GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Overview panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Details panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Installed panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Updates panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "The update details"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "The GNOME Project"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Install an appstream file into a system location"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installing an appstream file into a system location"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "A list of compatible projects"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Whether to manage updates and upgrades in GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automatically download and install updates"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notify the user about software updated in the background"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Whether to automatically refresh when on a metered connection"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Whether it’s the very first run of GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Show star ratings next to applications"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filter applications based on the default branch set for the remote"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Non-free applications show a warning dialogue before install"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"When non-free applications are installed a warning dialogue can be shown. "
+"This controls if that dialogue is suppressed."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "A list of popular applications"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "A list of applications to use, overriding the system defined ones."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "The last update check timestamp"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "The last upgrade notification timestamp"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "The timestamp of the first security update, cleared after update"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "The last update timestamp"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "The last timestamp when the system was online and got any updates"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "The age in seconds to verify the upstream screenshot is still valid"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "The server to use for application reviews"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "The minimum karma score for reviews"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Reviews with karma less than this number will not be shown."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"A list of official repositories that should not be considered 3rd party"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"A list of official repositories that should be considered free software"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"The license URL to use when an application should be considered free software"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Install bundled applications for all users on the system where possible"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Allow access to the Software Repositories dialogue"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Offer upgrades for pre-releases"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Show some UI elements informing the user that an app is non-free"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Show the prompt to install nonfree software repositories"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Show the installed size for apps in the list of installed applications"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "The URI that explains nonfree and proprietary software"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Install the AppStream files to a system-wide location for all users"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Enable GNOME Shell extensions repository"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "A string storing the gnome-online-account id used to login"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Software Install"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Install selected software on the system"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Select All"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Select None"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Software Repositories"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Update Preferences"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Go back"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explore"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installed"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Updates"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Search"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Source"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Software Repositories"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examine Disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Network Settings"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Restart Now"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "More Information"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatic Updates Paused"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Find Out _More"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Local file"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Package"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Pending"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installed"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installing"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Removing"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Search for applications"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Show application details (using application ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Show application details (using package name)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Install the application (using application ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Open a local package file"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Show verbose debugging information"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installs any pending updates in the background"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Show update preferences"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Quit the running instance"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Prefer local file sources to AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Show version number"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Philip Withnall <philip@tecnocode.co.uk>\n"
+"David King <amigadave@amigadave.com>\n"
+"Bruce Cowan <bruce@bcowan.me.uk>\n"
+"Waldo Luís Ribeiro <waldoribeiro@sapo.pt>\n"
+"Zander Brown <zbrown@gnome.org>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "About Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "A nice way to manage the software on your system."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Sorry! There are no details for that application."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visit website"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Install…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Cancel"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Install"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Update"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Remove"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Device cannot be used during update."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Requires additional permissions"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Login required remote %s (realm %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Login Required"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Cancel"
+
+#: src/gs-basic-auth-dialog.ui:39
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "_Login"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_User"
+
+#: src/gs-basic-auth-dialog.ui:119
+#| msgid "Password"
+msgid "_Password"
+msgstr "_Password"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Other"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "All"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Featured"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Featured %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Rating"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Name"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Show"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Subcategories filter menu"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sort"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Subcategories sorting menu"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Please enter a number from 1 to %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Choose an application:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS updates are now installed"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Recently installed updates are available to review"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s is now installed"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "A restart is required for the changes to take effect."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Application is ready to be used."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Restart"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Launch"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Install Third-Party Software?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Enable Third-Party Software Repository?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s is provided by “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "This software repository must be enabled to continue installation."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "It may be illegal to install or use %s in some countries."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "It may be illegal to install or use this codec in some countries."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Don’t Warn Again"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Enable and Install"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detailed errors from the package manager follow:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Details"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "An update has been installed"
+msgstr[1] "Updates have been installed"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "A restart is required for it to take effect."
+msgstr[1] "A restart is required for them to take effect."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Not Now"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "No cartoon violence"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Cartoon characters in unsafe situations"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Cartoon characters in aggressive conflict"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Graphic violence involving cartoon characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "No fantasy violence"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Characters in unsafe situations easily distinguishable from reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Characters in aggressive conflict easily distinguishable from reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Graphic violence easily distinguishable from reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "No realistic violence"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Mildly realistic characters in unsafe situations"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Depictions of realistic characters in aggressive conflict"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Graphic violence involving realistic characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "No bloodshed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Unrealistic bloodshed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistic bloodshed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Depictions of bloodshed and the mutilation of body parts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "No sexual violence"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Rape or other violent sexual behaviour"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "No references to alcohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "References to alcoholic beverages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Use of alcoholic beverages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "No references to illicit drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "References to illicit drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Use of illicit drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "No references to tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "References to tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Use of tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "No nudity of any sort"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Brief artistic nudity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Prolonged nudity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "No references to or depictions of sexual nature"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provocative references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Sexual references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Graphic sexual behaviour"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "No profanity of any kind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Mild or infrequent use of profanity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Moderate use of profanity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Strong or frequent use of profanity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "No inappropriate humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstick humour"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgar or bathroom humour"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Mature or sexual humour"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "No discriminatory language of any kind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativity towards a specific group of people"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discrimination designed to cause emotional harm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Explicit discrimination based on gender, sexuality, race or religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "No advertising of any kind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Product placement"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Explicit references to specific brands or trademarked products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Users are encouraged to purchase specific real-world items"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "No gambling of any kind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Gambling on random events using tokens or credits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Gambling using “play” money"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Gambling using real money"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "No ability to spend money"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Users are encouraged to donate real money"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Ability to spend real money in-app"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "No way to chat with other users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "User-to-user interactions without chat functionality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderated chat functionality between users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Uncontrolled chat functionality between users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "No way to talk with other users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Uncontrolled audio or video chat functionality between users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "No sharing of social network usernames or e-mail addresses"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Sharing social network usernames or e-mail addresses"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "No sharing of user information with third parties"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Checking for the latest application version"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Sharing diagnostic data that does not let others identify the user"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Sharing information that lets others identify the user"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "No sharing of physical location with other users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Sharing physical location with other users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "No references to homosexuality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Indirect references to homosexuality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Kissing between people of the same gender"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Graphic sexual behavior between people of the same gender"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "No references to prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Indirect references to prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Direct references to prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Graphic depictions of the act of prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "No references to adultery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Indirect references to adultery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Direct references to adultery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Graphic depictions of the act of adultery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "No sexualised characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Scantily clad human characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Overtly sexualised human characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "No references to desecration"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Depictions of or references to historical desecration"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Depictions of modern-day human desecration"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Graphic depictions of modern-day desecration"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "No visible dead human remains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Visible dead human remains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Dead human remains that are exposed to the elements"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Graphic depictions of desecration of human bodies"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "No references to slavery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Depictions of or references to historical slavery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Depictions of modern-day slavery"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Graphic depictions of modern-day slavery"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "General"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ALL"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Adults Only"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Mature"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Teen"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Everyone 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Everyone"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Early Childhood"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "An application"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s is requesting additional file format support."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Additional MIME Types Required"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s is requesting additional fonts."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Additional Fonts Required"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s is requesting additional multimedia codecs."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Additional Multimedia Codecs Required"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s is requesting additional printer drivers."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Additional Printer Drivers Required"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s is requesting additional packages."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Additional Packages Required"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Find in Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Removing…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Pending installation…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Pending update…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "Preparing…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"This application can only be used when there is an active internet "
+"connection."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Install"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Install…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Launch"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Remove"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Network"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Can communicate over the network"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "System Services"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Can access D-Bus services on the system bus"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Session Services"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Can access D-Bus services on the session bus"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Devices"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Can access system device files"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Home folder"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Can view, edit and create files"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Can view files"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "File system"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Downloads folder"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Settings"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Can view and change any settings"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Legacy display system"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Uses an old, insecure display system"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Sandbox escape"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Can escape the sandbox and circumvent any other restrictions"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "This application is fully sandboxed."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Unknown"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Never"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Unknown"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Low"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Medium"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "High"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Unknown"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "You need internet access to write a review"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Unable to find “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Public domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Free Software"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Users are bound by the following licence:"
+msgstr[1] "Users are bound by the following licences:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "More information"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Details page"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Downloading"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Update"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Add shortcut"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Re_move shortcut"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "No screenshot provided"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Software Repository Included"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "No Software Repository Included"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Software Repository Identified"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Only use software repositories that you trust."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Website"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donate"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Localised in your Language"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentation"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Release Activity"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "System Integration"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Sandboxed"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Channel"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Age Rating"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permissions"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Updated"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Category"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Installed Size"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Download Size"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Developer"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licence"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Free"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietary"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Add-ons"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Selected add-ons will be installed with the application."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Reviews"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Write a Review"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Show More"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Proprietary Software"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Unknown Software Licence"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "The licence terms of this software are unknown."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "The application was rated this way because it features:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "No details were available for this rating."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " and "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Available fonts for the %s script"
+msgstr[1] "Available fonts for the %s scripts"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Available software for %s"
+msgstr[1] "Available software for %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Unable to Find Requested Software"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s not found"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "on the website"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "No applications are available that provide the file %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "No applications are available for %s support."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s is not available."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "No fonts are available for the %s script support."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "No addon codecs are available for the %s format."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "No Plasma resources are available for %s support."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "No printer drivers are available for %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "this website"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[1] ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Failed to find any search results"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s file format"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Codecs page"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Welcome"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Welcome to Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Let’s Go Shopping"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Removed"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installed"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Updated"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Unknown"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "History"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "System Applications"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Installed page"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Software catalogue is being downloaded"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Loading page"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Starting up…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Open Network _Settings"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderate page"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "There are no reviews to moderate"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "system"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "user"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Branch"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installation"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "More…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Recommended Audio & Video Applications"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Recommended Games"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Recommended Graphics Applications"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Recommended Productivity Applications"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Access additional software from selected third party sources."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Find out more…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Enable"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Overview page"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Enable Third Party Software Repositories?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Previous"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Next"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Editor’s Picks"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Recent Releases"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categories"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "No Application Data Found"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Prepare %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Are you sure you want to remove the %s repository?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Are you sure you want to remove %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s will be removed, and you will have to install it to use it again."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Installed)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Update Preferences"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatic Updates"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "Automatic updates are disabled when on mobile or metered connections."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Automatic Update Notifications"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Show notifications when updates have been automatically installed."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Incompatible Software"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continue"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u application installed"
+msgstr[1] "%u applications installed"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u add-on installed"
+msgstr[1] "%u add-ons installed"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u application"
+msgstr[1] "%u applications"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u add-on"
+msgstr[1] "%u add-ons"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s and %s installed"
+msgstr[1] "%s and %s installed"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Remove “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Disable “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Disable"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "the operating system"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "These repositories supplement the default software provided by %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Third Party Repositories"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "No Additional Repositories"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Enable"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Remove…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Disable…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Enabling"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Disabling"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Enabled"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Disabled"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Hate it"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Don’t like it"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "It’s OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Like it"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Love it"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Please take more time writing the review"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Please choose a star rating"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "The summary is too short"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "The summary is too long"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "The description is too short"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "The description is too long"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Post Review"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Post"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Summary"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Review"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "What do you think of the app? Try to give reasons for your views."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "ratings in total"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "You can report reviews for abusive, rude, or discriminatory behaviour."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Report Review?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Report"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Was this review useful to you?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Yes"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "No"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Report…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Remove…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Screenshot not found"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Failed to load image"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Screenshot size not found"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Could not create cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Screenshot not valid"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Screenshot not available"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Screenshot"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u more match"
+msgstr[1] "%u more matches"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Search page"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "No Application Found"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Unable to download firmware updates from %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Unable to download updates from %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Unable to download updates"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Unable to download updates: internet access was required but wasn’t available"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Unable to download updates from %s: not enough disk space"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Unable to download updates: not enough disk space"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Unable to download updates: authentication was required"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Unable to download updates: authentication was invalid"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Unable to download updates: you do not have permission to install software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Unable to get list of updates"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Unable to install %s as download failed from %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Unable to install %s as download failed"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Unable to install %s as runtime %s not available"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Unable to install %s as not supported"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Unable to install: internet access was required but wasn’t available"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Unable to install: the application has an invalid format"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Unable to install %s: not enough disk space"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Unable to install %s: authentication was required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Unable to install %s: authentication was invalid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Unable to install %s: you do not have permission to install software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Unable to install %s: AC power is required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Unable to install %s: The battery level is too low"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Unable to install %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Unable to update %s from %s as download failed"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Unable to update %s as download failed"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Unable to install updates from %s as download failed"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Unable to install updates as download failed"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Unable to update: internet access was required but wasn’t available"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Unable to update %s: not enough disk space"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Unable to install updates: not enough disk space"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Unable to update %s: authentication was required"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Unable to install updates: authentication was required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Unable to update %s: authentication was invalid"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Unable to install updates: authentication was invalid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Unable to update %s: you do not have permission to update software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Unable to install updates: you do not have permission to update software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Unable to update %s: AC power is required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Unable to install updates: AC power is required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Unable to update %s: The battery level is too low"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Unable to install updates: The battery level is too low"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Unable to update %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Unable to install updates"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Unable to upgrade to %s from %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Unable to upgrade to %s as download failed"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Unable to upgrade to %s: not enough disk space"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Unable to upgrade to %s: authentication was required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Unable to upgrade to %s: authentication was invalid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Unable to upgrade to %s: you do not have permission to upgrade"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Unable to upgrade to %s: AC power is required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Unable to upgrade to %s: The battery level is too low"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Unable to upgrade to %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Unable to remove %s: authentication was required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Unable to remove %s: authentication was invalid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Unable to remove %s: you do not have permission to remove software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Unable to remove %s: AC power is required"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Unable to remove %s: The battery level is too low"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Unable to remove %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Unable to launch %s: %s is not installed"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Not enough disk space — free up some space and try again"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Sorry, something went wrong"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Failed to install file: not supported"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Failed to install file: authentication failed"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Failed to install: not supported"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Failed to install: authentication failed"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Unable to contact %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s needs to be restarted to use new plug-ins."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "This application needs to be restarted to use new plug-ins."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "AC power is required"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "The battery level is too low"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Source: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Installing)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Removing)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Remove All"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "No update description available."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installed on %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Installed Updates"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Additions"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Removals"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Updates"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Downgrades"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "No updates have been installed on this system."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Security Updates Pending"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "It is recommended that you install important updates now"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Restart & Install"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Software Updates Available"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Important OS and application updates are ready to be installed"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "View"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Application Updated — Restart Required"
+msgstr[1] "%u Applications Updated — Restart Required"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Application Updated"
+msgstr[1] "%u Applications Updated"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s has been updated."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Please restart the application."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s and %s have been updated."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u application requires a restart."
+msgstr[1] "%u applications require a restart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Includes %s, %s and %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Operating System Updates Unavailable"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Upgrade to continue receiving security updates."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "A new version of %s is available to install"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Software Upgrade Available"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Software Updates Failed"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "An important OS update failed to be installed."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Show Details"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "System Upgrade Complete"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Welcome to %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Software Update Installed"
+msgstr[1] "Software Updates Installed"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "An important OS update has been installed."
+msgstr[1] "Important OS updates have been installed."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Review"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Failed To Update"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "The system was already up to date."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "The update was cancelled."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"There wasn’t enough disk space. Please free up some space and try again."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Yesterday, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Yesterday, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Two days ago"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Three days ago"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Four days ago"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Five days ago"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Six days ago"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "One week ago"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Two weeks ago"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Looking for new updates…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Setting up updates…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(This could take a while)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Last checked: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s is no longer supported."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Your OS is no longer supported."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "This means that it does not receive security updates."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "It is recommended that you upgrade to a more recent version."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Charges May Apply"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Check _Anyway"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "No Network"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Internet access is required to check for updates."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Checking…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Check for updates"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Updates page"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Software is up to date"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Check Anyway"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Go online to check for updates"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Network Settings"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Updates are automatically managed"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Restart & Update"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Update All"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrated Firmware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Requires Restart"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Application Updates"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Device Firmware"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Download"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"It is recommended that you back up your data and files before upgrading."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Restart Now"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Updates will be applied when the computer is restarted."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Now Available"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Waiting to Download %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Downloading %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Ready to be Installed"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "A major upgrade, with new features and added polish."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Learn More"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Add, remove or update software on this computer"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Audio Creation & Editing"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Music Players"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Debuggers"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEs"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Artificial Intelligence"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomy"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemistry"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Languages"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Math"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotics"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Adventure"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocks"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Board"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Card"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulators"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Kids"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logic"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Role Playing"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sports"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategy"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D Graphics"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Photography"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scanning"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vector Graphics"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Viewers"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendar"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Database"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finance"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Word Processor"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fonts"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Input Sources"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Language Packs"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localisation"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardware Drivers"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "News"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Web Browsers"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Text Editors"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "All"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Featured"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biography"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Comics"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiction"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Health"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "History"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Lifestyle"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politics"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sports"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio & Video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Developer Tools"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Education & Science"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Games"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Graphics & Photography"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Productivity"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Communication & News"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Reference"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilities"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "OS Updates"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Includes performance, stability and security improvements."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Downloading featured images…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "An Endless OS update with new features and fixes."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS update service could not fetch and apply the update."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Software AppStream system-wide installer"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Failed to parse command line arguments"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "You need to specify exactly one filename"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "This program can only be used by the root user"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Failed to validate content type"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Failed to copy"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Downloading extra metadata files…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Downloading upgrade information…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Upgrade for the latest features, performance and stability improvements."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak Support"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak is a framework for desktop applications on Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Getting flatpak metadata for %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+#| msgid "%s Device"
+msgid "%s Device Update"
+msgstr "%s Device Update"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+#| msgid "%s System"
+msgid "%s System Update"
+msgstr "%s System Update"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+#| msgid "%s Embedded Controller"
+msgid "%s Embedded Controller Update"
+msgstr "%s Embedded Controller Update"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "%s ME Update"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+#| msgid "%s Corporate ME"
+msgid "%s Corporate ME Update"
+msgstr "%s Corporate ME Update"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+#| msgid "%s Consumer ME"
+msgid "%s Consumer ME Update"
+msgstr "%s Consumer ME Update"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+#| msgid "%s Controller"
+msgid "%s Controller Update"
+msgstr "%s Controller Update"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+#| msgid "%s Thunderbolt Controller"
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt Controller Update"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU Microcode Update"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%u Application Updated"
+#| msgid_plural "%u Applications Updated"
+msgid "%s Configuration Update"
+msgstr "%s Configuration Update"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Downloading firmware update signature…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Downloading firmware update metadata…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Firmware Upgrade Support"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Provides support for firmware upgrades"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Downloading application ratings…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS is a service providing user reviews of applications"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap Support"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "A snap is a universal Linux package"
+
+#~ msgid "About %s"
+#~ msgstr "About %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Show the folder management UI"
+
+#~ msgid "Folder Name"
+#~ msgstr "Folder Name"
+
+#~ msgid "_Add"
+#~ msgstr "_Add"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Add to Application Folder"
+
+#~ msgid "Top Rated"
+#~ msgstr "Top Rated"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Extension Settings"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+
+#~| msgid "Failed to load image"
+#~ msgid "Failed to load components"
+#~ msgstr "Failed to load components"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validated OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Failed to load file"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Unsaved changes"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "The application list is already loaded."
+
+#~ msgid "Merge documents"
+#~ msgstr "Merge documents"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Throw away changes"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Open AppStream File"
+
+#~ msgid "_Open"
+#~ msgstr "_Open"
+
+#~| msgid "Open AppStream File"
+#~ msgid "Save AppStream File"
+#~ msgstr "Save AppStream Files"
+
+#~ msgid "_Save"
+#~ msgstr "_Save"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Failed to save file"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s banner design deleted."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Banner design deleted."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "The application list has unsaved changes."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Use verbose logging"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Software Banner Designer"
+
+#~ msgid "No Designs"
+#~ msgstr "No Designs"
+
+#~ msgid "Error message here"
+#~ msgstr "Error message here"
+
+#~ msgid "App ID"
+#~ msgstr "App ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Editor’s Pick"
+
+#~ msgid "Category Featured"
+#~ msgstr "Category Featured"
+
+#~ msgid "Undo"
+#~ msgstr "Undo"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Banner Designer"
+
+#~ msgid "New Banner"
+#~ msgstr "New Banner"
+
+#~ msgid "Import from file"
+#~ msgstr "Import from file"
+
+#~ msgid "Export to file"
+#~ msgstr "Export to file"
+
+#~ msgid "Delete Design"
+#~ msgstr "Delete Design"
+
+#~ msgid "Featured App"
+#~ msgstr "Featured App"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "OS Upgrade"
+
+#~ msgid "Spacing"
+#~ msgstr "Spacing"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "The amount of space between children"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Click on items to select them"
+
+#~ msgid "Select"
+#~ msgstr "Select"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Add to Folder…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Move to Folder…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Remove from Folder"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Featured Applications"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Design the featured banners for GNOME Software"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell Extensions"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Web Apps Support"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Run popular web applications in a browser"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell Extensions Repository"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Downloading shell extension metadata…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell Extension"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_All"
+
+#~| msgid "Sign in to %s…"
+#~ msgid "Sign In / Register…"
+#~ msgstr "Sign In / Register…"
+
+#~ msgid "Continue"
+#~ msgstr "Continue"
+
+#~ msgid "Use"
+#~ msgstr "Use"
+
+#~| msgid "_Add to Folder…"
+#~ msgid "Add another…"
+#~ msgstr "_Add another…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Are you sure you want to purchase %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s will be installed, and you will be charged %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Purchase"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~| msgid "Signed in into %s as %s"
+#~ msgid "Signed in as %s"
+#~ msgstr "Signed in as %s"
+
+#~| msgid "Sign in to %s…"
+#~ msgid "Sign in…"
+#~ msgstr "Sign in…"
+
+#~| msgid "Sign out from %s"
+#~ msgid "Sign out"
+#~ msgstr "Sign out"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Unable to purchase %s: authentication was required"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Unable to purchase %s: authentication was invalid"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Unable to purchase %s: no payment method setup"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Unable to purchase %s: payment was declined"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Unable to purchase %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~| msgid "To continue you need to sign in."
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "To continue, you need to use an Ubuntu One account."
+
+#~| msgid "To continue you need to sign in."
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "To continue, you need to use your Ubuntu One account."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "To continue you need to sign in to %s."
+
+#~ msgid "Email address"
+#~ msgstr "E-mail address"
+
+#~ msgid "I have an account already"
+#~ msgstr "I have an account already"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "I want to register for an account now"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "I have forgotten my password"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Sign in automatically next time"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Enter your one-time pin for two-factor authentication."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Authenticate"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Software catalogue is being loaded"
+
+#~ msgid "_About"
+#~ msgstr "_About"
+
+#~ msgid "_Quit"
+#~ msgstr "_Quit"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Your %s account has been suspended."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "It is not possible to install software until this has been resolved."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "For more information, visit %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Unable to update %s from %s"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Downloading application page…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam Support"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "The ultimate entertainment platform from Valve"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Downloading new updates…"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Show profiling information for the service"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Restart & Update"
+
+#~ msgid "U_pdate All"
+#~ msgstr "U_pdate All"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Restart & _Install"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Getting runtime source…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Downloading firmware update…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba Support"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba provides developers a way to easily create software bundles"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "The list of extra sources that have been previously enabled"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Show non-free software in search results"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "A list of non-free sources that can be optionally enabled"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Player-to-player preset interactions without chat functionality"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Provides access to additional software, including web browsers and games."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Enable Proprietary Software Source?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "No applications or addons installed; other software might still be"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Typically has restrictions on use and access to source code."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Proprietary Software Sources"
+
+#~ msgid "Remove Source"
+#~ msgstr "Remove Source"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "No software installed from this source"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Installed from this Source"
+
+#~ msgid "Source Details"
+#~ msgstr "Source Details"
+
+#~ msgid "Last Checked"
+#~ msgstr "Last Checked"
+
+#~ msgid "Added"
+#~ msgstr "Added"
+
+#~ msgid "Website"
+#~ msgstr "website"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Could not find '%s'"
+
+#~ msgid "_Install All"
+#~ msgstr "_Install All"
+
+#~ msgid "Other Updates"
+#~ msgstr "Other Updates"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Installation of %s failed."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Removal of %s failed."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Please make sure that you have internet access and try again."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Please free up some space and try again."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "If the problem persists, contact your software provider."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomy"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chemistry"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Mathematics"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "All"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Featured"
+
+#~ msgid "Science"
+#~ msgstr "Science"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Software sources give you access to additional software."
+
+#~ msgid "Picks"
+#~ msgstr "Picks"
+
+#~ msgid "_History"
+#~ msgstr "_History"
+
+#~ msgid "Done"
+#~ msgstr "Done"
+
+#~ msgid "Audio"
+#~ msgstr "Audio"
+
+#~ msgid "Databases"
+#~ msgstr "Databases"
+
+#~ msgid "Disc Burning"
+#~ msgstr "Disc Burning"
+
+#~ msgid "Ham Radio"
+#~ msgstr "Ham Radio"
+
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgid "Music"
+#~ msgstr "Music"
+
+#~ msgid "Recorders"
+#~ msgstr "Recorders"
+
+#~ msgid "Sequencers"
+#~ msgstr "Sequencers"
+
+#~ msgid "Tuners"
+#~ msgstr "Tuners"
+
+#~ msgid "Building"
+#~ msgstr "Building"
+
+#~ msgid "Profiling"
+#~ msgstr "Profiling"
+
+#~ msgid "Translation"
+#~ msgstr "Translation"
+
+#~ msgid "Biology"
+#~ msgstr "Biology"
+
+#~ msgid "Computer Science"
+#~ msgstr "Computer Science"
+
+#~ msgid "Construction"
+#~ msgstr "Construction"
+
+#~ msgid "Data Visualization"
+#~ msgstr "Data Visualisation"
+
+#~ msgid "Economy"
+#~ msgstr "Economy"
+
+#~ msgid "Electricity"
+#~ msgstr "Electricity"
+
+#~ msgid "Electronics"
+#~ msgstr "Electronics"
+
+#~ msgid "Engineering"
+#~ msgstr "Engineering"
+
+#~ msgid "Geology"
+#~ msgstr "Geology"
+
+#~ msgid "Geoscience"
+#~ msgstr "Geoscience"
+
+#~ msgid "Humanities"
+#~ msgstr "Humanities"
+
+#~ msgid "Image Processing"
+#~ msgstr "Image Processing"
+
+#~ msgid "Literature"
+#~ msgstr "Literature"
+
+#~ msgid "Maps"
+#~ msgstr "Maps"
+
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerical Analysis"
+
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallel Computing"
+
+#~ msgid "Physics"
+#~ msgstr "Physics"
+
+#~ msgid "Spirituality"
+#~ msgstr "Spirituality"
+
+#~ msgid "Shooter"
+#~ msgstr "Shooter"
+
+#~ msgid "Simulation"
+#~ msgstr "Simulation"
+
+#~ msgid "Graphics"
+#~ msgstr "Graphics"
+
+#~ msgid "2D Graphics"
+#~ msgstr "2D Graphics"
+
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgid "Raster Graphics"
+#~ msgstr "Raster Graphics"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgid "Dialup"
+#~ msgstr "Dialup"
+
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgid "Feed"
+#~ msgstr "Feed"
+
+#~ msgid "File Transfer"
+#~ msgstr "File Transfer"
+
+#~ msgid "Instant Messaging"
+#~ msgstr "Instant Messaging"
+
+#~ msgid "IRC Clients"
+#~ msgstr "IRC Clients"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgid "Remote Access"
+#~ msgstr "Remote Access"
+
+#~ msgid "Telephony"
+#~ msgstr "Telephony"
+
+#~ msgid "Office"
+#~ msgstr "Office"
+
+#~ msgid "Chart"
+#~ msgstr "Chart"
+
+#~ msgid "Contact Management"
+#~ msgstr "Contact Management"
+
+#~ msgid "Dictionary"
+#~ msgstr "Dictionary"
+
+#~ msgid "Flow Chart"
+#~ msgstr "Flow Chart"
+
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgid "Spreadsheet"
+#~ msgstr "Spreadsheet"
+
+#~ msgid "Accessibility"
+#~ msgstr "Accessibility"
+
+#~ msgid "Printing"
+#~ msgstr "Printing"
+
+#~ msgid "Security"
+#~ msgstr "Security"
+
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgid "File Manager"
+#~ msgstr "File Manager"
+
+#~ msgid "File Tools"
+#~ msgstr "File Tools"
+
+#~ msgid "Terminal Emulator"
+#~ msgstr "Terminal Emulator"
+
+#~ msgid "Archiving"
+#~ msgstr "Archiving"
+
+#~ msgid "Calculator"
+#~ msgstr "Calculator"
+
+#~ msgid "Clock"
+#~ msgstr "Clock"
+
+#~ msgid "Compression"
+#~ msgstr "Compression"
+
+#~ msgid "Telephony Tools"
+#~ msgstr "Telephony Tools"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "TV"
+#~ msgstr "TV"
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..04fe084
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,5401 @@
+# Esperanto translation for gnome-software.
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnome-software package.
+# Daniel PUENTES <blatberk@openmailbox.org>, 2015.
+# Axel ROUSSEAU <axel.rousseau@esperanto-france.org>, 2016.
+# Carmen Bianca BAKKER <carmen@carmenbianca.eu>, 2018.
+# Tirifto <tirifto@posteo.cz>, 2019.
+# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2014-2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-01-08 13:27+0000\n"
+"PO-Revision-Date: 2020-01-07 19:35+0100\n"
+"Last-Translator: Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n"
+"Language-Team: Esperanto <gnome-eo-list@gnome.org>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.4\n"
+"X-DamnedLies-Scope: partial\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Programaro"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Aplikaĵo-administrilo por GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Programaro lasas al vi trovi kaj instali novajn aplikaĵojn kaj sistemajn "
+"etendaĵojn, kaj forigi instalitajn aplikaĵojn."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Programaro eksponas popularajn aplikaĵojn kun utilaj priskriboj kaj "
+"pluraj ekrankopioj por ĉiu aplikaĵo. Oni povas trovi aplikaĵojn aŭ per "
+"foliumi la liston de kategorioj aŭ per serĉi. Ĝi lasas al vi ĝisdatigi vian "
+"sistemon uzante senretan ĝisdatigon."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Superrigarda panelo"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panelo de detaloj"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panelo de instalitaj aplikaĵoj"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panelo de ĝisdatigoj"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "La detaloj de la ĝisdatigo"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1449
+msgid "The GNOME Project"
+msgstr "La GNOME-projekto"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Install appstream-dosieron en sisteman lokon"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalante appstream-dosieron en sisteman lokon"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Listo de kongruaj projektoj"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ĉi tio estas listo de kongruaj projektojn, kiujn ni montru, kiel ekzemple "
+"GNOME, KDE, kaj XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Ĉu administri ĝisdatigojn kaj altgradigojn en GNOME Programaro"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Kiam malŝaltita, GNOME Programaro kaŝos la panelon de ĝisdatigoj, kaj faros "
+"neniujn aŭtomatajn ĝisdatigojn nek petos altgradigojn."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Aŭtomate elŝuti kaj instali ĝisdatigojn"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Kiam ŝaltita, GNOME Programaro aŭtomate elŝutas ĝisdatigojn fone, kaj "
+"instalas tiujn, kiuj ne postulas restartigon."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Averti la uzanton kiam programaro ĝisdatiĝas fone"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Kiam ŝaltita, GNOME Programaro sciigas la uzanton pri ĝisdatigoj, kiujn ĝi "
+"faris dum ĝia foresto."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Ĉu aŭtomate aktualigi kiam uzante limigan konekton"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Kiam ŝaltita, GNOME Programaro aŭtomate fone retumas eĉ kun pagenda konekto "
+"(kaj eventuale povas elŝuti metadatumojn, kontroli ĝisdatikojn, ktp., kio "
+"povas venigi ekstrajn kostojn al la uzanto)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Ĉu okazas la tute unua rulado de GNOME Programaro"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Montri steltaksojn apud aplikaĵoj"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Malliberaj aplikaĵoj montras averton antaŭ instalo"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Kiam malliberaj aplikaĵoj estas instalotaj, averto povas aperi. Ĉi tio "
+"decidas, ĉu la averto estu fortenata."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Listo de popularaj aplikaĵoj"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Listo de uzotaj aplikaĵoj, transpasantaj tiujn difinitajn sisteme."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "La lasta ĝisdatig-kontrola tempindiko"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "La lasta ĝisdatiga sciiga tempindiko"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "La lasta ĝisdatiga tempindiko"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"La aĝo, sekunde, por kontroli, ke la deveneja ekrankopio ankoraŭ validas"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Servilo uzota por recenzoj de aplikaĵoj"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Listo de oficialaj deponejoj, ne rigardotaj kiel eksteraj liverantoj"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Listo de oficialaj deponejoj, rigardotaj kiel programare liberaj"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "La URL de permesilo, uzota kiam aplikaĵo estos rigardata kiel libera"
+
+#: data/org.gnome.software.gschema.xml:103
+#, fuzzy
+#| msgid "A list of applications to use, overriding the system defined ones."
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Listo de uzotaj aplikaĵoj, transpasantaj tiujn difinitajn sisteme."
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permesi aliron al la programaraj deponejoj dialogo"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Prezenti altgradigojn al antaŭeldonoj"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Montri iujn fasadajn elementojn, informantajn la uzanton, ke aplikaĵo estas "
+"mallibera"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://eo.wikipedia.org/wiki/Mallibera_programaro'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "La URI, kiu komprenigas malliberan programaron"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Listo de URL-oj, montrantaj al appstream-dosieroj, kiuj elŝutiĝos al "
+"dosierujo de app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Install appstream-dosieron en sisteman lokon por ĉiuj uzantoj"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Ŝalti GNOME-ŝelan etendaĵan deponejon"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Ĉeno konservanta la identigilon de gnome-online-account, uzatan por saluto"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalado de programaro"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instali elektitan programaron en la sistemon"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Elekti ĉiujn"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Elekti neniun"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "_Programaraj deponejoj"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "Ĝ_isdatigaj agordoj"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programaro"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Reen"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_Explore"
+msgstr "_Esplori"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "_Instalitaj"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "Ĝ_isdatigoj"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Serĉi"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:287 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Fonto"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Programaraj depenejoj"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "Ekzameni diskon"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "Retagordoj"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "Restartigi nun"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "Pli da informoj"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4504
+msgid "Local file"
+msgstr "Loka dosiero"
+
+#: lib/gs-app.c:4556
+msgid "Package"
+msgstr "Pako"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:412
+msgid "Pending"
+msgstr "Atendante"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:175 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:68
+msgid "Installed"
+msgstr "Instalita"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:165 src/gs-details-page.c:329
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "Instalante"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:171 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "Forigante"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Startiga reĝimo: ‘updates’ (ĝisdatigoj), ‘updated’ (ĝisdatigita), "
+"‘installed’ (instalita) aŭ ‘overview’ (superrigardo)"
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "REĜIMO"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr "Serĉi aplikaĵojn"
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "SERĈI"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr "Montri detalojn de aplikaĵo (uzante aplikaĵan ID-on)"
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr "Montri detalojn de aplikaĵo (uzante paknomon)"
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr "PAKNOMO"
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr "Instali la aplikaĵon (uzante aplikaĵan ID-on)"
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr "Malfermi lokan pakodosieron"
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "DOSIERNOMO"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"La speco de interago, kiun oni anticipas por ĉi tiu ago: ‘none’ (neniu), "
+"‘notify’ (sciigi), aŭ ‘full’ (plena)"
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr "Montri babilemajn sencimigajn informojn"
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr "Instalas iun ajn okazontan ĝisdatigon fone"
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr "Montri ĝisdatigajn agordojn"
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr "Ĉesigi la rulantan ekzemplon"
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferi lokajn dosierajn fontojn ol AppStream"
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "Montri versionumeron"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Kristjan SCHMIDT\n"
+"Daniel PUENTES\n"
+"Axel ROUSSEAU\n"
+"Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n"
+"Tirifto <tirifto@posteo.cz>"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:1891
+#, c-format
+msgid "About %s"
+msgstr "Pri %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr "Bona maniero por administri la programaron sur via sistemo."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:567
+msgid "Sorry! There are no details for that application."
+msgstr "Pardonon! Estas neniuj detaloj por ĉi tiu aplikaĵo."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:120
+msgid "Visit website"
+msgstr "Viziti la retpaĝaron"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:125
+msgid "Install…"
+msgstr "Instali…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:132 src/gs-updates-section.c:476
+msgid "Cancel"
+msgstr "Nuligi"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:139 src/gs-common.c:287 src/gs-page.c:273
+msgid "Install"
+msgstr "Instali"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:146
+msgid "Update"
+msgstr "Ĝisdatigi"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:150 src/gs-app-row.c:159 src/gs-page.c:434
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Forigi"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:277
+msgid "Device cannot be used during update."
+msgstr "Ne eblas uzi la aparaton dum ĝisdatigo."
+
+#: src/gs-app-row.c:470 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Necesas ekstraj permesoj"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:180
+msgid "Other"
+msgstr "Alia"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:185
+msgid "All"
+msgstr "Ĉiuj"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:189
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+# Mi ne certas, ĉu ĉi tiu povas esti pluralo. --Carmen
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:475
+#, c-format
+msgid "Featured %s"
+msgstr "Rekomenditaj %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Takso"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:58
+msgid "Name"
+msgstr "Nomo"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:930
+msgid "Extension Settings"
+msgstr "Etendaĵaj agordoj"
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Uzu etendaĵojn laŭ via propra risko. Se vi havas iujn ajn sistemajn "
+"problemojn, ni rekomendas al vi malŝalti ilin."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "Montri"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "Subkategoria filtromenuo"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "Ordigi laŭ"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "Subkategoria oridiga menuo"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Bonvolu enigi nombron de 1 ĝis %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr "Elektu aplikaĵon:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr "Operaciumaj ĝisdatigoj nun estas instalitaj"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr "Freŝdate instalitaj ĝisdatigojn nun ekzameneblas"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr "%s nun estas instalita"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+msgid "A restart is required for the changes to take effect."
+msgstr "Restartigo necesas por ke la ŝanĝoj efektiviĝu."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr "Aplikaĵo nun estas preta por uzo."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-common.c:638
+msgid "Restart"
+msgstr "Restartigi"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "Lanĉi"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr "Ĉu instali programaron de ekstera liveranto?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Ĉu ŝalti deponejon de ekstera liveranto?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s ne estas <a href=\"https://eo.wikipedia.org/wiki/Libera_programaro"
+"\">libera programaro</a>, kaj “%s” ĝin provizas."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "“%2$s” provizas %1$s."
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr "Necesas ŝalti ĉi tiun programaran deponejon por daŭrigi la instaladon."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Povus esti kontraŭleĝe instali aŭ uzi %s en kelkaj landoj."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Povus esti kontraŭleĝe instali aŭ uzi ĉi tiun kodekon en kelkaj landoj."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr "Ne averti denove"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr "Ŝalti kaj instali"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:440
+msgid "Detailed errors from the package manager follow:"
+msgstr "Jen detalaj eraroj de la pako-administrilo:"
+
+#: src/gs-common.c:459 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detaloj"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:624
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Instalis ĝisdatigon"
+msgstr[1] "Instalis ĝisdatigojn"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:629
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Restartigo necesas por ke ĝi efektiviĝas."
+msgstr[1] "Restartigo necesas por ke ili efektiviĝas."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:636 src/gs-update-monitor.c:119
+msgid "Not Now"
+msgstr "Ne nun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:59
+msgid "No cartoon violence"
+msgstr "Neniu kartuna perforto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "Cartoon characters in unsafe situations"
+msgstr "Kartunaj roluloj en nesekuraj situacioj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Kartunaj roluloj en agresa konflikto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Graphic violence involving cartoon characters"
+msgstr "Serioza perforto koncernante kartunaj roluloj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:70
+msgid "No fantasy violence"
+msgstr "Neniu fantazia perforto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Roluloj en nesekuraj situacioj facile distingeblaj de realeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Roluloj en agresa konflikto facile distingebla de realeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Serioza perforto facile distingebla de realeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "No realistic violence"
+msgstr "Neniu vivovera perforto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Modere vivoveraj roluloj en nesekuraj situacioj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Figurado de vivoveraj roluloj en agresa konflikto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Graphic violence involving realistic characters"
+msgstr "Serioza perforto koncernante vivoveraj roluloj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "No bloodshed"
+msgstr "Neniu sangoverŝo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "Unrealistic bloodshed"
+msgstr "Malvivovera sangoverŝo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Realistic bloodshed"
+msgstr "Vivovera sangoverŝo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Figurado de sangoverŝo kaj kripligo de korpopartoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:103
+msgid "No sexual violence"
+msgstr "Neniu seksperforto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Rape or other violent sexual behavior"
+msgstr "Seksperforto aŭ alia perforta seksa konduto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:112
+msgid "No references to alcohol"
+msgstr "Neniu priparolado de alkoholo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "References to alcoholic beverages"
+msgstr "Priparolado de alkoholaĵoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "Use of alcoholic beverages"
+msgstr "Uzado de alkoholaĵoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "No references to illicit drugs"
+msgstr "Neniu priparolado de malpermesitaj drogoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "References to illicit drugs"
+msgstr "Priparolado de malpermesitaj drogoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Use of illicit drugs"
+msgstr "Uzado de malpermesitaj drogoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "No references to tobacco products"
+msgstr "Neniu priparolado de tabakaĵoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr "Priparolado de tabakaĵoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "Use of tobacco products"
+msgstr "Uzado de tabakaĵoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:142
+msgid "No nudity of any sort"
+msgstr "Neniu nudeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Brief artistic nudity"
+msgstr "Nedaŭra arta nudeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr "Daŭra nudeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "No references to or depictions of sexual nature"
+msgstr "Neniu priparolado aŭ figurado seksa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "Provocative references or depictions"
+msgstr "Provoka priparolado aŭ figurado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Sexual references or depictions"
+msgstr "Seka priparolado aŭ figurado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr "Serioza seksa konduto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:163
+msgid "No profanity of any kind"
+msgstr "Neniu sakro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Mild or infrequent use of profanity"
+msgstr "Milda aŭ malofta uzado de sakro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr "Modera uzado de sakro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Strong or frequent use of profanity"
+msgstr "Forta aŭ ofta uzado de sakro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No inappropriate humor"
+msgstr "Neniu nedeca humuro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr "Senvoĉa humuro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgara aŭ baneja humuro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Mature or sexual humor"
+msgstr "Matura aŭ seksuma humuro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr "Neniu diskriminacia lingvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "Negativity towards a specific group of people"
+msgstr "Negativeco kontraŭ specifa grupo de homoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminacio kun la intenco kaŭzi emocian malprofiton"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Eksplika diskriminacio pro genro, sekseco, etno aŭ religio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:196
+msgid "No advertising of any kind"
+msgstr "Neniu reklamo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "Product placement"
+msgstr "Produkt-enmeto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Eksplika priparolado de specifaj markoj aŭ produktoj varmarkitaj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Uzantoj kuraĝiĝas aĉeti specifajn realajn aferojn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "No gambling of any kind"
+msgstr "Neniu vetludado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "Gambling on random events using tokens or credits"
+msgstr "Vetludado je hazardaj okazaĵoj uzante ĵetonojn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling using “play” money"
+msgstr "Vetludado uzante “ludan” monon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using real money"
+msgstr "Vetludado uzante realan monon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "No ability to spend money"
+msgstr "Neniu ebleco elspezi monon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "Users are encouraged to donate real money"
+msgstr "Uzantoj kuraĝiĝas donaci realan monon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:223
+msgid "Ability to spend real money in-app"
+msgstr "Ebleco elspezi realan monon enaplikaĵe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "No way to chat with other users"
+msgstr "Neniu maniero por babili kun aliaj uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "User-to-user interactions without chat functionality"
+msgstr "Uzanto-al-uzanto interago sen babilfunkcio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "Moderated chat functionality between users"
+msgstr "Kontrolata babilfunkcio inter uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nekontrolata babilfunkcio inter uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "No way to talk with other users"
+msgstr "Neniu maniero paroli kun aliaj uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nekontrolata aŭda aŭ videa babilfunkcio inter uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Neniu kunhavigado de sociaj retejaj uzantonomoj aŭ retpoŝtadresoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "Sharing social network usernames or email addresses"
+msgstr "Kunhavigado de sociaj retejaj uzantonomoj aŭ retpoŝtadresoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "No sharing of user information with third parties"
+msgstr "Neniu kunhavigado de uzanto-informoj kun eksteraj liverantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "Checking for the latest application version"
+msgstr "Kontrolante por la lasta version de la aplikaĵo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Kunhavigado de diagnozaj datumoj kiuj ne lasas al aliuloj identigi la uzanton"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr "Kunhavigado de informoj kiuj lasas al aliuloj identigi la uzanton"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:268
+msgid "No sharing of physical location with other users"
+msgstr "Neniu kunhavigado de fizika loko kun aliaj uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Sharing physical location with other users"
+msgstr "Kunhavigado de fizika loko kun aliaj uzantoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No references to homosexuality"
+msgstr "Neniu priparolado de samseksemeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "Indirect references to homosexuality"
+msgstr "Nerekta priparolado de samseksemeco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Kissing between people of the same gender"
+msgstr "Kisado inter samseksaj homoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Serioza seksa konduta inter samseksaj homoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "No references to prostitution"
+msgstr "Neniu priparolado de prostituo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "Indirect references to prostitution"
+msgstr "Nerekta priparolado de prostituo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Direct references to prostitution"
+msgstr "Rekta priparolado de prostituo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Serioza figurado de prostituo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "No references to adultery"
+msgstr "Neniu priparolado de adulto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "Indirect references to adultery"
+msgstr "Nerekta priparolado de adulto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references to adultery"
+msgstr "Rekta priparolado de adulto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr "Serioza figurado de adulto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:312
+msgid "No sexualized characters"
+msgstr "Neniu seksigita rolulo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:315
+msgid "Scantily clad human characters"
+msgstr "Malabunde vestigitaj homaj roluloj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Overtly sexualized human characters"
+msgstr "Nekaŝe seksigitaj homaj roluloj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+msgid "No references to desecration"
+msgstr "Neniu priparolado de malsanktigo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "Depictions of or references to historical desecration"
+msgstr "Figurado aŭ priparolado de historia malsanktigo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of modern-day human desecration"
+msgstr "Figurado de nunatempa homa malsanktigo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Serioza figurado de nunatempa malsanktigo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:333
+msgid "No visible dead human remains"
+msgstr "Neniu videbla homa kadavro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Visible dead human remains"
+msgstr "Videblaj homaj kadavroj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Korpopartoj de mortinto(j) kiuj daŭre estis en la naturo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Serioza figurado de malsanktigo de homaj korpoj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No references to slavery"
+msgstr "Neniu priparolado de sklaveco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "Depictions of or references to historical slavery"
+msgstr "Figurado aŭ priparolado de historia sklaveco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of modern-day slavery"
+msgstr "Figurado de nunatempa sklaveco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Serioza figurado de nunatempa sklaveco"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:406
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:540
+msgid "General"
+msgstr "Ĝenerala"
+
+#: src/gs-content-rating.c:549
+msgid "ALL"
+msgstr "ĈIUJ"
+
+#: src/gs-content-rating.c:553
+msgid "Adults Only"
+msgstr "Nur plenkreskuloj"
+
+#: src/gs-content-rating.c:555
+msgid "Mature"
+msgstr "Matura"
+
+#: src/gs-content-rating.c:557
+msgid "Teen"
+msgstr "Adoleska"
+
+#: src/gs-content-rating.c:559
+msgid "Everyone 10+"
+msgstr "Ĉiuj 10+"
+
+#: src/gs-content-rating.c:561
+msgid "Everyone"
+msgstr "Ĉiuj"
+
+#: src/gs-content-rating.c:563
+msgid "Early Childhood"
+msgstr "Junaj infanoj"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr "Aplikaĵo"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s petas aldonan subtenon de dosierformo."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr "Necesas aldonaj MIME-provizantoj"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s petas aldonajn tiparojn."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr "Necesas aldonaj tiparoj"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s petas aldonajn plurmediajn kodekojn."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr "Necesas aldonaj plurmediaj kodekoj"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s petas aldonajn presilajn pelilojn."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr "Necesas aldonaj presilaj peliloj"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s petas aldonajn pakojn."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr "Necesas aldonaj pakoj"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr "Serĉi en Programaro"
+
+#: src/gs-details-page.c:324
+msgid "Removing…"
+msgstr "Forigante…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:343
+msgid "Pending installation…"
+msgstr "Atendante instaladon…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:350
+msgid "Pending update…"
+msgstr "Atendante ĝisdatigon…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:710
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Ĉi tiu aplikaĵo nur uzeblas kiam ekzistas aktiva interreta konekto."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:855 src/gs-details-page.c:872
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.c:70
+msgid "_Install"
+msgstr "_Instali"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:886 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "_Instali…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:935
+msgid "_Launch"
+msgstr "_Lanĉi"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:960 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Fo_rigi"
+
+#: src/gs-details-page.c:991 src/gs-update-dialog.c:92
+msgid "Network"
+msgstr "Reto"
+
+#: src/gs-details-page.c:991 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr "Povas komuniki perrete"
+
+#: src/gs-details-page.c:992 src/gs-update-dialog.c:93
+msgid "System Services"
+msgstr "Sistemaj servoj"
+
+#: src/gs-details-page.c:992 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr "Povas atingi D-Bus-ajn servojn en la sistema buso"
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr "Seancaj servoj"
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr "Povas atingi D-Bus-ajn servojn en la seanca buso"
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "Aparatoj"
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr "Povas atingi sistemajn aparatajn dosierojn"
+
+#: src/gs-details-page.c:995 src/gs-details-page.c:996
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+msgid "Home folder"
+msgstr "Hejmdosierujo"
+
+#: src/gs-details-page.c:995 src/gs-details-page.c:997
+#: src/gs-details-page.c:999 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr "Povas vidi, redakti kaj krei dosierojn"
+
+#: src/gs-details-page.c:996 src/gs-details-page.c:998
+#: src/gs-details-page.c:1000 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr "Povas vidi dosierojn"
+
+#: src/gs-details-page.c:997 src/gs-details-page.c:998
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+msgid "File system"
+msgstr "Dosiersistemo"
+
+#: src/gs-details-page.c:999 src/gs-details-page.c:1000
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+msgid "Downloads folder"
+msgstr "Elŝut-dosierujo"
+
+#: src/gs-details-page.c:1001 src/gs-update-dialog.c:102
+msgid "Settings"
+msgstr "Agordoj"
+
+#: src/gs-details-page.c:1001 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr "Povas vidi kaj ŝanĝi iun ajn agordon"
+
+#: src/gs-details-page.c:1002 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr "Malnova vidiga sistemo"
+
+#: src/gs-details-page.c:1002 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr "Uzas malnovan, nesekuran vidigan sistemon"
+
+#: src/gs-details-page.c:1003 src/gs-update-dialog.c:104
+#, fuzzy
+#| msgid "Sandboxed"
+msgid "Sandbox escape"
+msgstr "Sablujigita"
+
+#: src/gs-details-page.c:1003 src/gs-update-dialog.c:104
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+
+#: src/gs-details-page.c:1018
+msgid "This application is fully sandboxed."
+msgstr "Ĉi tiu aplikaĵo estas entute sablujigita."
+
+#: src/gs-details-page.c:1026
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Ne eblas precizigi, kiujn partojn de la sistemo ĉi tiu aplikaĵo atingas. Ĉi "
+"tio estas tipa por malnovaj aplikaĵoj."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1185
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nekonata"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1198
+msgctxt "updated"
+msgid "Never"
+msgstr "Neniam"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1251
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nekonata"
+
+#: src/gs-details-page.c:1304
+msgid "Low"
+msgstr "Malalta"
+
+#: src/gs-details-page.c:1306
+msgid "Medium"
+msgstr "Meza"
+
+#: src/gs-details-page.c:1308
+msgid "High"
+msgstr "Alta"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1310 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "Nekonata"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1648
+msgid "You need internet access to write a review"
+msgstr "Vi bezonas interretan aliron por skribi recenzon"
+
+#: src/gs-details-page.c:1834 src/gs-details-page.c:1850
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Ne eblas trovi “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2428
+msgid "Public domain"
+msgstr "Publika havaĵo"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2431
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://eo.wikipedia.org/wiki/Publika_hava%C4%B5o"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2438
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.eo"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2448 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Libera programaro"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2505
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Uzantoj devas observi la sekvan permesilon:"
+msgstr[1] "Uzantoj devas observi la sekvajn permesilojn:"
+
+#: src/gs-details-page.c:2532 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Pli da informoj"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Paĝo de detaloj"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Elŝutanta"
+
+#: src/gs-details-page.ui:252 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Nuligi"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Ĝ_isdatigi"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Aldoni klavkombinon"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Forigi klavko_mbinon"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Neniuj ekrankopioj"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Programara deponejo inkluzivita"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ĉi tiu aplikaĵo inkluzivas programaran deponejon, kiu provizas ĝisdatigojn, "
+"kaj ankaŭ aliron al aliaj programaroj."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Neniu programara deponejo inkluzivita"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ĉi tiu aplikaĵo ne inkluzivas programaran deponejon. Ĝi ne ĝisdatiĝos al "
+"novaj versioj."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Ĉi tiun programaron jam via distribuo provizas kaj oni devus ne anstataŭigi "
+"ĝin."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Programara deponejo identigita"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Aldonado de tiu programara deponejo donos al vi aliron al kromaj programaroj "
+"kaj ĝisdatigoj."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Nur uzi programarajn deponejojn, kiujn vi fidas."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Retejo"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donaci"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Tradukita al via lingvo"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentado"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Eldona aktiveco"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Sistema integrigo"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Sablujigita"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:102
+msgid "Channel"
+msgstr "Kanalo"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versio"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Aĝa takso"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permesoj"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Ĝisdatigita"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorio"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Instala grando"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Elŝuta grando"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Verkanto"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Permesilo"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Libera"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Mallibera"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:317
+msgid "Add-ons"
+msgstr "Aldonaĵoj"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "La elektitajn aldonaĵojn oni instalas kune kun la aplikaĵo."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recenzoj"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Skribi recenzon"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Montri pli"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Ĉi tiu signifas, ke oni povas libere ruli, kopii, distribui, studi kaj "
+"modifi la programaron."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Mallibera programaro"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Ĉi tiu signifas ke individuo aŭ firmao posedas la programaron. Ofte ekzistas "
+"limigoj je ĝia uzo kaj ofte oni ne povas aliri la fontkodon."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Nekonata programara permesilo"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Ne konas la permesilon de ĉi tiu programaro."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "La aplikaĵo tiel taskiĝis ĉar ĝi enhavas:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Neniuj detaloj disponeblis por ĉi tiu takso."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:134
+msgid " and "
+msgstr " kaj "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:137
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:163
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Disponeblaj tiparoj por la %s skribsistemo"
+msgstr[1] "Disponeblaj tiparoj por la %s skribsistemoj"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:171
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Disponeblaj programaroj por %s"
+msgstr[1] "Disponeblaj programaroj por %s"
+
+#: src/gs-extras-page.c:213
+msgid "Unable to Find Requested Software"
+msgstr "Ne eblas trovi la petitan programaron"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:318
+#, c-format
+msgid "%s not found"
+msgstr "%s ne trovita"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:322
+msgid "on the website"
+msgstr "en la retejo"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:329
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Neniu aplikaĵo disponeblas, kiu provizas la dosieron %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:333 src/gs-extras-page.c:344 src/gs-extras-page.c:355
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informon pri %s, kaj ankaŭ elektojn por akiri mankantajn aplikaĵojn, oni "
+"povus trovi %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:362
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Neniu aplikaĵo disponeblas por %s subteno."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:351
+#, c-format
+msgid "%s is not available."
+msgstr "%s ne disponeblas."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:366
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informon pri %s, kaj ankaŭ elektojn por akiri ĝustan aplikaĵon por tiu ĉi "
+"formo, oni povus trovi %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:373
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Neniu tiparo disponeblas por la %s skribsistema subteno."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:377
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informon pri %s, kaj ankaŭ elektojn por akiri kromajn tiparojn, oni povas "
+"trovi %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:384
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Neniu aldonaĵa kodeko disponeblas por la formo %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:388
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informon pri %s, kaj ankaŭ elektojn por akiri ĝustan kodekon por tiu ĉi "
+"formo, oni povus trovi %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:395
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Neniu Plasma-rimedoj disponeblas por subteno de %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:399
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informon pri %s, kaj ankaŭ elektojn por akiri kromajn Plasma-rimedojn, oni "
+"povus trovi %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:406
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Neniu presila pelilo disponeblas por %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:410
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informon pri %s, kaj ankaŭ elektojn por akiri ĝustan pelilon por tiu ĉi "
+"presilo, oni povus trovi %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:454
+msgid "this website"
+msgstr "tiun ĉi retejon"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:458
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Bedaŭrinde, la %s kiun vi serĉis ne troveblis. Bonvolu vidi %s por pli da "
+"informoj."
+msgstr[1] ""
+"Bedaŭrinde, la %s kiujn vi serĉis ne troveblis. Bonvolu vidi %s por pli da "
+"informoj."
+
+#: src/gs-extras-page.c:526 src/gs-extras-page.c:582 src/gs-extras-page.c:621
+msgid "Failed to find any search results"
+msgstr "Malsukcesis trovi serĉrezultojn"
+
+#: src/gs-extras-page.c:809
+#, c-format
+msgid "%s file format"
+msgstr "%s dosierformo"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Paĝo de kodekoj"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Bonvenon"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Bonvenon al Programaro"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Programaro lasas al vi facile instali la programaron kiun vi bezonas. Vidu "
+"niajn rekomendojn, esploru la kategoriojn, aŭ serĉu la aplikaĵojn."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Ek al aĉetado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr "Forigita"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalita"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "Ĝisdatigita"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nekonata"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:110 src/gs-review-row.c:64 src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%-e-a de %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historio"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Sistemaj aplikaĵoj"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Paĝo de instalitaj programoj"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr "Elŝutante programaran katalogon"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Paĝo de ŝargado"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Startante…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Paĝo de kontrolado"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Neniu kontrolenda recenzo"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:83
+msgid "system"
+msgstr "sistemo"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:86
+msgid "user"
+msgstr "uzanto"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:107 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Branĉo"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formo"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalcelo"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Pli…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:566
+msgid "Recommended Audio & Video Applications"
+msgstr "Rekomenditaj aŭdividaj aplikaĵoj"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:571
+msgid "Recommended Games"
+msgstr "Rekomenditaj ludoj"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:576
+msgid "Recommended Graphics Applications"
+msgstr "Rekomenditaj grafik-aplikaĵoj"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:581
+msgid "Recommended Productivity Applications"
+msgstr "Rekomenditaj produktemecaj aplikaĵoj"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:929 src/gs-repos-dialog.c:828
+msgid "Access additional software from selected third party sources."
+msgstr "Atingi ceteran programaron de elektitaj eksteraj liverantaj fontoj."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:933 src/gs-repos-dialog.c:832
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Ĉi tiu programaro estas mallibera kaj tial havas limigojn por sia uzado, "
+"kunhavigado, kaj atingo al fontkodo."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:938 src/gs-repos-dialog.c:837
+msgid "Find out more…"
+msgstr "Lerni pli…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:946 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Ŝalti"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Superrigarda paĝo"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Ĉu ŝalti deponejon de ekstera liveranto?"
+
+#: src/gs-overview-page.ui:83
+msgid "Featured Applications"
+msgstr "Rekomenditaj aplikaĵoj"
+
+#: src/gs-overview-page.ui:116
+msgid "Previous"
+msgstr "Antaŭa"
+
+#: src/gs-overview-page.ui:141
+msgid "Next"
+msgstr "Sekva"
+
+#: src/gs-overview-page.ui:163
+msgid "Categories"
+msgstr "Kategorioj"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:193
+msgid "Editor’s Picks"
+msgstr "Elektoj de redaktisto"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:219
+msgid "Recent Releases"
+msgstr "Freŝdataj eldonoj"
+
+#: src/gs-overview-page.ui:289
+msgid "No Application Data Found"
+msgstr "Neniu aplikaĵa datumo trovita"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:264
+#, c-format
+msgid "Prepare %s"
+msgstr "Prepari %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:403
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Ĉu vi certe volas forigi la deponejon de %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:407
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Ĉiuj aplikaĵoj de %s estos forigitaj, kaj vi devos reinstali la deponejon "
+"por uzi ilin denove."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:415
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Ĉu vi certe volas forigi %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:418
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s estos forigita, kaj se vi denove bezonas ĝin vi devos reinstali ĝin."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:52 src/gs-summary-tile.c:96
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalita)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Ĝisdatigaj agordoj"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Aŭtomataj ĝisdatigoj"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Aŭtomataj ĝisdatigoj malŝaltiĝas se uzante porteblan aŭ limigan konekton."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Aŭtomataj ĝisdatigaj sciigoj"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Montri sciigojn kiam ĝisdatigoj aŭtomate instaliĝis."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:114
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Kelkaj aktuale instalitaj programaroj ne kongruas kun %s. Se vi daŭrigas, la "
+"sekvaj aŭtomate foriĝos dum altgradigado:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Malkongrua programaro"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Daŭrigi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:97
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplikaĵo instalita"
+msgstr[1] "%u aplikaĵoj instalitaj"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:104
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u aldonaĵo instalita"
+msgstr[1] "%u aldonaĵoj instalitaj"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:112
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplikaĵo"
+msgstr[1] "%u aplikaĵoj"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:118
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u aldonaĵo"
+msgstr[1] "%u aldonaĵoj"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s kaj %s estas instalitaj"
+msgstr[1] "%s kaj %s estas instalitaj"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Ĉu forigi “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Ĉu malŝalti “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programaroj, kiuj instaliĝis el ĉi tiu deponejo, ne plu ricevos ĝisdatigojn, "
+"inkluzive sekureco-flikaĵojn."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Malŝalti"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:741
+msgid "the operating system"
+msgstr "la operaciumo"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:807 src/gs-repos-dialog.c:843
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Ĉi tiuj deponejoj kompletigas la normajn programarojn provizataj de %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:825
+msgid "Third Party Repositories"
+msgstr "Deponejoj de eksteraj liverantoj"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Neniu cetera deponejo"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "Ŝ_alti"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Fo_rigi…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Malŝalti…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Ŝaltante"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Malŝaltante"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Ŝaltita"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Malŝaltita"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "Malŝatas ĝin"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "Neŝatas ĝin"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "Estas en ordo"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "Ŝatas ĝin"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "Amas ĝin"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr "Bonvolu pli atentas vian recenzon"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr "Bonvolu elekti steltakson"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr "La resumo estas tro mallonga"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr "La resumo estas tro longa"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr "La priskribo estas tro mallonga"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr "La priskribo estas tro longa"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Sendi recenzon"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Sendi"
+
+#: src/gs-review-dialog.ui:108
+msgid "Summary"
+msgstr "Resumo"
+
+#: src/gs-review-dialog.ui:118
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Donu mallongan recenzon de via recenzo, ekzemple: “Bona aplikaĵo, mi "
+"rekomendus ĝin”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:143
+msgctxt "app review"
+msgid "Review"
+msgstr "Recenzo"
+
+#: src/gs-review-dialog.ui:153
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Kion vi trovas pri la aplikaĵo? Klopodu doni kialojn por viaj opinioj."
+
+#: src/gs-review-dialog.ui:185
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Eltrovu, kiuj datumoj sendiĝas en nia <a href=\"https://odrs.gnome.org/"
+"privacy\">privateco politiki</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "totalaj taksoj"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:222
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Vi povas raporti recenzojn por ofenda, malafabla, aŭ diskriminacia konduto."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:227
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "Kiam raportita, recenzo estos kaŝita ĝis administranto kontrolis ĝin."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:241
+msgid "Report Review?"
+msgstr "Ĉu raporti recenzon?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:245
+msgid "Report"
+msgstr "Raporti"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Ĉu ĉi tiu recenzo estis utila al vi?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Jes"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ne"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Pli-malpli"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Raporti…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Forigi…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr "Ne trovis ekrankopion"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr "Malsukcesis ŝarĝi bildon"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:381
+msgid "Screenshot size not found"
+msgstr "Grando de ekrankopio ne trovita"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:411
+msgid "Could not create cache"
+msgstr "Malsukcesis krei kaŝmemoron"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:471
+msgid "Screenshot not valid"
+msgstr "Nevalida ekrankopio"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:486
+msgid "Screenshot not available"
+msgstr "Ekrankopio ne disponeblas"
+
+#: src/gs-screenshot-image.c:544
+msgid "Screenshot"
+msgstr "Ekrankopio"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:142
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u kongruo pli"
+msgstr[1] "%u pli da kongruoj"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Serĉa paĝo"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Neniu aplikaĵo trovita"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:877 src/gs-shell.c:882 src/gs-shell.c:897 src/gs-shell.c:901
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:948
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Ne eblas elŝuti mikroprogramarajn ĝisdatigojn de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:954
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Ne eblas elŝuti ĝisdatigojn de %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:961 src/gs-shell.c:1006
+msgid "Unable to download updates"
+msgstr "Ne eblas elŝuti ĝisdatigojn"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:967
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Ne eblas elŝuti ĝisdatigojn: interreta aliro necesis sed ne disponeblis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:976
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Ne eblas elŝuti ĝisdatigojn de %s: nesufiĉa diskospaco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:981
+msgid "Unable to download updates: not enough disk space"
+msgstr "Ne eblas elŝuti ĝisdatigojn: nesufiĉa diskospaco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:988
+msgid "Unable to download updates: authentication was required"
+msgstr "Ne eblas elŝuti ĝisdatigojn: aŭtentigo necesis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:993
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Ne eblas elŝuti ĝisdatigojn: aŭtentigo nevalidis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:998
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Ne eblas elŝuti ĝisdatigojn: vi ne havas permeson instali programaron"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1009
+msgid "Unable to get list of updates"
+msgstr "Ne eblas akiri liston de ĝisdatigoj"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1052
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Ne eblas instali %s ĉar elŝuto de %s malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1058
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Ne eblas instali %s ĉar elŝuto malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1071
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Ne eblas instali %s ĉar rultempa medio %s ne disponeblas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1077
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Ne eblas instali %s ĉar ĝi ne estas subtenita"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1084
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Ne eblas instali: interreta aliro necesis sed ne disponeblis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1090
+msgid "Unable to install: the application has an invalid format"
+msgstr "Ne eblas instali: la aplikaĵo havas nevalidan formon"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1095
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Ne eblas instali %s: nesufiĉa diskospaco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1102
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Ne eblas instali %s: aŭtentigo necesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Ne eblas instali %s: aŭtentigo nevalidis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1116
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Ne eblas instali %s: vi ne havas permeson instali programaron"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1124
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Ne eblas instali %s: doma elektro necesas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1131
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Ne eblas instali %s: bateria nivelo tro malalta"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1140
+#, c-format
+msgid "Unable to install %s"
+msgstr "Ne eblas instali %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1187
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Ne eblas ĝisdatigi %s el %s ĉar elŝuto malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1194
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Ne eblas ĝisdatigi %s ĉar elŝuto malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1201
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Ne eblas instali ĝisdatigojn el %s ĉar elŝuto malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1205
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Ne eblas instali ĝisdatigojn ĉar elŝuto malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1211
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Ne eblas ĝisdatigi: interreta aliro necesis sed ne disponeblis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1221
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Ne eblas ĝisdatigi %s: nesufiĉa diskospaco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1226
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Ne eblas instali ĝisdatigojn: nesufiĉa diskospaco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1236
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Ne eblas ĝisdatigi %s: aŭtentigo necesis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1241
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Ne eblas instali ĝisdatigojn: aŭtentigo necesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1250
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Ne eblas ĝisdatigi %s: aŭtentigo nevalidis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1255
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Ne eblas instali ĝisdatigojn: aŭtentigo nevalidis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1264
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Ne eblas ĝisdatigi %s: vi ne havas permeson ĝisdatigi programaron"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1270
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Ne eblas instali ĝisdatigojn: vi ne havas permeson ĝisdatigi programaron"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1280
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Ne eblas ĝisdatigi %s: doma elektro necesas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Ne eblas instali ĝisdatigojn: doma elektro necesas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1295
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Ne eblas ĝisdatigi %s: bateria nivelo tro malalta"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1301
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Ne eblas instali ĝisdatigojn: bateria nivelo tro malalta"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1312
+#, c-format
+msgid "Unable to update %s"
+msgstr "Ne eblas ĝisdatigi %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1315
+#, c-format
+msgid "Unable to install updates"
+msgstr "Ne eblas instali ĝisdatigojn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Ne eblas altgradigi de %s al %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1363
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Ne eblas altgradigi al %s ĉar elŝuto malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1372
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "Ne eblas altgradigi al %s: interreta aliro necesis sed ne disponeblis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1381
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Ne eblas altgradigi al %s: nesufiĉa diskospaco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1389
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Ne eblas altgradigi al %s: aŭtentigo necesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1396
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Ne eblas altgradigi al %s: aŭtentigo nevalidis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1403
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Ne eblas algradigi al %s: vi ne havas permeson ĝisdatigi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1410
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Ne eblas altgradigi al %s: doma elektro necesas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1417
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Ne eblas altgradigi al %s: bateria nivelo tro malalta"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1426
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Ne eblas algradigi al %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1464
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Ne eblas forigi %s: aŭtentigo necesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Ne eblas forigi %s: aŭtentigo nevalidis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1476
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Ne eblas forigi %s: vi ne havas permeson forigi programaron"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1483
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Ne eblas forigi %s: doma elektro necesas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1490
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Ne eblas forigi %s: bateria nivelo tro malalta"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1502
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Ne eblas forigi %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1545
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Ne eblas lanĉi %s: %s ne estas instalita"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1552 src/gs-shell.c:1603 src/gs-shell.c:1644
+#: src/gs-shell.c:1692
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Nesufiĉa diskospaco — liberu iom da spaco kaj provu denove"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1563 src/gs-shell.c:1614 src/gs-shell.c:1655
+#: src/gs-shell.c:1726
+msgid "Sorry, something went wrong"
+msgstr "Pardonon, io fiaskis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1595
+msgid "Failed to install file: not supported"
+msgstr "Malsukcesis instali dosieron: ne subtenita"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1599
+msgid "Failed to install file: authentication failed"
+msgstr "Malsukcesis instali dosieron: aŭtentigo malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1636
+msgid "Failed to install: not supported"
+msgstr "Malsukcesis instali: ne subtenita"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1640
+msgid "Failed to install: authentication failed"
+msgstr "Malsukcesis instali: aŭtentigo malsukcesis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1686
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Ne eblas kontakti %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1701
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s devas esti restartigita por uzi la novajn kromprogramojn."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1706
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Ĉi tiu aplikaĵo devas esti restartigita por uzi la novajn kromprogramojn."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1713
+msgid "AC power is required"
+msgstr "Doma elektro necesas"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1717
+msgid "The battery level is too low"
+msgstr "Bateria nivelo tro malalta"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "Fonto: %s"
+
+#: src/gs-summary-tile.c:101
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instalante)"
+
+#: src/gs-summary-tile.c:106
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Forigante)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr "Fo_rigi ĉiujn"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:187
+msgid "No update description available."
+msgstr "Neniu ĝisdatiga priskribo disponeblas."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:291
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalita je %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:311
+msgid "Installed Updates"
+msgstr "Instalitaj ĝisdatigoj"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:527
+msgid "Additions"
+msgstr "Aldonoj"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:531
+msgid "Removals"
+msgstr "Forigoj"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:535
+msgid "Updates"
+msgstr "Ĝisdatigoj"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:539
+msgid "Downgrades"
+msgstr "Malpromocioj"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Neniu ĝisdatigo instaliĝis sur ĉi tiu sistemo."
+
+#: src/gs-update-monitor.c:107
+msgid "Security Updates Pending"
+msgstr "Okazonte sekurecaj ĝisdatigoj"
+
+#: src/gs-update-monitor.c:108
+msgid "It is recommended that you install important updates now"
+msgstr "Estas rekomendita, ke vi instalu la gravajn ĝisdatigojn nun"
+
+#: src/gs-update-monitor.c:111
+msgid "Restart & Install"
+msgstr "Restartigi kaj instali"
+
+#: src/gs-update-monitor.c:115
+msgid "Software Updates Available"
+msgstr "Programaraj ĝisdatigoj disponeblas"
+
+#: src/gs-update-monitor.c:116
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Gravaj operaciumaj kaj aplikaĵaj ĝisdatigoj pretas por instalado"
+
+#: src/gs-update-monitor.c:120
+msgid "View"
+msgstr "Vidi"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:228
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplikaĵo ĝisdatigita — restartigo necesas"
+msgstr[1] "%u aplikaĵoj ĝisdatigitaj — restartigo necesas"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:234
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplikaĵo ĝisdatigita"
+msgstr[1] "%u aplikaĵoj ĝisdatigitaj"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:245
+#, c-format
+msgid "%s has been updated."
+msgstr "%s ĝisdatiĝis."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:248
+msgid "Please restart the application."
+msgstr "Bonvolu restartigi la aplikaĵon."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:256
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s kaj %s ĝisdatiĝis."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:262 src/gs-update-monitor.c:281
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikaĵo bezonas restartigo."
+msgstr[1] "%u aplikaĵoj bezonas restartigo."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:274
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inkluzivante %s, %s kaj %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:515 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Operaciumaj ĝisdatigoj ne plu disponeblas"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:517
+msgid "Upgrade to continue receiving security updates."
+msgstr "Altgradigu por ricevi sekurecajn ĝisdatigojn."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:572
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Nova versio de %s disponeblas por instali"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:576
+msgid "Software Upgrade Available"
+msgstr "Programara altgradigo disponeblas"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:965
+msgid "Software Updates Failed"
+msgstr "Programaraj ĝisdatigoj malsukcesis"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:967
+msgid "An important OS update failed to be installed."
+msgstr "Instalado de grava ĝisdatigo por la operaciumo malsukcesis."
+
+#: src/gs-update-monitor.c:968
+msgid "Show Details"
+msgstr "Montri detalojn"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:991
+msgid "System Upgrade Complete"
+msgstr "Sistema altgradigo plenumita"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:996
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Bonvenon al %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1002
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Programara ĝisdatigo instalita"
+msgstr[1] "Programaraj ĝisdatigoj instalitaj"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Instalis gravan operaciuman ĝisdatigon."
+msgstr[1] "Instalis gravajn operaciumajn ĝisdatigojn."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1017
+msgctxt "updates"
+msgid "Review"
+msgstr "Ekzameni"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1065
+msgid "Failed To Update"
+msgstr "Malsukcesis ĝisdatigi"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1071
+msgid "The system was already up to date."
+msgstr "La sistemo jam estis ĝisdata."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1076
+msgid "The update was cancelled."
+msgstr "La ĝisdatigo estis nuligita."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1082
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Interreta aliro necesis sed ne disponeblis. Bonvolu certigi ke vi havas "
+"interretan aliron kaj provu denove."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1088
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Estis sekurecaj problemoj koncerne al la ĝisdatigo. Bonvolu konsulti vian "
+"programaran provizanton por pli da detaloj."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1094
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Ne estis sufiĉa diskospaco. Bonvolu liberu iom da spaco kaj provu denove."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1099
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Ni pardonpetas: la ĝisdatigo malsukcesis instali. Bonvolu atendi por alia "
+"ĝisdatigo kaj provu denove. Se la problemo restas, kontaktu vian programaran "
+"provizanton."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "Hieraŭ, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "Hieraŭ, %l:%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "Antaŭ du tagoj"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "Antaŭ tri tagoj"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "Antaŭ kvar tagoj"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "Antaŭ kvin tagoj"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "Antaŭ ses tagoj"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "Antaŭ unu semajno"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "Antaŭ du semajnoj"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr "Serĉante novajn ĝisdatigojn…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr "Agordante ĝisdatigojn…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr "(Ĉi tio povas esti longdaŭra)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr "Laste kontrolita: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s ne plu estas subtenita."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr "Via operaciumo ne plu estas subtenita."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr "Ĉi tiu signifas, ke vi ni ricevos sekurecajn ĝisdatigojn."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Ni rekomendas al vi altgradigi al pli freŝdata versio."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+msgid "Charges May Apply"
+msgstr "Povas kosti ion"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Kontrolado pri ĝisdatigoj uzante porteblan larĝkapacitan konekton povus "
+"kosti ion."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+msgid "Check _Anyway"
+msgstr "Kontroli _tamen"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "Neniu reto"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr "Interreta aliro necesas por kontroli pri ĝisdatigoj."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1340
+msgid "Checking…"
+msgstr "Kontrolante…"
+
+#: src/gs-updates-page.c:1353
+msgid "Check for updates"
+msgstr "Kontroli pri ĝisdatigoj"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Paĝo de ĝisdatigoj"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Programaro estas ĝisdata"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Kontrolado pri ĝisdatigoj uzante porteblan larĝkapacitan konekton povus "
+"kosti ion"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Kontroli tamen"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Enretigu por kontroli pri ĝisdatigoj"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Retagordoj"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Ĝisdatigoj aŭtomate mastrumiĝas"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:278
+msgid "Restart & Update"
+msgstr "Restartigi kaj ĝisdatigi"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:284
+msgid "Update All"
+msgstr "Ĝisdatigi ĉiujn"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:415
+msgid "Integrated Firmware"
+msgstr "Integrita mikroprogramo"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:419
+msgid "Requires Restart"
+msgstr "Bezonas restartigon"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:423
+msgid "Application Updates"
+msgstr "Aplikaĵaj ĝisdatigoj"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:427
+msgid "Device Firmware"
+msgstr "Aparata mikroprogramo"
+
+#: src/gs-updates-section.c:455 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Elŝuti"
+
+#: src/gs-upgrade-banner.c:64
+msgid "_Restart Now"
+msgstr "_Restartigi nun"
+
+#: src/gs-upgrade-banner.c:66
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Instalos ĝisdatigojn post al restartigo de la komputilo."
+
+#: src/gs-upgrade-banner.c:72
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Ni rekomendas al vi sekurkopii viajn datumojn kaj dosierojn antaŭ ol "
+"altgradigi."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:87
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s nun estas disponebla"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:97
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Atendante por elŝutado de %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:107
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Elŝutante %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:118
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s estas preta por instali"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Granda altgradigo, kun novaj funkcioj kaj plibonigoj."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Lernu pli"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Aldoni, forigi aŭ ĝisdatigi programaron sur ĉi tiu komputilo"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Ĝisdatigoj;Altgradigo;Fontoj;Deponejoj;Agordoj;Instali;Malinstali;Programo;"
+"Programaro;Aplikaĵo;Butiko;"
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Kreado kaj redaktado de aŭdaĵo"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Muzikludiloj"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Sencimigiloj"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Programadaj medioj"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Artefarita intelekto"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomio"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Ĥemio"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Lingvoj"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematiko"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotteĥniko"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Batalo"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventuro"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkado"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokoj"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tabulo"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Karto"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Imitiloj"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Infanoj"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logiko"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rolludo"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sportoj"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategio"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafiko"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografio"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skanado"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektora grafiko"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Vidigilo"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendaro"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Datumbazo"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Financo"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Dokumentoredaktilo"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tiparoj"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodekoj"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Enigaj fontoj"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Lingvo-pakoj"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Ŝel-etendaĵoj"
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Asimilado"
+
+#: plugins/core/gs-desktop-common.c:212
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Aparataraj peliloj"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Babilo"
+
+#: plugins/core/gs-desktop-common.c:233
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Novaĵoj"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Retaj foliumiloj"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Tekstredaktiloj"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Ĉiuj"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Rekomenditaj"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Arto"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografio"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Bildrakontoj"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fikcio"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Sano"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historio"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Vivostilo"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politiko"
+
+#: plugins/core/gs-desktop-common.c:289
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sportoj"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:299
+msgid "Audio & Video"
+msgstr "Aŭdaĵo kaj video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:302
+msgid "Developer Tools"
+msgstr "Programiloj"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:305
+msgid "Education & Science"
+msgstr "Edukado kaj scienco"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:308
+msgid "Games"
+msgstr "Ludoj"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:311
+msgid "Graphics & Photography"
+msgstr "Grafiko kaj fotografio"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:314
+msgid "Productivity"
+msgstr "Produktemeco"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:320
+msgid "Communication & News"
+msgstr "Komunikado kaj novaĵo"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:323
+msgid "Reference"
+msgstr "Referenco"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:326
+msgid "Utilities"
+msgstr "Utilaĵoj"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "Operaciumaj ĝisdatigoj"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr "Inkluzivas rendimentajn, stabilecajn kaj sekurecajn plibonigojn."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr "Elŝutante rekomenditajn bildojn…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:561
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:564
+msgid "An Endless OS update with new features and fixes."
+msgstr "Ĝisdatigo de Endless OS kun novaj funkcioj kaj cimriparoj."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:825
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS ĝisdatigservo ne povis elŝuti kaj apliki la ĝisdatigon."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:139
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Programara AppStream sistema instalilo"
+
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "Failed to parse command line arguments"
+msgstr "Malsukcesis interpreti komandliniajn argumentojn"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:148
+msgid "You need to specify exactly one filename"
+msgstr "Vi devas specifi precize unu dosiernomon"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:155
+msgid "This program can only be used by the root user"
+msgstr "Nur la uzanto \"root\" rajtas uzi ĉi tiun programon"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:163
+msgid "Failed to validate content type"
+msgstr "Malsukcesis validigi enhavespecon"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:173
+msgid "Failed to copy"
+msgstr "Malsukcesis kopii"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:235
+msgid "Downloading extra metadata files…"
+msgstr "Elŝutante ekstrajn metadatumajn dosierojn…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "Elŝutante informojn pli altgradigo…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Altgradigi por la plej freŝdataj funkcioj, kaj rendimentaj kaj stabilecaj "
+"plibonigoj."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak-subteno"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak estas framo por labortablaj aplikaĵoj sur Linukso"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:861
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Prenante Flatpak-metadatumojn por %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:135
+#, c-format
+msgid "%s Device"
+msgstr "%s aparato"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:140
+#, c-format
+msgid "%s System"
+msgstr "%s sistemo"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:145
+#, c-format
+msgid "%s Embedded Controller"
+msgstr "%s integrita kontrolilo"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:150
+#, c-format
+msgid "%s ME"
+msgstr "%s ME"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:155
+#, c-format
+msgid "%s Corporate ME"
+msgstr "%s korporacia ME"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:160
+#, c-format
+msgid "%s Consumer ME"
+msgstr "%s konsumanta ME"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:166
+#, c-format
+msgid "%s Controller"
+msgstr "%s kontrolilo"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:172
+#, c-format
+msgid "%s Thunderbolt Controller"
+msgstr "%s Thunderbolt-kontrolilo"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:669
+msgid "Downloading firmware update signature…"
+msgstr "Elŝutante mikroprograman ĝisdatigan subskrobon…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:710
+msgid "Downloading firmware update metadata…"
+msgstr "Elŝutante mikroprogramajn ĝisdatigajn metadatumojn…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Subteno por mikroprograma ĝisdatigo"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Provizas subtenon por mikroprogramaj ĝisdatigoj"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:196
+msgid "Downloading application ratings…"
+msgstr "Elŝutante aplikaĵajn taksojn…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS estas servo provizante uzanto-recenzojn de aplikaĵoj"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:74
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:150
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:910
+msgid "GNOME"
+msgstr "GNOME"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:406
+msgid "GNOME Shell Extensions Repository"
+msgstr "GNOME-ŝela etendaĵa deponejo"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:806
+msgid "Downloading shell extension metadata…"
+msgstr "Elŝutante ŝeletendaĵajn metadatumojn…"
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:914
+msgid "GNOME Shell Extension"
+msgstr "GNOME Ŝel-etendaĵo"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:191
+msgid "Snap Store"
+msgstr "Snap-butiko"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap-subteno"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snapo estas universala Linuksa pako"
+
+#~ msgid "Spacing"
+#~ msgstr "Interspaco"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "La kvanto de spaco inter idoj"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "Ĉi_uj"
+
+#~ msgid "Folder Name"
+#~ msgstr "Doseruja nomo"
+
+#~ msgid "_Add"
+#~ msgstr "_Aldoni"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Aldoni al dosierujo de aplikaĵoj"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Saluti / Registri…"
+
+#~ msgid "Continue"
+#~ msgstr "Daŭrigi"
+
+#~ msgid "Use"
+#~ msgstr "Uzi"
+
+#~ msgid "Add another…"
+#~ msgstr "Aldoni alian…"
+
+#~ msgid "Top Rated"
+#~ msgstr "Plej bone taksita"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validiĝis bone!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Malsukcesis ŝargi dosieron"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Nekonservitaj ŝanĝoj"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "La listo de aplikaĵoj jam estas ŝargita."
+
+#~ msgid "Merge documents"
+#~ msgstr "Kunigi dokumentojn"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Forĵeti ŝanĝojn"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Malfermi AppStream-dosieron"
+
+#~ msgid "_Open"
+#~ msgstr "_Malfermi"
+
+#~ msgid "_Save"
+#~ msgstr "Kon_servi"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Malsukcesis konservi dosieron"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s rubanda fasono forigita."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Rubanda fasono forigita."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "La listo de aplikaĵoj havas konservitajn ŝanĝojn."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Uzi babileman protokoladon"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Fasonisto de GNOME Programara rubando"
+
+#~ msgid "No Designs"
+#~ msgstr "Neniuj fasonoj"
+
+#~ msgid "Error message here"
+#~ msgstr "Erara mesaĝo ĉi tie"
+
+#~ msgid "App ID"
+#~ msgstr "Aplikaĵa ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Elekto de redaktisto"
+
+#~ msgid "Category Featured"
+#~ msgstr "Kategorio rekomendita"
+
+#~ msgid "Undo"
+#~ msgstr "Malfari"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Fasonisto de rubando"
+
+#~ msgid "New Banner"
+#~ msgstr "Nova rubando"
+
+#~ msgid "Import from file"
+#~ msgstr "Enporti el dosiero"
+
+#~ msgid "Export to file"
+#~ msgstr "Elporti al dosiero"
+
+#~ msgid "Delete Design"
+#~ msgstr "Forigi fasonon"
+
+#~ msgid "Featured App"
+#~ msgstr "Rekomendita aplikaĵo"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Operaciuma altgradigo"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Alklaku erojn por elekti ilin"
+
+#~ msgid "Select"
+#~ msgstr "Elekti"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Aldoni al dosierujo…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Movi al dosierujo…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Fo_rigi de dosierujo"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Ŝargante programaran katalogon"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Ĉu vi certe volas aĉeti %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s instaliĝos, kaj vin pagigis %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Aĉeti"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$ %.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$ %.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥ %.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€ %.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£ %.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥ %.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$ %.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽ %.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$ %.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Salutinta kiel %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Saluti…"
+
+#~ msgid "Sign out"
+#~ msgstr "Adiaŭi"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Ne eblas aĉeti %s: aŭtentigo necesis"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Ne eblas aĉeti %s: aŭtentigo nevalidis"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Ne eblas aĉeti %s: pagmaniero ne estas elektita"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Ne eblas aĉeti %s: pago rifuziĝis"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Ne eblas aĉeti %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Fasoni la rubandojn por GNOME Programaro"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Programaro;Aplikaĵo;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Retaplikaĵa subteno"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Ruli popularajn retaplikaĵojn en foliumilo"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Por daŭrigi, vi bezonos konton Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Por daŭrigi, vi bezonos konton Ubuntu One."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Salutu en %s por daŭrigi."
+
+#~ msgid "Email address"
+#~ msgstr "Retpoŝtadreso"
+
+#~ msgid "I have an account already"
+#~ msgstr "Mi jam havas konton"
+
+#~ msgid "Password"
+#~ msgstr "Pasvorto"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Mi volas krei konton nun"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Mi forgesis mian pasvorton"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Aŭtomate saluti venonte"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Enigu vian unufojan PIN por dufaza aŭtentigo."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Aŭtentigi"
+
+#~ msgid "_About"
+#~ msgstr "_Pri"
+
+#~ msgid "_Quit"
+#~ msgstr "Ĉ_esi"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "En la retejo oni povas trovi informon pri %s, kaj ankaŭ opciojn por akiri "
+#~ "ĝustan kodekon por tiu ĉi formo."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Via %s konto suspendiĝis."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Ne eblas instali programaron ĝis tiu solviĝis."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Por pli da informoj, vizitu %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Ne eblas ĝisdatigi %s de %s"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Elŝutante paĝon de aplikaĵo…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam-subteno"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "La pintega amuzaĵo-platformo de Valve"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Elŝutante novajn ĝisdatigojn…"
+
+#~ msgid "About Software"
+#~ msgstr "Pri Programaro"
+
+#~ msgid "Total"
+#~ msgstr "Sume"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Ne eblis trovi na '%s'"
+
+#, fuzzy
+#~| msgid "_Install"
+#~ msgid "_Install All"
+#~ msgstr "_Instali"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Restarti & _instali"
+
+#~ msgid "Remove Source"
+#~ msgstr "Forigi fonton"
+
+#~| msgid ""
+#~| "Adding this software source will give you access to additional software "
+#~| "and upgrades."
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Programar-fonotj estas elŝuteblaj de la interreto. Aldono de tiu "
+#~ "programar-fonto donos al vi aliron al kromaj programaroj kiuj ne estas "
+#~ "provizitaj de %s."
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalite de tiu fonto"
+
+#~ msgid "Source Details"
+#~ msgstr "Detaloj de fonto"
+
+#~ msgid "Added"
+#~ msgstr "Aldonite"
+
+#~ msgid "Website"
+#~ msgstr "Retejo"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Instalado de %s malsukcesis."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Forigo de %s malsukcesis."
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#, fuzzy
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Neniu"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#, fuzzy
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Astronomy"
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomio"
+
+#, fuzzy
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Chemistry"
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemio"
+
+#, fuzzy
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Math"
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematiko"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Ĉiuj"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Elstaranta"
+
+#~ msgid "Science"
+#~ msgstr "Scienco"
+
+#~ msgid " or "
+#~ msgstr " aŭ "
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Antaŭa ĝisdatigo malsukcesis."
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Ĝisdatigo ne estis korekte subskribita."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Malsukcesis fini la ĝisdatigon."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "Oni petis eksterretan ĝisdatigon, sed neniu pakaĵo bezonas ĝin."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Malsukcesis instali ĝisdatigon korekte."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Malsukcesis eksterrete ĝisdatigi pro nekonataj kialoj."
+
+#~ msgid "_Installing"
+#~ msgstr "_Instalado"
+
+#~ msgid "_Removing"
+#~ msgstr "_Forigado"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Nekonata"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Kalkulante…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Nekonata"
+
+#~ msgid "_History"
+#~ msgstr "_Historio"
+
+#~ msgid "Size"
+#~ msgstr "Grando"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Rekomenditaj oficejo-aplikaĵoj"
+
+#~ msgid "No sources found."
+#~ msgstr "Neniu fonto trovita."
+
+#~ msgid "OK"
+#~ msgstr "Akcepti"
+
+#~ msgid "One Star"
+#~ msgstr "Unu stelo"
+
+#~ msgid "Two Stars"
+#~ msgstr "Du steloj"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tri steloj"
+
+#~ msgid "Four Stars"
+#~ msgstr "Kvar steloj"
+
+#~ msgid "Five Stars"
+#~ msgstr "Kvin steloj"
+
+#~ msgid "Audio"
+#~ msgstr "Sono"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Datumbazoj"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Diska registrado"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatora radio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Miksilo"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Muziko"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Registriloj"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sekvenciloj"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Agordiloj"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Konstruado"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Datumbazoj"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Programada ĉirkaŭaĵo"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilado"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traduko"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Reta disvolvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologio"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Komputila scienco"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Konstruado"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Datumo-bildigo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomio"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektro"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektroniko"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inĝenierado"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologio"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Terscienco"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Historio"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Homsciencoj"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Bilda prilaborado"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literaturo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapoj"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Muziko"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Nombra analitiko"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Paralela komputado"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fiziko"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spiriteco"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Pafado"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulado"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sporto"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafiko"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D-grafiko"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rastruma grafiko"
+
+#~ msgid "Internet"
+#~ msgstr "Interreto"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Telefonkonversacio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Retpoŝto"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Abonrilato"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Dosiertransigo"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatora radio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Tujmesaĝado"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC-klientoj"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitoro"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Defora aliro"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Reta disvolvo"
+
+#~ msgid "Office"
+#~ msgstr "Oficejo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagramo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Kontakto-mastrumado"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Vortaro"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Retpoŝto"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Fludiagramo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Poŝkomputilo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografio"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projekto-administrado"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Eldonado"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Tabelkalkulilo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Vidigilo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Arto"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Artefarita intelekto"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Komputila scienco"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Konstruado"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Datumo-bildigo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektro"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektroniko"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inĝenierado"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Terscienco"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Historio"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Homsciencoj"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Bilda prilaborado"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Lingvoj"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literaturo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapoj"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematiko"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Nombra analitiko"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Paralela komputado"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fiziko"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotiko"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spiriteco"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sportoj"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Imitilo"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Dosiera administrilo"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Iloj por dosieroj"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitoro"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Sekureco"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Terminalimitilo"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Alirebleco"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arkivado"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Kalkulilo"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Horloĝo"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Densigo"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Iloj por dosieroj"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapoj"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spiriteco"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefoniaj iloj"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Redaktado"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Datumbazo"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Diska registrado"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Ludiloj"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Registriloj"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Televido"
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..c1144e8
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,5911 @@
+# Spanish translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Rodrigo <rodhos92@gmail.com>, 2018.
+# Daniel Mustieles <daniel.mustieles@gmail.com>, 2013-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-01 15:47+0000\n"
+"PO-Revision-Date: 2020-08-24 11:52+0200\n"
+"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
+"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 3.36.0\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Software de GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestor de aplicaciones para GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software le permite buscar e instalar aplicaciones nuevas y extensiones del "
+"sistema y quitar aplicaciones instaladas."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software muestra aplicaciones destacadas y populares con descripciones "
+"útiles y varias capturas de pantalla para cada aplicación. Las aplicaciones "
+"se pueden encontrar a navegando por la lista de categorías o buscando. "
+"También le permite actualizar su sistema mediante una actualización en modo "
+"desconectado."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Página de vista general"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel de detalles"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel de instalados"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel de actualizaciones"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Los detalles de la actualización"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "El proyecto GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalar un archivo «appstream» en una ubicación del sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalando un archivo «appstream» en una ubicación del sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Una lista de proyectos compatibles"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Esta es una lista completa de proyectos compatibles que se deben mostrar, "
+"tales como GNOME, KDE y XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Indica si se deben gestionar las actualizaciones y cambios de versión en "
+"GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Si está desactivada, GNOME Software ocultará el panel de actualizaciones y "
+"no realizará ninguna actualización automática ni notificará sobre versiones "
+"nuevas."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Descargar e instalar las actualizaciones automáticamente"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Si está activada, Gnome Software descarga actualizaciones automáticamente en "
+"segundo plano e instala sólo las que no requieren reiniciar."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notificar al usuario sobre el software actualizado en segundo plano"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Si está activada, GNOME Software notifica al usuario sobre las "
+"actualizaciones realizadas cuando el usuario estaba inactivo."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Indica si se debe actualizar automáticamente en una conexión medida"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Si está activada, GNOME Software actualiza automáticamente en segundo plano "
+"incluso al usar una conexión medida (descargando eventualmente algunos "
+"metadatos, comprobando si hay actualizaciones, etc., lo que puede acarrear "
+"costes al usuario)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Indica si es la primera ejecución de GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostrar puntuación de estrellas junto a las aplicaciones"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrar aplicaciones basándose en el conjunto de ramas predeterminadas de la "
+"ubicación remota"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Las aplicaciones no libres muestran un diálogo de advertencia antes de "
+"instalarse"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Cuando se instalan aplicaciones no libres, se puede mostrar un diálogo de "
+"advertencia. Esto controla si se suprime este diálogo."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Una lista de aplicaciones populares"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Una lista de aplicaciones que usar, omitiendo las definidas por el sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "La marca de tiempo de la última comprobación de actualizaciones"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "La marca de tiempo de la última notificación de actualización"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"La marca de tiempo de la primera actualización de seguridad, eliminada "
+"después de actualizar"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "La marca de tiempo de la última actualización"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"La última vez que el sistema ha estado conectado y ha recibido "
+"actualizaciones"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"La edad en segundos para verificar si la captura de pantalla oficial sigue "
+"siendo válida"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Elegir un valor más grande implica menos consultas al servidor remoto, pero "
+"las actualizaciones de las capturas de pantalla pueden tardar más en "
+"mostrarse al usuario. El valor 0 implica no comprobar nunca el servidor "
+"remoto si la imagen ya existe en la caché."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "El servidor que usar para las opiniones sobre las aplicaciones"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "La puntuación mínima de karma para las opiniones"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Las opiniones con menos karma que este número no se mostrarán."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Una lista de repositorios oficiales que no se deben considerar terceras "
+"partes"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Una lista de repositorios oficiales que se deben considerar software libre"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"El URL de la licencia que usar cuando se deba considerar que una aplicación "
+"es software libre"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instalar paquetes de aplicaciones para todos los usuarios del sistema cuando "
+"sea posible"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permitir acceso al diálogo de repositorios de software"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ofrece actualizaciones para publicaciones preliminares"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostrar algunos elementos de la IU que informen al usuario que la aplicación "
+"no es libre"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Mostrar la solicitud para instalar repositorios de software no libre"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostrar el tamaño correspondiente en la lista de aplicaciones instaladas"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://es.wikipedia.org/wiki/Software_propietario'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "El URI que explica el software propietario y el no libre"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Una lista de URL que apuntan a archivos «appstream» que se descargarán en la "
+"carpeta de información de la aplicación"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalar los archivos «appstream» en una ubicación del sistema para todos "
+"los usuarios"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Activar el repositorio de extensiones de GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Una cadena que guarda el ID de la cuenta en línea de GNOME usada para "
+"iniciar sesión"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalar software"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalar el software seleccionado en el sistema"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Seleccionar todo"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Seleccionar ninguno"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Repositorios de _software"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Actualizar preferencias"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Retroceder"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explorar"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalado"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Actualizaciones"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Buscar"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Fuente"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repositorios de software"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examinar disco"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Configuración de la red"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Reiniciar ahora"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Más información"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Actualizaciones automáticas pausadas"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Saber _más"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Archivo local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paquete"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Pendiente"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalando"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Quitando"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Modo de inicio, puede ser «actualizaciones», «actualizados», «instalados» o "
+"«vista general»"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODO"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Buscar aplicaciones"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "BUSCAR"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostrar los detalles de la aplicación (usando el ID de la aplicación)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostrar los detalles de la aplicación (usando el nombre del paquete)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PAQUETE"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instalar la aplicación (usando el ID de la aplicación)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Abrir un archivo de paquete local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "ARCHIVO"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"El tipo de interacción esperada para esta acción: puede ser «none», «notify» "
+"o «full»"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostrar información de depuración detallada"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instala cualquier actualización pendiente en segundo plano"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostrar las preferencias de las actualizaciones"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Salir de la instancia en ejecución"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferir las fuentes de archivos locales a las de AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostrar el número de versión"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Daniel Mustieles <daniel.mustieles@gmail.com>, 2013-2016"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Acerca de Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Una buena manera de gestionar el software en su sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "No hay detalles para esa aplicación."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visitar la página web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalar…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalar"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Actualizar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Eliminar"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "No se puede usar el dispositivo durante la actualización."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Necesita permisos adicionales"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Inicio de sesión remoto para %s requerido (reino %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Se necesita iniciar sesión"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "Iniciar _sesión"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Usuario"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Contraseña"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Otros"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Todo"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Destacado"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s destacada"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Puntuación"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nombre"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostrar"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menú de filtrado por subcategorías"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordenar"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menú de ordenación por subcategorías"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Introduzca un número entre 1 y %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Elija una aplicación:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Se han instalado las actualizaciones del SO"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Las actualizaciones instaladas recientemente están disponibles para su "
+"revisión"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s se ha instalado correctamente"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Se debe reiniciar para aplicar los cambios."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "La aplicación está lista para usarse."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Reiniciar"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Lanzar"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "¿Instalar software de terceros?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "¿Activar repositorio de software de terceros?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s no es <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">software libre</a>, lo proporciona «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s proporcionado por «%s»."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Este repositorio de software debe estar activado para continuar la "
+"instalación."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Puede ser ilegal instalar o usar %s en algunos países."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Puede ser ilegal instalar o usar este codificador en algunos países."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "No advertir otra vez"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Activar e instalar"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detalles del gestor de paquetes:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detalles"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Se ha instalado una actualización"
+msgstr[1] "Se han instalado las actualizaciones"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Se debe reiniciar para aplicar el cambio."
+msgstr[1] "Se debe reiniciar para aplicar los cambios."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ahora no"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Sin violencia con personajes animados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personajes animados en situaciones no seguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personajes animados en conflictos agresivos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violencia gráfica con personajes animados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Sin violencia fantástica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personajes en situaciones no seguras distinguibles fácilmente de la realidad"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Personajes en conflictos agresivos distinguibles fácilmente de la realidad"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violencia gráfica distinguible fácilmente de la realidad"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Sin violencia realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personajes semi-realistas en situaciones no seguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Representaciones de personajes realistas en conflictos agresivos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Violencia gráfica con personajes realistas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Sin masacres"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Masacre no realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Masacre realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Representaciones de masacres y mutilación de partes del cuerpo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Sin violencia sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Violación u otro comportamiento sexual violento"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Sin referencias a bebidas alcohólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referencias a bebidas alcohólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Uso de bebidas alcohólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Sin referencias a drogas ilegales"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referencias a drogas ilegales"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uso de drogas ilegales"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Si referencias al tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referencias al tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uso de tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Sin desnudos de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Desnudez artística breve"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Desnudez prolongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Sin representaciones o referencias sexuales"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Representaciones o referencias provocativas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Representaciones o referencias sexuales"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Comportamiento sexual gráfico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Sin blasfemia de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Uso moderado o poco frecuente de la blasfemia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Uso moderado de la blasfemia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Uso amplio o frecuente de la blasfemia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Sin humor inapropiado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Humor absurdo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Humor vulgar o escatológico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor adulto o sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Sin lenguaje discriminatorio de cualquier tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatividad hacia un determinado grupo de personas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminación para causar daño emocional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Discriminación explícita basada en género, sexualidad, raza o religión"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Sin publicidad de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Venta de productos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Referencias explícitas a marcas concretas o productos de marcas registradas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Se incita a los jugadores a comprar determinados elementos del mundo real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Sin apuestas de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Juego en eventos aleatorios usando créditos o vidas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Juego usando dinero virtual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Juego usando dinero real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Sin posibilidad de gastar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Se incita a los jugadores a donar dinero real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Posibilidad de gastar dinero real en el juego"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Sin posibilidad de chatear con otros jugadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interacciones de jugador a jugador sin funcionalidad de chat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funcionalidad de chat moderada entre jugadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funcionalidad de chat sin controlar entre jugadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Sin posibilidad de hablar con otros jugadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Funcionalidad de sonido o vídeo sin controlar entre jugadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"No comparte en redes sociales de nombres de usuario o direcciones de correo-e"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Compartición en redes sociales de nombres de usuario o direcciones de correo-"
+"e"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "No comparte la información del usuario con terceros"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Comprobando la última versión de la aplicación"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Compartición de datos diagnósticos que no permiten a otros identificar al "
+"usuario"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Compartición de información que permite a otros identificar al usuario"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "No comparte la ubicación física con otros usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Compartición de la ubicación física con otros usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Sin referencias a la homosexualidad"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Referencias indirectas a la homosexualidad"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Besos entre personas del mismo sexo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportamiento sexual gráfico entre personas del mismo sexo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Sin referencias a la prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referencias indirectas a la prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referencias directas a la prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Representación gráfica del acto de prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Sin referencias al adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referencias indirectas al adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referencias directas al adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Representación gráfica del acto de adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Sin caracteres sexualizados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Caracteres humanos apenas vestidos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Caracteres humanos abiertamente sexualizados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Sin referencias a la profanación"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Representación gráfica o referencias a la profanación histórica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Representación gráfica de profanación humana actual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Representación gráfica de profanación actual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Sin restos mortales humanos visibles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Restos mortales humanos visibles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Restos mortales humanos expuestos a los elementos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Representación gráfica de profanación de cuerpos humanos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Sin referencias a la esclavitud"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Representaciones o referencias a la esclavitud histórica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Representaciones o referencias a la esclavitud actual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Representación gráfica de esclavitud actual"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "General"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "TODO"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Sólo adultos"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Maduro"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescentes"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Todos los de 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Todos"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Infantil"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Una aplicación"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s necesita soporte para formatos de archivos adicionales."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Se necesitan tipos MIME adicionales"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s necesita tipografías adicionales."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Se necesitan tipografías adicionales"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s necesita codificadores multimedia adicionales."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Se necesitan codificadores multimedia adicionales"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s necesita controladores de impresora adicionales."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Se necesita controladores de impresora adicionales"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s necesita paquetes adicionales."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Se necesitan paquetes adicionales"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Buscar en Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Quitando…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Instalación pendiente…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Actualización pendiente…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Preparando…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Esta aplicación sólo se puede usar cuando existe una conexión activa a "
+"Internet."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalar"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalar…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Lanzar"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Quitar"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Red"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Se puede comunicar a través de la red"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Servicios del sistema"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "No se puede acceder a los servicios de D-Bus en el bus del sistema"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Servicios de la sesión"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "No se puede acceder a los servicios de D-Bus en el bus de sesión"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Puede acceder a los archivos de dispositivos del sistema"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Carpeta personal"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Puede ver, editar y crear archivos"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Puede ver archivos"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistema de archivos"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Carpeta de descargas"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Configuración"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Puede ver y modificar cualquier configuración"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistema de visualización heredado"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Usa un sistema de visualización antiguo e inseguro"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Salir del aislamiento"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Puede salir del aislamiento y evitar otras restricciones"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Esta aplicación está completamente aislada."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"No se puede determinar a qué partes del sistema accede esta aplicación. Esto "
+"es habitual en aplicaciones antiguas."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Desconocida"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nunca"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Baja"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Media"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Alta"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Desconocida"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Necesita acceso a Internet para escribir una opinión"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "No se pudo encontrar «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Dominio público"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software libre"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Los usuarios están limitados por la siguiente licencia:"
+msgstr[1] "Los usuarios están limitados por las siguientes licencias:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Más información"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Página de detalles"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Descargando"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Actualizar"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Añadir atajo"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Qu_itar atajo"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "No se ha proporcionado una captura de pantalla"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Repositorio de software incluido"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Esta aplicación incluye un repositorio de software que proporciona "
+"actualizaciones, así como acceso a otro software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Ningún repositorio de software incluido"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Esta aplicación no incluye un repositorio de software. No se actualizará con "
+"versiones nuevas."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Este software ya lo proporciona su distribución y no se debe reemplazar."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Repositorio de software identificado"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Añadir este repositorio de software le dará acceso a software y "
+"actualizaciones adicionales."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Use sólo repositorios de software en las que confíe."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Página _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donar"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Traducido a su idioma"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentación"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Actividad de publicación"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integración del sistema"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Aislado"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versión"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Calificación por edad"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permisos"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Actualizado"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categoría"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Tamaño instalado"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Tamaño descargado"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Desarrollador"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licencia"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Libre"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Propietaria"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Complementos"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Los complementos seleccionados se instalarán con la aplicación."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Opiniones"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Escribir una opinión"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mostrar más"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Esto significa que el software se puede ejecutar, copiar, distribuir, "
+"estudiar y modificar libremente."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Software propietario"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Esto significa que el software es propiedad de una persona individual o una "
+"empresa. A menudo hay restricciones en su uso y normalmente no se puede "
+"acceder a su código fuente."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licencia de software desconocida"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Se desconocen los términos de la licencia de este software."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "La aplicación se ha calificado así por los siguientes motivos:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "No hay detalles disponibles para esta puntuación."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " y "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tipografías disponibles para el script %s"
+msgstr[1] "Tipografías disponibles para los scripts %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Software disponible para %s"
+msgstr[1] "Software disponible para %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "No se pudo encontrar el software solicitado"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s no encontrada"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "en la página web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "No hay aplicaciones disponibles que proporcionen el archivo %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"La información sobre %s, así como opciones sobre cómo obtener las "
+"aplicaciones que faltan se puede encontrar en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "No hay aplicaciones disponibles para soportar %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s no está disponible."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"La información sobre %s, así como opciones sobre cómo obtener una aplicación "
+"que pueda soportar este formato se puede encontrar en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "No hay tipografías disponibles para el soporte del script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"La información sobre %s, así como opciones sobre cómo obtener tipografías "
+"adicionales se puede encontrar en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "No hay códecs disponibles para el formato %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"La información sobre %s, así como opciones sobre cómo obtener un códec que "
+"pueda reproducir este formato se puede encontrar en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "No hay recursos de Plasma disponibles para soportar %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"La información sobre %s, así como opciones sobre cómo obtener recursos de "
+"Plasma adicionales se puede encontrar en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "No hay controladores de impresora disponibles para %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"La información sobre %s, así como opciones sobre cómo obtener un controlador "
+"que soporte esta impresora se puede encontrar en %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "esta página web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"El codificador %s que estaba buscando no se ha podido encontrar. Consulte %s "
+"para obtener más información."
+msgstr[1] ""
+"Los codificadores %s que estaba buscando no se ha podido encontrar. Consulte "
+"%s para obtener más información."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Falló al buscar cualquier resultado de búsqueda"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "formato de archivo %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Página de codificadores"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Bienvenido/a"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Bienvenido/a a Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software le permite instalar todo el software que necesite desde un único "
+"lugar. Vea las recomendaciones, explore las categorías o busque las "
+"aplicaciones que quiere."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Ir de compras"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Eliminado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Actualizado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Desconocido"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e de %B de %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Histórico"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicaciones del sistema"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Página de instalados"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Se está descargando el catálogo de software"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Cargando página"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Iniciando…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"La red actual está medida. Este tipo de conexiones tienen limitaciones de "
+"datos o cargos asociados. Para ahorrar datos se han pausado las "
+"actualizaciones automáticas."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Abrir la _configuración de la red"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderar página"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "No hay opiniones que moderar"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistema"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "usuario"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Rama"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formato"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalación"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Más…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicaciones de vídeo y sonido recomendadas"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Juegos recomendados"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicaciones de gráficos recomendadas"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicaciones de productividad recomendadas"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Acceso a software adicional de repositorios de terceras partes."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Parte de este software es propietario y tiene restricciones de uso, "
+"compartición y acceso al código fuente."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Saber más…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Activar"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Página de vista general"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "¿Activar el repositorio de software de terceros?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Siguiente"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Selecciones de los editores"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Publicaciones recientes"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorías"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "No se han encontrado datos sobre las aplicaciones"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparar %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "¿Está seguro de querer quitar el repositorio %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Se quitarán todas las aplicaciones de %s y deberá volver a instalar el "
+"repositorio para poder usarlas de nuevo."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "¿Está seguro de querer quitar %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "Se quitará %s y deberá volver a instalarlo para poder usarlo de nuevo."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalada)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferencias de las actualizaciones"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Actualizaciones automáticas"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Las actualizaciones automáticas están desactivadas en conexiones móviles o "
+"medidas."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificaciones de actualizaciones automáticas"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Mostrar notificaciones cuando las actualizaciones se instalen "
+"automáticamente."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Alguno de los programas instalados no es compatible con %s. Si continúa, los "
+"siguientes paquetes se eliminarán automáticamente durante la actualización:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Software incompatible"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continuar"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicación instalada"
+msgstr[1] "%u aplicaciones instaladas"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u complemento instalado"
+msgstr[1] "%u complementos instalados"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicación"
+msgstr[1] "%u aplicaciones"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u complemento"
+msgstr[1] "%u complementos"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s y %s instalado"
+msgstr[1] "%s y %s instalados"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "¿Quiere quitar «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "¿Desactivar «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"El software instalado desde este repositorios ya no recibirá "
+"actualizaciones, incluyendo parches de seguridad."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Desactivar"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "el sistema operativo"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Estos repositorios complementan el software predeterminado proporcionado por "
+"%s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repositorios de terceras partes"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "No hay repositorios adicionales"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "Ac_tivar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Quitar…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Desactivar…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Activar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Desactivar"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Activado"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Desactivado"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "La odio"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "No me gusta"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Está bien"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Me gusta"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Me encanta"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Dedique un poco más de tiempo a escribir la opinión"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Elija una puntuación"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "El resumen es demasiado corto"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "El resumen es demasiado largo"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "La descripción es demasiado corta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "La descripción es demasiado larga"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publicar opinión"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Publicar"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Resumen"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Haga un pequeño resumen de su opinión, por ejemplo: «Una aplicación muy "
+"buena, recomendada»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Opinión"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"¿Qué piensa sobre la aplicación? Intente dar una explicación a sus opiniones."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Conozca qué datos se envían en nuestra <a href=\"https://odrs.gnome.org/"
+"privacy\">política de privacidad</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "puntuación total"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Puede informar sobre opiniones con comportamientos abusivos, groseros o "
+"discriminatorios."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Una vez enviada, la opinión se ocultará hasta que un administrador la haya "
+"revisado."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "¿Informar sobre esta opinión?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Informar"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "¿Le ha resultado útil esta opinión?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sí"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "No"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Bah"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Informar…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Quitar…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Captura de pantalla no encontrada"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Falló al cargar la imagen"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Tamaño de la captura de pantalla no encontrado"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "No se pudo crear la caché"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Captura de pantalla no válida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Captura de pantalla no disponible"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Captura de pantalla"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u coincidencia más"
+msgstr[1] "%u coincidencias más"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Página de búsqueda"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "No se han encontrado aplicaciones"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "No se pueden descargar las actualizaciones de «firmware» desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "No se pueden descargar actualizaciones desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "No se pueden descargar las actualizaciones"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"No se pueden descargar las actualizaciones: se necesita acceso a Internet, "
+"pero no está disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"No se pueden descargar actualizaciones de %s: no hay espacio suficiente en "
+"disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"No se pueden descargar las actualizaciones: no hay suficiente espacio en "
+"disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "No se pueden descargar actualizaciones: se necesita autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "No se pueden descargar actualizaciones: la autenticación no es válida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"No se pueden descargar actualizaciones: no tiene permisos para instalar "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "No se puede obtener la lista de actualizaciones"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "No se puede instalar %s ya que ha fallado la descarga de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "No se puede instalar %s ya que ha fallado la descarga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"No se puede instalar %s ya que la rutina de tiempo de ejecución %s no está "
+"disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "No se puede instalar %s ya que no está soportado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"No se puede instalar: se necesita acceso a Internet, pero no está disponible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "No se puede instalar %s: la aplicación no tiene un formato válido"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "No se puede instalar %s: no hay suficiente espacio en disco."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "No se puede instalar %s: se necesita autorización"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "No se puede instalar %s: la autenticación no es válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "No se puede instalar %s: no tiene permisos para instalar software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "No se puede instalar %s: se necesita conexión a la alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "No se puede instalar %s: el nivel de la batería es muy bajo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "No se puede instalar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "No se puede actualizar %s desde %s ya que ha fallado la descarga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "No se puede actualizar %s "
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"No se pueden instalar las actualizaciones desde %s ya que ha fallado la "
+"descarga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"No se pueden instalar las actualizaciones ya que ha fallado la descarga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"No se puede actualizar: se necesita acceso a Internet, pero no está "
+"disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "No se puede actualizar %s: no hay suficiente espacio en disco."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"No se pueden instalar las actualizaciones ya que no hay suficiente espacio "
+"en disco."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "No se puede actualizar %s: se necesita autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "No se pueden instalar las actualizaciones: se necesita autorización"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "No se puede actualizar %s: la autenticación no es válida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"No se pueden instalar las actualizaciones: la autenticación no es válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "No se puede actualizar %s: no tiene permisos para actualizar software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"No se pueden instalar las actualizaciones: no tiene permisos para actualizar "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "No se puede actualizar %s: se necesita conexión a la alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"No se pueden instalar las actualizaciones: se necesita conexión a la "
+"alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "No se puede actualizar %s: el nivel de la batería es muy bajo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"No se pueden instalar las actualizaciones: el nivel de la batería es muy bajo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "No se puede actualizar %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "No se pueden instalar las actualizaciones"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "No se puede actualizar a %s desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "No se puede actualizar a %s ya que falló la descarga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"No se puede actualizar a %s: se necesita acceso a Internet, pero no está "
+"disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "No se puede actualizar %s: no hay suficiente espacio en disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "No se puede actualizar a %s: se necesita autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "No se puede actualizar a %s: la autenticación no es válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "No se puede actualizar a %s: no tiene permiso para actualizar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "No se puede actualizar a %s: se necesita conexión a la alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "No se puede actualizar a %s: el nivel de la batería es muy bajo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "No se puede actualizar a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "No se puede quitar %s: se necesita autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "No se puede quitar %s: la autenticación no es válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "No se puede quitar %s: no tiene permisos para quitar software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "No se puede quitar %s: se necesita conexión a la alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "No se puede quitar %s: el nivel de la batería es muy bajo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "No se puede quitar «%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "No se puede lanzar %s: %s no está instalado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"No hay suficiente espacio en disco. Libere algo de espacio e inténtelo de "
+"nuevo."
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Algo salió mal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Falló al instalar el archivo: no está soportado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Falló al instalar el archivo: falló la autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Falló al instalar: no está soportado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Falló al instalar: falló la autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "No se puede contactar con %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Se debe reiniciar %s para usar los complementos nuevos."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Se debe reiniciar esta aplicación para usar los nuevos complementos."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Se necesita conexión a la alimentación"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "El nivel de la batería es muy bajo"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Fuente: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instalando)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Quitando)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Quitar todos"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "No hay ninguna descripción disponible sobre la actualización."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instaladas en %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Actualizaciones instaladas"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Añadidos"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Eliminados"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Actualizaciones"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Bajadas de versión"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "No se han instalado actualizaciones en este sistema."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Actualizaciones de seguridad pendientes"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Se recomienda que instale las actualizaciones importantes ahora"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Reiniciar e instalar"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Actualizaciones de software disponibles"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Las actualizaciones importantes del sistema y de aplicaciones están listas "
+"para instalarse"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Ver"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicación actualizada — se necesita reiniciar"
+msgstr[1] "%u aplicaciones actualizadas — se necesita reiniciar"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicación actualizada"
+msgstr[1] "%u aplicaciones actualizada"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s se ha actualizado."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Reinicie la aplicación."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s y %s se han actualizado."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicación necesita reiniciar."
+msgstr[1] "%u aplicaciones necesitan reiniciar."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Incluye %s, %s y %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Actualizaciones del sistema operativo no disponibles"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Suba de versión para seguir recibiendo actualizaciones de seguridad"
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Hay una versión nueva de %s disponible para instalar"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Actualización de software disponible"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Falló la actualización de software"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Falló al instalar una actualización importante del sistema operativo."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostrar detalles"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Actualización del sistema completa"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Bienvenido/a %s %s"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Actualización de software instalada"
+msgstr[1] "Actualizaciones de software instaladas"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Se ha instalado una actualización del sistema operativo importante."
+msgstr[1] "Se han instalado actualizaciones del sistema operativo importantes."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Revisar"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Falló al actualizar"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "El sistema ya estaba actualizado."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Se canceló la actualización."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"La conexión a Internet no está disponible. Asegúrese de que tiene acceso a "
+"Internet e inténtelo de nuevo."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Ha ocurrido un problema de seguridad con la actualización. Consulte a su "
+"proveedor de software para obtener más detalles."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"No hay suficiente espacio en disco. Libere algo de espacio e inténtelo de "
+"nuevo."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"La actualización no pudo instalarse. Espere a otra actualización e inténtelo "
+"de nuevo. Si el problema persiste, contacte a su proveedor de software."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Ayer, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Ayer, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Hace dos días"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Hace tres días"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Hace cuatro días"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Hace cinco días"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Hace seis días"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Hace una semana"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Hace dos semanas"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Buscando actualizaciones nuevas"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Configurando actualizaciones…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Esto puede llevar cierto tiempo)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Comprobada por última vez: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s ya no está soportado."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Su sistema operativo ya no está soportado."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Esto significa que no recibe actualizaciones de seguridad."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Se recomienda que actualice a una versión más reciente."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Puede conllevar gastos adicionales"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Comprobar si hay actualizaciones usando banda ancha móvil puede conllevar "
+"gastos adicionales."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Comprob_ar de todas formas"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Sin red"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Se necesita acceso a Internet para comprobar si hay actualizaciones."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Comprobando…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Comprobar si hay actualizaciones"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Página de actualizaciones"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "El software está actualizado"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Comprobar si hay actualizaciones usando banda ancha móvil puede conllevar "
+"gastos adicionales"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Comprobar de todas formas"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Conectarse para comprobar si hay actualizaciones"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Configuración de la _red"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Las actualizaciones se gestionan automáticamente"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Reiniciar y actualizar"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Actualizar todo"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Firmware integrado"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Requiere reiniciar"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Actualizaciones de aplicaciones"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware del dispositivo"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Descargar…"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Se recomienda que respalde sus datos y archivos antes de actualizar."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Reiniciar ahora"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Las actualizaciones se aplicarán cuando se reinicie el equipo."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s ya está disponible"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Esperando para descargar %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Descargando %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s listo para instalar"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Una actualización mayor, con características nuevas y optimizaciones."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Aprender más"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Añadir, quitar o actualizar software en este equipo"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Actualizaciones;Actualizar;Fuentes;Repositorios:Preferencias;Instalar;"
+"Desinstalar;Programa;Software;App;Almacén;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Creación y edición de sonido"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Reproductores de música"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depuradores"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "EID"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Inteligencia artificial"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomía"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Química"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Idiomas"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemáticas"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robótica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Acción"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventuras"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Bloques"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tablero"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartas"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladores"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Infantiles"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lógica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Juegos de rol"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Deportes"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estrategia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Gráficos 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografía"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Escaneado"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Gráficos vectoriales"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visores"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendario"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base de datos"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanzas"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Procesador de textos"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tipografías"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codificadores"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Fuentes de entrada"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Paquetes de idiomas"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localización"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Controladores hardware"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Noticias"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navegadores web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editores de texto"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Todo"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Arte"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografía"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Cómics"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficción"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Salud"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historia"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estilo de vida"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Política"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Deportes"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Sonido y vídeo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Herramientas de desarrollo"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educación y ciencia"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Juegos"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Gráficos y fotografía"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Productividad"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicación y noticias"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referencia"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilidades"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Actualizaciones del SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Incluye mejoras en el rendimiento, la estabilidad y la seguridad."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Descargando imágenes destacadas…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Una actualización mayor de Endless OS, con características nuevas y "
+"correcciones."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"El servicio de actualización de EOS no ha podido descargar y aplicar la "
+"actualización."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instalador de Appstream en todo el sistema de GNOME Software"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Falló al analizar opciones de la línea de comandos"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Debe especificar exactamente un nombre de archivo"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Este programa sólo lo puede usar el usuario «root»"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Falló al validar el tipo de contenido"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Falló al copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Descargando metadatos adicionales de archivos…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Descargando información de actualizaciones…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Actualización de las las últimas características y mejoras de rendimiento y "
+"estabilidad."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Soporte de Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+"Flatpak es un entorno de desarrollo para aplicaciones de escritorio en Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Obteniendo metadatos flatpak para %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Actualizar dispositivo %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Actualizar sistema %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Actualizar controlador empotrado %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Actualizar ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Actualizar ME corporativo %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Actualizar ME consumidor %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Actualizar controlador %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Actualizar controlador Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Actualizar microcódigo de la CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Actualización de configuración %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Descargando firmas de actualizaciones de «firmware»…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Descargando metadatos de actualizaciones de «firmware»…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Soporte de actualización de firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Proporciona soporte para actualizaciones de firmware"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Descargando puntuaciones de aplicaciones…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS es un servicio que proporciona opiniones de usuarios sobre apicaciones"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Tienda de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Soporte de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un snap es un paquete universal de Linux"
+
+#~ msgid "About %s"
+#~ msgstr "Acerca de %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Configuración de la extensión"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Las extensiones se usan bajo su responsabilidad. Si tiene problemas en el "
+#~ "sistema, es recomendable desactivarlas."
+
+#~ msgid "Spacing"
+#~ msgstr "Espaciado"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "La cantidad de espacio entre hijos"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplicaciones destacadas"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensiones de la Shell"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Soporte de aplicaciones web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Ejecutar aplicaciones web populares en un navegador"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Repositorio de extensiones de GNOME Shell"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Descargando metadatos de extensión de la Shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Extensiones de la Shell de GNOME"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Mostrar la IU de gestión de carpetas"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nombre de la carpeta"
+
+#~ msgid "_Add"
+#~ msgstr "_Añadir"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Añadir a la carpeta de aplicaciones"
+
+#~ msgid "Failed to load components"
+#~ msgstr "Falló al cargar los componentes"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validado correctamente."
+
+#~ msgid "Failed to load file"
+#~ msgstr "Falló al cargar el archivo"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Cambios sin guardar"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "La lista de aplicaciones ya está cargada."
+
+#~ msgid "Merge documents"
+#~ msgstr "Mezclar documentos"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Descartar los cambios"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Abrir archivo AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Abrir"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Guardar archivo AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Guardar"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Falló al guardar el archivo"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Eliminado el diseño del banner %s."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Diseño de banner eliminado."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "La lista de aplicaciones tiene cambios sin guardar."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Usar registro detallado"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Diseñador de banners de software de GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "No hay diseños"
+
+#~ msgid "Error message here"
+#~ msgstr "Mensaje de error aquí"
+
+#~ msgid "App ID"
+#~ msgstr "ID de la aplicación"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Selecciones de los editores"
+
+#~ msgid "Category Featured"
+#~ msgstr "Categoría destacada"
+
+#~ msgid "Undo"
+#~ msgstr "Deshacer"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Diseñador de banner"
+
+#~ msgid "New Banner"
+#~ msgstr "Banner nuevo"
+
+#~ msgid "Import from file"
+#~ msgstr "Importar desde un archivo"
+
+#~ msgid "Export to file"
+#~ msgstr "Exportar a un archivo"
+
+#~ msgid "Delete Design"
+#~ msgstr "Eliminar diseño"
+
+#~ msgid "Featured App"
+#~ msgstr "Aplicación destacada"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Actualización del SO"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Pulse sobre los elementos para seleccionarlos"
+
+#~ msgid "Select"
+#~ msgstr "Seleccionar"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Añadir a la carpeta…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Mover a la carpeta…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Quitar de la carpeta"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Diseñar los banners destacados para GNOME Software"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;aplicación;aplicaciones;"
+
+#~ msgid "Top Rated"
+#~ msgstr "Los más valorados"
+
+#~ msgid "_All"
+#~ msgstr "_Todo"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Iniciar sesión / Registrarse…"
+
+#~ msgid "Continue"
+#~ msgstr "Continuar"
+
+#~ msgid "Use"
+#~ msgstr "Usar"
+
+#~ msgid "Add another…"
+#~ msgstr "Añadir otra…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "¿Seguro que quiere comprar %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s se instalará, y se le cobrará %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Comprar"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f€"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Sesión iniciada como %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Iniciar sesión…"
+
+#~ msgid "Sign out"
+#~ msgstr "Cerrar sesión"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "No se puede obtener %s: se necesita autenticación"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "No se puede obtener %s: la autenticación no es válida"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "No se puede obtener %s: no hay configurado un método de pago"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "No se puede obtener %s: se ha rechazado el pago"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "No se puede obtener %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Para continuar debe usar una cuenta de Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Para continuar necesita usar su cuenta de Ubuntu One."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Se está cargando el catálogo de software"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "…"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "No se puede actualizar %s desde %s"
+
+#~| msgctxt "Menu subcategory of Internet"
+#~| msgid "Remote Access"
+#~ msgid "New System Access"
+#~ msgstr "Nuevo acceso al sistema"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Debe iniciar sesión en %s para continuar."
+
+#~ msgid "Email address"
+#~ msgstr "Dirección de correo-e"
+
+#~ msgid "I have an account already"
+#~ msgstr "Ya tengo una cuenta"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Quiero crear una cuenta ahora"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "He olvidado mi contraseña"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Iniciar sesión automáticamente la próxima vez"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr ""
+#~ "Introduzca su pin de un solo uso para la autenticación de dos factores."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autenticar"
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Su cuenta %s se ha suspendido."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "No es posible instalar software hasta que esto se haya resuelto."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Para obtener más información, visite %s."
+
+#~ msgid "_About"
+#~ msgstr "_Acerca de"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Mostrar información del perfil para el servicio"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "En la página web se puede encontrar información sobre %s, así como "
+#~ "opciones sobre cómo obtener un códec que pueda reproducir este formato."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Descargando actualizaciones nuevas…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Descargando página de la aplicación…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Soporte de Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "La última plataforma de entretenimiento de Valve"
+
+#~| msgid "Application Updates"
+#~ msgid "Applications Updated"
+#~ msgstr "Aplicaciones actualizadas"
+
+#~ msgid "Includes: ."
+#~ msgstr "Incluye: ."
+
+#~ msgid "_Quit"
+#~ msgstr "_Salir"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Reiniciar y actualizar"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Act_ualizar todo"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Reiniciar e _instalar"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Obteniendo fuente en tiempo de ejecución…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Descargando actualizaciones de «firmware»…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Soporte de Limbba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba proporciona a desarrolladores una manera sencilla de crear paquetes "
+#~ "de software"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Ordenadas por nombre"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Ordenadas por valoración"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "La lista de fuentes adicionales que se han activado previamente"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "La lista de fuentes que se han activado previamente al instalar "
+#~ "aplicaciones de terceras partes."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Mostrar software no libre en los resultados de búsqueda"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Una lista de fuentes no libres que se pueden activar de manera opcional"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Proporciona acceso a software adicional, incluyendo navegadores web y "
+#~ "juegos."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "¿Activar fuentes de software propietario?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "No hay aplicaciones ni complementos instalados. Es posible que todavía "
+#~ "haya otro software"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Normalmente tiene restricciones de uso y acceso al código fuente."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Fuentes de software propietario"
+
+#~ msgid "Remove Source"
+#~ msgstr "Quitar fuente"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Las fuentes de software se pueden descargar de Internet. Esto le da "
+#~ "acceso a software adicional no proporcionado por %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Quitar una fuente también quitará cualquier software que haya instalado "
+#~ "desde ella."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "No hay software instalado desde esta fuente."
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalado desde esta fuente"
+
+#~ msgid "Source Details"
+#~ msgstr "Detalles de la fuente"
+
+#~ msgid "Last Checked"
+#~ msgstr "Comprobada por última vez"
+
+#~ msgid "Added"
+#~ msgstr "Añadida"
+
+#~ msgid "Website"
+#~ msgstr "Página web"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Interacciones de jugador a jugador preestablecidas sin funcionalidad de "
+#~ "chat"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Compartición de información del usuario con terceros"
+
+#~ msgid "page1"
+#~ msgstr "página1"
+
+#~ msgid "page2"
+#~ msgstr "página2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "«%s» [%s]"
+
+#~ msgid "Other Updates"
+#~ msgstr "Otras actualizaciones"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Todo"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Destacado"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomía"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matemáticas"
+
+#~ msgid "Science"
+#~ msgstr "Ciencias"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instalar todas"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Falló la instalación de %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Falló al eliminar %s."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Asegúrese de que tiene acceso a Internet e inténtelo de nuevo."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Libere algo de espacio e inténtelo de nuevo."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Si el problema persiste, contacte con su proveedor de software."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Las fuentes de software le dan acceso a software adicional."
+
+#~| msgid "Unknown"
+#~ msgid "unknown"
+#~ msgstr "desconocido"
+
+#~ msgid "3rd party"
+#~ msgstr "terceras partes"
+
+#~ msgid "web app"
+#~ msgstr "aplicación web"
+
+#~ msgid "nonfree"
+#~ msgstr "no libre"
+
+#~ msgid "shell extension"
+#~ msgstr "Extensiones de la Shell"
+
+#~ msgid "_Installing"
+#~ msgstr "_Instalando"
+
+#~ msgid "_Removing"
+#~ msgstr "_Quitando"
+
+#~ msgid " or "
+#~ msgstr " o "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Desconocida"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Este software proviene de terceras partes"
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Este software proviene de terceras partes y puede contener componentes no "
+#~ "libres."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Este software puede contener componentes no libres."
+
+#~ msgid "non-free"
+#~ msgstr "no libre"
+
+#~ msgid "One Star"
+#~ msgstr "Una estrella"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dos estrellas"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tres estrellas"
+
+#~ msgid "Four Stars"
+#~ msgstr "Cuatro Stars"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinco estrellas"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicaciones de oficina recomendadas"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Editing"
+#~ msgstr "Edición"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Databases"
+#~ msgstr "Bases de datos"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Disc Burning"
+#~ msgstr "Grabación de discos"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioaficionado"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Mixer"
+#~ msgstr "Mezclador"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Recorders"
+#~ msgstr "Grabadores"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Sequencers"
+#~ msgstr "Secuenciadores"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "Tuners"
+#~ msgstr "Sintonizadores"
+
+#~ msgctxt "Menu subcategory of AudioVideo"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Construcción"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Bases de datos"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "EID"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Perfilado"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Gestión de proyectos"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traducción"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Desarrollo web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biología"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Informática"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Construcción"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualización de datos"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economía"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Electricidad"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Electrónica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Ingeniería"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geología"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Ciencias de la Tierra"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Historia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanidades"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Procesado de imágenes"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Análisis numérico"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computación en paralelo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidad"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Disparos"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulación"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Deportes"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Gráficos 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publicación"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Gráficos rasterizados"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Marcado"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Correo electrónico"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Proveedor"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Transferencia de archivos"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioaficionado"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Mensajería instantánea"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Clientes IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitorización"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonía"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Desarrollo web"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagrama"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Gestión de contactos"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Diccionario"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Correo-e"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Diagrama de flujo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografía"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentación"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Gestión de proyectos"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publicación"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Hoja de cálculo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visor"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Arte"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Inteligencia artificial"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomía"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biología"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Informática"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Construcción"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualización de datos"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economía"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Electricidad"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Electrónica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Ingeniería"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografía"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geología"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Ciencias de la Tierra"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Historia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanidades"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Procesado de imágenes"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Idiomas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matemáticas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Análisis numérico"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computación en paralelo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robótica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidad"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Deportes"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulador"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Gestor de archivos"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Herramientas de archivos"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitorización"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Seguridad"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulador de la terminal"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Accesibilidad"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Archivado"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calculadora"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Reloj"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compresión"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Herramientas de archivos"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidad"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Herramientas de telefonía"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Ninguna"
+
+#~ msgid "Audio"
+#~ msgstr "Sonido"
+
+#~ msgid "Graphics"
+#~ msgstr "Gráficos"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgid "Office"
+#~ msgstr "Oficina"
+
+#~ msgid "Video"
+#~ msgstr "Vídeo"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Edición"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Base de datos"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Grabación de discos"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Reproductores"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Grabadores"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Calculando…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Desconocido"
+
+#~ msgid "_History"
+#~ msgstr "_Histórico"
+
+#~ msgid "Size"
+#~ msgstr "Tamaño"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "No se han encontrado datos de AppStream"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Aplicación sólo para Internet"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "La actualización anterior no ha terminado."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "La actualización no pudo instalarse; normalmente esto indica un problema "
+#~ "con la propia actualización. Espere a otra actualización e inténtelo de "
+#~ "nuevo."
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Entrar en modo de servicio de GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Una actualización no se ha firmado de la manera correcta."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "No se pudo completar la actualización."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Se ha solicitado una actualización en modo desconectado, pero no hay "
+#~ "paquetes que necesiten actualizarse."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "No queda espacio en el disco"
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Una actualización no se ha instalado correctamente."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr ""
+#~ "La actualización en modo desconectado ha fallado de manera imprevista."
+
+#~ msgid "No sources found."
+#~ msgstr "No se han encontrado fuentes."
+
+#~ msgid "OK"
+#~ msgstr "Aceptar"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i aplicación y %i complementos instalado"
+#~ msgstr[1] "%i aplicaciones y %i complementos instalados"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr ""
+#~ "Dependiendo de su país de residencia, instalarlo podría ser objeto de "
+#~ "acciones legales."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr "Si no está seguro, debería solicitar asesoramiento legal."
+
+#~| msgid "Are you sure you want to remove %s?"
+#~ msgid "Do you want to enable it?"
+#~ msgstr "¿Quiere activarlo?"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Establecer el nivel de depurado especificado"
+
+#~ msgid "Picks"
+#~ msgstr "Selección"
+
+#~| msgid "Complicated!"
+#~ msgctxt "license"
+#~ msgid "Complicated!"
+#~ msgstr "Complicada"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Actualizaciones de software recientes"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "30 de enero de 2014"
+
+#~ msgid "_Pending"
+#~ msgstr "_Pendiente"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "Bases de datos"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioaficionado"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "Desarrollo web"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "Herramientas de archivos"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidad"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "Tipografías"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "Codificadores"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "Fuentes de entrada"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "Paquetes de idiomas"
+
+#~ msgid "Done"
+#~ msgstr "Hecho"
+
+#~ msgid ""
+#~ "Add or remove folders. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr ""
+#~ "Añadir o quitar carpetas. Sus carpetas de aplicaciones se encuentran en "
+#~ "la vista de actividades."
+
+#~ msgid ""
+#~ "Choose a folder for %s. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr ""
+#~ "Elija una carpeta para %s. Sus carpetas de aplicaciones se encuentran en "
+#~ "la vista de actividades."
+
+#~ msgid ""
+#~ "Choose a folder for %s and %s. Your application folders can be found in "
+#~ "the Activities Overview."
+#~ msgstr ""
+#~ "Elija una carpeta para %s y %s. Sus carpetas de aplicaciones se "
+#~ "encuentran en la vista de actividades."
+
+#~ msgid ""
+#~ "Choose a folder for %s, %s and %s. Your application folders can be found "
+#~ "in the Activities Overview."
+#~ msgstr ""
+#~ "Elija una carpeta para %s, %s y %s. Sus carpetas de aplicaciones se "
+#~ "encuentran en la vista de actividades."
+
+#~ msgid ""
+#~ "Choose a folder for the selected applications. Your application folders "
+#~ "can be found in the Activities Overview."
+#~ msgstr ""
+#~ "Elija una carpeta para las aplicaciones seleccionadas. Sus carpetas de "
+#~ "aplicaciones se encuentran en la vista de actividades."
+
+#~ msgid "Description"
+#~ msgstr "Descripción"
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "_Instalado (%d)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "_Actualizaciones (%d)"
+
+#~ msgid "The search term to use when starting the UI"
+#~ msgstr "El término que buscar al iniciar la IU"
+
+#~ msgid "Shotwell"
+#~ msgstr "Shotwell"
+
+#~| msgid "Application manager for GNOME"
+#~ msgid "Open source photo management for GNOME"
+#~ msgstr "Aplicación libre de gestión de fotos para GNOME"
+
+#~| msgid "Description"
+#~ msgid "Long description"
+#~ msgstr "Descripción larga"
+
+#~ msgid "Software has the following goals:"
+#~ msgstr "Software tiene los siguientes objetivos"
+
+#~ msgid "View installed applications"
+#~ msgstr "Ver las aplicaciones instaladas"
+
+#~ msgid "View available application updates"
+#~ msgstr "Ver las actualizaciones disponibles para las aplicaciones"
+
+#~ msgid "Install available updates"
+#~ msgstr "Instalar las actualizaciones disponibles"
+
+#~ msgid "Find an application to handle a specific type of file"
+#~ msgstr "Buscar una aplicación para manejar un tipo de archivo específico"
+
+#~ msgid "Installed apps and updates should be available when offline"
+#~ msgstr ""
+#~ "Las aplicaciones y las actualizaciones instaladas deben estar disponibles "
+#~ "cuando esté desconectado"
+
+#~ msgid "Goals:"
+#~ msgstr "Objetivos:"
+
+#~ msgctxt "Menu subcategory of Settings"
+#~ msgid "Accessibility"
+#~ msgstr "Accesibilidad"
+
+#~ msgctxt "Menu subcategory of Settings"
+#~ msgid "Printing"
+#~ msgstr "Impresión"
+
+#~ msgctxt "Menu subcategory of Settings"
+#~ msgid "Security"
+#~ msgstr "Seguridad"
+
+#~| msgid "History"
+#~ msgid "View History"
+#~ msgstr "Ver histórico"
+
+#~ msgid "The Gimp"
+#~ msgstr "Gimp"
+
+#~ msgid "GNU Image Manipulation Program"
+#~ msgstr "Programa de manipulación de imágenes de GNU"
+
+#~ msgid ""
+#~ "GIMP (GNU Image Manipulation Program) is a powerful image composition "
+#~ "and\n"
+#~ "editing program, which can be extremely useful for creating logos and "
+#~ "other\n"
+#~ "graphics for webpages. GIMP has many of the tools and filters you would "
+#~ "expect\n"
+#~ "to find in similar commercial offerings, and some interesting extras as "
+#~ "well.\n"
+#~ "GIMP provides a large image manipulation toolbox, including channel "
+#~ "operations\n"
+#~ "and layers, effects, sub-pixel imaging and anti-aliasing, and "
+#~ "conversions, all\n"
+#~ "with multi-level undo.\n"
+#~ msgstr ""
+#~ "GIMP (programa de manipulación de imágenes de GNU) es un potente programa "
+#~ "de\n"
+#~ "composición y edición de imágenes que puede resultar muy útil para crear "
+#~ "logos y otras\n"
+#~ "imágenes para páginas web. GIMP tiene muchas de las herramientas y "
+#~ "filtros que espera\n"
+#~ "para parecerse a otras herramientas comerciales similares, así como "
+#~ "algunos extras interesantes.\n"
+#~ "GIMP proporciona una gran caja de herramientas para manipulación de "
+#~ "imágenes, incluyendo\n"
+#~ "operaciones sobre canales y capas, efectos, imágenes con subpíxeles y "
+#~ "alisado y conversiones,\n"
+#~ "todo ello con posibilidad de deshacer.\n"
+
+#~ msgid "Waiting for package manager..."
+#~ msgstr "Esperando al gestor de paquetes…"
+
+#~ msgid "Querying..."
+#~ msgstr "Consultando…"
+
+#~ msgid ""
+#~ "The author of this software has not included a 'Description' in the "
+#~ "desktop file..."
+#~ msgstr ""
+#~ "El autor de este programa no ha incluido una «descripción» en el archivo ."
+#~ "desktop…"
+
+#~ msgid "New"
+#~ msgstr "Nuevo"
+
+#~ msgid "Related"
+#~ msgstr "Relacionado"
+
+#~ msgid "Popular"
+#~ msgstr "Popular"
+
+#~ msgid ""
+#~ "Shotwell is a digital photo organiser that runs on Linux. It is the "
+#~ "default photo manager in Ubuntu and Fedora."
+#~ msgstr ""
+#~ "Shotwell es un organizador de fotos digitales para Linux. Es el gestor de "
+#~ "fotos predeterminado en Ubuntu y en Fedora."
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..b94d2b9
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,4387 @@
+# Basque translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2014, 2015, 2017.
+# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 2019, 2020.
+# Ibai Oihanguren Sala <ibai@oihanguren.com>, 2020.
+#
+msgid ""
+msgstr "Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-30 16:00+0100\n"
+"Last-Translator: Asier Sarasua Garmendia <asiersarasua@ni.eus>\n"
+"Language-Team: Basque <librezale@librezale.eus>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOMEren aplikazio-kudeatzailea"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr "'Software' aplikazioak aplikazio berriak eta sistemaren hedapenak bilatzea eta instalatzea, edo eta instalatutako aplikazioak kentzea, baimentzen dizu."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr "GNOME Software programak aplikazio ospetsuak azalpen erabilgarriekin eta aplikazioko hainbat argazkirekin bistaratzen ditu. Aplikazioak kategorien zerrendak arakatuz aurki daitezke, edo bilaketak eginez. Lineaz kanpoko eguneratzearen bidez sistema eguneratzea baimentzen du."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Ikuspegi orokorraren panela"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Xehetasunen panela"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Instalatutakoen panela"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Eguneraketen panela"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Eguneraketen xehetasunak"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "GNOME proiektua"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalatu appstream fitxategi bat sistemaren kokaleku batean"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Appstream fitxategi bat sistemaren kokaleku batean instalatzen"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Proiektu bateragarrien zerrenda"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "Erakutsi beharko zatekeen proiektu bateragarrien zerrenda bat da, hala nola GNOME, KDE eta XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Eguneratzeak eta bertsio-berritzeak GNOME Software aplikazioan kudeatuko diren"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr "Desgaituta badago, GNOME Softwarek eguneraketen panela ezkutatuko du, ez du eguneratze automatikorik burutuko edo bertsio-berritzeak egin nahi diren galdetuko."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Deskargatu eta instalatu eguneratzeak automatikoki"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr "Gaituta balego, GNOME Softwarek automatikoki deskargatuko ditu eguneratzeak atzeko planoan eta berrabiaraztea behar ez dutenak instalatuko ditu."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Jakinarazi erabiltzaileari atzeko planoan zein software eguneratu den."
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr "Gaituta badago, GNOME Softwarek erabiltzaileari jakinaraziko dio zein eguneratze egin diren erabiltzailea inaktibo zegoenean."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Neurtutako konexio batean automatikoki freskatu edo ez"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr "Gaituta balego, GNOME Softwarek automatikoki freskatuko du atzeko planoan, nahiz eta neurtutako konexio bat erabili (metadatu batzuk noizbehinka deskargatzea, eguneratzeak begiratzea eta abar, erabiltzailearentzako kostu bat eragin dezakeelarik)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "GNOME Software aplikazioaren lehen exekuzioa den edo ez"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Erakutsi balorazioen izarrak aplikazioen alboan"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Iragazi aplikazioak urrunekoaren adar-multzo lehenetsian oinarrituz"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Libreak ez diren aplikazioek abisuaren elkarrizketa-koadroa bistaratzea instalatu aurretik"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr "Libreak ez diren aplikazioak instalatzean, abisu bat erakutsiko da. Honek kontrolatzen du elkarrizketa-koadro hori kenduko den ala ez."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Aplikazio ospetsuen zerrenda"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Erabiliko diren aplikazioen zerrenda, sisteman zehaztutakoak gainidatziz."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Eguneraketen azken egiaztapenaren denbora-zigilua"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Bertsio-berritzeen jakinarazpenaren denbora-zigilua"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Aurreneko segurtasun-eguneratzearen denbora-zigilua, eguneratzearen ondoren garbitutakoa"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Azken eguneratzearen denbora-zigilua"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "Sistema linean egon zen eta eguneratzeak jaso zituen azken unearen data-zigilua"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Adina segundotan pantaila-argazkia oraindik baliozkoa den egiaztatzeko"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr "Balio handiagoa aukeratzean, gutxiagotan atzituko da urruneko zerbitzaria, baina pantaila-argazkien eguneratzeak denbora gehiago beharko du erabiltzaileari erakusteko. Irudia cachean gordeta dagoenean zerbitzaria inoiz ez begiratzeko adierazten du 0 balioak."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Aplikazioen berrikuspenetan erabiliko den zerbitzaria"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Gutxieneko karmaren puntuazioa iritzietan"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Zenbaki hau baino baxuagoko karma dutenen iritziak ez dira bistaratuko."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Hirugarrentzat hartuko ez diren biltegi ofizialen zerrenda"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Software libretzat hartuko diren biltegi ofizialen zerrenda"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "Lizentziaren URLa aplikazio bat software libretzat hartzen denean erabiltzeko"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Instalatu bildutako aplikazioak sistemaren erabiltzaile guztientzako, posible denean"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Baimendu software-biltegien elkarrizketa-koadroa atzitzea"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Eskaini aurre-argitalpenen bertsio-berritzea"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Erakutsi UI elementu batzuk erabiltzaileari aplikazio bat librea ez dela jakinaraziz"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Galdetu libreak ez diren software-biltegiak instalatu nahi diren"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Erakutsi aplikazioen instalatutako tamaina instalatutako aplikazioen zerrendan"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://eu.wikipedia.org/wiki/Software_jabedun'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Libreak ez diren eta jabedun motako softwareak azaltzen duen URIa"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "Appstream fitxategietara zuzentzen dituzten URLen zerrenda aplikazioen informazioen karpetara deskargatzeko"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Instalatu AppStream fitxategiak sistemaren kokaleku batean erabiltzaile guztientzako"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Gaitu GNOME Shell hedapenen biltegia"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Saioa hasteko gnome-online-account IDa gordetzen duen kate bat"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Softwarea instalatzea"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalatu hautatutako softwarea sisteman"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Hautatu dena"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Ez hautatu ezer"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Software-biltegiak"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Eguneratze-hobespenak"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Softwarea"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Joan atzera"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "Es_ploratu"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalatuta"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Eguneratzeak"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Bilatu"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Iturburua"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Software-biltegiak"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Aztertu diskoa"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Sarearen ezarpenak"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Berrabiarazi orain"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Informazio gehiago"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Eguneratze automatikoak pausatu dira"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Aurkitu _gehiago"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Fitxategi lokala"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paketea"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Zain"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalatuta"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalatzen"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Kentzen"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Abioko modua: 'updates’ (eguneratzeak), ‘updated’ (eguneratuta), ‘installed’ (instalatuta) edo ‘overview’ (ikuspegi orokorra) izan daiteke,"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODUA"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Bilatu aplikazioak"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "BILATU"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Erakutsi aplikazioaren xehetasunak (aplikazioaren IDa erabiliz)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "IDa"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Erakutsi aplikazioaren xehetasunak (paketearen izena erabiliz)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKT-IZENA"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instalatu aplikazioa (aplikazioaren IDa erabiliz)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Ireki pakete-fitxategia lokal bat"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FITXATEGI-IZENA"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "Ekintza honekin aurreikusitako elkarreragiketa mota: ‘none’ (bat ere ez), ‘notify’ (jakinarazi), edo ‘full’ (osoa)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Erakutsi arazketaren informazio xehea"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Falta diren eguneratzeak atzeko planoan instalaten ditu"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Erakutsi eguneraketen hobespenak"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Irten uneko instantziatik"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Hobetsi fitxategi-iturburu lokalak AppStream aurretik"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Erakutsi bertsio-zenbakia"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "translator-credits"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Software aplikazioari buruz"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Sisteman softwarea kudeatzeko modu dotorea."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Barkatu! Ez dago xehetasunik aplikazio horretarako."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Bisitatu webgunea"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalatu…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Utzi"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalatu"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Eguneratu"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Kendu"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Gailua ezin da eguneratzean erabili."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Baimen gehiago behar ditu"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Saioa hasteko urreneko %s (%s domeinua) behar da"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Saioa hasi behar da"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Utzi"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Saio-hasiera"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Erabiltzailea"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Pasahitza"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Bestelakoa"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Denak"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Nabarmendua %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Balorazioa"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Izena"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Erakutsi"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Azpikategoriak iragazteko menua"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordenatu"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Azpikategoriak ordenatzeko menua"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Sartu zenbakia 1 eta %u artean: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Aukeratu aplikazio bat:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "SE-aren eguneratzeak orain instalatuta daude"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Azken aldian instalatuta eguneratzeak eskuragarri daude berrikusteko"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "'%s' instalatuta dago orain"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Berrabiarazi egin behar da aldaketek eragina izateko."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplikazioa erabiltzeko prest dago."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Berrabiarazi"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Abiarazi"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalatu hirugarrenen softwarea?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Gaitu hirugarrenen software-biltegia?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr "'%s' ez da <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">software librea eta iturburu irekikoa</a>, eta \"%s”(e)k hornitzen du."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s - hornitzailea: %s."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Software-biltegi hau gaitu behar da instalazioarekin jarraitzeko."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Herrialde batzuetan ilegala izan daiteke '%s' instalatzea edo erabiltzea."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Herrialde batzuetan ilegala izan daiteke kodeka hau instalatzea edo erabiltzea."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Ez abisatu berriro"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Gaitu eta instalatu"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Pakete-kudeatzaileak emandako erroreen xehetasunak:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Xehetasunak"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Eguneratze bat instalatu da"
+msgstr[1] "Eguneratzeak instalatu dira"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Sistema berrabiarazi behar da aldaketak eragina izateko."
+msgstr[1] "Berrabiaraztea eskatzen du hauek eragina izateko."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Orain ez"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Marrazki bizidunetan biolentziarik ez"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Marrazki bizidunetako pertsonaiak egoera arriskutsuetan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Marrazki bizidunetako pertsonaiak gatazka latzetan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Biolentzia grafikoa marrazki bizidunetako pertsonaietan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Fantasiazko biolentziarik ez"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Pertsonaiak egoera arriskuetan, errealitatetik erraz berezituz"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Pertsonaiak gatazka oldarkorrean, errealitatetik erraz berezituz"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Biolentzia grafikoa, errealitatetik erraz berezituz"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Biolentzia errealistarik ez"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Pertsonai sasi-errealistikoak egoera arriskutsuetan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Pertsonai errealisten adierazpenak gatazka oldarkorrean"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Biolentzia grafikoa pertsonai errealistikoetan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Odol-isurtzerik gabekoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Odol-isurtze ez-errealistikoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Odol-isurtze errealistikoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Odol-isurketen eta gorputz-mozketen adierazpenak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Sexu-biolentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Bortxaketak edo bestelako indarkeriazko sexu portaerak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Alkoholen erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Edari alkoholdunen erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Edari alkoholdunen erabilera"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Droga ilegalen erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Droga ilegalen erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Droga ilegalen erabilera"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Tabakoen produktuen erreferentziarik ez"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Tabakoen produktuen erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Tabakoen produktuen erabilera"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Inolako biluztasunik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Biluztasun artistiko gutxi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Biluztasun hedatua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Izaera sexualeko erreferentziarik edo adierazpenik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Zirikatzearen erreferentziak edo adierazpenak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Erreferentzia edo adierazpen sexualak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Sexu portaera grafikoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Inolako motako biraorik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Erabilera baxuko biraoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Erabilera ertaineko biraoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Erabilera altuko biraoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Umore ez desegokia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Komedia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Umore lizuna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Umore sexuala edo helduentzakoa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Inolako mintzaira diskriminatzailerik gabea"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Pertsona talde zehatz batekiko negatibotasuna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Min emozionala eragiteko diseinatutako diskriminazioa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Generoa, sexualitatea, arraza edo erlijioan oinarritutako diskriminazio esplizitua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Inolako iragarkirik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Produktu-kokapena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Produktuen marka edo marka erregistratu zehatzen erreferentzia esplizitua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Erabiltzaileei benetako munduko gauza zehatzak erostera bultzatzen zaie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Inolako apusturik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Ausazko gertaeretan apustu egitea fitxak edo kredituak erabiliz"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Apustuak gezurrezko diruarekin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Apustuak benetako diruarekin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Dirua gastatzeko gaitasunik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Erabiltzaileei benetako dirua dohaitzan ematera bultzatzen zaie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Aplikazioan benetako dirua erabiltzeko aukera"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Ez dago modurik beste erabiltzaileekin berriketan aritzeko"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Erabiltzaileen arteko elkarreragiketak berriketarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Erabiltzaileen arteko berriketa moderatuen funtzionaltasuna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Erabiltzaileen arteko kontrolik gabeko berriketen funtzionaltasuna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Ez dago modurik beste erabiltzaileekin hitz egiteko"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Erabiltzaileen arteko kontrolik gabeko audio- edo bideo-berriketen funtzionaltasuna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Sare sozialetako erabiltzaile-izen edo helb. elektronikorik partekatu gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Sare sozialetako erabiltzaile-izen edo helbide elektronikoak partekatuta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Erabiltzailearen datuak hirugarrenekin partekatu gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Aplikazioaren azken bertsioa egiaztatzea"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Besteek erabiltzailea identifikatzeko balio ez dute diagnostiko-datu partekatuak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Besteek erabiltzailea identifikatzeko erabil daitekeen informazioa partekatuta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Kokaleku fisikoa beste erabiltzaileekin partekatu gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Kokaleku fisikoa beste erabiltzaileekin partekatuta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Homosexualitatearen erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Homosexualitatearen zeharkako erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Sexu bereko pertsonen arteko musukatzea"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Sexu bereko pertsonen arteko sexu-jokabide esplizitua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Prostituzioaren erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Prostituzioaren zeharkako erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Prostituzioaren erreferentzia zuzenak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Prostituzioaren ekintzaren adierazpen grafikoak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Adulterioaren erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Adulterioaren zeharkako erreferentzia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Adulterioaren erreferentzia zuzena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Adulterioaren ekintzaren adierazpen grafikoak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Sexualizatu gabeko pertsonaiak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Erdi biluzik dauden giza pertsonaiak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Oso sexualizatutako giza pertsonaiak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Profanazioen erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Profanazio historikoen adierazpenak edo erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Gaur egungo giza profanazioen adierazpenak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Gaur egungo profanazioen adierazpen grafikoak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Giza gorpuzki hil ikusgairik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Giza gorpuzki hil ikusgaiak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Eguraldia jasaten duten giza gorpuzki hilak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Giza gorputzen profanazioaren adierazpen grafikoak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Esklabotasunaren erreferentziarik gabe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Esklabotasun historikoaren adierazpenak edo erreferentziak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Gaur egungo esklabotasunaren adierazpenak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Gaur egungo esklabotasunaren adierazpen grafikoak"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Orokorra"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "DENAK"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Nagusiak soilik"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Heldua"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Gaztea"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "10 urtetik gorakoak"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Edonor"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Haurtzaro goiztiarra"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Aplikazio bat"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "'%s'(e)k fitxategi-formatu gehigarriaren euskarria eskatzen ari da."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "MIME mota gehigarriak behar dira"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "'%s'(e)k letra-tipo gehigarriak eskatzen ari da."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Letra-tipo gehigarriak behar dira"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "'%s'(e)k multimediaren kodeka gehigarriak eskatzen ari da."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Multimediaren kodeka gehigarriak behar dira"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "'%s'(e)k inprimagailuen kontrolatzaile gehigarriak eskatzen ari da."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Inprimagailuen kontrolatzaile gehigarriak behar dira"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "'%s'(e)k pakete gehigarriak eskatzen ari da."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Pakete gehigarriak behar dira"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Bilatu softwarean"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Kentzen…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Zain dagoen instalazioa…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Zain dagoen eguneratzea…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Prestatzen…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Aplikazio hau soilik erabil daiteke interneterako konexio aktibo batekin."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalatu"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalatu…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Abiarazi"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Kendu"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Sarea"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Sarean zehar komunikatu daiteke"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Sistema-zerbitzuak"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Sistemako bus-aren D-Bus zerbitzuak atzi ditzake"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Saio-zerbitzuak"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Saioko bus-aren D-Bus zerbitzuak atzi ditzake"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Gailuak"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Sistemaren gailu-fitxategiak atzi ditzake"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Karpeta nagusia"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Fitxategiak ikusi, editatu eta sortu ditzake"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Fitxategiak ikusi ditzake"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Fitxategi-sistema"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Deskargen karpeta"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Ezarpenak"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Edozein ezarpen ikusi eta aldatu dezake"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Bistaratze-sistema zaharra"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Bistaratze-sistema zaharra eta segurtasun gutxikoa darabil"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Egin ihes isolamendutik"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Isolamendutik ihes egin dezake eta beste muga batzuk saihestu ditzake"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Aplikazio hau osorik isolatuta dago."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr "Ezin izan da zehaztu sistemaren zein zati atzitzen duen aplikazio honek. Hori arrunta da aplikazio zaharrenetan."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Ezezaguna"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Inoiz ere ez"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Ezezaguna"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Baxua"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Tartekoa"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Altua"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Ezezaguna"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Interneterako sarbidea behar duzu iritzia idazteko"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Ezin da \"%s” aurkitu"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domeinu Publikoa"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://eu.wikipedia.org/wiki/Software_jabedun"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software librea"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Erabiltzaileak honako lizentziarekin lotuta daude:"
+msgstr[1] "Erabiltzaileak honako lizentziekin lotuta daude:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Informazio gehiago"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Xehetasunen orria"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Deskargatzen"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Eguneratu"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Gehitu lasterbidea"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Kendu lasterbidea"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ez da pantaila-argazkirik eman"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Software-biltegia sartu da"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr "Aplikazio honek software-biltegi bat du eguneratzeak eskaintzeko, bai eta beste software batzuetarako sarbidea emateko ere."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Ez da software-biltegia sartu"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr "Aplikazio honek ez du software-biltegirik sartzen. Ez da eguneratuko bertsio berriak daudenean."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "Uneko banaketak jadanik software hau hau dauka, eta ez litzateke ordeztu behar."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Software-biltegia identifikatu da"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr "Software-biltegi hau gehitzean, beste software batzuk eta bertsio-berritze gehigarriak eskuratuko dituzu."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Erabili zuretzat fidagarriak diren software-biltegiak soilik."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Webgunea"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Eman dirua"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Zure hizkuntzara itzulita"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentazioa"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Argitalpenaren jarduera"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Sistemaren integrazioa"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Isolatua"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanala"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Bertsioa"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Balorazioa adinaren arabera"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Baimenak"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Eguneratuta"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategoria"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Instalatutako tamaina"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Deskargaren tamaina"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Garatzailea"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lizentzia"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Librea"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Pribatua"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Gehigarriak"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Hautatutako gehigarriak aplikazioarekin instalatuko dira."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Berrikuspenak"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Idatzi iritzia"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Erakutsi _gehiago"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr "Softwarea libreki exekutatu, kopiatu, banatu, ikertu eta eraldatu daitekeela adierazten du."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Software jabeduna"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr "Horrek esan nahi du softwarearen jabea banakako bat edo enpresa bat dela. Murriztapen asko egon ohi dira hura erabiltzeko, eta bere kode-iturburua ezin ohi da atzitu."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Softwarearen lizentzia ezezaguna"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Software honen lizentziaren terminoak ezezagunak dira."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Aplikazioa honela baloratu da, ezaugarri hauek dituelako:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Ez dago balorazio honen xehetasunik eskuragarri."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " eta "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "'%s' scriptaren letra-tipo eskuragarriak"
+msgstr[1] "'%s' scripten letra-tipo eskuragarriak"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Softwarea eskuragarri '%s'(r)entzako"
+msgstr[1] "Softwarea eskuragarri '%s'(r)entzako"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Ezin da eskatutako softwarea aurkitu"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s ez da aurkitu"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "webgunean"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Ez dago '%s' fitxategia eskaintzen duen aplikaziorik eskuragarri."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "Bai '%s' buruzko informazioa bai falta diren aplikazioak nola lor daitezkeen buruzko aukerak '%s'(e)n aurki ditzakezu."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Ez dago aplikaziorik eskuragarri '%s' euskarriarentzako."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "'%s' ez dago eskuragarri."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr "Bai '%s' buruzko informazioa bai formatu hau onartzen duen aplikazioa nola lor daitekeen buruzko aukerak '%s'(e)n aurki ditzakezu."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Ez dago letra-tiporik eskuragarri '%s' scriptaren euskarriarentzako."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "Bai '%s' buruzko informazioa bai aplikazio gehigarriak nola lor daitezkeen buruzko aukerak '%s'(e)n aurki ditzakezu."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Ez dago '%s' formatuaren kodek gehigarririk eskuragarri."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr "Bai '%s' buruzko informazioa bai formatu hau erreproduzi dezakeen kodeka nola lor daitekeen buruzko aukerak '%s'(e)n aurki ditzakezu."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Ez dago Plasma baliabiderik eskuragarri '%s' euskarriarentzako."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "Bai '%s' buruzko informazioa bai Plasma baliabide gehigarriak nola lor daitezkeen buruzko aukerak '%s'(e)n aurki ditzakezu."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Ez dago inprimagailuaren kontrolatzailerik eskuragarri '%s'(r)entzako."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr "Bai '%s' buruzko informazioa bai inprimagailu hau onartzen duen kontrolatzailea nola lor daitekeen buruzko aukerak '%s'(e)n aurki ditzakezu."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "webgune hau"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "Zoritxarrez, bilatzen ari zaren %s ezin izan da aurkitu. Ikusi %s xehetasun gehiagorako."
+msgstr[1] "Zoritxarrez, bilatzen ari zaren %s ezin izan da aurkitu. Ikusi %s xehetasun gehiagorako."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Huts egin du bilaketaren emaitzak aurkitzean"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "'%s' fitxategi-formatua"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kodeken orria"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Ongi etorri"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Ongi etorri Softwarera"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr "Software aplikazioak behar dituzun software guztiak instalatzea ahalbidetzen dizu, dena leku batetik. Ikusi gure gomendioak, arakatu kategoriak, edo bilatu nahi dituzun aplikazioak."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Goazen erosketetara"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Kendua"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalatuta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Eguneratuta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Ezezaguna"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y.eko %Bren %e"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Sistemaren aplikazioak"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Instalatutakoen orria"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Software-katalogoa deskargatzen ari da"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Orria kargatzen"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Abiarazten…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr "Uneko sarea neurtutakoa da. Neurtutako konexioek datu-mugak dituzte edo diru gehiago ordaindu behar da haietan. Datuak aurrezteko, eguneratze automatikoak pausatu egin dira.\n"
+"\n"
+"Neurtu gabeko sare bat eskuragarri dagoenean berrekingo zaie eguneratze automatikoei. Ordura arte, hala ere, posible da eguneratzeak eskuz instalatzea.\n"
+"\n"
+"Uneko sarea gaizki identifikatu bada eta neurtutakotzat hartu bada, ezarpen hau aldatu egin daiteke."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Ireki sareko _ezarpenak"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderatu orria"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Ez dago berrikuspenik moderatzeko"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistema"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "erabiltzailea"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Adarra"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URLa"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formatua"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalazioa"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Gehiago…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Gomendatutako audioen eta bideoen aplikazioak"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Gomendatutako jokoak"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Gomendatutako grafikoen aplikazioak"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Gomendatutako ekoizpenerako aplikazioak"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Atzitu software gehigarria hautatutako hirugarrenen iturburuetatik."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr "Software horietako batzuk jabedunak dira, eta ondorioz, murriztapenak dituzte erabiltzean, partekatzean eta kodearen iturburua atzitzean."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Bilatu gehiago…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Gaitu"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Ikuspegi orokorraren orria"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Gaitu hirugarrenen software-biltegiak?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Aurrekoa"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Hurrengoa"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Editorearen hautaketa"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Azken aldiko argitalpenak"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategoriak"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Ez da aplikazioaren daturik aurkitu"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Prestatu %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Ziur zaude %s biltegia kendu nahi duzula?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr "%s biltegiko aplikazio guztiak kenduko dira, eta biltegia berriro instalatu beharko duzu horiek berriro erabiltzeko."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Ziur zaude '%s' kendu nahi duzula?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "'%s' kendu egingo da, eta instalatu egin beharko duzu berriro erabiltzeko."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (instalatuta)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Eguneratze-hobespenak"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Eguneratze automatikoak"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "Eguneratze automatikoak desgaituta daude mugikorretan edo neurtutako konexioetan."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Eguneratze-jakinarazpen automatikoak"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Erakutsi jakinarazpenak eguneratzeak automatikoki instalatu direnean."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr "Instalatuta dauden zenbait software ez dira bateragarriak %s aplikazioarekin. Jarraitzen baduzu, honakoak automatikoki kenduko dira bertsioa berritzean:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Software bateraezina"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Jarraitu"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Aplikazio %u instalatuta"
+msgstr[1] "%u aplikazio instalatuta"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Gehigarri %u instalatuta"
+msgstr[1] "%u gehigarri instalatuta"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "Aplikazio %u"
+msgstr[1] "%u aplikazio"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "gehigarri %u"
+msgstr[1] "%u gehigarri"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s eta %s instalatuta"
+msgstr[1] "%s eta %s instalatuta"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Kendu “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Desgaitu \"%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr "Biltegi honetatik instalatu den softwareak ez du eguneratzerik jasoko, ezta segurtasun-konponketak ere."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Desgaitu"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "sistema eragilea"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Biltegi hauek %s hornitzaileak emandako software lehenetsia osatzen dute."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Hirugarrenen biltegiak"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Biltegi gehigarririk ez"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Gaitu"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Kendu…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Desgaitu…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Gaitu"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Desgaitzen"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Gaituta"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Desgaituta"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Gorroto dut"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Ez dut atsegin"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Ongi dago"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Atsegin dut"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Maite dut"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Har ezazu denbora gehiago iritzia idazteko"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Aukeratu balorazioa"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Laburpena motzegia da"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Laburpena luzeegia da"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Azalpena motzegia da"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Azalpena luzeegia da"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Bidali iritzia"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "Bi_dali"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Laburpena"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "Eman zure iritziari buruzko laburpen motz bat, adibidez: \"Aplikazio ona, gomendatzen dut\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Berrikuspena"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Zein iritzi duzu aplikazio honetaz? Saiatu zure ikuspuntua arrazoitzen."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr "Aurkitu zein datu bidaltzen den gure <a href=\"https://odrs.gnome.org/privacy\">pribatutasun-politikan</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "balorazio guztira"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "Portaera takarra, gehiegizkoa edo diskriminatzaileari buruzko iritziak eman ditzakezu."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "Behin emandakoan, iritzia ezkutatu egingo da administratzaile batek egiaztatu arte."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Bidali iritzia?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Eman berri"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Iritzi hau baliagarri izan zaizu?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Bai"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ez"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Beno…"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Eman berri…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Kendu…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Ez da pantaila-argazkirik aurkitu"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Huts egin du irudia kargatzean"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Ez da pantaila-argazkiaren tamaina aurkitu"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Ezin izan da cachea sortu"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Ez da baliozko pantaila-argazkia"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Pantaila-argazkia ez dago eskuragarri"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Pantaila-argazkia"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "bat datorren %u gehiago"
+msgstr[1] "bat datozen %u gehiago"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Bilaketaren orria"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Ez da aplikaziorik aurkitu"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "\"%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Ezin dira firmwarearen eguneratzeak %s(e)ndik deskargatu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Ezin dira eguneratzeak %s(e)nik deskargatu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Ezin dira eguneratzeak deskargatu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "Ezin dira eguneratzeak deskargatu: sareko sarbidea behar da, baina ez dago erabilgarri."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Ezin dira eguneratzeak %s(e)nik deskargatu: ez dago nahikoa leku librerik diskoan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Ezin dira eguneratzeak deskargatu: ez dago nahikoa leku librerik diskoan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Ezin dira eguneratzeak deskargatu: autentifikazioa behar da"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Ezin dira eguneratzeak deskargatu: autentifikazioa baliogabekoa da"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Ezin dira eguneratzeak deskargatu: ez daukazu nahikoa baimen softwareak instalatzeko"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Ezin da eguneraketen zerrenda eskuratu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Ezin da %s instalatu, deskargak huts egin baitu %s(e)ndik"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Ezin da %s instalatu, deskargak huts egin baitu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Ezin da %s instalatu exekuzio-denborako %s ez dagoelako erabilgarri"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Ezin da `%s' instalatu ez baitago onartuta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Ezin da instalatu: interneteko sarbidea behar da, baina ez dago erabilgarri."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Ezin da instalatu: aplikazioak baliogabeko formatu bat du"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Ezin da %s instalatu: ez dago nahikoa leku librerik diskoan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Ezin da %s instalatu: autentifikazioa behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Ezin da %s instalatu: autentifikazioa baliogabea da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Ezin da %s instalatu: ez daukazu nahikoa baimen softwarea instalatzeko"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Ezin da %s instalatu: entxufatuta egotea behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Ezin da %s instalatu: bateria-maila baxuegia da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Ezin da %s instalatu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Ezin da %s eguneratu %s biltegitik, deskargak huts egin baitu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Ezin da %s eguneratu, deskargak huts egin baitu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Ezin da %s biltegiko eguneratzerik instalatu, deskargak huts egin baitu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Ezin da eguneratzerik instalatu, deskargak huts egin baitu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Ezin da eguneratu: interneteko sarbidea behar da, baina ez dago erabilgarri."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Ezin da %s eguneratu: ez dago nahikoa leku librerik diskoan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Ezin da eguneratzerik instalatu: ez dago nahikoa lekurik diskoan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Ezin da %s eguneratu: autentifikazioa behar da"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Ezin dira eguneratzeak instalatu: autentifikazioa behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Ezin da %s eguneratu: autentifikazioa baliogabea da"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Ezin dira eguneratzeak instalatu: autentifikazioa baliogabea da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Ezin da %s eguneratu: ez daukazu nahikoa baimen softwarea eguneratzeko"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "Ezin dira eguneratzeak instalatu: ez daukazu nahikoa baimen softwarea instalatzeko"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Ezin da %s eguneratu: entxufatuta egotea behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Ezin dira eguneratzeak instalatu: entxufatuta egotea behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Ezin da %s eguneratu: bateria-maila baxuegia da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Ezin dira eguneratzeak instalatu: bateria-maila baxuegia da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Ezin da %s eguneratu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Ezin dira eguneratzeak instalatu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Ezin da %2$s(e)ndik %1$s(e)ra bertsio-berritu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Ezin da %s bertsiora berritu: deskargak huts egin du"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "Ezin da %s bertsiora berritu: interneteko sarbidea behar da, baina ez dago erabilgarri"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Ezin da %s bertsiora berritu: ez dago nahikoa leku diskoan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Ezin da %s bertsiora berritu: autentifikazioa behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Ezin da %s bertsiora berritu: autentifikazioa baliogabea da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Ezin da %s bertsiora berritu: ez daukazu nahikoa baimen bertsio-berritzeko"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Ezin da %s bertsiora berritu: entxufatuta egotea behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Ezin da %s bertsiora berritu: bateria-maila baxuegia da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Ezin da %s bertsiora berritu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Ezin da %s kendu: autentifikazioa behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Ezin da %s kendu: autentifikazioa baliogabea da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Ezin da %s kendu: ez daukazu nahikoa baimen softwarea kentzeko"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Ezin da %s kendu: entxufatuta egotea behar da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Ezin da %s kendu: bateria-maila baxuegia da"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Ezin da %s kendu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Ezin da %s abiarazi: %s ez dago instalatuta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Ez dago nahikoa leku diskoan — Askatu leku piskat eta saiatu berriro."
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Zerbait gaizki irten da"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Fitxategiaren instalazioak huts egin du: ez dago onartuta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Huts egin du fitxategia instalatzean: autentifikazioak huts egin du"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Instalazioak huts egin du: ez dago onartuta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Instalazioak huts egin du: autentifikazioak huts egin du"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Ezin da %s kontaktatu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s(e)k berrabiaraztea eskatzen du plugin berriak erabiltzeko"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Aplikazio honek berrabiaraztea eskatzen du plugin berriak erabil ahal izateko."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Entxufatuta egon behar du"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Bateria-maila baxuegia da"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Iturburua: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (instalatzen)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (kentzen)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Kendu dena"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Ez dago eguneratzearen azalpenik eskuragarri."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "'%s'(e)n instalatuta"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Instalatutako eguneratzeak"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Gehitutakoak"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Kendutakoak"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Eguneratzeak"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Aurreko bertsiora itzulitakoak"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Ez da eguneratzerik instalatu sistema honetan."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Segurtasuneko eguneratzeak egiteko daude"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Eguneratze garrantzitsuak orain instalatzea gomendatzen da"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Berrabiarazi eta instalatu"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Softwareen eguneratzeak eskuragarri"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "SE eta aplikazioen eguneratze garrantzitsuak instalatzeko prest daude"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Ikusi"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "Aplikazio %u eguneratu da — Beharrezkoa da berrabiaraztea"
+msgstr[1] "%u aplikazio eguneratu dira — Beharrezkoa da berrabiaraztea"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "Aplikazio %u eguneratu da"
+msgstr[1] "%u aplikazio eguneratu da"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s eguneratu da."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Berrabiarazi aplikazioa."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s eta %s eguneratu dira."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikazioak berrabiaraztea behar du."
+msgstr[1] "%u aplikazio instalatuta"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "%s, %s eta %s barne hartzen ditu."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Sistema Eragilearen eguneratzeak eskuragaitz"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Bertsio-berritu segurtasun-eguneratzeak jasotzen jarraitzeko."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s(r)en bertsio berria eskuragarri dago instalatzeko"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Software-eguneratzeak eskuragarri"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Huts egin du softwareak eguneratzean"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Huts egin du SEren eguneratze garrantzitsu bat instalatzean."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Erakutsi xehetasunak"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Sistemaren eguneratzea osatu da"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Ongi etorri %s %s sistemara!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Softwarearen eguneratzea instalatuta"
+msgstr[1] "Software-eguneratzeak instalatuta"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "SEren eguneratze garrantzitsu bat instalatu da."
+msgstr[1] "SEren eguneratze garrantzitsuak instalatu dira."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Berrikuspena"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Huts egin du eguneratzeak"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistema jadanik eguneratuta dago."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Eguneratzea bertan behera utzi da."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr "Interneteko sarbidea behar da, baina ez dago erabilgarri. Ziurtatu Interneterako sarbidea duzula eta saiatu berriro."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "Segurtasun-arazoak daude eguneratzearekin. Kontsultatu softwarearen hornitzailearekin xehetasun gehiagorako."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Ez dago nahikoa leku librerik. Askatu leku pixka bat eta saiatu berriro."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr "Sentitzen dugu: eguneratzea ezin izan da instalatu. Itxaron beste eguneratze bati eta saiatu berriro. Arazoak jarraitzen badu, jarri harremanetan software-hornitzailearekin."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Atzo, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Atzo, %I:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Duela bi egun"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Duela hiru egun"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Duela lau egun"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Duela bost egun"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Duela sei egun"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Duela aste bat"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Duela bi aste"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Eguneratze berriak bilatzen…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Eguneratzeak konfiguratzen…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(denbora bat beharko du)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Azken egiaztaketa: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s ez da gehiago sostengatuko."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "SE ez da gehiago sostengatuko"
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Segurtasun-eguneratzerik ez duela jasoko adierazten du honek."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Bertsio berriago batera eguneratzea gomendatzen da."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Gastu gehigarriak sor daitezke"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "Bandazabal mugikorra erabiliz eguneratzeak dauden egiaztatzeak zure fakturaren gastua handiagotu dezake."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Egiaztatu _dena den"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Ez dago sarerik"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Interneterako sarbidea behar da eguneratzeak egiaztatzeko."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Egiaztatzen…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Egiaztatu eguneratzeak dauden"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Eguneraketen orria"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Softwarea eguneratuta dago"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "Bandazabal mugikorra erabiliz eguneratzeak dauden egiaztatzeak zure fakturaren gastua handiagotu dezake"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Egiaztatu dena den"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Konektatu eguneratzeak egiaztatzeko"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Sarearen ezarpenak"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Eguneratzeak automatikoki kudeatuta daude"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Berrabiarazi eta eguneratu"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Eguneratu dena"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integratutako firmwarea"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Berrabiarazi behar da"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Aplikazioen eguneratzea"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Gailuaren firmwarea"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Deskargatu"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Bertsio-berritu aurretik, zure datuen babeskopiak egitea gomendatzen da."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Berrabiarazi orain"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Eguneratzeak ordenagailua berrabiaraztean aplikatuko dira."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s eskuragarri orain"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "%s %s deskargaren zain"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s deskargatzen"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s : instalatzeko prest"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Bertsio-berritze nagusia, eginbide berriekin eta gehitutako dotoreziekin."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Ikasi gehiago"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Gehitu, kendu edo eguneratu ordenagailu honetako softwarea"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr "Eguneratzeak;Bertsio-berritzeak;Iturburuak;Biltegiak;Hobespenak;Instalatu;Desinstalatu;Programa;Softwarea;Aplikazioa;Denda;App;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Audioaren sorrera eta edizioa"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musika erreproduzigailuak"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Araztaileak"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEak"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Adimen artifiziala"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kimika"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Hizkuntzak"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematikak"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Ekintza"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Abentura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkade-jokoak"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Bloke-jokoak"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Mahai-jokoak"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kartak"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatzaileak"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Umeentzako"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika-jokoak"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rol-jokoak"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Kirolak"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estrategia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafikoak"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Argazkigintza"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Eskaneatzea"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Bektore grafikoak"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Ikustaileak"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Egutegia"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Datu-basea"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finantzak"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Testu-prozesadorea"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Letra-tipoak"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodekak"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Sarrerako iturburuak"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Hizkuntza-paketeak"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Itzulpengintza"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardwarearen kontrolatzaileak"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Berriketa"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Berriak"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Web nabigatzaileak"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Testu-editoreak"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Denak"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Nabarmendua"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Artea"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Bibliografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komikiak"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fikzioa"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Osasuna"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historia"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Bizimodua"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Kirolak"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audioa eta bideoa"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Garapeneko tresnak"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Hezkuntza eta zientzia"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Jokoak"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafikoak eta argazkigintza"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Ekoizpena"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikazioa eta albisteak"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Erreferentzia"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Tresnak"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "SEren eguneratzeak"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Errendimenduaren, egonkortasunaren eta segurtasunaren hobekuntzak ditu."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Nabarmendutako irudiak deskargatzen…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS eguneratze bat, eginbide eta akatsen zuzenketa berriekin."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS eguneratze-zerbitzuak ezin izan du eguneratzea atzitu eta aplikatu."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Softwaren sistema osorako AppStream instalatzailea"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Huts egin du komando-lerroko argumentuak analizatzean"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Fitxategi-izen bakar bat zehaztu behar duzu"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Programa hau root supererabiltzaileak soilik erabil dezake"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Huts egin du eduki mota balioztatzean"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Huts egin du kopiatzean"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Metadatu gehigarrien fitxategiak deskargatzen…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Eguneraketen informazioa deskargatzen…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "Berritu bertsioa eginbiderik berrienak, errendimendu hobea eta egonkortasun gehiago lortu nahi baduzu."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak euskarria"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak Linuxeko mahaigaineko aplikazioen lan-marko bat da"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Flatpak-eko %s(r)en metadatuak eskuratzen…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s gailuaren eguneratzea"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s sistemaren eguneratzea"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s kontrolagailu kapsulatuaren eguneratzea"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s kudeaketa-motorraren eguneratzea"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s kudeaketa-motor korporatiboaren eguneratzea"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s kontsumitzaileentzako kudeaketa-motorraren eguneratzea"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s kontrolagailuaren eguneratzea"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt kontrolagailuaren eguneratzea"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s PUZ mikrokodearen eguneratzea"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s konfigurazioaren eguneratzea"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Firmwarearen eguneratzearen sinadura deskargatzen…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Firmwarearen eguneratzearen metadatuak deskargatzen…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Firmwarea bertsio-berritzeko euskarria"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Firmwarea bertsio-berritzeko euskarria eskaintzen du"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Aplikazioen balorazioak deskargatzen…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Mahaigain Irekien Balorazioen Euskarria (ODRS)"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRSk erabiltzaileei aplikazioen berrikuspenak egiteko zerbitzua eskaintzen die"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap biltegia"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap euskarria"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap Linuxeko pakete unibertsal bat da"
+
+#~ msgid "About %s"
+#~ msgstr "%s aplikazioari buruz"
+
+#~ msgid "%s ME"
+#~ msgstr "%s kudeaketa-motorra"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Hedapenen ezarpenak"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Hedapenak zure ardurapean erabiliko dira. Sisteman arazoak badituzu, "
+#~ "haiek desgaitzea gomendatzen da."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Huts egin du osagaiak kargatzeak"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSSa egiaztatuta. Ongi!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Huts egin du fitxategia kargatzean"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Gorde gabeko aldaketak"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Aplikazioen zerrenda jadanik kargatuta dago."
+
+#~ msgid "Merge documents"
+#~ msgstr "Batu dokumentuak"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Baztertu aldaketak"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Ireki AppStream fitxategia"
+
+#~ msgid "_Open"
+#~ msgstr "_Ireki"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Gorde AppStream fitxategia"
+
+#~ msgid "_Save"
+#~ msgstr "_Gorde"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Huts egin du fitxategia gordetzean"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "“%s”(r)en iragarkiaren diseinua ezabatuta."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Iragarkiaren diseinua ezabatuta."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Aplikazioen zerrendak gorde gabeko aldaketak ditu."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Erabili erregistro xehea"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOMEko Softwaren iragarkien diseinatzailea"
+
+#~ msgid "No Designs"
+#~ msgstr "Diseinurik ez"
+
+#~ msgid "Error message here"
+#~ msgstr "Errorearen mezua hemen"
+
+#~ msgid "App ID"
+#~ msgstr "Apl. IDa"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Editorearen hautaketa"
+
+#~ msgid "Category Featured"
+#~ msgstr "Nabarmendutako kategoria"
+
+#~ msgid "Undo"
+#~ msgstr "Desegin"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Iragarkien diseinatzailea"
+
+#~ msgid "New Banner"
+#~ msgstr "Iragarki berria"
+
+#~ msgid "Import from file"
+#~ msgstr "Inportatu fitxategitik"
+
+#~ msgid "Export to file"
+#~ msgstr "Esportatu fitxategira"
+
+#~ msgid "Delete Design"
+#~ msgstr "Ezabatu diseinua"
+
+#~ msgid "Featured App"
+#~ msgstr "Nabarmendutako apl."
+
+#~ msgid "OS Upgrade"
+#~ msgstr "SEren bertsio-berritzea"
+
+#~ msgid "Spacing"
+#~ msgstr "Tartea"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Umeen arteko tarte-kopurua"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplikazio nabarmenak"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Diseinatu GNOME Softwaren nabarmendutako iragarkiak"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell-en hedapenak"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Web aplikazioen euskarria"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Exekutatu webeko aplikazio ezagunak nabigatzaile batean"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell hedapenen biltegia"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Shell hedapenen metadatuak deskargatzen…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell hedapena"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Erakutsi karpeten kudeaketaren UIa"
+
+#~ msgid "Folder Name"
+#~ msgstr "Karpetaren izena"
+
+#~ msgid "_Add"
+#~ msgstr "_Gehitu"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Gehitu aplikazioen karpetari"
+
+#~ msgid "Top Rated"
+#~ msgstr "Puntuazio onena"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Egin klik elementuen gainean hautatzeko"
+
+#~ msgid "Select"
+#~ msgstr "Hautatu"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Gehitu karpetari…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Eraman karpetara…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Kendu karpetatik"
diff --git a/po/fa.po b/po/fa.po
new file mode 100644
index 0000000..a5e0973
--- /dev/null
+++ b/po/fa.po
@@ -0,0 +1,4793 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Arash Mousavi <mousavi.arash@gmail.com>, 2016.
+# Danial Behzadi <dani.behzi@ubuntu.com>, 2017-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-26 11:06+0000\n"
+"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
+"Language-Team: \n"
+"Language: fa_IR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "نرم‌افزارهای گنوم"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "مدیر برنامه‌ها برای گنوم"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system extensions and "
+"remove existing installed applications."
+msgstr ""
+"نرم‌افزارها می‌گذارد برنامه‌های جدید و افزونه‌های سامانه‌ای را یافته و نصب کنید و "
+"برنامه‌های پیش‌تر نصب‌شده را بردارید."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful descriptions "
+"and multiple screenshots per application. Applications can be found either through "
+"browsing the list of categories or by searching. It also allows you to update your "
+"system using an offline update."
+msgstr ""
+"نرم‌افزارهای گنوم برنامه‌های محبوب و برتر را همراه با توضیحات مفید و چندین نما از هر "
+"برنامه نمایش می‌دهد. برنامه‌ها می‌توانند از طریق مرور دسته‌بندی‌ها یا با استفاده از جست‌وجو "
+"پیدا و نصب شوند. همچنین به شما اجازه به‌روز رسانی سامانه از طریق به‌روز رسانی برون‌خط را "
+"می‌دهد."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "تابلوی نمای کلّی"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "تابلوی جزییات"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "تابلوی نصب شده‌ها"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "تابلوی به‌روز رسانی‌ها"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "جزییات به‌روز رسانی"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "پروژهٔ گنوم"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "نصب یک پروندهٔ appstream در یک مکان سیستمی"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "در حال نصب یک پرونده appstream در یک مکان سیستمی"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "فهرستی از پروژه‌های سازگار"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and XFCE."
+msgstr ""
+"این فهرستی است از پروژه‌های سازگار مانند گنوم، KDE و XFCE است که باید نمایش دهیم."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "این که به‌روز رسانی‌ها و ارتقاها در نرم‌افزارهای گنوم مدیریت شود یا نه"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any automatic "
+"updates actions or prompt for upgrades."
+msgstr ""
+"در صورت از کار افتاده بودن، نرم‌افزارهای گنوم تابلوی به‌روز رسانی‌ها را پنهان کرده و هیچ "
+"کنشی برای به‌روز رسانی خودکار یا اعلانی برای ارتقا نخواهد داد."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "بارگیری و نصب خودکار به‌روز رسانی‌ها"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"در صورت به کار افتاده بودن، نرم‌افزارهای گنوم به صورت خودکار به‌روز رسانی‌ها را در "
+"پس‌زمینه دریافت کرده و آن‌هایی که نیاز به شروع دوباره ندارند را نصب هم می‌کند."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "آگاهی کاربر از نرم‌افزارهای به‌روز شده در پس‌زمینه"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened whilst the "
+"user was idle."
+msgstr ""
+"اگر به کار افتاده باشد، نرم‌افزارهای گنوم دربارهٔ به‌روز رسانی‌هایی که در زمان بی‌کار بودن "
+"کاربر انجام شدند، به او آگاهی می‌دهد."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "این که هنگام بودن روی اتّصال اندازه‌گیری شده، به صورت خودکار تازه‌سازی شود یا نه"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even when using "
+"a metered connection (eventually downloading some metadata, checking for updates, "
+"etc., which may incur in costs for the user)."
+msgstr ""
+"اگر به کار افتاده باشد، نرم‌افزارهای گنوم حتا روی یک اتّصال اندازه‌گیری شده هم به صورت "
+"خودکار در پس‌زمینه تازه‌سازی می‌شود (در نهایت بارگیری کمی فراداده، بررسی برای به‌روز "
+"رسانی‌ها و… که ممکن است برای کاربر هزینه داشته باشد)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "این که نخستین اجرای نرم‌افزارهای گنوم است یا نه"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "نمایش رتبه‌بندی ستاره‌ای در کنار نرم‌افزارها"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "پالایش برنامه‌ها بر مبنای مجموعهٔ شاخهٔ پیش‌گزیده برای دوردست"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "برنامه‌های انحصاری، پیش از نصب، گفت‌وگوی هشداری نمایش می‌دهند"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This controls "
+"if that dialog is suppressed."
+msgstr ""
+"هنگامی که برنامه‌های انحصاری نصب می‌شود، می‌توان یک گفت‌وگوی هشدار نمایش داد. این کنترل "
+"میکند که گفت‌وگو نمایش داده شود یا نه."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "فهرستی از برنامه‌های محبوب"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "یک فهرست از برنامه‌هایی که می‌توان جایگزین برنامه‌های تعریف شده سیستم شود."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "آخرین زمان بررسی برای به‌روز رسانی"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "آخرین زمان بررسی برای ارتقا"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "زمان نخستین به‌روز رسانی امنیتی ، پاک شده بعد از به‌روز رسانی"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "آخرین زمان به‌روز رسانی"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "آخرین مهر زمانی هنگامی که سامانه برخط بود و به‌روز رسانی‌ای درسافت کرد"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "سن بر حسب ثانیه برای تأیید معتبر بودن نماگرفت"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but updates "
+"to the screenshots may take longer to show to the user. A value of 0 means to never "
+"check the server if the image already exists in the cache."
+msgstr ""
+"گرینش مقداری بزرگ‌تر یعنی درخواست‌های کم‌تر به کارساز دوردست، ولی ممکن است نمایش به‌روز "
+"رسانی‌های نماگرفت‌ها به کاربر، بیش‌تر طول بکشد. مقدار ۰ یعنی در صورت وجود تصویر در "
+"انباره، هرگز کارساز بررسی نشود."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "کارگزار جهت استفاده برای بررسی‌های برنامه‌ها"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "کمینه امتیاز کارما برای بررسی‌ها"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "بررسی‌هایی با کارما کمتر از این عدد نمایش داده نمی‌شوند."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "فهرستی از مخازن رسمی که نباید سوم‌شخص در نظر گرفته شوند"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "فهرستی از مخازن رسمی که باید نرم‌افزار آزاد در نظر گرفته شوند"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "The licence URL to use when an application should be considered free software"
+msgstr ""
+"آدرس اینترنتی گواهینامه زمانی که یک برنامه باید به عنوان نرم‌افزار آزاد شناسایی شود"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"نصب برنامه‌های گردآوری شده (bundled) برای تمام کاربران روی سیستم تا جایی که ممکن است"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "اجازه دسترسی به گفت‌وگوی مخازن نرم‌افزاری"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "پشنهاد به‌روز رسانی برای پیش-انتشارها"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "نمایش چند عنصر UI برای مطلع کردن کاربر از برنامه غیر آزاد"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "نمایش اعلان برای نصب مخازن نرم‌افزاری غیر آزاد"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "نمایش اندازهٔ نصب‌شده برای کاره‌ها در فهرست برنامه‌های نصب‌شده"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "https://wiki.ubuntu.ir/wiki/Proprietary_Software"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "آدرس اینترنتی‌ای که نرم‌افزار تجاری و غیر آزاد را توضیح می‌دهد"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an app-info "
+"folder"
+msgstr ""
+"فهرستی از نشانی‌های مورد اشاره به پرونده‌های appstream که در این شاخهٔ app-info بارگیری "
+"خواهند شد"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "نصب پرونده‌های AppStream به یک موقعیت در کل سمانه برای تمام کاربران"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "به کار انداختن مخزن افزونه‌ّای پوستهٔ گنوم"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "برای ورود از یک رشته برای چینش شناسهٔ حساب برخط گنوم استفاده می‌شود"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "نصب نرم‌افزار"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "نصب برنامه گزیده روی سیستم"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "گزینش همه"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "گزینش هیچ‌کدام"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_مخازن نرم‌افزاری"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "ترجیحات _به‌روز رسانی"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "نرم‌افزار"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "بازگشت"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_کشف"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_نصب شده"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_به‌روز رسانی‌ها"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "جست‌وجو"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "منبع"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "مخازن نرم‌افزاری"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "بررسی دیسک"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "تنظیمات شبکه"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "هم‌اکنون انجام راه‌اندازی دوباره"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "اطّلاعات بیش‌تر"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "به‌روز رسانی‌های خودکار مکث شدند"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "بیش‌تر دریابید"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "پروندهٔ محلَّی"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "بسته"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "در انتظار"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "نصب شد"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "در حال نصب"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "در حال برداشتن"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "حالت بالا آمدن: یا «updates»، «updates»، «installed» یا «overview»"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "جست‌وجو برای برنامه‌ها"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "نمایش جزییات برنامه (با استفاده از شناسه برنامه)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "نمایش جزییات برنامه (با استفاده از نام بسته)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "نصب برنامه (با استفاده از شناسه برنامه)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "گشودن یک پروندهٔ بسته محلی"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, or ‘full’"
+msgstr "گونهٔ برهم‌کنش مورد انتظار برای این کنش: none، notify یا full"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "نمایش اطلاعات کامل رفع‌اشکال"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "هر به‌روز رسانی منتظری را در پس‌زمینه نصب می‌کند"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "نمایش ترجیحات به‌روز رسانی"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "خروج از نمونه در حال اجرا"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "ترجیح دادن منابع محلی به AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "نمایش شماره نسخه"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"آرش موسوی <mousavi.arash@gmail.com>\n"
+"دانیال بهزادی <dani.behzi@ubuntu.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "درباره «برنامه‌ها»"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "راهی خوب برای مدیریت نرم‌افزارهای سامانه‌تان."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "متأسّفانه هیچ جزییاتی برای این برنامه وجود ندارد."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "مشاهدهٔ پایگاه وب"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "نصب…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "لغو"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "نصب"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "به‌روز رسانی"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492 src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "برداشتن"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "از دستگاه نمی‌توان در هنگام به‌روز رسانی استفاده کرد."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "نیاز به دسترسی‌های اضافی دارد"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "نیاز به ورود دوردست %s (قلمرو %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "نیاز به ورود"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_لغو"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_ورود"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_کاربر"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_گذرواژه"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "سایر"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "همه"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "ویژه"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "ویژه‌های %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "رتبه‌بندی"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "نام"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "نمایش"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "فهرست پالایش زیردسته‌ها"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "چینش"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "فهرست چینش زیردسته‌ها"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "لطفاً عددی از ۱ تا %Iu وارد کنید: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "یک برنامه انتخاب کنید:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "به‌روز رسانی‌های سیستم‌عامل نصب شده‌اند"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "برنامه‌های نصب شدهٔ اخیر برای ارسال بازخورد آماده‌اند"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "حالا %s نصب شد"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "برای اثربخشی تغییرات نیاز به یک شروع دوباره است."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "برنامه برای استفاده آماده است."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "راه‌اندازی دوباره"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "اجرا"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "نصب نرم‌افزار ثالث؟"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "به کار انداختن مخزن نرم‌افزاری سوم‌شخص؟"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"برنامه %s یک برنامه <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">نرم‌افزار آزاد و کدباز</a> نیست و توسط «%s» فراهم شده است."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "برنامه %s توسط «%s» فراهم شده است."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "برای ادامهٔ نصب، باید این مخزن نرم‌افزاری به کار بیفتد."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "ممکن است نصب یا استفاده از %s در بعضی کشورها ممنوع باشد."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "ممکن است نصب یا استفاده از این رمزینه در بعضی کشورها ممنوع باشد."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "دوباره هشدار نده"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "فعال‌سازی و نصب"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "جزییات خطاها از مدیر بسته‌ها:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "جزییات"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "به‌روز رسانی نصب شد"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "برای اثربخشی تغییرات نیاز به یک شروع دوباره است."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "هم‌اکنون نه"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "بدون خشونت کارتونی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "شخصیت‌های کارتونی در وضعیت‌های نا امن"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "شخصیت‌های کارتونی در وضعیت‌های درگیری"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "خشونت شامل شخصیت‌های کارتونی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "بدون خشونت فانتزی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "شخصیت‌ها در موقعیت‌های نا امن که به راحتی از واقعیت قابل تشخیص هستند"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "شخصیت‌های کارتونی در وضعیت‌های درگیری که به راحتی از واقعیت قابل تشخیص هستند"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "شامل خشونت که به راحتی از واقعیت قابل تشخیص هستند"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "بدون خشونت واقعی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "شخصیت‌های تقریبا واقعی که در وضعیت‌های نا امن"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "تصاویر شخصیت‌های واقعی در وضعیت‌های درگیری"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "خشونت شامل شخصیت‌های واقعی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "بدون خون‌ریزی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "خون‌ریزی غیر واقعی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "خون‌ریزی واقعی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "تصاویر خون‌ریزی و قطع اعضای بدن"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "بدون خشونت جنسی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "تجاوز یا سایر اعمال جنسی خشونت‌آمیز"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "بدون اشاره به نوشیدنی‌های الکلی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "اشاره به نوشیدنی‌های الکلی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "استفاده از نوشیدنی‌های الکلی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "بدون اشاره به مخدرهای غیرقانونی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "اشاره به مخدرهای غیرقانونی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "استفاده از مخدرهای غیرقانونی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "بدون اشاره به محصولات تنباکو"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "اشاره به محصولات تنباکو"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "استفاده از محصولات تنباکو"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "بدون هیچ نوع برهنگی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "برهنگی هنری و مختصر"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "برهنگی ممتد"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "بدون اشاره یا ترسیم طبیعت جنسی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "اشاره و یا تصاویر تحریک‌آمیز"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "اشاره یا تصاویر جنسی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "رفتارهای جنسی گرافیکی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "بدون هیچ نوع ناسزا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "استفاده کم یا ملایم از ناسزا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "استفاده متوسط از ناسزا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "استفاده زیاد یا مکرر از ناسزا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "بدون شوخی‌های نامربوط"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "شوخی‌های هیجانی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "شوخی‌های مبتذل"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "شوخی‌های جنسی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "بدون هیچ نوع زبان تبعیض‌آمیز"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "اشاره منفی به گروه خاصی از مردم"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "طراحی خاص برای ایجاد آسیب عاطفی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "تبعیض آشکار بر اساس جنسیت، نژاد یا دین"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "بدون هیچ نوع تبلیغات"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "جایگذاری محصول"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "اشاره‌های واضح به برندهای مشخص یا محصولات تجاری"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "کاربران تشویق می‌شوند اجناسی در دنیای واقعی بخرند"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "بدون هیچ نوع قمار"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "شرط‌بندی روی رویداد اتفاقی با استفاده از توکن یا اعتبار"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "شرط‌بندی با استفاده از پولِ «بازی»"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "شرط‌بندی با استفاده از پول واقعی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "بدون امکان خرج کردن پول"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "کاربران تشویق می‌شوند پول واقعی اعانه کنند"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "امکان خرج کردن پول واقعی در کاره"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "بدون امکان چت با دیگر کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "ارتباط بازیکن با بازیکن بدون امکان گپ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "امکان گپ نظارت‌شده بین کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "امکان گپ بدون نظارت بین کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "بدون امکان صحبت با دیگر کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "امکان گپ ویدیویی یا صوتی بدون نظارت بین کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "بدون هم‌رسانی نام‌کاربری شبکه‌های اجتماعی کاربر یا آدرس پست‌های الکترونیکی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "هم‌رسانی نام‌کاربری شبکه‌های اجتماعی کاربر یا آدرس پست‌های الکترونیکی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "بدون هم‌رسانی اطّلاعات کاربر با سوم‌شخص‌ها"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "در حال بررسی برای جدیدترین نگارش برنامه"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "هم‌رسانی داده‌های تشخیصی که نمی‌گذارد دیگران، کاربر را شناسایی کنند"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "هم‌رسانی اطّلاعاتی که به دیگران اجازهٔ شناسایی کاربر را می‌دهد"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "بدون هم‌رسانی موقعیت فیزیکی با دیگر کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "هم‌رسانی موقعیت فیزیکی با دیگر کاربران"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "بدون اشاره به هم‌جنسگرایی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "اشاره‌های غیرمستقیم به هم‌جنسگرایی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "بوسه میان افراد هم‌جنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "رفتار جنسی ترسیمی میان افراد هم‌جنس"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "بدون اشاره به فاحشگی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "اشاره‌های غیرمستقیم به فاحشگی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "اشاره‌های مستقیم به فاحشگی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "ترسیم‌های عمل فاحشگی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "بدون اشاره به زنا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "اشاره‌های غیرمستقیم به زنا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "اشاره‌های مستقیم به زنا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "ترسیم‌های عمل زنا"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "بدون شخثیت‌های جنسیت‌زده"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "شخصیت‌های انسانی کم‌پوشش"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "شخصیت‌های انسانی آشکارا جنسیت‌زده"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "بدون اشاره به هتک حرمت"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "ترسیم یا اشاره به هتک‌حرمت تاریخی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "ترسیم هتک‌حرمت انسانی نوین"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "تصویر هتک‌حرمت نوین"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "بقایای جسد انسانی نانمایان"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "بقایای جسد انسانی نمایان"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "جسدهای انسانی در معرض عناصر"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "ترسیم هتک‌حرمت به جسدهای انسان"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "بدون اشاره به بردگی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "ترسیم یا اشاره به بردگی تاریخی"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "ترسیم بردگی نوین"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "تصویر بردگی نوین"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "عمومی"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "همه"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "فقط بزرگسالان"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "بالغ"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "نوجوان"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "هرکسی بالای ۱۰"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "هرکسی"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "کودک"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "یک برنامه"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "برنامه %s درخواست پشتیبانی از یک قالب پرونده اضافی را دارد."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "نیاز به یک نوع MIME جدید"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "برنامه %s درخواست قلم‌های جدیدی دارد."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "نیاز به قلم‌های جدید"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "برنامه %s درخواست رمزینهٔ رسانه‌ای جدیدی دارد."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "نیاز به رمزینهٔ رسانه‌ای جدید"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "برنامه %s درخواست راه‌انداز چاپگر جدیدی دارد."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "نیاز به راه‌انداز چاپگر جدید"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "برنامه %s درخواست بسته‌های جدیدی دارد."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "نیاز به بسته‌های جدید"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "یافتن در نرم‌افزارها"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "در حال برداشتن…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "در انتظار نصب…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "منتظر به‌روز رسانی…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "در حال آماده‌سازی…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid "This application can only be used when there is an active internet connection."
+msgstr "این برنامه تنها زمانی که یک اتصال فعال اینترنتی داشته باشید، قابل استفاده است."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907 src/gs-details-page.ui:167
+#: src/gs-third-party-repo-row.c:84 src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_نصب"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_نصب…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_اجرا"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_حذف"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "شبکه"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "توانایی ارتباط روی شبکه"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "خدمت‌های سامانه"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "توانایی دسترسی به خدمت‌های دی‌باس روی باس سامانه"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "خدمت‌های نشست"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "توانایی دسترسی به خدمت‌های دی‌باس روی باس نشست"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "‌افزاره‌ها"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "توانایی دسترسی به پرونده‌های افزارهٔ سامانه"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "شاخهٔ خانه"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024 src/gs-details-page.c:1026
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "توانایی دیدن، ویرایش و ایجاد پرونده‌ها"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "توانایی دیدن پرونده‌ها"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025 src/gs-update-dialog.c:99
+#: src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "سامانهٔ پرونده"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027 src/gs-update-dialog.c:101
+#: src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "شاخهٔ بارگیری‌ها"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "تنظیمات"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "توانایی دیدن و تغییر هر تنظیمی"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "سامانهٔ نمایشی قدیمی"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "استفاده از یک سامانهٔ نمایشی ناامن قدیمی"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "فرار از قرنطینه"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "توانایی گریز از گودال ماسه و دور زدن هر محدودیت دیگری"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "برنامه کاملاً قرنطینه است."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. This is "
+"typical for older applications."
+msgstr ""
+"ناتوانی در تشخیص نواحی‌ای از سامانه که این برنامه به آن‌ها دسترسی دارد. برای برنامه‌های "
+"قدیمی، معمول است."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "ناشناس"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "هیچ وقت"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "ناشناس"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "پایین"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "متوسّط"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "بالا"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006 src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "ناشناخته"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "برای نوشتن بازخورد، نیاز به دسترسی به اینترنت دارید"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "امکان یافتن «%s» نبود"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "دامنهٔ عمومی"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://wiki.ubuntu.ir/wiki/Free_Software"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "نرم‌افزار آزاد"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "کاربران ملزم به پذیرفتن پروانه‌های زیر هستند:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "اطّلاعات بیش‌تر"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "صفحهٔ جزییات"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "در حال بارگیری"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_به‌روز رسانی"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_افزودن میان‌بر"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_برداشتن میان‌بر"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "هیچ نماگرفتی فراهم نشده است"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "دارای مخزن نرم‌افزاری"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as well as "
+"access to other software."
+msgstr ""
+"این برنامه دارای یک مخزن نرم‌افزاری است که به‌روز رسانی‌ها و همچنین دسترسی به "
+"نرم‌افزارهایی دیگر را فراهم می‌کند."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "بدون مخزن نرم‌افزاری"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be updated with "
+"new versions."
+msgstr ""
+"این برنامه دارای یک مخزن نرم‌افزاری نیست و به نگارش‌های جدید به‌روز رسانی نخواهد شد."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be replaced."
+msgstr "این برنامه ار پیش به دست توزیعتان فراهم شده و نباید جایگزین شود."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "مخزن نرم‌افزار شناسایی شد"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software and "
+"upgrades."
+msgstr ""
+"افزودن این مخزن نرم‌افزاری، دسترسی به نرم‌افزارها و به‌روز رسانی‌های اضافی‌ای را می‌دهد."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "تنها از منابع نرم‌افزاری‌ای که به آن‌ها اعتماد دارید استفاده کنید."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "پایگاه _وب"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_اعانه"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "بومی شده به زبان شما"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "مستندات"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "فعالیت انتشار"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "یکپارچگی سیستم"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "اجرا در محیط ایزوله"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "کانال"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "نسخه"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "رتبه‌بندی سنی"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "اجازه‌ها"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "به‌روز شده"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "دسته‌بندی"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "حجم نصب شده"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "حجم بارگیری"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "توسعه‌دهنده"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "پروانه"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "آزاد"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "انحصاری"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "افزودنی‌ها"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "افزودنی‌های گزیده همراه برنامه نصب خواهند شد."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "بازبینی‌ها"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "یک _بازبینی بنویسید"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_نمایش بیش‌تر"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied and "
+"modified."
+msgstr ""
+"یعنی می‌توانید این نرم‌افزار را آزادانه اجرا، رونوشت، توزیع و مطالعه کرده یا تغییر دهید."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "نرم‌افزار انحصاری"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There are often "
+"restrictions on its use and its source code cannot usually be accessed."
+msgstr ""
+"یعنی نرم‌افزار متعلق به یک فرد یا شرکت است. معمولاً محدودیت‌هایی در استفاده داشته و "
+"نمی‌توان به کد مبدأش دسترسی داشت."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "پروانهٔ نرم‌افزاری ناشناخته"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "شرایط پروانهٔ این نرم‌افزار ناشناخته است."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "رتبهٔ برنامه این‌گونه‌است، چرا که:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "هیچ جزییاتی برای این رتبه‌بندی موجود نیست."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " و "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr "، "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "قلم‌های موجود برای کدنوشته‌های %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "نرم‌افزارهای موجود برای %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "نرم‌افزار درخواست شده پیدا نشد"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "مورد %s پیدا نشد"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "روی پایگاه وب"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "هیچ برنامه‌ای موجود نیست که پرونده %s را فراهم کند."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications might be "
+"found %s."
+msgstr ""
+"ممکن است اطلاعات درباره %s، همچنین گزینه‌هایی برای اینکه چگونه برنامه‌های ناموجود را "
+"پیدا کنید در %s باشند."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "هیچ برنامه‌ای برای پشتیبانی %s موجود نیست."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "برنامه %s موجود نیست."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that can "
+"support this format might be found %s."
+msgstr ""
+"اطلاعات در مورد %s، همچنین گزینه‌هایی در خصوص دریافت برنامه‌ای که بتواند از این قالب "
+"پشتیبانی کند را ممکن است در %s پیدا کنید."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "هیچ قلمی برای پشتیبانی کدنوشته %s موجود نیست."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts might be "
+"found %s."
+msgstr ""
+"اطلاعات در مورد %s، همچنین گزینه‌هایی در خصوص دریافت قلم‌های اضافی را ممکن است در %s "
+"پیدا کنید."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "هیچ رمزینهٔ افزودنی‌ای برای قالب %s موجود نیست."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can play this "
+"format might be found %s."
+msgstr ""
+"اطلاعات در مورد %s، همچنین گزینه‌هایی در خصوص چگونگی دریافت رمزینه‌ای که بتواند این "
+"قالب را پخش کند را ممکن است در %s پیدا کنید."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "هیچ منبع پلاسمایی برای پشتیبانی %s موجود نیست."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma resources "
+"might be found %s."
+msgstr ""
+"اطلاعات در مورد %s، همچنین گزینه‌هایی در خصوص چگونگی دریافت منابع پلاسما اضافی را ممکن "
+"است در %s پیدا کنید."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "هیچ راه اندازی چاپگری برای %s موجود نیست."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that supports this "
+"printer might be found %s."
+msgstr ""
+"اطلاعات در مورد %s، همچنین گزینه‌هایی در خصوص چگونگی دریافت راه‌اندازی که از این چاپگر "
+"پشتیبانی کند را ممکن است در %s پیدا کنید."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "این پایگاه وب"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see %s for "
+"more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see %s for "
+"more information."
+msgstr[0] ""
+"متاسفانه، %s که جست‌وجو می‌کردید پیدا نشد. برای اطلاعات بیش‌تر %s را مشاهده کنید."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "یافتن نتیجه‌ای برای جست‌وجو شکست خورد"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "قالب پروندهٔ %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "صفحه رمزینه‌ها"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "خوش آمدید"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "به نرم‌افزارها خوش آمدید"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See our "
+"recommendations, browse the categories, or search for the applications you want."
+msgstr ""
+"نرم‌افزارها می‌گذاره همهٔ نرم‌افزارهای مورد نیازتان را از یک جا نصب کنید. پیشنهادات ما را "
+"ببینید، دسته‌بندی‌ها را مرور کرده، یا برای برنامه‌هایی که می‌خواهید، جست‌وجو کنید."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_بزن بریم خرید"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "برداشته شد"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "نصب شد"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "به‌روز شد"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "ناشناخته"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Oe %B %Oy"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "تاریخچه"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "برنامه‌های سامانه‌ای"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "صفحهٔ نصب شده‌ها"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "در حال بارگیری فهرست نرم‌افزارها"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "صفحهٔ بار"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "در حال برپاسازی…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or charges "
+"associated with them. To save data, automatic updates have therefore been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes available. Until "
+"then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as being "
+"metered, this setting can be changed."
+msgstr ""
+"شبکهٔ کنونی اندازه‌گیری‌شده است. اتّصال‌های اندازه‌گیری‌شده دارای محدودیت‌های داده‌ای یا "
+"هزینه‌های مربوط به آن‌ها هستند. برای ذخیرهٔ داده، به‌روز رساانی‌های خودکار مکث شده‌اند.\n"
+"\n"
+"به‌روز رسانی‌های خودگار هنگام موچود بودن یک شبکهٔ اندازه‌گیری‌نشده از سر گرفته خواهند شد. "
+"تا آن‌هنگام، می‌توان به صورت دستی، به‌روز رسانی کرد.\n"
+"\n"
+"هم‌چنین اگر این شبکه به صورت نادرست به عنوان اندازه‌گیری‌شده شناخته شده است، می‌توان این "
+"تنظیم را تغییر داد."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "گشودن تنظیمات شبکه"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "صفحهٔ مدیریت"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "هیچ بازبینی‌ای برای مدیریت وجود ندارد"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "سامانه"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "کاربر"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "شاخه"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "نشانی"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "قالب"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "نصب"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "بیش‌تر…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "برنامه‌های صوتی و ویدیویی پیشنهادی"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "بازی‌های پیشنهادی"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "برنامه‌های گرافیکی پیشنهادی"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "برنامه‌های فراورش پیشنهادی"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "دسترسی به نرم‌افزارهای اضافی از منابع سوم‌شخص گزیده."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, sharing, "
+"and access to source code."
+msgstr ""
+"برخی از این نرم‌افزارها انحصاری بوده و بنابراین در استفاده، هم‌رسانی و دسترسی به کد "
+"مبدأ، محدودند."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "بیش‌تر دریابید…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "به کار انداختن"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "صفحهٔ نمای کلّی"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "به کار انداختن مخازن نرم‌افزاری سوم‌شخص؟"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "پیشین"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "بعدی"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "انتخاب‌های سردبیران"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "انتشارهای اخیر"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "دسته‌بندی‌ها"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "هیچ دادهٔ برنامه‌ای پیدا نشد"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "آماده‌سازی %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "مطمئنید می‌خواهید مخزن %s را بردارید؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install the "
+"repository to use them again."
+msgstr ""
+"تمام برنامه‌های %s حذف خواهند شد و برای استفادهٔ دوباره از آن‌ها، باید بازنصبشان کنید."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "مطمئنید می‌خواهید %s را بردارید؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s برداشته خواهد شد و باید برای استفادهٔ دوباره از آن، نصبش کنید."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (نصب شده)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "ترجیحات به‌روز رسانی"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "به‌روز رسانی‌های خودکار"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "به‌روز رسانی‌های خودکار، روی اتصّال اندازه‌گیری شده یا همراه، از کار می‌افتند."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "آگاهی‌های به‌روز رسانی خودکار"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "نمایش آگاهی‌ها هنگامی که به‌روز رسانی‌ها به صورت خودکار نصب شدند."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you continue, "
+"the following will be automatically removed during the upgrade:"
+msgstr ""
+"تعدادی از نرم‌افزارهای نصب شده با %s سازگار نیستند. اگر ادامه دهید، موارد مقابل بطور "
+"خودکار در هنگام ارتقا حذف خواهند شد:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "نرم‌افزار ناسازگار"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_ادامه"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%Iu برنامه نصب شد"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%Iu افزودنی نصب شد"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%Iu برنامه"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%Iu افزودنی"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s و %s نصب شدند"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "برداشتن «%s»؟"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "از کار انداختن «%s»؟"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive updates, "
+"including security fixes."
+msgstr ""
+"نرم‌افزاری که از این مخزن نصب شود، دیگر به‌روز رسانی نخواهد گرفت، حتا برای رفع مشکلات "
+"امنیتی."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "از کار انداختن"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "سیستم‌عامل"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "این مخازن، نرم‌افزارهای پیش‌گزیده‌ای که به دست %s فراهم شده را تکمیل می‌کنند."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "مخازن سوم‌شخص"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "بدون مخازن اضافی"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "به کار انداختن"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_برداشتن…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_از کار انداختن…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "به کار انداختن"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "در حال نصباز کار انداختن"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "به کار افتاده"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "از کار انداخته"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "متنفرش ازش"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "خوشم نیامد"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "قابل قبوله"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "علاقه‌مندم بهش"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "عاشقشم"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "لطفا برای نوشتن بازخورد مقدار بیش‌تری زمان بذارید"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "لطفا یک ستاره رتبه‌بندی انتخاب کنید"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "خلاصه خیلی کوتاه است"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "خلاصه خیلی بلند است"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "توضیحات خیلی کوتاه است"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "توضیحات خیلی کوتاه است"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "ارسال بررسی"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_ارسال"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "خلاصه"
+
+#: src/gs-review-dialog.ui:120
+msgid "Give a short summary of your review, for example: “Great app, would recommend”."
+msgstr "یک خلاصه از بررسی خود بنویسید، برای مثال: «یک برنامه عالی، پیشنهادش میکنم»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "بررسی"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "در مورد برنامه چه فکری می‌کنید؟ سعی کنید برای دیدگاه‌های خود دلیل بیاورید."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy\">privacy "
+"policy</a>."
+msgstr ""
+"در <a href=\"https://odrs.gnome.org/privacy\">سیاست محرمانگیمان</a> ببینید چه "
+"داده‌هایی ارسال می‌شوند."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "رتبه‌ها در مجموع"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"شما می‌توانید بررسی‌ها را به دلیل سوء استفاده، بی‌ادبی یا تبعیض آمیز بودن گزارش دهید."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an administrator."
+msgstr ""
+"زمانی که گزارش ارسال شود، بررسی مخفی خواهد شد تا زمانی که یک مدیر آن را بررسی کند."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "گزارش بازخورد؟"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "گزارش"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "آیا این بازخورد برای شما مفید بود؟"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "بله"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "خیر"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "هممم"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "گزارش…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "برداشتن…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "نمایی پیدا نشد"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "بارگیری تصویر شکست خورد"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "اندازه نما پیدا نشد"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "نمی‌توان حافظه موقت را ساخت"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "نما معتبر نیست"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "نمایی از برنامه موجود نیست"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "نماگرفت"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%Iu مورد منطبق بیش‌تر"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "صفحهٔ جست‌وجو"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "هیچ برنامه‌ای پیدا نشد"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131 src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌های میان‌افزار از %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها از %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid "Unable to download updates: internet access was required but wasn’t available"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها نیست: نیاز به دسترسی اینترنتی"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها از %s: فضای دیسک ناکافی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها: فضای دیسک ناکافی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها: نیاز به تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها: تصدیق هویت نامعتبر"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid "Unable to download updates: you do not have permission to install software"
+msgstr "ناتوان در بارگیری به‌روز رسانی‌ها: نداشتن اجازهٔ به‌روز رسانی نرم‌افزار"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "ناتوان در گرفتن فهرست به‌روز رسانی‌ها"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "ناتوان در نصب %s به دلیل شکست بارگیری از %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "ناتوان در نصب %s به دلیل شکست بارگیری"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "ناتوان در نصب %s به دلیل موجود نبودن زمان اجرای %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "ناتوان در نصب %s به دلیل عدم پشیبانی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "ناتوان در نصب: نیاز به دسترسی اینترنتی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "ناتوان در نصب: برنامه قالبی نامعتبر دارد"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "ناتوان در نصب %s: فضای دیسک ناکافی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "ناتوان در نصب %s: نیاز به تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "ناتوان در نصب %s: تصدیق هویت نامعتبر"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "ناتوان در نصب %s: نداشتن اجازهٔ نصب نرم‌افزار"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "ناتوان در نصب %s: نیاز به برق متناوب"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "ناتوان در نصب %s: سطح باتری بیش از حد کم"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "ناتوان در نصب %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "ناتوان در به‌روز رسانی %s از %s به دلیل شکست بارگیری"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "ناتوان در به‌روز رسانی %s به دلیل شکست بارگیری"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها از %s به دلیل شکست بارگیری"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها به دلیل شکست بارگیری"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "ناتوان در به‌روز رسانی: نیاز به دسترسی اینترنتی"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "ناتوان در به‌روز رسانی %s: فضای دیسک ناکافی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها: فضای دیسک ناکافی"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "ناتوان در به‌روز رسانی به %s: نیاز به تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها: نیاز به تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "ناتوان در به‌روز رسانی %s: تصدیق هویت نامعتبر"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها: تصدیق هویت نامعتبر"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "ناتوان در به‌روز رسانی %s: نداشتن اجازهٔ به‌روز رسانی نرم‌افزار"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid "Unable to install updates: you do not have permission to update software"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها: نداشتن اجازهٔ به‌روز رسانی نرم‌افزار"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "ناتوان در به‌روز رسانی %s: نیاز به برق متناوب"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها: نیاز به برق متناوب"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "ناتوان در به‌روز رسانی %s: سطح باتری بیش از حد کم"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "ناتوان در نصب به‌روز رسانی: سطح باتری بیش از حد کم"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "ناتوان در به‌روز رسانی %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "ناتوان در نصب به‌روز رسانی‌ها"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "ناتوان در ارتقا به %s از %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "ناتوان در ارتقا به %s به دلیل شکست بارگیری"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid "Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "ناتوان در ارتقا به %s: نیاز به دسترسی اینترنتی"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "ناتوان در ارتقا به %s: فضای دیسک ناکافی"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "ناتوان در ارتقا به %s: نیاز به تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "ناتوان در ارتقا به %s: تصدیق هویت نامعتبر"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "ناتوان در ارتقا به %s: نداشتن اجازهٔ ارتقای نرم‌افزار"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "ناتوان در ارتقا به %s: نیاز به برق متناوب"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "ناتوان در ارتقا به %s: سطح باتری بیش از حد کم"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "ناتوان در ارتقا به %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "ناتوان در برداشتن %s: نیاز به تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "ناتوان در برداشتن %s: تصدیق هویت نامعتبر"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "ناتوان در برداشتن %s: نداشتن اجازهٔ برداشتن نرم‌افزار"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "ناتوان در برداشتن %s: نیاز به برق متناوب"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "ناتوان در برداشتن %s: سطح باتری بیش از حد کم"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "ناتوان در برداشتن %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "ناتوان در اجرای %s: %s نصب نشده است"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878 src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "فضای دیسک ناکافی — کمی فضا آزاد کرده و دوباره تلاش کنید"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889 src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "متاسفیم، اشکالی به وجود آمد"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "شکست در نصب پرونده: عدم پشتیبانی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "شکست در نصب پرونده: شکست تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "شکست در نصب: عدم پشتیبانی"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "شکست در نصب: شکست تصدیق هویت"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "ناتوان در تماس با %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s باید برای استفاده از افزایه‌های جدید، دوباره شروع شود."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "این برنامه باید برای استفاده از افزایه‌های جدید، دوباره شروع شود."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "نیاز به برق متناوب"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "سطح باتری بیش از حد کم"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "منبع: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (در حال نصب)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (در حال برداشتن)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_برداشتن همه"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "هیچ توضیحی برای به‌روز رسانی موجود نیست."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "در %s نصب شده است"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "به‌روز رسانی‌های نصب شده"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "افزودنی‌ها"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "برداشتنی‌ها"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "به‌روز رسانی‌ها"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "پایین‌بردن‌ها"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "هیچ به‌روز رسانی‌ای روی این سامانه نصب نشده است."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "به‌روز رسانی‌های امنیتی در انتظار هستند"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "توصیه می‌شود که به‌روز رسانی‌های امنیتی را بلافاصله نصب کنید"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "شروع دوباره و نصب"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "به‌روز رسانی‌های نرم‌افزاری موجودند"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "به‌روز رسانی‌های مهم سیستم‌عامل و برنامه‌ها برای نصب آماده هستند"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "نمایش"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%Iu برنامه به‌روز رسانی شد — نیاز به شروع دوباره"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%Iu برنامه به‌روز رسانی شد"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s به‌روز شد."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "لطفاً برنامه را دوباره شروع کنید."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s و %s به‌روز شدند."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%Iu برنامه نیاز به یک شروع دوباره دارند."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "شامل %s، %s و %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "به‌روز رسانی‌های سیستم‌عامل موجودند"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "برای ادامهٔ دریافت به‌روز رسانی‌های امنیتی، ارتقا دهید."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "نگارشی جدید از %s برای نصب موجود است"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "ارتقای نرم‌افزاری موجود است"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "شکست در به‌روز رسانی نرم‌افزارها"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "نصب یک به‌روز رسانی مهم سیستم‌عامل شکست خورد."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "نمایش جزییات"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "ارتقای سامانه کامل شد"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "به %s %s خوش‌آمدید!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "به‌روز رسانی‌های نرم‌افزاری نصب شد"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "به‌روز رسانی‌های مهم سیستم‌عامل نصب شد."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "بررسی"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "به‌روز رسانی شکست خورد"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "سامانه از پیش به‌روز بود."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "به‌روز رسانی لغو شد."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you have "
+"internet access and try again."
+msgstr ""
+"دسترسی به اینترنت لازم بود، اما امکان اتصال وجود نداشت. لطفا مطمئن شوید که دسترسی به "
+"اینترنت دارید و دوباره تلاش کنید."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software provider for "
+"more details."
+msgstr ""
+"مشکلات امنیتی‌ای در به‌روز رسانی وجود داشت. لطفا برای اطلاعات بیش‌تر با فراهم کننده "
+"نرم‌افزار خود مشورت کنید."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid "There wasn’t enough disk space. Please free up some space and try again."
+msgstr "فضای دیسک کافی نبود. لطفا کمی فضا خالی کنید و دوباره تلاش کنید."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update and try "
+"again. If the problem persists, contact your software provider."
+msgstr ""
+"ما متاسفیم: نصب به‌روز رسانی شکست خورد. لطفا برای یک به‌روز رسانی دیگر صبر کنید و "
+"دوباره تلاش کنید. اگر باز هم مشکل داشتید، با فراهم کننده نرم‌افزار تماس بگیرید."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%OH:%OM"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%Ol:%OM %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "دیروز، %OH:%OM"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "دیروز، %Ol:%OM %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "دو روز پیش"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "سه روز پیش"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "چهار روز پیش"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "پنج روز پیش"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "شش روز پیش"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "یک هفته پیش"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "دو هفته پیش"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "در حال بررسی برای به‌روز رسانی‌های جدید…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "در حال برپاسازی به‌روز رسانی‌ها…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(این ممکن است مدتی طول بکشد)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "آخرین بررسی: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s دیگر پشتیبانی نمی‌شود."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "سیستم‌عاملتان دیگر پشتیبانی نمی‌شود."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "این یعنی به‌روز رسانی‌ّا امنیتی را نخواهد گرفت."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "توصیه می‌شود که به نگارشی جدیدتر ارتقا دهید."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "ممکن است هزینه‌بر باشد"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur charges."
+msgstr ""
+"بررسی به‌روز رسانی‌ها در زمانی که از شبکه پهن‌باند موبایل استفاده می‌کنید ممکن است "
+"هزینه‌هایی برای شما داشته باشد."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_به هر حال بررسی شود"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "شبکه قطع است"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "دسترسی به اینترنت برای بررسی به‌روز رسانی‌ها لازم است."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "در حال بررسی…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "بررسی برای به‌روز رسانی‌ها"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "صفحهٔ به‌روز رسانی‌ها"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "نرم‌افزار به‌روز است"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur charges"
+msgstr ""
+"بررسی به‌روز رسانی‌ها در زمانی که از شبکه پهن‌باند موبایل استفاده می‌کنید ممکن است "
+"هزینه‌هایی برای شما داشته باشد"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "به _هر حال بررسی شود"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "جهت بررسی برای به‌روز رسانی‌ها برخط شوید"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "تنظیمات _شبکه"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "به‌روز رسانی‌ها بطور خودکاری مدیریت می‌شوند"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "راه‌اندازی دوباره و به‌روز رسانی"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "به‌روز رسانی همه"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "میان‌افزار یکپارچه"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "نیاز به راه‌اندازی دوباره دارد"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "به‌روز رسانی برنامه‌ها"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "میان‌افزار افزاره"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_بارگیری"
+
+#: src/gs-upgrade-banner.c:91
+msgid "It is recommended that you back up your data and files before upgrading."
+msgstr "توصیه می‌شود که قبل از ارتقا، از داده‌ها و پرونده‌های خود پشتیبان تهیه کنید."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_شروع دوباره هم‌اکنون"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "به‌روز رسانی‌ها هنگام شروع دوبارهٔ رایانه اعمال خواهند شد."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "هم‌اکنون %s %s موجود است"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "در انتظار بارگیری %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "در حال بارگیری %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s آمادهٔ نصب"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "یک ارتقای عمده، همراه امکانات جدید و بهینه‌سازی‌های بیش‌تر."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_بیش‌تر بدانید"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "افزودن، برداشتن یا به‌روز رسانی نرم‌افزارهای این رایانه"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;"
+"App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;"
+"App;Store;به‌روز رسانی‌ها;ارتقا;منابع;مخازن;مخزن;ترجیحات;نصب;حذف;برنامه;نرم‌افزار;اپ;"
+"استور;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "ساخت و ویرایشگر صوتی"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "پخش‌کننده‌های موسیقی"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "اشکال‌زداها"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "محیط‌های توسعه"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "هوش مصنوعی"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "ستاره‌شناسی"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "شیمی"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "زبان‌ها"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "ریاضی"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "روباتیک"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "اکشن"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "ماجراجویی"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "آرکید"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "بلوکه‌ها"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "تخته‌ای"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "کارت"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "شبیه‌ساز"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "کودکان"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "منطق"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "ایفای نقش"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "ورزشی"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "استراتژی"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "گرافیک سه‌بعدی"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "عکّاسی"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "پایش"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "گرافیک برداری"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "نمایشگرها"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "تقویم"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "پایگاه داده"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "مالی"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "پردازشگر متن"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "قلم‌ها"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "رمزینه‌ها"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "منابع ورودی"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "بسته‌های زبان"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "بومی‌سازی"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "راه‌اندازهای سخت‌افزاری"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "گپ"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "اخبار"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "مرورگرهای وب"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "ویرایشگرهای متن"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "همه"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "ویژه"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "هنر"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "زندگی‌نامه"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "کُمیک"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "تخیلی"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "سلامتی"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "تاریخ"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "سبک زندگی"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "سیاسی"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "ورزش"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "صوت و تصویر"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "ابزارهای توسعه"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "یادگیری و علم"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "بازی‌ها"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "گرافیک و عکاسی"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "بهره‌وری"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "ارتباطات و اخبار"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "ارجاعات"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "ابزارها"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "به‌روز رسانی‌های سیستم‌عامل"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "شامل بهینه‌سازی‌های کارایی، پایداری و امنیتی."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "بارگیری تصویرهای ویژه…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "سیستم‌عامل اندلس"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "یک به‌روز رساین سیستم‌عامل اندلس، همراه با امکانات جدید و بهینه‌سازی‌های بیش‌تر."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "خدمت به‌روز رسانی اندلس نتوانست به‌روز رسانی را گرفته و اعمال کند."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "نصب‌کنندهٔ AppStream بر گسترهٔ سامانهٔ نرم‌افزارهای گنوم"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "شکست در تجزیه‌ٔ آرگومان‌های خط فرمان"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "شما باید دقیقا یک نام مشخص کنید"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "این برنامه تنها می‌تواند از طریق کاربر ریشه استفاده شود"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "تایید گونهٔ محتوا شکست خورد"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "رونوشت شکست خورد"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "بارگیری پرونده‌های فرادادهٔ اضافی…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "بارگیری اطّلاعات ارتقا…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid "Upgrade for the latest features, performance and stability improvements."
+msgstr "ارتقا برای جدیدتری ویژگی‌ها و بهبود پایداری و کارایی."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "پشتیبانی فلت‌پک"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "فلت‌پک چارچوبی برای برنامه‌های میزکار روی گنو/لینوکس است"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "در حال گرفتن فرادادهٔ فلت‌پک برای %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "به‌روز رسانی افزارهٔ %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "به‌روز رسانی سامانهٔ %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "به‌روز رسانی واپایشگر توکار %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "به‌روز رسانی موتور مدیریت %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "به‌روز رسانی موتور مدیریت تجاری %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "به‌روز رسانی موتور مدیریت مصرفی %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "به‌روز رسانی واپایشگر %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "به‌روز رسانی واپایشگر تاندربولت %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "به‌روز رسانی ریزرمز پردازندهٔ %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "به‌روز رسانی پیکربندی %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "بارگیری امضای به‌روز رسانی میان‌افزار…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "بارگیری فرادادهٔ به‌روز رسانی میان‌افزار…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "پشتیبانی ارتقای میان‌افزار"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "برای ارتقاهای میان‌افزار، پشتیبانی فراهم می‌کند"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "بارگیری رتبه‌بندی‌های برنامه…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "پشتیبانی رتبه‌بندی میزکار باز"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "پرمیب خدمتی است که بازابینی‌های کاربری از برنامه‌ها را فراهم می‌کند"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "فروشگاه اسنپ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "پشتیبانی اسنپ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "اسنپ یک بستهٔ جهانی گنو/لینوکسی است"
+
+#~ msgid "About %s"
+#~ msgstr "دربارهٔ %s"
+
+#~ msgid "%s ME"
+#~ msgstr "موتور مدیریت %s"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "نمایش واسط کاربری مدیریت شاخه"
+
+#~ msgid "Folder Name"
+#~ msgstr "نام شاخه"
+
+#~ msgid "_Add"
+#~ msgstr "_افزودن"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "افزودن به شاخه برنامه"
+
+#~ msgid "Extension Settings"
+#~ msgstr "تنظیمات افزونه"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it is "
+#~ "recommended to disable them."
+#~ msgstr ""
+#~ "افزونه‌ها را با مسئولیت خودتان استفاده کنید. اگر هر گونه مشکل سیستمی‌ای داشتید، "
+#~ "توصیه می‌شود که آنها را غیرفعال کنید."
+
+#~ msgid "Failed to load components"
+#~ msgstr "شکست در بار کردن اجزا"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "اعتبار CSS تایید شد!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "بارگیری پرونده شکست خورد"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "تغییرات ذخیره نشده"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "فهرست برنامه‌ها قبلا بارگیری شده است."
+
+#~ msgid "Merge documents"
+#~ msgstr "ادغام سندها"
+
+#~ msgid "Throw away changes"
+#~ msgstr "دور انداختن تغییرات"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "گشودن پروندهٔ AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_گشودن"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "ذخیرهٔ پروندهٔ AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_ذخیره"
+
+#~ msgid "Failed to save file"
+#~ msgstr "شکست در ذخیرهٔ پرونده"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "طراحی بنر %s حذف شد."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "طراحی بنر حذف شد."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "فهرست برنامه‌ها شامل تغییرات ذخیره نشده است."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "استفاده از ثبت وقایعِ دقیق"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "طراح بنر نرم‌افزارهای گنوم"
+
+#~ msgid "No Designs"
+#~ msgstr "بدون طرح"
+
+#~ msgid "Error message here"
+#~ msgstr "پیام خطا در اینجا"
+
+#~ msgid "App ID"
+#~ msgstr "App ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "منتخب سردبیران"
+
+#~ msgid "Category Featured"
+#~ msgstr "دستهٔ ویژه"
+
+#~ msgid "Undo"
+#~ msgstr "برگردان"
+
+#~ msgid "Banner Designer"
+#~ msgstr "طراح بنر"
+
+#~ msgid "New Banner"
+#~ msgstr "بنر جدید"
+
+#~ msgid "Import from file"
+#~ msgstr "وارد کردن از پرونده"
+
+#~ msgid "Export to file"
+#~ msgstr "صدور به پرونده"
+
+#~ msgid "Delete Design"
+#~ msgstr "حذف طراحی"
+
+#~ msgid "Featured App"
+#~ msgstr "برنامه‌های ویژه"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "ارتقای سیستم‌عامل"
+
+#~ msgid "Spacing"
+#~ msgstr "فاصله‌بندی"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "میزان فاصله بین عناصر"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "برای گزینش موارد، رویشان کلیک کنید"
+
+#~ msgid "Select"
+#~ msgstr "گزینش"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_افزودن به شاخه…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_انتقال به شاخه…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_برداشتن از شاخه"
+
+#~ msgid "Featured Applications"
+#~ msgstr "برنامه‌های منتخب"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "طرآحی بیرق‌های ویزه برای نرم‌افزارهای گنوم"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;برنامه;نرم‌افزار;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "افزونه‌های پوسته"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "پشتیبانی برنامه‌های وبی"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "برنامه‌های وبی مشهور را در یک مرورگر اجرا کنید"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "مخزن افزونه‌های پوستهٔ گنوم"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "بارگیری فرادادهٔ افزونهٔ پوسته…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "افزونهٔ پوستهٔ گنوم"
+
+#~ msgid "Top Rated"
+#~ msgstr "بالاترین رتیه‌ها"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "فهرستی از منابع اضافی که قبلا فعال شده‌اند"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing third-party "
+#~ "applications."
+#~ msgstr "فهرستی از منابع اضافی که قبلا هنگام نصب برنامه‌های ثالث فعال شده‌اند."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "نمایش نرم‌افزارهای غیر آزاد در نتایج جست‌وجوها"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "یک فهرست از منابع غیر آزاد که ممکن است به صورت اختیاری فعال شوند"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_همه"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "نمایش اطلاعات کارایی سرویس"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "برای ادامه دادن لازم است وارد شوید."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "برای ادامه دادن لازم است به %s وارد شوید."
+
+#~ msgid "Email address"
+#~ msgstr "آدرس پست‌الکترونیکی"
+
+#~ msgid "I have an account already"
+#~ msgstr "من از قبل حساب دارم"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "من می‌خواهم برای یک حساب ثبت‌نام کنم"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "من گذرواژه‌ام را از یاد برده‌ام"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "دفعه آینده بطور خودکار وارد بشو"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "پین یک بار مصرف خود را برای تصدیق‌هویت دو مرحله‌ای وارد کنید."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "تصدیق هویت"
+
+#~ msgid "Continue"
+#~ msgstr "ادامه"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "ارتباط از پیش تعیین شده‌ی بازیکن-با-بازیکن بدون امکان گپ"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "در حال بار کردن فهرست نرم‌افزاری"
+
+#~ msgid "_About"
+#~ msgstr "_درباره"
+
+#~ msgid "_Quit"
+#~ msgstr "_خروج"
+
+#~ msgid "Provides access to additional software, including web browsers and games."
+#~ msgstr "دسترسی به نرم‌افزارهای اضافی، شامل مرورگرهای وب و بازی‌ها را فراهم می‌کند."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "فعال‌سازی منابع نرم‌افزاری تجاری؟"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "آیا مطمئنید که می‌خواهید %s را بخرید؟"
+
+#~ msgid "Purchase"
+#~ msgstr "خرید"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can play this "
+#~ "format can be found on the website."
+#~ msgstr ""
+#~ "اطلاعات در مورد %s، همچنین گزینه‌هایی در مورد چگونگی دریافت کُدِک که بتواند این قالب "
+#~ "را پخش کند را می‌توانید از پایگاه‌وب دریافت کنید."
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%I.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%I.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%I.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%I.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%I.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%I.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%I.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%I.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$I%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %If"
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "برای اطلاعات بیشتر به %s مراجعه کنید."
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "هیچ برنامه یا افزودنی‌ای نصب نشده است؛ نرم‌افزارهای دیگر هنوز ممکن است باشند"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "به طور معمول در دسترسی یا استفاده از کد منبع محدودیت دارند."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "منابع نرم‌افزاری تجاری"
+
+#~ msgid "Remove Source"
+#~ msgstr "حذف منبع"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you access to "
+#~ "additional software that is not provided by %s."
+#~ msgstr ""
+#~ "منابع نرم‌افزاری می‌توانند از طریق اینترنت دریافت شوند. آنها امکان دسترسی به "
+#~ "نرم‌افزارهای بیشتری که %s فراهم نمی‌کند را برای شما فراهم می‌کنند."
+
+#~ msgid "Removing a source will also remove any software you have installed from it."
+#~ msgstr ""
+#~ "پاک کردن یک منبع، تمام نرم‌افزارهایی که از طریق آن نصب کرده‌اید را نیز پاک خواهد کرد."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "هیچ نرم‌افزاری از طریق این منبع نصب نشده است"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "نصب شده از طریق این منبع"
+
+#~ msgid "Source Details"
+#~ msgstr "جزئیات منبع"
+
+#~ msgid "Last Checked"
+#~ msgstr "آخرین بررسی"
+
+#~ msgid "Added"
+#~ msgstr "اضافه شد"
+
+#~ msgid "Website"
+#~ msgstr "پایگاه‌وب"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "بارگیری بروزرسانی‌های جدید…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_راه‌اندازی مجدد و نصب"
+
+#~ msgid "U_pdate All"
+#~ msgstr "_بروزرسانی همه"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "راه‌اندازی مجدد و _نصب"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#, fuzzy
+#~| msgid "Setting up updates…"
+#~ msgid "Getting runtime source…"
+#~ msgstr "در حال برپاسازی بروزرسانی‌ها…"
+
+#, fuzzy
+#~| msgid "Downloading new updates…"
+#~ msgid "Downloading firmware update…"
+#~ msgstr "بارگیری بروزرسانی‌های جدید…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "بارگیری صفحهٔ برنامه…"
+
+#~ msgid "Total"
+#~ msgstr "مجموع"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "نمی‌توان «%s» را پیدا کرد"
+
+#~ msgid "_Install All"
+#~ msgstr "_نصب همه"
+
+#~ msgid "Other Updates"
+#~ msgstr "بروزرسانی‌های دیگر"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "نصب %s شکست خورد"
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "حذف %s شکست خورد"
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "لطفا مطمئن شوید که دسترسی به اینترنت دارید و دوباره تلاش کنید."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "لطفا کمی فضا خالی کنید و دوباره تلاش کنید."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "اگر باز هم مشکل داشتید، با فراهم کننده نرم‌افزار تماس بگیرید."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "هیچکدام"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "ستاره‌شناسی"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "شیمی"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "ریاضی"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "همه"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "ویژه"
+
+#~ msgid "Science"
+#~ msgstr "علوم"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..4748335
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,5628 @@
+# Finnish translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Lasse Liehu <lasse.liehu@gmail.com>, 2014.
+# Jiri Grönroos <jiri.gronroos+l10n@iki.fi>, 2013, 2014, 2015, 2016, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-23 10:22+0300\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
+"Language-Team: suomi <lokalisointi-lista@googlegroups.com>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Ohjelmistot"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Sovellushallinta Gnomelle"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Ohjelmistot mahdollistaa uusien sovellusten löytämisen ja asennuksen sekä "
+"nykyisten sovellusten poistamisen."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Ohjelmistot esittelee suosittuja sovelluksia lukuisten kuvakaappausten ja "
+"kuvauksen kera. Sovellukset ovat löydettävissä eri luokkia selaamalla tai "
+"nimellä etsimällä."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Yhteenvetosivu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Tietosivu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Asennussivu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Päivityssivu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Päivityksen tiedot"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Gnome-projekti"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Asenna appstream-tiedosto järjestelmäsijaintiin"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Asennetaan appstream-tiedosto järjestelmäsijaintiin"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Luettelo yhteensopivista projekteista"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Luettelo yhteensopivista projekteista, jotka tulisi näyttää, esim. GNOME, "
+"KDE ja XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Hallitaanko päivityksiä ja järjestelmäpäivityksiä Gnomen Ohjelmistot-"
+"sovelluksessa"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Jos poistettu käytöstä, Gnomen Ohjelmistot-sovellus piilottaa päivitysosion "
+"käyttöliittymästä, ei suorita automaattisia päivityksiä tai ilmoita "
+"päivityksistä."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Lataa ja asenna päivitykset automaattisesti"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Jos käytössä, Gnomen ohjelmistokeskus lataa päivitykset automaattisesti "
+"taustalla ja asentaa sellaiset päivitykset, jotka eivät vaadi "
+"uudelleenkäynnistystä."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Ilmoita käyttäjälle taustalla päivitetyistä ohjelmistoista"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Päivitetäänkö ohjelmistotiedot automaattisesti, kun käytössä on käytön "
+"mukaan laskutettava yhteys"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Jos käytössä, Ohjelmistot päivittää ohjelmistotiedot automaattisesti "
+"taustalla jopa käytön mukaan laskutettavalla yhteydellä (ladaten metadataa, "
+"tarkistaen päivityksiä yms. mistä saattaa kertyä maksua käyttäjälle)"
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Käynnistetäänkö Gnomen Ohjelmistot ensimmäistä kertaa"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Näytä tähtiarvosanat sovellusten vieressä"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Ei-vapaat sovellukset näyttävät varoituksen ennen asennusta"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Luettelo suosituista sovelluksista"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Luettelo käytettävistä sovelluksista, jotka ylittävät järjestelmän "
+"määrittämät sovellukset."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Viimeisimmän päivitystarkistuksen aikaleima"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Ensimmäisen tietoturvapäivityksen aikaleima, tyhjennetään päivityksen jälkeen"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Viimeisimmän päivityksen aikaleima"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Viimeisin aikaleima, jolloin järjestelmä oli verkossa ja sai mitä tahansa "
+"päivityksiä"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Sovellusarvosteluihin käytettävä palvelin"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Karmapisteiden vähimmäismäärä arvosteluille"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Alle tämän karman olevia arvosteluja ei näytetä."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Luettelo virallisista lähteistä, joita ei tule käsitellä kolmansina "
+"osapuolina"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Luettelo virallisista lähteistä, jotka tulee käsitellä vapaina ohjelmistoina"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Salli pääsy ohjelmistolähteiden ikkunaan"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Tarjoa esijulkaisujen versiopäivityksiä"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Näytä käyttöliittymäelementtejä, joilla viestitään käyttäjälle ohjelmiston "
+"olevan ei-vapaa"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Näytä kehote asentaa ei-vapaita ohjelmistolähteitä"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Näytä sovellusten asennettu koko asennettujen sovellusten listassa"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Asenna AppStream-tiedostot järjestelmäsijaintiin kaikille käyttäjille"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Ota käyttöön Gnome Shell -laajennusten ohjelmistolähde"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Merkkijono, mikä pitää sisällään gnome-online-accountin id:n, jota käytetään "
+"kirjautumiseen"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Ohjelmiston asennus"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Asenna valitut ohjelmistot järjestelmään"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Valitse kaikki"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Älä valitse mitään"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Ohjelmistolähteet"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Päivitysvalinnat"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Ohjelmistot"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Takaisin"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Selaa"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Asennetut"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Päivitykset"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Etsi"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Lähde"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Ohjelmistolähteet"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Tutki levy"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Verkkoasetukset"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Käynnistä uudelleen nyt"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Lisätietoja"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automaattiset päivitykset keskeytetty"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Lue lisä_ä"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Paikallinen tiedosto"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paketti"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Odottaa"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Asennettu"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Asennetaan"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Poistetaan"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Käynnistystila, joko \"updates\", \"updated\", \"installed\" tai \"overview\""
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "TILA"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Etsi sovelluksia"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr ""
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Näytä sovelluksen tiedot (käyttäen sovelluksen tunnistetta)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Näytä sovelluksen tiedot (käyttäen paketin nimeä)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr ""
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Asenna sovellus (käyttäen sovelluksen tunnistetta)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Avaa paikallinen pakettitiedosto"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "TIEDOSTONIMI"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Tähän toimintoon odotettu vuorovaikutus: voi olla ‘none’, ‘notify’, tai "
+"‘full’"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Näytä runsasta vianselvitystietoa"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Asentaa odottavat päivitykset taustalla"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Näytä päivitysvalinnat"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Lopeta käynnissä oleva instanssi"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Näytä versionumero"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Jiri Grönroos"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Tietoja - Ohjelmistot"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Mukava tapa hallita järjestelmän ohjelmistoja."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Valitettavasti tästä sovelluksesta ei ole tarkempia tietoja."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Käy verkkosivustolla"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Asenna…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Peru"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Asenna"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Päivitä"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Poista"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Laitetta ei voi käyttää päivityksen aikana."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Vaatii lisäoikeuksia"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Kirjautumisen vaativa etä %s (realm %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Kirjautuminen vaaditaan"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Peru"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Kirjaudu"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Käyttäjä"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Salasana"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Muut"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Kaikki"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Nostot"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Nostot — %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Arvosana"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nimi"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Näytä"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Alaluokkien suodatusvalikko"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Järjestä"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Alaluokkien lajitteluvalikko"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Kirjoita numero 1:stä %u:een: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Valitse sovellus:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Käyttöjärjestelmän päivitykset on asennettu"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Äskettäin asennetut päivitykset ovat nyt valmiina arvosteltaviksi"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s on nyt asennettu"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Muutosten voimaantulo vaatii uudelleenkäynnistyksen."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Sovellus on valmiina käytettäväksi."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Käynnistä uudelleen"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Käynnistä"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Asennetaanko kolmannen osapuolen ohjelmisto?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Käytetäänkö kolmannen osapuolen ohjelmistolähdettä?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s ei ole <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">vapaa ja avoin ohjelmisto</a>, eikä sitä ole tarjolla "
+"lähteessä “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s on tarjolla lähteestä “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Tämä ohjelmistolähde tulee ottaa käyttöön, jotta asennusta voidaan jatkaa."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Kohteen %s asennus ja käyttö saattaa olla laitonta joissain maissa."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Tämän koodekin asennus ja käyttö saattaa olla laitonta joissain maissa."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Älä varoita uudelleen"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Käytä ja asenna"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Yksityiskohtaiset virhetiedot pakettihallinnalta:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Tiedot"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Päivitys on asennettu"
+msgstr[1] "Päivitykset on asennettu"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Muutoksen voimaan tulemiseksi vaaditaan uudelleenkäynnistys."
+msgstr[1] "Muutosten voimaan tulemiseksi vaaditaan uudelleenkäynnistys."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ei nyt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Ei piirroksilla esitettävää väkivaltaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Piirroshahmoja vaarallisissa tilanteissa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Piirroshahmot aggressiivisessa ristiriidassa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Graafista väkivaltaa, johon liittyy piirroshahmoja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Ei fantasiaan liittyvää väkivaltaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Hahmoja vaarallisissa tilanteissa, helposti todellisuudesta erotettavissa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Hahmoja aggressiivisessa ristiriidassa, helposti todellisuudesta "
+"erotettavissa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Graafista väkivaltaa, helposti todellisuudesta erotettavissa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Ei realistista väkivaltaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Tunnistettavia hahmoja vaarallisissa tilanteissa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Kuvauksia todellisista hahmoista aggressiivisessa ristiriidassa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Graafista väkivaltaa, johon sisältyy todellisia hahmoja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Ei verilöylyä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Epärealistinen verilöyly"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistinen verilöyly"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Kuvauksia verilöylystä ja ruumiinosien silpomista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Ei seksuaalista väkivaltaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Raiskaus tai muuta väkivaltaista seksuaalista käytöstä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Ei viittauksia alkoholituotteisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Viittauksia alkoholituotteisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Alkoholin käyttöä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Ei viittauksia laittomiin huumausaineisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Viittauksia laittomiin huumausaineisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Laittomien huumausaineiden käyttöä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Ei viittauksia tupakkatuotteisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Viittauksia tupakkatuotteisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Tupakan polttamista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Ei minkäänlaista alastomuutta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Hetkellistä taiteellista alastomuutta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Pitkäkestoista alastomuutta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Ei seksuaalisia viittauksia tai kuvauksia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokatiivisia viittauksia tai kuvauksia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksuaalisia viittauksia tai kuvauksia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Graafista seksuaalista käytöstä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Ei minkäänlaista kiroilua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Vähäistä tai epäsäännöllistä kiroilua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Keskitason kiroilua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Vahvaa tai säännöllistä kiroilua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Ei epäasiallista huumoria"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Kermakakkukomiikkaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Alatyylistä wc-huumoria"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Aikuismaista tai seksuaalista huumoria"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Ei minkäänlaista syrjivää kieltä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Kielteisyyttä tiettyä ihmisryhmää kohtaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Syrjintää tarkoituksena aiheuttaa tunteellista epämukavuutta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Syrjintää kohdistuen sukupuoleen, seksuaalisuuteen, rotuun tai uskontoon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Ei minkäänlaisia mainoksia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Tuotesijoittelua"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Selkeitä viittauksia tiettyyn brändiin tai tavaramerkkiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Käyttäjiä kehotetaan ostamaan tiettyjä todellisia esineitä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Ei minkäänlaista uhkapeliä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Satunnaista uhkapeliä pelinappuloita käyttäen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Uhkapeliä käyttäen pelin sisäistä rahaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Uhkapeliä käyttäen oikeaa rahaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Ei mahdollisuutta käyttää oikeaa rahaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Käyttäjiä kehotetaan lahjoittamaan oikeaa rahaa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Mahdollisuus käyttää oikeaa rahaa sovelluksessa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Ei mahdollisuutta keskustella muiden käyttäjien kanssa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Käyttäjien välistä vuorovaikutusta ilman keskustelumahdollisuutta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Valvottu keskusteluominaisuus käyttäjien välillä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Valvomaton keskusteluominaisuus käyttäjien välillä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Ei mahdollisuutta puhua muiden käyttäjien kanssa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Valvomaton ääni- tai videokeskusteluominaisuus käyttäjien välillä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Ei sosiaalisen median käyttäjätunnusten tai sähköpostiosoitteiden jakamista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Sosiaalisen median käyttäjätunnusten tai sähköpostiosoitteiden jakamista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Ei käyttäjätiedon jakamista kolmansien osapuolten kanssa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Tarkistetaan viimeisintä sovellusversiota"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Jakaa diagnostiikkatietoja, jotka eivät ole yhdistettävissä käyttäjään"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Jakaa käyttäjään yhdistettävissä olevia tietoja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Ei fyysisen sijainnin jakamista muille käyttäjille"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Fyysisen sijainnin jakamista muille käyttäjille"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Ei viittauksia homoseksuaalisuuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Epäsuoria viittauksia homoseksuaalisuuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Suutelua samaa sukupuolta olevien kesken"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Graafista seksuaalista käyttäytymistä samaa sukupuolta olevien kesken"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Ei viittauksia prostituutioon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Epäsuoria viittauksia prosituutioon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Suoria viittauksia prosituutioon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Graafisia kuvauksia prostituutioon liittyvistä toimista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Ei viittauksia haureuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Epäsuoria viittauksia haureuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Suoria viittauksia haureuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Graafisia kuvauksia haureuteen liittyvistä toimista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Ei seksualisoituja hahmoja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Vähävaatteisia ihmishahmoja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Avoimesti seksualisoituja ihmishahmoja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Ei viittauksia häpäisyyn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Kuvauksia tai viittauksia historialliseen häpäisyyn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Kuvauksia nykypäivän ihmishäpäisystä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Graafisia kuvauksia nykypäivän häpäisystä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Ei näkyviä kuolleen ihmisen jäännöksiä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Näkyviä kuolleen ihmisen jäännöksiä"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Kuolleen ihmisen jäännöksiä, jotka altistetaan elementeille"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Graafisia kuvauksia tai häpäisyä liittyen ihmisruumiisiin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Ei viittauksia orjuuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Kuvauksia tai viittauksia historialliseen orjuuteen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Kuvauksia nykypäivän orjuudesta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Graafisia kuvauksia nykypäivän orjuudesta"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Yleinen"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "KAIKKI"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Vain aikuiset"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Aikuiset"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Teinit"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "10+-vuotiaat"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Kaikki"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Varhaislapsuus"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Sovellus"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s pyytää lisätukea tiedostomuodolle."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Lisää MIME-tyyppejä vaaditaan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s pyytää lisää fontteja."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Lisäfontteja vaaditaan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s pyytää lisätukea multimediakoodekeille."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Lisää multimediakoodekkeja vaaditaan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s pyytää erillisiä tulostinajureita."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Erillisiä tulostinajureita vaaditaan"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s pyytää lisäpaketteja."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Lisäpaketteja vaaditaan"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Etsi ohjelmistoista"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Poistetaan…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Asennus odottaa…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Päivitys odottaa…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Valmistellaan…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Tätä sovellusta voi käyttää ainoastaan internetyhteyden ollessa muodostettu."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Asenna"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Asenna…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Käynnistä"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Poista"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Verkko"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Voi viestiä verkkoa käyttäen"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Järjestelmäpalvelut"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Voi käyttää D-Bus-palveluita järjestelmäväylässä"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Istuntopalvelut"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Voi käyttää D-Bus-palveluita istuntoväylässä"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Laitteet"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Voi käyttää järjestelmälaitetiedostoja"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Kotikansio"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Voi nähdä, muokata ja luoda tiedostoja"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Voi nähdä tiedostoja"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Tiedostojärjestelmä"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Lataukset-kansio"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Asetukset"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Voi nähdä ja muuttaa mitä tahansa asetuksia"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Vanhennettu ikkunointijärjestelmä"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Käyttää vanhaa ja turvatonta ikkunointijärjestelmää"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Eristyksistä karkaaminen"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Voi paeta hiekkalaatikosta ja kiertää muita rajoituksia"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Tämä sovellus on täysin eristetty."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Ei voida määrittää, mihin järjestelmän osiin sovelluksella on pääsy. Tämä on "
+"ominaista vanhemmille sovelluksille."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Ei koskaan"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Matala"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Keskitaso"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Korkea"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Arvostelun kirjoittaminen vaatii internetyhteyden"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Kohdetta “%s” ei löytynyt"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Public domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://fi.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Vapaa ohjelmisto"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Käyttäjiä sitoo seuraava lisenssi:"
+msgstr[1] "Käyttäjiä sitovat seuraavat lisenssit:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Lisätietoja"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Tietosivu"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Ladataan"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Päivitä"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Lis_ää pikakuvake"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Poist_a pikakuvake"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ei kuvakaappausta"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Ohjelmistolähde sisällytetty"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Tämä sovellus sisältää ohjelmistolähteen, jonka kautta on saatavilla "
+"päivityksiä ja mahdollisesti myös muita ohjelmistoja."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Ohjelmistolähdettä ei ole sisällytetty"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Tämä sovellus ei sisällä ohjelmistolähdettä. Sovellusta ei päivitetä "
+"uudempiin versioihin."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Tämä ohjelmisto sisältyy jo käyttämääsi jakeluun, eikä sitä tulisi korvata."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Ohjelmistolähde tunnistettu"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Tämän ohjelmistolähteen lisääminen tarjoaa lisää ohjelmistoja ja päivityksiä."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Käytä vain ohjelmistolähteitä, joihin luotat."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Verkkosivusto"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Lahjoita"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Saatavilla suomeksi"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentaatio"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Julkaisutoiminta"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Järjestelmäintegraatio"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Eristetty"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanava"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versio"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Ikäraja"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Oikeudet"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Päivitetty"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Luokka"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Koko asennettuna"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Latauksen koko"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Kehittäjä"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lisenssi"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Avoin"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Suljettu"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Lisäosat"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Valitut lisäosat asennetaan sovelluksen mukana."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Arvostelut"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Kirjoita arvostelu"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Näytä lisää"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Tämä tarkoittaa, että ohjelmistoa voi vapaasti käyttää, kopioida, levittää, "
+"opiskella ja muokata."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Suljettu ohjelmisto"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Tämä tarkoittaa, että ohjelmiston omistaa joko yksityinen taho tai yritys. "
+"Ohjelman käyttöön liittyy rajoituksia, eikä lähdekoodia ole yleensä "
+"saatavilla."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Tuntematon ohjelmistolisenssi"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Tämän ohjelmiston lisenssiehdot ovat tuntemattomia."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Sovellus arvioitiin näin, koska se sisältää:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Tästä arvostelusta ei ole saatavilla lisätietoja."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " ja "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Saatavilla olevat fontit \"%s\"-skriptille"
+msgstr[1] "Saatavilla olevat fontit \"%s\"-skripteille"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Saatavilla olevat ohjelmistot - %s"
+msgstr[1] "Saatavilla olevat ohjelmistot - %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Pyydettyä ohjelmistoa ei löydy"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Kohdetta %s ei löydy"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "verkkosivustolla"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Tiedostoa %s tarjoavaa sovellusta ei ole saatavilla."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Tietoja kohteesta %s, ja ohjeita kuinka saada puuttuvat sovellukset, saattaa "
+"olla tarjolla tällä %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Sovelluksia \"%s\"-tuen tarjoamiseksi ei ole saatavilla."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s ei ole saatavilla."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Tietoja kohteesta %s, ja ohjeita kuinka saada tätä tiedostomuotoa tukeva "
+"sovellus, saattaa olla tarjolla tällä %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Fontteja ei ole saatavilla \"%s\"-skriptituen tarjoamiseksi."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Tietoja kohteesta %s, ja ohjeita kuinka saada lisäfontteja, saattaa olla "
+"tarjolla tällä %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s-muotoa varten ei ole lisäkoodekkeja saatavilla."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Tietoja kohteesta %s, ja ohjeita kuinka saada tätä tiedostomuotoa tukeva "
+"koodekki, saattaa olla tarjolla tällä %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Plasma-resursseja ei ole saatavilla \"%s\"-tuen tarjoamiseksi."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Tietoja kohteesta %s, ja ohjeita kuinka saada lisää Plasma-resursseja, "
+"saattaa olla tarjolla tällä %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Tulostinajureita ei ole saatavilla tulostimelle %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Tietoja kohteesta %s, ja ohjeita kuinka saada tätä tulostinta tukeva ajuri, "
+"saattaa olla tarjolla tällä %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "tältä verkkosivulta"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Valitettavasti etsimääsi koodekkia %s ei löydy. Katso lisätietoja %s."
+msgstr[1] ""
+"Valitettavasti etsimiäsi koodekkeja %s ei löydy. Katso lisätietoja %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Hakutuloksia ei löytynyt"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s-tiedostomuoto"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Koodekin sivu"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Tervetuloa"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Tervetuloa ohjelmistojen pariin"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Ohjelmistot mahdollistaa keskitetyn asennuspaikan eri ohjelmistoille. "
+"Tutustu suosituksiin, selaa eri luokkia tai etsi haluamaasi sovellusta."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Siirry ohjelmistojen pariin"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Poistettu"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Asennettu"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Päivitetty"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %Bta %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Järjestelmäsovellukset"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Asennussivu"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Ohjelmistoluetteloa ladataan verkosta"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Ladataan sivua"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Käynnistetään…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Nykyinen verkkoyhteys on käytön mukaan laskutettava. Käytön mukaan "
+"laskutettavissa yhteyksissä on yleensä datarajoituksia tai muuttuvia "
+"kustannuksia. Datan säästämiseksi automaattiset päivitykset on keskeytetty.\n"
+"\n"
+"Automaattiset päivitykset otetaan jälleen käyttöön, kun käytettävissä on muu "
+"kuin käytön mukaan laskutettava yhteys. Siihen saakka päivitykset on "
+"mahdollista asentaa manuaalisesti.\n"
+"\n"
+"Jos nykyinen yhteys on väärin havaittu käytön mukaan laskutettavaksi "
+"yhteydeksi, mutta ei ole sellainen, tämä asetus on mahdollista muuttaa."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Avaa _verkkoasetukset"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderoi sivua"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Ei arvosteluja moderoitavaksi"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "järjestelmä"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "käyttäjä"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Haara"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Osoite"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Muoto"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Asennuskohde"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Lisää…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Suositut ääni- ja videsovellukset"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Suositut pelit"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Suositut grafiikkasovellukset"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Suositut tuottavuussovellukset"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Käytä lisäohjelmistoja kolmansien osapuolten ohjelmistolähteistä."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Jotkin ohjelmistot ovat suljettuja, ja niissä on rajoituksia lähdekoodin "
+"käyttöön, jakamiseen ja pääsyyn liittyen."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Lue lisää…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Käytä"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Yhteenvetosivu"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Käytetäänkö kolmansien osapuolten ohjelmistolähteitä?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Edellinen"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Seuraava"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Toimituksen valinnat"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Uusimmat julkaisut"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Luokat"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Sovellustietoja ei löytynyt"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Valmistele %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Poistetaanko ohjelmistolähde %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Kaikki sovellukset lähteestä %s poistetaan. Käyttääksesi kyseisiä "
+"ohjelmistoja uudelleen, tulee lähde asentaa uudelleen."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Poistetaanko %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s poistetaan. Jos haluat käyttää sitä jatkossa, se pitää asentaa uudelleen."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Asennettu)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Päivitysvalinnat"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automaattiset päivitykset"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automaattiset päivitykset ovat pois käytöstä, kun käytetään mobiiliyhteyttä "
+"tai käytön mukaan laskutettavaa yhteyttä."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Automaattisen päivityksen ilmoitukset"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Näytä ilmoitus, kun päivitykset on asennettu automaattisesti."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Jotkin asennetut ohjelmistot eivät ole yhteensopivia käyttöjärjestelmän %s "
+"kanssa. Jos jatkat, seuraavat poistetaan automaattisesti versiopäivityksen "
+"yhteydessä:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Yhteensopimaton ohjelmisto"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Jatka"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u sovellus asennettu"
+msgstr[1] "%u sovellusta asennettu"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u lisäosa asennettu"
+msgstr[1] "%u lisäosaa asennettu"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u sovellus"
+msgstr[1] "%u sovellusta"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u lisäosa"
+msgstr[1] "%u lisäosaa"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s ja %s asennettu"
+msgstr[1] "%s ja %s asennettu"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Poistetaanko ohjelmistolähde “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Poistetaanko ohjelmistolähde “%s” käytöstä?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Ohjelmistot, jotka on asennettu tästä ohjelmistolähteestä, eivät saa enää "
+"minkäänlaisia päivityksiä, ei edes tietoturvapäivityksiä."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Poista käytöstä"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "käyttöjärjestelmä"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Nämä ohjelmistolähteet täydentävät oletusohjelmistovalikoimaa, jota %s "
+"tarjoaa."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Kolmansien osapuolten ohjelmistolähteet"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Ei erillisiä ohjelmistolähteitä"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Käytä"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Poista…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Poista käytöstä…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Otetaan käyttöön"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Poistetaan käytöstä"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Käytössä"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Poistettu käytöstä"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "En tykkää lainkaan"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "En tykkää erityisemmin"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Ihan OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Tykkään siitä"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Tykkään siitä todella paljon"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Käytä hieman enemmän aikaa arvostelun kirjoittamiseen"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Valitse tähtimäärä"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Yhteenveto on liian lyhyt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Yhteenveto on liian pitkä"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Kuvaus on liian lyhyt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Kuvaus on liian pitkä"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Lähetä arvostelu"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Lähetä"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Yhteenveto"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Kirjoita lyhyt yhteenveto arvostelustasi, esim. \"Todella hyödyllinen ja "
+"monipuolinen sovellus, suosittelen.\""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Arvostelu"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Mitä pidät tästä sovelluksesta? Yritä tuoda näkemyksiäsi selkeästi esiin."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Katso mitä tietoja lähetetään lukemalla <a href=\"https://odrs.gnome.org/"
+"privacy\">yksityisyyskäytäntömme</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "arvostelua yhteensä"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Voit ilmoittaa loukkaavista, epäkohteliaista ja syrjivistä arvosteluista."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Ilmoituksen jälkeen se piilotetaan, kunnes ylläpitäjä tarkistaa arvostelun."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Haluatko tehdä ilmoituksen arvostelusta?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Ilmoita"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Oliko tästä arvostelusta sinulle hyötyä?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Kyllä"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ei"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "No jaa"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Ilmoita…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Poista…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Kuvakaappausta ei löytynyt"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Kuvan lataaminen epäonnistui"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Kuvakaappauksen kokoa ei löytynyt"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Välimuistin luominen ei onnistunut"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Kuvakaappaus on virheellinen"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Kuvakaappausta ei ole saataville"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Kuvakaappaus"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u tulos lisää"
+msgstr[1] "%u tulosta lisää"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Hakusivu"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Sovellusta ei löytynyt"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Laiteohjelmistopäivitysten lataaminen lähteestä %s epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Päivitysten lataaminen lähteestä %s epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Päivitysten lataaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Päivitysten lataaminen epäonnistui: internetyhteys vaadittiin, mutta sitä ei "
+"ollut saatavilla"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Päivitysten lataaminen lähteestä %s epäonnistui: levytilaa ei ole riittävästi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Päivitysten lataaminen epäonnistui: levytilaa ei ole riittävästi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Päivitysten lataaminen epäonnistui: tunnistautuminen vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Päivitysten lataaminen epäonnistui: tunnistautuminen oli virheellinen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Päivitysten lataaminen epäonnistui: käyttöoikeutesi eivät riitä "
+"ohjelmistojen asentamiseen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Päivitysluettelon noutaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Sovelluksen %s asennus epäonnistui, koska lataaminen lähteestä %s epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Sovelluksen %s asennus epäonnistui, koska lataaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Sovelluksen %s asennus epäonnistui, koska runtime-kirjasto %s ei ole "
+"saatavilla"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Sovelluksen %s asennus epäonnistui, koska se ei ole tuettu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Asennus epäonnistui: internetyhteys vaadittiin, mutta sitä ei ollut "
+"saatavilla"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Asennus epäonnistui: sovelluksen muoto ei ole kelvollinen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Sovelluksen %s asennus epäonnistui: levytilaa ei ole riittävästi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Sovelluksen %s asennus epäonnistui: tunnistautuminen vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Sovelluksen %s asennus epäonnistui: tunnistautuminen oli virheellinen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Sovelluksen %s asennus epäonnistui: käyttöoikeutesi eivät riitä "
+"ohjelmistojen asennukseen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Sovelluksen %s asennus epäonnistui: verkkovirta vaaditaan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Sovellusta %s ei voi asentaa: akussa ei ole riittävästi virtaa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Sovelluksen %s asennus epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Sovelluksen %s päivittäminen lähteestä %s ei onnistu, koska lataaminen "
+"epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Sovelluksen %s päivitys epäonnistui, koska lataaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Päivitysten asentaminen lähteestä %s epäonnistui, koska lataaminen "
+"epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Päivitysten asentaminen ei onnistu, koska lataaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Päivitys epäonnistui: internetyhteys vaadittiin, mutta sitä ei ollut "
+"saatavilla"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Sovelluksen %s päivitys epäonnistui: ei riittävästi levytilaa"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Päivitysten asentaminen ei onnistu: levytilaa ei ole riittävästi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Sovelluksen %s päivitys epäonnistui: tunnistautuminen vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Päivitysten asentaminen ei onnistu: tunnistautuminen vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Sovelluksen %s päivitys epäonnistui: tunnistautuminen oli virheellinen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Päivitysten asentaminen ei onnistu: tunnistautuminen oli virheellinen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Sovelluksen %s päivitys epäonnistui: käyttöoikeutesi eivät riitä "
+"ohjelmistojen päivittämiseen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Päivitysten asentaminen ei onnistu: käyttöoikeutesi eivät riitä "
+"ohjelmistojen päivittämiseen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Sovelluksen %s päivitys epäonnistui: verkkovirta vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Päivitysten asentaminen ei onnistu: verkkovirta vaaditaan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Sovellusta %s ei voi päivittää: akussa ei ole riittävästi virtaa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Päivityksiä ei voi asentaa: akussa ei ole riittävästi virtaa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Sovelluksen %s päivitys epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Päivitysten asentaminen ei onnistunut"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Järjestelmäpäivitys %s lähteestä %s epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Järjestelmäpäivitys %s epäonnistui, koska lataaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"%s -järjestelmäpäivitys epäonnistui: internetyhteys vaadittiin, mutta sitä "
+"ei ollut saatavilla"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Järjestelmäpäivitys %s epäonnistui: ei riittävästi levytilaa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Järjestelmäpäivitys %s epäonnistui: tunnistautuminen vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Järjestelmäpäivitys %s epäonnistui: tunnistautuminen oli virheellinen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Järjestelmäpäivitys %s epäonnistui: käyttöoikeutesi eivät riitä "
+"järjestelmäpäivitykseen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Järjestelmäpäivitys %s epäonnistui: verkkovirta vaaditaan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Versioon %s päivitys ei onnistu: akussa ei ole riittävästi virtaa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Järjestelmäpäivitys %s epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Sovelluksen %s poistaminen epäonnistui: tunnistautuminen vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+"Sovelluksen %s poistaminen epäonnistui: tunnistautuminen oli virheellinen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Sovelluksen %s poistaminen epäonnistui: käyttöoikeutesi eivät riitä "
+"ohjelmistojen poistamiseen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Sovelluksen %s poistaminen epäonnistui: verkkovirta vaadittiin"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Sovellusta %s ei voi poistaa: akussa ei ole riittävästi virtaa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Sovelluksen %s poistaminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Sovelluksen %s käynnistäminen epäonnistui: %s ei ole asennettu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Levytilaa ei ollut riittävästi — vapauta levytilaa ja yritä uudelleen"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Valitettavasti jokin meni pieleen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Tiedoston asentaminen epäonnistui: ei tuettu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Tiedoston asennus epäonnistui: tunnistautuminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Asentaminen epäonnistui: ei tuettu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Asentaminen epäonnistui: tunnistautuminen epäonnistui"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Yhteys kohteeseen %s ei onnistu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+"%s tulee käynnistää uudelleen, jotta uudet liitännäiset ovat käytettävissä."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Tämä sovellus tulee käynnistää uudelleen, jotta uudet liitännäiset ovat "
+"käytettävissä."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Verkkovirta vaaditaan"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Akussa ei ole riittävästi virtaa"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Lähde: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Asennetaan)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Poistetaan)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Poista kaikki"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Päivityksen kuvausta ei ole saatavilla."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Asennettu %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Asennetut päivitykset"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Lisäykset"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Poistot"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Päivitykset"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Version muutokset alempaan"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Tähän järjestelmään ei ole asennettu päivityksiä."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Tietoturvapäivitykset odottavat"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "On suositeltavaa asentaa tärkeät päivitykset heti"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Käynnistä uudelleen ja asenna"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Ohjelmistopäivityksiä saatavilla"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Tärkeitä järjestelmä- ja sovelluspäivityksiä on valmiina asennettavaksi"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Näytä"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u sovellus päivitetty — Uudelleenkäynnistys vaaditaan"
+msgstr[1] "%u sovellusta päivitetty — Uudelleenkäynnistys vaaditaan"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u sovellus päivitetty"
+msgstr[1] "%u sovellusta päivitetty"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s on päivitetty."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Käynnistä sovellus uudelleen."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s ja %s on päivitetty."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u sovellus vaatii uudelleenkäynnistyksen."
+msgstr[1] "%u sovellusta vaatii uudelleenkäynnistyksen."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Mukaan lukien %s, %s ja %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Käyttöjärjestemän päivitykset eivät ole saatavilla"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Päivitä käyttöjärjestelmä uudempaan versioon saadaksesi "
+"tietoturvapäivityksiä."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Uusi \"%s\"-versio on saatavilla asennusta varten"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Ohjelmistopäivitys saatavilla"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Ohjelmistopäivitykset epäonnistuivat"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Tärkeän järjestelmäpäivityksen asennus epäonnistui."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Näytä tiedot"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Järjestelmän versiopäivitys valmistui"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Tervetuloa, käytössäsi on %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Ohjelmistopäivitys asennettu"
+msgstr[1] "Ohjelmistopäivitykset asennettu"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Tärkeä järjestelmäpäivitys asennettiin."
+msgstr[1] "Tärkeitä järjestelmäpäivityksiä asennettiin."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Tarkastele"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Päivitys epäonnistui"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Järjestelmä oli jo ajan tasalla."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Päivitys peruttiin."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internetyhteys vaadittiin, mutta sitä ei ollut saatavilla. Varmista, että "
+"yhteys toimii ja yritä uudelleen."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Päivityksen kanssa ilmeni tietoturvaongelmia. Ota yhteys ohjelmistojen "
+"tarjoajaan saadaksesi lisätietoja."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Levytilaa ei ollut riittävästi. Vapauta levytilaa ja yritä uudelleen."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Valitettavasti päivityksen asentaminen epäonnistui. Odota toista päivitystä "
+"ja yritä uudelleen. Jos ongelma jatkuu, ota yhteys ohjelmistojen tarjoajaan."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Eilen, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Eilen, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Kaksi päivää sitten"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Kolme päivää sitten"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Neljä päivää sitten"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Viisi päivää sitten"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Kuusi päivää sitten"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Viikko sitten"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Kaksi viikkoa sitten"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Etsitään uusia päivityksiä…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Asetetaan päivityksiä…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Tämä saattaa kestää hetken)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Viimeksi tarkistettu: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s ei ole enää tuettu."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Käyttöjärjestelmäsi ei ole enää tuettu."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr ""
+"Tämä tarkoittaa, ettei käyttöjärjestelmään ole saatavilla enää "
+"tietoturvapäivityksiä."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "On suositeltavaa, että päivität käyttöjärjestelmän uudempaan versioon."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Saattaa aiheuttaa kuluja"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Päivitysten tarkistaminen mobiilidatayhteydellä saattaa aiheuttaa suuren "
+"laskun."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Tarkista _silti"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Ei verkkoa"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Päivitysten tarkistaminen vaatii internetyhteyden."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Tarkistetaan…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Tarkista päivitykset"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Päivityssivu"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Ohjelmat ovat ajan tasalla"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Päivitysten tarkistaminen mobiilidatayhteydellä saattaa aiheuttaa suuren "
+"laskun"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Tarkista silti"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Yhdistä verkkoon tarkistaaksesi päivitykset"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Verkkoasetukset"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Päivityksiä hallitaan automaattisesti"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Käynnistä uudelleen ja päivitä"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Päivitä kaikki"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integroitu laiteohjelmisto"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Vaatii uudelleenkäynnistyksen"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Sovelluspäivitykset"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Laitteen laiteohjelmisto"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Lataa"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"On suositeltavaa varmuuskopioida tärkeät tiedostot ennen päivittämistä."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Käynnistä uudelleen nyt"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Päivitykset otetaan käyttöön, kun tietokone käynnistetään uudelleen."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s nyt saatavilla"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Odotetaan, että %s %s ladataan"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Ladataan %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s valmiina asennettavaksi"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Suuri päivitys uusin ominaisuuksin ja parannuksin."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "L_ue lisää"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Lisää, poista tai päivitä tietokoneen ohjelmistoja"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;Päivitys;Päivitykset;Lähteet;Ohjelmistolähteet;"
+"Ohjelmistovarastot;Asenna;Poista;Ohjelma;Sovellus;Kauppa;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Äänen luonti ja muokkaus"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musiikkisoittimet"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Vianjäljittimet"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Kehitysympäristöt"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Tekoäly"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kemia"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Kielet"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematiikka"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotiikka"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Toimintapelit"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Seikkailupelit"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Pelihallipelit"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Palikkapelit"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Lautapelit"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Korttipelit"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulaattorit"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Lastenpelit"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logiikkapelit"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Roolipelit"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Urheilupelit"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategiapelit"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafiikka"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Valokuvaus"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Kuvanluku"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorigrafiikka"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Katselimet"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalenteri"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Tietokanta"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Talous"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Tekstinkäsittely"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fontit"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Koodekit"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Syötelähteet"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Kielipaketit"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisointi"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Laitteistoajurit"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Keskustelu"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Uutisryhmät"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Verkkoselaimet"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Tekstimuokkaimet"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Kaikki"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Nostot"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Taide"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Sarjakuvat"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiktio"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Terveys"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historia"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Elämäntapa"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politiikka"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Urheilu"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Ääni ja video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Kehitystyökalut"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Koulutus ja tieteet"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Pelit"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafiikka ja valokuvaus"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Tuottavuus"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Yhteydenpito ja uutiset"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Viittaus"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Apuohjelmat"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Järjestelmäpäivitykset"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"Sisältää suorituskykyyn, vakauteen ja turvallisuuteen liittyviä parannuksia."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Ladataan nostokuvia…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS -päivitys uusin ominaisuuksin ja parannuksin."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS-päivityspalvelu ei voinut noutaa ja toteuttaa päivitystä."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+"Gnomen Ohjelmistot-sovelluksen järjestelmänlaajuinen AppStream-asennusohjelma"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Komentorivivalitsimien jäsentäminen epäonnistui"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Määritä tasan yksi tiedostonimi"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Tätä ohjelmaa voi käyttää vain root-käyttäjä"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Sisältötyypin vahvistaminen epäonnistui"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kopiointi epäonnistui"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Ladataan ylimääräisiä metadatatiedostoja…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Ladataan versiopäivitystietoja…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Päivitä saadaksesi uusimmat ominaisuudet ja suorituskyky- sekä "
+"vakausparannukset."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak-tuki"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak on viitekehys Linux-työpöytäsovelluksille"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Noudetaan flatpak-metatietoja kohteelle %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Laitteen päivitys %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Järjestelmän päivitys %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Sulautetun ohjaimen päivitys %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "ME-päivitys %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Yritystason ME-päivitys %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Kuluttajatason ME-päivitys %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Ohjaimen päivitys %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Thunderbolt-ohjaimen päivitys %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Suorittimen mikropäivitys %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Kokoonpanon päivitys %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Ladataan laiteohjelmiston päivitysallekirjoituksia…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Ladataan laiteohjelmiston päivityksen metatietoja…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Laiteohjelmistojen päivitystuki"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Tarjoaa tuen laiteohjelmistojen (firmware) päivityksille"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Ladataan sovellusarvosteluja…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop -arvostelutuki"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS on sovellusten käyttäjäarvioihin keskittynyt palvelu"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap-kauppa"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap-tuki"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap on yleinen Linux-paketti"
+
+#~ msgid "About %s"
+#~ msgstr "Tietoja - %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s, ME"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Laajennusasetukset"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Käytä laajennuksia omalla vastuullasi. Jos kohtaat ongelmia järjestelmän "
+#~ "toiminnassa, poista laajennukset käytöstä."
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell-laajennukset"
+
+#~ msgid "GNOME"
+#~ msgstr "Gnome"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Gnome Shell -laajennusten ohjelmistolähde"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Ladataan Shell-laajennuksen metatietoja…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell -laajennus"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Näytä kansiohallinnan käyttöliittymä"
+
+#~ msgid "Folder Name"
+#~ msgstr "Kansion nimi"
+
+#~ msgid "_Add"
+#~ msgstr "_Lisää"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Lisää sovelluskansioon"
+
+#~ msgid "Top Rated"
+#~ msgstr "Parhaat arvostelut"
+
+#~ msgid "Failed to load components"
+#~ msgstr "Komponenttien lataaminen epäonnistui"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validoitu kelvollisesti!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Tiedoston lataaminen epäonnistui"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Tallentamattomia muutoksia"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Sovelluslista on jo ladattu."
+
+#~ msgid "Merge documents"
+#~ msgstr "Yhdistä asiakirjat"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Hylkää muutokset"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Avaa AppStream-tiedosto"
+
+#~ msgid "_Open"
+#~ msgstr "_Avaa"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Tallenna AppStream-tiedosto"
+
+#~ msgid "_Save"
+#~ msgstr "_Tallenna"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Tiedoston tallentaminen epäonnistui"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "\"%s\"-bannerisuunnitelma poistettu."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Bannerisuunnitelma poistettu."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Sovelluslistassa on tallentamattomia muutoksia."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Käytä runsasta lokitusta"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Gnomen ohjelmistojen bannerisuunnitelu"
+
+#~ msgid "No Designs"
+#~ msgstr "Ei suunnitelmia"
+
+#~ msgid "Error message here"
+#~ msgstr "Virheviesti tähän"
+
+#~ msgid "App ID"
+#~ msgstr "Sovelluksen tunniste"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Toimituksen valinnat"
+
+#~ msgid "Category Featured"
+#~ msgstr "Luokka \"Nostot\""
+
+#~ msgid "Undo"
+#~ msgstr "Kumoa"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Bannerisuunnittelu"
+
+#~ msgid "New Banner"
+#~ msgstr "Uusi banneri"
+
+#~ msgid "Import from file"
+#~ msgstr "Tuo tiedostosta"
+
+#~ msgid "Export to file"
+#~ msgstr "Vie tiedostoon"
+
+#~ msgid "Delete Design"
+#~ msgstr "Poista suunnitelma"
+
+#~ msgid "Featured App"
+#~ msgstr "Nostettu sovellus"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Järjestelmäpäivitys"
+
+#~ msgid "Spacing"
+#~ msgstr "Välistys"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Napsauta kohdetta valitaksesi sen"
+
+#~ msgid "Select"
+#~ msgstr "Valitse"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Lisää kansioon…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Siirrä kansioon…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Poista kansiosta"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Valokeilassa"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr ""
+#~ "Suunnittele nostopaikoilla olevien sovellusten bannereita Gnomen "
+#~ "ohjelmistoihin"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;sovellus;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Verkkosovellusten tuki"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Suorita suosittuja verkkosovelluksia selaimessa"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Kaikki"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Kirjaudu sisään / Rekisteröidy…"
+
+#~ msgid "Continue"
+#~ msgstr "Jatka"
+
+#~ msgid "Use"
+#~ msgstr "Käytä"
+
+#~ msgid "Add another…"
+#~ msgstr "Lisää toinen…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Ohjelmistoluetteloa ladataan"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Haluatko varmasti ostaa kohteen %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s asennetaan, ja sinulta veloitetaan %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Osta"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%2$f %1$s"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Kirjauduttu tilillä %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Kirjaudu sisään…"
+
+#~ msgid "Sign out"
+#~ msgstr "Kirjaudu ulos"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Ei voitu ostaa %s: tunnistautuminen vaadittiin"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Ei voitu ostaa %s: tunnistautuminen ei kelvannut"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Ei voitu ostaa %s: maksutapaa ei määritetty"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Ei voitu ostaa %s: maksusta kieltäydyttiin"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Ei voitu ostaa %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Jatkaaksesi sinun tulee käyttää Ubuntu One -tiliä."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Jatkaaksesi sinun tulee käyttää Ubuntu One -tiliäsi."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Näytä palvelun profilointitietoja"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Jatkaaksesi kirjaudu sisään palveluun %s."
+
+#~ msgid "Email address"
+#~ msgstr "Sähköpostiosoite"
+
+#~ msgid "I have an account already"
+#~ msgstr "Minulla on jo tili"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Haluan rekisteröidä tilin nyt"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Unohdin salasanani"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Kirjaudu sisään automaattisesti ensi kerralla"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr ""
+#~ "Anna kertakäyttöinen PIN-koodi kaksivaiheista tunnistaumista varten."
+
+#~ msgid "PIN"
+#~ msgstr "PIN-koodi"
+
+#~ msgid "Authenticate"
+#~ msgstr "Tunnistaudu"
+
+#~ msgid "_About"
+#~ msgstr "_Tietoja"
+
+#~ msgid "_Quit"
+#~ msgstr "_Lopeta"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Tietoja kohteesta %s, ja tietoa kuinka saada tätä tiedostomuotoa tukeva "
+#~ "koodekki, löytyy verkkosivustolta."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "\"%s\"-tilisi on jäädytetty."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Ohjelmistojen asennus ei ole mahdollista, ennen kuin tämä asia on "
+#~ "selvitetty."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Lisätietoja on osoitteessa %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Sovelluksen %s päivitys lähteestä %s epäonnistui"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Ladataan uusia päivityksiä…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Ladataan sovellussivua…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam-tuki"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Valven tarjoama viihdealusta"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Sovellukset päivitetty"
+
+#~ msgid "Includes: ."
+#~ msgstr "Sisältäen: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Käynnistä uu_delleen ja asenna"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Päivitä _kaikki"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Käynnistä uudelleen ja _asenna"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Noudetaan runtime-lähdettä…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Ladataan laiteohjelmiston päivitystä…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba-tuki"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba tarjoaa kehittäjille helpon tavan luoda ohjelmistopaketteja"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Lajiteltu nimen mukaan"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Lajiteltu arvostelun mukaan"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Luettelo lisälähteistä, jotka on otettu aiemmin käyttöön"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Luettelo lähteistä, jotka on aiemmin otettu käyttöön kolmansien "
+#~ "osapuolien sovelluksia asennettaessa."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Näytä suljettuja ohjelmistoja hakutuloksissa"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Luettelo suljetuista lisäohjelmistolähteistä, jotka on mahdollista ottaa "
+#~ "käyttöön"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "Tarjoaa lisäohjelmistoja, kuten verkkoselaimia ja pelejä."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Käytetäänkö suljettua ohjelmistolähdettä?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Ei sovelluksia tai lisäosia asennettuna; muut ohjelmistot voivat silti"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Tyypillisesti rajoituksia käytön ja pääsyn lähdekoodiin suhteen."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Suljetut ohjelmistolähteet"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Ohjelmistolähteitä voi ladata internetistä. Niiden avulla on mahdollista "
+#~ "ladata lisää ohjelmistoja, joita %s ei tarjoa."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Lähteen poistaminen poistaa myös ne ohjelmistot, jotka on asennettu "
+#~ "kyseisestä lähteestä."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Tästä lähteestä ei ole asennettu ohjelmistoja"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Tästä lähteestä asennetut"
+
+#~ msgid "Source Details"
+#~ msgstr "Lähteen tiedot"
+
+#~ msgid "Last Checked"
+#~ msgstr "Viimeksi tarkistettu"
+
+#~ msgid "Added"
+#~ msgstr "Lisätty"
+
+#~ msgid "Website"
+#~ msgstr "Verkkosivusto"
+
+#~ msgid "Remove Source"
+#~ msgstr "Poista lähde"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Pelaajien välistä pelin sisäistä vuorovaikutusta ilman "
+#~ "keskustelumahdollisuutta"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Käyttäjätiedon jakamista kolmansien osapuolten kanssa"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgid "Other Updates"
+#~ msgstr "Muut päivitykset"
+
+#~ msgid "Total"
+#~ msgstr "Yhteensä"
+
+#~ msgid "_Install All"
+#~ msgstr "_Asenna kaikki"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Kohteen %s asennus epäonnistui."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Kohteen %s poistaminen epäonnistui."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Varmista, että internetyhteys toimii ja yritä uudelleen."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Vapauta levytilaa ja yritä uudelleen."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Jos ongelma uusiutuu, ota yhteys ohjelmiston tarjoajaan."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ei mitään"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Kaikki"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Nostot"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematiikka"
+
+#~ msgid "Science"
+#~ msgstr "Tiede"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Ohjelmistolähteet tarjoavat lisää ohjelmia."
+
+#~ msgid " or "
+#~ msgstr " tai "
+
+#~ msgid "3rd party"
+#~ msgstr "kolmas osapuoli"
+
+#~ msgid "web app"
+#~ msgstr "verkkosovellus"
+
+#~ msgid "nonfree"
+#~ msgstr "ei-vapaa"
+
+#~ msgid "_Installing"
+#~ msgstr "_Asennetaan"
+
+#~ msgid "_Removing"
+#~ msgstr "_Poistetaan"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Tuntematon"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Lasketaan…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Tuntematon"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Tämä ohjelmisto tulee kolmannelta osapuolelta."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Tämä ohjelmisto tulee kolmannelta osapuolelta ja saattaa sisältää ei-"
+#~ "vapaita osia."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Tämä ohjelmisto saattaa sisältää ei-vapaita osia."
+
+#~ msgid "_History"
+#~ msgstr "_Historia"
+
+#~ msgid "Size"
+#~ msgstr "Koko"
+
+#~ msgid "non-free"
+#~ msgstr "ei-vapaa"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Suositut toimistosovellukset"
+
+#~ msgid "One Star"
+#~ msgstr "Yksi tähti"
+
+#~ msgid "Two Stars"
+#~ msgstr "Kaksi tähteä"
+
+#~ msgid "Three Stars"
+#~ msgstr "Kolme tähteä"
+
+#~ msgid "Four Stars"
+#~ msgstr "Neljä tähteä"
+
+#~ msgid "Five Stars"
+#~ msgstr "Viisi tähteä"
+
+#~ msgid "Audio"
+#~ msgstr "Ääni"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Muokkaus"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Tietokannat"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Levyjen poltto"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatööriradio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Miksaus"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Musiikki"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Nauhoittimet"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sekvensserit"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Virittimet"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Kääntäminen"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Tietokannat"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Ohjelmointiympäristöt"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilointi"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Kielenkäännös"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Web-kehitys"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Tietojenkäsittely"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Rakentaminen"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Datan visualisointi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Talous"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Sähköoppi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektroniikka"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Insinöörityö"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geotiede"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Historia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanismi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Kuvankäsittely"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Kirjallisuus"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Kartat"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Musiikki"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numeerinen analyysi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Rinnakkaislaskenta"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fysiikka"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Hengellisyys"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Ammuskelupelit"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulaatiopelit"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Urheilupelit"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafiikka"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D-grafiikka"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Tekstintunnistus"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Julkaisu"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rasterigrafiikka"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Puhelinverkkoyhteydet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Sähköposti"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Syötteet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Tiedostonsiirto"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatööriradio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Pikaviestintä"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC-sovellukset"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Seuranta"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "Vertaisverkko"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Etäkäyttö"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Puhelinpalvelut"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Web-kehitys"
+
+#~ msgid "Office"
+#~ msgstr "Toimisto"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Kaaviot"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Yhteystietojen hallinta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Sanasto"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Sähköposti"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Vuokaavio"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Kämmentietokoneet"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Valokuvaus"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Esitys"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projektinhallinta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Julkaisu"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Taulukkolaskenta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Katselimet"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Taide"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Tekoäly"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Tietojenkäsittely"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Rakentaminen"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Datan visualisointi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Talous"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Sähkö"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektroniikka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Insinöörityö"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Maantiede"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geotiede"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Historia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanismi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Kuvankäsittely"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Kielet"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Kirjallisuus"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Kartat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematiikka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Lääketiede"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numeerinen analyysi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Rinnakkaislaskenta"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fysiikka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotiikka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Hengellisyys"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Urheilu"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulaattori"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Tiedostonhallinta"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Tiedostotyökalut"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Seuranta"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Tietoturva"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Pääte-emulaattorit"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Esteettömyys"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arkistointi"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Laskimet"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Kellot"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Pakkaus"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Tiedostotyökalut"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Kartat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Hengellisyys"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Puhelintyökalut"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Muokkaus"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Tietokanta"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Levyjen poltto"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Soittimet"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Nauhoittimet"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "AppStream-tietoja ei löytynyt"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Edellinen päivitys jäi viimeistelemättä."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Päivityksen asentaminen epäonnistui. Tämä johtuu usein itse "
+#~ "päivityksestä. Odota toista päivitystä ja yritä uudelleen."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Vaatii internetyhteyden"
+
+#~| msgid "Application Folders"
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Siirry GApplication-palvelutilaan"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Päivitystä ei ollut allekirjoitettu hyväksyttävällä tavalla."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Päivitystä ei voitu viedä loppuun."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Yhteydettömän tilan päivitystä pyydettiin, mutta yksikään paketti ei "
+#~ "vaadi päivitystä."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Asemalla ei ole vapaata tilaa."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Päivityksen asennus epäonnistui."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Yhteydettömän tilan päivitys epäonnistui odottamattomalla tavalla."
+
+#~ msgid "No sources found."
+#~ msgstr "Lähteitä ei löytynyt."
+
+#~ msgid "OK"
+#~ msgstr "OK"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i sovellus ja %i lisäosaa asennettu"
+#~ msgstr[1] "%i sovellusta ja %i lisäosaa asennettu"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Aseta määritelty vianjäljitystaso"
+
+#~ msgid "Picks"
+#~ msgstr "Valikoidut"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..d6573d3
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,4790 @@
+# French translation for gnome-software.
+# Copyright (C) 2014-2020 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Alain Lojewski <allomervan@gmail.com>, 2014-2018.
+# Guillaume Bernard <associations@guillaume-bernard.fr>, 2017-2019.
+# William Oprandi <william.oprandi@gmail.com>, 2019.
+# Adrien Plazas <kekun.plazas@laposte.net>, 2019.
+# Charles Monzat <charles.monzat@free.fr>, 2018-2019.
+# Julien Humbert <julroy67@gmail.com>, 2020.
+# Hydroxyp <hydroxyp@gmail.com>, 2020.
+# Thibault Martin <thibaultamartin@gnome.org>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-01 15:47+0000\n"
+"PO-Revision-Date: 2020-09-04 12:28+0200\n"
+"Last-Translator: Thibault Martin <thibaultamartin@gnome.org>\n"
+"Language-Team: French <gnomefr@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Generator: Gtranslator 3.36.0\n"
+"X-DamnedLies-Scope: partial\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Logiciels de GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestionnaire d’applications pour GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Logiciels sert à rechercher et installer de nouvelles applications et "
+"extensions du système, ainsi qu’à supprimer celles qui sont installées sur "
+"votre ordinateur."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Logiciels de GNOME présente une vitrine d’applications en vedette et "
+"populaires à l’aide de descriptions utiles et de plusieurs captures d’écran "
+"pour chacune d’elle. Vous pouvez rechercher des logiciels soit en consultant "
+"la liste des catégories, soit en interrogeant le moteur de recherche. "
+"Logiciels permet aussi de mettre à jour votre système hors ligne."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panneau de vue d’ensemble"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panneau des descriptions"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panneau des installations"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panneau des mises à jour"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Détails de la mise à jour"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "Le projet GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installer un fichier AppStream dans un emplacement système"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installation d’un fichier AppStream dans un emplacement système"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Une liste de projets compatibles"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Voici une liste de projets compatibles à afficher, tels que GNOME, KDE ou "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Indique la façon de gérer les mises à jour et les mises à niveau de "
+"Logiciels de GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Si désactivé, Logiciels de GNOME masque le panneau des mises à jour, "
+"n’effectue aucune mise à jour automatique et ne demande aucune mise à niveau."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Télécharger et installer automatiquement les mises à jour"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Si activé, Logiciels de GNOME télécharge automatiquement les mises à jour "
+"logicielles en arrière-plan, puis installe celles qui ne nécessitent pas de "
+"redémarrage."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Signaler à l’utilisateur les mises à jour de logiciels en arrière-plan"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Si activé, Logiciels de GNOME signale à l’utilisateur les mises à jour qui "
+"se sont faites pendant qu’il était inactif."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Indique s’il faut réactualiser automatiquement sur les connexions avec quotas"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Si activé, Logiciels de GNOME réactualise automatiquement en arrière-plan "
+"même sur les connexions avec quotas (avec comme conséquence le "
+"téléchargement de métadonnées, de mises à jour ou autres avec un coût "
+"potentiel pour l’utilisateur)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Indique s’il s’agit du premier lancement de Logiciels de GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Afficher les notes à côté des applications"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrer les applications en fonction de la branche définie par défaut pour "
+"les distants"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Les applications non-libres affichent un avertissement avant installation"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quand les applications non-libres sont installées, un avertissement peut "
+"être affiché. Ceci contrôle cet affichage."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Une liste d’applications populaires"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Une liste d’applications à utiliser, passant outre celles définies par le "
+"système."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "L’horodatage de la dernière vérification des mises à jour"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "L’horodatage de la dernière notification de mise à jour"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"L’horodatage de la première mise à jour de sécurité, effacé après mise à jour"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "L’horodatage de la dernière mise à jour"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"L’horodatage du dernier moment où le système était en ligne et a obtenu des "
+"mises à jour"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"La durée, en secondes, pour vérifier que la capture d’écran en amont est "
+"encore valide"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Le choix d’une valeur plus grande donne moins d’aller-retours vers le "
+"serveur distant, mais les mises à jour des captures d’écran sont plus lentes "
+"à arriver. Une valeur de 0 conduit à ne jamais interroger le serveur s’il y "
+"a déjà une image dans le cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Le serveur à utiliser pour les appréciations de l’application"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Le score minimum pour les appréciations"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+"Les appréciations dont le score est inférieur à cette valeur seront masquées."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Une liste de dépôts officiels qui ne doivent pas être considérés comme "
+"tierces parties"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Une liste de dépôts officiels qui doivent être considérés comme contenant "
+"des logiciels libres"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"L’URL de la licence à utiliser lorsqu’une application doit être considérée "
+"comme un logiciel libre"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Installe si possible les applications enveloppées sur le système pour tous "
+"les utilisateurs"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Autorise l’accès à la boîte de dialogue des dépôts de logiciels"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Propose des mises à niveau pour les versions à l’essai"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Affiche quelques éléments d’interface montrant à l’utilisateur qu’une "
+"application est non-libre"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Affiche l’invite de commandes pour installer les dépôts de logiciels non-"
+"libres"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Affiche leur taille d’installation dans la liste des applications installées"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://fr.wikipedia.org/wiki/Logiciel_propri%C3%A9taire'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+"L’URI qui fournit une explication sur les logiciels propriétaires et non-"
+"libres"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Une liste d’URL pointant vers les fichiers du flux de l’application qui "
+"seront téléchargés dans un dossier d’informations"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Installe les fichiers AppStream sur un emplacement de l’ensemble du système "
+"pour tous les utilisateurs"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Activer le dépôt d’extensions GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Une chaîne contenant l’identifiant « Comptes en ligne » utilisé pour se "
+"connecter"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Installation de l’application"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installer l’application sélectionnée sur le système"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Ne rien sélectionner"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Dépôts de logiciels"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Préférences de _mise à jour"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Logiciels"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Retourner en arrière"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explorer"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installées"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Mi_ses à jour"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Rechercher"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Source"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Dépôts de logiciels"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examiner le disque"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Paramètres réseau"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Redémarrer maintenant"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Davantage d’informations"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Mises à jour automatiques en pause"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "En savoir _plus"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Fichier local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paquet"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "En attente"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installée"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installation en cours"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Suppression en cours"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mode de démarrage : peut être « updates » (mises à jour), « updated » (à "
+"jour), « installed » (installées) ou « overview » (vue d’ensemble)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Rechercher des applications"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "RECHERCHER"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Afficher les détails de l’application (à partir de son identifiant)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Afficher les détails de l’application (à partir de son nom de paquet)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NOMDEPAQUET"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Installer l’application (à partir de son identifiant)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Ouvrir le fichier d’un paquet local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NOMDEFICHIER"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Le type d’interaction attendue ici : soit « none » (aucune), "
+"« notify » (notifier), ou « full » (toutes)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Afficher les informations détaillées de débogage"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installer les mises à jour en attente en arrière-plan"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Afficher les préférences de mise à jour"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Quitter la session en cours"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Préférer les sources des fichiers locaux à AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Afficher le numéro de version"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Alain Lojewski <allomervan@gmail.com>\n"
+"Guillaume Bernard <associations@guillaume-bernard.fr>\n"
+"Adrien Plazas <kekun.plazas@laposte.net>\n"
+"Julien Humbert <julroy67@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "À propos de Logiciels"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Une façon élégante de gérer les applications de votre système."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Désolé, il n’y a aucune information sur cette application."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visiter le site Web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installer…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Annuler"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installer"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Mettre à jour"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Supprimer"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "L’appareil ne peut pas être utilisé pendant la mise à jour."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Demande davantage de permissions"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Authentification distante sur %s requise (nom de domaine %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Authentification requise"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "A_nnuler"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Authentification"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Utilisateur"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Mot de _passe"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Autres"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Tout"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "En vedette"
+
+# On ne peut pas attribuer à "featured" une traduction unique qui serait valable pour tout mot le précédent, puisqu'il faut accorder "mis". Donc featured=mis.e.s en avant
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s en vedette"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Évaluation"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nom"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Afficher"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menu du filtre des sous-catégories"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Trier"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menu de tri des sous-catégories"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Veuillez saisir un chiffre de 1 à %u : "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Choisissez une application :"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Les mises à jour du système d’exploitation sont maintenant installées"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Les mises à jour récemment installées sont maintenant consultables"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s est maintenant installée"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Un redémarrage est nécessaire pour terminer l’installation."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "L’application est maintenant opérationnelle."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Redémarrer"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Lancer"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Installer le logiciel tiers ?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Activer les dépôts logiciels tiers ?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s n’est pas un <a href=\"https://fr.wikipedia.org/wiki/Free/"
+"Libre_Open_Source_Software\">logiciel libre et ouvert</a> et est distribué "
+"par « %s »."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s est distribué par « %s »."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Ce dépôt de logiciels doit être activé pour continuer l’installation."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Il peut être contraire à la loi d’installer et d’utiliser %s dans certains "
+"pays."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Il peut être contraire à la loi d’installer et d’utiliser ce codec dans "
+"certains pays."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Ne plus m’avertir"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Activer et installer"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Voici les détails des erreurs du gestionnaire de paquets :"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Détails"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Une mise à jour a été installée sur ce système"
+msgstr[1] "Des mises à jour ont été installées sur ce système"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Un redémarrage est nécessaire pour terminer l’installation."
+msgstr[1] "Un redémarrage est nécessaire pour terminer l’installation."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Pas maintenant"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Aucune violence de dessins animés"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personnages de dessins animés en situation de danger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personnages de dessins animés en conflit agressif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Illustration de violences impliquant les personnages de dessins animés"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Pas de violences fantastiques"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Personnages en situations dangereuses franchement irréelles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Personnages en situation de conflit agressif franchement irréel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Illustration violente franchement irréelle"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Aucune violence réaliste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personnages moyennement réalistes en situation dangereuse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Illustrations de personnages réalistes en conflit agressif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Illustrations de violences impliquant des personnages réalistes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Aucun massacre"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Massacre irréaliste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Massacre réaliste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Illustrations d’un massacre et de mutilations corporelles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Aucune violence sexuelle"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Viol ou autre comportement sexuel violent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Aucune allusion à des boissons alcoolisées"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Allusions à des boissons alcoolisées"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Usage de boissons alcoolisées"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Aucune allusion à des stupéfiants illicites"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Allusions à des stupéfiants illicites"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Usage de stupéfiants illicites"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Aucune allusion à des produits dérivés du tabac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Allusions à des produits dérivés du tabac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Usage de produits dérivés du tabac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Aucun nu d’aucune sorte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Nu artistique de courte durée"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "État de nudité prolongée"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Aucune allusion ou image à caractère sexuel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Allusions ou images provocatrices"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Allusions ou images à caractère sexuel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Illustrations de comportements sexuels"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Aucune profanation d’aucune sorte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Utilisation modérée ou occasionnelle d’injures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Utilisation modérée d’injures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Utilisation forte ou fréquente d’injures"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Aucun humour déplacé"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Humour burlesque"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Humour vulgaire ou de caniveau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humour pour adultes ou sexuel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Aucune allusion discriminatoire d’aucune sorte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Attitudes négatives vis à vis de groupes spécifiques de gens"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminations destinées à blesser émotionnellement"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminations explicites basées sur le genre, le sexe, la race ou la "
+"religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Aucune publicité d’aucune sorte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Placement de produits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Allusions explicites à des produits de marque spécifique ou déposée"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Les utilisateurs sont encouragés à acheter des éléments spécifiques du monde "
+"réel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Aucun pari d’aucune sorte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Paris sur des événements aléatoires à l’aide de jetons ou à crédit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Paris avec de la monnaie « fictive »"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Paris avec du vrai argent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Aucune possibilité de dépenser de l’argent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Les utilisateurs sont encouragés à donner de l’argent réel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Possibilité de dépenser du vrai argent dans l’application"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Aucune possibilité de discuter avec les autres utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interactions entre utilisateurs sans possibilité de discussion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Possibilité modérée de discuter entre utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Possibilité de discuter sans contrôle entre utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Aucun moyen de parler avec les autres utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Possibilité de discuter ou se voir sans contrôle entre utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Aucun partage des noms d’utilisateur de réseaux sociaux ou des adresses "
+"courriel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Partage des noms d’utilisateur de réseaux sociaux ou des adresses courriel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Aucun partage des identifiants d’utilisateur avec des tierces parties"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Vérification s’il s’agit de la dernière version de l’application"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Partage des données de diagnostic ne permettant pas l’identification de "
+"l’utilisateur"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Partage d’informations permettant l’identification de l’utilisateur"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Aucun partage de géolocalisation avec les autres utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Partage de géolocalisation avec les autres utilisateurs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Aucune allusion à l’homosexualité"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Allusions indirectes à l’homosexualité"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Étreintes entre personnes d’un même sexe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Images de comportements sexuels entre personnes d’un même sexe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Aucune allusion à la prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Allusions indirectes à la prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Allusions directes à la prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Images d’actes de prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Aucune allusion à l’adultère"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Allusions indirectes à l’adultère"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Allusions directes à l’adultère"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Images d’actes d’adultère"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Représentations humaines à caractère non sexuel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Représentations humaines légèrement vêtues"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Représentations humaines à caractère ouvertement sexuel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Aucune allusion à de la profanation"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Allusions ou images de profanations historiques"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Représentations d’actes de profanation contemporains sur humains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Images d’actes de profanation contemporains sur humains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Aucune image de restes humains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Images de restes humains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Restes humains exposés aux éléments"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Images de profanations sur des corps humains"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Aucune allusion à l’esclavagisme"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Représentations ou allusions à l’esclavagisme historique"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Représentations d’esclavagisme contemporain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Images d’esclavagisme contemporain"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Général"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "TOUS"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Adultes uniquements"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Mature"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescents"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "10 ans et plus"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Tout le monde"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Bas âge"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Une application"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s demande davantage de prise en charge du format du fichier."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Types MIME supplémentaires requis"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s demande davantage de polices."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Polices supplémentaires requises"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s demande davantage de codecs multimédia."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Codecs multimédia supplémentaires requis"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s demande davantage de pilotes d’imprimante."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Pilotes d’imprimante supplémentaires requis"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s demande davantage de paquets logiciels."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Paquets logiciels supplémentaires requis"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Démarrer Logiciels"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Suppression en cours…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Installation en attente…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Mise à jour en attente…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Préparation…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Cette application ne peut être utilisée qu’avec une connexion Internet "
+"active."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installer"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installer…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Lancer"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Supprimer"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Réseau"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Peut communiquer à travers le réseau"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Services système"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Peut accéder à des services DBus sur le bus système"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Services de session"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Peut accéder aux services DBus sur le bus de session"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Périphériques"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Peut accéder aux fichiers du système"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Dossier personnel"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Peut voir, éditer et créer des fichiers"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Peut voir les fichiers"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Système de fichiers"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Dossier de téléchargement"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Paramètres"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Peut voir et modifier n’importe quel paramètre"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Système d’affichage désuet"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Utilise un vieux système d’affichage non sécurisé"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Fuite du bac à sable"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Peut s’échapper du bac à sable et contourner d’autres restrictions"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "L’application s’exécute dans un bac à sable."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Impossible de déterminer à quelle partie du système cette application a "
+"accès. C’est typique des applications anciennes."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Inconnue"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Jamais"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Inconnue"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Basses"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Intermédiaires"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Élevées"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Inconnue"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Un accès à Internet est indispensable pour rédiger une évaluation"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Impossible de trouver « %s »"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domaine public"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://fr.wikipedia.org/wiki/Domaine_public"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Logiciel libre"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Les utilisateurs sont tenus au respect de cette licence :"
+msgstr[1] "Les utilisateurs sont tenus au respect de ces licences :"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Davantage d’informations"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Page des descriptions"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Téléchargement"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Mettre à _jour"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Ajouter un raccourci"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Suppri_mer le raccourci"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Aucune capture d’écran fournie"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Dépôt de logiciels inclus"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Cette application inclut un dépôt de logiciels qui fournit les mises à jour "
+"ainsi que l’accès à d’autres programmes."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Aucun dépôt de logiciels inclus"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Cette application n’inclut aucun dépôt de logiciels. Elle ne sera pas mise à "
+"jour vers de nouvelles versions."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Cette application fait déjà partie de votre distribution et ne devrait pas "
+"être remplacée."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Dépôt de logiciels identifié"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Ajouter ce dépôt de logiciels vous donne accès à des logiciels "
+"supplémentaires ainsi qu’aux mises à niveau."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr ""
+"N’utilisez que les dépôts de logiciels auxquelles vous faites confiance."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Site _Web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "Faire un _don"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Traduit dans votre langue"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentation"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Activité de publication"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Intégration avec le système"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Dans un bac à sable"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canaux"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Évaluation par âge"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permissions"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Mis à jour"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Catégorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Taille installée"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Taille du téléchargement"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Développeur"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licence"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Libre"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Propriétaire"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Extensions"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Les extensions sélectionnées vont être installées avec l’application."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Évaluations"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Rédiger une évaluation"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Afficher davantage"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Cela signifie que le logiciel peut être librement utilisé, copié, distribué, "
+"étudié et modifié."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Logiciel propriétaire"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Cela signifie que le logiciel est la propriété d’une personne physique ou "
+"morale. Son utilisation est le plus souvent restreinte et son code source "
+"habituellement inaccessible."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licence du logiciel inconnue"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Les termes de la licence de ce logiciel sont inconnus."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "L’application a été évaluée ainsi car elle représente :"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Aucune information n’est disponible pour cette évaluation."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " et "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Polices disponibles pour le script %s"
+msgstr[1] "Polices disponibles pour les scripts %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Logiciel disponible pour %s"
+msgstr[1] "Logiciels disponibles pour %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Impossible de trouver le logiciel demandé"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s sont introuvables"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "sur le site Web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Aucune application disponible pour fournir le fichier %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Des informations sur %s, ainsi que des options sur la façon d’obtenir les "
+"applications manquantes sont disponibles sur %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Aucune application disponible pour prendre en charge %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s est indisponible."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Des informations sur %s, ainsi que des options sur la façon d’obtenir une "
+"application susceptible de prendre en charge ce format sont disponibles sur "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Aucune police n’est disponible pour la prise en charge du script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Des informations sur %s, ainsi que des options sur la façon d’obtenir des "
+"polices supplémentaires sont disponibles sur %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Aucun codec au format %s n’est disponible pour l’extension."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Des informations sur %s, ainsi que des options sur la façon d’obtenir un "
+"codec susceptible de lire ce format sont disponibles sur %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+"Aucune ressource pour plasma n’est disponible pour prendre en charge %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Des informations sur %s, ainsi que des options sur la façon d’obtenir des "
+"ressources supplémentaires pour plasma sont disponibles sur %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Aucun pilote d’imprimante n’est disponible pour %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Des informations sur %s, ainsi que des options sur la façon d’obtenir un "
+"pilote susceptible de prendre en charge cette imprimante sont disponibles "
+"sur %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "ce site Web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Malheureusement, le %s que vous recherchez est introuvable. Veuillez "
+"consulter %s pour de plus amples informations."
+msgstr[1] ""
+"Malheureusement, les %s que vous recherchez sont introuvables. Veuillez "
+"consulter %s pour de plus amples informations."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Échec de la recherche, aucun résultat"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Format de fichier %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Page des Codecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Bienvenue"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Bienvenue dans Logiciels"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Logiciels vous permet d’installer toutes les applications dont vous avez "
+"besoin à partir d’un seul endroit. Consultez nos recommandations, les "
+"catégories, ou recherchez les applications qui vous intéressent."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Allons faire nos courses"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Supprimée"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installée"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Mise à jour"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Inconnu"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historique"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Applications système"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Page installée"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Téléchargement du catalogue de logiciels en cours"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Chargement de la page"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Démarrage…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Le réseau actuel est un réseau avec quotas. Les connexions avec quotas sont "
+"assorties de limites de données ou de frais. Afin d’économiser les données, "
+"les mises à jour automatiques ont été mises en pause.\n"
+"\n"
+"Les mises à jour automatiques reprendront dès qu’un réseau sans quotas sera "
+"disponible. Néanmoins, il est toujours possible d’installer manuellement les "
+"mises à jour.\n"
+"\n"
+"Si le réseau actuel a été incorrectement identifié comme étant avec quotas, "
+"il est possible de modifier ce paramètre."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Ouvrir les _paramètres réseau"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Page des modérations"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Il n’y a pas d’évaluation a modérer"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "système"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "utilisateur"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Branche"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installation"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Davantage…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Applications audio et vidéo recommandées"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Jeux recommandés"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Applications de dessin recommandées"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Applications de bureautique recommandées"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Accéder à plus de logiciels à partir de sources tierces."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Certains de ces logiciels sont propriétaires et comportent des restrictions "
+"concernant l’utilisation, le partage et l’accès au code source."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "En savoir plus…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Activer"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Page d’aperçu"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Activer les dépôts logiciels tiers ?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Précédent"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Suivant"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Sélection de la distribution"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Versions récentes"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Catégories"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Aucune donnée de l’application trouvée"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Préparation de %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Toutes les applications de %s vont être supprimées et il vous faudra la "
+"réinstaller pour pouvoir utiliser ces logiciels à nouveau."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Voulez-vous vraiment supprimer %s ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s va être supprimée et il vous faudra la réinstaller pour pouvoir "
+"l’utiliser à nouveau."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (installée)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Préférences de mise à jour"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Mises à jour automatiques"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Les mises à jour automatiques sont désactivées sur les connexions mobiles ou "
+"avec quotas."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notifications de mise à jour automatique"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Afficher des notifications lorsque des mises à jour ont été installées "
+"automatiquement."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Certains logiciels actuellement installés sont incompatibles avec %s. Si "
+"vous continuez, ceux listés ci-dessous seront automatiquement supprimés "
+"pendant la mise à niveau :"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Logiciels incompatibles"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continuer"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u application installée"
+msgstr[1] "%u applications installées"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u extension installée"
+msgstr[1] "%u extensions installées"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u application"
+msgstr[1] "%u applications"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u extension"
+msgstr[1] "%u extensions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s et %s installée"
+msgstr[1] "%s et %s installées"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Supprimer « %s » ?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Désactiver « %s » ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Les logiciels installés depuis ce dépôt n’auront plus aucune mise à jour y "
+"compris de sécurité."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Désactiver"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "le système d’exploitation"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Ces dépôts complètent les logiciels par défaut fournis par %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Dépôts tiers"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Aucun dépôt supplémentaire"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Activer"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Supprimer…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Désactiver…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Activation"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Désactivation"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Activé"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Désactivé"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Détestable"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Passable"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Acceptable"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Bonne"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Excellente"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Veuillez consacrer plus de temps à la rédaction de l’appréciation"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Veuillez choisir une appréciation"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Le résumé est trop court"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Le résumé est trop long"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "La description est trop courte"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "La description est trop longue"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Envoyer l’appréciation"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Envoyer"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Résumé"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Donnez un bref résumé de votre appréciation, comme : « Application géniale, "
+"je recommande »."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Appréciation"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Que pensez-vous de l’application ? Argumentez vos motifs."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Vous trouverez la liste des données transmises dans notre <a href=\"https://"
+"odrs.gnome.org/privacy\">politique de confidentialité</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "total des évaluations"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Vous pouvez signaler les appréciations abusives, insultantes, ou "
+"discriminantes."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Une fois envoyée, l’appréciation sera masquée jusqu’à ce que celle-ci ait "
+"été vérifiée par un administrateur."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Signaler l’appréciation ?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Signaler"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Est-ce que cette appréciation vous a été utile ?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Oui"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Non"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Bof"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Signaler…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Supprimer…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Capture d’écran introuvable"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Échec de chargement de l’image"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Taille de capture d’écran introuvable"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Impossible de créer le cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Capture d’écran non valide"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Capture d’écran indisponible"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Capture d’écran"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "plus %u correspondance"
+msgstr[1] "plus %u correspondances"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Page de recherche"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Aucune application trouvée"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "« %s »"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Impossible de télécharger les mises à jour du micrologiciel depuis %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Impossible de télécharger les mises à jour depuis %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Impossible de télécharger les mises à jour"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Impossible de télécharger les mises à jour : accès à Internet nécessaire "
+"mais indisponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Impossible de télécharger les mises à jour depuis %s : espace disque "
+"insuffisant"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Impossible de télécharger les mises à jour : espace disque insuffisant"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Impossible de télécharger les mises à jour : authentification requise"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+"Impossible de télécharger les mises à jour : authentification non valide"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Impossible de télécharger les mises à jour : vous n’avez pas la permission "
+"d’installer des logiciels"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Impossible d’obtenir la liste des mises à jour"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Impossible d’installer %s : le téléchargement depuis %s a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Impossible d’installer %s : le téléchargement a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Impossible d’installer %s : l’environnement d’exécution %s n’est pas "
+"disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Impossible d’installer %s : il n’est pas pris en charge"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Installation impossible : l’accès à Internet est nécessaire mais indisponible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Installation impossible : le format de l’application n’est pas valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Impossible d’installer %s : il n’y a pas assez d’espace disque"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Impossible d’installer %s : authentification requise"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Impossible d’installer %s : authentification non valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Impossible d’installer %s : vous n’avez pas la permission d’installer des "
+"logiciels"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Impossible d’installer %s : branchez l’alimentation secteur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Impossible d’installer %s : la batterie est trop peu chargée"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Impossible d’installer %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Impossible de mettre à jour %s depuis %s, car le téléchargement a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Impossible de mettre à jour %s : le téléchargement a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Impossible d’installer les mises à jour depuis %s, car le téléchargement a "
+"échoué"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"Impossible d’installer les mises à jour, car le téléchargement a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Impossible de mettre à jour : l’accès à Internet est nécessaire mais "
+"indisponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Impossible de mettre à jour %s : il n’y a pas assez d’espace disque"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Impossible d’installer les mises à jour : espace disque insuffisant"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Impossible de mettre à jour %s : authentification requise"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+"Impossible d’installer les mises à jour : une authentification était requise"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Impossible de mettre à jour %s : authentification non valide"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Impossible d’installer les mises à jour : l’authentification n’était pas "
+"valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Impossible de mettre à jour %s : vous n’avez pas la permission de mettre à "
+"jour les logiciels"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Impossible d’installer les mises à jour : vous n’avez pas la permission de "
+"mettre à jour les logiciels"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Impossible de mettre à jour %s : branchez l’alimentation secteur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Impossible d’installer les mises à jour : branchez l’alimentation secteur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Impossible de mettre à jour %s : la batterie est trop peu chargée"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Impossible d’installer les mises à jour : la batterie est trop peu chargée"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Impossible de mettre à jour %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Impossible d’installer les mises à jour"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Impossible de mettre à niveau vers %s depuis %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Impossible de mettre à niveau vers %s : le téléchargement a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Impossible de mettre à niveau vers %s : l’accès à Internet était nécessaire "
+"mais n’était pas disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Impossible de mettre à niveau vers %s : espace disque insuffisant"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Impossible de mettre à niveau vers %s : authentification requise"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Impossible de mettre à niveau vers %s : authentification non valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Impossible de mettre à niveau vers %s : vous n’avez pas la permission "
+"d’effectuer la mise à niveau"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Impossible de mettre à niveau vers %s : branchez l’alimentation secteur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Impossible de mettre à niveau vers %s : la batterie est trop peu chargée"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Impossible de mettre à niveau vers %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Impossible de désinstaller %s : authentification requise"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Impossible de désinstaller %s : authentification non valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Impossible de désinstaller %s : vous n’avez pas la permission de "
+"désinstaller le logiciel"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Impossible de désinstaller %s : branchez l’alimentation secteur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Impossible de désinstaller %s : la batterie est trop peu chargée"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Impossible de désinstaller %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Impossible de lancer %s : %s n’est pas installé"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Espace disque insuffisant — veuillez en libérer et réessayez"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Désolé, quelque chose n’a pas marché"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Impossible d’installer le fichier : il n’est pas pris en charge"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Impossible d’installer le fichier : l’authentification a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Impossible d’installer : non pris en charge"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Impossible d’installer : l’authentification a échoué"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Impossible de contacter %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s doit être redémarré pour utiliser les nouveaux greffons."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Cette application doit être redémarrée pour utiliser les nouveaux greffons."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Branchez l’alimentation secteur"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "La batterie est trop peu chargée"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Source : %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (installation en cours)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (suppression en cours)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Tout supprimer"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Aucune description de la mise à jour n’a été fournie."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installées le %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Mises à jour installées"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Ajouts"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Suppressions"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Mises à jour"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Dégradations"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Aucune mise à jour n’a été installée sur ce système."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Mises à jour de sécurité en attente"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Il est recommandé d’installer les mises à jour importantes maintenant"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Redémarrer et installer"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Des mises à jour logicielles sont disponibles"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"D’importantes mises à jour du système d’exploitation et des applications "
+"sont prêtes à être installées"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Afficher"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u application mise à jour — Redémarrage requis"
+msgstr[1] "%u applications mises à jour — Redémarrage requis"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u application mise à jour"
+msgstr[1] "%u applications mises à jour"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s a été mise à jour."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Veuillez redémarrer l’application."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s et %s ont été mises à jour."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u application nécessite un redémarrage."
+msgstr[1] "%u applications nécessitent un redémarrage."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inclut %s, %s et %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Les mises à jour du système d’exploitation sont indisponibles"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Mettez à niveau pour continuer à bénéficier des mises à jour de sécurité."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Une nouvelle version de %s est disponible à l’installation"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Des mises à niveau logicielles sont disponibles"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Échec des mises à jour logicielles"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"Échec d’installation d’une importante mise à jour du système d’exploitation."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Afficher les détails"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Mise à niveau système terminée"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Bienvenue dans %s %s !"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Mise à jour logicielle installée"
+msgstr[1] "Mises à jour logicielles installées"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+"Une importante mise à jour du système d’exploitation a été installée."
+msgstr[1] ""
+"D’importantes mises à jour du système d’exploitation ont été installées."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Consulter"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Échec de mise à jour"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Le système était déjà à jour."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "La mise à jour a été annulée."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"L’accès à Internet est nécessaire mais n’est pas disponible. Assurez-vous "
+"d’avoir un accès à Internet puis réessayez."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Il y a eu un problème de sécurité avec la mise à jour. Veuillez consulter "
+"votre fournisseur de logiciels pour plus d’informations."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Il n’y avait pas assez d’espace disque. Veuillez en libérer et réessayez."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Nous sommes désolés : l’installation de la mise à jour à échoué. Veuillez "
+"attendre la prochaine mise à jour et réessayer. Si le problème persiste, "
+"contactez le fournisseur du logiciel."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Hier, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Hier, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Il y a deux jours"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Il y a trois jours"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Il y a quatre jours"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Il y a cinq jours"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Il y a six jours"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Il y a une semaine"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Il y a deux semaines"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Recherche de nouvelles mises à jour…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Mise en place des mises à jour en cours…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Cela peut prendre du temps)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Dernière vérification : %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s n’est plus pris en charge."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Votre système d’exploitation n’est plus pris en charge."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Cela signifie qu’il ne reçoit plus de mises à jour de sécurité."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Il est recommandé de mettre à niveau vers une version plus récente."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Il peut y avoir facturation"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Rechercher des mises à jour avec votre connexion mobile peut faire l’objet "
+"d’une facturation."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Rechercher quand même"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Aucun réseau"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "L’accès à Internet est nécessaire pour rechercher des mises à jour."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Vérification…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Rechercher des mises à jour"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Page des mises à jour"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Le logiciel est à jour"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Rechercher des mises à jour avec votre téléphone portable peut vous être "
+"facturé"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Rechercher tout de même"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Se connecter pour rechercher des mises à jour"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Paramètres du _réseau"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Les mises à jour sont gérées automatiquement"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Redémarrer et mettre à jour"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Tout mettre à jour"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Micrologiciel intégré"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Redémarrage nécessaire"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Mises à jour de l’application"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Micrologiciel du périphérique"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Télécharger"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Il est recommandé de sauvegarder vos données et fichiers avant la mise à "
+"niveau."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Redémarrer maintenant"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Les mises à jour seront appliquées une fois l’ordinateur redémarré."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s est maintenant disponible"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "En attente du téléchargement de %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Téléchargement de %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s est prête à être installée"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+"Une mise à niveau majeure, avec de nouvelles fonctionnalités et plus belle."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_En savoir plus"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+"Ajouter, supprimer ou mettre à jour des applications sur cet ordinateur"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"mises à jour;mise à niveau;sources;dépôts;préférences;installer;désinstaller;"
+"programmes;logiciels;applications;magasin;boutique;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Créations et modifications audio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Lecteurs de musique"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Débogueurs"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "EDI"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Intelligence artificielle"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomie"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chimie"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Langues"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Mathématiques"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotique"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventure"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocs"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Plateau"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartes"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Émulateurs"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Enfants"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logique"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Jeux de rôle"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sports"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Stratégie"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Graphisme en 3 dimensions"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Photographie"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scan"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Dessin vectoriel"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visionneurs"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Agenda"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base de données"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finance"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Traitement de texte"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Polices"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Sources de saisie"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Prise en charge linguistique"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Régionalisation"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Pilotes matériel"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Discussion"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nouvelles"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navigateurs Web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Éditeurs de texte"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tout"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "En vedette"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biographie"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Bandes dessinées"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiction"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Santé"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Histoire"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Style de vie"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politique"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sports"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio et vidéo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Outils de développement"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Éducation et sciences"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Jeux"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Graphismes et photographie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Bureautique"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Communication et nouvelles"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Référence"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilitaires"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Mises à jour du système d’exploitation"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"Elles incluent des améliorations de performances, de stabilité et de "
+"sécurité."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Téléchargement des images en vedette…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Une mise à jour d’Endless OS, avec de nouvelles fonctionnalités et "
+"corrections."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Le service de mise à jour d’Endless OS n’a pas pu récupérer et appliquer la "
+"mise à niveau."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+"Outil d’installation AppStream sur l’ensemble du système de Logiciels de "
+"GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Impossible d’analyser les arguments en ligne de commande"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Vous devez spécifier exactement un nom de fichier"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Ce logiciel ne peut être utilisé que par l’utilisateur root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Impossible de valider le type du contenu"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Impossible de copier"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Téléchargement de nouveaux fichiers de métadonnées…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Téléchargement des informations de mise à niveau…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Mise à niveau pour les dernières fonctionnalités et améliorations de "
+"stabilité et de performances."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Prise en charge de Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak est une structure pour les applications de bureau sous Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Téléchargement des métadonnées de Flatpak pour %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Mise à jour du périphérique « %s »"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Mise à jour système « %s »"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Mise à jour du contrôleur embarqué « %s »"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Mise à jour du système de gestion (« ME ») de %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Mise à jour du système de gestion pour entreprises de « %s »"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Mise à jour du système de gestion pour le grand public de « %s »"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Mise à jour du contrôleur « %s »"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Mise à jour du contrôleur Thunderbolt « %s »"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Mise à jour du microcode du processeur %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Mise à jour de « %s »"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Téléchargement de la signature de la mise à jour du micrologiciel…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Téléchargement des métadonnées de mise à jour du micrologiciel…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Prise en charge de la mise à niveau du micrologiciel"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Fournit la prise en charge des mises à niveau du micrologiciel"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Téléchargement des appréciations sur l’application…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Prise en charge d’Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS est un service qui met à disposition les appréciations d’utilisateurs "
+"sur des applications"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Boutique des snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Prise en charge de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un snap est un paquet Linux universel"
+
+#~ msgid "About %s"
+#~ msgstr "À propos de %s"
+
+#~ msgid "%s ME"
+#~ msgstr "Système de gestion « %s »"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Affiche l’interface utilisateur de gestion des dossiers"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nom du dossier"
+
+#~ msgid "_Add"
+#~ msgstr "_Ajouter"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Ajouter au dossier Applications"
+
+#~ msgid "Top Rated"
+#~ msgstr "Les mieux notées"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Paramètres des extensions"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Les extensions sont à utiliser à vos propres risques. Si vous constatez "
+#~ "des problèmes système, il est recommandé de les désactiver."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Échec de chargement de composants"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "Le CSS a été validé conforme !"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Échec de chargement du fichier"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Modifications non enregistrées"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "La liste d’applications est déjà chargée."
+
+#~ msgid "Merge documents"
+#~ msgstr "Fusionner les documents"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Abandonner les modifications"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Ouvrir le fichier AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Ouvrir"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Enregistrer le fichier AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Enregistrer"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Échec d’enregistrement du fichier"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Le dessin de la bannière de %s est supprimé."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Le dessin de la bannière est supprimé."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr ""
+#~ "La liste d’applications comporte des modifications non enregistrées."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Afficher les informations détaillées de débogage"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Concepteur de la bannière « Logiciels de GNOME »"
+
+#~ msgid "No Designs"
+#~ msgstr "Aucun dessin"
+
+#~ msgid "Error message here"
+#~ msgstr "Message d’erreur ici"
+
+#~ msgid "App ID"
+#~ msgstr "Identifiant de l’application"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Sélection de la distribution"
+
+#~ msgid "Category Featured"
+#~ msgstr "Mise en avant de la catégorie"
+
+#~ msgid "Undo"
+#~ msgstr "Annuler"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Concepteur de la bannière"
+
+#~ msgid "New Banner"
+#~ msgstr "Nouvelle bannière"
+
+#~ msgid "Import from file"
+#~ msgstr "Importer depuis le fichier"
+
+#~ msgid "Export to file"
+#~ msgstr "Exporter vers le fichier"
+
+#~ msgid "Delete Design"
+#~ msgstr "Supprimer le dessin"
+
+#~ msgid "Featured App"
+#~ msgstr "Application mise en avant"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Mises à niveau du système d’exploitation"
+
+#~ msgid "Spacing"
+#~ msgstr "Espacement"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "L’espacement entre éléments enfants"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Cliquez sur les éléments pour les sélectionner"
+
+#~ msgid "Select"
+#~ msgstr "Sélectionner"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Ajouter au dossier…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Déplacer vers le dossier…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Supprimer du dossier"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Applications mises en avant"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Concevoir les bannières mises en avant pour Logiciels de GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Logiciels;Applications;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensions Shell"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Prise en charge d’applications Web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Exécuter des applications Web connues dans un navigateur"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Dépôt d’extensions GNOME Shell"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Téléchargement des métadonnées de l’extension shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Extensions GNOME Shell"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Tout"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "S’identifier / S’enregistrer"
+
+#~ msgid "Continue"
+#~ msgstr "Continuer"
+
+#~ msgid "Use"
+#~ msgstr "Utiliser"
+
+#~ msgid "Add another…"
+#~ msgstr "Ajouter un autre…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Chargement du catalogue de logiciels en cours"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Voulez-vous vraiment acheter %s ?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s va être installé et vous allez être facturé %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Acheter"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Connecté en tant que %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Connexion…"
+
+#~ msgid "Sign out"
+#~ msgstr "Se déconnecter"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Impossible d’acheter %s : authentification requise"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Impossible d’acheter %s : authentification non valide"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr ""
+#~ "Impossible d’acheter %s : aucune méthode de paiement n’est configurée"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Impossible d’acheter %s : le paiement a été refusé"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Impossible d’acheter %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Vous devez vous utiliser un compte Ubuntu One pour continuer."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Vous devez utiliser votre compte Ubuntu One pour continuer."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Vous devez vous authentifier auprès de %s pour continuer."
+
+#~ msgid "Email address"
+#~ msgstr "Adresse de courriel"
+
+#~ msgid "I have an account already"
+#~ msgstr "J’ai déjà un compte"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Je souhaite enregistrer un compte maintenant"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "J’ai oublié mon mot de passe"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "M’authentifier automatiquement la prochaine fois"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Saisir votre code personnel d’authentification à usage unique."
+
+#~ msgid "PIN"
+#~ msgstr "Code personnel"
+
+#~ msgid "Authenticate"
+#~ msgstr "M’authentifier"
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Votre compte %s est suspendu."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Il est impossible d’installer des logiciels tant que cela n’est pas "
+#~ "résolu."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Il y a davantage d’informations ici : %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Impossible de mettre à jour %s depuis %s"
+
+#~ msgid "_About"
+#~ msgstr "À _propos"
+
+#~ msgid "_Quit"
+#~ msgstr "_Quitter"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Des informations sur %s, ainsi que des possibilités d’obtention d’un "
+#~ "codec capable de diffuser ce format sont disponibles sur le site Web."
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Téléchargement de la page de l’application…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Prise en charge de Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "La dernière plate-forme de divertissement de Valve"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Afficher les informations de profilage du service"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Téléchargement de nouvelles mises à jour…"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Applications mises à jour"
+
+#~ msgid "Includes: ."
+#~ msgstr "Cela inclut : ."
diff --git a/po/fur.po b/po/fur.po
new file mode 100644
index 0000000..4782799
--- /dev/null
+++ b/po/fur.po
@@ -0,0 +1,5609 @@
+# Friulian translation for gnome-software.
+# Copyright (C) 2016 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Fabio Tomat <f.t.public@gmail.com>, 2016, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software gnome-3-20\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-11 17:05+0200\n"
+"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <f.t.public@gmail.com>\n"
+"Language: fur\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Software di GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gjestôr di aplicazions par GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software al permet di cjatâ e instalâ gnovis aplicazions e estensions di "
+"sisteme e gjavâ aplicazions esistentis."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software al met in evidence te bacheche lis aplicazions popolârs cun "
+"descrizions utilis e tantis videadis par ogni aplicazion. Lis aplicazions a "
+"puedin jessi cjatadis sedial esplorant la liste des categoriis sedial "
+"doprant la ricercje. Al permet ancje di inzornâ il sisteme doprant un "
+"inzornament fûr rêt."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel di panoramiche"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel di detais"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel instalâts"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel inzornaments"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "I detais dal inzornament"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "Il progjet GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalâ un file “appstream” intune posizion dal sisteme"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Daûr a instalâ un file “appstream” intune posizion dal sisteme"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Une liste di progjets compatibii"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Cheste e je une liste di progjets compatibii che si varessin di mostrâ, come "
+"GNOME, KDE e XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Indiche se gjestî i inzornaments e i avanzaments in GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Se disabilitât, GNOME Software al platarà il panel dai inzornaments, nol "
+"metarà in vore nissune azion di inzornament automatic e nol domandarà di "
+"inzornâ."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Discjarie e instale in automatic i inzornaments"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Se abilitât, GNOME Software al discjarie in automatic i inzornaments "
+"software in sotfont, e ancje al instale chei che no àn bisugne che si torni "
+"a inviâ il sisteme."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notifiche l'utent sul software inzornât in sotfont"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Se abilitât, GNOME Software al notifiche l'utent sui inzornaments fats "
+"intant che l'utent al jere inatîf."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Indiche se tignî inzornât in automatic cuant che si è suntune conession a "
+"consum"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Se abilitât, GNOME Software si tignarà inzornât in automatic par daûr ancje "
+"se si dopre une conession a consum (finint duncje par discjariâ cualchi meta-"
+"dât, controlâ la presince di inzornaments e vie indenant, chest al pues "
+"duncje puartâ a spesis pal utent)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Indiche se e je la prime volte che si eseguìs GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostre lis stelutis di valutazion in bande des aplicazions"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtre aplicazions basadis sul ram predefinît pal rimot"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Prime di instalâlis, lis aplicazions no libaris a mostraran un dialic di "
+"avertiment"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Cuant che lis aplicazions no libaris a vegnin instalâts un dialic di "
+"avertiment al pues jessi mostrât. Chest al verifiche se chel barcon al è "
+"soprès."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Une liste di aplicazions popolârs"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Une liste di aplicazions di doprâ, passant parsore a chês definidis di "
+"sisteme."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "La date dal control dal ultin inzornament"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "La date de ultime notifiche di avanzament"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "La date dal prin inzornament di sigurece, netât dopo l'inzornament"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "La date dal ultin inzornament"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"La ultime date/ore che il sisteme al jere in rêt e si à vût cualsisei "
+"inzornament"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"La etât in seconts par verificâ che la cature di schermi da cjâf e sedi "
+"ancjemò valide"
+
+# rount-trips -> andis e riandis -> ??
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Sielzint un valôr plui larc al significhe vê mancul andis e riandis al "
+"servidôr rimot ma ancje che i inzornaments aes caturis di schermi a duraran "
+"di plui, prime di jessi mostrâts al utent. Un valôr di 0 al significhe che "
+"il servidôr nol à mai di controlâ se la imagjin e esist in te memorie cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Il servidôr di doprâ pes recensions des aplicazions"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "I ponts minims di karma pes recensions"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Recensions cun karma inferiôr a chest numar no vegnaran mostradis."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Une liste di dipuesits uficiâi che no varessin di jessi considerâts di "
+"tiercis parts"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Une liste di dipuesits uficiâi che a varessin di jessi considerâts software "
+"libar"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Il URL di licence di doprâ cuant che une aplicazion e varès di jessi "
+"considerade software libar"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instale i pachets di aplicazions par ducj i utents dal sisteme, dulà che al "
+"è pussibil"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permet l'acès al dialic dai dipuesits software"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ufrìs avanzaments par distribuzions preliminaris"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostre cualchi element te IU par informâ l'utent che une aplicazion no je "
+"libare"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Mostre la domande par instalâ i dipuesits software no libars"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostre la dimension instalade pes apps inte liste des aplicazions instaladis"
+
+# fâ pagjine par software proprietari su vikipedie
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://it.wikipedia.org/wiki/Software_proprietario'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Il URI che al spieghe il software proprietari e no libar"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Une liste di file che a pontin a file “appstream” che a vignaran discjariâts "
+"intune cartele di informazion de aplicazion"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instale i file “AppStream” suntune posizion a nivel di sisteme par ducj i "
+"utents"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Abilite il dipuesit des estensions di GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Une stringhe che e memorize il ID par jentrâ tal account online di gnome"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instale software"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instale il software selezionât tal sisteme"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Selezione dut"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Nissune selezion"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Dipuesits _software"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Preferencis di _inzornament"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Torne indaûr"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Esplore"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalât"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Inzornaments"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Ricercje"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Sorzint"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Dipuesits software"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Esamine disc"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Impostazions di rêt"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Torne invie cumò"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Plui informazions"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Inzornaments automatics in pause"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Par savê di _plui"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "File locâl"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pachet"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "In spiete"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalât"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalazion"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Rimozion"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Modalitât di inviament: al pues jessi ‘updates’, ‘updated’, ‘installed’ o "
+"‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODALITÂT"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Cîr aplicazions"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "CÎR"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostre detais aplicazions (doprant l'ID de aplicazion)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostre detais aplicazions (doprant il non dal pachet)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NONPACHET"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instale la aplicazion (doprant il ID de aplicazion)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Vierç un file di pachet locâl"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NONFILE"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Il gjenar di interazion spietade par cheste azion: sedi ‘none’, ‘notify’, o "
+"‘full’"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostre informazion detaiadis di debug"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Al instale in sotfont cualsisei inzornament in spiete"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostre lis preferencis di inzornament"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Jes de istance in esecuzion"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferìs lis sorzints di file locâi par AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostre il numar di version"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Fabio Tomat <f.t.public@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Informazions su Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Un biel mût di ministrâ il software sul sisteme."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Scuse! No son detais par cheste la aplicazion."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visite il sît web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instale…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Anule"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instale"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Inzorne"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Gjave"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Il dispositîf nol pues jessi doprât intant che si inzorne."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Al à bisugne di permès adizionâi"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Acès rimot par %s domandât (ream %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Acès necessari"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Anule"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Jentre"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Utent"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Password"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Altri"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Dutis"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "In risalt"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "In risalt par %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Valutazion"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Non"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostre"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menù filtrament sot-categoriis"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordene"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menù ordenament sot-categoriis"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Inserìs un numar di 1 a %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Sielç une aplicazion:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "I inzornaments dal SO cumò a son instalâts"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"I inzornaments instalâts cumò denant a son disponibii par jessi esaminâts"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s al è cumò instalât"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Al è necessari tornâ a inviâ par rindi efetivis lis modifichis."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "La aplicazion e je pronte par jessi doprade."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Torne invie"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Eseguìs"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalâ software di tiercis parts?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Abilitâ il dipuesit software di tiercis parts?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nol è <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\"> software libar e open source</a> e al è furnît di “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s al è furnît di “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Chest dipuesit software al scugne jessi abilitât par continuâ la instalazion."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Al podarès jessi ilegâl instalâ o doprâ %s in cualchi paîs."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Al podarès jessi ilegâl instalâ o doprâ chest codec in cualchi paîs."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "No sta visâmi plui"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Abilite e instale"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Chi daspò i erôrs in detai dal gjestôr dai pachets:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detais"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Al è stât instalât un inzornament"
+msgstr[1] "I inzornaments a son stâts instalâts"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Al è necessari tornâ a inviâ par rindilu efetîf."
+msgstr[1] "Al è necessari tornâ a inviâ par rindiju efetîfs."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "No cumò"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Nissune violence dai cartons animâts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personaçs di cartons animâts in situazions pericolosis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personaçs di cartons animâts in conflit violent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafiche di violence che e cjape dentri personaçs di cartons animâts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Nissune violence fantasy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Personaçs in situazions pericolosis facilis di distingui de realtât"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Personaçs in conflit violent facil di distingui de realtât"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafiche di violence facil di distingui de realtât"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Nissune violence realistiche"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personaçs un pôc realistics in situazions pericolosis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Figuris di personaçs realistics in conflit violent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafiche di violence che e cjape dentri personaçs realistics"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Nissun maçament"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Maçaments no realistics"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Maçaments realistics"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Figuris di sassinaments e mutilazions di tocs di cuarp"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Nissune violence sessuâl"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Stupri o altris compuartaments sessuâi violents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Nissun riferiment a bevandis alcolichis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Riferiments a bevandis alcolichis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Ûs di bevandis alcolichis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Nissun riferiment a droghis ilecitis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Riferiments a droghis ilecitis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Ûs ilecit di droghis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Nissun riferiment a prodots derivâts dal tabac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Riferiments a tabacs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Ûs di tabacs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Nissune crotarie di cualsisei gjenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Curte crotarie artistiche"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Crotarie sprolungjade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Nissun riferiment a o rafigurazions di nature sessuâl"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Figuris o riferiments provocants"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Riferiments o figuris sessuâi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafiche di compuartaments sessuâi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Nissune blasfemie di cualsisei gjenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Ûs lizêr o no frecuent di profanitâts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Ûs moderât di blasfemie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Ûs frecuent e fuart di blasfemie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Nissun umorisim sconvenient"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Umorisim di comedie grese"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Umorisim volgâr o di cesso"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Umorisim soç o par grancj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Nissun lengaç discriminatori di cualsisei gjenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativitât viers un specific grup di personis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminazion pensade par fâ mâl emotivamentri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminazion esplicite basade su gjenar, sessualitât, raze o religjon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Nissune publicitât di cualsisei gjenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Vendite di prodots"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Riferiments esplicits a marcjis specifichis o prodots firmâts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "I utents a son incitâts a comprâ ogjets reâi specifics"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Nissun zûc di azart di cualsisei gjenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Zûc di azart su events casuâi che al dopre gjetons o credits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Zûc di azart che al dopre bêçs “dal zûc”"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Zûc di azart che al dopre bêçs vêrs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Nissune pussibilitât di spindi bêçs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "I utents a son incitâts a donâ bêçs vêrs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Abilitât di spindi bêçs vêrs inte aplicazion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Nissune maniere par chatâ cun altris utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interazions tra utents cence funzionalitât di chat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funzionalitât no controllade di chat tra utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funzionalitât no controllade di chat tra utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Nissune maniere par cjacarâ cun altris utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Funzionalitât no controllade di chat video o audio tra utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Nissune condivision di nons utent di social network o direzions e-mail"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Condivision di nons utent di social network o direzions e-mail"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Nissune condivision di informazions dal utent cun tiercis parts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Control pe ultime version de aplicazion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Condivision di dâts diagnostics che no permetin a altris di identificâ "
+"l'utent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Condivision di dâts diagnostics che a permetin a altris di identificâ l'utent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Nissune condivision di posizion fisiche cun altris utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Condivision posizion fisiche cun altris utents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Nissun riferiment a omosessualitât"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Riferiments indirets ae omosessualitât"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Bussadis tra personis dal stes ses"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Compuartament sessuâl grafic tra personis dal stes ses"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Nissun riferiment a prostituzion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Riferiments indirets ae prostituzion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Riferiments direts ae prostituzion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Rapresentazions grafichis dal at di prostituzion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Nissun riferiment a adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Riferiments indirets al adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Riferiment direts al adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Rapresentazions grafichis dal at di adulteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Nissun personaç sessuât"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Personaçs umans pôc vistîts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Personaçs umans sessuâts in maniere anomale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Nissun riferiment a profanazion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Rapresentazions o riferiments a profanazions storichis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Rapresentazion di profanazion umane moderne"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Rapresentazions grafichis di profanazion moderne"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Nissun rest visibil di oms muarts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Rescj di oms muarts visibii"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Rescj di oms muarts che a son esposcj ai elements"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Rapresentazions grafichis di profanazion di cuarps umans"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Nissun riferiment a sclavitût"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Rapresentazions o riferiments a sclavitût storiche"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Rapresentazions de sclavitût moderne"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Rapresentazions grafichis de sclavitût moderne"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Gjenerâl"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "DUCJ"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Dome grancj"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Madûr"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Fantat"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Ducj parsore dai 10"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Ducj"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Prime infanzie"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Une aplicazion"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s al domande supuart pal formât di file adizionâl."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Gjenar di MIME adizionâi domandâts"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s al domande caratars in plui."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Caratars in plui domandâts"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s al domande codec multimediâi in plui."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Codec multimediâi in plui domandâts"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s al domande driver di stampant adizionâi."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Driver di stampant adizionâi domandâts"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s al domande pachets in plui."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Pachets adizionâi domandâts"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Cjate in Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Daûr a gjavâ…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "In spiete pe instalazion…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "In spiete pal inzornament…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Daûr a prontâ…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Cheste aplicazion e pues jessi doprade nome cuant che e je ative une "
+"conession internet."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instale"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instale…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Invie"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Gjave"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Rêt"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Al pues comunicâ vie rêt"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Servizis di sisteme"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Al pues acedi ai servizis D-Bus sul bus di sisteme"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Servizis di session"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Al pues acedi ai servizis D-Bus sul bus de session"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositîfs"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Al pues acedi ai file dal dispositîf dal sisteme"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Cartele cjase"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Al pues viodi, modificâ e creâ i file"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Al pues viodi i file"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "File System"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Cartele dai discjariaments"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Impostazions"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Al pues viodi e modificâ cualsisei impostazion"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sisteme di visualizazion vecje maniere"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Al dopre un sisteme di visualizazion vieli e no sigûr"
+
+# aplicazion
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Jessude dal isolament"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Al pues lâ fûr dal isolament e imbroiâ cualsisei altre restrizion"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Cheste aplicazion e je completamentri isolade."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Impussibil determinâ cualis parts dal sisteme a son acessibilis di cheste "
+"aplicazion. Chest al è solit pes aplicazions vecjis."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "No cognossude"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Mai"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "No cognossude"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Basse"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Medie"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Alte"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "No cognossude"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Al covente un acès a internet par scrivi une recension"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Impussibil cjatâ “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domini public"
+
+# fâ pagjine par software proprietari su vikipedie
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software Libar"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "I utents a son limitâts de licence chi daurman:"
+msgstr[1] "I utents a son limitâts des licencis chi daurman:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Plui informazions"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pagjine di detais"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Daûr a discjariâ"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Inzorne"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Zonte scurte"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Gja_ve scurte"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Cature di schermi no furnide"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Dipuesit software includût"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Cheste aplicazion e inclût un dipuesit software che al furnìs inzornaments, "
+"cussì ancje l'acès a altri software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Nissun dipuesit software includût"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Cheste aplicazion no inclût un dipuesit software. No vignarà inzornade cun "
+"gnovis versions."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Chest software al è za furnît de tô distribuzion e no varès di jessi "
+"sostituide."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Dipuesit software identificât"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Zontant chest dipuesit software tu varâs acès a software in plui e "
+"inzornaments."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Dopre nome i dipuesits software che tu ti fidis."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Sît _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Done"
+
+# aplicazion
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Localizade te tô lenghe"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentazion"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Ativitât di publicazion"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integrazion tal sisteme"
+
+# aplicazion
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Isolade"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canâl"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Fasse di etât"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permès"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Inzornade"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Dimension daspò la instalazion"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Dimension dal discjariament"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Svilupadôr"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licence"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Libar"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietarie"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Estensions"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Lis estensions selezionadis a vegnaran instaladis cun la aplicazion."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recensions"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Scrîf une recension"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mostre altris"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Chest al significhe che il software al pues jessi inviât, copiât, "
+"distribuît, studiât e modificât cence fastidis."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Software proprietari"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Chest al significhe che il software al è di proprietât di une persone o di "
+"une compagnie. Di solit a son restrizions sul ûs e il so codiç sorzint di "
+"solit nol è acessibil."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licence software no cognossude"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "I tiermins di licence di chest software no son cognossûts."
+
+# proviôt o e je caraterizade?
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "La aplicazion e je stade valutade cussì par vie che e proviôt:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Nissun detai al jere disponibil par cheste valutazion."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " e "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Caratars disponibii pal script %s"
+msgstr[1] "Caratars disponibii pai script %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Software disponibil par %s"
+msgstr[1] "Software disponibii par %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Impussibil cjatâ il software domandât"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s no cjatât"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "tal sît web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "No je nissune aplicazion disponibile che e furnìs il file %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Lis informazion su %s, e cussì ancje lis opzions su cemût vê lis aplicazions "
+"che a mancjin, a podaressin jessi cjatadis su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "No je nissune aplicazion disponibile pal supuart di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s no je disponibile."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Lis informazion su %s, e cussì ancje lis opzions su cemût vê une aplicazion "
+"che e supuarte chest formât, a podaressin jessi cjatadis su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "No son disponibii caratars pal supuart dal script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Lis informazion su %s, e cussì ancje lis opzions su cemût vê caratars in "
+"plui, a podaressin jessi cjatadis su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Nol è disponibil nissun codec pal formât %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Lis informazion su %s, e cussì ancje lis opzions su cemût otignî un codec "
+"che al pues riprodusi chest formât, a podaressin jessi cjatadis su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "No je nissune risorse Plasma disponibile pal supuart di %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Lis informazion su %s, e cussì ancje lis opzions su cemût vê risorsis Plasma "
+"in plui, a podaressin jessi cjatadis su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nissun driver di stampant disponibil par %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Lis informazion su %s, e cussì ancje lis opzions su cemût otignî un driver "
+"che al supuarte cheste stampant, a podaressin jessi cjatadis su %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "chest sît web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Par sfortune, si stave cirint %s e nol è stât pussibil cjatâlu. Consultâ %s "
+"par vê plui informazions."
+msgstr[1] ""
+"Par sfortune, si stave cirint %s e nol è stât pussibil cjatâju. Consultâ %s "
+"par vê plui informazions."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Impussibil cjatâ risultâts de ricercje"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Formât di file %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Pagjine dai codec"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Benvignûts"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Benvignûts a Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software ti fâs instalâ ducj i software che ti coventin, dut di un puest "
+"sôl. Bute un voli ai nestris conseis, esplore lis categoriis o cîr lis "
+"aplicazions che tu desideris."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Nin a fâ compris"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Gjavade"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalade"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Inzornade"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "No cognossude"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e di %B dal %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Cronologjie"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicazions di sisteme"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Pagjine instalade"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Al ven discjariât il catalic dai software"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Daûr a cjariâ la pagjine"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Inviament in cors…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"La rêt atuâl e je a consum. Lis conessions a consum a àn limits sui dâts o "
+"tarifis associadis a chescj. Par sparagnâ dâts, i inzornaments automatics a "
+"son stâts duncje metûts in pause.\n"
+"\n"
+"I inzornaments automatics a continuaran cuant che e devente disponibile une "
+"rêt che no je a consum. Fintremai chel moment, si pues distès instalâ a man "
+"i inzornaments.\n"
+"\n"
+"In alternative, se la rêt atuâl e no je stade identificade juste, stant che "
+"no je a consum, cheste impostazion e pues jessi cambiade."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Vierç _Impostazions di rêt"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderâ pagjine"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "No son recensions di moderâ"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sisteme"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "utent"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ram"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formât"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalazion"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Plui…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicazions audio e video conseadis"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Zûcs conseâts"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicazions di grafiche conseadis"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicazions di produtivitât conseadis"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Rive a doprâ software adizionâl che al ven di sorzints di tiercis parts "
+"selezionadis."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Alc di chest software al è proprietari e duncje al à restrizions sul ûs, su "
+"la condivision e sul acès al codiç sorzint."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Par savê di plui…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Abilite"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Pagjine panoramiche"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Abilitâ i dipuesits software di tiercis parts?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Precedent"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Prossim"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Selezionadis di noaltris"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Publicazions resintis"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categoriis"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Dâts de aplicazion no cjatâts"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparâ %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Sigûrs di gjavâ il dipuesit %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Dutis lis aplicazions che e vegnin di %s e vignaran gjavadis, tu varâs di "
+"tornâ a instalâ la sorzint par podê tornâ a doprâlis."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Sigûrs di gjavâ %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s e vegnarà gjavade e par podêle doprâ di gnûf tu varâs di instalâle."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalât)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferencis di inzornament"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Inzornaments automatics"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"I inzornaments automatics a son disabilitâts cuant che si dopre une "
+"conession a consum."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notifichis di inzornament automatichis"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Mostre lis notifichis cuant che i inzornaments a son stâts instalâts in "
+"automatic."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Cualchidun dai software al moment instalâts nol è compatibil cun %s. Se tu "
+"continuis i pachets chi daurman a vegnaran gjavâts in automatic dilunc "
+"l'inzornament:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Software no compatibil"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continue"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicazion instalade"
+msgstr[1] "%u aplicazions instaladis"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u estension instalade"
+msgstr[1] "%u estensions instaladis"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicazion"
+msgstr[1] "%u aplicazions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u estension"
+msgstr[1] "%u estensions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s e %s instaladis"
+msgstr[1] "%s e %s instaladis"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Gjavâ “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Disabilitâ “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Il software che al è stât instalât di chest dipuesit nol varà plui "
+"inzornaments, includûts chei di sigurece."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Disabilite"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "il sisteme operatîf"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Chescj dipuesits a integrin il software predefinît furnît di %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Dipuesits di tiercis parts"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nissun dipuesit adizionâl"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Abilite"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Gjave…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Disabilite…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Daûr a abilitâ"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Daûr a disabilitâ"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Abilitât"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Disabilitât"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "La odei"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "No mi plâs"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "E je buine"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Mi plâs"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Le adori"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Cjapiti plui timp par scrivi une opinion"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Sielç une stele come valutazion"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Il struc al è masse curt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Il struc al è masse lunc"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "La descrizion e je masse curte"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "La descrizion e je masse lungje"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publiche recension"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Publiche"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Struc"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Fâs un curt struc de tô recension, par esempli: \"Maraveose aplicazion, "
+"conseade\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recension"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Ce pensitu de aplicazion? Cîr di dâ motîfs aes tôs opinions."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Cognòs te nestre <a href=\"https://odrs.gnome.org/privacy\">politiche di "
+"privacy</a> cuai dâts che a vegnin inviâts."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "recensions in totâl"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Al è pussibil segnalâ recensions compuartament ofensîf, maleducât o "
+"discriminatori."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Une volte segnalade, une recension no vegnarà mostrade fintant che un "
+"aministradôr no le varà controlade."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Segnalâ recension?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Segnale"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "La recension ise stade utile?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sì"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "No"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Mah"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Segnale…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Gjave…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Cature di schermi no cjatade"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Cjariament de imagjin falît"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Dimension de cature di schermi no cjatade"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Impussibil cjariâ la cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Cature di schermi no valide"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Cature di schermi no disponibile"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Cature"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "ancjemò %u corispondence"
+msgstr[1] "ancjemò %u corispondencis"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Pagjine di ricercje"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nissune aplicazion cjatade"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Impussibil discjariâ di %s i inzornaments firmware"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Impussibil discjariâ di %s i inzornaments"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Impussibil discjariâ i inzornaments"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Impussibil discjariâ i inzornaments: al coventave l'acès a internet ma nol "
+"jere disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Impussibil discjariâ di %s i inzornaments: nol jere vonde spazi sul disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Impussibil discjariâ i inzornaments: nol jere vonde spazi sul disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Impussibil discjariâ i inzornaments: e coventave la autenticazion"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Impussibil discjariâ i inzornaments: la autenticazion no jere valide"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Impussibil discjariâ i inzornaments: no si à i permès par instalâ software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Impussibil otignî la liste dai inzornaments"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Impussibil instalâ %s par vie che no si è rivâts a discjariâ di %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Impussibil instalâ %s par vie che no si è rivâts a discjariâ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Impussibil instalâ %s par vie che il runtime %s nol è disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Impussibil instalâ %s par vie che nol è supuartât"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Impussibil instalâ: al coventave l'acès a internet ma nol jere disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Impussibil instalâ: la aplicazion e à un formât no valit"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Impussibil instalâ %s: nol jere vonde spazi sul disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Impussibil instalâ %s: e coventave la autenticazion"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Impussibil instalâ %s: la autenticazion no jere valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Impussibil instalâ %s: no si à i permès par instalâ software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Impussibil instalâ %s: e covente la alimentazion vie prese"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Impussibil instalâ %s: il nivel de batarie al è masse bas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Impussibil instalâ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Impussibil inzornâ %s di %s par vie che no si è rivâts a discjariâ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Impussibil inzornâ %s par vie che no si è rivâts a discjariâ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Impussibil instalâ i inzornaments di %s par vie che no si è rivâts a "
+"discjariâ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"Impussibil instalâ i inzornaments par vie che no si è rivâts a discjariâ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Impussibil inzornâ: al coventave l'acès a internet ma nol jere disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Impussibil inzornâ %s: nol jere vonde spazi sul disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Impussibil instalâ i inzornaments: nol è vonde spazi sul disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Impussibil inzornâ %s: e coventave la autenticazion"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Impussibil instalâ i inzornaments: e coventave la autenticazion"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Impussibil inzornâ %s: la autenticazion no jere valide"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Impussibil instalâ i inzornaments: la autenticazion no jere valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Impussibil inzornâ %s: no si à i permès par inzornâ software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Impussibil inzornâ i inzornaments: no si à i permès par inzornâ software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Impussibil inzornâ %s: e covente la alimentazion vie prese"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Impussibil instalâ i inzornaments: e covente tacâsi ae prese di alimentazion"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Impussibil inzornâ %s: il nivel de batarie al è masse bas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Impussibil instalâ i inzornaments: il nivel de batarie al è masse bas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Impussibil inzornâ %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Impussibil instalâ i inzornaments"
+
+# from -> avendo?
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Impussibil avanzâ a %s di %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Impussibil avanzâ a %s par vie che no si è rivâts a discjariâ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Impussibil avanzâ a %s: al coventave l'acès a internet ma nol jere disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Impussibil avanzâ a %s: nol jere vonde spazi sul disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Impussibil avanzâ a %s: e coventave la autenticazion"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Impussibil avanzâ a %s: la autenticazion no jere valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Impussibil avanzâ a %s: no si à i permès par avanzâ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Impussibil avanzâ a %s: e covente la alimentazion vie prese"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Impussibil avanzâ a %s: il nivel de batarie al è masse bas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Impussibil avanzâ a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Impussibil gjavâ %s: e coventave la autenticazion"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Impussibil gjavâ %s: la autenticazion no jere valide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Impussibil gjavâ %s: no si à i permès par gjavâ software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Impussibil gjavâ %s: e covente la alimentazion vie prese"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Impussibil gjavâ %s: il nivel de batarie al è masse bas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Impussibil gjavâ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Impussibil inviâ %s: %s nol è instalât"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"No'nd è vonde spazi libar sul disc — libere un tic di spazi e torne prove"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Nus displâs, alc al è lât stuart"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "No si è rivâts a instalâ il file: no supuartât"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "No si è rivâts a instalâ il file: autenticazion falide"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "No si è rivâts a instalâ: no supuartât"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "No si è rivâts a instalâ: autenticazion falide"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Impussibil contatâ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Si scugne tornâ a inviâ %s par podê doprâ i gnûfs plugin."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Si scugne tornâ a inviâ cheste aplicazion par podê doprâ i gnûfs plugin."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Al covente jessi tacâts ae prese"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Il nivel de batarie al è masse bas"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Sorzint: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instalazion)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Rimozion)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Gjave ducj"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nissune descrizion dal inzornament disponibile."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalât ai %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Inzornaments instalâts"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Zontaduris"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Rimozions"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Inzornaments"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Regressions"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nissun inzornament al è stât instalât tal sisteme."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Inzornaments di sigurece in spiete"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Si consee di instalâ daurman i inzornaments impuartants"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Torne invie e instale"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Inzornaments software disponibii"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Inzornaments impuartants pal sisteme operatîf e pes aplicazions a son pronts "
+"par jessi instalâts"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Visualize"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicazion inzornade — si necessite tornâ a inviâ"
+msgstr[1] "%u aplicazions inzornadis — si necessite tornâ a inviâ"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicazion inzornade"
+msgstr[1] "%u aplicazions inzornadis"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s al è stât inzornât."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Par plasê torne invie la aplicazion."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s e %s a son stâts inzornâts."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicazion e à dibisugne che e sedi tornade a inviâ."
+msgstr[1] "%u aplicazions a àn dibisugne che a sedin tornadis a inviâ."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Al inclût %s, %s e %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Inzornaments dal Sisteme operatîf no disponibii"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Inzorne par continuâ a ricevi inzornaments di sigurece."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Une gnove version di %s e je disponibile pe instalazion"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Avanzament software disponibil"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Inzornaments software falîts"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"No si è rivâts a instalâ un impuartant inzornament dal sisteme operatîf."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostre detais"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Inzornament dal sisteme completât"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Benvignûts su %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Inzornament software instalât"
+msgstr[1] "Inzornaments software instalâts"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Un impuartant inzornament dal sisteme operatîf al è stât instalât."
+msgstr[1] ""
+"Impuartants inzornaments dal sisteme operatîf a son stâts instalâts."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Esamine"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Inzornament falît"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Il sisteme al è za stât inzornât."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "L'inzornament al è stât anulât."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Al jere necessari l'acès a internet ma nol jere disponibil. Sigurâsi di vê "
+"l'acès a internet e torne prove."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"A jerin problemis di sigurece cul inzornament. Consultâ il furnidôr dal "
+"software par vê plui detais."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Nol jere vonde spazi libar sul disc. Liberâ un tic di spazi e torne prove."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Nus displâs: no si è rivâts a instalâ l'inzornament. Spiete un altri "
+"inzornament e torne prove. Se il probleme al persist, contate il to furnidôr "
+"di software."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Îr, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Îr, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Doi dîs indaûr"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Trê dîs indaûr"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Cuatri dîs indaûr"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Cinc dîs indaûr"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Sîs dîs indaûr"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Une setemane indaûr"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Dôs setemanis indaûr"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Daûr a cirî gnûfs inzornaments…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Daûr a configurâ i inzornaments…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Al podarès tirâle a dilunc)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Ultin control: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s no je plui supuartade."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Il to Sisteme Operatîf nol è plui supuartât."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Chest al significhe che nol ricevarà inzornaments di sigurece."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Si consee di avanzâ a une version plui resinte."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Tu podaressis spindi bêçs"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Controlâ inzornaments doprant la bande largje mobil al podarès fâti spindi "
+"bêçs."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Controle _distès"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nissune rêt"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "L'acès a internet al è necessari par controlâ i inzornaments."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Daûr a controlâ…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Control inzornaments"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Pagjine inzornaments"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Il software al è inzornât"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Controlâ i inzornaments intant che si dopre la bande largje mobile al "
+"podarès causâ spesis in plui"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Controle distès"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Va in rêt par controlâ i inzornaments"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Impostazions di _rêt"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "I inzornaments a son gjestîts in automatic"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Torne invie e inzorne"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Inzorne dut"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Firmware integrât"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Al covente tornâ a inviâ"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Inzornaments aplicazion"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware dispositîf"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Discjarie"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Si consee di fâ il backup dai tiei dâts e dai tiei file prime di fâ "
+"l'avanzament."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Torne invie cumò"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+"I inzornaments a vignaran aplicâts cuant che si tornarà a inviâ il computer."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s e je cumò disponibile"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "In spiete di discjariâ %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Daûr a discjariâ %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s pronte par jessi instalade"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Un avanzament impuartant, cun gnovis funzionalitâts e mioraments."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "P_lui informazions"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Zonte, gjave o inzorne software su chest computer"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Inzornaments;Avanzament;Sorzints;Repositories;Preferencis;Instalâ;Disinstalâ;"
+"Program;Software;Aplicazion;Negozi;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Creazion e modifiche audio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Riprodutôrs musicâi"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Debugger"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Inteligjence artificiâl"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomie"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chimiche"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Lenghis"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematiche"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotiche"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Ducj"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Azion"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventure"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocs"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Taule"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cjartis"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladôrs"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Fruts"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logjiche"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Zûcs di rûl"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategjie"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafiche 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografie"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scansion"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafiche vetoriâl"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visualizadôr"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendari"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base di dâts"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finance"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Elaboradôr di tescj"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Caratars"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codec"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Sorzints di input"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pachets des lenghis"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localizazion"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Driver Hardware"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Notiziis"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navigadôrs web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Dutis"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editôrs di test"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Ducj"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "In risalt"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografie"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Comics"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Finzion"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Salût"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Storie"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Stîl di vite"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politichis"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio e video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Struments di svilup"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educazion e Sience"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Zûcs"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Fotografie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produtivitât"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicazion e notiziis"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Riferiment"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilitâts"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Inzornament dal SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Al inclût mioraments di prestazion, stabilitât e sigurece."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Daûr a discjariâ lis imagjins in risalt…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Un inzornament di Endless OS cun gnovis funzionalitâts e mioraments."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Il servizi di inzornament di EOS nol rive a recuperâ e a aplicâ "
+"l'inzornament."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instaladôr a nivel di sisteme di AppStream di GNOME Software"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "No si è rivâts a analizâ i argoments de rie di comant"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Si scugne specificâ juste un non di file"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Chest program al pues jessi doprât nome dal utent «root»"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "No si è rivâts a validâ il gjenar di contignût"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "No si è rivâts a copiâ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Daûr a discjariâ i file dai metadâts adizionâi…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Daûr a discjariâ lis informazions di avanzament…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Avanze par vê i mioraments des ultimis funzionalitâts, di stabilitât e di "
+"prestazion."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Supuart Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak al è un ambient di svilup par aplicazions di scritori su Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Daûr a otignî i metadâts flatpak par %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Inzornament dispositîf %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Inzornament sisteme %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Inzornament dal controlôr incorporât %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Inzornament motôr di gjestion %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Inzornament motôr di gjestion (ME) aziendâl di %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Inzornament motôr di gjestion (ME) utent di %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Inzornament dal controlôr %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Inzornament dal controlôr Thunderbolt di %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Inzornament dal Microcode de CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Inzornament configurazion %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Daûr a discjariâ la firme dal inzornament dal firmware…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Daûr a discjariâ i metadâts dal inzornament dal firmware…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Supuart di inzornament dai Firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Al furnìs supuart pai inzornaments dai firmware"
+
+# recensions des aplicazions o recensions de aplicazion?
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Daûr a discjariâ lis recensions de aplicazion…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS al è un servizi che al furnìs recensions dai utents des aplicazions"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Archivi Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Supuart Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un snap al è un pachet universâl par Linux"
+
+#~ msgid "About %s"
+#~ msgstr "Informazions su %s"
+
+#~ msgid "%s ME"
+#~ msgstr "Motôr di gjestion (ME) di %s"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Impostazions estensions"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Lis estensions a son dopradis cun to pericul. Se tu âs cualsisei probleme "
+#~ "di sisteme, al è conseât di disabilitâlis."
+
+#~ msgid "Spacing"
+#~ msgstr "Spaziadure"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "La cuantitât di spazi tra i fîs"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplicazions in risalt"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Estensions de Shell"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Dipuesit des estensions di GNOME Shell"
+
+# delle estensioni o della estensione?
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Daûr a discjariâ i metadâts de estension de shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Estensions de Shell di GNOME"
+
+#~ msgid "Failed to load components"
+#~ msgstr "No si è rivâts a cjariâ i components"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validât OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "No si è rivâts a cjariâ il file"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Modifichis no salvadis"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "La liste des aplicazions e je za cjariade."
+
+#~ msgid "Merge documents"
+#~ msgstr "Unìs documents"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Bute vie lis modifichis"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Vierç file AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Vierç"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Salve file AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Salve"
+
+#~ msgid "Failed to save file"
+#~ msgstr "No si è rivâts a salvâ il file"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Eliminât disen de insegne di %s."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Eliminât disegn de insegne."
+
+# proviôt o e je caraterizade?
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "La liste des aplicazions e à modifichis no salvadis."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Dopre regjistrazions prolissis"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Progjetazion insegnis software di GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Nissun disen"
+
+#~ msgid "Error message here"
+#~ msgstr "Messaç di erôr achì"
+
+#~ msgid "App ID"
+#~ msgstr "ID App"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Selezion di noaltris"
+
+#~ msgid "Category Featured"
+#~ msgstr "Categorie “In risalt”"
+
+#~ msgid "Undo"
+#~ msgstr "Disfe"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Progjetazion insegnis"
+
+#~ msgid "New Banner"
+#~ msgstr "Gnove insegne"
+
+#~ msgid "Import from file"
+#~ msgstr "Impuarte di file"
+
+#~ msgid "Export to file"
+#~ msgstr "Espuarte su file"
+
+#~ msgid "Delete Design"
+#~ msgstr "Elimine disen"
+
+#~ msgid "Featured App"
+#~ msgstr "App in risalt"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Avanzament dal SO"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Progjete lis insegnis in risalt par GNOME Software"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;Aplicazion;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Supuart aplicazions Web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Eseguìs lis aplicazions web popolârs intun browser"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Mostre la IU de gjestion des cartelis"
+
+#~ msgid "Folder Name"
+#~ msgstr "Non de cartele"
+
+#~ msgid "_Add"
+#~ msgstr "_Zonte"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Zonte ae cartele aplicazions"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Fâs clic sui elements par selezionâju"
+
+#~ msgid "Select"
+#~ msgstr "Selezione"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Zonte ae cartele…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Sposte te cartele…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Gjave de cartele"
+
+#~ msgid "Top Rated"
+#~ msgstr "I miôr valutâts"
+
+#~ msgid "_All"
+#~ msgstr "_Dut"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Jentre / Regjistriti…"
+
+#~ msgid "Continue"
+#~ msgstr "Continue"
+
+#~ msgid "Use"
+#~ msgstr "Dopre"
+
+#~ msgid "Add another…"
+#~ msgstr "Zonte un altri…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Sigûrs di comprâ %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s al sarà instalât e tu tu vignarâs contizât di %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Compre"
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2f$A"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2f$C"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2f¥CN"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f€"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f£"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2f$NZ"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2f$US"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Jentrât come %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Jentre…"
+
+#~ msgid "Sign out"
+#~ msgstr "Disconet"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Impussibil comprâ %s: e coventave la autenticazion"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Impussibil comprâ %s: la autenticazion no jere valide"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Impussibil comprâ %s: nissun sisteme di paiament configurât"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Impussibil comprâ %s: il paiament al è stât refudât"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Impussibil comprâ %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Par continuâ si scugne doprâ un account Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Par continuâ tu scugnis doprâ il to account Ubuntu One."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Al ven cjariât il catalic dai software"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Mostre lis informazions dal profîl pal servizi"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Par continuâ tu scugnis jentrâ in %s."
+
+#~ msgid "Email address"
+#~ msgstr "Direzion e-mail"
+
+#~ msgid "I have an account already"
+#~ msgstr "O ai za un account"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "O desideri regjistrâ un account cumò"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "O ai dismenteât la mê password"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Jentre in automatic la prossime volte"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Inserìs il to pin a ûs singul pe autenticazion a doi fatôrs."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autentiche"
+
+#~ msgid "_About"
+#~ msgstr "_Informazions"
+
+#~ msgid "_Quit"
+#~ msgstr "_Jes"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Lis informazions su %s, cussì come lis opzions su ce mût otignî un codec "
+#~ "par podê riprodusi chest formât, a puedin jessi cjatadis sul sît web."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Il to account %s al è stât sospindût."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Nol è pussibil instalâ software fintant che chest nol è stât risolt."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Par vê plui informazions, visite %s."
+
+# from -> avendo?
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Impussibil inzornâ %s di %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Daûr a discjariâ i gnûfs inzornaments…"
+
+# de aplicazion o des aplicazions?
+#~ msgid "Downloading application page…"
+#~ msgstr "Daûr a discjariâ la pagjine de aplicazion…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Supuart Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "La plateforme finâl di intratigniment di Valve"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Aplicazions inzornadis"
+
+#~ msgid "Includes: ."
+#~ msgstr "Al inclût: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "To_rne invie e inzorne"
+
+#~ msgid "U_pdate All"
+#~ msgstr "I_nzorne dut"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Torne invie e _instale"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Daûr a recuperâ il sorzint dal runtime…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Daûr a discjariâ l'inzornament dal firmware…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Supuart Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba al furnìs ai svilupadôrs une maniere semplice par creâ racueltis di "
+#~ "software"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Ordenât par non"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Ordenât par valutazion"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr ""
+#~ "La liste di sorzints suplementârs che a son stadis abilitadis tal imprin"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "La liste di sorzints che a son stadis abilitadis tal imprin cuant che si "
+#~ "instalave lis aplicazions di tiercis parts."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Mostre software no libar tai risultâts de ricercje"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "La liste di sorzints no libaris che a puedin jessi abilitadis in maniere "
+#~ "opzionâl"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "Al furnìs acès a software in plui, includût navigadôrs web e zûcs."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Abilitâ sorzints software proprietariis?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Nissune aplicazion o estension instalade; al è pussibil che lu sedi altri "
+#~ "software"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Di solit al à restrizions sul ûs e acès al codiç sorzint."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Sorzints Software proprietariis"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Lis sorzints software a puedin jessi scjariadis di internet. Ti puedin "
+#~ "ufrî l'acès a software adizionâi che no son furnîts di %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Gjavant une sorzint tu gjavarâs ancje ducj i software che tu âs instalât "
+#~ "di jê."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nissun software instalât di cheste sorzint"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalât di cheste sorzint"
+
+#~ msgid "Source Details"
+#~ msgstr "Detais sorzint"
+
+#~ msgid "Last Checked"
+#~ msgstr "Ultin control"
+
+#~ msgid "Added"
+#~ msgstr "Zontade"
+
+#~ msgid "Website"
+#~ msgstr "Sît web"
+
+#~ msgid "Remove Source"
+#~ msgstr "Gjave sorzint"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Interazions predefinidis tra zuiadôrs cence funzionalitât di chat"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Condivît lis informazions dal utent cun tiercis parts"
+
+#~ msgid "page1"
+#~ msgstr "pagjine1"
+
+#~ msgid "page2"
+#~ msgstr "pagjine2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgid "Other Updates"
+#~ msgstr "Altris inzornaments"
+
+#~ msgid "Total"
+#~ msgstr "Totâl"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Ducj"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "In risalt"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomie"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chimiche"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematiche"
+
+#~ msgid "Science"
+#~ msgstr "Sience"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instale ducj"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Instalazion di %s falide."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Rimozion di %s falide."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Controle di vê l'acès a internet e torne prove."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Libere un tic di spazi e torne prove."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Se il probleme al persist contate il furnidôr dal software."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Nissun"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Lis sorzints software ti furnissin l'acès a software adizionâi."
+
+#~ msgid "3rd party"
+#~ msgstr "tiercis parts"
+
+#~ msgid "web app"
+#~ msgstr "Aplicazion web"
+
+#~ msgid "nonfree"
+#~ msgstr "no libare"
+
+#~ msgid "shell extension"
+#~ msgstr "estension de shell"
+
+#~ msgid "_Installing"
+#~ msgstr "_Instalazion"
+
+#~ msgid "_Removing"
+#~ msgstr "_Rimozion"
+
+#~ msgid " or "
+#~ msgstr " o "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "No cognossude"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Chest software al ven di tiercis parts."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Chest software al ven di une tierce part e e podarès contignî components "
+#~ "no libars."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Chest software al podarès contignî components no libars."
+
+#~ msgid "non-free"
+#~ msgstr "no libare"
+
+#~ msgid "One Star"
+#~ msgstr "Une stele"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dôs stelis"
+
+#~ msgid "Three Stars"
+#~ msgstr "Trê stelis"
+
+#~ msgid "Four Stars"
+#~ msgstr "Cuatri stelis"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinc stelis"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Nissune"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicazions di ufici conseadis"
+
+#~ msgid "Audio"
+#~ msgstr "Audio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Modifiche"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Base di dâts"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Incision disc"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamadôr"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Musiche"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Regjistradôrs"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Secuenziadôrs"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Sintonizadôr"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Compilazion"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Base di dâts"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Analisi"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Gjestion progjet"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traduzion"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Svilup web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologjie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Informatiche"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Costruzion"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualizazion di dâts"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Eletricitât"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Eletroniche"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inzegnarie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Gjeologjie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Sience de tiere"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Storie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Umanitât"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Elaborazion imagjin"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Leterature"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapis"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Musiche"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analisis numerichis"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Calcul paralêl"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fisiche"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitât"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Sclopetadis"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulazion"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafiche"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Grafiche 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Editorie"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Grafiche raster"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Conession dialup"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Pueste eletroniche"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Notiziari"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Trasferiment file"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamadôr"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Messaçs istantanis"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Client IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Tignî di voli"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Acès rimot"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonie"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Svilup web"
+
+#~ msgid "Office"
+#~ msgstr "Ufizi"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Gjestion contats"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Dizionari"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Pueste eletroniche"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Diagram di flus"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentazion"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Gjestion progjet"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Editorie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Sfuei di calcul"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visualizadôr"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Art"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Inteligjence artificiâl"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologjie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chimiche"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Informatiche"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Costruzion"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualizazion di dâts"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Eletricitât"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Eletroniche"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inzegnarie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Gjeografie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Gjeologjie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Sience de tiere"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Storie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Umanitât"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Elaborazion imagjin"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Lenghis"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Leterature"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapis"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematiche"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Midisine"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analisis numerichis"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Calcul paralêl"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fisiche"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotiche"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitât"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emuladôr"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Gjestôr di file"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Struments pai file"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Tignî di voli"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Sigurece"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emuladôr di terminâl"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Acessibilitât"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Archiviazion"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calcoladorie"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Orloi"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compression"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Struments pai file"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapis"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitât"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Struments pe telefonie"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Modifiche"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Base di dâts"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Incision disc"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Riprodutôrs"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Regjistradôrs"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Television"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "No cognossude"
+
+#~ msgid "_History"
+#~ msgstr "_Cronologjie"
+
+#~ msgid "Size"
+#~ msgstr "Dimension"
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..6431bb9
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,2331 @@
+# Irish translations for gnome-software package.
+# Copyright (C) 2015 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnome-software package.
+# Seán de Búrca <leftmostcat@gmail.com>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software.master\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-09-25 15:35-0600\n"
+"PO-Revision-Date: 2015-09-25 16:08-0600\n"
+"Last-Translator: Seán de Búrca <leftmostcat@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
+"4;\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "GNOME Software"
+msgstr "Bogearraí GNOME"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid "Application manager for GNOME"
+msgstr ""
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:4
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: ../src/app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr ""
+
+#: ../src/app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:315
+#: ../src/gs-shell-details.c:233 ../src/gs-shell-installed.c:524
+msgid "_Cancel"
+msgstr "_Cealaigh"
+
+#: ../src/app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:320
+msgid "_Add"
+msgstr "Cuir _Leis"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#: ../src/app-tile.ui.h:1 ../src/gs-app-addon-row.c:96 ../src/gs-app-tile.c:72
+#: ../src/gs-app-tile.c:75 ../src/gs-feature-tile.c:67
+#: ../src/gs-popular-tile.c:73 ../src/gs-popular-tile.c:76
+#: ../src/popular-tile.ui.h:1
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: this is the application name
+#. set the window title back to default
+#. TRANSLATORS: this is the main window title
+#: ../src/org.gnome.Software.desktop.in.h:1 ../src/gnome-software.ui.h:3
+#: ../src/gs-application.c:343 ../src/gs-shell.c:159
+msgid "Software"
+msgstr "Bogearraí"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#: ../src/org.gnome.Software.desktop.in.h:3
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr ""
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr ""
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr ""
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-sources-dialog.ui.h:2
+#: ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr ""
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "_Gach Rud"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "_Suiteáilte"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "_Nuashonruithe"
+
+#: ../src/gnome-software.ui.h:11
+msgid "Restart & _Install"
+msgstr "Atosaigh & _Suiteáil"
+
+#: ../src/gnome-software.ui.h:12
+msgid "Select"
+msgstr "Roghnaigh"
+
+#: ../src/gnome-software.ui.h:13
+msgid "Check for updates"
+msgstr ""
+
+#: ../src/gs-app-folder-dialog.c:304
+msgid "Folder Name"
+msgstr "Ainm Fillteáin"
+
+#. TRANSLATORS: this is a command line option
+#: ../src/gs-application.c:90
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: ../src/gs-application.c:90
+msgid "MODE"
+msgstr ""
+
+#: ../src/gs-application.c:92
+msgid "Search for applications"
+msgstr ""
+
+#: ../src/gs-application.c:92
+msgid "SEARCH"
+msgstr ""
+
+#: ../src/gs-application.c:94
+msgid "Show application details"
+msgstr ""
+
+#: ../src/gs-application.c:94
+msgid "ID"
+msgstr "CA"
+
+#: ../src/gs-application.c:96
+msgid "Open a local package file"
+msgstr ""
+
+#: ../src/gs-application.c:96
+msgid "FILENAME"
+msgstr ""
+
+#: ../src/gs-application.c:98
+msgid "Show verbose debugging information"
+msgstr ""
+
+#: ../src/gs-application.c:100
+msgid "Show profiling information for the service"
+msgstr ""
+
+#: ../src/gs-application.c:102
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:341
+msgid "About Software"
+msgstr "Maidir le Bogearraí"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:346
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#: ../src/gs-application.c:350
+msgid "translator-credits"
+msgstr "Seán de Búrca <leftmostcat@gmail.com>"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-addon-row.c:91 ../src/gs-app-row.c:226
+#: ../src/gs-shell-details.ui.h:4
+msgid "Pending"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being installed
+#: ../src/gs-app-addon-row.c:100 ../src/gs-app-row.c:250
+#: ../src/gs-app-tile.c:81 ../src/gs-app-tile.c:84
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being removed
+#: ../src/gs-app-addon-row.c:104 ../src/gs-app-row.c:259
+#: ../src/gs-app-tile.c:90 ../src/gs-app-tile.c:93
+msgid "Removing"
+msgstr ""
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * be considered a "Conjunctive AND Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 and MIT and BSD-2-Clause"
+#. TRANSLATORS: separator for a list of items
+#: ../src/gs-app.c:1297 ../src/gs-shell-extras.c:147
+msgid " and "
+msgstr " agus "
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * be considered a "Disjunctive OR Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 or MIT"
+#: ../src/gs-app.c:1305
+msgid " or "
+msgstr " nó "
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-row.c:210
+msgid "Visit website"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: ../src/gs-app-row.c:215
+msgid "Install…"
+msgstr "Suiteáil…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-row.c:223
+msgid "Cancel"
+msgstr "Cealaigh"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#: ../src/gs-app-row.c:233 ../src/gs-utils.c:313
+msgid "Install"
+msgstr "Suiteáil"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-row.c:241 ../src/gs-page.c:178
+msgid "Remove"
+msgstr "Bain"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:228
+msgid "Other"
+msgstr "Eile"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: ../src/gs-dbus-helper.c:307
+msgid "An application"
+msgstr "Feidhmchlár"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: ../src/gs-dbus-helper.c:313
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:315
+msgid "Additional MIME Types Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: ../src/gs-dbus-helper.c:319
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:321
+msgid "Additional Fonts Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: ../src/gs-dbus-helper.c:325
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:327
+msgid "Additional Multimedia Codecs Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: ../src/gs-dbus-helper.c:331
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:333
+msgid "Additional Printer Drivers Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: ../src/gs-dbus-helper.c:337
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:339
+msgid "Additional Packages Required"
+msgstr ""
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: ../src/gs-dbus-helper.c:348
+msgid "Find in Software"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-first-run-dialog.ui.h:1
+msgid "Welcome"
+msgstr "Fáilte"
+
+#: ../src/gs-first-run-dialog.ui.h:2
+msgid "Welcome to Software"
+msgstr "Fáilte go Bogearraí"
+
+#: ../src/gs-first-run-dialog.ui.h:3
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+
+#: ../src/gs-first-run-dialog.ui.h:4
+msgid "_Let’s Go Shopping"
+msgstr ""
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: ../src/gs-hiding-box.c:384
+msgid "Spacing"
+msgstr ""
+
+#: ../src/gs-hiding-box.c:385
+msgid "The amount of space between children"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: ../src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: ../src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Anaithnid"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "Stair"
+
+#. TRANSLATORS: the transaction could not be completed
+#. * as a previous transaction was unfinished
+#: ../src/gs-offline-updates.c:47
+msgid "A previous update was unfinished."
+msgstr ""
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-offline-updates.c:56
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#. *
+#: ../src/gs-offline-updates.c:66
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+
+#. TRANSLATORS: the transaction failed in a way the user
+#. * probably cannot comprehend. Package management systems
+#. * really are teh suck.
+#. TRANSLATORS: the update process failed in a general
+#. * way, usually this message will come from source distros
+#. * like gentoo
+#: ../src/gs-offline-updates.c:76 ../src/gs-offline-updates.c:99
+msgid ""
+"The update couldn’t be installed; this is often a problem with the update "
+"itself. Please wait for another update and try again."
+msgstr ""
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-offline-updates.c:81
+msgid "The update was cancelled."
+msgstr ""
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-offline-updates.c:87
+msgid "The system was already up to date."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-offline-updates.c:91
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-offline-updates.c:104
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: these are geeky messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-offline-updates.c:212
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+
+#: ../src/gs-offline-updates.c:231 ../src/gs-shell-details.ui.h:20
+msgid "Details"
+msgstr "Mionsonraí"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-offline-updates.c:282
+msgid "Failed To Update"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-page.c:163
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-page.c:175
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:779
+msgid "OS Updates"
+msgstr ""
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: ../src/gs-plugin-loader.c:784
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-plugin-loader.c:1344 ../src/gs-shell-extras.c:389
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#: ../src/gs-plugin-loader.c:1347
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:233
+msgid "Screenshot not found"
+msgstr ""
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: ../src/gs-screenshot-image.c:249
+msgid "Failed to load image"
+msgstr ""
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:376
+msgid "Screenshot size not found"
+msgstr ""
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:395
+msgid "Could not create cache"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:425
+msgid "Screenshot not valid"
+msgstr ""
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:441
+msgid "Screenshot not available"
+msgstr ""
+
+#: ../src/gs-screenshot-image.c:493
+msgid "Screenshot"
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: ../src/gs-shell-extras.c:150
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: ../src/gs-shell-extras.c:176
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: ../src/gs-shell-extras.c:184
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../src/gs-shell-extras.c:226
+msgid "Unable to Find Requested Software"
+msgstr ""
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: ../src/gs-shell-extras.c:323
+#, c-format
+msgid "%s not found"
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: ../src/gs-shell-extras.c:327
+msgid "on the website"
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:334
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:338 ../src/gs-shell-extras.c:349
+#: ../src/gs-shell-extras.c:360
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:345 ../src/gs-shell-extras.c:367
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:356
+#, c-format
+msgid "%s is not available."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:371
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:378
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:382
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:393
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:400
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:404
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:411
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:415
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+
+#: ../src/gs-shell-extras.c:460
+msgid "this website"
+msgstr ""
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: ../src/gs-shell-extras.c:464
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../src/gs-shell-extras.c:544 ../src/gs-shell-extras.c:592
+#: ../src/gs-shell-extras.c:642
+msgid "Failed to find any search results"
+msgstr ""
+
+#: ../src/gs-shell-extras.c:811
+#, c-format
+msgid "%s file format"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-extras.ui.h:1
+msgid "Codecs page"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#: ../src/gs-shell-details.c:172 ../src/gs-shell-details.ui.h:2
+msgid "_Install"
+msgstr "_Suiteáil"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:183
+msgid "_Installing"
+msgstr "Á _Shuiteáil"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: ../src/gs-shell-details.c:200
+msgid "_Install…"
+msgstr "_Suiteáil…"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: ../src/gs-shell-details.c:220 ../src/gs-shell-details.ui.h:3
+msgid "_Remove"
+msgstr "_Bain"
+
+#. TRANSLATORS: button text in the header when an application can be installed
+#: ../src/gs-shell-details.c:227
+msgid "_Removing"
+msgstr "Á _Bhaint"
+
+#. TRANSLATORS: this is where the licence is not known
+#: ../src/gs-shell-details.c:599
+msgctxt "license"
+msgid "Unknown"
+msgstr "Anaithnid"
+
+#. TRANSLATORS: this is where the version is not known
+#: ../src/gs-shell-details.c:612
+msgctxt "version"
+msgid "Unknown"
+msgstr "Anaithnid"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:618
+msgctxt "size"
+msgid "Calculating…"
+msgstr ""
+
+#. TRANSLATORS: this is where the size is not known
+#: ../src/gs-shell-details.c:621
+msgctxt "size"
+msgid "Unknown"
+msgstr "Anaithnid"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:633
+msgctxt "updated"
+msgid "Never"
+msgstr "Riamh"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined menu category
+#: ../src/gs-shell-details.c:647
+msgctxt "menu category"
+msgid "None"
+msgstr "Neamhní"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-shell-details.c:662
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Anaithnid"
+
+#: ../src/gs-shell-details.c:927 ../src/gs-utils.c:162
+msgid "Sorry, this did not work"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-details.ui.h:1
+msgid "Details page"
+msgstr "Leathanach mionsonraí"
+
+#: ../src/gs-shell-details.ui.h:5
+msgid "Software Source Included"
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:6
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:7
+msgid "No Software Source Included"
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:8
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:9
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been discovered.
+#: ../src/gs-shell-details.ui.h:11
+msgid "Software Source Identified"
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:12
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:13
+msgid "Only use software sources that you trust."
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:14
+msgid "Internet Only Application"
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:15
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:16
+msgid "_Website"
+msgstr "Suíomh _Gréasáin"
+
+#: ../src/gs-shell-details.ui.h:17
+msgid "_History"
+msgstr "_Stair"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gs-shell-details.ui.h:19
+msgid "_Launch"
+msgstr "_Luchtaigh"
+
+#: ../src/gs-shell-details.ui.h:21 ../src/gs-sources-dialog.ui.h:8
+msgid "Version"
+msgstr "Leagan"
+
+#: ../src/gs-shell-details.ui.h:22
+msgid "Updated"
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:23
+msgid "Category"
+msgstr "Catagóir"
+
+#: ../src/gs-shell-details.ui.h:24
+msgid "Source"
+msgstr "Foinse"
+
+#: ../src/gs-shell-details.ui.h:25
+msgid "License"
+msgstr "Ceadúnas"
+
+#: ../src/gs-shell-details.ui.h:26
+msgid "Size"
+msgstr "Méid"
+
+#: ../src/gs-shell-details.ui.h:27
+msgid "Developer"
+msgstr "Forbróir"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-details.ui.h:28 ../src/gs-shell-installed.c:441
+#: ../src/gs-update-list.c:106 ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr ""
+
+#: ../src/gs-shell-details.ui.h:29
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: ../src/gs-shell-installed.c:431
+msgid "System Applications"
+msgstr "Feidhmchláir Córais"
+
+#: ../src/gs-shell-installed.c:532
+msgid "Click on items to select them"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-installed.ui.h:1
+msgid "Installed page"
+msgstr ""
+
+#: ../src/gs-shell-installed.ui.h:2
+msgid "_Add to Folder…"
+msgstr ""
+
+#: ../src/gs-shell-installed.ui.h:3
+msgid "_Move to Folder…"
+msgstr ""
+
+#: ../src/gs-shell-installed.ui.h:4
+msgid "_Remove from Folder"
+msgstr "_Bain ón bhFillteán"
+
+#. TRANSLATORS: this is a heading for audio applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:368
+msgid "Recommended Audio Applications"
+msgstr "Feidhmchláir Molta Fuaime"
+
+#. TRANSLATORS: this is a heading for games which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:373
+msgid "Recommended Games"
+msgstr "Cluichí Molta"
+
+#. TRANSLATORS: this is a heading for graphics applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:378
+msgid "Recommended Graphics Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for office applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:383
+msgid "Recommended Office Applications"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-overview.ui.h:1
+msgid "Overview page"
+msgstr ""
+
+#: ../src/gs-shell-overview.ui.h:2
+msgid "Featured Application"
+msgstr "Feidhmchlár Faoi Thrácht"
+
+#. Translators: This is a heading for software which has been featured (
+#: ../src/gs-shell-overview.ui.h:4
+msgid "Editor's Picks"
+msgstr "Roghanna an Eagarthóra"
+
+#: ../src/gs-shell-overview.ui.h:5
+msgid "Categories"
+msgstr "Catagóirí"
+
+#: ../src/gs-shell-overview.ui.h:6
+msgid "No Application Data Found"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-search.ui.h:1
+msgid "Search page"
+msgstr ""
+
+#: ../src/gs-shell-search.ui.h:2
+msgid "No Application Found"
+msgstr "Feidhmchlár Gan Aimsiú"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:144
+msgid "%R"
+msgstr ""
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:147
+msgid "%l:%M %p"
+msgstr ""
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: ../src/gs-shell-updates.c:153
+msgid "Yesterday, %R"
+msgstr ""
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: ../src/gs-shell-updates.c:157
+msgid "Yesterday, %l:%M %p"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:160
+msgid "Two days ago"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:162
+msgid "Three days ago"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:164
+msgid "Four days ago"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:166
+msgid "Five days ago"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:168
+msgid "Six days ago"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:170
+msgid "One week ago"
+msgstr ""
+
+#: ../src/gs-shell-updates.c:172
+msgid "Two weeks ago"
+msgstr ""
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:176
+msgid "%e %B %Y"
+msgstr ""
+
+#. TRANSLATORS: the updates are being downloaded
+#: ../src/gs-shell-updates.c:192
+msgid "Downloading new updates…"
+msgstr ""
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: ../src/gs-shell-updates.c:196
+msgid "Looking for new updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:251
+msgid "Setting up updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:252 ../src/gs-shell-updates.c:259
+msgid "(This could take a while)"
+msgstr ""
+
+#. TRANSLATORS: this is when the updates panel is starting up
+#: ../src/gs-shell-updates.c:264
+msgid "Checking for updates…"
+msgstr ""
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:405
+#, c-format
+msgid "Last checked: %s"
+msgstr ""
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:771
+msgid "No Network"
+msgstr "Gan Líonra"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:775
+msgid "Internet access is required to check for updates."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:779
+msgid "Network Settings"
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: ../src/gs-shell-updates.c:798
+msgid "Charges may apply"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:802
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:806
+msgid "Check Anyway"
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-updates.ui.h:1
+msgid "Updates page"
+msgstr ""
+
+#: ../src/gs-shell-updates.ui.h:2
+msgid "Software is up to date"
+msgstr ""
+
+#: ../src/gs-shell-updates.ui.h:3
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+
+#: ../src/gs-shell-updates.ui.h:4
+msgid "_Check Anyway"
+msgstr ""
+
+#: ../src/gs-shell-updates.ui.h:5
+msgid "Go online to check for updates"
+msgstr ""
+
+#: ../src/gs-shell-updates.ui.h:6
+msgid "_Network Settings"
+msgstr ""
+
+#: ../src/gs-shell-updates.ui.h:7
+msgid "Updates are automatically managed"
+msgstr ""
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: ../src/gs-sources-dialog.c:93
+msgid "No applications or addons installed; other software might still be"
+msgstr ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: ../src/gs-sources-dialog.c:97
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: ../src/gs-sources-dialog.c:103
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: ../src/gs-sources-dialog.c:110
+#, c-format
+msgid "%i application"
+msgid_plural "%i applications"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: ../src/gs-sources-dialog.c:116
+#, c-format
+msgid "%i add-on"
+msgid_plural "%i add-ons"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: ../src/gs-sources-dialog.c:123
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../src/gs-sources-dialog.c:321 ../src/gs-sources-dialog.ui.h:12
+msgid "Remove Source"
+msgstr "Bain Foinse"
+
+#: ../src/gs-sources-dialog.c:335
+msgid "Removing…"
+msgstr ""
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: ../src/gs-sources-dialog.c:415
+msgid "the operating system"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: ../src/gs-sources-dialog.c:486
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr ""
+
+#. vim: set noexpandtab:
+#: ../src/gs-sources-dialog.ui.h:1
+msgid "Software Sources"
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:3
+msgid "Software sources give you access to additional software."
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:4
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:5
+msgid "No software installed from this source"
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:6
+msgid "Installed from this Source"
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:7
+msgid "Source Details"
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:9
+msgid "Last Checked"
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:10
+msgid "Added"
+msgstr ""
+
+#: ../src/gs-sources-dialog.ui.h:11
+msgid "Website"
+msgstr "Suíomh Gréasáin"
+
+#. TRANSLATORS: this is where the packager did not write a
+#. * description for the update
+#: ../src/gs-update-dialog.c:120
+msgid "No update description available."
+msgstr ""
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: ../src/gs-update-dialog.c:223
+msgid "Installed Updates"
+msgstr ""
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window
+#: ../src/gs-update-dialog.c:236
+#, c-format
+msgid "Installed on %s"
+msgstr ""
+
+#: ../src/gs-update-dialog.ui.h:2
+msgid "No updates have been installed on this system."
+msgstr ""
+
+#: ../src/gs-update-monitor.c:108
+msgid "Security Updates Pending"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:109
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:112
+msgid "Restart & Install"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:116
+msgid "Software Updates Available"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:117
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:120
+msgid "Not Now"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:121
+msgid "View"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:167
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: message when we've done offline updates
+#: ../src/gs-update-monitor.c:171
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../src/gs-update-monitor.c:177
+msgid "Software Updates Failed"
+msgstr ""
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:179
+msgid "An important OS update failed to be installed."
+msgstr ""
+
+#: ../src/gs-update-monitor.c:185
+msgid "Review"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:188
+msgid "Show Details"
+msgstr "Taispeáin Mionsonraí"
+
+#. vim: set noexpandtab:
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "Réalta Amháin"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "Dhá Réalta"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "Trí Réalta"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "Ceithre Réalta"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "Cúig Réalta"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:136
+#, c-format
+msgid "%s is now installed"
+msgstr ""
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:140
+msgid "Launch"
+msgstr "Luchtaigh"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:166
+#, c-format
+msgid "Installation of %s failed."
+msgstr ""
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:171
+#, c-format
+msgid "Removal of %s failed."
+msgstr ""
+
+#. TRANSLATORS: window title
+#: ../src/gs-utils.c:244
+msgid "Install Third-Party Software?"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: ../src/gs-utils.c:248
+msgid "Enable Third-Party Software Source?"
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#.
+#: ../src/gs-utils.c:266
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: ../src/gs-utils.c:276
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: a software source is a repo
+#: ../src/gs-utils.c:286
+msgid "This software source must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: ../src/gs-utils.c:296
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: ../src/gs-utils.c:302
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: ../src/gs-utils.c:309
+msgid "Don't Warn Again"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: ../src/gs-utils.c:318
+msgid "Enable and Install"
+msgstr ""
+
+#: ../src/plugins/gs-plugin-appstream.c:227
+#, c-format
+msgid "No AppStream data found"
+msgstr ""
+
+#: ../src/plugins/gs-plugin-moduleset.c:130
+msgid "Featured"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "Fuaim"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Menu subcategory of Audio"
+msgid "Editing"
+msgstr "Eagarthóireacht"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Menu subcategory of Audio"
+msgid "Databases"
+msgstr "Bunachair Sonraí"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Menu subcategory of Audio"
+msgid "Disc Burning"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Menu subcategory of Audio"
+msgid "Ham Radio"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Menu subcategory of Audio"
+msgid "MIDI"
+msgstr "MIDI"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Menu subcategory of Audio"
+msgid "Mixer"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Menu subcategory of Audio"
+msgid "Music"
+msgstr "Ceol"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Menu subcategory of Audio"
+msgid "Players"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Menu subcategory of Audio"
+msgid "Recorders"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Menu subcategory of Audio"
+msgid "Sequencers"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Menu subcategory of Audio"
+msgid "Tuners"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Menu subcategory of Development Tools"
+msgid "Building"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Menu subcategory of Development Tools"
+msgid "Databases"
+msgstr "Bunachair Sonraí"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Menu subcategory of Development Tools"
+msgid "Debuggers"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Menu subcategory of Development Tools"
+msgid "GUI Designers"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Menu subcategory of Development Tools"
+msgid "IDE"
+msgstr "IDE"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Menu subcategory of Development Tools"
+msgid "Profiling"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Menu subcategory of Development Tools"
+msgid "Project Management"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Menu subcategory of Development Tools"
+msgid "Revision Control"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Menu subcategory of Development Tools"
+msgid "Translation"
+msgstr "Aistriú"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Menu subcategory of Development Tools"
+msgid "Web Development"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "Oideachas"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Menu subcategory of Education"
+msgid "Art"
+msgstr "Ealaín"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Menu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Menu subcategory of Education"
+msgid "Astronomy"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Menu subcategory of Education"
+msgid "Biology"
+msgstr "Bitheolaíocht"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Menu subcategory of Education"
+msgid "Chemistry"
+msgstr "Ceimic"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Menu subcategory of Education"
+msgid "Computer Science"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Menu subcategory of Education"
+msgid "Construction"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Menu subcategory of Education"
+msgid "Data Visualization"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Menu subcategory of Education"
+msgid "Economy"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Menu subcategory of Education"
+msgid "Electricity"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Menu subcategory of Education"
+msgid "Electronics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Menu subcategory of Education"
+msgid "Engineering"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Menu subcategory of Education"
+msgid "Geography"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Menu subcategory of Education"
+msgid "Geology"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Menu subcategory of Education"
+msgid "Geoscience"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Menu subcategory of Education"
+msgid "History"
+msgstr "Stair"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Menu subcategory of Education"
+msgid "Humanities"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Menu subcategory of Education"
+msgid "Image Processing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Menu subcategory of Education"
+msgid "Languages"
+msgstr "Teangacha"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Menu subcategory of Education"
+msgid "Literature"
+msgstr "Litríocht"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Menu subcategory of Education"
+msgid "Maps"
+msgstr "Léarscáileanna"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Menu subcategory of Education"
+msgid "Math"
+msgstr "Mata"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Menu subcategory of Education"
+msgid "Medical"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Menu subcategory of Education"
+msgid "Music"
+msgstr "Ceol"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Menu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Menu subcategory of Education"
+msgid "Parallel Computing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Menu subcategory of Education"
+msgid "Physics"
+msgstr "Fisic"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Menu subcategory of Education"
+msgid "Robotics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Menu subcategory of Education"
+msgid "Spirituality"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Menu subcategory of Education"
+msgid "Sports"
+msgstr "Spórt"
+
+#. TRANSLATORS: this is the menu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Menu subcategory of Games"
+msgid "Action"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Menu subcategory of Games"
+msgid "Adventure"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Menu subcategory of Games"
+msgid "Arcade"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Menu subcategory of Games"
+msgid "Blocks"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Menu subcategory of Games"
+msgid "Board"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Menu subcategory of Games"
+msgid "Card"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Menu subcategory of Games"
+msgid "Emulators"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Menu subcategory of Games"
+msgid "Kids"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Menu subcategory of Games"
+msgid "Logic"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Menu subcategory of Games"
+msgid "Role Playing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Menu subcategory of Games"
+msgid "Shooter"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Menu subcategory of Games"
+msgid "Simulation"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Menu subcategory of Games"
+msgid "Sports"
+msgstr "Spórt"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Menu subcategory of Games"
+msgid "Strategy"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Menu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Menu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Menu subcategory of Graphics"
+msgid "OCR"
+msgstr "OCR"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Menu subcategory of Graphics"
+msgid "Photography"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Menu subcategory of Graphics"
+msgid "Publishing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Menu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Menu subcategory of Graphics"
+msgid "Scanning"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Menu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Menu subcategory of Graphics"
+msgid "Viewer"
+msgstr "Amharcán"
+
+#. TRANSLATORS: this is the menu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "Idirlíon"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Menu subcategory of Internet"
+msgid "Chat"
+msgstr "Comhrá"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Menu subcategory of Internet"
+msgid "Dialup"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Menu subcategory of Internet"
+msgid "Email"
+msgstr "Ríomhphost"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Menu subcategory of Internet"
+msgid "Feed"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Menu subcategory of Internet"
+msgid "File Transfer"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Menu subcategory of Internet"
+msgid "Ham Radio"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Menu subcategory of Internet"
+msgid "Instant Messaging"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Menu subcategory of Internet"
+msgid "IRC Clients"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Menu subcategory of Internet"
+msgid "Monitor"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Menu subcategory of Internet"
+msgid "News"
+msgstr "Nuacht"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Menu subcategory of Internet"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Menu subcategory of Internet"
+msgid "Remote Access"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Menu subcategory of Internet"
+msgid "Telephony"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Menu subcategory of Internet"
+msgid "Video Conference"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Menu subcategory of Internet"
+msgid "Web Browser"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Menu subcategory of Internet"
+msgid "Web Development"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "Oifig"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Menu subcategory of Office"
+msgid "Calendar"
+msgstr "Féilire"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Menu subcategory of Office"
+msgid "Chart"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Menu subcategory of Office"
+msgid "Contact Management"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Menu subcategory of Office"
+msgid "Database"
+msgstr "Bunachar Sonraí"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Menu subcategory of Office"
+msgid "Dictionary"
+msgstr "Foclóir"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Menu subcategory of Office"
+msgid "Email"
+msgstr "Ríomhphost"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Menu subcategory of Office"
+msgid "Finance"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Menu subcategory of Office"
+msgid "Flow Chart"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Menu subcategory of Office"
+msgid "PDA"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Menu subcategory of Office"
+msgid "Photography"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Menu subcategory of Office"
+msgid "Presentation"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Menu subcategory of Office"
+msgid "Project Management"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Menu subcategory of Office"
+msgid "Publishing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Menu subcategory of Office"
+msgid "Spreadsheet"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Menu subcategory of Office"
+msgid "Viewer"
+msgstr "Amharcán"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Menu subcategory of Office"
+msgid "Word Processor"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "Eolaíocht"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Menu subcategory of Science"
+msgid "Art"
+msgstr "Ealaín"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Menu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Menu subcategory of Science"
+msgid "Astronomy"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Menu subcategory of Science"
+msgid "Biology"
+msgstr "Bitheolaíocht"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Menu subcategory of Science"
+msgid "Chemistry"
+msgstr "Ceimic"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Menu subcategory of Science"
+msgid "Computer Science"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Menu subcategory of Science"
+msgid "Construction"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Menu subcategory of Science"
+msgid "Data Visualization"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Menu subcategory of Science"
+msgid "Economy"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Menu subcategory of Science"
+msgid "Electricity"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Menu subcategory of Science"
+msgid "Electronics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Menu subcategory of Science"
+msgid "Engineering"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Menu subcategory of Science"
+msgid "Geography"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Menu subcategory of Science"
+msgid "Geology"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Menu subcategory of Science"
+msgid "Geoscience"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Menu subcategory of Science"
+msgid "History"
+msgstr "Stair"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Menu subcategory of Science"
+msgid "Humanities"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Menu subcategory of Science"
+msgid "Image Processing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Menu subcategory of Science"
+msgid "Languages"
+msgstr "Teangacha"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Menu subcategory of Science"
+msgid "Literature"
+msgstr "Litríocht"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Menu subcategory of Science"
+msgid "Maps"
+msgstr "Léarscáileanna"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Menu subcategory of Science"
+msgid "Math"
+msgstr "Mata"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Menu subcategory of Science"
+msgid "Medical"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Menu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Menu subcategory of Science"
+msgid "Parallel Computing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Menu subcategory of Science"
+msgid "Physics"
+msgstr "Fisic"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Menu subcategory of Science"
+msgid "Robotics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Menu subcategory of Science"
+msgid "Spirituality"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Menu subcategory of Science"
+msgid "Sports"
+msgstr "Spórt"
+
+#. TRANSLATORS: this is the menu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "Córas"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Menu subcategory of System"
+msgid "Emulator"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Menu subcategory of System"
+msgid "File Manager"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Menu subcategory of System"
+msgid "File System"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Menu subcategory of System"
+msgid "File Tools"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Menu subcategory of System"
+msgid "Monitor"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Menu subcategory of System"
+msgid "Security"
+msgstr "Slándáil"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Menu subcategory of System"
+msgid "Terminal Emulator"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Menu subcategory of Utilities"
+msgid "Accessibility"
+msgstr "Inrochtaineacht"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Menu subcategory of Utilities"
+msgid "Archiving"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Menu subcategory of Utilities"
+msgid "Calculator"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Menu subcategory of Utilities"
+msgid "Clock"
+msgstr "Clog"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Menu subcategory of Utilities"
+msgid "Compression"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Menu subcategory of Utilities"
+msgid "File Tools"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Menu subcategory of Utilities"
+msgid "Maps"
+msgstr "Léarscáileanna"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Menu subcategory of Utilities"
+msgid "Spirituality"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Menu subcategory of Utilities"
+msgid "Telephony Tools"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Menu subcategory of Utilities"
+msgid "Text Editor"
+msgstr "Eagarthóir Téacs"
+
+#. TRANSLATORS: this is the menu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "Fís"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Menu subcategory of Video"
+msgid "Editing"
+msgstr "Eagarthóireacht"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Menu subcategory of Video"
+msgid "Database"
+msgstr "Bunachar Sonraí"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Menu subcategory of Video"
+msgid "Disc Burning"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Menu subcategory of Video"
+msgid "Players"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Menu subcategory of Video"
+msgid "Recorders"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Menu subcategory of Video"
+msgid "TV"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Menu subcategory of Add-ons"
+msgid "Fonts"
+msgstr "Clónna"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Menu subcategory of Add-ons"
+msgid "Codecs"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Menu subcategory of Add-ons"
+msgid "Input Sources"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Menu subcategory of Add-ons"
+msgid "Language Packs"
+msgstr ""
+
+#: ../src/menus.ui.h:1
+msgid "_Software Sources"
+msgstr "Foinsí _Bogearraí"
+
+#: ../src/menus.ui.h:2
+msgid "_About"
+msgstr "_Maidir Leis Seo"
+
+#: ../src/menus.ui.h:3
+msgid "_Quit"
+msgstr "_Scoir"
diff --git a/po/gd.po b/po/gd.po
new file mode 100644
index 0000000..69d98e1
--- /dev/null
+++ b/po/gd.po
@@ -0,0 +1,5097 @@
+# Scottish Gaelic translation for gnome-software.
+# Copyright (C) 2015 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# GunChleoc <fios@foramnagaidhlig.net>, 2015, 2016, 2017, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2018-04-17 10:32+0000\n"
+"PO-Revision-Date: 2018-02-23 11:01+0100\n"
+"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n"
+"Language-Team: Fòram na Gàidhlig\n"
+"Language: gd\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
+"(n > 2 && n < 20) ? 2 : 3;\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Launchpad-Export-Date: 2016-04-20 09:04+0000\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Bathar-bog GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Manaidsear nan aplacaid airson GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr "Leigidh Bathar-bog leat aplacaidean is leudachain an t-siostaim ùra a lorg ’s a stàladh agus aplacaidean a chaidh a stàladh a thoirt air falbh."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr "Seallaidh Bathar-bog GNOME aplacaidean brosnaichte is mòr-chòrdte dhut le tuairisgeul feumail is iomadh glacadh-sgrìn airson gach aplacaid. Gheibh thu greim air tu aplacaidean le brabhsadh tron na roinnean-seòrsa no le lorg. ’S urrainn dhut an siostam agad ùrachadh le ùrachadh far loidhne leis cuideachd."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panail an fhoir-sheallaidh"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panail an fhiosrachaidh"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panail na feadhainn stàlaichte"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panail nan ùrachaidhean"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Fiosrachadh an ùrachaidh"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1075
+msgid "The GNOME Project"
+msgstr "Pròiseact GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Stàlaich faidhle appstream gu ionad air an t-siostam"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "A’ stàladh faidhle appstream gu ionad air an t-siostam"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Liosta dhe na pròiseactan co-chòrdail"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "Seo liosta dhe na pròiseactan co-chòrdail a bu chòir dhuinn sealltainn mar GNOME, KDE agus XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+#| msgid "Whether to manage updates in GNOME Software"
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Co-dhiù an dèid ùrachaidhean is àrdachaidhean a stiùireadh le Bathar-bog GNOME gus nach dèid"
+
+#: data/org.gnome.software.gschema.xml:11
+#| msgid ""
+#| "If disabled, GNOME Software will hide the updates panel and not perform "
+#| "any automatic updates actions."
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr "Nuair a bhios seo à comas, falaichidh Bathar-bog GNOME panail nan ùrachaidhean, cha dèan e ùrachaidhean fèin-obrachail is chan iarr e àrdachaidhean."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically download updates"
+msgstr "Co-dhiù an dèid ùrachaidhean a luchdadh a-nuas gu fèin-obrachail gus nach dèid"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background "
+"and prompts the user to install them when ready."
+msgstr "Ma tha seo an comas, luchdaichidh Bathar-bog GNOME a-nuas ùrachaidhean gu fèin-obrachail sa chùlaibh agus iarraidh e air a’ chleachdaiche an stàladh nuair a bhios iad deiseil."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Co-dhiù an dèid gus nach dèid ath-nuadhachadh gu fèin-obrachail air ceangal meadaraichte"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr "Ma tha seo an comas, théid Bathar-bog GNOME ath-nuadhachadh sa chùlaibh gu fèin-obachail fiù ma bhios ceangal meadaraichte ’ga chleachdadh (adhbharaichidh seo gun dèid meata-dàta a luchdadh a-nuas, sùil a thoirt airson ùrachaidhean is msaa agus dh’fhaoidte gun èirich cosgaisean ’na lùib)."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Ge b’ e seo a’ chiad turas a tha Bathar-bog GNOME ’ga ruith"
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "Seall rionnagan rangachaidh ris na h-aplacaidean"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Criathraich na h-aplacaidean a-rèir a’ mheòir bhunaitich a chaidh a shuidheachadh airson an tùis on taobh a-muigh"
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Seallaidh aplacaidean nach eil saor còmhradh rabhaidh mus dèid an stàladh"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr "Cò-dhiù an gabh còmhradh rabhaidh sealltainn nuair a thèid aplacaidean nach eil saor an stàladh. Stiùirichidh seo an dèid an còmhradh ud a mhùchadh gus nach dèid."
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "Liosta dhe dh’aplacaidean air a bheil fèill mhòr"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Liosta dhe na h-aplacaidean ri an cleachdadh seach an fheadhainn a mhìnich an siostam."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The last update check timestamp"
+msgstr "An àm mu dheireadh a chaidh sùil a thoirt airson ùrachadh"
+
+#: data/org.gnome.software.gschema.xml:51
+msgid "The last upgrade notification timestamp"
+msgstr "An stampa-tìde aig an àrdachadh mu dheireadh"
+
+#: data/org.gnome.software.gschema.xml:55
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "An stampa-tìde aig a’ chiad ùrachadh tèarainteachd, thèid fhalamhachadh às dèidh an ùrachaidh"
+
+#: data/org.gnome.software.gschema.xml:59
+msgid "The last update timestamp"
+msgstr "An stampa-tìde aig an ùrachadh mu dheireadh"
+
+#: data/org.gnome.software.gschema.xml:63
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Aois ann an diogan gus dearbhadh gu bheil an glacadh-sgrìn on upstream dligheach fhathast"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr "Ma thaghas tu luach mòr, cha leig sinn leas turas a dhèanamh gun fhrithealaiche chèin a cheart cho tric ach cuiridh e dàil air cuin a chì an cleachdaiche glacaidhean-sgrìn ùra. Is ciall do luach de 0 nach dèid sùil a thoirt air an fhrithealaiche idir ma tha an dealbh san tasgadan ann."
+
+#: data/org.gnome.software.gschema.xml:73
+msgid "The server to use for application reviews"
+msgstr "Am frithealaiche a thèid a chleachdadh airson lèirmheasan aplacaidean"
+
+#: data/org.gnome.software.gschema.xml:77
+msgid "The minimum karma score for reviews"
+msgstr "An sgòr karma as lugha airson lèirmheasan"
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Cha nochd lèirmheasan aig a bheil nas lugha na an karma seo."
+
+#: data/org.gnome.software.gschema.xml:82
+#| msgid "A list of official sources that should not be considered 3rd party"
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Liosta dhe na h-ionadan-tasgaidh oifigeil nach eil ’nan treas-phartaidh"
+
+#: data/org.gnome.software.gschema.xml:86
+#| msgid "A list of official sources that should be considered free software"
+msgid "A list of official repositories that should be considered free software"
+msgstr "Liosta dhe na h-ionadan-tasgaidh oifigeil a tha ’gam measadh mar bhathar-bog saor"
+
+#: data/org.gnome.software.gschema.xml:90
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "URL a’ cheadachais ri chleachdadh gus bathar-bog a mheasadh mar fhear saor"
+
+#: data/org.gnome.software.gschema.xml:94
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Stàlaich aplacaidean an trusgain airson a h-uile cleachdaiche air an t-siostam far an gabh seo dèanamh"
+
+#: data/org.gnome.software.gschema.xml:98
+msgid "Show the folder management UI"
+msgstr "Seall eadar-aghaidh gus na pasganan a stiùireadh"
+
+#: data/org.gnome.software.gschema.xml:102
+#| msgid "Allow access to the Software Sources dialog"
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Ceadaich inntrigeadh dha chòmhradh nan ionadan-tasgaidh bathair-bhog"
+
+#: data/org.gnome.software.gschema.xml:106
+msgid "Offer upgrades for pre-releases"
+msgstr "Tairg àrdachaidhean airson tionndaidhean ro-sgaoilidh"
+
+#: data/org.gnome.software.gschema.xml:110
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Seall fiosrachadh dhan chleachdaiche mur eil aplacaid saor"
+
+#: data/org.gnome.software.gschema.xml:114
+#| msgid "Show the prompt to install nonfree software sources"
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Seal còmhradh gus stàladh o ionadan-tasgaidh bathair-bhog nach eil saor"
+
+#: data/org.gnome.software.gschema.xml:118
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Seall meud an stàlaidh airson aplacaidean air liosta nan aplacaidean stàlaichte"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:122
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "An URI a mhìnicheas dè th’ ann am bathar-bog fo sheilbh ’s nach eil saor"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "Liosa de URLaichean a thomhas gu faidhlichean appstream a thèid a luchdadh a-nuas gu pasgan app-info"
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Stàlaich na faidhlichean AppStream air aon aon ionad siostaim dha na h-uile cleachdaiche"
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Cuir an comas ionad-tasgaidh nan leudachan Slige GNOME"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Stàlaich bathar-bog"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Stàlaich roghainn de bhathar-bog air an t-siostam"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Tagh na h-uile"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Na tagh gin"
+
+#: src/gnome-software.ui:24 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Bathar-bog"
+
+#: src/gnome-software.ui:43 src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "Air ais"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "N_a h-uile"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "A_ir a stàladh"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "Ù_rachaidhean"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "Lorg"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-repos-dialog.ui:6 src/gs-repos-dialog.ui:20
+#| msgid "Software Sources"
+msgid "Software Repositories"
+msgstr "Ionadan-tasgaidh bathair-bhog"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "Sgrùd an diosga"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1435
+msgid "Network Settings"
+msgstr "Roghainnean an lìonraidh"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "Ath-thòisich an-dràsta"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "Barrachd fiosrachaidh"
+
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:428
+msgid "Pending"
+msgstr "Ri dhèiligeadh"
+
+#: src/gs-app-addon-row.c:102 src/gs-app-row.ui:209 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:87
+msgid "Installed"
+msgstr "Stàlaichte"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:106 src/gs-app-row.c:217 src/gs-details-page.c:464
+#: src/gs-third-party-repo-row.c:113
+msgid "Installing"
+msgstr "’Ga stàladh"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:110 src/gs-app-row.c:223 src/gs-repo-row.c:140
+#: src/gs-third-party-repo-row.c:120
+msgid "Removing"
+msgstr "’Ga thoirt air falbh"
+
+#: src/gs-app-folder-dialog.c:309
+msgid "Folder Name"
+msgstr "Ainm a’ phasgain"
+
+#: src/gs-app-folder-dialog.c:320 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:329 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:610 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "_Sguir dheth"
+
+#: src/gs-app-folder-dialog.c:325 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Cuir ris"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Cuir ri pasgan nan aplacaid"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:124
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Modh tòiseachaidh: ‘updates’, ‘updated’, ‘installed’ no ‘overview’"
+
+#: src/gs-application.c:124
+msgid "MODE"
+msgstr "MODH"
+
+#: src/gs-application.c:126
+msgid "Search for applications"
+msgstr "Lorg airson aplacaidean"
+
+#: src/gs-application.c:126
+msgid "SEARCH"
+msgstr "LORG"
+
+#: src/gs-application.c:128
+msgid "Show application details (using application ID)"
+msgstr "Seall fiosrachadh na h-aplacaid (a-rèir ID na h-aplacaid)"
+
+#: src/gs-application.c:128 src/gs-application.c:132
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:130
+msgid "Show application details (using package name)"
+msgstr "Seall fiosrachadh na h-aplacaid (a-rèir ainm na pacaide)"
+
+#: src/gs-application.c:130
+msgid "PKGNAME"
+msgstr "AINM-PACAIDE"
+
+#: src/gs-application.c:132
+msgid "Install the application (using application ID)"
+msgstr "Stàlaich an aplacaid (a-rèir ID na h-aplacaid)"
+
+#: src/gs-application.c:134
+msgid "Open a local package file"
+msgstr "Fosgail faidhle pacaid ionadail"
+
+#: src/gs-application.c:134
+msgid "FILENAME"
+msgstr "AINM AN FHAIDHLE"
+
+#: src/gs-application.c:136
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "Seo na h-eadar-ghnìomhan air a bheilear an dùil airson a’ ghnìomha seo: “none”, “notify” no “full”"
+
+#: src/gs-application.c:139
+msgid "Show verbose debugging information"
+msgstr "Seall fiosrachadh dì-bhugachaidh briathrach"
+
+#: src/gs-application.c:141
+msgid "Show profiling information for the service"
+msgstr "Seall fiosrachadh pròifileadh airson na seirbheise"
+
+#: src/gs-application.c:143
+msgid "Quit the running instance"
+msgstr "Fàg an t-ionstans a tha a’ ruith"
+
+#: src/gs-application.c:145
+msgid "Prefer local file sources to AppStream"
+msgstr "’S fhearr leam tùsan faidhle ionadail na AppStream"
+
+#: src/gs-application.c:147
+msgid "Show version number"
+msgstr "Seall àireamh an tionndaidh"
+
+#: src/gs-application.c:344
+msgid "translator-credits"
+msgstr "GunChleoc fios@foramnagaidhlig.net\n\nLaunchpad Contributions:\n GunChleoc https://launchpad.net/~gunchleoc"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:351
+#, c-format
+msgid "About %s"
+msgstr "Mu %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:355
+msgid "A nice way to manage the software on your system."
+msgstr "Dòigh mhath gus am bathar-bog air an t-siostam agad a stiùireadh."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:172
+msgid "Visit website"
+msgstr "Tadhail air an làrach-lìn"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:177
+msgid "Install…"
+msgstr "Stàlaich…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:184
+msgid "Cancel"
+msgstr "Sguir dheth"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:191 src/gs-common.c:276 src/gs-page.c:589
+msgid "Install"
+msgstr "Stàlaich"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:198
+msgid "Update"
+msgstr "Ùraich"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:202 src/gs-app-row.c:211 src/gs-page.c:746
+#: src/gs-repos-dialog.c:336
+msgid "Remove"
+msgstr "Thoir air falbh"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:328
+msgid "Device cannot be used during update."
+msgstr "Cha ghabh an t-uidheam a chleachdadh rè ùrachaidh"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:338 src/gs-details-page.ui:988
+msgid "Source"
+msgstr "Tùs"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:69
+msgid "To continue you need to sign in."
+msgstr "Feumaidh tu clàradh a-steach mus lean thu air adhart."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:73
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "Feumaidh tu clàradh a-steach dha %s mus lean thu air adhart."
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "Seòladh puist-d"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "Tha cunntas agam mar-thà"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "Facal-faire"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "Tha mi airson cunntas a chlàradh an-dràsta"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "Dhìochuimhnich mi am facal-faire agam"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "Clàraich a-steach gu fèin-obrachail an ath-thuras"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "Cuir a-steach am PIN aon turais agad a chum a’ chlàraidh a-steach dhà-cheumnaich"
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "PIN"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr "Dearbhaich"
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "Lean air adhart"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:194
+msgid "Other"
+msgstr "Eile"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:199
+msgid "All"
+msgstr "Na h-uile"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:203
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:501
+#, c-format
+#| msgid "Featured"
+msgid "Featured %s"
+msgstr "%s brosnaichte"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:24
+#| msgid "Updated"
+msgid "Top Rated"
+msgstr "Rangachadh às àirde"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#: src/gs-category-page.ui:30 src/gs-editor.ui:296
+msgid "Name"
+msgstr "Ainm"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:137 src/gs-details-page.c:361
+msgid "Extension Settings"
+msgstr "Roghainnean nan leudachan"
+
+#: src/gs-category-page.ui:166
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr "Cleachdaidh tu leudachain air do chunnart fhèin. Ma dh’èireas duilgheadas sam bith leis an t-siostam, mholamaid gun cuir thu à comas iad."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:197
+msgid "Show"
+msgstr "Seall"
+
+#: src/gs-category-page.ui:219
+msgid "Subcategories filter menu"
+msgstr "Clàr-taice criathradh nam fo-roinnean-seòrsa"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:267
+msgid "Sort"
+msgstr "Seòrsaich"
+
+#: src/gs-category-page.ui:288
+msgid "Subcategories sorting menu"
+msgstr "Clàr-taice seòrsachaidh nam fo-roinnean-seòrsa"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:206
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Cuir a-steach àireamh eadar 1 is %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:269
+msgid "Choose an application:"
+msgstr "Tagh aplacaid:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:136
+msgid "OS updates are now installed"
+msgstr "Tha ùrachaidhean an t-siostam-obrachaidh air an stàladh"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:139
+msgid "Recently installed updates are available to review"
+msgstr "Tha na h-ùrachaidhean a chaidh a stàladh o chionn ghoirid deiseil airson lèirmheas"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:143
+#, c-format
+msgid "%s is now installed"
+msgstr "Tha %s air a stàladh a-nis"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:146
+msgid "Application is ready to be used."
+msgstr "Tha an t-aplacaid deiseil ri cleachdadh."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:152
+msgid "Launch"
+msgstr "Tòisich"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "A bheil thu airson bathar-bog treas-phàrtaidh a stàladh?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214 src/gs-repos-dialog.c:247
+#| msgid "Enable Third-Party Software Source?"
+msgid "Enable Third-Party Software Repository?"
+msgstr "A bheil thu airson ionad-tasgaidh bathair-bhog treas-phàrtaidh a chur an comas?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:230
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr "Chan eil %s na <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">bhathar-bhog saor is open source</a> agus tha e ga sholar le “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:240
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "Tha %s ga sholar le “%s”."
+
+#: src/gs-common.c:249
+#| msgid "This software source must be enabled to continue installation."
+msgid "This software repository must be enabled to continue installation."
+msgstr "Feumaidh tu an t-ionad-tasgaidh bathair-bhog seo a chur an comas mus lean thu air adhart leis an stàladh."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:259
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Dh’fhaoidte gu bheil e mì-laghail %s a stàladh no a chleachdadh ann an cuid a dhùthchannan."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:265
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Dh’fhaoidte gu bheil e mì-laghail an codec seo a stàladh no a chleachdadh ann an cuid a dhùthchannan."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:272
+msgid "Don’t Warn Again"
+msgstr "Na seall an rabhadh seo dhomh a-rithist"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:281
+msgid "Enable and Install"
+msgstr "Cuir an comas is stàlaich"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:426
+msgid "Detailed errors from the package manager follow:"
+msgstr "Seo fiosrachadh air na mearachdan o mhanaidsear nam pacaidean:"
+
+#: src/gs-common.c:445 src/gs-details-page.ui:595
+msgid "Details"
+msgstr "Fiosrachadh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "Gun ainneart cartùin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "Pearsachan cartùin ann an suidheachaidhean nach eil sàbhailte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Pearsachan cartùin ri còmhstri ionnsaigheach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "Ainneart grafaigeach le pearsachan cartùin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "Gun ainneart fantastach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Pearsachan ann an suidheachaidhean nach eil sàbhailte gun choltas na fìrinne orra"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Pearsachan ri còmhstri ionnsaigheach gun choltas na fìrinne oirre"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Ainneart grafaigeach gun choltas na fìrinne air"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "Gun ainneart le coltas na fìrinne air"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Pearsachan fìor-riochdail ann an suidheachaidhean nach eil sàbhailte gu socair"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Pearsachan fìor-riochdail ri còmhstri ionnsaigheach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "Ainneart grafaigeach le pearsachan fìor-riochdail"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "Gun dòrtadh-fala"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "Dòrtadh-fala gun choltas na fìrinne air"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "Dòrtadh-fala fìor-riochdail"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Dòrtadh-fala agus milleadh buill na bodhaige"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "Gun ainneart gnèitheach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "Neach-èigneachadh agus giùlan feise ainneartach eile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "Gun iomradh air deoch-làidir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "Iomradh air deoch-làidir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "Gabhail dibhe-làidir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "Gun iomradh air drugaichean neo-cheadaichte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "Iomradh air drugaichean neo-cheadaichte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "Cleachdadh dhrugaichean neo-cheadaichte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "Iomradh air tombaca"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "Cleachdadh tombaca"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "Gun lomnochd sam bith"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "Lomnochd maiseach gu goirid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "Lomnochd gu fada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "Gun iomradh no sealladh feise"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "Iomraidhean no seallaidhean buaireasach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "Iomraidhean no seallaidhean feise"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "Giùlan feise grafaigeach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "Gun droch-chainnt sam bith"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "Droch-chainnt ainneamh no shocair"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "Cleachdadh droch-chainnte measarra"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "Droch-chainnt làidir no thric"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "Gun àbhachdas neo-iomchaidh sam bith"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "Àbhachdas slapstick"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "Àbhachdas garbh no taighe-bhig"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "Àbhachdas inbheach no feise"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "Gun chainnt leth-bhreithe sam bith"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "Dìmeas air seòrsa sònraichte de dhaoine"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Leth-bhreith ag amas air cron fhaireachdainnean"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Leth-bhreith follaiseach air gnè, gnèitheachd, cinneadh no creideamh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "Gun sanasachd sam bith"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "Sanasachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Iomraidhean follaiseach air branndaichean sònraichte no batharan le comharra-malairt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+#| msgid "Players are encouraged to purchase specific real-world items"
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Tha na cleachdaichean ’gam brosnachadh ach an ceannaich iad rudan sònraichte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "Gun chearrachas sam bith"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "Cearrachas air tachartasan tuaireamach le tòcanan no creideasan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "Cearrachas le airgead “cluiche”"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "Cearrachas le fìor-airgead"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "Gun chomas gus airgead a chosg"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+#| msgid "Players are encouraged to purchase specific real-world items"
+msgid "Users are encouraged to donate real money"
+msgstr "Tha na cleachdaichean ’gam brosnachadh ach an doir iad tabhartas airgid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "Ability to spend real money in-game"
+msgstr "Comas gus fìor-airgead a chosg am broinn a’ gheama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+#| msgid "No way to chat with other players"
+msgid "No way to chat with other users"
+msgstr "Gun chomas cabadaich le cleachdaichean eile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+#| msgid "Player-to-player game interactions without chat functionality"
+msgid "User-to-user game interactions without chat functionality"
+msgstr "Gnìomhan geama eadar cleachdaichean sa gheama gun ghleus cabadaich"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+#| msgid "Uncontrolled chat functionality between players"
+msgid "Moderated chat functionality between users"
+msgstr "Gleus cabadaich le maoir eadar na cleachdaichean"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+#| msgid "Uncontrolled chat functionality between players"
+msgid "Uncontrolled chat functionality between users"
+msgstr "Gleus cabadaich gun stiùireadh eadar na cleachdaichean"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+#| msgid "No way to talk with other players"
+msgid "No way to talk with other users"
+msgstr "Gun chomas bruidhinn ri cleachdaichean eile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+#| msgid "Uncontrolled audio or video chat functionality between players"
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Gleus cabadaich fuaime no video gun stiùireadh eadar na cleachdaichean"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Gun cho-roinneadh ainmean-cleachdaiche airson lìonraidhean sòisealta no sheòlaidhean puist-d"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "Sharing social network usernames or email addresses"
+msgstr "Co-roinneadh ainmean-cleachdaiche airson lìonraidhean sòisealta no sheòlaidhean puist-d"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "No sharing of user information with 3rd parties"
+msgstr "Gun cho-roinneadh fiosrachadh a’ chleachdaiche le treas-phàrtaidhean"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Checking for the latest application version"
+msgstr "A’ toirt sùil airson an tionndaidh as ùire dhen aplacaid"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Co-roinneadh dàta diagnosachd nach leig le daoine eile an cleachdaiche aithneachadh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:276
+#| msgid "Sharing user information with 3rd parties"
+msgid "Sharing information that lets others identify the user"
+msgstr "Co-roinneadh fiosrachaidh a leigeas le daoine eile an cleachdaiche aithneachadh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No sharing of physical location to other users"
+msgstr "Gun cho-roinneadh fiosrachaidh air far a bheil thu le cleachdaichean eile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:282
+msgid "Sharing physical location to other users"
+msgstr "Co-roinneadh far a bheil thu le cleachdaichean eile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+#| msgid "No references to alcohol"
+msgid "No references to homosexuality"
+msgstr "Gun iomradh air co-sheòrsachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+#| msgid "No references to alcohol"
+msgid "Indirect references to homosexuality"
+msgstr "Leth-iomradh air co-sheòrsachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:293
+msgid "Kissing between people of the same gender"
+msgstr "Dithis dhen aon ghnè a’ toirt pòg"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Giùlan feise grafaigeach eadar dithis dhen aon ghnè"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:299
+#| msgid "No references to alcohol"
+msgid "No references to prostitution"
+msgstr "Gun iomradh air siùrsachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:302
+#| msgid "Provocative references or depictions"
+msgid "Indirect references to prostitution"
+msgstr "Leth-iomradh air siùrsachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+#| msgid "Provocative references or depictions"
+msgid "Direct references of prostitution"
+msgstr "Iomradh dìreach air siùrsachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:308
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Sealladh grafaigeach de shiùrsachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:311
+#| msgid "No references to alcohol"
+msgid "No references to adultery"
+msgstr "Gun iomradh air adhaltranas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+#| msgid "No references to alcohol"
+msgid "Indirect references to adultery"
+msgstr "Leth-iomradh air adhaltranas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+#| msgid "No references to alcohol"
+msgid "Direct references of adultery"
+msgstr "Iomradh dìreach air adhaltranas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:320
+msgid "Graphic depictions of the act of adultery"
+msgstr "Sealladh grafaigeach de dh’adhaltranas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:323
+#| msgid "No sexual violence"
+msgid "No sexualized characters"
+msgstr "Gun phearsachan drabasta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Scantily clad human characters"
+msgstr "Pearsachan daonna le aodach gann"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:329
+msgid "Overtly sexualized human characters"
+msgstr "Pearsachan daonna drabasta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:332
+#| msgid "No references to alcohol"
+msgid "No references to desecration"
+msgstr "Gun iomradh air mì-naomhachadh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Depictions or references to historical desecration"
+msgstr "Sealladh no iomradh air mì-naomhachadh eachdraidheil"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:338
+msgid "Depictions of modern-day human desecration"
+msgstr "Sealladh no iomradh air mì-naomhachadh daonna an latha an-diugh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Sealladh grafaigeach air mì-naomhachadh an latha an-diugh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No visible dead human remains"
+msgstr "Gun sealladh air iarsmadh daonna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:347
+msgid "Visible dead human remains"
+msgstr "Sealladh air iarsmadh daonna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Iarsmadh daonna nochdte ris na dùilean"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:353
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Sealladh grafaigeach air mì-naomhachadh bodhaigean daonna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:356
+#| msgid "No references to alcohol"
+msgid "No references to slavery"
+msgstr "Gun iomradh air tràilleachd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:359
+msgid "Depictions or references to historical slavery"
+msgstr "Sealladh no iomradh air tràilleachd eachdraidheil"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:362
+msgid "Depictions of modern-day slavery"
+msgstr "Sealladh no iomradh air tràilleachd an latha an-diugh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:365
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Sealladh grafaigeach air tràlleachd an latha an-diugh"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:295
+msgid "An application"
+msgstr "Aplacaid"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:301
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "Tha %s ag iarraidh taic a bharrachd airson fòrmatan faidhle."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:303
+msgid "Additional MIME Types Required"
+msgstr "Tha feum air seòrsaichean MIME a bharrachd"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:307
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "Tha %s ag iarraidh cruthan-clò a bharrachd."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:309
+msgid "Additional Fonts Required"
+msgstr "Tha feum air cruthan-clò a bharrachd"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:313
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "Tha %s ag iarraidh barrachd codecs ioma-mheadhan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:315
+msgid "Additional Multimedia Codecs Required"
+msgstr "Tha feum air codecs ioma-mheadhain a bharrachd"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:319
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "Tha %s ag iarraidh draibhearan clò-bhualadairean a bharrachd."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:321
+msgid "Additional Printer Drivers Required"
+msgstr "Tha feum air draibhearan clò-bhualadairean a bharrachd"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:325
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "Tha %s ag iarraidh pacaidean a bharrachd."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:327
+msgid "Additional Packages Required"
+msgstr "Tha feum air pacaidean a bharrachd"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:336
+msgid "Find in Software"
+msgstr "Lorg sa bhathar-bhog"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:286 src/gs-details-page.c:314
+#: src/gs-details-page.ui:206 src/gs-third-party-repo-row.c:97
+#: src/gs-upgrade-banner.ui:146
+msgid "_Install"
+msgstr "_Stàlaich"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:319
+msgid "_Update"
+msgstr "Ùraic_h"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:332 src/gs-third-party-repo-row.c:89
+msgid "_Install…"
+msgstr "_Stàlaich…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:366
+msgid "_Launch"
+msgstr "_Tòisich"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:391 src/gs-details-page.ui:241
+msgid "_Remove"
+msgstr "Thoi_r air falbh"
+
+#: src/gs-details-page.c:459
+msgid "Removing…"
+msgstr "’Ga thoirt air falbh…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:478
+msgid "Pending installation…"
+msgstr "Ri stàladh…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:485
+#| msgid "Setting up updates…"
+msgid "Pending update…"
+msgstr "Ri ùrachadh…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:802
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Cha ghabh an aplacaid seo a chleachdadh ach fad a bhios tu ceangailte ris an eadar-lìon."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:967
+msgctxt "version"
+msgid "Unknown"
+msgstr "Chan eil fhios"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:980
+msgctxt "updated"
+msgid "Never"
+msgstr "A-riamh"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1028
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Chan eil fhios"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1425
+msgid "You need internet access to write a review"
+msgstr "Feumaidh ceangal dhan eadar-lìon a bhith agad mus sgrìobh thu lèirmheas"
+
+#: src/gs-details-page.c:1559
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Cha b’ urrainn dhuinn “%s” a lorg"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2162
+msgid "Public domain"
+msgstr "Public Domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2165
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2172
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2182 src/gs-details-page.ui:1383
+msgid "Free Software"
+msgstr "Bathar-bog saor"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2239
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Gabhaidh an luchd-cleachdaidh ris a’ cheadachas seo:"
+msgstr[1] "Gabhaidh an luchd-cleachdaidh ris na ceadachasan seo:"
+msgstr[2] "Gabhaidh an luchd-cleachdaidh ris na ceadachasan seo:"
+msgstr[3] "Gabhaidh an luchd-cleachdaidh ris na ceadachasan seo:"
+
+#: src/gs-details-page.c:2266 src/gs-details-page.ui:1492
+msgid "More information"
+msgstr "Barrachd fiosrachaidh"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Duilleag an fhiosrachaidh"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:346
+msgid "_Add shortcut"
+msgstr "Cuir _ath-ghoirid ris"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:361
+msgid "Re_move shortcut"
+msgstr "Thoir air falbh an ath-_ghoirid"
+
+#: src/gs-details-page.ui:456
+msgid "No screenshot provided"
+msgstr "Cha deach glacadh-sgrìn a sholar"
+
+#: src/gs-details-page.ui:492
+#| msgid "Software Source Included"
+msgid "Software Repository Included"
+msgstr "Tha ionad-tasgaidh bathair-bhog ’na bhroinn"
+
+#: src/gs-details-page.ui:493
+#| msgid ""
+#| "This application includes a software source which provides updates, as "
+#| "well as access to other software."
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr "Gabhaidh am bathar-bog seo a-steach ionad-tasgaidh bathair-bhog a bheir ùrachaidhean dhut cho math ri inntrigeadh gu bathar-bog eile."
+
+#: src/gs-details-page.ui:506
+#| msgid "No Software Source Included"
+msgid "No Software Repository Included"
+msgstr "Chan eil ionad-tasgaidh bathair-bhog ’na bhroinn"
+
+#: src/gs-details-page.ui:507
+#| msgid ""
+#| "This application does not include a software source. It will not be "
+#| "updated with new versions."
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr "Cha ghabh an aplacaid seo a-steach ionad-tasgaidh bathair-bhog. Cha dèid a h-ùrachadh le tionndaidhean ùra."
+
+#: src/gs-details-page.ui:521
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "Bheir an sgaoileadh agad am bhathar-bog seo dhut mar-thà is cha bu chòir dhut dad a chur ’na àite."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:534
+#| msgid "Software Source Identified"
+msgid "Software Repository Identified"
+msgstr "Chaidh ionad-tasgaidh bathair-bhog aithneachadh"
+
+#: src/gs-details-page.ui:535
+#| msgid ""
+#| "Adding this software source will give you access to additional software "
+#| "and upgrades."
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr "Ma chuireas tu an ionad-tasgaidh bathair-bhog seo ris, gheibh thu inntrigeadh dha bharrachd bathair-bhog ’s ùrachaidhean."
+
+#: src/gs-details-page.ui:536
+#| msgid "Only use software sources that you trust."
+msgid "Only use software repositories that you trust."
+msgstr "Na cleachd ach ionadan-tasgaidh bathair-bhog sa bheil earbsa agad."
+
+#: src/gs-details-page.ui:552
+msgid "_Website"
+msgstr "_Làrach-lìn"
+
+#: src/gs-details-page.ui:567
+msgid "_Donate"
+msgstr "Thoir _tìodhlac dhuinn"
+
+#: src/gs-details-page.ui:701
+msgid "Localized in your Language"
+msgstr "Air eagar-theangachadh dhan chànan agad"
+
+#: src/gs-details-page.ui:713
+msgid "Documentation"
+msgstr "Docamaideadh"
+
+#: src/gs-details-page.ui:725
+msgid "Release Activity"
+msgstr "Gnìomhachd sgaoilidh"
+
+#: src/gs-details-page.ui:737
+msgid "System Integration"
+msgstr "Filleadh a-steach dhan t-siostam"
+
+#: src/gs-details-page.ui:749
+msgid "Sandboxed"
+msgstr "Ann am bogsa-gainmhich"
+
+#: src/gs-details-page.ui:774
+msgid "Version"
+msgstr "Tionndadh"
+
+#: src/gs-details-page.ui:811
+msgid "Age Rating"
+msgstr "Rangachadh aoise"
+
+#: src/gs-details-page.ui:849
+msgid "Updated"
+msgstr "Air ùrachadh"
+
+#: src/gs-details-page.ui:884
+msgid "Category"
+msgstr "Roinn-seòrsa"
+
+#: src/gs-details-page.ui:922
+msgid "Installed Size"
+msgstr "Meud an stàlaidh"
+
+#: src/gs-details-page.ui:955
+msgid "Download Size"
+msgstr "Meud an luchdaidh a-nuas"
+
+#: src/gs-details-page.ui:1021
+msgid "Developer"
+msgstr "Leasaichear"
+
+#: src/gs-details-page.ui:1055
+msgid "License"
+msgstr "Ceadachas"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1075
+msgid "Free"
+msgstr "Saor"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1092
+msgid "Proprietary"
+msgstr "Fo sheilbh"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1109 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "Chan eil fhios"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1163 src/gs-installed-page.c:490
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "Tuilleadain"
+
+#: src/gs-details-page.ui:1176
+msgid "Selected add-ons will be installed with the application."
+msgstr "Thèid roghainn de thuilleadain a stàladh leis an aplacaid."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1219
+msgid "Reviews"
+msgstr "Lèirmheasan"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1235
+msgid "_Write a Review"
+msgstr "Sgrìobh _lèirmheas"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1257
+msgid "_Show More"
+msgstr "_Seall barrachd"
+
+#: src/gs-details-page.ui:1400
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr "Is ciall dha gum faodar am bathar-bog saor a ruith, lethbhreac dheth a dhèanamh ’s a sgaoileadh, sgrùdadh is atharrachadh mar a thograr."
+
+#: src/gs-details-page.ui:1459
+msgid "Proprietary Software"
+msgstr "Bathar-bog fo sheilbh"
+
+#: src/gs-details-page.ui:1476
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr "Is ciall dha seo gur ann le neach no companaidh a tha sa bhathar-bhog. Bidh cuingeachaidhean an sàs air mar a thèid a chleachdadh agus cha ghabh am bun-tùs aige inntrigeadh mar as trice."
+
+#: src/gs-details-page.ui:1521
+msgid "Unknown Software License"
+msgstr "Ceadachas bathair-bhog nach aithne dhuinn"
+
+#: src/gs-details-page.ui:1538
+msgid "The license terms of this software are unknown."
+msgstr "Chan aithne dhuinn teirmichean ceadachas a’ bhathair-bhog seo."
+
+#: src/gs-details-page.ui:1565
+msgid "The application was rated this way because it features:"
+msgstr "Chaidh an aplacaid a rangachadh mar seo on a bhios na leanas aice:"
+
+#: src/gs-details-page.ui:1591
+msgid "No details were available for this rating."
+msgstr "Chan robh fhiosrachadh ri fhaighinn airson an rangachaidh seo."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "Tha an CSS mar bu chòir!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "Dh’fhàillig le luchdadh faidhle"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "Atharraichean gun sàbhaladh"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "Chaidh liosta nan aplacaidean a luchdadh mar-thà."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "Co-aonaich sgrìobhainnean"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "Tilg air falbh na h-atharraichean"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "Fosgail faidhle AppStream"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "F_osgail"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "_Sàbhail"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "Cha b’ urrainn dhuinn am faidhle a shàbhaladh"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "Chaidh bratach %s a sguabadh às."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "Chaidh co-dhealbhachd a’ bhrataich a sguabadh às."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "Tha atharraichean gun sàbhaladh air liosta nan aplacaid."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr "Cleachd logadh briathrach"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "Dealbhaiche brataich airson bathar-bog GNOME"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr "Chan eil dealbhadh ann"
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr "Teachdaireachd mearachd an-seo"
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr "ID na h-aplacaid"
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "Gearr-chunntas"
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr "Taghadh an deasaiche"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr "San roinn-seòrsa “Brosnaichte”"
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr "Neo-dhèan"
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Dealbhaiche brataich"
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr "Bratach ùr"
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr "Ion-phortaich o fhaidhle"
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr "Às-phortaich gu faidhle"
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr "Sguab às an dealbhachadh"
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr "Aplacaid bhrosnaichte"
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr "Àrdachadh an t-siostaim-obrachaidh"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:147
+msgid " and "
+msgstr " ’s "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:150
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:176
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Cruthan-clò ri am faighinn airson an sgriobt %s"
+msgstr[1] "Cruthan-clò ri am faighinn airson nan sgriobtaichean %s"
+msgstr[2] "Cruthan-clò ri am faighinn airson nan sgriobtaichean %s"
+msgstr[3] "Cruthan-clò ri am faighinn airson nan sgriobtaichean %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:184
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Bathar-bog ri fhaighinn airson %s"
+msgstr[1] "Bathar-bog ri fhaighinn airson %s"
+msgstr[2] "Bathar-bog ri fhaighinn airson %s"
+msgstr[3] "Bathar-bog ri fhaighinn airson %s"
+
+#: src/gs-extras-page.c:226
+msgid "Unable to Find Requested Software"
+msgstr "Cha deach leinn am bathar-bog a chaidh iarraidh a lorg"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "%s not found"
+msgstr "Cha deach %s a lorg"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:332
+msgid "on the website"
+msgstr "air an làrach-lìn"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Chan eil aplacaid ri làimh a bheir am faidhle %s dhut."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:343 src/gs-extras-page.c:354 src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus na h-aplacaidean a tha a dhìth fhaighinn air %s ma dh’fhaoidte."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350 src/gs-extras-page.c:372
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Chan eil aplacaid ri làimh a bheir taic ri %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:361
+#, c-format
+msgid "%s is not available."
+msgstr "Chan eil %s ri làimh."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus aplacaid fhaighinn a bheir taic dhan fhòrmat seo air %s ma dh’fhaoidte."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Chan eil cruth-clò ri fhaighinn a bheir taic ris an sgriobt %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus barrachd chruthan-clò fhaighinn air %s ma dh’fhaoidte."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394 lib/gs-plugin-loader.c:1480
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Chan eil codec ri làimh ’na thuilleadan airson an fhòrmait %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus codec fhaighinn a chluicheas am fòrmat seo air %s ma dh’fhaoidte."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Chan eil goireas Plasma ri làimh a bheir taic ri %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus barrachd ghoireasan Plasma fhaighinn air %s ma dh’fhaoidte."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:416
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Chan eil draibhear clò-bhualadair ri làimh airson %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:420
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus draibhear fhaighinn bheir taic dhan chlò-bhualadair seo air %s ma dh’fhaoidte."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:464
+msgid "this website"
+msgstr "an làrach-lìn seo"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:468
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "Gu mì-fhortanach, cha deach an %s a bha thu a’ sireadh a lorg. Tadhail air %s airson barrachd fiosrachaidh."
+msgstr[1] "Gu mì-fhortanach, cha deach an %s a bha thu a’ sireadh a lorg. Tadhail air %s airson barrachd fiosrachaidh."
+msgstr[2] "Gu mì-fhortanach, cha deach na %s a bha thu a’ sireadh a lorg. Tadhail air %s airson barrachd fiosrachaidh."
+msgstr[3] "Gu mì-fhortanach, cha deach na %s a bha thu a’ sireadh a lorg. Tadhail air %s airson barrachd fiosrachaidh."
+
+#: src/gs-extras-page.c:539 src/gs-extras-page.c:595 src/gs-extras-page.c:634
+msgid "Failed to find any search results"
+msgstr "Cha deach toradh a lorg"
+
+#: src/gs-extras-page.c:828
+#, c-format
+msgid "%s file format"
+msgstr "fòrmat faidhle %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Duilleag nan codec"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "Fàilte"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "Fàilte dhan bhathar-bhog"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr "Leigidh Bathar-bog leat a h-uile bathar-bog air a bheil thu feumach a stàladh, a h-uile rud san aon àite. Seall air na mholamaid, brabhsaich na roinnean-seòrsa no lorg airson nan aplacaidean a thogras tu."
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_Tiugainn dhan bhùth"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "Beàrnadh"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "Meud nam beàrnan eadar a’ chlann"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "Air a thoirt air falbh"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "Stàlaichte"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:95
+msgctxt "app status"
+msgid "Updated"
+msgstr "Air ùrachadh"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:101
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Chan eil fhios"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "Eachdraidh"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:486
+msgid "System Applications"
+msgstr "Aplacaidean an t-siostaim"
+
+#: src/gs-installed-page.c:618
+msgid "Click on items to select them"
+msgstr "Briog air nithean gus an taghadh"
+
+#: src/gs-installed-page.c:820
+msgid "Select"
+msgstr "Tagh"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Duilleag na feadhainn stàlaichte"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_Cuir ri pasgan…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "_Gluais gu pasgan…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "Thoi_r air falbh on phasgan"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:75
+msgid "Software catalog is being downloaded"
+msgstr "Cha catalog a’ bhathair-bhog ’ga luchdadh a-nuas"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:79
+msgid "Software catalog is being loaded"
+msgstr "Cha catalog a’ bhathair-bhog ’ga luchdadh"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "A’ luchdadh na duilleige"
+
+#: src/gs-loading-page.ui:53
+msgid "Starting up…"
+msgstr "A’ tòiseachadh…"
+
+#: src/gs-menus.ui:7
+#| msgid "_Software Sources"
+msgid "_Software Repositories"
+msgstr "_Ionadan-tasgaidh bathair-bhog"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_Mu dhèidhinn"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "_Fàg an-seo"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Dèan maorsainneachd air an duilleag"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "Chan eil lèirmheas sam bith feumach air maorsainneachd"
+
+#. add button
+#: src/gs-overview-page.c:330
+msgid "More…"
+msgstr "Barrachd…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:496
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplacaidean fuaime ⁊ video a mholamaid"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:501
+msgid "Recommended Games"
+msgstr "Geamannan a mholamaid"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:506
+msgid "Recommended Graphics Applications"
+msgstr "Aplacaidean grafaigeachd a mholamaid"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:511
+msgid "Recommended Productivity Applications"
+msgstr "Aplacaidean dèanadais a mholamaid"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:889 src/gs-repos-dialog.c:840
+msgid "Access additional software from selected third party sources."
+msgstr "Inntrig barrachd bathair-bog o thaghadh de thùsan threas-phàrtaidhean."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:893 src/gs-repos-dialog.c:844
+#| msgid ""
+#| "Proprietary software has restrictions on use and access to source code."
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr "Tha cuid dhen bhathar-bhog seo fo shealbh agus ri linn sin, tha cuingeachaidhean air a chleachdaidh, air a’ cho-roinneadh is air inntrigeadh dhan bhun-tùs."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:898 src/gs-repos-dialog.c:849
+msgid "Find out more…"
+msgstr "Barrachd fiosrachaidh…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:906 src/gs-repos-dialog.c:252
+msgid "Enable"
+msgstr "Cuir an comas"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Duilleag an fhoir-sheallaidh"
+
+#: src/gs-overview-page.ui:49
+#| msgid "Enable Third-Party Software Source?"
+msgid "Enable Third Party Software Repositories?"
+msgstr "A bheil thu airson ionadan-tasgaidh bathair-bhog threas-phàrtaidhean a chur an comas?"
+
+#: src/gs-overview-page.ui:117
+msgid "Featured Application"
+msgstr "Aplacaid bhrosnaichte"
+
+#: src/gs-overview-page.ui:150
+msgid "Categories"
+msgstr "Roinnean-seòrsa"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:310
+msgid "Editor’s Picks"
+msgstr "Taghadh an deasaiche"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:348
+msgid "Recent Releases"
+msgstr "Sgaoilidhean o chionn ghoirid"
+
+#: src/gs-overview-page.ui:435
+msgid "No Application Data Found"
+msgstr "Cha deach dàta na h-aplacaid a lorg"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:489
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "A bheil thu cinnteach gu bheil thu airson %s a cheannach?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:493
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "Thèid %s a stàladh agus %s iarraidh ort."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:506
+msgid "Purchase"
+msgstr "Ceannaich"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:580
+#, c-format
+msgid "Prepare %s"
+msgstr "Ullaich %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:715
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "A bheil thu cinnteach gu bheil thu airson an tùs %s a thoirt air falbh?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:719
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr "Thèid a h-uile aplacaid o %s a thoirt air falbh agus feumaidh tu an tùs a stàladh às ùr ma tha thu airson an cleachdadh a-rithist."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:727
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "A bheil thu cinnteach gu bheil thu airson %s a thoirt air falbh?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:730
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "Thèid %s a thoirt air falbh agus feumaidh tu a stàladh às ùr ma tha thu airson a chleachdadh a-rithist."
+
+#: lib/gs-plugin-loader.c:1483
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr "Gheibh thu fiosrachadh mu %s cho math ri roghainnean gus codec fhaighinn a chluicheas am fòrmat seo air an làrach-lìn."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:69 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (air a stàladh)"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-popular-tile.c:205 src/gs-shell-search-provider.c:271
+#, c-format
+#| msgid "Source"
+msgid "Source: %s"
+msgstr "Tùs: %s"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr "Tha bathar-bog stàlaichte agad nach eil co-chòrdail ri %s. Ma leanas tu air adhart, seo na thèid a thoirt air falbh gu fèin-obrachail rè an àrdachaidh:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "Bathar-bog nach eil co-chòrdail"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_Lean air adhart"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:110
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplacaid air a stàladh"
+msgstr[1] "%u aplacaid air a stàladh"
+msgstr[2] "%u aplacaidean air an stàladh"
+msgstr[3] "%u aplacaid air an stàladh"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u tuilleadan air a stàladh"
+msgstr[1] "%u thuilleadan air a stàladh"
+msgstr[2] "%u tuilleadain air an stàladh"
+msgstr[3] "%u tuilleadan air an stàladh"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplacaid"
+msgstr[1] "%u aplacaid"
+msgstr[2] "%u aplacaidean"
+msgstr[3] "%u aplacaid"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:131
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tuilleadan"
+msgstr[1] "%u thuilleadan"
+msgstr[2] "%u tuilleadain"
+msgstr[3] "%u tuilleadan"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:138
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s is %s air an stàladh"
+msgstr[1] "%s is %s air an stàladh"
+msgstr[2] "%s is %s air an stàladh"
+msgstr[3] "%s is %s air an stàladh"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:312
+#, c-format
+#| msgid "“%s”"
+msgid "Remove “%s”?"
+msgstr "A bheil thu airson “%s” a thoirt air falbh?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:317
+#, c-format
+#| msgid "Unable to find “%s”"
+msgid "Disable “%s”?"
+msgstr "A bheil thu airson “%s” a chur à comas?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:321
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr "Chan fhaigh am bathar-bog a chaidh a stàladh on ionad-tasgaidh seo ùrachaidhean tuilleadh, a’ gabhail a-steach càraidhean tèarainteachd."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:339
+#| msgid "Enable"
+msgid "Disable"
+msgstr "Cuir à comas"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:750
+msgid "the operating system"
+msgstr "an siostam-obrachaidh"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:819 src/gs-repos-dialog.c:855
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Cuiridh na h-ionadan-tasgaidh seo ris a’ bhathar-bhog tùsail a bheir %s dhut."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:837
+msgid "Third Party Repositories"
+msgstr "Ionadan-tasgaidh threas-phàrtaidhean"
+
+#: src/gs-repos-dialog.ui:82
+#| msgid "Additional Sources"
+msgid "No Additional Repositories"
+msgstr "Gun ionadan-tasgaidh a bharrachd"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:110
+#| msgid "Enable"
+msgid "_Enable"
+msgstr "_Cuir an comas"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:119
+#| msgid "Remove…"
+msgid "_Remove…"
+msgstr "Thoi_r air falbh…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:124
+msgid "_Disable…"
+msgstr "_Cuir à comas"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:132
+#| msgid "Enable"
+msgid "Enabling"
+msgstr "’Ga chur an comas"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:144
+#| msgid "Installing"
+msgid "Disabling"
+msgstr "’Ga chur à comas"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:158
+#| msgid "Enable"
+msgid "Enabled"
+msgstr "Air a chur an comas"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:164
+msgid "Disabled"
+msgstr "Air a chur à comas"
+
+#: src/gs-repo-row.ui:89
+msgid "URL"
+msgstr "URL"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:95
+msgid "Hate it"
+msgstr "Is lugha orm i"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:99
+msgid "Don’t like it"
+msgstr "Cha toigh leam i"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:103
+msgid "It’s OK"
+msgstr "Tha i ceart gu leòr"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:107
+msgid "Like it"
+msgstr "Is toigh leam i"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:111
+msgid "Love it"
+msgstr "Is fìor-thoigh leam i"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:133
+msgid "Please take more time writing the review"
+msgstr "Cuir seachad barrachd ùine a’ sgrìobhadh an lèirmheis"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:137
+msgid "Please choose a star rating"
+msgstr "Tagh rionnag rangachaidh"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:141
+msgid "The summary is too short"
+msgstr "Tha an gearr-chunntas ro ghoirid"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:145
+msgid "The summary is too long"
+msgstr "Tha an gearr-chunntas ro fhada"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:149
+msgid "The description is too short"
+msgstr "Tha an tuairisgeul ro ghoirid"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:153
+msgid "The description is too long"
+msgstr "Tha an tuairisgeul ro fhada"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "Dèan lèirmheas"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "_Cuir a-null"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "Rangachadh"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "Thoir seachad gearr-chunntas air an lèirmheas agad, can: “Sàr-aplacaid, mholainn-sa i”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "Lèirmheas"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Dè do bheachd air an aplacaid? Feuch an doir thu seachad adhbharan airson do bheachdan."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr "rangachaidhean iomlan"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "’S urrainn dhut aithris a dhèanamh air lèirmheasan ri linn droch-chainnt, mì-mhodha no giùlain leth-bhreithich."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "Nuair a bhios aithris air a dhèanamh air, thèid lèirmheas fhalach gus an dug rianaire sùil air."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "Ag aithris lèirmheas"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "Dèan aithris"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "A bheil an lèirmheas seo feumail dhut?"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "Tha"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "Chan eil"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "Coma co-dhiù"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "Dèan aithris…"
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "Thoir air falbh…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:314
+msgid "Screenshot not found"
+msgstr "Cha deach glacadh-sgrìn a lorg"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:329
+msgid "Failed to load image"
+msgstr "Dh’fhàillig le luchdadh an deilbh"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:462
+msgid "Screenshot size not found"
+msgstr "Cha deach meud a’ ghlacaidh-sgrìn a lorg"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:492
+msgid "Could not create cache"
+msgstr "Cha b’ urrainn dhuinn tasgadan a chruthachadh"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:553
+msgid "Screenshot not valid"
+msgstr "Chan eil an glacadh-sgrìn mar bu chòir"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:568
+msgid "Screenshot not available"
+msgstr "Chan eil glacadh-sgrìn ri làimh"
+
+#: src/gs-screenshot-image.c:621
+msgid "Screenshot"
+msgstr "Glacadh-sgrìn"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:158
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u mhaidse a bharrachd"
+msgstr[1] "%u mhaidse a bharrachd"
+msgstr[2] "%u maidsichean a bharrachd"
+msgstr[3] "%u maidse a bharrachd"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Duilleag luirg"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Cha deach aplacaid a lorg"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:834 src/gs-shell.c:839 src/gs-shell.c:854 src/gs-shell.c:858
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:910
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Cha b’ urrainn dhuinn ùrachaidhean a’ bhathair-an-sàs a luchdadh a-nuas o %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:916
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas o %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:923
+msgid "Unable to download updates"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:928
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas: bha feum air ceangal dhan eadar-lìon ach cha robh e ri fhaighinn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:937
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas o %s: chan eil àite gu leòr air an diosg"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:942
+msgid "Unable to download updates: not enough disk space"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas: chan eil àite gu leòr air an diosg"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:950
+msgid "Unable to download updates: authentication was required"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas: bha feum air dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas: cha robh an dearbhadh dligheach"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:960
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Cha b’ urrainn dhuinn na h-ùrachaidhean a luchdadh a-nuas: chan fhaod thu bathar-bog a stàladh"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:967
+msgid "Unable to get list of updates"
+msgstr "Cha deach leinn liosta nan ùrachaidhean fhaighinn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1006
+#, c-format
+#| msgid "Unable to update %s: authentication was required"
+msgid "Unable to purchase %s: authentication was required"
+msgstr "Cha b’ urrainn dhuinn %s a cheannach: bha feum air dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1013
+#, c-format
+#| msgid "Unable to update %s: authentication was invalid"
+msgid "Unable to purchase %s: authentication was invalid"
+msgstr "Cha b’ urrainn dhuinn %s a cheannach: cha robh an dearbhadh dligheach"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1020
+#, c-format
+#| msgid "Unable to update %s: not enough disk space"
+msgid "Unable to purchase %s: no payment method setup"
+msgstr "Cha b’ urrainn dhuinn %s a cheannach: cha deach dòigh pàighidh a shuidheachadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1027
+#, c-format
+#| msgid "Unable to update %s: authentication was required"
+msgid "Unable to purchase %s: payment was declined"
+msgstr "Cha b’ urrainn dhuinn %s a cheannach: chaidh am pàigheadh a dhiùltadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1034
+#, c-format
+#| msgid "Unable to update %s"
+msgid "Unable to purchase %s"
+msgstr "Cha b’ urrainn dhuinn %s a cheannach"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1070
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh on a dh’fhàillig leis an luchdadh a-nuas o %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1076
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh on a dh’fhàillig leis an luchdadh a-nuas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1088
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh air sgàth ’s nach eil %s runtime ri fhaighinn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1094
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh air sgàth ’s nach cuir sinn taic ris"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1101
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Cha b’ urrainn dhuinn a stàladh: bha feum air ceangal dhan eadar-lìon ach cha robh e ri fhaighinn"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1107
+msgid "Unable to install: the application has an invalid format"
+msgstr "Cha b’ urrainn dhuinn a stàladh: tha fòrmat mì-dligheach air an aplacaid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1112
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh: chan eil àite gu leòr air an diosg"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1120
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh: bha feum air dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1127
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh: cha robh an dearbhadh dligheach"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1134
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh: chan fhaod thu bathar-bog a stàladh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1147
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr "Chaidh an cunntas %s agad a chur à rèim."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1151
+msgid "It is not possible to install software until this has been resolved."
+msgstr "Chan urrainn dhut bathar-bog a stàladh mus fhuasgail thu an duilgheadas seo."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1162
+#, c-format
+msgid "For more information, visit %s."
+msgstr "Airson barrachd fiosrachaidh, tadhail air %s."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1171
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh: tha feum air bun-dealain"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1180
+#, c-format
+msgid "Unable to install %s"
+msgstr "Cha b’ urrainn dhuinn %s a stàladh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1226
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh o %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1232
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh on a dh’fhàillig leis an luchdadh a-nuas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1238
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Cha b’ urrainn dhuinn ùrachadh: bha feum air ceangal dhan eadar-lìon ach cha robh e ri fhaighinn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1246
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh: chan eil àite gu leòr air an diosg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1255
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh: bha feum air dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1262
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh: cha robh an dearbhadh dligheach"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1269
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh: chan fhaod thu bathar-bog ùrachadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1277
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh: tha feum air bun-dealain"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to update %s"
+msgstr "Cha b’ urrainn dhuinn %s ùrachadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1331
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s o %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s on a dh’fhàillig leis an luchdadh a-nuas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1343
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr "Cha b’ urrainn dhuinn àrdachadh: bha feum air ceangal dhan eadar-lìon ach cha robh e ri fhaighinn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1351
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s: chan eil àite gu leòr air an diosg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1360
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s: bha feum air dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1367
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s: cha robh an dearbhadh dligheach"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s: chan fhaod thu àrdachadh a dhèanamh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1381
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s: tha feum air bun-dealain"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1390
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Cha b’ urrainn dhuinn àrdachadh gu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1432
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Cha b’ urrainn dhuinn %s a thoirt air falbh: bha feum air dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1438
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Cha b’ urrainn dhuinn %s a thoirt air falbh: cha robh an dearbhadh dligheach"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1444
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Cha b’ urrainn dhuinn %s a thoirt air falbh: chan fhaod thu bathar-bog a thoirt air falbh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1451
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Cha b’ urrainn dhuinn %s a thoirt air falbh: tha feum air bun-dealain"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Cha b’ urrainn dhuinn %s a thoirt air falbh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1506
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Tha b’ urrainn dhuinn %s a chur gu dol: cha deach %s a stàladh"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1513 src/gs-shell.c:1561 src/gs-shell.c:1609
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Chan eil àite gu leòr air an diosga – saoraich beagan àite is feuch ris a-rithist"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1521 src/gs-shell.c:1569 src/gs-shell.c:1636
+msgid "Sorry, something went wrong"
+msgstr "Tha sinn duilich ach chaidh rudeigin cearr"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1556
+msgid "Failed to install file: authentication failed"
+msgstr "Cha b’ urrainn dhuinn faidhle a stàladh: dh’fhàillig leis an dearbhadh"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1603
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Cha b’ urrainn dhuinn conaltradh le %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1618
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Tha %s feumach air ath-thòiseachadh mus cleachd thu na plugain ùra."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1623
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Tha an aplacaid seo feumach air ath-thòiseachadh mus cleachd thu na plugain ùra."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1630
+msgid "AC power is required"
+msgstr "Tha feum air bun-dealain"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (’ga stàladh)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (’ga thoirt air falbh)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:106
+#| msgid "_Remove"
+msgid "_Remove All"
+msgstr "Thoi_r air falbh na -uile"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:131
+msgid "No update description available."
+msgstr "Chan eil tuairisgeul an ùrachaidh ri fhaighinn."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:226
+#, c-format
+msgid "Installed on %s"
+msgstr "Chaidh a stàladh %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:246
+msgid "Installed Updates"
+msgstr "Ùrachaidhean air an stàladh"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:452
+msgid "Additions"
+msgstr "Pacaidean a bharrachd"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:456
+msgid "Removals"
+msgstr "Toirt air falbh"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:460
+msgid "Updates"
+msgstr "Ùrachaidhean"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:464
+msgid "Downgrades"
+msgstr "Ìsleachaidhean"
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "Cha deach ùrachadh sam bith a stàladh air an t-siostam seo."
+
+#: src/gs-update-monitor.c:93
+msgid "Security Updates Pending"
+msgstr "Tha ùrachaidhean tèarainteachd ri an dèiligeadh"
+
+#: src/gs-update-monitor.c:94
+msgid "It is recommended that you install important updates now"
+msgstr "Mholamaid gun stàlaich thu na h-ùrachaidhean cudromach an-dràsta"
+
+#: src/gs-update-monitor.c:97
+msgid "Restart & Install"
+msgstr "Tòisich às ùr ⁊ stàlaich"
+
+#: src/gs-update-monitor.c:101
+msgid "Software Updates Available"
+msgstr "Tha ùrachaidhean bathair-bhog ri am faighinn"
+
+#: src/gs-update-monitor.c:102
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Tha ùrachaidhean cudromach airson an t-siostaim-obrachaidh is nan aplacaidean deiseil gus an stàladh"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:105 src/gs-updates-page.c:750
+msgid "Not Now"
+msgstr "Chan ann an-dràsta"
+
+#: src/gs-update-monitor.c:106
+msgid "View"
+msgstr "Seall"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:260 src/gs-updates-page.ui:46
+msgid "Operating System Updates Unavailable"
+msgstr "Chan eil ùrachaidhean an t-siostam-obrachaidh ri am faighinn"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:262
+msgid "Upgrade to continue receiving security updates."
+msgstr "Àrdaich ach am faigh thu ùrachaidhean tèarainteachd fhathast."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:316
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Tha tionndadh ùr de %s ri fhaighinn airson stàladh"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:320
+msgid "Software Upgrade Available"
+msgstr "Tha àrdachadh bathair-bhog ri fhaighinn"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:633
+msgid "Software Updates Failed"
+msgstr "Dh’fhàillig le stàladh nan ùrachaidhean"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:635
+msgid "An important OS update failed to be installed."
+msgstr "Dh’fhàillig le stàladh ùrachadh cudromach an t-siostam-obrachaidh."
+
+#: src/gs-update-monitor.c:636
+msgid "Show Details"
+msgstr "Seall am mion-fhiosrachadh"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:659
+msgid "System Upgrade Complete"
+msgstr "Tha àrdachadh an t-siostaim deiseil"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:664
+#, c-format
+#| msgid "Welcome to Software"
+msgid "Welcome to %s %s!"
+msgstr "Fàilte gu %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:670
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Ùrachadh bathair-bhog air a stàladh"
+msgstr[1] "Ùrachaidhean bathair-bhog air an stàladh"
+msgstr[2] "Ùrachaidhean bathair-bhog air an stàladh"
+msgstr[3] "Ùrachaidhean bathair-bhog air an stàladh"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:674
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Chaidh ùrachadh cudromach an t-siostaim-obrachaidh a stàladh."
+msgstr[1] "Chaidh ùrachaidhean cudromach an t-siostaim-obrachaidh a stàladh."
+msgstr[2] "Chaidh ùrachaidhean cudromach an t-siostaim-obrachaidh a stàladh."
+msgstr[3] "Chaidh ùrachaidhean cudromach an t-siostaim-obrachaidh a stàladh."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:685
+msgctxt "updates"
+msgid "Review"
+msgstr "Lèirmheas"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:734
+msgid "Failed To Update"
+msgstr "Dh’fhàillig leis an ùrachadh"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:740
+msgid "The system was already up to date."
+msgstr "Bha an siostam cho ùr ’s a ghabhas mar-thà."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:745
+msgid "The update was cancelled."
+msgstr "Chaidh sgur dhen urachadh."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:751
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr "Bha feum air ceangal dhan eadar-lìon ach cha robh e ri fhaighinn. Dèan cinnteach gu bheil inntrigeadh dhan eadar-lìon agad is feuch ris a-rithist."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:757
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "Bha duilgheadasan tèarainteachd ann leis an ùrachadh. Iarr barrachd fiosrachaidh air solaraiche a’ bhathair-bhog agad."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:763
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Cha robh rum gu leòr air an diosga. Saoraich beagan ruim is feuch ris a-rithist."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:768
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr "Tha sinn duilich ach cha deach leinn an t-ùrachadh a stàladh. Fuirich gus am bi ùrachadh eile ann is feuch ris a-rithist. Ma bhios an duilgheadas seo ann fhathast an uairsin, cuir fios gu solaraiche a’ bhathair-bhog agad."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:298
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:301
+msgid "%l:%M %p"
+msgstr "%l:%M%p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:307
+msgid "Yesterday, %R"
+msgstr "An-dè, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:311
+msgid "Yesterday, %l:%M %p"
+msgstr "An-dè, %l:%M%p"
+
+#: src/gs-updates-page.c:314
+msgid "Two days ago"
+msgstr "A-bhòin-dè"
+
+#: src/gs-updates-page.c:316
+msgid "Three days ago"
+msgstr "Trì làithean air ais"
+
+#: src/gs-updates-page.c:318
+msgid "Four days ago"
+msgstr "Ceithir làithean air ais"
+
+#: src/gs-updates-page.c:320
+msgid "Five days ago"
+msgstr "Còig làithean air ais"
+
+#: src/gs-updates-page.c:322
+msgid "Six days ago"
+msgstr "Sia làithean air ais"
+
+#: src/gs-updates-page.c:324
+msgid "One week ago"
+msgstr "Seachdain air ais"
+
+#: src/gs-updates-page.c:326
+msgid "Two weeks ago"
+msgstr "Dà sheachdain air ais"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:330
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:343
+msgid "Downloading new updates…"
+msgstr "A’ luchdadh a-nuas ùrachaidhean ùra…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:347
+msgid "Looking for new updates…"
+msgstr "A’ lorg ùrachaidhean ùra…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:414
+msgid "Setting up updates…"
+msgstr "A’ suidheachadh nan ùrachaidhean…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:415 src/gs-updates-page.c:422
+msgid "(This could take a while)"
+msgstr "(Dh’fhaoidte gun doir seo greis)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:527
+#, c-format
+msgid "Last checked: %s"
+msgstr "An sgrùdadh mu dheireadh: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:746
+msgid "Updates have been installed"
+msgstr "Tha na h-ùrachaidhean air an stàladh"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:748
+msgid "A restart is required for them to take effect."
+msgstr "Tha feum air ath-thòiseachadh gus an cur an sàs."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:752
+msgid "Restart"
+msgstr "Tòisich às ùr"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:822
+msgid "Integrated Firmware"
+msgstr "Bathar-an-sàs amalaichte"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:825 src/gs-updates-page.c:835
+msgid "Restart & Update"
+msgstr "Ath-thòisich ⁊ ùraich"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:832
+msgid "Requires Restart"
+msgstr "Bidh feum air ath-thòiseachadh"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:842
+msgid "Application Updates"
+msgstr "Àrdachaidhean aplacaid"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:845
+msgid "Update All"
+msgstr "Ùraich na h-uile"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:852
+msgid "Device Firmware"
+msgstr "Bathar-an-sàs uidheim"
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:1041
+msgid "_Restart & Update"
+msgstr "Ath-thòisich ⁊ ù_raich"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:1045
+msgid "U_pdate All"
+msgstr "Ùraich _na h-uile"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1132
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Cha chuirear taic ri %s %s tuilleadh."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1137
+msgid "Your OS is no longer supported."
+msgstr "Cha chuirear taic ris an t-siostam-obrachaidh agad tuilleadh."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1142
+msgid "This means that it does not receive security updates."
+msgstr "Is ciall dha seo nach fhaigh thu ùrachaidhean tèarainteachd tuilleadh."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1146
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Mholamaid gun dèan thu àrdachadh gu tionndadh nas ùire."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1403
+msgid "Charges may apply"
+msgstr "Dh’fhaoidte gum bi tàillean na lùib"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1407
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "Ma bheir thu sùil airson ùrachaidhean le bann-leathann inneal-làimhe, dh’fhaoidte gun iarrar airgead ort."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1411
+msgid "Check Anyway"
+msgstr "Thoir sùil co-dhiù"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1427
+msgid "No Network"
+msgstr "Chan eil lìonra ann"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1431
+msgid "Internet access is required to check for updates."
+msgstr "Tha feum air ceangal dhan eadar-lìon gus sùil a thoirt airson ùrachaidhean."
+
+#: src/gs-updates-page.c:1836
+msgid "Restart & _Install"
+msgstr "Tòisich às ùr ⁊ stàlaich"
+
+#: src/gs-updates-page.c:1854
+msgid "Check for updates"
+msgstr "Thoir sùil airson ùrachaidhean"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Duilleag nan ùrachaidhean"
+
+#: src/gs-updates-page.ui:194
+msgid "Software is up to date"
+msgstr "Tha am bathar-bog cho ùr ’s a ghabhas"
+
+#: src/gs-updates-page.ui:245
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "Ma bheir thu sùil airson ùrachaidhean le bann-leathann inneal-làimhe, dh’fhaoidte gun iarrar airgead ort"
+
+#: src/gs-updates-page.ui:257
+msgid "_Check Anyway"
+msgstr "Thoir sùil _co-dhiù"
+
+#: src/gs-updates-page.ui:300
+msgid "Go online to check for updates"
+msgstr "Rach air loidhne gus sùil a toirt airson ùrachaidhean"
+
+#: src/gs-updates-page.ui:311
+msgid "_Network Settings"
+msgstr "Roghainnean an lìo_nraidh"
+
+#: src/gs-updates-page.ui:393
+msgid "Updates are automatically managed"
+msgstr "Tha na h-ùrachaidhean gan stiùireadh gu fèin-obrachail"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Tha %s %s ri fhaighinn a-nis"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "A’ luchdadh a-nuas %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "Tha %s %s deiseil airson stàladh"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "Seo mòr-àrdachadh le gleusan is grinneas ùr."
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "_Barrachd fiosrachaidh"
+
+#: src/gs-upgrade-banner.ui:98
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Mholamaid gun dèan thu lethbhreac-glèidhidh dhen dàta ’s dhe na faidhlichean agad mus dèan thu àrdachadh."
+
+#: src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "Luch_daich a-nuas"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Cuir ris, thoir air falbh no ùraich bathar-bog air a’ choimpiutair seo"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr "Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;ùrachadh;ùrachaidhean;ùraich;àrdachadh;àrdaich;tùsan;ionad-tasgaidh;ionadan-tasgaidh;stàlaidh;stàladh;dì-stàlaich;dì-stàladh;prògram;bathar-bog;aplacaid;bùth;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "Dealbhaich na brataich airson Bathar-bog GNOME brosnaichte"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "AppStream;Software;App;bathar-bog;aplacaid;"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Clàradh ⁊ deasachadh fuaime"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Cluicheadairean ciùil"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Dì-bhugadairean"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Àrainneachdan leasachaidh co-fhillte"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Inntinn fhuadain"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Reul-eòlas"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Ceimigeachd"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Cànain"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matamataig"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotaireachd"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Dàna-thuras"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Faoin-chleasan"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocaichean"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Bòrd"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cairt"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Aithrisichean"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Clann"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Loidig"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Cluich mas-fhìor"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Spòrs"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Ro-innleachd"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafaigeachd 3D"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Togail dhealbhan"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Sganadh"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafaigeachd vectoran"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Sealladairean"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Mìosachan"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Stòr-dàta"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Ionmhas"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Pròiseasadh fhaclan"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Cruthan-clò"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Tùsan ion-chuir"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pacaidean cànain"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Leudachain slige"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Ionadaileadh"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Draibhearan bathair-chruaidh"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Cabadaich"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Naidheachdan"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Brabhsairean-lìn"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Deasaichean teacsa"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Na h-uile"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Brosnaichte"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Ealan"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Cruinn-eòlas"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Dealbhan-èibhinn"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficsean"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Slàinte"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Eachdraidh"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Dòigh-bheatha"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Poileataigs"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Spòrs"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "Fuaim ⁊ video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "Innealan leasachaidh"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "Foghlam ⁊ saidheans"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "Geamannan"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "Grafaigeachd ⁊ togail dhealbhan"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "Dèanadas"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "Conaltradh ⁊ naidheachdan"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "Iomradh"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "Goireasan"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:71
+msgid "OS Updates"
+msgstr "Ùrachaidhean an t-siostaim-obrachaidh"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:76
+msgid "Includes performance, stability and security improvements."
+msgstr "Gabhaidh seo a-steach piseach air an dèanadas, an t-seasmhachd agus an tèarainteachd."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "A’ luchdadh a-nuas dealbhan brosnaichte…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Taic ri aplacaidean-lìn"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Ruith aplacaidean-lìn mòr-còrdte am broinn brabhsair"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:112
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Inneal Bathair-bog GNOME airson AppStream a stàladh air feadh an t-siostaim"
+
+#: plugins/external-appstream/gs-install-appstream.c:114
+msgid "Failed to parse command line arguments"
+msgstr "Cha b’ urrainn dhuinn argamaidean na loidhne-àithne a pharsadh"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:121
+msgid "You need to specify exactly one filename"
+msgstr "Feumaidh tu aon ainm-fhaidhle a shònrachadh"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:128
+msgid "This program can only be used by the root user"
+msgstr "Chan fhaod ach an chleachdaiche root am prògram seo a chleachdadh"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:136
+msgid "Failed to validate content type"
+msgstr "Cha deach leinn seòrsa na susbainte a dhearbhadh"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to copy"
+msgstr "Cha deach leinn lethbhreac dheth a dhèanamh"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:243
+msgid "Downloading extra metadata files…"
+msgstr "A’ luchdadh a-nuas barrachd fhaidhlichean meata-dàta…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+msgid "Downloading upgrade information…"
+msgstr "A’ luchdadh a-nuas fiosrachadh an àrdachaidh…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:311
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr "Àrdaich an siostam Fedora agad ach am faigh thu na gleusan is leasachaidhean as ùire."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Taic ri Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "’S e frèam-obrach a th’ ann am Flatpak airson aplacaidean deasga air Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:607
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "A’ faighinn meata-dàta a’ flatpak airson %s…"
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:2773
+msgid "Getting runtime source…"
+msgstr "A’ faighinn tùs an runtime…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:695
+msgid "Downloading firmware update signature…"
+msgstr "A’ luchdadh a-nuas soidhneadh an ùrachaidh air bathar-an-sàs…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:736
+msgid "Downloading firmware update metadata…"
+msgstr "A’ luchdadh a-nuas meata-dàta an ùrachaidh air bathar-an-sàs…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:826
+msgid "Downloading firmware update…"
+msgstr "A’ luchdadh a-nuas ùrachadh air bathar-an-sàs…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Taic ri àrdachadh bathair-an-sàs"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Bheir seo dhut taic ri àrdachaidhean bathair-an-sàs"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr "Taic ri Limba"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr "Bheir Limba dòigh furasta dhan luchd-leasachaidh gus trusgain bathair-bhog a chruthachadh"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr "A’ luchdadh a-nuas rangachaidhean nan aplacaid…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Taic ri rangachaidhean deasga fosgailte"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "’S e seirbheis a’ th’ ann an ODRS a bheir dhut lèirmheasan an luchd-cleachdaidh air aplacaidean"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:392
+#| msgctxt "Menu of Add-ons"
+#| msgid "Shell Extensions"
+msgid "GNOME Shell Extensions Repository"
+msgstr "Ionad-tasgaidh leudachan slige GNOME"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:709
+msgid "Downloading shell extension metadata…"
+msgstr "A’ luchdadh a-nuas meata-dàta an leudachain slige…"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:211
+#| msgid "Snappy Support"
+msgid "Snap Store"
+msgstr "Taic ri bùth Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr "Taic ri Snappy"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "’S e pacaid Linux uile-choitcheann a th’ ann an snap"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr "A’ luchdadh a-nuas duilleag aplacaid…"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr "Taic ri Steam"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr "Ùrlar dibhearsain le Valve"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Liosta dhe na tùsan a bharrachd a chaidh a chur an comas roimhe"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "An liosta dhe na tùsan a chaidh a chur an comas roimhe le stàladh "
+#~ "aplacaid treas-phartaidh."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Seall bathar-bog nach eil saor ann an toraidhean luirg"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Liosta dhe na tùsan nach eil saor a ghabhas cur an comas gu roghainneil"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Gnìomhan ro-shocraichte eadar cluicheadairean gun gleus cabadaich"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Bheir seo inntrigeadh dha bharrachd bathair-bhog dhut, a’ gabhail a-"
+#~ "steach brabhsairean-lìn is geamannan."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "A bheil thu airson tùsan bathair-bhog fo sheilbh a chur an comas?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Cha dèid aplacaidean no tuilleadain a stàladh ach dh’fhaoidte gun dèid "
+#~ "bathar-bog eile"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Tha cuingeachaidhean cleachdaidh air agus chan fhaigh thu am bun-tùs mar "
+#~ "as trice."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Tùsan bathair-bhog fo sheilbh"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Gabhaidh tùsan bathair-bhog a luchdadh a-nuas on eadar-lìon. Bheir iad "
+#~ "inntrigeadh dhut dha barrachd bathair-bhog nach doir %s dhut."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Nuair a bheir thu tùs air falbh, bheir seo bathar-bog sam bith a stàlaich "
+#~ "thu leis air falbh cuideachd."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Cha deach bathar-bog a stàladh on tùs seo"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Air a stàladh on tùs seo"
+
+#~ msgid "Source Details"
+#~ msgstr "Mion-fhiosrachadh mun tùs"
+
+#~ msgid "Last Checked"
+#~ msgstr "An sgrùdadh mu dheireadh"
+
+#~ msgid "Added"
+#~ msgstr "Chaidh a chur ris"
+
+#~ msgid "Website"
+#~ msgstr "Làrach-lìn"
+
+#~ msgid "About Software"
+#~ msgstr "Mu bhathar-bog"
+
+#~ msgid "Total"
+#~ msgstr "Iomlan"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Cha deach leinn \"%s\" a lorg"
+
+#~ msgid "_Install All"
+#~ msgstr "_Stàlaich na h-uile"
+
+#~ msgid "Other Updates"
+#~ msgstr "Ùrachaidhean eile"
+
+#~ msgid "Remove Source"
+#~ msgstr "Thoir an tùs air falbh"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Cha deach leinn %s a stàladh."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Cha deach leinn %s a thoirt air falbh."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr ""
+#~ "Dèan cinnteach gu bheil inntrigeadh dhan eadar-lìon agad is feuch ris a-"
+#~ "rithist."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Saoraich beagan ruim is feuch ris a-rithist."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr ""
+#~ "Ma mhaireas an duilgheadas, cuir fios gu solaraiche a' bhathair-bhog agad."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Reul-eòlas"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Ceimigeachd"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matamataig"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Na h-uile"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Brosnaichte"
+
+#~ msgid "Science"
+#~ msgstr "Saidheans"
+
+#~ msgid "3rd party"
+#~ msgstr "Treas-phartaidh"
+
+#~ msgid "web app"
+#~ msgstr "aplacaid-lìn"
+
+#~ msgid "nonfree"
+#~ msgstr "chan eil e saor"
+
+#~ msgid "shell extension"
+#~ msgstr "leudachain shell"
+
+#~ msgid "page0"
+#~ msgstr "duilleag0"
+
+#~ msgid "page1"
+#~ msgstr "duilleag1"
+
+#~ msgid "_Installing"
+#~ msgstr "'Ga _stàladh"
+
+#~ msgid "_Removing"
+#~ msgstr "'Ga thoi_rt air falbh"
+
+#~ msgid " or "
+#~ msgstr " no "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Chan eil fhios"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Tha am bathar-bog seo 'ga sholar le treas-phartaidh."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Tha am bathar-bog seo 'ga sholar le treas-phartaidh agus dh'fhaoidte nach "
+#~ "eil gach co-phàirt aige saor."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Dh'fhaoidte nach eil gach co-phàirt aig a' bhathar-bhog seo saor."
+
+#~ msgid "non-free"
+#~ msgstr "chan eil e saor"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr ""
+#~ "Bheir tùsan bathair-bhog inntrigeadh dhut dha barrachd bathair-bhog."
+
+#~ msgid "One Star"
+#~ msgstr "Aon rionnag"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dà rionnag"
+
+#~ msgid "Three Stars"
+#~ msgstr "Trì rionnagan"
+
+#~ msgid "Four Stars"
+#~ msgstr "Ceithir rionnagan"
+
+#~ msgid "Five Stars"
+#~ msgstr "Còig rionnagan"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Chan eil gin"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplacaidean oifis a mholamaid"
+
+#~ msgid "Audio"
+#~ msgstr "Fuaim"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Deasachadh"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Stòir-dhàta"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Losgadh dhiosgan"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Rèidio neo-dhreuchdail"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Measgadair"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Ceòl"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Innealan-clàraidh"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sequencers"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Tiùnairean"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Togail"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Stòir-dhàta"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Pròifileadh"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Stiùireadh phròiseactan"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "Stiùireadh thionndaidhean"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Eadar-theangachadh"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Leasachadh-lìn"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Bith-eòlas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Coimpiutaireachd"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Togail"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Sealladh dàta"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Eaconamaidh"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Dealan"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Leactronachd"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Einnseanaireachd"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geòlas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Eòlas na talmhainn"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Eachdraidh"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Daonnachd"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Pròiseasadh dhealbhan"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Litreachas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapaichean"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Medical"
+#~ msgstr "Leigheas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Ceòl"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Sgrùdadh àireamhan"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Coimpiutaireachd cho-shìnteach"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fiosaigeachd"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spioradalachd"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Tilgeadh"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Mas-fhìorachd"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Spòrs"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafaigeachd"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Grafaigeachd 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Aithneachadh lèirsinneach litrichean"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Foillseachadh"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Grafaigeachd phiogsailean"
+
+#~ msgid "Internet"
+#~ msgstr "Eadar-lìon"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Dialup"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Post-d"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Inbhir"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Tar-chur fhaidhlichean"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Rèidio neo-dhreuchdail"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Grad-theachdaireachdan"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Cliantan IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monatair"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Inntrigeadh cèin"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Fònadaireachd"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Leasachadh-lìn"
+
+#~ msgid "Office"
+#~ msgstr "Oifis"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Cairt"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Stiùireadh luchd-aithne"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Faclair"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Post-d"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Cairt-srutha"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Cuidiche pearsanta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Togail dhealbhan"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Taisbeanadh"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Stiùireadh phròiseactan"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Foillseachadh"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Cliath-dhuilleag"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Sealladair"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Ealan"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Inntinnean fuadain"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Reul-eòlas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Bith-eòlas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Ceimigeachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Coimpiutaireachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Togail"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Sealladh dàta"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Eaconamaidh"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Dealan"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Leactronachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Einnseanaireachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Cruinn-eòlas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geòlas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Eòlas na talmhainn"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Eachdraidh"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Daonnachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Pròiseasadh dhealbhan"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Cànain"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Litreachas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapaichean"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matamataig"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Leigheas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Sgrùdadh àireamhan"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Coimpiutaireachd cho-shìnteach"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fiosaigeachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotaireachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spioradalachd"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Spòrs"
+
+#~ msgid "System"
+#~ msgstr "Siostam"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Aithrisiche"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Manaidsear fhaidhlichean"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File System"
+#~ msgstr "Siostam fhaidhlichean"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Innealan faidhle"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monatair"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Tèarainteachd"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Aithrisiche tèirmineil"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "So-ruigsinneachd"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Tasg-lannan"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Àireamhair"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Cleoc"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Dùmhlachadh"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Innealan faidhle"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapaichean"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spioradalachd"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Innealan fònadaireachd"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Deasachadh"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Stòr-dàta"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Losgadh dhiosgan"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Cluicheadairean"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Innealan-clàraidh"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TBh"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "'Ga àireamhachadh…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Chan eil fhios"
+
+#~ msgid "Size"
+#~ msgstr "Meud"
+
+#~ msgid "_History"
+#~ msgstr "_Eachdraidh"
+
+#~ msgid "Open Source"
+#~ msgstr "Còd fosgailte"
+
+#~ msgid "An update is needed to show all installable apps. Download now?"
+#~ msgstr ""
+#~ "Tha feum air ùrachadh gus a h-uile aplacaid a ghabhas stàladh a "
+#~ "shealltainn. A bheil thu airson a luchdadh a-nuas an-dràsta?"
+
+#~ msgid "Ubuntu Software"
+#~ msgstr "Bathar-bog Ubuntu"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Cha deach dàta AppStream a lorg"
+
+#~ msgid "Incorrect email or password"
+#~ msgstr "Chan eil am post-d no am facal-faire mar bu chòir"
+
+#~ msgid "Account deactivated"
+#~ msgstr "Chaidh an cunntas a chur à gnìomh"
+
+#~ msgid "Email invalidated"
+#~ msgstr "Chaidh am post-d a dhèanamh mì-dhligheach"
+
+#~ msgid "Too many requests"
+#~ msgstr "Cus iarrtasan"
+
+#~ msgid "An error occurred"
+#~ msgstr "Thachair mearachd"
+
+#~ msgid "Signing in…"
+#~ msgstr "'Gad chlàradh a-steach…"
+
+#~ msgid ""
+#~ "To rate and review software, you need an Ubuntu Single Sign-On account."
+#~ msgstr ""
+#~ "Gus bathar-bog a rangachadh is lèirmheas a dhèanamh air, feumaidh tu "
+#~ "cunntas Ubuntu a chum clàradh a-steach le aon chunntas fhaighinn."
+
+#~ msgid "I have an Ubuntu Single Sign-On account"
+#~ msgstr "Tha cunntas Ubuntu a chum clàradh a-steach le aon chunntas agam"
+
+#~ msgid "One-time password:"
+#~ msgstr "Facal-faire aon turais:"
+
+#~ msgid "You are now signed into Ubuntu One."
+#~ msgstr "Chaidh do chlàradh a-steach dha dh'Ubuntu One."
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..86fae47
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,4440 @@
+# Galician translations for PACKAGE package.
+# Copyright (C) 2013 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Fran Diéguez <frandieguez@gnome.org>, 2013.
+# Fran Dieguez <frandieguez@gnome.org>, 2013-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-26 16:45+0200\n"
+"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
+"Language-Team: Galician <proxecto@trasno.gal>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Gtranslator 3.36.0\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Xestor de aplicacións para GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software permítelle atopar e instalar novas aplicacións e extensións do "
+"sistema, así como eliminar aplicacións instaladas actualmente."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software móstralle aplicacións populares e destacados con descricións "
+"útiles e varias capturas por aplicación. Pode atopar aplicacións explorando "
+"a lista de categorías ou buscándoas. Tamén lle permite actualizar o seu "
+"sistema usando unha actualización fóra de liña."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Páxina de vista xeral"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Páxina de detalles"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Páxina de instalados"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel de actualizacións"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Os detalles da actualización"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "O Proxecto GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalar un ficheiro «appstream» na localización do sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalando un ficheiro «appstream» na localización do sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Unha lista de proxectos compatíbeis"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Esta é a lista de proxectos compatíbeis que deberíamos mostrar como GNOME, "
+"KDE e XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Indica se se xestionan ou non as actualizacións e anovacións en GNOME "
+"Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Se esta desactivado, GNOME Software ocultará o panel de actualizacións, non "
+"levará a cabo ningunha actualización automática ou solicitará anovacións."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Descargar e instalar automaticamente as anovacións"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Se está activado, GNOME Software descargará automaticamente as "
+"actualizacións en segundo plano e instalará aquelas que non precisen "
+"reiniciar."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notificar ao usuario sobre o software actualizado en segundo plano"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Se está activo, GNOME Software notificará ao usuario sobre as actualizacións "
+"que se leven a cabo mentres o usuario está inactivo."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Indica se se refresca automaticamente ao usar unha conexión medida"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Se está activo, GNOME Software refrescará automaticamente en segundo plano "
+"incluso ao usar unha conexión medida (eventualmente descargando algúns "
+"metadatos, comprobación de anovacións, etc., o que pode acarrexar custos "
+"para o usuario)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Indica se é a primeira vez que executa GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostrar as puntuacións con estrelas ao carón das aplicacións"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrar aplicacións baseándose na rama por defecto estabelecida polo remoto"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"As aplicacións non libres mostran un diálogo de aviso antes de instalarse"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Cando se instalan aplicacións non libres mostrarase un diálogo de aviso. "
+"Isto controla se o diálogo se elimina."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Unha lista das aplicacións máis populares"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Unha lista das aplicacións a usar, sobrescribindo os definidos polo sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "O «timestamp» da última comprobacion de actualizacións"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "A «marca de tempo» da última notificación de anovación"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"O «timestamp» da primeira actualización de seguranza, limpado despois de "
+"actualizar"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "O «timestamp» da última actualización"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"A última marca de tempo cando o sistema estivo en lilña e obtivo "
+"actualizacións"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"A idade en segundos para verificar se a captura de pantalla oficial segue "
+"sendo válida"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Elexir un valor máis grande implica menos consultas ao servidor remoto, pero "
+"as actualizacións das capturas de pantalla poden tardar máis en mostrárselle "
+"ao usuario. O valor 0 implica non comprobar nunca o servidor remoto se a "
+"imaxe xa existe na caché."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "O servidor a usar para as revisións de aplicacións"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "A puntuació mínima de karma para as revisións"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "As revisións cun karma menor que este número non se mostrarán."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Unha lista de repositorios oficiais que non se deberían considerar terceiros"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Unha lista de repositorios oficiais que se deberían considerar software libre"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "A URL da licenza a usar cando a aplicación se considera software libre"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instalar aplicacións empaquetadas para todos os usuarios no sistema cando "
+"sexa posíbel"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permitir o acceso ao diálogo de Repositorios de software"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ofrecer anovacións para pre-publicacións"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostrar algúns elementos da IU que lle informan ao usuario que unha "
+"aplicación non é libre"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Mostrar un diálogo de pregunta para instalar repositorios de software non "
+"libre"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostrar o tamaño de instalación para as aplicacións na lista de aplicacións "
+"instaladas"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://gl.wikipedia.org/wiki/Software_privativo'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "O URI que explica o software non libre e privativo"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Unha lista de URLs que apuntan a ficheiros «appstream» que se descargarán no "
+"cartafol de información da aplicación"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalar un ficheiro de Appstream nunha localización do sistema para todos "
+"os usuarios"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Activar o repositorio de extensións da Shell de GNOME"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Unha cadea que almacena o id de gnome-online-account usando para iniciar "
+"sesión"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalar software"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instala o software seleccionado no seu sistema"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Seleccionar todo"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Deseleccionar todo"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Repositorios de _software"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Preferencias de _actualización"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Atrás"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explorar"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalado"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Anovacións"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Buscar"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Orixe"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repositorios de software"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examinar disco"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Preferencias da rede"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Reiniciar agora"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Máis información"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Actualizacións automáticas pausadas"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Saber máis…"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Ficheiro local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paquete"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Pendente"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalando"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Retirando"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Modo de inicio: elixa entre «updates», «updated », «installed» ou «overview»"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODO"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Buscar aplicacións"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "BUSCAR"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostrar información da aplicación (usando o ID da aplicación)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostrar información da aplicación (usando o nome do paquete)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instalar a aplicación (usando o ID da aplicación)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Abrir ficheiro de paquete local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NOME_DE_FICHEIRO"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"O tipo de interacción esperada para esta acción: pode ser «none», «notify» "
+"ou «full»"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostrar información de depuración detallada"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instala calquera actualización pendente en segundo plano"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostrar as preferencias de actualización"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Saír da instancia en execución"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferir orixes de ficheiros locais a AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostrar o número de versión"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Fran Diéguez <frandieguez@gnome.org>, 2013-2020"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Sobre Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Unha gran forma de xestionar o software no seu sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Desculpe! Non hai detalles para esta aplicación."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visitar o sitio web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalar…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalar"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Anovar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Retirar"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "O dispositivo non se pode usar durante a actualización."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Require permisos adicionais"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Inicio de sesión remoto para %s requirido (reino %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Inicio de sesión requirido"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Iniciar sesión"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Usuario"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Contrasinal"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Outro"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Todos"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Destacado"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Destacados en %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Puntuación"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nome"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostrar"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menú de filtrado por subcategorías"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordenar"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menú de ordenador por subcategorías"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Escriba un número desde 1 a %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Escolla unha aplicaciónaplicación:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Instaláronse as actualizacións do SO"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"As actualizacións instaladas recentemente están dispoñíbeis para a súa "
+"revisión"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s agora está instalado"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Debe reiniciar para aplicar os cambios."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "A aplicación está lista para usarse."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Reiniciar"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Iniciar"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Desexa instalar software de terceiros?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Desexa activar os Repositorios de software de terceiros?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s non é <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">software libre e de fontes abertas</a>, e é fornecido por "
+"«%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s é fornecido por «%s»."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Este repositorios de software debe activarse para continuar a instalación."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "A instalación ou uso de %s podería ser ilegal nalgúns países."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "A instalación ou uso deste códec podería ser ilegal nalgúns países."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Non advertir outra vez"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Activar e instalar"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Lista detallada dos erros do xestor de paquetes:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detalles"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Instalouse unha actualización"
+msgstr[1] "Instaláronse as actualizacións"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Debe reiniciar para aplicar o cambio."
+msgstr[1] "Debe reiniciar para aplicar os cambios."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Agora non"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Sen violencia con personaxes animados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personaxes de banda deseñada en situacións non seguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personaxes animados en conflitos agresivos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violencia gráfica con personaxes animados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Sen violencia fantástica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personaxes en situacións non seguras distinguíbeis facilmante da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Personaxes en conflitos agresivos distinguíbeis facilmente da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violencia gráfica distinguíbel facilmente da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Sen violencia realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personaxes semi-realistas en situacións non seguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Representacións de personaxes realistas en conflitos agresivos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Violencia gráfica con personaes realistas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Sen masacres"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Masacre non realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Masacre realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Representacións de masacres e mutilación de partes do corpo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Sen violencia sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Violación ou outro comportamento sexual violento"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Sen referencias a bebidas alcohólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referencias a bebeidas alcohólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Use de bebidas alcohólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Sen referencias a drogas ilegais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referencias a drogas ilegais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uso de drogas ilegais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Sen referencias a produtos de tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referencias ao tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uso de tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Sen desnudos de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Desnudez artística breve"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Desnudez prolongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Sen representacións ou referencias sexuais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Representacións ou referencias provocativas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Representacións ou referencias sexuais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Comportamento sexual gráfico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Sen blasfemia de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Uso moderado ou pouco frecuente da blasfemia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Uso moderado da blasfemia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Uso amplio ou frecuente da blasfemia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Sen humor non axeitado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Humor vulgar ou estolóxico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor adulto ou sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Sen idioma discriminatorio de calqueira tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatividade cara un determinado grupo de persoas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminación para causar dano emocional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminación explícita baseada en xénero, sexualidade, raza ou relixión"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Sen publicidade de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Venta de produtos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Referencias explícitas a marcas concretas ou produtos de marcas rexistradas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Incítase aos xogadores a comprar determian dos elementos do mundo real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Sen apostas de ningún tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Xogo en eventos aleatorios usando créditos ou vidas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Xogo usando diñeiro virtual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Xogo usando diñeiro real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Sen posibilidade de gastar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Incítase aos xogadores a donar diñeiro real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Posibilidade de gastar diñeiro real no xogo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Sen posibilidade de chatear con outros usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interaccións de usuario a usuario sen a funcionalidade de chat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funcionalidade de chat moderado entre usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funcionalidade de chat sen controlar entre usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Sen posibilidade de falar con outros usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Funcionalidade de son ou vídeo sen controlar entre usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Non comparte nas redes socaiais de nomes de usuario ou enderezos de correo-e"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Compartición en redes sociais de nomes de usuario ou enderezos de correo-e"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Non comnparte a información do usuario con terceiros"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Buscando a última versión da aplicación"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Compartición de datos de diagnóstico que non lle permite a outros "
+"identificar ao usuario"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Compartición de información identificable ao usuario"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Non comparte a localización física con outros usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Compartición da localización física con outros usuarios"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Sen referencias a homosexualidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Referencias indirectas á homosexualidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Bicos entre persoas do mesmo xénero"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportamento sexual gráfico entre persoas do mesmo sexo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Sen referencias a prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referencias indirectas á prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referencias directas á prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Representacións gráficas do acto da prostitución"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Sen referencias ao adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referencias indirectas ao adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referencias directas ao adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Representacións gráficas ao acto do adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Sen personaxes sexualizados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Personaxes humanos escasamente vestidos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Caracteres humanos abertamente sexualizados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Sen referencias á profanación"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Representacións ou referencias á profanación histórica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Representacións da profanación humana moderna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Representacións gráficas da profanación moderna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Non hai restos humanos mortos visíbeis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Restos humanos mortos visíbeis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Restos humanos mortos que están expostos aos elementos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Representacións gráficas de profanación de corpos humanos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Sen referencias á escravitude"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Representacións ou referencias á escravitude histórica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Representacións de escravitude moderna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Representacións gráficas de escravitude moderna"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Xeral"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "TODO"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Só adultos"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Maduro"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescentes"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Con máis de 10 anos"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Calquera"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Nenos pequenos"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Unha aplicación"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s está solicitando compatibilidade dun formato de ficheiro adicional."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Requírese un tipo MIME adicional"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s require tipos de letra adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Requírense tipos de letra adicionais"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s require códecs multimedia adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Requírense códecs multimedia adicionais"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s require controladores de impresora adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Requírense controladores de impresora adicionais"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s require paquetes adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Requírense paquetes adicionais"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Buscar en Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Retirando…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Instalación pendente…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Actualización pendente…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Preparando…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Esta aplicaicón só pode usarse cando hai unha conexión a Internet activa."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalar"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalar…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Iniciar"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Desinstalar"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Rede"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Pode comunicarse pola rede"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Servizos do sistema"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Pode acceder ao servizos D-Bus no bus do sistema"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Servizos da sesión"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Pode acceder aos servizos de D-Bus no bus de sesión"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Pode acceder aos ficheiros do dispositivo do sistema"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Cartafol personal"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Pode ver, editar e crear ficheiros"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Pode ver ficheiros"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistema de ficheiros"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Cartafol de descargas"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Configuracións"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Pode ver e cambiar calquera preferencia"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistema de pantalla antigo"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Usa un sistema de pantalla antigo e inseguro"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Saír do illamento"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Pode escapar da caixa de area e saltar calquera outra restrición"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Esta aplicación está completamente illada."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Non se pode determinar a que partes do sistema pode acceder esta aplicación. "
+"Isto é normal para aplicacións antigas."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nunca"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Baixo"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Medio"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Alto"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Descoñecida"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Precisa acceso a Internet para escribir unha reseña"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Non foi posíbel atopar «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Dominio público"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://gl.wikipedia.org/wiki/Dominio_p%C3%BAblico"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.gl.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software libre"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Os usuarios están limitados pola seguinte licencia:"
+msgstr[1] "Os usuarios están limitados polas seguintes licenzas:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mostrar información"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Páxina de detalles"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Descargando"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Actualizar"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Engadir atallo"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Retirar atallo"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Non se forneceu unha captura de pantalla"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Inclúe repositorio de software"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Esta aplicacición inclúe unha repositorio de software que fornece "
+"actualizacións, así como acceso a outro software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Non inclúe repositorio de software"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Esta aplicación non inclúe un repositorio de software. Non se actualizará "
+"con novas versións."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Este software xa está sendo fornecido pola súa distribución e non debería "
+"substituílo."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Repositorio de software identificado"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Ao engadir este repositorio de software terá acceso a software e anovacións "
+"adicionais."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Use só repositorios de software nas que confíe."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Sitio _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donar"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Localizado no seu idioma"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentación"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Actividade de publicación"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integración co sistema"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Illado"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versión"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Calificación por idade"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permisos"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Actualizado"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categoría"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Tamaño instalado"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Tamaño da descarga"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Desenvolvedor"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licenza"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Libre"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Privativo"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Engadidos"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Os engadidos seleccionados instalaranse coa aplicación."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Revisións"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Escribir unha revisión"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mostrar máis"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Isto significa que o software pode executarse, copiarse, distribuírse, "
+"estudar e modificar de forma libre."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Software privativo"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Isto significa que o software é propiedade dunha persoa individual ou "
+"empresa. A miúdo hai restricións no seu uso e normalmente non se pode "
+"acceder ao seu código fonte."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licenza de software non dispoñíbel"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Descoñécense os termos da licenza deste software."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "A aplicación foi cualificada así polos seguintes motivos:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Non hai detalles dispoñíbeis para esta puntuación."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " e "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tipo de letra dispoñíbel para o script %s"
+msgstr[1] "Tipos de letra dispoñíbeis para o script %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Software dispoñíbel para %s"
+msgstr[1] "Software dispoñíbel para %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Non foi posíbel atopar o software requirido"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Non se atopou «%s»"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "no sitio web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Non hai ningunha aplicación dispoñíbel que forneza o ficheiro %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"A información sobre %s, así como as opcións sobre como obter aplicacións que "
+"faltan poden atoparse en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Non hai ningunha aplicación dispoñíbel para o formato %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s non está dispoñíbel."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"A información sobre %s, así como as opcións sobre como obter unha aplicación "
+"que sexa compatíbel con este formato poden atoparse en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Non hai ningún tipo de letra dispoñíbel que admita o script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"A información sobre %s, así como as opcións sobre como obter un tipos de "
+"letra adicionais poden atoparse en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Non hai ningún engadido de códec dispoñíbel para o formato %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"A información sobre %s, así como as opcións sobre como obter un códec que "
+"poida reproducir este formato poden atoparse en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Non hai ningún recurso Plasma dispoñíbel para o formato %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"A información sobre %s, así como as opcións sobre como obter un recurso "
+"Plasma adicional poden atoparse en %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Non hai ningún controlador de impresora dispoñíbel para %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"A información sobre %s, así como as opcións sobre como obter un controlador "
+"que sexa compatíbel con esta impresora poden atoparse en %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "este sitio web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Desafortunadamente, o %s que está buscando non se pode atopar. Vexa %s para "
+"obter máis información."
+msgstr[1] ""
+"Desafortunadamente, o %s que está buscando non se poden atopar. Vexa %s para "
+"obter máis información."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Produciuse un fallo ao buscar calquera resultado de busca"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Formato de ficheiro %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Páxina dos códecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Benvido"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Benvido a Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software permítelle instalar todo o software que precisa, todo desde o mesmo "
+"lugar. Vexa as nosas recomendacións, explore as categorías ou busque as "
+"aplicacións que quere."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Imos mercar"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Retirado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Actualizado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e de %B de %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicacións do sistema"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Páxina de instalado"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Estase descargando o catálogo de software"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Cargando páxina"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Iniciando…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"A rede actual é medida. As conexións medidas teñen límites ou cargos "
+"monetarios asociados. Para aforrar datos, as actualizacións automáticas "
+"foron polo tanto pausadas.\n"
+"\n"
+"As actualizacións medidas retomaranse cando estea dispoñíbel unha rede non "
+"medida. Ate ese momento, aínda é posíbel instalar manualmente as "
+"actualizacións.\n"
+"\n"
+"De forma alternativa, se a rede actual foi identificada de forma incorrecta "
+"como medida, esta configuración pode cambiarse."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Abrir as _Preferencias da rede"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderar páxina"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Non hai revisións que moderar"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistema"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "usuario"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Rama"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formato"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalación"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Máis…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicacións de son e vídeo recomendados"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Xogos recomendados"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicacións de gráficos recomendados"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicacións de produtividade recomendados"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Acceso a software adicional dende orixes de terceiros seleccionados."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Algún deste software é privativo e polo tanto ten restricións para compartir "
+"e acceso ao código fonte."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Saber máis…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Activar"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Páxina de vista previa"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Desexa activar os repositoirios de software de terceiros?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Seguinte"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Seleccións dos editores"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Últimas publicacións"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorías"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Non se atopou ningún dato de aplicacións"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparar %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Está seguro de que desexa retirar o repositorio «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Vanse retirar todas as aplicacións de %s, e terá que reinstalar o "
+"repositorio para usalas de novo."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Está seguro de que desexa retirar «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s vaise retirar, e terá que instalalo para usalo de novo."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalado)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferencias de actualización"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Actualizacións automáticas"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"As actualizacións automáticas están desactivadas cando se usan conexións "
+"móbiles ou medidas."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificacións de actualizacións automáticas"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Mostrar notificacións cando as actualizacións sexan instaladas "
+"automaticamente."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Algún software instalado actualmente non é compatíbel con %s. Se continúa, "
+"os seguintes serán eliminados automaticamente durante a anovación:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Software non compatíbel"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continuar"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicación instalado"
+msgstr[1] "%u aplicacións instalados"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u engadido instalado"
+msgstr[1] "%u engadidos instalados"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicación"
+msgstr[1] "%u aplicacións"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u engadido"
+msgstr[1] "%u engadidos"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s e %s instalado"
+msgstr[1] "%s e %s instalados"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Desexa eliminar «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Desexa desactivar «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"O software que foi instalado desde este repositorio no recibirá novas "
+"actualizacións, incluíndo arranxos de seguranza."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Desactivar"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "o sistema operativo"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Estos repositorios suplementan o software fornecido por omisión por %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repositorios de terceiros"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Non hai repositorios adicionais"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Activar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Retirar…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Desactivar…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Activando"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Desactivando"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Activado"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Desactivado"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Ódioo"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Non me gusta"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Está ben"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Gústame"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Encántame"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Por favor, tome uns minutos escribindo a revisión"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Escolla a puntuación"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "O resumo é demasiado curto"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "O resumo é demasiado longo"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "A descrición é demasiado curta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "A descrición é demasiado longa"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Enviar revisión"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Enviar"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Resumo"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Envíenos un pequeno resumo da súa revisión, por exemplo: «Gran aplicación, "
+"moi recomendable»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Revisión"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Que pensa da aplicación? Tente darnos as razóns da súa visión."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Saiba que datos se envían na nosa <a href=\"https://odrs.gnome.org/privacy"
+"\">política de privacidade</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "puntuacións totais"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Pode reportar revisisóns por ser abusivas, groseiras ou conducta "
+"discriminatoria."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"En canto estea reportada, a revisión ocultarase ate que sexa revisada polo "
+"administrador."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Reportar revisión?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Reportar"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Esta revisión foi útil para vostede?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sí"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Non"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Reportar…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Retirar…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Captura de pantalla non atopada"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Produciuse un fallo ao cargar a imaxe"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Tamaño da captura de pantalla non atopada"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Non foi posíbel crear a caché"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Captura de pantalla non atopada"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Captura de pantalla non dispoñíbel"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Captura de pantalla"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u coincidencia máis"
+msgstr[1] "%u coincidencias máis"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Páxina de busca"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Non se atoparon aplicacións"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Non é posíbel descargar anovacións de firmware desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Non é posíbel descargar anovacións desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Non é posíbel descargar anovacións"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Non é posíbel desargar anovacións: requírese acceso a internet pero non está "
+"dispoñíbel"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Non é posíbel descargar anovacións desde %s: non hai espazo en disco dabondo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Non foi posíbel descargar as anovacións: non hai espazo en disco dabondo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Non foi posíbel descargar as anovacións: requírese autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Non foi posíbel descargar as anovacións: a autenticación non é válida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Non foi posíbel descargar as anovacións: non ten permiso para instalar o "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Non foi posíbel descargar a lista de anovacións"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Non foi posíbel instalar %s xa que a descarga fallou desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Non foi posíbel instalar %s xa que a descarga fallou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Non foi posíbel instalar %s xa que o ambiente de execución %s non está "
+"dispoñíbel"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Non foi posíbel instalar %s xa que non é compatíbel"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Non foi posíbel instalar: requírese acceso á rede pero non está dispoñíbel"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Non foi posíbel instalar: a aplicación ten un formato non válido"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Non foi posíbel instalar %s: non hai espazo en disco dabondo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Non foi posíbel instalar %s: requírese autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Non foi posíbel instalar %s: a autenticación non é válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Non foi posíbel instalar %s: non ten permiso para instalar software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Non foi poisíbel instalar %s: precísase conexión á alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Non foi poisíbel instalar %s: O nivel de batería é demasiado baixo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Non foi posíbel isntalar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Non foi posíbel actualizar %s desde %s xa que a descarga fallou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Non foi posíbel actualizar %s xa que a descarga fallou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Non foi posíbel instalar actualizacións desde %s xa que a descarga fallou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Non foi posíbel instalar as actualizacións xa que a descarga fallou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Non foi posíbel actualizar: precísase acceso a Internet, pero non está "
+"dispoñíbel"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Non foi posíbel actualizar %s: non hai espazo en disco dabondo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Non foi posíbel instalar as actualizacións: non hai espazo en disco dabondo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Non foi posíbel %s: precísase autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Non foi posíbel instalar as actualizacións: requírese autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Non foi posíbel %s: a autenticación non é válida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Non foi posíbel instalar as actualizacións: a autenticación non é válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Non foi posíbel actualizar %s: non ten permisos para actualizar software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Non foi posíbel actualizar as actualizacións: non ten permisos para "
+"actualizar software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Non foi posíbel actualizar %s: precísase conexión á alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Non foi poisíbel instalar as actualizacións: precísase conexión á "
+"alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Non foi posíbel actualizar %s: O nivel de batería é demasiado baixo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Non foi poisíbel instalar as actualizacións: O nivel de batería é demasiado "
+"baixo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Non foi posíbel actualizar %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Non foi posíbel instalar as actualizacións"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Non foi posíbel anovar a %s desde %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Non foi posíbel anovar a %s xa que fallou a descarga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Non foi posíbel actualizar a %s: precísase acceso a Internet, pero non está "
+"dispoñíbel"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Non foi posíbel actualizar %s: non hai espazo en disco dabondo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Non foi posíbel actualizar a %s: precísase autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Non foi posíbel actualizar a %s: a autenticación non é válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Non foi posíbel actualizar a %s: non ten permiso para actualizar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Non foi posíbel a %s: precísase conexión á alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Non foi posíbel a %s: O nivel de batería é demasiado baixo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Non foi posíbel actualizar a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Non foi posíbel quitar %s: precísase autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Non foi posíbel quitar %s: a autenticación non é válida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Non foi posíbel quitar %s: non ten permisos para quitar software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Non foi posíbel quitar %s: precísase conexión á alimentación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Non foi posíbel quitar %s: O nivel de batería é demasiado baixo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Non foi posíbel quitar «%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Non foi posíbel iniciar %s: %s non está instalado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Non hai espazo en disco dabondo. Por favor libere algún espazo e ténteo de "
+"novo"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Desculpa, isto non funcionou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Produciuse un fallo ao instalar o ficheiro: non compatíbel"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Non foi posíbel instalar o ficheiro: fallou a autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Produciuse un fallo na instalación: non compatíbel"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Non foi posíbel facer a instalación: fallou a autenticación"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Non foi posíbel contactar con %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Débese reiniciar %s para usar os engadidos novos."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Débese reiniciar esta aplicación para usar os novos engadidos."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Precísase conexión á alimentación"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "O nivel de batería é demasiado baixo"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Orixe: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instalando)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Retirando)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Retirar todo"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Non hai unha descrición dispoñíbel."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalado o %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Actualizacións instaladas"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "A engadir"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "A eliminar"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Actualizacións"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "A desactualizar"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Non se instalou ningunha actualización neste computador."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Hai actualizacións de seguranza pendentes"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Recoméndase instalar as actualizacións importantes agora mesmo"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Reiniciar e instalar"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Hai novas actualizacións de software dispoñíbeis"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Hai actualizacións do sistema operativo e de aplicacións listas para "
+"instalarse"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Ver"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicación actualizada — Requírese reiniciar"
+msgstr[1] "%u aplicacións actualizadas — Requírese reiniciar"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicación actualizada"
+msgstr[1] "%u aplicacións actualizadas"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s foi actualizado."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Reinicie a aplicación."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s e %s foron actualizados."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicación require reiniciar."
+msgstr[1] "%u aplicacións requiren reiniciar."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inclúe %s, %s e %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Actualizacións de sistema operativo non dispoñíbeis"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Suba de versión para continuar recibindo anovacións de seguranza."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Hai unha nova versión de %s dispoñíbel para instalar"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Hai actualizacións de software dispoñíbeis"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Produciuse un erro ao actualizar o software"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"Produciuse un erro ao instalar unha actualización do sistema operativo "
+"importante."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostrar información"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Actualización do sistema completada"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Benvida a %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Actualización de software instalada"
+msgstr[1] "Actualizacións de software instaladas"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Instalouse unha actualización do sistema operativo importante."
+msgstr[1] "Instaláronse actualizacións do sistema operativo importantes."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Revisar"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Produciuse un erro ao actualizar"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "O sistema xa está actualizado."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "A actualización foi cancelada."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Requírese acceso a internet pero non está dispoñíbel. Asegúrese que ten "
+"acceso a internet e probe de novo."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Producironse problemas de seguranza coa actualización. Consulte co seu "
+"fornecedor de software para obter máis información."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Non hai espazo en disco dabondo. Por favor libere algún espazo e ténteo de "
+"novo."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Disculpe: a actualización non puido instalarse. Agarde a que se publique "
+"unha nova actualización e ténteo de novo. Se o problema persiste, contacte "
+"co seu fornecedor de software."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Onte, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Onte ás %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Hai dous días"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Hai tres días"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Hai catro días"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Hai cinco días"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Hai seis días"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Hai unha semana"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Hai dúas semanas"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Buscando novas actualizacións…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Configurando actualizacións…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Isto pode levar un anaco)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Última comprobación: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s xa non ten soporte."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "O seu SO xa non ten soporte."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Isto significa que non recibirá anovacións de seguranza."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Recoméndase que anovar a unha versión máis recente."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Pode producir custos adicionais"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Comprobando actualizacións ao usar banda larga móbil pode causar custos "
+"adicionais."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Comprobar de todos _modos"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Non hai rede"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Requírese acceso a Internet para buscar actualizacións."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Comprobando…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Buscando actualizacións"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Páxina de actualizacións"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Todos o software está actualizado"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Comprobando actualizacións ao usar banda larga móbil pode causar custos "
+"adicionais"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Comprobar de novo"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Conectarse para comprobar as actualizacións"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Preferencias da _rede"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "As actualizacións xestiónanse automaticamente"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Reiniciar e actualizar"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Anovar todos"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Firmware integrado"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Require reiniciar"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Actualizacións de aplicacións"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware de dispositivo"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Descargar"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Recoméndase facer unha copia seguranza dos seus datos e ficheiros antes de "
+"anovar."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Reiniciar agora"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "As actualizacións aplicaranse cando se reinicie o computador."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s está dispoñíbel agora"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Agardando para descargar %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Descargando %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s listo para ser instalado"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Hai unha anovación importante, con novas características e melloras."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Saber máis"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Engadir, quitar ou anovar software neste computador"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Actualizacións;Anovar;Orixes;Repositorios;Preferenzas;Instalar;Desinstalar;"
+"Programa;Software;Aplicación;Tenda;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Creación e edición de son"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Reprodutores de música"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depuradores"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "EIDs"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Intelixencia Artificial"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomía"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Química"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Idiomas"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemáticas"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robótica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Destacados"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Acción"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Bloques"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Taboleiro"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartas"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladores"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Nenos"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lóxica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Xogos de rol"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Deportes"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estratexia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Gráficos en 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografía"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Dixitalización"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Gráficos vectoriais"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visores"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendario"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base de datos"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanzas"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Procesador de texto"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tipos de letra"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Códecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Orixes de entrada"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Paquetes de idiomas"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localización"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Preferencias do hardware"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Conversa"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Novas"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navegadores web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Destacado"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editores de texto"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Destacados"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Arte"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Xeografía"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Bandas deseñadas"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Acción"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Saúde"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historia"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estilo de vida"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Política"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Deportes"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Son e vídeo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Ferramentas de desenvolvemento"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educación e ciencia"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Xogos"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Gráficos e fotografía"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produtividade"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicación e novas"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referencia"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilidades"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Anovacións do sistema operativo"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclúe melloras no rendemento, estabilidade e de seguridade."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Descargando as imaxes destacadas…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Hai unha anovación de Endless OS, con novas características e melloras."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"O servizo de actualización de EOS non puido obter e aplicar a actualización."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instalador de Appstrewam en todo o sistema de GNOME Software"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Produciuse un fallo ao analizar as opcións da liña de ordes"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Debe especificar exactamente un nome de ficheiro"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Este programa só pose ser usado polo usuario «root»"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Produciuse un fallo ao validar o tipo de contido"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Produciuse un erro ao copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Descargando os ficheiros de metadatos adicionais…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Descargando a información de anovación…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Actualice para obter as últimas características, e melloras de rendemento e "
+"estabilidade."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Compatibilidade de Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+"Flatpak é un ambiente de desenvolvemento de aplicacións de escritorio en "
+"Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Obtendo os metadatos de flatpak para %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Actualización de dispositivo %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Actualización de sistema %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Actualización de controlador embebido de %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Actualización de %s ME"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Actualización de %s ME Coporativo"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Actualización de %s ME de consumidor"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Actualización de controlador %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Actualización de controlador de Thunderbolt de %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Actualización do microcódigo da CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%s Controller Update"
+msgid "%s Configuration Update"
+msgstr "Actualización de configuración %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Descargando a sinatura da actualización de firmware…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Descargando os metadatos de actualización de firmware…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Compatibilidade de actualizacións de firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Fornece compatibilidade para actualizacións de firmware"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Descargando as puntuacións da aplicación…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Compatibilidade para as Puntuacións do Open Desktop"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS é un servizo que fornece opinións de usuarios sobre aplicacións"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Tenda de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Compatibilidade de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un snap é un paquete universal de Linux"
+
+#~ msgid "About %s"
+#~ msgstr "Sobre %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Preferencias da extensión"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Use os engadidos baixo o seu propio risco. Se ten calquera problema no "
+#~ "sistema é recomendábel desactivalos."
+
+#~ msgid "Spacing"
+#~ msgstr "Espaciado"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "A cantidade de espacio entre os fillos"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplicacións destacados"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensións da Shell"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Repositorio de Extensións da Shell de GNOME"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Descargando os metadatos da extensión da Shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Extensións da Shell de GNOME"
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..5281f9b
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,5681 @@
+# gnome-software Hebrew translation
+# Copyright (C) 2013 Richard Hughes
+# This file is distributed under the same license as the gnome-software package.
+# Elad Alfassa <elad@fedoraproject.org>, 2013.
+# Yosef Or Boczko <yoseforb@gmail.com>, 2014-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-30 12:00+0300\n"
+"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
+"Language-Team: Hebrew <yoseforb@gmail.com>\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 3.36.0\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n>2||n==0) ? 1 : 2\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "מנהל יישומים עבור GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"תכנה מאפשר לך למצוא ולהתקין יישומים חדשים והרחבות מערכת ולהסיר יישומים "
+"מותקנים קיימים."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"‏GNOME תכנה מציג יישומים מומלצים ופופולריים עם תיאור שימושי ומספר צילומי מסך "
+"לכל יישום. נתן למצוא יישומים דרך קטגוריות או דרך חיפוש. כמו כן נתן אף לעדכן "
+"את המערכת שלך באמצעות עדכונים לא מקוונים."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "דף סקירה"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "דף פרטים"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "דף התקנה"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "דף עדכון"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "פרטי עדכון"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "מיזם GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "A list of compatible projects"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+#| msgid "Whether it's the very first run of GNOME Software"
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Whether to manage updates and upgrades in GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+
+#: data/org.gnome.software.gschema.xml:15
+#| msgid "Whether to automatically download updates"
+msgid "Automatically download and install updates"
+msgstr "Automatically download and install updates"
+
+#: data/org.gnome.software.gschema.xml:16
+#| msgid ""
+#| "If enabled, GNOME Software automatically downloads updates in the "
+#| "background and prompts the user to install them when ready."
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notify the user about software updated in the background"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+
+#: data/org.gnome.software.gschema.xml:25
+#| msgid "Whether to automatically download updates"
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Whether to automatically refresh when on a metered connection"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+
+#: data/org.gnome.software.gschema.xml:30
+#| msgid "Whether it's the very first run of GNOME Software"
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Whether it’s the very first run of GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Show star ratings next to applications"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filter applications based on the default branch set for the remote"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Non-free applications show a warning dialog before install"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "A list of popular applications"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "A list of applications to use, overriding the system defined ones."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "The last update check timestamp"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "The last upgrade notification timestamp"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "The timestamp of the first security update, cleared after update"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "The last update timestamp"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "The last timestamp when the system was online and got any updates"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "The age in seconds to verify the upstream screenshot is still valid"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "The server to use for application reviews"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "The minimum karma score for reviews"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Reviews with karma less than this number will not be shown."
+
+#: data/org.gnome.software.gschema.xml:91
+#| msgid "A list of official sources that should not be considered 3rd party"
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"A list of official repositories that should not be considered 3rd party"
+
+#: data/org.gnome.software.gschema.xml:95
+#| msgid "A list of official sources that should be considered free software"
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"A list of official repositories that should be considered free software"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"The licence URL to use when an application should be considered free software"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Install bundled applications for all users on the system where possible"
+
+#: data/org.gnome.software.gschema.xml:107
+#| msgid "Allow access to the Software Sources dialog"
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Allow access to the Software Repositories dialog"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Offer upgrades for pre-releases"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Show some UI elements informing the user that an app is non-free"
+
+#: data/org.gnome.software.gschema.xml:119
+#| msgid "Show the prompt to install nonfree software sources"
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Show the prompt to install nonfree software repositories"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Show the installed size for apps in the list of installed applications"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "The URI that explains nonfree and proprietary software"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Install the AppStream files to a system-wide location for all users"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Enable GNOME Shell extensions repository"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "A string storing the gnome-online-account id used to login"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "התקנת תכנה"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "התקנת התכנה הנבחרת על המערכת"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "בחירת הכול"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "ביטול הבחירה"
+
+#: src/gnome-software.ui:35
+#| msgid "_Software Sources"
+msgid "_Software Repositories"
+msgstr "_מקורות תכנה"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr ""
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "תכנה"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "חזרה"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr ""
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_מותקן"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_עדכונים"
+
+#: src/gnome-software.ui:228
+#, fuzzy
+#| msgid "Search page"
+msgid "Search"
+msgstr "דף חיפוש"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "מקור"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+#, fuzzy
+#| msgid "Software Sources"
+msgid "Software Repositories"
+msgstr "מקורות תכנה"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr ""
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "הגדרות רשת"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+#, fuzzy
+#| msgid "Restart"
+msgid "Restart Now"
+msgstr "הפעלה מחדש"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+#, fuzzy
+#| msgid "More information"
+msgid "More Information"
+msgstr "מידע נוסף"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr ""
+
+#: src/gnome-software.ui:480
+#, fuzzy
+#| msgid "Find out more…"
+msgid "Find Out _More"
+msgstr "למידע נוסף…"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr ""
+
+#: lib/gs-app.c:4611
+#, fuzzy
+#| msgid "Package Manager"
+msgid "Package"
+msgstr "מנהל חבילות"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "בהמתנה"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "מותקן"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "בהתקנה"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "בהסרה"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Search for applications"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Show application details (using application ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Show application details (using package name)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+#| msgid "Show application details (using application ID)"
+msgid "Install the application (using application ID)"
+msgstr "Install the application (using application ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Open a local package file"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Show verbose debugging information"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr ""
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr ""
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Quit the running instance"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Prefer local file sources to AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Show version number"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Elad Alfassa <elad@fedoraproject.org>\n"
+"ירון שהרבני <sh.yaron@gmail.com>\n"
+"יוסף אור בוצ׳קו <yoseforb@gnome.org>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "על אודות תכנה"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "דרך נוחה לנהל את התכנה במחשבך"
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "אתר התכנית"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "התקנה…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "ביטול"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "התקנה"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+#, fuzzy
+#| msgid "_Update"
+msgid "Update"
+msgstr "_עדכון"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "הסרה"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "לא נתן להשתמש בהתקן בזמן העדכון."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+#, fuzzy
+#| msgid "%s is requesting additional fonts."
+msgid "Requires additional permissions"
+msgstr "%s דורש גופנים נוספים."
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_ביטול"
+
+#: src/gs-basic-auth-dialog.ui:39
+#, fuzzy
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "היגיון"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:119
+#, fuzzy
+#| msgid "Password"
+msgid "_Password"
+msgstr "ססמה"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "אחר"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "הכל"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "מומלצים"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, fuzzy, c-format
+#| msgid "Featured"
+msgid "Featured %s"
+msgstr "מומלצים"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "דירוג"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr ""
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr ""
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+#, fuzzy
+#| msgid "An application"
+msgid "Choose an application:"
+msgstr "יישום"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+#, fuzzy
+#| msgid "Updates have been installed"
+msgid "OS updates are now installed"
+msgstr "העדכון הותקנו"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "היישום %s הותקן"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+#, fuzzy
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for the changes to take effect."
+msgstr "יש להפעיל מחדש את המערכת כדי שהעדכונים יכנסו לתוקף."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "הפעלה מחדש"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "הפעלה"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "התקנת תכנת צד שלישי?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+#, fuzzy
+#| msgid "Enable Third-Party Software Source?"
+msgid "Enable Third-Party Software Repository?"
+msgstr "לאפשר מקורות תכנה מצד שלישי?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s אינו <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">תכנה חופשית וקוד פתוח</a>, ומסופק על ידי „%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "‏%s מסופק על ידי „%s”."
+
+#: src/gs-common.c:261
+#, fuzzy
+#| msgid "This software source must be enabled to continue installation."
+msgid "This software repository must be enabled to continue installation."
+msgstr "מקור תכנה זו חייב להיות פעיל על מנת להמשיך בהתקנה."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "התקנה או שימוש ב־%s עשוי להיות לא חוקי בכמה מדינות."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "התקנה או שימוש במקודדים עשוי להיות לא חוקי בכמה מדינות."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+#, fuzzy
+#| msgid "Don't Warn Again"
+msgid "Don’t Warn Again"
+msgstr "לא להזהיר שוב"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "לאפשר ולהתקין"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "להלן שגיאות מפורטות ממנהל החבילות:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "פרטים"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+#, fuzzy
+#| msgid "Updates have been installed"
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "העדכון הותקנו"
+msgstr[1] "העדכון הותקנו"
+msgstr[2] "העדכון הותקנו"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+#, fuzzy
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "יש להפעיל מחדש את המערכת כדי שהעדכונים יכנסו לתוקף."
+msgstr[1] "יש להפעיל מחדש את המערכת כדי שהעדכונים יכנסו לתוקף."
+msgstr[2] "יש להפעיל מחדש את המערכת כדי שהעדכונים יכנסו לתוקף."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "לא עכשיו"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Cartoon characters in unsafe situations"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Cartoon characters in aggressive conflict"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Graphic violence involving cartoon characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Characters in unsafe situations easily distinguishable from reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Characters in aggressive conflict easily distinguishable from reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Graphic violence easily distinguishable from reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Mildly realistic characters in unsafe situations"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Depictions of realistic characters in aggressive conflict"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Graphic violence involving realistic characters"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+#, fuzzy
+#| msgid "Realistic bloodshed"
+msgid "No bloodshed"
+msgstr "Realistic bloodshed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Unrealistic bloodshed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistic bloodshed"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Depictions of bloodshed and the mutilation of body parts"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Rape or other violent sexual behavior"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+#, fuzzy
+#| msgid "References to alcoholic beverages"
+msgid "No references to alcohol"
+msgstr "References to alcoholic beverages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "References to alcoholic beverages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Use of alcoholic beverages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+#, fuzzy
+#| msgid "References to illicit drugs"
+msgid "No references to illicit drugs"
+msgstr "References to illicit drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "References to illicit drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Use of illicit drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+#, fuzzy
+#| msgid "References to tobacco products"
+msgid "No references to tobacco products"
+msgstr "References to tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "References to tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Use of tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Brief artistic nudity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Prolonged nudity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+#, fuzzy
+#| msgid "Sexual references or depictions"
+msgid "No references to or depictions of sexual nature"
+msgstr "Sexual references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provocative references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Sexual references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Graphic sexual behavior"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Mild or infrequent use of profanity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Moderate use of profanity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Strong or frequent use of profanity"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstick humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgar or bathroom humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Mature or sexual humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativity towards a specific group of people"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discrimination designed to cause emotional harm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Explicit discrimination based on gender, sexuality, race or religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Product placement"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Explicit references to specific brands or trademarked products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+#, fuzzy
+#| msgid "Players are encouraged to purchase specific real-world items"
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Players are encouraged to purchase specific real-world items"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Gambling on random events using tokens or credits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+#, fuzzy
+#| msgid "Gambling using \"play\" money"
+msgid "Gambling using “play” money"
+msgstr "Gambling using \"play\" money"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Gambling using real money"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+#, fuzzy
+#| msgid "Ability to spend real money in-game"
+msgid "No ability to spend money"
+msgstr "Ability to spend real money in-game"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+#, fuzzy
+#| msgid "Players are encouraged to purchase specific real-world items"
+msgid "Users are encouraged to donate real money"
+msgstr "Players are encouraged to purchase specific real-world items"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+#, fuzzy
+#| msgid "Ability to spend real money in-game"
+msgid "Ability to spend real money in-app"
+msgstr "Ability to spend real money in-game"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+#, fuzzy
+#| msgid "Player-to-player game interactions without chat functionality"
+msgid "User-to-user interactions without chat functionality"
+msgstr "Player-to-player game interactions without chat functionality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+#, fuzzy
+#| msgid "Uncontrolled chat functionality between players"
+msgid "Moderated chat functionality between users"
+msgstr "Uncontrolled chat functionality between players"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+#, fuzzy
+#| msgid "Uncontrolled chat functionality between players"
+msgid "Uncontrolled chat functionality between users"
+msgstr "Uncontrolled chat functionality between players"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+#, fuzzy
+#| msgid "Uncontrolled audio or video chat functionality between players"
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Uncontrolled audio or video chat functionality between players"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+#, fuzzy
+#| msgid "Sharing social network usernames or email addresses"
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Sharing social network usernames or email addresses"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Sharing social network usernames or email addresses"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+#, fuzzy
+#| msgid "Sharing user information with 3rd parties"
+msgid "No sharing of user information with third parties"
+msgstr "Sharing user information with 3rd parties"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+#, fuzzy
+#| msgid "Sharing user information with 3rd parties"
+msgid "Sharing information that lets others identify the user"
+msgstr "Sharing user information with 3rd parties"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+#, fuzzy
+#| msgid "Sharing physical location to other users"
+msgid "No sharing of physical location with other users"
+msgstr "Sharing physical location to other users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+#, fuzzy
+#| msgid "Sharing physical location to other users"
+msgid "Sharing physical location with other users"
+msgstr "Sharing physical location to other users"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+#, fuzzy
+#| msgid "Sexual references or depictions"
+msgid "No references to prostitution"
+msgstr "Sexual references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+#, fuzzy
+#| msgid "Provocative references or depictions"
+msgid "Indirect references to prostitution"
+msgstr "Provocative references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+#, fuzzy
+#| msgid "Provocative references or depictions"
+msgid "Direct references to prostitution"
+msgstr "Provocative references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+#, fuzzy
+#| msgid "References to tobacco products"
+msgid "No references to adultery"
+msgstr "References to tobacco products"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+#, fuzzy
+#| msgid "Sexual references or depictions"
+msgid "No references to desecration"
+msgstr "Sexual references or depictions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr ""
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "כללי"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr ""
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr ""
+
+#: src/gs-content-rating.c:561
+#, fuzzy
+#| msgid "Featured"
+msgid "Mature"
+msgstr "מומלצים"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr ""
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr ""
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr ""
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "יישום"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s דורש תמיכה בתבנית קובץ נוספת."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "נדרש סוג MIME נוסף"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s דורש גופנים נוספים."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "נדרשים גופנים נוספים"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s דורש מקודדים נוספים."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "נדרשים מקודדים נוספים"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s דורש התקני מדפסת נוספים."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "נדרשים התקני מדפסת נוספים"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s דורש חבילות נוספות."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "נדרשות חבילות נוספות"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "חיפוש תכנה"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "בהסרה…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+#, fuzzy
+#| msgid "Setting up updates…"
+msgid "Pending update…"
+msgstr "מגדיר עדכונים…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#, fuzzy
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "בהסרה…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "יישום זה ניתן לשימוש רק כאשר יש חיבור אינטרנט פעיל."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_התקנה"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_התקנה…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_הפעלה"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "ה_סרה"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+#, fuzzy
+#| msgid "No Network"
+msgid "Network"
+msgstr "אין רשת"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr ""
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+#, fuzzy
+#| msgid "System Integration"
+msgid "System Services"
+msgstr "משתלב במערכת"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr ""
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr ""
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr ""
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr ""
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr ""
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+#, fuzzy
+#| msgid "_Remove from Folder"
+msgid "Home folder"
+msgstr "_הסרה מתיקייה"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr ""
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr ""
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+#, fuzzy
+#| msgctxt "Menu subcategory of System"
+#| msgid "File System"
+msgid "File system"
+msgstr "מערכת קבצים"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+#, fuzzy
+#| msgid "Download Size"
+msgid "Downloads folder"
+msgstr "גודל הורדה"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "הגדרות"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr ""
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr ""
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr ""
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+#, fuzzy
+#| msgid "Sandboxed"
+msgid "Sandbox escape"
+msgstr "ארגז חול"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+
+#: src/gs-details-page.c:1045
+#, fuzzy
+#| msgid "%u application installed"
+#| msgid_plural "%u applications installed"
+msgid "This application is fully sandboxed."
+msgstr "הותקן יישום אחד"
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "לעולם לא"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr ""
+
+#: src/gs-details-page.c:1333
+#, fuzzy
+#| msgctxt "Menu subcategory of Education"
+#| msgid "Medical"
+msgid "Medium"
+msgstr "רפואה"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr ""
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr ""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "נחלת הכלל"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr ""
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "תכנה חופשית"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "משתמשים מחוייבים לרישיון הבא:"
+msgstr[1] "משתמשים מחוייבים לרישיונות הבאים:"
+msgstr[2] "משתמשים מחוייבים לרישיונות הבאים:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "מידע נוסף"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "דף פרטים"
+
+#: src/gs-details-page.ui:222
+#, fuzzy
+#| msgid "_Download"
+msgid "Downloading"
+msgstr "הו_רדה"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_עדכון"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "הו_ספת צירוף מקשים"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "ה_סרת צירוף מקשים"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "לא סופקו צילומי מסך"
+
+#: src/gs-details-page.ui:386
+#, fuzzy
+#| msgid "Software Source Included"
+msgid "Software Repository Included"
+msgstr "מקור תכנה כלול"
+
+#: src/gs-details-page.ui:387
+#, fuzzy
+#| msgid ""
+#| "This application includes a software source which provides updates, as "
+#| "well as access to other software."
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr "יישום זה כולל מקור תכנה המספק עדכונים, כמו גם גישה לתכנות אחרות."
+
+#: src/gs-details-page.ui:394
+#, fuzzy
+#| msgid "No Software Source Included"
+msgid "No Software Repository Included"
+msgstr "לא כלול אף מקור תכנה"
+
+#: src/gs-details-page.ui:395
+#, fuzzy
+#| msgid ""
+#| "This application does not include a software source. It will not be "
+#| "updated with new versions."
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr "יישום זה לא כולל מקור תכנה. הוא לא יעודכן עם גרסאות חדשות."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "תכנה זו כבר מסופקת על ידי ההפצה שלך, ואין צורך להחליפה."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+#, fuzzy
+#| msgid "Software Source Identified"
+msgid "Software Repository Identified"
+msgstr "זוהה מקור תכנה"
+
+#: src/gs-details-page.ui:411
+#, fuzzy
+#| msgid ""
+#| "Adding this software source will give you access to additional software "
+#| "and upgrades."
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr "הוספת מקור תכנה זה ייתן לך גישה לתכנות ועדכונים נוספים."
+
+#: src/gs-details-page.ui:412
+#, fuzzy
+#| msgid "Only use software sources that you trust."
+msgid "Only use software repositories that you trust."
+msgstr "יש להשתמש אך ורק במקורות תכנה מהימנים לך."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_אתר אינטרנט"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "מתורגם לשפה שלך"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "מתועד"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "פעיל"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "משתלב במערכת"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "ארגז חול"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr ""
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "גרסה"
+
+#: src/gs-details-page.ui:677
+#, fuzzy
+#| msgid "Rating"
+msgid "Age Rating"
+msgstr "דירוג"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+#, fuzzy
+#| msgid "Version"
+msgid "Permissions"
+msgstr "גרסה"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "עדכון"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "קטגוריה"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "גודל התקנה"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "גודל הורדה"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "מפתח"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "רישיון"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "חופשי"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "קנייני"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "תוספים"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "התוספים הנבחרים יותקנו עם היישום."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "סקירה"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_כתיבת סקירה"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "לה_ציג עוד"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"המשמעות לכך היא שהיישום ניתן להרצה, העתקה, הפצה, לימוד ושינוי באופן חופשי."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "תכנה קניינית"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"המשמעות לכך היא שהתכנה בבעלות אדם או חברה. לרוב יש הגבלות בשימוש וקוד המקור "
+"בדרך כלל אינו נגיש."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "רישיון תכנה לא ידוע"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "תנאי הרישיון של תכנה זו אינם ידועים."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1389
+#, fuzzy
+#| msgid "No addon codecs are available for the %s format."
+msgid "No details were available for this rating."
+msgstr "לא זמינים מקודדים עבור התבנית %s."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " וגם "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "גופנים זמינים עבור התסריט %s"
+msgstr[1] "גופנים זמינים עבור התסריטים %s"
+msgstr[2] "גופנים זמינים עבור התסריטים %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "תכנה זמינה עבור %s"
+msgstr[1] "תכנה זמינה עבור %s"
+msgstr[2] "תכנה זמינה עבור %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "לא ניתן למצוא את התכנה הדרושה"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s לא נמצא"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "באתר האינטרנט"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "אין יישומים זמינים המספקים את הקובץ %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "מידע על אודות %s, כמו גם אפשרויות לקבלת יישומים חסרים ניתן למצוא %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "אין יישומים זמינים עבור תמיכה ב־%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s אינו זמין."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"מידע על אודות %s, כמו גם אפשרויות לקבלת יישום התומך בתבנית זו ניתן למצוא %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "אין גופנים זמינים עבור תמיכה בתסריט %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "מידע על אודות %s, כמו גם אפשרויות לקבלת גופנים נוספים ניתן למצוא %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "לא זמינים מקודדים עבור התבנית %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"מידע על אודות %s, כמו גם אפשרויות לקבלת מקודד היודע לנגן תבנית זו ניתן למצוא "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "אין משאבי פלזמה זמינים עבור תמיכה ב־%s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"מידע על אודות %s, כמו גם אפשרויות לקבלת משאבי פלזמה נוספים ניתן למצוא %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "אין התקני מדפסת זמינים עבור %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"מידע על אודות %s, כמו גם אפשרויות לקבלת התקנים התומכים במדפסת זו ניתן למצוא "
+"%s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "אתר אינטרנט זה"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "למרבה הצער, %s אשר חיפשת לא נמצא. יש לראות %s עבור מידע נוסף."
+msgstr[1] "למרבה הצער, %s אשר חיפשת לא נמצא. יש לראות %s עבור מידע נוסף."
+msgstr[2] "למרבה הצער, %s אשר חיפשת לא נמצא. יש לראות %s עבור מידע נוסף."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "ארע כשל במציאת כל תוצאת חיפוש"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s תבנית קובץ"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "דף מקודדים"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "ברוך בואך"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "ברוך בואך לתכנה"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"תכנה מאפשר לכם להתקין את כל התכנות שתצטרכו, הכל ממקום אחד. ראו ההמלצות שלנו, "
+"סיירו בקטגוריות, או חפשו את היישומים שברצונכם."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_בואו לעשות קניות"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "הוסר"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "הותקן"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "עודכן"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "‏%e ב%B ‏%Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "היסטוריה"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "יישומי מערכת"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "דף התקנה"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "רשימת תכנות בהורדה"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "דף בטעינה"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "מתחיל…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:53
+#, fuzzy
+#| msgid "Network Settings"
+msgid "Open Network _Settings"
+msgstr "הגדרות רשת"
+
+#: src/gs-moderate-page.ui:7
+#, fuzzy
+msgid "Moderate page"
+msgstr "דף עדכונים"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+#, fuzzy
+#| msgid "System"
+msgid "system"
+msgstr "מערכת"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr ""
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr ""
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr ""
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr ""
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+#, fuzzy
+#| msgid "Installing"
+msgid "Installation"
+msgstr "בהתקנה"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "עוד…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "יישומי שמע ווידאו מומלצים"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "משחקים מומלצים"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "יישומי גרפיקה מומלצים"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "יישומים משרדיים מומלצים"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+#, fuzzy
+#| msgid ""
+#| "Proprietary software has restrictions on use and access to source code."
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr "לתכנה קניינית הגבלות בשימוש ובגישה לקוד המקור."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "למידע נוסף…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "לאפשר"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "דף סקירה"
+
+#: src/gs-overview-page.ui:39
+#, fuzzy
+#| msgid "Enable Third-Party Software Source?"
+msgid "Enable Third Party Software Repositories?"
+msgstr "לאפשר מקורות תכנה מצד שלישי?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr ""
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr ""
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+#, fuzzy
+#| msgid "Editor's Picks"
+msgid "Editor’s Picks"
+msgstr "יישומים נבחרים"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "קטגוריות"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "לא נמצא מידע על יישומים"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "מכין את %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, fuzzy, c-format
+#| msgid "Are you sure you want to remove the %s source?"
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "האם אכן ברצונך להסיר את המקור %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, fuzzy, c-format
+#| msgid ""
+#| "All applications from %s will be removed, and you will have to re-install "
+#| "the source to use them again."
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"היישומים מהמקור %s יוסרו, ועליך יהיה להתקין מחדש את המקור על מנת להשתמש בהם "
+"שוב."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "האם אכן ברצונך להסיר את %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "‏%s יוסר, ויהיה צורך להתקין אותו כדי להשתמש בו שוב."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "‏%s (הותקן)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:43
+#, fuzzy
+#| msgid "Other Updates"
+msgid "Automatic Updates"
+msgstr "עדכונים אחרים"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"כמה מהתכנות המותקנות אינן תואמות עם %s. אם ברצונך להמשיך, דע כי התכנות הבאות "
+"תוסרנה אוטומטית בזמן השדרוג:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "תכנה לא תואמת"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "ה_משך"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "הותקן יישום אחד"
+msgstr[1] "הותקנו %u יישומים"
+msgstr[2] "הותקנו שני יישומים"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "הותקן תוסף אחד"
+msgstr[1] "התוקנו %u תוספים"
+msgstr[2] "התוקנו שני תוספים"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "יישום אחד"
+msgstr[1] "%u יישומים"
+msgstr[2] "שני יישומים"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "תוסף אחד"
+msgstr[1] "־%u תוספים"
+msgstr[2] "שני תוספים"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s ו%s הותקנו"
+msgstr[1] "%s ו%s הותקנו"
+msgstr[2] "%s ו%s הותקנו"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, fuzzy, c-format
+#| msgid "Remove…"
+msgid "Remove “%s”?"
+msgstr "הסרה…"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+#, fuzzy
+#| msgid "Enable"
+msgid "Disable"
+msgstr "לאפשר"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "מערכת ההפעלה"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr ""
+
+#: src/gs-repos-dialog.ui:73
+#, fuzzy
+#| msgid "Additional Sources"
+msgid "No Additional Repositories"
+msgstr "מקורות נוספים"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+#, fuzzy
+#| msgid "Enable"
+msgid "_Enable"
+msgstr "לאפשר"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+#, fuzzy
+#| msgid "Remove…"
+msgid "_Remove…"
+msgstr "הסרה…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+#, fuzzy
+#| msgid "Enable"
+msgid "Enabling"
+msgstr "לאפשר"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+#, fuzzy
+#| msgid "Installing"
+msgid "Disabling"
+msgstr "בהתקנה"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+#, fuzzy
+#| msgid "Enable"
+msgid "Enabled"
+msgstr "לאפשר"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "שנוּא"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+#, fuzzy
+#| msgid "Don't like it"
+msgid "Don’t like it"
+msgstr "לא אהוב"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+#, fuzzy
+#| msgid "It's OK"
+msgid "It’s OK"
+msgstr "סביר"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "חביב"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "אהוב"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "נא להשקיע זמן משמעותי יותר בכתיבת הסקירה"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "נא לבחור מספר כוכבים לדירוג"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "התקציר קצר מדי"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "התקציר ארוך מדי"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "התיאור קצר מדי"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "התיאור ארוך מדי"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "פרסום סקירה"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_פרסום"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "תקציר"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "יש לתת תקציר של הסקירה שלך, לדגמה: „יישום מצוין, ממליץ ביותר”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "סקירה"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "מה דעתך על היישום? יש לנסות לתת סיבות לדעתך."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "ניתן לדווח על סקירה מעליבה, גסה או משפילה."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "לאחר הדיווח, הסקירה תוסתר עד אשר הא תיבדק על יד מנהל."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "לדווח על הסקירה?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "דיווח"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "סקירה זו היתה שימושית בעבורך?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "כן"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "לא"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "המממ"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "דיווח…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "הסרה…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "לא נמצא צילום מסך"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "ארע כשל בטעינת התמונה"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "גודל צילום מסך לא נמצא"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "לא ניתן ליצור מטמון"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "צילום מסך לא תקף"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "לא זמין צילום מסך"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "צילום מסך"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "דף חיפוש"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "לא נמצאו יישומים"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+#, fuzzy
+#| msgid "Whether to automatically download updates"
+msgid "Unable to download updates"
+msgstr "Whether to automatically download updates"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+#, fuzzy
+#| msgid "Internet access was required but wasn’t available."
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "דרושה גישה לרשת אך זו לא היתה זמינה."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+#, fuzzy
+#| msgid "There wasn’t enough disk space."
+msgid "Unable to download updates: not enough disk space"
+msgstr "לא היה מספיק מקום בכונן הקשיח שלך."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+#, fuzzy
+#| msgid "Go online to check for updates"
+msgid "Unable to get list of updates"
+msgstr "מעבר למצב מקוון כדי לבדוק אם יש עדכונים"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, fuzzy, c-format
+#| msgid "The file is not supported."
+msgid "Unable to install %s as not supported"
+msgstr "הקובץ אינו נתמך."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+#, fuzzy
+#| msgid "Internet access was required but wasn’t available."
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "דרושה גישה לרשת אך זו לא היתה זמינה."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, fuzzy, c-format
+#| msgid "There wasn’t enough disk space."
+msgid "Unable to install %s: not enough disk space"
+msgstr "לא היה מספיק מקום בכונן הקשיח שלך."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, fuzzy, c-format
+#| msgid "Enable and Install"
+msgid "Unable to install %s"
+msgstr "לאפשר ולהתקין"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+#, fuzzy
+#| msgid "Internet access was required but wasn’t available."
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "דרושה גישה לרשת אך זו לא היתה זמינה."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, fuzzy, c-format
+#| msgid "There wasn’t enough disk space."
+msgid "Unable to update %s: not enough disk space"
+msgstr "לא היה מספיק מקום בכונן הקשיח שלך."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, fuzzy, c-format
+#| msgid "Failed To Update"
+msgid "Unable to update %s"
+msgstr "ארע כשל בעדכון"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, fuzzy, c-format
+#| msgid "Installed Updates"
+msgid "Unable to install updates"
+msgstr "עדכונים מותקנים"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, fuzzy, c-format
+#| msgid "Upgrade to %s failed."
+msgid "Unable to upgrade to %s as download failed"
+msgstr "שדרוג ל־%s נכשל."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, fuzzy, c-format
+#| msgid "Internet access was required but wasn’t available."
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "דרושה גישה לרשת אך זו לא היתה זמינה."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, fuzzy, c-format
+#| msgid "There wasn’t enough disk space."
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "לא היה מספיק מקום בכונן הקשיח שלך."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, fuzzy, c-format
+#| msgid "%s is now installed"
+msgid "Unable to launch %s: %s is not installed"
+msgstr "היישום %s הותקן"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+#, fuzzy
+#| msgid ""
+#| "There wasn’t enough disk space. Please free up some space and try again."
+msgid "Not enough disk space — free up some space and try again"
+msgstr "לא היה מספיק מקום פנוי בכונן הקשיח שלך. נא לפנות מעט מקום ולנסות שוב."
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+#, fuzzy
+#| msgid "Sorry, this did not work"
+msgid "Sorry, something went wrong"
+msgstr "זה לא עבד, עמך הסליחה"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+#, fuzzy
+#| msgid "The file is not supported."
+msgid "Failed to install file: not supported"
+msgstr "הקובץ אינו נתמך."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+#, fuzzy
+#| msgid "The file is not supported."
+msgid "Failed to install: not supported"
+msgstr "הקובץ אינו נתמך."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr ""
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+#, fuzzy
+#| msgid "The summary is too long"
+msgid "The battery level is too low"
+msgstr "התקציר ארוך מדי"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, fuzzy, c-format
+#| msgid "Source"
+msgid "Source: %s"
+msgstr "מקור"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "‏%s (בהתקנה)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "‏%s (בהסרה)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+#, fuzzy
+#| msgid "_Remove"
+msgid "_Remove All"
+msgstr "ה_סרה"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "אין תיאור זמין לעדכון."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "מותקן על %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "עדכונים מותקנים"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+#, fuzzy
+#| msgid "Additional Sources"
+msgid "Additions"
+msgstr "מקורות נוספים"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+#, fuzzy
+#| msgid "Remove"
+msgid "Removals"
+msgstr "הסרה"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "עדכונים"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+#, fuzzy
+#| msgid "_Download"
+msgid "Downgrades"
+msgstr "הו_רדה"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "לא הותקנו עדכונים על מערכת זו."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "עדכוני אבטחה ממתינים"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "מומלץ להתקין עדכונים חשובים כעת"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "הפעלה מחדש והתקנה"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "עדכוני תכנה זמינים"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "עדכוני מערכת ויישומים חשובים מוכנים להתקנה"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "הצגה"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, fuzzy, c-format
+#| msgid "%u application installed"
+#| msgid_plural "%u applications installed"
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "הותקן יישום אחד"
+msgstr[1] "הותקנו %u יישומים"
+msgstr[2] "הותקנו שני יישומים"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr ""
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+#, fuzzy
+#| msgid "Featured Application"
+msgid "Please restart the application."
+msgstr "יישום מומלץ"
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr ""
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, fuzzy, c-format
+#| msgid "%u application installed"
+#| msgid_plural "%u applications installed"
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "הותקן יישום אחד"
+msgstr[1] "הותקנו %u יישומים"
+msgstr[2] "הותקנו שני יישומים"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr ""
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+#, fuzzy
+#| msgid "Software Updates Available"
+msgid "Operating System Updates Unavailable"
+msgstr "עדכוני תכנה זמינים"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "גרסה חדשה של %s זמינה להתקנה"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "שדרוג תכנה זמין"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "ארע כשל בעדכון התכנות"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "ארע כשל בהתקנת עדכונים מערכת חשובים."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "הצגת פרטים"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr ""
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, fuzzy, c-format
+#| msgid "Welcome to Software"
+msgid "Welcome to %s %s!"
+msgstr "ברוך בואך לתכנה"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "הותקן עדכון מערכת"
+msgstr[1] "הותקנו עדכוני מערכת"
+msgstr[2] "הותקנו עדכוני מערכת"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "הותקן עדכון מערכת חשוב"
+msgstr[1] "הותקנו עדכונים מערכת חשובים"
+msgstr[2] "הותקנו עדכונים מערכת חשובים"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "סקירה"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "ארע כשל בעדכון"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "המערכת כבר היתה מעודכנת."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "העדכון בוטל."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"נדרשה גישה לאינטרנט אך זו לא היתה זמינה. נא לוודא כי יש לך גישה לאינטרנט "
+"ואחר לנסות שוב."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "היתה בעיית אבטחה עם העדכון. נא להתייעץ עם ספק התכנה שלך למידע נוסף."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "לא היה מספיק מקום פנוי בכונן הקשיח שלך. נא לפנות מעט מקום ולנסות שוב."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"אנו מצטערים: התקנת העדכון נכשלה. נא להמתין לעדכון נוסף ולנסות שוב. אם הבעיה "
+"נמשכת, נא ליצור קשר עם ספק התכנה שלך."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "אתמול, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "אתמול, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "לפני יומיים"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "לפני שלושה ימים"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "לפני ארבעה ימים"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "לפני חמישה ימים"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "לפני שישה ימים"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "לפני שבוע"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "לפני שבועיים"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "מחפש עדכונים חדשים…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "מגדיר עדכונים…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(פעולה זו יכולה לקחת קצת זמן)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "בדיקה אחרונה: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, fuzzy, c-format
+#| msgid "The file is not supported."
+msgid "%s %s is no longer supported."
+msgstr "הקובץ אינו נתמך."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+#, fuzzy
+#| msgid "The file is not supported."
+msgid "Your OS is no longer supported."
+msgstr "הקובץ אינו נתמך."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+#, fuzzy
+#| msgid "It is recommended that you install important updates now"
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "מומלץ להתקין עדכונים חשובים כעת"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+#, fuzzy
+#| msgid "Charges may apply"
+msgid "Charges May Apply"
+msgstr "עשויים לחול חיובים"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "בדיקה עבור עדכונים בשימוש פס רחב נייד יכולה לשאת בחיובים."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+#, fuzzy
+#| msgid "Check Anyway"
+msgid "Check _Anyway"
+msgstr "בדיקה בכל מקרה"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "אין רשת"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "דרושה גישה לרשת כדי לבדוק אם יש עדכונים."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+#, fuzzy
+#| msgid "Checking for updates…"
+msgid "Checking…"
+msgstr "בודק אם יש עדכונים…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "בדיקת עדכונים"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "דף עדכונים"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "כל התכנות מעודכנות"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "בדיקה עבור עדכונים בשימוש פס רחב נייד יכולה לשאת בחיובים"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_בדיקה בכל מקרה"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "מעבר למצב מקוון כדי לבדוק אם יש עדכונים"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "הגדרות _רשת"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "העדכונים מנוהלים אוטומטית"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+#, fuzzy
+#| msgid "Restart & Install"
+msgid "Restart & Update"
+msgstr "הפעלה מחדש והתקנה"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+#, fuzzy
+#| msgid "_Update"
+msgid "Update All"
+msgstr "_עדכון"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+#, fuzzy
+#| msgid "Restart"
+msgid "Requires Restart"
+msgstr "הפעלה מחדש"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+#, fuzzy
+#| msgid "No Application Found"
+msgid "Application Updates"
+msgstr "לא נמצאו יישומים"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr ""
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "הו_רדה"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "מומלץ לגבות את המידע והקבצים שלך לפני העדכון."
+
+#: src/gs-upgrade-banner.c:95
+#, fuzzy
+#| msgid "Restart"
+msgid "_Restart Now"
+msgstr "הפעלה מחדש"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "‏%s %s זמין כעת"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, fuzzy, c-format
+#| msgid "Downloading %s %s"
+msgid "Waiting to Download %s %s"
+msgstr "מוריד %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "מוריד %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "‏%s %s מוכן להתקנה"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "עדכון גדול, עם תכונות חדשות וליטוש נוסף."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_ללמוד עוד"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "הוספה, הסרה ועדכון של תוכנות במחשב זה"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"עדכונים;שדרוג;מקורות;מאגרים;העדפות;התקנה;הסרה;מחיקה;תכנית;תכנה;יישום;חנות;"
+
+#: plugins/core/gs-desktop-common.c:17
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:20
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:23
+#, fuzzy
+#| msgctxt "Menu of AudioVideo"
+#| msgid "Audio Creation & Editing"
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "יצירה ועריכת שמע"
+
+#: plugins/core/gs-desktop-common.c:29
+#, fuzzy
+#| msgctxt "Menu of AudioVideo"
+#| msgid "Music Players"
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "נגני מוזיקה"
+
+#: plugins/core/gs-desktop-common.c:38
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:41
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:44
+#, fuzzy
+#| msgctxt "Menu of Development"
+#| msgid "Debuggers"
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "מנפי שגיאות"
+
+#: plugins/core/gs-desktop-common.c:47
+#, fuzzy
+#| msgctxt "Menu of Development"
+#| msgid "IDEs"
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "סביבות פיתוח משולבות (IDE)"
+
+#: plugins/core/gs-desktop-common.c:56
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:60
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:64
+#, fuzzy
+#| msgctxt "Menu of Science"
+#| msgid "Artificial Intelligence"
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "בינה מלאכותית"
+
+#: plugins/core/gs-desktop-common.c:67
+#, fuzzy
+#| msgctxt "Menu of Education"
+#| msgid "Astronomy"
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "אסטרונומיה"
+
+#: plugins/core/gs-desktop-common.c:71
+#, fuzzy
+#| msgctxt "Menu of Education"
+#| msgid "Chemistry"
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "כימיה"
+
+#: plugins/core/gs-desktop-common.c:75
+#, fuzzy
+#| msgctxt "Menu of Education"
+#| msgid "Languages"
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "שפות"
+
+#: plugins/core/gs-desktop-common.c:79
+#, fuzzy
+#| msgctxt "Menu of Education"
+#| msgid "Math"
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "מתמטיקה"
+
+#: plugins/core/gs-desktop-common.c:86
+#, fuzzy
+#| msgctxt "Menu of Science"
+#| msgid "Robotics"
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "רובוטיקה"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "פעולה"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "הרפתקה"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "ארקייד"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "בלוקים"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "לוח"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "קלפים"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "הדמייה"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "ילדים"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "היגיון"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "משחקי תפקידים"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "ספורט"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "אסטרטגיה"
+
+#: plugins/core/gs-desktop-common.c:143
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:146
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:149
+#, fuzzy
+#| msgctxt "Menu of Graphics"
+#| msgid "3D Graphics"
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "גרפיקה תלת־ממדית"
+
+#: plugins/core/gs-desktop-common.c:152
+#, fuzzy
+#| msgctxt "Menu of Graphics"
+#| msgid "Photography"
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "צילום"
+
+#: plugins/core/gs-desktop-common.c:155
+#, fuzzy
+#| msgctxt "Menu of Graphics"
+#| msgid "Scanning"
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "סריקה"
+
+#: plugins/core/gs-desktop-common.c:158
+#, fuzzy
+#| msgctxt "Menu of Graphics"
+#| msgid "Vector Graphics"
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "גרפיקה וקטורית"
+
+#: plugins/core/gs-desktop-common.c:161
+#, fuzzy
+#| msgctxt "Menu of Graphics"
+#| msgid "Viewers"
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "מציגים"
+
+#: plugins/core/gs-desktop-common.c:169
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:172
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:175
+#, fuzzy
+#| msgctxt "Menu of Office"
+#| msgid "Calendar"
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "לוח שנה"
+
+#: plugins/core/gs-desktop-common.c:179
+#, fuzzy
+#| msgctxt "Menu of Office"
+#| msgid "Database"
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "מסד נתונים"
+
+#: plugins/core/gs-desktop-common.c:182
+#, fuzzy
+#| msgctxt "Menu of Office"
+#| msgid "Finance"
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "כספים"
+
+#: plugins/core/gs-desktop-common.c:186
+#, fuzzy
+#| msgctxt "Menu of Office"
+#| msgid "Word Processor"
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "מעבד תמלילים"
+
+#: plugins/core/gs-desktop-common.c:195
+#, fuzzy
+#| msgctxt "Menu of Addons"
+#| msgid "Fonts"
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "גופנים"
+
+#: plugins/core/gs-desktop-common.c:198
+#, fuzzy
+#| msgctxt "Menu of Addons"
+#| msgid "Codecs"
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "מקודדים"
+
+#: plugins/core/gs-desktop-common.c:201
+#, fuzzy
+#| msgctxt "Menu of Addons"
+#| msgid "Input Sources"
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "מקורות קלט"
+
+#: plugins/core/gs-desktop-common.c:204
+#, fuzzy
+#| msgctxt "Menu of Addons"
+#| msgid "Language Packs"
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "חבילות שפה"
+
+#: plugins/core/gs-desktop-common.c:207
+#, fuzzy
+#| msgctxt "Menu of Addons"
+#| msgid "Localization"
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "בנאום"
+
+#: plugins/core/gs-desktop-common.c:210
+#, fuzzy
+#| msgctxt "Menu of Addons"
+#| msgid "Hardware Drivers"
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "התקני חומרה"
+
+#: plugins/core/gs-desktop-common.c:218
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:221
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:224
+#, fuzzy
+#| msgctxt "Menu of Communication"
+#| msgid "Chat"
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "צ׳אט"
+
+#: plugins/core/gs-desktop-common.c:231
+#, fuzzy
+#| msgctxt "Menu of Communication"
+#| msgid "News"
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "חדשות"
+
+#: plugins/core/gs-desktop-common.c:235
+#, fuzzy
+#| msgctxt "Menu of Communication"
+#| msgid "Web Browsers"
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "דפדפנים"
+
+#: plugins/core/gs-desktop-common.c:243
+#, fuzzy
+#| msgid "All"
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:246
+#, fuzzy
+#| msgid "Featured"
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:249
+#, fuzzy
+#| msgctxt "Menu of Utility"
+#| msgid "Text Editors"
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "עורכי טקסט"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "הכל"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "מומלצים"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "אומנות"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "ביוגרפיה"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "קומיקס"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "בדיוני"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "רפואה"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "היסטוריה"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "אורח חיים"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "פוליטיקה"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "ספורט"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "שמע ווידאו"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "כלי פיתוח"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+#, fuzzy
+#| msgid "Education"
+msgid "Education & Science"
+msgstr "חינוך"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "משחקים"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "גרפיקה וצילום"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "משרד"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "תקשורת וחדשות"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "מראה מקום"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "עזרים"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "עדכונים למערכת ההפעלה"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "לרבות שיפורי ביצועים, יציבות ואבטחה."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+#, fuzzy
+#| msgid "Downloading new updates…"
+msgid "Downloading featured images…"
+msgstr "מוריד עדכונים חדשים…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+#, fuzzy
+#| msgid "A major upgrade, with new features and added polish."
+msgid "An Endless OS update with new features and fixes."
+msgstr "עדכון גדול, עם תכונות חדשות וליטוש נוסף."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+#, fuzzy
+#| msgid "Failed to load image"
+msgid "Failed to parse command line arguments"
+msgstr "ארע כשל בטעינת התמונה"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+#, fuzzy
+#| msgid "Failed To Update"
+msgid "Failed to copy"
+msgstr "ארע כשל בעדכון"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+#, fuzzy
+#| msgid "Downloading new updates…"
+msgid "Downloading extra metadata files…"
+msgstr "מוריד עדכונים חדשים…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+#, fuzzy
+#| msgid "Downloading new updates…"
+msgid "Downloading upgrade information…"
+msgstr "מוריד עדכונים חדשים…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+#, fuzzy
+#| msgid "Includes performance, stability and security improvements."
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "לרבות שיפורי ביצועים, יציבות ואבטחה."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr ""
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, fuzzy, c-format
+#| msgid "Other Updates"
+msgid "%s System Update"
+msgstr "עדכונים אחרים"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, fuzzy, c-format
+#| msgid "OS Updates"
+msgid "%s ME Update"
+msgstr "עדכונים למערכת ההפעלה"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr ""
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, fuzzy, c-format
+#| msgid "Installed Updates"
+msgid "%s Controller Update"
+msgstr "עדכונים מותקנים"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr ""
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr ""
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+#, fuzzy
+#| msgid "Downloading new updates…"
+msgid "Downloading firmware update signature…"
+msgstr "מוריד עדכונים חדשים…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+#, fuzzy
+#| msgid "Downloading new updates…"
+msgid "Downloading firmware update metadata…"
+msgstr "מוריד עדכונים חדשים…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+#, fuzzy
+#| msgid "Downloading new updates…"
+msgid "Downloading application ratings…"
+msgstr "מוריד עדכונים חדשים…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "The list of extra sources that have been previously enabled"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Show the folder management UI"
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Show non-free software in search results"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "A list of non-free sources that can be optionally enabled"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "הוספה לתיקיית יישומים"
+
+#~ msgid "_Add"
+#~ msgstr "_הוספה"
+
+#~ msgid "_All"
+#~ msgstr "ה_כול"
+
+#~ msgid "Folder Name"
+#~ msgstr "שם תיקייה"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Show profiling information for the service"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "על מנת להמשיך יש להתחבר."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "על מנת להמשיך יש להתחבר אל %s."
+
+#~ msgid "Email address"
+#~ msgstr "כתובת דוא״ל"
+
+#~ msgid "I have an account already"
+#~ msgstr "כבר יש ברשותי חשבון"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "ברצוני להירשם עכשיו"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "שכחתי את הססמה שלי"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "התחברות אוטומטית להבא"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "יש להזין את הקוד הסודי החד פעמי עבור שני גורמי אימות."
+
+#~ msgid "PIN"
+#~ msgstr "קוד סוגי"
+
+#~ msgid "Continue"
+#~ msgstr "המשך"
+
+#~ msgid "Spacing"
+#~ msgstr "Spacing"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "The amount of space between children"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "מידע על אודות %s, כמו גם אפשרויות לקבלת מקודד היודע לנגן תבנית זו ניתן "
+#~ "למצוא באתר האינטרנט."
+
+#~ msgid "Total"
+#~ msgstr "סך הכל"
+
+#~ msgid "Extension Settings"
+#~ msgstr "הגדרות הרחבות"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "הרחבות משמשות על אחריותך בלבד. אם נתקלת בבעיות במערכת, מומלץ להשבית אותן."
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "לא נתן למצוא את „%s”"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "יש ללחוץ על פריטים כדי לבחור אותם"
+
+#~ msgid "Select"
+#~ msgstr "בחירה"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_הוספה לתיקייה…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "ה_עברה לתיקייה…"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "מספק גישה לתכנה נוספת, לרבות דפדפנים ומשחקים."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "לאפשר מקורות תכנה קניינית?"
+
+#~ msgid "_Install All"
+#~ msgstr "ה_תקנת הכל"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "הפעלה מחדש וה_תקנה"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "אין יישומים או הרחבות מותקנים; תכנות אחרות עדיין עשויות להימצא"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "על פי רוב יש הגבלות בשימוש ובגישה לקוד המקור."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "מקורות תכנה קניינית"
+
+#~ msgid "Remove Source"
+#~ msgstr "הסרת מקור"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "נתן להוריד תכנה מהאינטרנט. הדבר יתן לך גישה לתכנה נוספת שאינה מסופקת על "
+#~ "ידי %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr "הסרת מקור תכנה גם תסיר כל תכנה שהותקנה ממנו."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "לא הותקנו תכנות ממקור זה"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "הותקן ממקור זה"
+
+#~ msgid "Source Details"
+#~ msgstr "פרטי מקור"
+
+#~ msgid "Last Checked"
+#~ msgstr "בדיקה אחרונה"
+
+#~ msgid "Added"
+#~ msgstr "נוסף"
+
+#~ msgid "Website"
+#~ msgstr "אתר אינטרנט"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "התקנת %s נכשלה."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "מחיקת %s נכשלה."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "נא לוודא כי יש לך גישה לאינטרנט ואחר לנסות שוב."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "נא לפנות מעט מקום ולנסות שוב."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "אם הבעיה נמשכת, נא ליצור קשר עם ספק התכנה שלך."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Player-to-player preset interactions without chat functionality"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "ללא"
+
+#~ msgid "_About"
+#~ msgstr "על _אודות"
+
+#~ msgid "_Quit"
+#~ msgstr "י_ציאה"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "רשימת תכנות בטעינה"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Addons"
+#~ msgid "Shell Extensions"
+#~ msgstr "הרחבות מעטפת"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "אסטרונומיה"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "כימיה"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "מתמטיקה"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "הכל"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "מומלצים"
+
+#~ msgid "Science"
+#~ msgstr "מדע"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "מקורות תכנה נותנים לך גישה לתכנות נוספות."
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Enter GApplication service mode"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "עדכון קודם לא הסתיים."
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "עדכון לא נחתם בדרך הנכונה."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "לא ניתן להשלים את העדכון."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "היה דרוש עדכון במצב לא מקוון אך אין חבילות הדורשות עדכון."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "לא נשאר מקום על ההתקן."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "ארע כשל בהתקנת עדכון כראוי."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "העדכון הלא מקוון נכשל בדרך בלתי צפויה."
+
+#~ msgid "_Installing"
+#~ msgstr "_בהתקנה"
+
+#~ msgid "_Removing"
+#~ msgstr "_בהסרה"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "לא ידוע"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "מחשב…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "לא ידוע"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "יישומי רשת בלבד"
+
+#~ msgid "_History"
+#~ msgstr "_היסטוריה"
+
+#~ msgid "Size"
+#~ msgstr "גודל"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "יישומים משרדיים מומלצים"
+
+#~ msgid "No sources found."
+#~ msgstr "לא נמצאו מקורות תכנה."
+
+#~ msgid "OK"
+#~ msgstr "אישור"
+
+#~ msgid "One Star"
+#~ msgstr "כוכב אחד"
+
+#~ msgid "Two Stars"
+#~ msgstr "שני כוכבים"
+
+#~ msgid "Three Stars"
+#~ msgstr "שלושה כוכבים"
+
+#~ msgid "Four Stars"
+#~ msgstr "ארבעה כוכבים"
+
+#~ msgid "Five Stars"
+#~ msgstr "חמישה כוכבים"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "לא נמצאו נתוני AppStream"
+
+#~ msgid " or "
+#~ msgstr " או "
+
+#~ msgid "Audio"
+#~ msgstr "שמע"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "מסדי נתונים"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "צריבת תקליטורים"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "רדיו חובבים"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "מערבל"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "מוזיקה"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "מקליטים"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "רצף תשדיר (Sequencer)"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "מלקטים"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "פיתוח"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "מסדי נתונים"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "GUI Designers"
+#~ msgstr "מעצבי מנשק משתמש"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "סביבות פיתוח משולבות"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "אפיון"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "בקרת גרסאות"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "תרגום"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "פיתוח אינטרנט"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "ביולוגיה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "מדעי המחשב"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "בינוי"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "המחשת נתונים"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "כלכלה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "חשמל"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "אלקטרוניקה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "הנדסה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "גיאולוגיה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "מדעי כדור הארץ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "היסטוריה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "מדעי הרוח"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "עיבוד תמונות"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "ספרות"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "מפות"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "מוזיקה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "אנליזה נומרית"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "עיבוד מקבילי"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "פיזיקה"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "רוחניות"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "משחקי יריות"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "הדמיית ניהול ממוחשבות"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "ספורט"
+
+#~ msgid "Graphics"
+#~ msgstr "גרפיקה"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "גרפיקה דו־ממדית"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "זיהוי תווים אופטי"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "תמונת מפת סיביות"
+
+#~ msgid "Internet"
+#~ msgstr "אינטרנט"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "חיוג"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "דואר אלקטרוני"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "הזנות"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "העברת קבצים"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "רדיו חובבים"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "מסרים מיידים"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "לקוחות IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "מעקב"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "עמית לעמית"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "גישה מרוחקת"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "טלפוניה"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "בניית אתרים"
+
+#~ msgid "Office"
+#~ msgstr "משרד"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "תרשים"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "ניהול אנשי קשר"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "מילון"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "דואר אלקטרוני"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "תרשים זרימה"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "מחשב כף יד"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "צילום"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "ניהול מיזמים"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "הוצאה לאור"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "גיליון נתונים"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "צופה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "אמנות"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "בינה מלאכותית"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "אסטרונומיה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "ביולוגיה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "כימיה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "מדעי המחשב"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "בינוי"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "המחשת נתונים"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "כלכלה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "חשמל"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "אלקטרוניקה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "הנדסה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "גיאוגרפיה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "גיאולוגיה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "מדעי כדור הארץ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "היסטוריה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "מדעי הרוח"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "עיבוד תמונה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "שפות"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "ספרות"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "מפות"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "מתמטיקה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "רפואה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "אנליזה נומרית"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "עיבוד מקבילי"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "פיזיקה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "רובוטיקה"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "רוחניות"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "ספורט"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "הדמייה"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "מנהל קבצים"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "כלי קבצים"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "מעקב"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "אבטחה"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "מדמה מסוף"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "נגישות"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "ארכיבים"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "מחשבון"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "שעון"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "דחיסה"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "כלי קבצים"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "מפות"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "רוחניות"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "כלי טלפוניה"
+
+#~ msgid "Video"
+#~ msgstr "וידאו"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "עריכה"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "מסד נתונים"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "צריבת תקליטורים"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "נגנים"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "מקליטים"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "טלוויזיה"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "הותקנו יישום אחד ותוסף אחד"
+#~ msgstr[1] "הותקנו %i יישומים ו־%i תוספים"
+#~ msgstr[2] "הותקנו שני יישומים ושני תוספים"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr "בהתאם לארץ מגוריך, התקנה זו עשויה לחשוף אותך לתביעה."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr "אם אין ברצונך לסמוך על כך, כדאי לך לקבל ייעוץ משפטי."
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "האם אכן ברצונך לאפשר זאת?"
+
+#~ msgid "Web app"
+#~ msgstr "יישום רשת"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Set the specified debugging level"
+
+#~ msgid "Picks"
+#~ msgstr "יישומים נבחרים"
+
+#, fuzzy
+#~ msgid "Recent Software Updates"
+#~ msgstr "כל התכניות מעודכנות"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "מסדי נתונים"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "רדיו חובבים"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "פיתוח לאינטרנט"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "כלי קבצים"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "מפות"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "רוחניות"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "גופנים"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "מקודדים"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "מקורות קלט"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "חבילות שפה"
+
+#~ msgid "Done"
+#~ msgstr "סיום"
+
+#~ msgid "Printing"
+#~ msgstr "הדפסה"
diff --git a/po/hi.po b/po/hi.po
new file mode 100644
index 0000000..b871b64
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,3882 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Translators:
+# e2f_in c7 <e2f_in_c7@outlook.com>, 2016-2018
+# Roddy Shuler <roddy@endlessm.com>, 2016-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-12 13:14-0700\n"
+"PO-Revision-Date: 2018-06-20 04:17+0000\n"
+"Last-Translator: Roddy Shuler <roddy@endlessm.com>\n"
+"Language-Team: Hindi (http://www.transifex.com/endless-os/gnome-software/language/hi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME सॉफ़्टवेयर"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME के लिए एप्लिकेशन प्रबंधक"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr "सॉफ़्टवेयर आपको नए एप्लिकेशन और सिस्टम विस्तारण ढूँढने और स्थापित करने देता है और मौजूदा स्थापित एप्लिकेशन को निकालने देता है."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr "GNOME सॉफ़्टवेयर उपयोगी विवरणों और प्रति एप्लिकेशन एकाधिक स्क्रीनशॉट के साथ पसंदीदा और लोकप्रिय एप्लिकेशन को दिखाता है. एप्लिकेशन को श्रेणियों की सूची को ब्राउज़ करके या उन्हें खोजकर ब्राउज़ किया जा सकता है. यह आपको ऑफ़लाइन अपडेट का उपयोग करके आपके सिस्टम को भी अद्यतित करने देता है."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "ओवरव्यू पैनल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "विवरण पैनल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "स्थापित पैनल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "अपडेट पैनल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "अपडेट विवरण"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1007
+msgid "The GNOME Project"
+msgstr "GNOME प्रोजेक्ट"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "सिस्टम स्थान में कोई ऐपस्ट्रीम फ़ाइल स्थापित करें"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "सिस्टम स्थान में कोई ऐपस्ट्रीम फ़ाइल स्थापित कर रहा है"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "संगत प्रोजेक्ट की सूची"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "यह संगत प्रोजेक्ट की सूची है जो हमें दिखाना चाहिए जैसे GNOME, KDE और XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates in GNOME Software"
+msgstr "GNOME Software में अपडेट प्रबंधित करना है या नहीं"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel and not perform any "
+"automatic updates actions."
+msgstr "अक्षम होने पर, GNOME Software अपडेट पैनल को छिपा देगा और कोई भी स्वचालित अपडेट क्रिया नहीं करेगा."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically perform updates"
+msgstr "चाहे स्वचालित रूप से अपडेट निष्पादित करना हो"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads and installs updates in "
+"the background (except for some app types like packages, where it prompts "
+"the user to install them when ready)."
+msgstr "सक्षम होने पर, GNOME सॉफ्टवेयर स्वचालित रूप से पृष्ठभूमि में अपडेट को डाउनलोड और स्थापित करता है (कुछ ऐप प्रकार, जैसे कि पैकेज को छोड़कर, जहाँ यह तैयार होने पर स्थापित करने के लिए उपयोगकर्ता को संकेत देता है)."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "मीटर्ड कनेक्शन पर होने पर स्वचालित रूप से रिफ़्रेश करना है या नहीं"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr "सक्षम होने पर, मीटर्ड कनेक्शन का उपयोग करने पर भी GNOME Software स्वचालित रूप से पृष्ठभूमि में रिफ़्रेश होगा (फलतः कुछ मेटाडाटा डाउनलोड करना, अपडेट के लिए जाँचना इत्यादि, जिससे हो सकता है कि उपयोगकर्ता पर शुल्क लगेे)."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "चाहे यह GNOME Software का पहला संचालन हो"
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "एप्लिकेशन के पास तारा रेटिंग दिखाएँ"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "रिमोट के लिए सेट डिफ़ॉल्ट ब्रांच पर आधारित ऐप्लिकेशन्स फ़िल्टर करें"
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr "सशुल्क एप्लिकेशन स्थापित होने के पहले चेतावनी संवाद दिखाते हैं"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This"
+" controls if that dialog is suppressed."
+msgstr "सशुल्क एप्लिकेशन के स्थापित होने पर चेतावनी संवाद दिखाई दे सकता है. उस संवाद के दबे होने पर वह इसे नियंत्रित करता है."
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "लोकप्रिय एप्लिकेशन की सूची"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "परिभाषित किए गए सिस्टम को ओवरराइड करने पर उपयोग किए जाने वाले एप्लिकेशन की सूची."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The list of extra sources that have been previously enabled"
+msgstr "पूर्व में सक्षम किए गए अतिरिक्त स्रोतों की सूची"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid ""
+"The list of sources that have been previously enabled when installing third-"
+"party applications."
+msgstr "तृतीय-पक्ष एप्लिकेशन को स्थापित करते समय पूर्व में सक्षम किए गए स्रोतों की सूची."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "अंतिम अपडेट जाँच टाइमस्टैम्प"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "अंतिम नवीनीकरण सूचना टाइमस्टैम्प"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "पहले सुरक्षा अपडेट का टाइमस्टैम्प, जो अपडेट के बाद साफ़ किया गया"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "अंतिम अपडेट टाइमस्टैम्प"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "अपस्ट्रीम स्क्रीनशॉट अभी भी मान्य है, यह सत्यापित करने के लिए सेकंड में समयावधि"
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0"
+" means to never check the server if the image already exists in the cache."
+msgstr "बड़ा मान चुनने का अर्थ होगा कि रिमोट सर्वर के लिए कम राउंड-ट्रिप्स लेकिन उपयोगकर्ताओं को स्क्रीनशॉट्स के अपडेट दिखाने में अधिक समय लग सकता है. 0 मान का अर्थ है कि अगर छवि पहले से ही कैशे में मौजूद है तो सर्वर की कभी जाँच नहीं की जाएगी."
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "एप्लिकेशन समीक्षाओं के लिए उपयोग किया जाने वाला सर्वर"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr "समीक्षाओं के लिए न्यूनतम कर्मा स्कोर"
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "इस संख्या से कम कर्मा वाली समीक्षाओं को दिखाया नहीं जाएगा."
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr "आधिकारिक स्रोतों की सूची जिन्हें 3रा पक्ष नहीं माना जाना चाहिए"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official sources that should be considered free software"
+msgstr "उन आधिकारिक स्रोतों की सूची जिन्हें निःशुल्क सॉफ़्टवेयर के रूप में माना जाना चाहिए"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free "
+"software"
+msgstr "किसी एप्लिकेशन को निःशुल्क सॉफ़्टवेयर के रूप में माने जाने पर उपयोग किए जाने के लिए लाइसेंस URL"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"Install bundled applications for all users on the system where possible"
+msgstr "जहाँ भी संभव हो, वहाँ सिस्टम पर सभी उपयोगकर्ताओं के लिए बंडल किए गए ऐप्लिकेशन स्थापित करें"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr "फ़ोल्डर प्रबंधन UI दिखाएँ"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Sources dialog"
+msgstr "सॉफ़्टवेयर स्रोत संवाद पर पहुँच की अनुमति दें"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "पूर्व-रिलीज़ के लिए नवीनीकरण ऑफ़र करें"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "उपयोगकर्ता को यह सूचित करने वाले कुछ UI घटक दिखाएँ कि ऐप शुल्क सहित है"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software sources"
+msgstr "शुल्क सहित सॉफ़्टवेयर सोर्स इंस्टॉल करने के लिए संकेत दिखाएं"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show non-free software in search results"
+msgstr "खोज परिणामों में शुल्क वाले सॉफ़्टवेयर दिखाएँ"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "स्थापित ऐप्लिकेशन की सूची में ऐप्स के लिए स्थापना आकार दिखाएँ"
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI जो शुल्क सहित और स्वामित्व संबंधी सॉफ़्टवेयर बताते हैं"
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "A list of non-free sources that can be optionally enabled"
+msgstr "शुल्क सहित स्रोतों की सूची जो वैकल्पिक रूप से सक्षम की जा सकती है"
+
+#: data/org.gnome.software.gschema.xml:139
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "ऐपस्ट्रीम फ़ाइलों का संकेत कर रहेे URL की सूची जिसे एक ऐप-इन्फ़ो फ़ोल्डर में डाउनलोड किया जाएगा"
+
+#: data/org.gnome.software.gschema.xml:143
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "सभी उपयोक्ताओं के लिए पूरे सिस्टम पर AppStream फ़ाइलें स्थापित करें"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "Sorts the apps shown in the overview in alphabetical order"
+msgstr "ओवरव्यू में दर्शाई गई ऐप्लिकेशन को वर्ण-क्रम में व्यवस्थित करें"
+
+#: data/org.gnome.software.gschema.xml:151
+msgid ""
+"Overrides the name of the \"Featured\" entry in the side-filter (category "
+"list)"
+msgstr "पार्श्व-फ़िल्टर (श्रेणी सूची) में \"विशिष्ट\" प्रविष्टि का नाम रद्द करता है"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "सॉफ़्टवेयर स्थापना"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "सिस्टम पर चयनित सॉफ़्टवेयर स्थापित करें"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon
+#. file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "सिस्टम सॉफ़्टवेयर स्थापना"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "सभी चुनें"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "कोई भी नहीं चुनें"
+
+#: src/gnome-software.ui:24
+msgid "Software"
+msgstr "सॉफ्टवेयर"
+
+#: src/gnome-software.ui:43 src/gs-sources-dialog.ui:23
+#: src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "पीछे जाएँ"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "_सभी"
+
+#. Translators: A label for a button to show only software which is already
+#. installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "_स्थापित किया गया"
+
+#. Translators: A label for a button to show only updates which are available
+#. to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "_अपडेट"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "खोजें"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-sources-dialog.ui:6
+#: src/gs-sources-dialog.ui:46
+msgid "Software Sources"
+msgstr "सॉफ़्टवेयर स्रोत"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "डिस्क का परीक्षण करें"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1478
+msgid "Network Settings"
+msgstr "नेटवर्क सेटिंग"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "अभी पुनःप्रारंभ करें"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "अधिक जानकारी"
+
+#: src/gs-app-addon-row.c:95 src/gs-app-row.c:430
+msgid "Pending"
+msgstr "लंबित"
+
+#: src/gs-app-addon-row.c:101 src/gs-app-row.ui:210 src/gs-app-tile.ui:51
+#: src/gs-background-tile.ui:67 src/gs-feature-tile.c:88
+#: src/gs-popular-tile.c:70
+msgid "Installed"
+msgstr "स्थापित किया गया"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: src/gs-app-addon-row.c:105 src/gs-app-row.c:218 src/gs-details-page.c:466
+msgid "Installing"
+msgstr "स्थापित करना"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: src/gs-app-addon-row.c:109 src/gs-app-row.c:224
+msgid "Removing"
+msgstr "निकालना"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "फ़ोल्डर का नाम"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:342 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:612 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "_रद्द करें"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_जोड़ें"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "एप्लिकेशन फ़ोल्डर में जोड़ें"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:128
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "प्रारंभ मोड: या तो ‘अपडेट’, ‘अपडेट किया गया’, ‘स्थापित किया गया’ या ‘ओवरव्यू’"
+
+#: src/gs-application.c:128
+msgid "MODE"
+msgstr "मोड"
+
+#: src/gs-application.c:130
+msgid "Search for applications"
+msgstr "एप्लिकेशन खोजें"
+
+#: src/gs-application.c:130
+msgid "SEARCH"
+msgstr "खोजें"
+
+#: src/gs-application.c:132
+msgid "Show application details (using application ID)"
+msgstr "एप्लिकेशन का विवरण दिखाएँ (एप्लिकेशन ID उपयोग करके)"
+
+#: src/gs-application.c:132 src/gs-application.c:136
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:134
+msgid "Show application details (using package name)"
+msgstr "एप्लिकेशन का विवरण दिखाएँ (पैकेज का नाम उपयोग करके)"
+
+#: src/gs-application.c:134
+msgid "PKGNAME"
+msgstr "पैकेज का नाम"
+
+#: src/gs-application.c:136
+msgid "Install the application (using application ID)"
+msgstr "ऐप्लिकेशन स्थापित करें (ऐप्लिकेशन ID का उपयोग करके)"
+
+#: src/gs-application.c:138
+msgid "Open a local package file"
+msgstr "स्थानीय पैकेज फ़ाइल खोलें"
+
+#: src/gs-application.c:138
+msgid "FILENAME"
+msgstr "फ़ाइल का नाम"
+
+#: src/gs-application.c:140
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "इस क्रिया के लिए अपेक्षित अंतर्क्रिया का प्रकार: या तो ‘कोई नहीं’, ‘सूचित करें’ या ‘पूर्ण’"
+
+#: src/gs-application.c:143
+msgid "Show verbose debugging information"
+msgstr "डीबगिंग के लिए विस्तृत मुद्रित जानकारी दिखाएँ"
+
+#: src/gs-application.c:145
+msgid "Show profiling information for the service"
+msgstr "सेवा के लिए प्रोफ़ाइलिंग जानकारी दिखाएँ"
+
+#: src/gs-application.c:147
+msgid "Quit the running instance"
+msgstr "चल रहे इंस्टैंस से बाहर आएं"
+
+#: src/gs-application.c:149
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream के लिए स्थानीय फ़ाइल स्रोतों को प्राथमिकता दें"
+
+#: src/gs-application.c:151
+msgid "Show version number"
+msgstr "संस्करण संख्या दिखाएँ"
+
+#: src/gs-application.c:353
+msgid "translator-credits"
+msgstr "अनुवादक-श्रेय"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:360
+#, c-format
+msgid "About %s"
+msgstr "%s के बारे में"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:364
+msgid "A nice way to manage the software on your system."
+msgstr "आपके सिस्टम पर सॉफ़्टवेयर को प्रबंधित करने का बेहतर तरीका."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:171
+msgid "Visit website"
+msgstr "वेबसाइट पर जाएँ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:176
+msgid "Install…"
+msgstr "स्थापित करें..."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:183
+msgid "Cancel"
+msgstr "रद्द करें"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:192 src/gs-common.c:279 src/gs-page.c:544
+msgid "Install"
+msgstr "स्थापित करें"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:199
+msgid "Update"
+msgstr "अपडेट करें"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: src/gs-app-row.c:203 src/gs-app-row.c:212 src/gs-page.c:700
+msgid "Uninstall"
+msgstr "स्थापना रद्द करें"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:330
+msgid "Device cannot be used during update."
+msgstr "अपडेट के दौरान डिवाइस का उपयोग नहीं किया जा सकता."
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:340 src/gs-details-page.ui:991
+msgid "Source"
+msgstr "स्रोत"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:68
+msgid "To continue you need to sign in."
+msgstr "जारी रखने के लिए आपको साइन इन करना होगा."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:72
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "जारी रखने के लिए आपको %s में साइन इन करना होगा."
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "ईमेल पता"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "मेरे पास पहले से एक खाता है"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "पासवर्ड"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "मैं अभी किसी खाते के लिए पंजीयन करना चाहता/चाहती हूँ"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "मैं अपना पासवर्ड भूल गया/गई हूँ"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "अगली बार स्वचालित रूप से साइन इन करें"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "द्वि-कारक प्रमाणीकरण के लिए अपना एक-बार का पिन दर्ज करें."
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "पिन"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr "प्रमाणित करें"
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "जारी रखें"
+
+#. TRANSLATORS: This is the name and state of an app for the ATK object
+#: src/gs-background-tile.c:159 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (स्थापित किया गया)"
+
+#: src/gs-background-tile.ui:81
+msgid "Scheduled update"
+msgstr "अनुसूचित अपडेट"
+
+#: src/gs-background-tile.ui:95
+msgid "Available in a USB drive"
+msgstr "एक USB ड्राइव में उपलब्ध है"
+
+#: src/gs-background-tile.ui:109
+msgid "Requires download"
+msgstr "डाउनलोड की आवश्यकता है"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:193
+msgid "Other"
+msgstr "अन्य"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:198
+msgid "All"
+msgstr "सभी"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:202 src/gs-shell.c:2325
+msgid "Featured"
+msgstr "पसंदीदा"
+
+#: src/gs-category-page.ui:81
+msgid "Extension Settings"
+msgstr "विस्तारित सेटिंग"
+
+#: src/gs-category-page.ui:110
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is"
+" recommended to disable them."
+msgstr "विस्तारण आपके स्वयं के जोखिम पर उपयोग किए जाते हैं. यदि आपको कोई सिस्टम समस्याएँ हैं, तो उन्हें अक्षम करने का सुझाव दिया जाता है."
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:205
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "1 से लेकर %u तक की कोई संख्या डालें: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:268
+msgid "Choose an application:"
+msgstr "कोई ऐप्लिकेशन चुनें:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:135
+msgid "OS updates are now installed"
+msgstr "OS अपेडट अब स्थापित कर दिए गए हैं"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:138
+msgid "Recently installed updates are available to review"
+msgstr "हाल ही में स्थापित अपडेट अब समीक्षा के लिए उपलब्ध हैं"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:142
+#, c-format
+msgid "%s is now installed"
+msgstr "%s अब स्थापित कर दिया गया है"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:145
+msgid "Application is ready to be used."
+msgstr "ऐप्लिकेशन उपयोग के लिए तैयार है."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:151
+msgid "Launch"
+msgstr "लॉन्च करें"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "तृतीय-पक्ष सॉफ़्टवेयर स्थापित करें?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+msgid "Enable Third-Party Software Source?"
+msgstr "तृतीय-पक्ष सॉफ़्टवेयर स्रोत सक्षम करना है?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:232
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by "
+"“%s”."
+msgstr "%s, <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">मुफ़्त और खुले स्रोत सॉफ़्टवेयर नहीं है</a>, और “%s” द्वारा प्रदान किए जाते हैं."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:242
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s को “%s” द्वारा प्रदान किया जाता है."
+
+#. TRANSLATORS: a software source is a repo
+#: src/gs-common.c:252
+msgid "This software source must be enabled to continue installation."
+msgstr "इस सॉफ़्टवेयर स्रोत को स्थापना जारी रखने के लिए सक्षम किया जाना चाहिए."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:262
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "कुछ देशों में %s को स्थापित करना या उपयोग करना गैरकानूनी हो सकता है."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "कुछ देशों में इस कोडेक को स्थापित करना या उपयोग करना गैरकानूनी हो सकता है."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:275
+msgid "Don’t Warn Again"
+msgstr "फिर से चेतावनी न दें"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:284
+msgid "Enable and Install"
+msgstr "सक्षम करें और स्थापित करें"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:429
+msgid "Detailed errors from the package manager follow:"
+msgstr "पैकेज प्रबंधक की विस्तृत त्रुटियाँ निम्न का अनुसरण करती हैं:"
+
+#: src/gs-common.c:448 src/gs-details-page.ui:579
+msgid "Details"
+msgstr "विवरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "कोई कार्टून हिंसा नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "असुरक्षित परिस्थितियों में कार्टून कैरेक्टर"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "आक्रामक विरोध में कार्टून कैरेक्टर"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "कार्टून कैरेक्टर में शामिल ग्राफ़िक हिंसा"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "कोई काल्पनिक हिंसा नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "असुरक्षित परिस्थितियों वाले कैरेक्टर को रिएलिटी से आसानी से अलग होने योग्य है"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "आक्रामक विरोध वाले कैरेक्टर को रिएलिटी से आसानी से अलग होने योग्य है"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "ग्राफ़िक हिंसा रिएलिटी से आसानी से अलग होने योग्य है"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "कोई यथार्थवादी हिंसा नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "असुरक्षित परिस्थितियों में थोड़े यथार्थवादी चरित्र"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "आक्रामक विरोध में वास्तविक कैरेक्टर का विवरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "ग्राफ़िक हिंसा वाले वास्तविक कैरेक्टर"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "कोई रक्तपात नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "अवास्तविक रक्तपात"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "वास्तविक रक्तपात"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "रक्तपात और शरीर के अंगों में विकृति का विवरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "कोई यौन हिंसा नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "बलात्कार या अन्य हिंसात्मक लैंगिक व्यवहार"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "एल्कोहल के कोई संदर्भ नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "एल्कोहल वाले पेय पदार्थों का संदर्भ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "एल्कोहल वाले पेयपदार्थों का उपयोग"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "अवैध नशीली दवाओं के कोई संदर्भ नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "अवैध ड्रग का संदर्भ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "अवैध ड्रग का उपयोग"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "तंबाकू के उत्पादों का संदर्भ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "तंबाकू के उत्पादों का उपयोग"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "किसी प्रकार की कोई नग्नता नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "संक्षिप्त कलात्मक नग्नता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "लंबे समय तक नग्नता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "यौन प्रकृति के कोई संदर्भ या चित्रण नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "उत्तेजक संदर्भ या विवरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "लैंगिक संदर्भ या विवरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "ग्राफ़िक लैंगिक व्यवहार"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "किसी प्रकार की कोई गाली नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "गलत आचरण का माइल्ड या कभी कभी उपयोग"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "गलत आचरण का मॉडरेट उपयोग"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "गलत आचरण का अधिक या बार-बार उपयोग"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "कोई अनुचित हास्य नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "हँसी मज़ाक"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "अश्लील या बाथरुम संबंधी हास्य"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "वयस्क या लिंग संबंधी हास्य"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "किसी प्रकार की कोई भेदभावपूर्ण भाषा नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "लोगों के किसी विशेष समूह के लिए नकारात्मकता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "भावनात्मक नुकसान पहुँचाने के लिए निर्मित भेदभाव"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "लिंग, लिंग संबंध, जाति या धर्म के आधार पर सुस्पष्ट भेदभाव"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "किसी प्रकार का कोई विज्ञापन नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "उत्पाद का प्रतिस्थापन"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "विशेष ब्रांड या ट्रेडमार्क उत्पादों के लिए सुस्पष्ट संदर्भ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Players are encouraged to purchase specific real-world items"
+msgstr "विशिष्ट वास्तविक विश्व के आइटम खरीदने के लिए खिलाड़ियों को प्रोत्साहित किया जाता है"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "किसी प्रकार का कोई जुआ नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "टोकन या क्रेडिट का उपयोग करके जुआं या निरुदेश्य ईवेंट"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "\"प्ले\" धन का उपयोग करके जुआ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "वास्तविक धन का उपयोग जुआ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "धन व्यय करने की कोई क्षमता नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Ability to spend real money in-game"
+msgstr "गेम में वास्तविक धन व्यय करने की क्षमता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "No way to chat with other players"
+msgstr "अन्य खिलाड़ियों से चैट करने का कोई तरीका नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Player-to-player game interactions without chat functionality"
+msgstr "चैट कार्यक्षमता के बिना खिलाड़ी-खिलाड़ी के बीच गेम सहभागिता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "Player-to-player preset interactions without chat functionality"
+msgstr "चैट कार्यक्षमता के बिना खिलाड़ी-खिलाड़ी के बीच पूर्वसेट सहभागिता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Uncontrolled chat functionality between players"
+msgstr "खिलाड़ियों के बीच अनियंत्रित चैट कार्यक्षमता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "No way to talk with other players"
+msgstr "अन्य खिलाड़ियों से बात करने का कोई तरीका नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "Uncontrolled audio or video chat functionality between players"
+msgstr "खिलाड़ियों के बीच अनियंत्रित ऑडियो या वीडियो चैट कार्यक्षमता"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "No sharing of social network usernames or email addresses"
+msgstr "सामाजिक नेटवर्क उपयोगकर्ता नामों या ईमेल पतों का कोई साझाकरण नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing social network usernames or email addresses"
+msgstr "सामाजिक नेटवर्क उपयोगकर्ता नाम या ईमेल पतों का साझाकरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "No sharing of user information with 3rd parties"
+msgstr "तृतीय पक्षों के साथ उपयोगकर्ता जानकारी का कोई साझाकरण नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "Sharing user information with 3rd parties"
+msgstr "3रें पक्षों के साथ उपयोगकर्ता जानकारी साझा करना"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location to other users"
+msgstr "अन्य उपयोगकर्ताओं के साथ भौतिक स्थान का कोई साझाकरण नहीं"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing physical location to other users"
+msgstr "अन्य उपयोगकर्ताओं के साथ भौतिक स्थान साझा करना"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is
+#. unknown
+#: src/gs-dbus-helper.c:294
+msgid "An application"
+msgstr "कोई एप्लिकेशन"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. MIME types.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s अतिरिक्त फ़ाइल फ़ॉर्मेट समर्थन का अनुरोध कर रहा है."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional MIME Types Required"
+msgstr "अतिरिक्त MIME प्रकार आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. fonts.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s अतिरिक्त फ़ॉन्ट का अनुरोध कर रहा है."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Fonts Required"
+msgstr "अतिरिक्त फ़ॉन्ट आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. codecs.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s अतिरिक्त मल्टीमीडिया कोडेक्स का अनुरोध कर रहा है."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Multimedia Codecs Required"
+msgstr "अतिरिक्त मल्टीमीडिया कोडेक्स्स आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. printer drivers.
+#: src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s अतिरिक्त प्रिंटर ड्राइवर का अनुरोध कर रहा है."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:320
+msgid "Additional Printer Drivers Required"
+msgstr "अतिरिक्त प्रिंटर ड्राइवर आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install
+#. additional packages.
+#: src/gs-dbus-helper.c:324
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s अतिरिक्त पैकेज का अनुरोध कर रहा है."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:326
+msgid "Additional Packages Required"
+msgstr "अतिरिक्त पैकेज आवश्यक"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:335
+msgid "Find in Software"
+msgstr "सॉफ़्टवेयर में खोजें"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#: src/gs-details-page.c:296 src/gs-details-page.c:330
+#: src/gs-details-page.ui:237
+msgid "_Install"
+msgstr "_स्थापित करें"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed but needs to be downloaded first
+#: src/gs-details-page.c:300 src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "_डाउनलोड करें"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:334
+msgid "_Update"
+msgstr "_अपडेट करें"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: src/gs-details-page.c:346
+msgid "_Install…"
+msgstr "_स्थापित करना…"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:393 src/gs-details-page.ui:536
+msgid "_Uninstall"
+msgstr "_स्थापना रद्द करें"
+
+#: src/gs-details-page.c:461
+msgid "Removing…"
+msgstr "निकाल रहा है…"
+
+#: src/gs-details-page.c:480
+msgid "Pending installation…"
+msgstr "इंस्टालेशन लंबित है..."
+
+#: src/gs-details-page.c:487
+msgid "Pending update…"
+msgstr "अपडेट लंबित है..."
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:844
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "इस एप्लिकेशन का उपयोग केवल सक्रिय इंटरनेट कनेक्शन होने पर ही किया जा सकता है."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:988
+msgctxt "version"
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1024
+msgctxt "updated"
+msgid "Never"
+msgstr "कभी नहीं"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1072
+msgctxt "origin"
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1481
+msgid "You need internet access to write a review"
+msgstr "समीक्षा लिखने के लिए आपको इंटरनेट पहुँच की आवश्यकता है"
+
+#: src/gs-details-page.c:1610
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "“%s” को ढूँढ़ने में असमर्थ"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2217
+msgid "Public domain"
+msgstr "सार्वजनिक डोमेन"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2233 src/gs-details-page.ui:1386
+msgid "Free Software"
+msgstr "निशुल्क सॉफ़्टवेयर"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2290
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "उपयोगकर्ता निम्न लाइसेंस द्वारा बँधे हुए हैं:"
+msgstr[1] "उपयोगकर्ता निम्न लाइसेंसों द्वारा बँधे हुए हैं:"
+
+#: src/gs-details-page.c:2306 src/gs-details-page.ui:1495
+msgid "More information"
+msgstr "अधिक जानकारी"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "विवरण पृष्ठ"
+
+#. Translators: A label for a button to add a shortcut to the selected
+#. application.
+#: src/gs-details-page.ui:209
+msgid "_Add to Desktop"
+msgstr "_डेस्कटॉप पर जोड़ें"
+
+#. Translators: A label for a button to remove a shortcut to the selected
+#. application.
+#: src/gs-details-page.ui:226
+msgid "_Remove from Desktop"
+msgstr "_डेस्कटॉप से निकालें"
+
+#. Translators: A label for a button to execute the selected application.
+#: src/gs-details-page.ui:259
+msgid "_Launch"
+msgstr "_लॉन्च करें"
+
+#: src/gs-details-page.ui:439
+msgid "No screenshot provided"
+msgstr "कोई स्क्रीनशॉट प्रदान नहीं किया गया"
+
+#: src/gs-details-page.ui:475
+msgid "Software Source Included"
+msgstr "सॉफ़्टवेयर स्रोत शामिल"
+
+#: src/gs-details-page.ui:476
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr "इस एप्लिकेशन में वह सॉफ़्टवेयर स्रोत शामिल है जो अपडेट के साथ ही अन्य सॉफ़्टवेयर पर पहुँच प्रदान करता है."
+
+#: src/gs-details-page.ui:489
+msgid "No Software Source Included"
+msgstr "कोई सॉफ़्टवेयर स्रोत शामिल नहीं किया गया"
+
+#: src/gs-details-page.ui:490
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr "इस एप्लिकेशन में सॉफ़्टवेयर स्रोत शामिल नहीं है. इसे नए संस्करणों के साथ अपडेट नहीं किया जाएगा."
+
+#: src/gs-details-page.ui:504
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "यह सॉफ़्टवेयर आपके वितरण द्वारा पहले से प्रदान किया गया है और इसे प्रतिस्थापित नहीं किया जाना चाहिए."
+
+#. Translators: a repository file used for installing software has been
+#. discovered.
+#: src/gs-details-page.ui:517
+msgid "Software Source Identified"
+msgstr "सॉफ़्टवेयर स्रोत की पहचान की गई"
+
+#: src/gs-details-page.ui:518
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr "इस सॉफ़्टवेयर स्रोत को जोड़ना आपको अतिरिक्त सॉफ़्टवेयर और नवीनीकरणों पर पहुँच देगा."
+
+#: src/gs-details-page.ui:519
+msgid "Only use software sources that you trust."
+msgstr "केवल वे सॉफ़्टवेयर स्रोत उपयोग करें जिन पर आप विश्वास करते हैं."
+
+#: src/gs-details-page.ui:551
+msgid "_Donate"
+msgstr "_दान करें"
+
+#: src/gs-details-page.ui:592
+msgid "Developer _Website"
+msgstr "डेवलपर _वेबसाइट"
+
+#: src/gs-details-page.ui:704
+msgid "Localized in your Language"
+msgstr "आपकी भाषा में स्थानीयकृत किया गया"
+
+#: src/gs-details-page.ui:716
+msgid "Documentation"
+msgstr "दस्तावेज़ीकरण"
+
+#: src/gs-details-page.ui:728
+msgid "Release Activity"
+msgstr "गतिविधि रिलीज़ करें"
+
+#: src/gs-details-page.ui:740
+msgid "System Integration"
+msgstr "सिस्टम एकीकरण"
+
+#: src/gs-details-page.ui:752
+msgid "Sandboxed"
+msgstr "सैंडबॉक्स्ड"
+
+#: src/gs-details-page.ui:777 src/gs-sources-dialog.ui:365
+msgid "Version"
+msgstr "संस्करण"
+
+#: src/gs-details-page.ui:814
+msgid "Age Rating"
+msgstr "समयावधि की रेटिंग"
+
+#: src/gs-details-page.ui:852
+msgid "Updated"
+msgstr "अपडेट किया गया"
+
+#: src/gs-details-page.ui:887
+msgid "Category"
+msgstr "श्रेणी"
+
+#: src/gs-details-page.ui:925
+msgid "Installed Size"
+msgstr "स्थापित किया गया आकार"
+
+#: src/gs-details-page.ui:958
+msgid "Download Size"
+msgstr "डाउनलोड आकार"
+
+#: src/gs-details-page.ui:1024
+msgid "Developer"
+msgstr "डेवलपर"
+
+#: src/gs-details-page.ui:1058
+msgid "License"
+msgstr "लाइसेंस"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1078
+msgid "Free"
+msgstr "निःशुल्क"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1095
+msgid "Proprietary"
+msgstr "स्वामित्व संबंधी"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1112 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#: src/gs-details-page.ui:1166 src/gs-installed-page.c:490
+msgid "Add-ons"
+msgstr "एड-ऑन"
+
+#: src/gs-details-page.ui:1179
+msgid "Selected add-ons will be installed with the application."
+msgstr "चुने गए एड-ऑन एप्लिकेशन के साथ स्थापित किए जाएँगे."
+
+#. Translators: Header of the section with other users' opinions about the
+#. app.
+#: src/gs-details-page.ui:1222
+msgid "Reviews"
+msgstr "समीक्षाएँ"
+
+#. Translators: Button opening a dialog where the users can write and publish
+#. their opinions about the apps.
+#: src/gs-details-page.ui:1238
+msgid "_Write a Review"
+msgstr "_समीक्षा लिखें"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1260
+msgid "_Show More"
+msgstr "_अधिक दिखाएँ"
+
+#: src/gs-details-page.ui:1403
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied"
+" and modified."
+msgstr "इसका अर्थ है कि सॉफ़्टवेयर को बिना रोक-टोक चलाया जा सकता है, इसकी प्रतिलिपि बनाई जा सकती है, वितरित किया जा सकता है, पढ़ा और संशोधित किया जा सकता है."
+
+#: src/gs-details-page.ui:1462
+msgid "Proprietary Software"
+msgstr "स्वामित्व संबंधी सॉफ़्टवेयर"
+
+#: src/gs-details-page.ui:1479
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr "इसका अर्थ है कि सॉफ़्टवेयर का स्वामित्व किसी व्यक्ति या कंपनी के पास है. इसके उपयोग के संबंध में प्रायः प्रतिबंध होता है और आमतौर पर इसके स्रोत कोड तक पहुँचा नहीं जा सकता."
+
+#: src/gs-details-page.ui:1524
+msgid "Unknown Software License"
+msgstr "अज्ञात सॉफ़्टवेयर लाइसेंस"
+
+#: src/gs-details-page.ui:1541
+msgid "The license terms of this software are unknown."
+msgstr "इस सॉफ़्टवेयर की लाइसेंस संबंधी शर्तें अज्ञात हैं."
+
+#: src/gs-details-page.ui:1568
+msgid "The application was rated this way because it features:"
+msgstr "ऐप्लिकेशन को इस तरह से रेट किया गया क्योंकि इसकी ये विशेषताएँ हैं:"
+
+#: src/gs-details-page.ui:1594
+msgid "No details were available for this rating."
+msgstr "इस रेटिंग के लिए कोई विवरण उपलब्ध नहीं था."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "CSS की पुष्टि हुई, यह ठीक है!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "फ़ाइल लोड करने में विफल रहा"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "सहेजे नहीं गए बदलाव"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "ऐप्लिकेशन सूची पहले से ही लोड है."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "दस्तावेज़ मर्ज़ करें"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "बदलाव हटाएँ"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "AppStream फ़ाइल खोलें"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "_खोलें"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "_सहेजें"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "फ़ाइल सहेजने में विफल रहा"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "%s बैनर डिज़ाइन हटा दी गई."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "बैनर डिज़ाइन हटा दी गई."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "ऐप्लिकेशन सूची में सहेजे नहीं गए बदलाव मौजूद हैं."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr "शब्द बहुल लॉगिंग का उपयोग करें"
+
+#. TRANSLATORS: program name, an application to add and remove software
+#. repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "GNOME सॉफ्टवेयर बैनर डिज़ाइनर"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr "कोई डिज़ाइन नहीं"
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr "त्रुटि संदेश यहाँ है"
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr "ऐप्लिकेशन ID"
+
+#: src/gs-editor.ui:296
+msgid "Name"
+msgstr "नाम"
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "सारांश"
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr "संपादक का चुनिंदा"
+
+#. This check button controls whether the application’s banner appears in the
+#. “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr "फ़ीचर की गई श्रेणी"
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr "पूर्ववत करें"
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "बैनर डिज़ाइनर"
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr "नया बैनर"
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr "फ़ाइल से आयात करें"
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr "फ़ाइल को निर्यात करें"
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr "डिज़ाइन मिटाएँ"
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr "फ़ीचर की गईं ऐप्लिकेशन"
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr "OS अपग्रेड"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:146
+msgid " and "
+msgstr "और"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:149
+msgid ", "
+msgstr ","
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:175
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s स्क्रिप्ट के लिए उपलब्ध फ़ॉन्ट"
+msgstr[1] "%s स्क्रिप्ट के लिए उपलब्ध फ़ॉन्ट"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:183
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s के लिए उपलब्ध सॉफ़्टवेयर"
+msgstr[1] "%s के लिए उपलब्ध सॉफ़्टवेयर"
+
+#: src/gs-extras-page.c:225
+msgid "Unable to Find Requested Software"
+msgstr "अनुरोध किया गया सॉफ़्टवेयर ढूँढने में असमर्थ"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:325
+#, c-format
+msgid "%s not found"
+msgstr "%s नहीं मिला"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:329
+msgid "on the website"
+msgstr "वेबसाइट पर"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:336
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "%s फ़ाइल को प्रदान करने वाले कोई एप्लिकेशन उपलब्ध नहीं है."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:351 src/gs-extras-page.c:362
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications"
+" might be found %s."
+msgstr "%s के बारे में जानकारी, के साथ ही अनुपलब्ध एप्लिकेशन को प्राप्त करने के तरीके %s को ढूँढ सकते हैं."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:347 src/gs-extras-page.c:369
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s समर्थन के लिए कोई एप्लिकेशन उपलब्ध नहीं हैं."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:358
+#, c-format
+msgid "%s is not available."
+msgstr "%s उपलब्ध नहीं है."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:373
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr "%s के बारे में जानकारी, के साथ ही इस फ़ॉर्मेट का समर्थन कर सकने वाले एप्लिकेशन को प्राप्त करने के तरीके %s को ढूँढ सकते हैं."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:380
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s स्क्रिप्ट समर्थन के लिए कोई फ़ॉन्ट उपलब्ध नहीं हैं."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:384
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "%s के बारे में जानकारी, के साथ ही अतिरिक्त फ़ॉन्ट को प्राप्त करने के तरीके %s को ढूँढ सकते हैं."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:391 lib/gs-plugin-loader.c:1458
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s फ़ॉर्मेट के लिए कोई एडऑन कोडेक उपलब्ध नहीं है."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:395
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr "%s के बारे में जानकारी, के साथ ही इस फ़ॉर्मेट को चलाने वाले कोडेक को प्राप्त करने के तरीके %s को ढूँढ सकते हैं."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:402
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s समर्थन के लिए कोई प्लाज़्मा स्रोत उपलब्ध नहीं हैं."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:406
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "%s के बारे में जानकारी, के साथ ही अतिरिक्त प्लाज़्मा स्रोत को प्राप्त करने के तरीके %s को ढूँढ सकते हैं."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:413
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s के लिए कोई प्रिंटर ड्राइवर उपलब्ध नहीं हैं."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:417
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr "%s के बारे में जानकारी, के साथ ही इस प्रिंटर का समर्थन करने वाले ड्राइवर को प्राप्त करने के तरीके %s के लिए विकल्पों को ढूँढ सकते हैं."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:462
+msgid "this website"
+msgstr "यह वेबसाइट"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual
+#. codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:466
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "दुर्भाग्यवश, जिस %s को आप खोज रहे थे, वह नहीं मिल सका. कृपया अधिक जानकारी के लिए %s देखें."
+msgstr[1] "दुर्भाग्यवश, जिस %s को आप खोज रहे थे, वह नहीं मिल सका. कृपया अधिक जानकारी के लिए %s देखें."
+
+#: src/gs-extras-page.c:538 src/gs-extras-page.c:594 src/gs-extras-page.c:633
+msgid "Failed to find any search results"
+msgstr "कोई भी खोज परिणाम ढूँढने में विफल"
+
+#: src/gs-extras-page.c:827
+#, c-format
+msgid "%s file format"
+msgstr "%s फ़ाइल फ़ॉर्मेट"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "कोडेक पृष्ठ"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "स्वागत है"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "सॉफ़्टवेयर में स्वागत है"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See"
+" our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr "सॉफ़्टवेयर आपको एक ही स्थान से वे सभी सॉफ़्टवेयर स्थापित करने देता है जिसकी आपको आवश्यकता होती है. हमारी अनुशंसाएँ देखें, श्रेणियों को ब्राउज़ करें या जो आप चाहते हैं वह एप्लिकेशन खोजें."
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_आइए खरीदारी करें"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "स्पेसिंग"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "बच्चों के बीच स्थान"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "निकाला गया"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "स्थापित किया गया"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr "अपडेट किया गया"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "इतिहास"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:486
+msgid "System Applications"
+msgstr "सिस्टम एप्लिकेशन"
+
+#: src/gs-installed-page.c:620
+msgid "Click on items to select them"
+msgstr "आइटम को चुनने के लिए उन पर क्लिक करें"
+
+#: src/gs-installed-page.c:826
+msgid "Select"
+msgstr "चुनें"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "स्थापित किया गया पृष्ठ"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_फ़ोल्डर में जोडे़ं…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "_फ़ोल्डर में ले जाएँ…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "_फ़ोल्डर से निकालें"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:76
+msgid "Software catalog is being downloaded"
+msgstr "सॉफ़्टवेयर कैटलॉग को डाउनलोड किया जा रहा है"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:80
+msgid "Software catalog is being loaded"
+msgstr "सॉफ़्टवेयर कैटलॉग को लोड किया जा रहा है"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "लोडिंग पृष्ठ"
+
+#: src/gs-loading-page.ui:37
+msgid "Starting up…"
+msgstr "प्रारंभ हो रहा है…"
+
+#: src/gs-menus.ui:7
+msgid "_Software Sources"
+msgstr "_सॉफ़्टवेयर स्रोत"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_इसके बारे में"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "_छोड़ें"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "पृष्ठ को मॉडरेट करें"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "मॉडरेट करने के लिए कोई समीक्षाएँ नहीं हैं"
+
+#. add button
+#: src/gs-overview-page.c:372
+msgid "More…"
+msgstr "अधिक…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:588
+msgid "Recommended Audio & Video Applications"
+msgstr "अनुशंसित ऑडियो और वीडियो ऐप्लिकेशन"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:593
+msgid "Recommended Games"
+msgstr "सुझाए गए गेम"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:598
+msgid "Recommended Graphics Applications"
+msgstr "सुझाए गए ग्राफ़िक एप्लिकेशन"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:603
+msgid "Recommended Productivity Applications"
+msgstr "अनुशंसित उत्पादकता ऐप्लिकेशन"
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:992
+msgid ""
+"Provides access to additional software, including web browsers and games."
+msgstr "वेब ब्राउज़र और गेम सहित अतिरिक्त सॉफ़्टवेयर तक पहुँच प्रदान करता है."
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:996
+msgid ""
+"Proprietary software has restrictions on use and access to source code."
+msgstr "स्वामित्व संबंंधी सॉफ़्टवेयर का उपयोग करने और स्रोत कोड की पहुँच प्राप्त करने पर प्रतिबंध है."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the proprietary info bar
+#: src/gs-overview-page.c:1003 src/gs-sources-dialog.c:290
+msgid "Find out more…"
+msgstr "और अधिक का पता लगाएँ..."
+
+#. TRANSLATORS: button to turn on proprietary software sources
+#: src/gs-overview-page.c:1054
+msgid "Enable"
+msgstr "सक्षम करें"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "ओवरव्यू पृष्ठ"
+
+#: src/gs-overview-page.ui:54
+msgid "Enable Proprietary Software Sources?"
+msgstr "स्वामित्व संबंधी सॉफ़्टवेयर सक्षम करें?"
+
+#: src/gs-overview-page.ui:122
+msgid "Featured Application"
+msgstr "फ़ीचर किए गए ऐप्लिकेशन"
+
+#: src/gs-overview-page.ui:155
+msgid "Categories"
+msgstr "श्रेणियाँ"
+
+#. Translators: This is a heading for software which has been featured
+#. ('picked') by the distribution.
+#: src/gs-overview-page.ui:315
+msgid "Editor’s Picks"
+msgstr "संपादक की पसंद"
+
+#. Translators: This is a heading for software which has been recently
+#. released upstream.
+#: src/gs-overview-page.ui:359
+msgid "Recent Releases"
+msgstr "हाल ही के रिलीज़"
+
+#: src/gs-overview-page.ui:446
+msgid "No Application Data Found"
+msgstr "कोई एप्लिकेशन डेटा नहीं मिला"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:445
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "क्या आप वाकई %s को खरीदना चाहते हैं?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:449
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "%s स्थापित हो जाएगा, और आपसे %s शुल्क लिया जाएगा."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:462
+msgid "Purchase"
+msgstr "खरीदारी"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:535
+#, c-format
+msgid "Prepare %s"
+msgstr "%s को तैयार करें"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:669
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "क्या आप वाकई %s सोर्स को निकालना चाहते हैं?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:673
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr "%s से सभी ऐप्लिकेशन निकाल दिए जाएँगे और आपको फिर से उनका उपयोग करने के लिए सोर्स को पुनः स्थापित करना होगा."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:681
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "क्या आप %s को वाकई निकालना चाहते हैं?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:684
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s को निकाल दिया जाएगा और इसे पुनः उपयोग करने के लिए आपको इसे स्थापित करना होगा."
+
+#: lib/gs-plugin-loader.c:1461
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr "%s के बारे में जानकारी, साथ ही इस फ़ॉर्मेट को चला सकने वाले कोडेक को प्राप्त करने के विकल्प जिन्हें इस वेबसाइट पर ढूँढा जा सकता हो."
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr "हाल ही में स्थापित किए गए सॉफ़्टवेयर में से कुछ %s के साथ संगत नहीं हैं. अगर आप जारी रखते हैं, तो नवीनीकरण के दौरान निम्न को स्वचालित रूप से निकाल दिया जाएगा:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "असंगत सॉफ़्टवेयर"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_जारी रखें"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:98
+msgid "Hate it"
+msgstr "इससे नफ़रत है"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:102
+msgid "Don’t like it"
+msgstr "यह पसंद नहीं है"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:106
+msgid "It’s OK"
+msgstr "यह ठीक है"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:110
+msgid "Like it"
+msgstr "यह पसंद है"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:114
+msgid "Love it"
+msgstr "यह अत्यधिक पसंद है"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:136
+msgid "Please take more time writing the review"
+msgstr "कृपया समीक्षा के लिए अधिक समय लें"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "Please choose a star rating"
+msgstr "कृपया तारा रेटिंग चुनें"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:144
+msgid "The summary is too short"
+msgstr "सारांश बहुत ही छोटा है"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:148
+msgid "The summary is too long"
+msgstr "सारांश बहुत बड़ा है"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:152
+msgid "The description is too short"
+msgstr "विवरण बहुत छोटा है"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:156
+msgid "The description is too long"
+msgstr "विवरण बहुत बड़ा है"
+
+#. Translators: Title of the dialog box where the users can write and publish
+#. their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "समीक्षा पोस्ट करें"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "_पोस्ट करें"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "रेटिंग"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "अपनी समीक्षा को छोटा सा सारांश दें, उदाहरण के लिए: “बेहतरीन ऐप, अनुशंसा करेंगे”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "समीक्षा"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "आप ऐप के बारे में क्या सोचते हैं? अपने विचारों के लिए कारण बताने का प्रयास करें."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr "कुल रेटिंग"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "आप अपमानजनक, असभ्य या भेदभावपूर्ण व्यवहार के लिए समीक्षाओं की रिपोर्ट कर सकते हैं. "
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "रिपोर्ट किए जाने के बाद, व्यवस्थापक द्वारा जाँच किए जाने तक समीक्षा को छिपा दिया जाएगा."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "समीक्षा की रिपोर्ट करना है?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "रिपोर्ट"
+
+#. Translators: Users can express their opinions about other users' opinions
+#. about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "क्या यह समीक्षा आपके लिए उपयोगी थी?"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "हाँ"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "नहीं"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "मे"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "रिपोर्ट..."
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "निकालें..."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr "स्क्रीनशॉट नहीं मिला"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr "छवि लोड करने में विफल"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr "स्क्रीनशॉट का आकार नहीं मिला"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:491
+msgid "Could not create cache"
+msgstr "संचय नहीं बना सके"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:552
+msgid "Screenshot not valid"
+msgstr "स्क्रीनशॉट मान्य नहीं"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:567
+msgid "Screenshot not available"
+msgstr "स्क्रीनशॉट उपलब्ध नहीं"
+
+#: src/gs-screenshot-image.c:626
+msgid "Screenshot"
+msgstr "स्क्रीनशॉट"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:157
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u अधिक मिलान"
+msgstr[1] "%u अधिक मिलान"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "खोज पृष्ठ"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "कोई एप्लिकेशन नहीं मिला"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:890 src/gs-shell.c:895 src/gs-shell.c:910 src/gs-shell.c:914
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:942
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "%s से फ़र्मवेयर अपडेट डाउनलोड करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:948
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s से अपडेट डाउनलोड करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955
+msgid "Unable to download updates"
+msgstr "अपडेट डाउनलोड करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:960
+msgid ""
+"Unable to download updates: internet access was required but wasn’t "
+"available"
+msgstr "अपडेट डाउनलोड करने में असमर्थ: इंटरनेट पहुँच की आवश्यकता थी लेकिन वह उपलब्ध नहीं थी"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:969
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "%s से अपडेट डाउनलोड करने में असमर्थ: पर्याप्त डिस्क स्थान नहीं"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:974
+msgid "Unable to download updates: not enough disk space"
+msgstr "अपडेट डाउनलोड करने में असमर्थ: पर्याप्त डिस्क स्थान नहीं"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:982
+msgid "Unable to download updates: authentication was required"
+msgstr "अपडेट डाउनलोड करने में असमर्थ: प्रमाणीकरण आवश्यक था"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:987
+msgid "Unable to download updates: authentication was invalid"
+msgstr "अपडेट डाउनलोड करने में असमर्थ: प्रमाणीकरण अमान्य था"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:992
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "अपडेट डाउनलोड करने में असमर्थ: आपके पास सॉफ़्टवेयर को स्थापित करने की अनुमति नहीं है"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:999
+msgid "Unable to get list of updates"
+msgstr "अपडेट की सूची प्राप्त करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1045
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "%s से डाउनलोड विफल होने के कारण %s स्थापित करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1051
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "डाउनलोड विफल होने के कारण %s स्थापित करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1063
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "%s रनटाइम उपलब्ध नहीं होने के कारण %s स्थापित करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1069
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "समर्थित नहीं होने के कारण %s स्थापित करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1076
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "स्थापित करने में असमर्थ: इंटरनेट पहुँच की आवश्यकता थी लेकिन वह उपलब्ध नहीं थी"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1082
+msgid "Unable to install: the application has an invalid format"
+msgstr "स्थापित करने में असमर्थ: ऐप्लिकेशन का स्वरूप अमान्य था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1087
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s स्थापित करने में असमर्थ: पर्याप्त डिस्क स्थान नहीं"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1095
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s स्थापित करने में असमर्थ: प्रमाणीकरण आवश्यक था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1102
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s स्थापित करने में असमर्थ: प्रमाणीकरण अमान्य था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "%s स्थापित करने में असमर्थ: आपके पास सॉफ़्टवेयर को स्थापित करने की अनुमति नहीं है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1122
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr "आपका %s खाता निलंबित कर दिया गया है."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1126
+msgid "It is not possible to install software until this has been resolved."
+msgstr "जब तक इसका समाधान नहीं हो जाता तब तक सॉफ़्टवेयर को स्थापित करना संभव नहीं है."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1137
+#, c-format
+msgid "For more information, visit %s."
+msgstr "अधिक जानकारी के लिए, %s पर जाएँ."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1146
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "%s स्थापित करने में असमर्थ: AC बिजली आवश्यक है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1155
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s को स्थापित करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1201
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr "%s से %s को अपडेट करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1207
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "डाउनलोड विफल होने के कारण %s को अपडेट करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1213
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "अपडेट करने में असमर्थ: इंटरनेट पहुँच की आवश्यकता थी लेकिन वह उपलब्ध नहीं थी"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1221
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s को अपडेट करने में असमर्थ: पर्याप्त डिस्क स्थान नहीं"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1230
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "%s को अपडेट करने में असमर्थ: प्रमाणीकरण आवश्यक था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1237
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s को अपडेट करने में असमर्थ: प्रमाणीकरण अमान्य था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1244
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "%s को अपडेट करने में असमर्थ: आपके पास सॉफ़्टवेयर को अपडेट करने की अनुमति नहीं है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1252
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "%s अपडेट करने में असमर्थ: AC बिजली आवश्यक है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1261
+#, c-format
+msgid "Unable to update %s"
+msgstr "%s को अपडेट करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1306
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%s से %s पर नवीनीकृत करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "डाउनलोड विफल होने के कारण %s में नवीनीकृत करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr "नवीनीकृत करने में असमर्थ: इंटरनेट पहुँच की आवश्यकता थी लेकिन वह उपलब्ध नहीं था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1326
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s में नवीनीकृत करने में असमर्थ: पर्याप्त डिस्क स्थान नहीं"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1335
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s में नवीनीकृत करने में असमर्थ: प्रमाणीकरण आवश्यक था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1342
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s में नवीनीकृत करने में असमर्थ: प्रमाणीकरण अमान्य था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1349
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%s में नवीनीकृत करने में असमर्थ: आपके पास नवीनीकरण की अनुमति नहीं है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1356
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s पर अपग्रेड करने में असमर्थ: AC बिजली आवश्यक है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "%s में नवीनीकृत करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1407
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s को निकालने में असमर्थ: प्रमाणीकरण आवश्यक था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1413
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s को निकालने में असमर्थ: प्रमाणीकरण अमान्य था"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1419
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s को निकालने में असमर्थ: आपके पास सॉफ़्टवेयर को निकालने की अनुमति नहीं है"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1426
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s हटाने में असमर्थ: सॉफ्टवेयर"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to remove %s"
+msgstr "%s को निकालने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1481
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s को लॉन्च करने में असमर्थ: %s स्थापित नहीं है"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1488 src/gs-shell.c:1536 src/gs-shell.c:1584
+msgid "Not enough disk space — free up some space and try again"
+msgstr "पर्याप्त डिस्क स्थान नहीं — कृपया कुछ स्थान रिक्त करें और पुनः प्रयास करें"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1496 src/gs-shell.c:1544 src/gs-shell.c:1611
+msgid "Sorry, something went wrong"
+msgstr "क्षमा करें, कुछ गलत हुआ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1531
+msgid "Failed to install file: authentication failed"
+msgstr "फ़ाइल स्थापित करने में विफल: प्रमाणीकरण विफल रहा"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1578
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s से संपर्क करने में असमर्थ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1593
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "नए प्लग-इन्स का उपयोग करने के लिए %s को पुनरारंभ किए जाने की आवश्यकता है."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1598
+msgid "This application needs to be restarted to use new plugins."
+msgstr "नए प्लग-इन्स का उपयोग करने के लिए एप्लिकेशन को पुनरारंभ करने की आवश्यकता है."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1605
+msgid "AC power is required"
+msgstr "AC बिजली आवश्यक है"
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: src/gs-sources-dialog.c:109
+msgid "No applications or addons installed; other software might still be"
+msgstr "कोई एप्लिकेशन या एडऑन स्थापित नहीं हैं; अन्य सॉफ़्टवेयर भी हो सकते हैं"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:114
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u ऐप्लिकेशन स्थापित किया गया"
+msgstr[1] "%u ऐप्लिकेशन स्थापित की गई"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:121
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u एड-ऑन स्थापित किया गया"
+msgstr[1] "%u एड-ऑन स्थापित किए गए"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: src/gs-sources-dialog.c:129
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u ऐप्लिकेशन"
+msgstr[1] "%u ऐप्लिकेशन्स"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-sources-dialog.c:135
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u एड-ऑन"
+msgstr[1] "%u एड-ऑन्स"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-sources-dialog.c:142
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s और %s स्थापित"
+msgstr[1] "%s और %s स्थापित"
+
+#. TRANSLATORS: nonfree software
+#: src/gs-sources-dialog.c:280
+msgid "Typically has restrictions on use and access to source code."
+msgstr "आमतौर पर सोर्स कोड का उपयोग करने और उस तक पहुँच प्राप्त करने पर प्रतिबंध होता है."
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-sources-dialog.c:587
+msgid "the operating system"
+msgstr "ऑपरेटिंग सिस्टम"
+
+#. TRANSLATORS: list header
+#: src/gs-sources-dialog.c:679
+msgid "Proprietary Software Sources"
+msgstr "स्वामित्व संबंधी सॉफ़्टवेयर सोर्स"
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-sources-dialog.c:687
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr "सॉफ़्टवेयर स्रोत इंटरनेट से डाउनलोड किए जा सकते हैं. वे आपको अतिरिक्त सॉफ़्टवेयर पर पहुँच देते हैं जो %s द्वारा प्रदान नहीं किए जाते हैं."
+
+#: src/gs-sources-dialog.ui:161
+msgid "Additional Sources"
+msgstr "अतिरिक्त सोर्स"
+
+#: src/gs-sources-dialog.ui:181
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr "किसी स्रोत को निकालने से आपके द्वारा इससे स्थापित किए गए सॉफ़्टवेयर भी निकल जाएँगे."
+
+#: src/gs-sources-dialog.ui:266
+msgid "No software installed from this source"
+msgstr "इस स्रोत से कोई सॉफ़्टवेयर स्थापित नहीं किए गए हैं"
+
+#: src/gs-sources-dialog.ui:293
+msgid "Installed from this Source"
+msgstr "इस स्रोत से स्थापित किए गए "
+
+#: src/gs-sources-dialog.ui:339
+msgid "Source Details"
+msgstr "स्रोत का विवरण"
+
+#: src/gs-sources-dialog.ui:396
+msgid "Last Checked"
+msgstr "अंतिम बार जाँचा गया"
+
+#: src/gs-sources-dialog.ui:413
+msgid "Added"
+msgstr "जोड़ा गया"
+
+#: src/gs-sources-dialog.ui:430
+msgid "Website"
+msgstr "वेबसाइट"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (स्थापना करना)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (निकालना)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:129
+msgid "No update description available."
+msgstr "कोई अपडेट विवरण उपलब्ध नहीं."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:224
+#, c-format
+msgid "Installed on %s"
+msgstr "%s पर स्थापित"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:244
+msgid "Installed Updates"
+msgstr "स्थापित किए गए अपडेट"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:420
+msgid "Additions"
+msgstr "जोड़"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:424
+msgid "Removals"
+msgstr "हटाना"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:428
+msgid "Updates"
+msgstr "अपडेट"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:432
+msgid "Downgrades"
+msgstr "डाउनग्रेड"
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "इस सिस्टम पर कोई अपडेट स्थापित नहीं किए गए हैं."
+
+#: src/gs-update-monitor.c:169
+msgid "Security Updates Pending"
+msgstr "सुरक्षा अपडेट लंबित"
+
+#: src/gs-update-monitor.c:170
+msgid "It is recommended that you install important updates now"
+msgstr "यह अनुशंसा की जाती है कि आप अब महत्वपूर्ण अपडेट को स्थापित करें"
+
+#: src/gs-update-monitor.c:173
+msgid "Restart & Install"
+msgstr "पुनःप्रारंभ करें और स्थापित करें"
+
+#: src/gs-update-monitor.c:177
+msgid "Software Updates Available"
+msgstr "सॉफ़्टवेयर अपडेट उपलब्ध"
+
+#: src/gs-update-monitor.c:178
+msgid "Important OS and application updates are ready to be installed"
+msgstr "महत्वपूर्ण OS और एप्लिकेशन अपडेट अब स्थापित किए जाने के लिए तैयार हैं"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:181 src/gs-updates-page.c:800
+msgid "Not Now"
+msgstr "अभी नहीं"
+
+#: src/gs-update-monitor.c:182
+msgid "View"
+msgstr "देखें"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:696 src/gs-updates-page.ui:79
+msgid "Operating System Updates Unavailable"
+msgstr "ऑपरेटिंग तंत्र के अपडेट अनुपलब्ध हैं"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:698
+msgid "Upgrade to continue receiving security updates."
+msgstr "सुरक्षा अपडेट प्राप्त करते रहने के लिए अपग्रेड करें."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:752
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s का नया संस्करण स्थापित करने के लिए उपलब्ध है"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:756
+msgid "Software Upgrade Available"
+msgstr "सॉफ़्टवेयर नवीनीकरण उपलब्ध"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:1040
+msgid "Software Updates Failed"
+msgstr "सॉफ़्टवेयर अपडेट विफल"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:1042
+msgid "An important OS update failed to be installed."
+msgstr "कोई महत्वपूर्ण OS अपडेट स्थापित करना विफल."
+
+#: src/gs-update-monitor.c:1043
+msgid "Show Details"
+msgstr "विवरण दिखाएँ"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1065
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "सॉफ़्टवेयर अपडेट स्थापित"
+msgstr[1] "सॉफ़्टवेयर अपडेट स्थापित"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1069
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "महत्वपूर्ण OS अपेडट स्थापित कर दिया गया है."
+msgstr[1] "महत्वपूर्ण OS अपेडट स्थापित कर दिया गया है."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1080
+msgctxt "updates"
+msgid "Review"
+msgstr "समीक्षा"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1127
+msgid "Failed To Update"
+msgstr "अपेडट करना विफल"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1133
+msgid "The system was already up to date."
+msgstr "सिस्टम पहले से अप टू डेट था."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1138
+msgid "The update was cancelled."
+msgstr "अपडेट रद्द कर दिया गया था."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1144
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you"
+" have internet access and try again."
+msgstr "इंटरनेट पहुँच आवश्यक थी लेकिन उपलब्ध नहीं थी. कृपया सुनिश्चित करें कि आपके पास इंटरनेट पहुँच है और पुनः प्रयास करें."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1150
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "अपडेट के साथ सुरक्षा समस्याएँ थीं. कृपया अधिक विवरण के लिए अपने सॉफ़्टवेयर प्रदाता से परामर्श लें."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1156
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "पर्याप्त डिस्क स्थान नहीं था. कृपया कुछ स्थान रिक्त करें और पुनः प्रयास करें."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1161
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr "हमें क्षमा करें: अपडेट स्थापित करना विफल. कृपया अन्य अपडेट के लिए प्रतीक्षा करें और पुनः प्रयास करें. यदि समस्या बनी रहती है, तो अपने सॉफ़्टवेयर प्रदाता से संपर्क करें."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:306
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:309
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:315
+msgid "Yesterday, %R"
+msgstr "कल, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:319
+msgid "Yesterday, %l:%M %p"
+msgstr "कल, %l:%M %p"
+
+#: src/gs-updates-page.c:322
+msgid "Two days ago"
+msgstr "दो दिन पहले"
+
+#: src/gs-updates-page.c:324
+msgid "Three days ago"
+msgstr "तीन दिन पहले"
+
+#: src/gs-updates-page.c:326
+msgid "Four days ago"
+msgstr "चार दिन पहले"
+
+#: src/gs-updates-page.c:328
+msgid "Five days ago"
+msgstr "पाँच दिन पहले"
+
+#: src/gs-updates-page.c:330
+msgid "Six days ago"
+msgstr "छह दिन पहले"
+
+#: src/gs-updates-page.c:332
+msgid "One week ago"
+msgstr "एक सप्ताह पहले"
+
+#: src/gs-updates-page.c:334
+msgid "Two weeks ago"
+msgstr "दो सप्ताह पहले"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:338
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. FIXME: We are commenting out the code that checked the status because
+#. * the message it returned is not what a plugin may be doing (it can be
+#. * simply refreshing the metadata), so we need to fix this (maybe adding
+#. * different types of 'downloading' status) in the future.
+#. if (status == GS_PLUGIN_STATUS_DOWNLOADING) {
+#. /\* TRANSLATORS: the updates are being downloaded *\/
+#. return _("Downloading new updates…");
+#. }
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:359
+msgid "Looking for new updates…"
+msgstr "नए अपडेट की खोज कर रहा है..."
+
+#: src/gs-updates-page.c:389
+msgid "automatic updates on"
+msgstr "पर स्वचालित अपडेट"
+
+#: src/gs-updates-page.c:392
+msgid "automatic updates off"
+msgstr "स्वचालित अपडेट बंद"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:440
+msgid "Setting up updates…"
+msgstr "अपडेट सेट कर रहा है..."
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:441 src/gs-updates-page.c:448
+msgid "(This could take a while)"
+msgstr "(इसमें कुछ समय लग सकता है)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:554
+#, c-format
+msgid "Last checked: %s"
+msgstr "अंतिम बार जाँचा गया: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:796
+msgid "Updates have been installed"
+msgstr "अपडेट स्थापित हो चुके हैं"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:798
+msgid "A restart is required for them to take effect."
+msgstr "उन्हें प्रभाव में आने के लिए पुनः प्रारंभ करना आवश्यक है."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:802
+msgid "Restart"
+msgstr "पुनः प्रारंभ करें"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:872
+msgid "Integrated Firmware"
+msgstr "समन्वित फ़र्मवेयर"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:875 src/gs-updates-page.c:885
+msgid "Restart & Update"
+msgstr "पुनः प्रारंभ करें और अपडेट करें"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:882
+msgid "Requires Restart"
+msgstr "पुनः प्रारंभ करने की आवश्यकता है"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:892
+msgid "Application Updates"
+msgstr "ऐप्लिकेशन अपडेट"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:895
+msgid "Update All"
+msgstr "सभी अपडेट करें"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:902
+msgid "Device Firmware"
+msgstr "यंत्र फ़र्मवेयर"
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:1087
+msgid "_Restart & Update"
+msgstr "_पुनरारंभ और अपडेट करें"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:1091
+msgid "U_pdate All"
+msgstr "सभी को अ_पडेट करें"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1175
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s अब समर्थित नहीं है."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1180
+msgid "Your OS is no longer supported."
+msgstr "आपका OS अब समर्थित नहीं है."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1185
+msgid "This means that it does not receive security updates."
+msgstr "इसका अर्थ है कि यह सुरक्षा अपडेट प्राप्त नहीं करता."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1189
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "यह सुझाव दिया जाता है कि आप सबसे हाल ही के संस्करण पर अपग्रेड करें."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1446
+msgid "Charges may apply"
+msgstr "शुल्क लागू हो सकते हैं"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1450
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "मोबाइल ब्रॉडबैंड का उपयोग करते समय अपडेट की जाँच करने से शुल्क लागू हो सकते हैं."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1454
+msgid "Check Anyway"
+msgstr "किसी भी तरीके से जाँचें"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1470
+msgid "No Network"
+msgstr "कोई नेटवर्क नहीं"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1474
+msgid "Internet access is required to check for updates."
+msgstr "अपडेट की जाँच करने के लिए इंटरनेट पहुँच आवश्यक है."
+
+#: src/gs-updates-page.c:1907
+msgid "Restart & _Install"
+msgstr "पुनः प्रारंभ करें और _स्थापित करें"
+
+#: src/gs-updates-page.c:1925
+msgid "Check for updates"
+msgstr "अपडेट की जाँच करें"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "अपडेट पृष्ठ"
+
+#: src/gs-updates-page.ui:227
+msgid "Software is up to date"
+msgstr "सॉफ़्टवेयर अप टू डेट है"
+
+#: src/gs-updates-page.ui:278
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "मोबाइल ब्रॉडबैंड का उपयोग करते समय अपडेट की जाँच करने से शुल्क लागू हो सकते हैं"
+
+#: src/gs-updates-page.ui:290
+msgid "_Check Anyway"
+msgstr "_किसी भी तरीके से जाँचें"
+
+#: src/gs-updates-page.ui:333
+msgid "Go online to check for updates"
+msgstr "अपडेट की जाँच करने के लिए ऑनलाइन हो जाएँ"
+
+#: src/gs-updates-page.ui:344
+msgid "_Network Settings"
+msgstr "_नेटवर्क सेटिंग"
+
+#: src/gs-updates-page.ui:426
+msgid "Updates are automatically managed"
+msgstr "अपडेट स्वचालित रूप से प्रबंधित किए जाते हैं"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s अब उपलब्ध"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s को डाउनलोड कर रहा है"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s स्थापित किए जाने के लिए तैयार है"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "नई विशेषताओं और पॉलिश वाले बड़े नवीनीकरण."
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "_अधिक जानें"
+
+#: src/gs-upgrade-banner.ui:98
+msgid "Updates will be applied when the computer is restarted."
+msgstr "जब कंप्यूटर फिर से चालू होगा तब अपडेट लागू होंगे."
+
+#: src/gs-upgrade-banner.ui:146
+msgid "_Restart Now"
+msgstr "_अब पुनःचालू करें"
+
+#: src/org.gnome.Software.desktop.in:3
+msgid "App Center"
+msgstr "ऐप सेंटर "
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "More Apps"
+msgstr "अधिक ऐप्स"
+
+#: src/org.gnome.Software.desktop.in:5
+msgid "Add, remove or update software on this computer"
+msgstr "इस कंप्यूटर पर सॉफ़्टवेयर जोड़ें, निकालें या अपडेट करें"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon
+#. file name)!
+#: src/org.gnome.Software.desktop.in:7
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or
+#. localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:13
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;"
+msgstr "अपडेट;नवीनीकरण;स्रोत;भंडार;प्राथमिकताएँ;स्थापित करें;स्थापना रद्द करें;प्रोग्राम;सॉफ़्टवेयर;ऐप;स्टोर;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "GNOME सॉफ्टवेयर के लिए फ़ीचर होने वाले बैनर डिज़ाइन करें"
+
+#. Translators: Search terms to find this application. Do NOT translate or
+#. localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "AppStream;सॉफ्टवेयर;ऐप्लिकेशन;"
+
+#: plugins/core/gs-desktop-common.c:31
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:35
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "पसंदीदा"
+
+#: plugins/core/gs-desktop-common.c:39
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "ऑडियो निर्माण और संपादन"
+
+#: plugins/core/gs-desktop-common.c:45
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "संगीत प्लेयर"
+
+#: plugins/core/gs-desktop-common.c:49
+msgctxt "Menu of Graphics"
+msgid "3D Graphics"
+msgstr "3D ग्राफ़िक्स"
+
+#: plugins/core/gs-desktop-common.c:52
+msgctxt "Menu of Graphics"
+msgid "Photography"
+msgstr "फ़ोटोग्राफ़ी"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Graphics"
+msgid "Scanning"
+msgstr "स्कैनिंग"
+
+#: plugins/core/gs-desktop-common.c:58
+msgctxt "Menu of Graphics"
+msgid "Vector Graphics"
+msgstr "वेक्टर ग्राफ़िक्स"
+
+#: plugins/core/gs-desktop-common.c:61
+msgctxt "Menu of Graphics"
+msgid "Viewers"
+msgstr "दर्शक"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:72
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "पसंदीदा"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "डिबगर्स"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEs"
+
+#: plugins/core/gs-desktop-common.c:87
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:91
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "पसंदीदा"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "कृत्रिम बुद्धि"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "खगोल विद्या"
+
+#: plugins/core/gs-desktop-common.c:102
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "रसायन शास्त्र"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "भाषाएँ"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "गणित"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "रोबोटिक्स"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "फ़ीचर किए गए"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "क्रिया"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "साहसिक कार्य"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "आर्केड"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "ब्लॉक्स"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "बोर्ड"
+
+#: plugins/core/gs-desktop-common.c:147
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "कार्ड"
+
+#: plugins/core/gs-desktop-common.c:150
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "एम्युलेटर्स"
+
+#: plugins/core/gs-desktop-common.c:153
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "बच्चे"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "तर्क"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "भूमिका निभाना"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "खेल"
+
+#: plugins/core/gs-desktop-common.c:166
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "रणनीति"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:177
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "पसंदीदा"
+
+#: plugins/core/gs-desktop-common.c:180
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "कैलेंडर"
+
+#: plugins/core/gs-desktop-common.c:184
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "डेटाबेस"
+
+#: plugins/core/gs-desktop-common.c:187
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "वित्त"
+
+#: plugins/core/gs-desktop-common.c:191
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Word प्रोसेसर"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Utility"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Utility"
+msgid "Featured"
+msgstr "फ़ीचर किए गए"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "फ़ॉन्ट"
+
+#: plugins/core/gs-desktop-common.c:213
+msgctxt "Menu of Communication"
+msgid "Chat"
+msgstr "चैट"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "कोडेक"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "इनपुट स्रोत"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "भाषा पैक"
+
+#: plugins/core/gs-desktop-common.c:229
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Shell विस्तारण"
+
+#: plugins/core/gs-desktop-common.c:232
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "स्थानीयकरण"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "हार्डवेयर ड्राइवर्स"
+
+#: plugins/core/gs-desktop-common.c:238
+msgctxt "Menu of Utility"
+msgid "Text Editors"
+msgstr "पाठ संपादक"
+
+#: plugins/core/gs-desktop-common.c:241
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "वेब ब्राउज़र्स"
+
+#: plugins/core/gs-desktop-common.c:244
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "समाचार"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Settings"
+msgid "Settings"
+msgstr "सेटिंग्स "
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of System"
+msgid "System"
+msgstr "सिस्टम"
+
+#: plugins/core/gs-desktop-common.c:270 plugins/core/gs-desktop-common.c:314
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "सभी"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "फ़ीचर किए गए"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Art"
+msgstr "कला"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "जीवनी"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "कॉमिक्स"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Feed"
+msgstr "फ़ीड"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "काल्पनिक कहानी"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "स्वास्थ्य"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "इतिहास"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "जीवनशैली"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "News"
+msgstr "समाचार"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "राजनीति"
+
+#: plugins/core/gs-desktop-common.c:306
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "खेल"
+
+#. TRANSLATORS: this is the menu spec main category for Learning
+#: plugins/core/gs-desktop-common.c:324
+msgid "Learning"
+msgstr "शिक्षण"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:327
+msgid "Games"
+msgstr "गेम्स"
+
+#. TRANSLATORS: this is the menu spec main category for Multimedia
+#: plugins/core/gs-desktop-common.c:330
+msgid "Multimedia"
+msgstr "मल्टीमीडिया"
+
+#. TRANSLATORS: this is the menu spec main category for Work
+#: plugins/core/gs-desktop-common.c:333
+msgid "Work"
+msgstr "कार्य"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:336
+msgid "Reference & News"
+msgstr "संदर्भ और समाचार"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:339
+msgid "Utilities"
+msgstr "उपयोगिता"
+
+#. TRANSLATORS: this is the menu spec main category for Dev Tools; it
+#. * should be a relatively short label; as an example, in Portuguese and
+#. * Spanish the direct translation of "Programming" (noun) is used
+#: plugins/core/gs-desktop-common.c:344
+msgid "Dev Tools"
+msgstr "Dev टूल"
+
+#: plugins/core/gs-desktop-common.c:346
+msgid "USB"
+msgstr "USB"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-appstream.c:693
+msgid "Downloading extra metadata files…"
+msgstr "अतिरिक्त मेटाडेटा फ़ाइलें डाउनलोड कर रहा है..."
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr "OS अपडेट"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr "प्रदर्शन, स्थिरता और सुरक्षा सुधार शामिल हैं."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "फ़ीचर की गई छवियाँ डाउनलोड कर रहा है..."
+
+#: plugins/eos/gs-plugin-eos.c:1917
+#, c-format
+msgid "Could not launch this application."
+msgstr "इस एप्लिकेशन को लॉन्च नहीं सके."
+
+#: plugins/eos/gs-plugin-eos.c:1974
+msgid "Endless Platform"
+msgstr "अनंत प्लेटफ़ॉर्म"
+
+#: plugins/eos/gs-plugin-eos.c:1977
+msgid "Framework for applications"
+msgstr "ऐप्लिकेशन्स के लिए फ़्रेमवर्क"
+
+#: plugins/eos/gs-plugin-eos.c:2126
+msgid "An Endless update with new features and fixes."
+msgstr "नई सुविधाओं और सुधार के साथ एंडलेस का अपडेट."
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "वेब ऐप्लिकेशन सहायता"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "किसी ब्राउज़र में लोकप्रिय वेब ऐप्लिकेशन्स चलाएँ"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:102
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Software AppStream सिस्टम-व्यापी इंस्टॉलर"
+
+#: plugins/external-appstream/gs-install-appstream.c:104
+msgid "Failed to parse command line arguments"
+msgstr "कमांड लाइन तर्क पार्स करने में विफल रहा"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:111
+msgid "You need to specify exactly one filename"
+msgstr "आपको स्पष्ट रूप से एक फ़ाइलनाम निर्दिष्ट करने की आवश्यकता है"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:118
+msgid "This program can only be used by the root user"
+msgstr "इस प्रोग्राम का उपयोग केवल रूट उपयोगकर्ता द्वारा किया जा सकता है"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:126
+msgid "Failed to validate content type"
+msgstr "सामग्री प्रकार सत्यापित करने में विफल रहा"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:133
+msgid "Failed to copy"
+msgstr "प्रतिलिपि बनाने में विफल रहा"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+msgid "Downloading upgrade information…"
+msgstr "अपग्रेड जानकारी डाउनलोड कर रहा है..."
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:311
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr "अपने Fedora तंत्र को नवीनतम सुविधाओं और सुधारों पर अपग्रेड करें."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak समर्थन"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak, Linux पर डेस्कटॉप ऐप्लिकेशन्स के लिए एक फ़्रेमवर्क है"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:871
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "%s के लिए flatpak मेटाडेटा प्राप्त कर रहा है…"
+
+#: plugins/flatpak/gs-flatpak.c:2114
+#, c-format
+msgid ""
+"The app %s is missing its runtime. Update the app to repair this problem."
+msgstr "ऐप %s में रनटाइम गायब है. इसे ठीक करने के लिए ऐप अपडेट करें."
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:3274
+msgid "Getting runtime source…"
+msgstr "रनटाइम स्त्रोत प्राप्त कर रहा है..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:864 plugins/fwupd/gs-plugin-fwupd.c:963
+msgid "Downloading firmware update signature…"
+msgstr "फ़र्मवेयर अपडेट हस्ताक्षर डाउनलोड कर रहा है..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:905 plugins/fwupd/gs-plugin-fwupd.c:1009
+msgid "Downloading firmware update metadata…"
+msgstr "फ़र्मवेयर अपडेट मेटाडेटा डाउनलोड कर रहा है..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:1100
+msgid "Downloading firmware update…"
+msgstr "फ़र्मवेयर अपडेट डाउनलोड कर रहा है..."
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "फ़र्मवेयर नवीनीकरण समर्थन"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "फ़र्मवेयर नवीनीकरणों के लिए समर्थन प्रदान करता है"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr "Limba समर्थन"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr "Limba डेवलपर्स को आसानी से सॉफ़्टवेयर बंडल बनाने का एक तरीका प्रदान करता है"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr "ऐप्लिकेशन रेटिंग डाउनलोड कर रहा है..."
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "खुला डेस्कटॉप रेटिंग समर्थन"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS ऐप्लिकेशन्स को उपयोगकर्ता समीक्षाएँ प्रदान करने वाली सेवा है"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:674
+msgid "Downloading shell extension metadata…"
+msgstr "शैल एक्सटेंशन मेटाडेटा डाउनलोड कर रहा है..."
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr "Snappy समर्थन"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "स्नैप एक विश्वव्यापी Linux पैकेज है"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr "ऐप्लिकेशन पृष्ठ डाउनलोड कर रहा है..."
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr "Steam समर्थन"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr "Valve की ओर से एक शानदार मनोरंजन प्लेटफ़ॉर्म"
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..0dd2ce1
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,5827 @@
+# Croatian translation for gnome-software
+# Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016
+# This file is distributed under the same license as the gnome-software package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-24 23:27+0200\n"
+"Last-Translator: gogo <trebelnik2@gmail.com>\n"
+"Language-Team: Croatian <hr@li.org>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2017-03-15 15:32+0000\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME softver"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Upravitelj aplikacijama za GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Softver vam omogućuje pretraživanje i instalaciju novih aplikacija "
+"proširenja sustava i uklanjanje postojećih instaliranih aplikacija."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Softver prikazuje istaknute i popularne aplikacije s korisnim opisima "
+"i snimkama aplikacija. Aplikacije se mogu pronaći pregledavanjem popisa "
+"kategorija ili pretraživanjem. Isto tako vam omogućuje nadopunu vašeg "
+"sustava kada nemate pristup Internetu."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel prikaza"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel pojedinosti"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel instaliranog"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel nadopuna"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Pojedinosti nadopune"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "GNOME projekt"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instaliraj appstream datoteku u lokaciju sustava"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalacija appstream datoteke u lokaciju sustava"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Popis kompatibilnih projekata"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ovo je popis kompatibilnih projekata koji bi trebali biti prikazani poput "
+"GNOMA, KDE i XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Treba li upravljati nadopunama i nadogradnjama u GNOME Softveru"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Ako je onemogućeno, GNOME Softver će sakriti panel nadopuna i neće obaviti "
+"bilo kakvu radnju automatske nadopune ili upitat za nadogradnju."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automatski preuzmi i instaliraj nadopune"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Ako je omogućeno, GNOME Softver automatski preuzima nadopune u pozadini i "
+"instalira one koje ne zahtijevaju ponovno pokretanje."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Obavijesti korisnika o dostupnoj softverskoj nadopuni u pozadini"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Ako je omogućeno, GNOME Softver obavještava korisnika o nadopunama koje su "
+"se izvele kada je korisnik mirovao."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Treba li automatski osvježiti pri odmjerenom povezivanju"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Ako je omogućeno, GNOME Softver automatski osvježava u pozadini čak i kada "
+"se koristi odmjereno povezivanje (moguće preuzimanje određenih metapodataka, "
+"provjeravanje nadopuna, itd., koje može prouzročiti troškove korisniku)"
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Je li ovo prvo pokretanje GNOME Softvera"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Prikaži zvjezdice ocjene pokraj aplikacija"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Suzi izbor aplikacija temeljen na zadanom ogranku postavljenom za udaljeno"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Vlasničke aplikacije prikazuju dijalog upozorenja prije instalacije"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Kada se vlasničke aplikacije instaliraju može se prikazati dijalog "
+"upozorenja. Ovo upravlja prikazom tog dijaloga."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Popis popularnih aplikacija"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Popis aplikacija koje se koriste, bez određenih aplikacija sustavom."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Vrijeme posljednje provjere nadopune"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Vremenska oznaka obavijesti posljednje nadogradnje"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Vrijeme prve sigurnosne nadopune, uklonjeno nakon nadopune"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Vrijeme posljednje nadopune"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Posljednje vrijeme kada je sustav bio povezan s internetom i obavio nadopunu"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Vrijeme u sekundama za provjeru valjanosti poslane slike zaslona"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Odabir veće vrijednosti znači manje povratnih posjeta na udaljeni "
+"poslužitelj, ali nadopuna prikaza slike zaslona može potrajati duže. "
+"Vrijednost 0 znači da se nikada ne provjerava poslužitelj ako slika već "
+"postoji u predmemoriji."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Poslužitelj koji će se koristiti za recenzije aplikacija"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Najmanje karma bodova za recenziju"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Recenzije s karmom manjom od ovog broja neće biti prikazane."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Popis službenih repozitorija koji se ne bi trebali smatrati repozitorijima "
+"treće strane"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Popis službenih repozitorija koji se mogu smatrati slobodnim softverom"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"URL licence koja se koristi kada se aplikacija smatra slobodnim softverom"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Instaliraj paket aplikacija za sve korisnike sustava gdje je moguće"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Dopusti pristup dijalogu softverskih repozitorija"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Predloži nadogradnju na predizdanja"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Prikaži određene elemente grafičkog sučelja za informiranje korisnika da je "
+"aplikacija neslobodna"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Prikaži upit za instalaciju neslobodnih softverskih repozitroija"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Prikaži instaliranu veličinu aplikacija u popisu instaliranih aplikacija"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://wiki.open.hr/wiki/Vlasnički_softver'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI koji pojašnjava neslobodni i vlasnički softver"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Popis URL-ova usmjeruje na appstream datoteke koje će biti preuzete u app-"
+"info mapu"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Instaliraj Appstream datoteku u lokaciju sustava za sve korisnike"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Omogući repozitorij proširenja GNOME ljuske"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Pohranjeni izraz gnome-online-account id-a korišten za prijavu"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instaliraj softver"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instaliraj odabrani softver na sustav"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Odaberi sve"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Ukloni odabir"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Repozitoriji softvera"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Osobitosti nadopunjivanja"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Softver"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Natrag"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Istraži"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalirano"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Nadopune"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Pretraga"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Repozitorij"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repozitoriji softvera"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Istraži disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Mrežne postavke"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Ponovno pokreni odmah"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Više informacija"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatsko nadopunjivanje pauzirano"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Potražite _više"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokalna datoteka"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Na čekanju"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalirano"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalacija"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Uklanjanje"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Način pokretanja: ili ‘updates’, ‘updated’, ‘installed’ ili ‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "NAČIN RADA"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Pretraži aplikacije"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "PRETRAŽI"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Prikaži pojedinosti aplikacije (upotrebom ID-a aplikacije)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Prikaži pojedinosti aplikacije (upotrebom naziva aplikacije)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NAZIV PAKETA"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instaliraj aplikaciju (upotrebom ID-a aplikacije)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Otvori lokalni paket aplikacije"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NAZIV DATOTEKE"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Vrsta očekivanog međudjelovanja za ovu radnju: ili ‘none’, ‘notify’, ili "
+"‘full’"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Prikaži opširnije informacije otklanjanja greške"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instaliraj sve nadopune na čekanju u pozadini"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Prikaži osobitosti nadopune"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Zatvori pokrenuti primjerak"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferiraj lokalne izvore paketa za AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Prikaži broj inačice"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+" gogo https://launchpad.net/~trebelnik-stefina"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "O softveru"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Jednostavniji način za upravljanje softverom na vašem sustavu."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Nažalost, ne postoje pojedinosti za ovu aplikaciju."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Posjeti web stranicu"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instaliraj…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Odustani"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instaliraj"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Nadopuni"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Ukloni"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Uređaj se ne može koristiti tijekom nadopune."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Zahtijeva dodatne dozvole"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Prijava zahtijeva udaljeni %s (realm %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Zahtjev prijave"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Odustani"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Prijava"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Korisnik"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Lozinka"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Ostalo"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Sve"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Popularno"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Popularno %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Ocjena"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Naziv"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Prikaži"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Izbornik filtra podkategorija"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Razvrstaj"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Izbornik razvrstavanja podkategorija"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Upišite broj od 1 do %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Odaberi aplikaciju:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Nadopune operativnog sustava su sada instalirane"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nedavno instalirane nadopune su sada dostupne za prikaz"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s je uspješno instaliran"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr ""
+"Potrebno je ponovno pokretanje računala kako bi se promjene primijenile."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplikacija je spremna za korištenje."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Ponovno pokreni"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Pokreni"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Želite li instalirati softver treće strane?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Želite li omogućiti repozitorij softvera treće strane?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nije <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">slobodan softver otvorenog kôda</a>, i dostupan je putem “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s je dostupan putem “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Repozitorij softvera mora biti omogućen za nastavak instalacije."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Moguća je nezakonita instalacija ili korištenje %s u određenim zemljama."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Moguća je nezakonita instalacija ili korištenje ovog kôdeka u određenim "
+"zemljama."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Ne upozoravaj ponovno"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Omogući i instaliraj"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Opširne greške iz upravitelja paketa slijede:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Pojedinosti"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Nadopuna je instalirana"
+msgstr[1] "Nadopune su instalirane"
+msgstr[2] "Nadopune su instalirane"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Potrebno je ponovno pokretanje računala kako bi se primijenila."
+msgstr[1] "Potrebno je ponovno pokretanje računala kako bi se primijenile."
+msgstr[2] "Potrebno je ponovno pokretanje računala kako bi se primijenile."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ne sada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Bez nasilja u crtićima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Likovi crtića su u opasnim situacijama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Likovi crtića su u agresivnim sukobima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Animirano nasilje uključuje likove crtića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Bez umišljenog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Likovi u opasnim situacijama se lako mogu razlikovati od stvarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Likovi u agresivnim sukobima se lako mogu razlikovati od stvarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Animirano nasilje se lako može razlikovati od stvarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Bez stvarnog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Srednje realni likovi u agresivnom sukobu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Prikaz realnih likova u agresivnom sukobu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Animirano nasilje uključuje realne likove"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Bez krvoprolića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Nerealno krvoproliće"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realno krvoproliće"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Prikaz krvoprolića i sakaćenja dijelova tijela"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Bez seksualnog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Silovanje ili ostalo nasilje seksualnog ponašanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Bez pozivanja na alkoholna pića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Pozivanje na alkoholna pića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Upotreba alkoholnih pića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Bez pozivanja na nedopuštene droge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Pozivanje na nedopuštene droge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Upotreba nedopuštenih droga"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Bez povezivanja na duhanske proizvode"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Pozivanje na duhanske proizvode"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Upotreba duhanskih proizvoda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Bez golotinje svake vrste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Kratka umjetnička golotinja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Dugotrajna golotinja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Bez aluzije ili prikaza seksualne prirode"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokativne aluzije ili crteži"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksualne aluzije ili crteži"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Animirano seksualno ponašanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Bez psovki bilo koje vrste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Blaga ili sporadičnu upotreba psovki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Umjerena upotreba psovki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Snažna ili česta upotreba psovki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Bez neprimjerenog humora"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Urnebesni humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgaran ili kafanski humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Seksualni ili humor za odrasle"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Bez diskriminirajućeg jezika bilo koje vrste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativnost prema određenoj skupini ljudi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminacija osmišljena da uzrokuje emocionalno nasilje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Eksplicitna diskriminacija na osnovi spola, spolnosti, rasi ili religiji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Bez oglasa bilo koje vrste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Plasman proizvoda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Jasne odredbe zaštićene robne marke ili zaštitnog znaka proizvoda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Korisnici se potiču na kupnju određenog stvarnog predmeta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Bez kockanja bilo koje vrste"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Kockanje na slučajnim događajima pomoću žetona ili kredita"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Kockanje upotrebom novca iz \"igre\""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Kockanje upotrebno stvarnog novca"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Bez mogućnosti trošenja stvarnog novca"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Korisnici se potiču na kupnju određenog stvarnog predmeta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Mogućnost trošenja stvarnog novca u aplikaciji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Bez mogućnost razgovora s drugim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr ""
+"Korisnik-prema-korisniku interakcija bez mogućnosti međusobnog razgovora"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Ograničena mogućnost razgovora između korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nekontrolirana mogućnost razgovora između korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Bez mogućnost razgovora s drugim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nekontrolirana mogućnost glasovnog i video razgovora između korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Bez dijeljenja imena i adresa e-pošte društvenih mreža"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Dijeljenje imena i adresa e-pošte društvenih mreža"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Bez dijeljenja informacija korisnika sa trećom stranom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Provjera najnovije inačice aplikacije"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Dijeljenji dijagnostički podaci koji ne dopuštaju drugima da identificiraju "
+"korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Dijeljene informacije koju dopuštaju drugima da identificiraju korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Bez dijeljenja fizičke lokacije sa ostalim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Dijeljenje fizičke lokacije sa ostalim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Bez pozivanja na homoseksualnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Neizrano pozivanje na homoseksualnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Ljubljenje između ljudi istog spola"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafičko spolno ponašanje između ljudi istog spola"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Bez pozivanja na prostituciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Neizravno pozivanje na prostituciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Izravno pozivanje na prostituciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafički prikaz čina prostitucije"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Bez pozivanja na preljub"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Neizravno pozivanje na preljub"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Izravno pozivanje na preljub"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafički prikaz čina preljuba"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Bez seksualnih likova"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Oskudno odjeveni likovi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Javno neprimjereni seksualni likovi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Bez pozivanja na oskvrnuće"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Prikaz ili poziv na povijesno oskvrnuće"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Prikaz oskvrnuća ljudske suvremenosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafički prikaz oskvrnuća ljudske suvremenosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Bez vidljivih mrtvih ljudskih ostataka"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Vidlji mrtvi ljudski ostaci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Vidlji mrtvi ljudski ostaci koji su izloženi u elementima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafički prikazi oskvrnuća ljudskih tijela"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Bez pozivanja na ropstvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Prikaz ili poziv na povijesno ropstvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Prikaz suvremenog ropstva"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafički prikaz suvremenog ropstva"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Općenito"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "SVE"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Samo za odrasle"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Za starije"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Za tinejdžere"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Iznad 10 god"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Bez dobnog ograničenja"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Rano djetinjstvo"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Aplikacija"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s zahtijeva dodatnu podršku datotečnog formata."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Dodatna MIME vrsta je potrebna"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s zahtijeva dodatna slova."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Doadatna slova su potrebna"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s zahtijeva dodatne multimedijske kôdeke."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Dodatni multimedijski kôdeki su potrebni"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s zahtijeva dodatne upravljačke programe pisača."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Dodatni upravljački programi pisača su potrebni"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s zahtijeva dodatne pakete."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Potrebni su dodatni programi"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Potraži u Softveru"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Uklanjanje…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Čekanje na instalaciju…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Čekanje na nadopunu…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Pripremanje…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Ova aplikacija se može samo koristiti kada je dostupan pristup internetu."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instaliraj"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instaliraj…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Pokreni"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Ukloni"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Mreža"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Nemoguća komunikacija putem mreže"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Usluge sustava"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Može pristupiti D-bus uslugama na sabirnici sustava"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Usluge sesije"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Može pristupiti D-bus uslugama na sabirnici sesije"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Uređaji"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Može pristupiti datotekama uređaja sustava"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Osobna mapa"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Može vidjeti, uređivati i stvarati datoteke"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Može vidjeti datoteke"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Datotečni sustav"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Mapa preuzimanja"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Postavke"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Može vidjeti i promijeniti sve postavke"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Zastarjeli sustav prikaza"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Koristi zastarjeli, nesigurni sustav prikaza"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Zaobilaženje sigurnog okruženja"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Može izbjeći sigurno okruženje i zaobići bilo koja druga ograničenja"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Ova aplikacija je potpuno u osiguranome okruženju."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nemoguće otkrivanje koji dijelovi sustava pristupaju ovoj aplikaciji. Ovo je "
+"uobičajeno za starije aplikacije."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nepoznata"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nikada"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nepoznat"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Nizak"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Srednji"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Visok"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Nepoznata"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Potreban vam je pristup internetu za pisanje recenzije"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nemoguće je pronaći “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Javno vlasništvo"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Slobodan softver"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Korisnici su ograničeni sljedećom licencom:"
+msgstr[1] "Korisnici su ograničeni sljedećim licencama:"
+msgstr[2] "Korisnici su ograničeni sljedećim licencama:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Više informacija"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Stranica pojedinosti"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Preuzimanje"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Nadopuni"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Dodaj prečac"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Uk_loni prečac"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nema slike zaslona"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Softverski repozitorij je uključen"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ova aplikacija uključuje softverski repozitorij koji pruža nadopune, kao i "
+"pristup ostalom softveru."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Nema uključenog softverskog repozitorija"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ova aplikacija ne uključuje softverski repozitorij, stoga neće pružati "
+"nadopune na nove inačice."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Ovaj softver je već dostupan putem vaše distribucije i ne bi trebao biti "
+"zamijenjen."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Softverski repozitorij otkriven"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Dodavanje ovog softverskog repozitorija dati će vam pristup dodatnom "
+"softveru i nadopunama."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Koristite samo repozitorije softvera kojima vjerujete."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Web stranica"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donirajte"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Lokalizirano na vaš jezik"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentacija"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Aktivnosti izdanja"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integracija sustava"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Sigurno okruženje"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Inačica"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Dobna ocjena"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Dozvole"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Nadopunjeno"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorija"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Veličina instalacije"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Veličina preuzimanja"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Razvijatelj"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licenca"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Slobodan softver"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Vlasnički softver"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Dodaci"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Odabrani dodaci će biti instalirani s aplikacijom."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recenzije"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Napiši recenziju"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Prikaži više"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"To znači da se softver može slobodno koristiti, kopirati, dijeliti, "
+"proučavati i mijenjati."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Vlasnički softver"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"To znači da je softver u vlasništvu pojedinaca ili kompanije. Često je pod "
+"ograničenjima u korištenju i ne može se pristupiti njegovom izvornom kôdu."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Nepoznata licenca softvera"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Uvjeti upotrebe za ovaj softver su nepoznati."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Aplikacija je ocjenjena na ovaj način jer sadrži:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Nema dostupnih pojedinosti za ovu ocjenu."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " i "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Dostupna slova za %s skriptu"
+msgstr[1] "Dostupna slova za %s skripte"
+msgstr[2] "Dostupna slova za %s skripte"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Dostupan softver za %s"
+msgstr[1] "Dostupan softver za %s"
+msgstr[2] "Dostupan softver za %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nemoguć pronalazak zatraženog softvera"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s nije pronađeno"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "na web stranici"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nema dostupnih aplikacija koje pružaju datoteku %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informacije o %s, kao i upute kako nabaviti aplikacije koje nedostaju mogu "
+"se pronaći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nema dostupnih aplikacija za %s podršku."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s nije dostupno."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informacije o %s, kao i upute kako nabaviti aplikaciju koja koja podržava "
+"ovaj format mogu se pronaći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Nema dostupnih slova za %s podršku skripte."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informacije o %s, kao i upute kako nabaviti dodatna slova mogu se pronaći na "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Nema dostupnih dodatka kôdeka za %s format."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informacije o %s, kao i upute kako nabaviti kôdek koji može reproducirati "
+"ovaj format mogu se pronaći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nema dostupnih Plasma resursa za %s podršku."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informacije o %s, kao i upute kako nabaviti dodatne Plasma resurse mogu se "
+"pronaći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nema dostupnih upravljačkih programa pisača za %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informacije o %s, kao i upute kako nabaviti upravljački program za ovaj "
+"pisač mogu se pronaći na %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "ova web stranica"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Nažalost, %s koji ste tražili ne može se pronaći. Pogledajte %s za više "
+"informacija."
+msgstr[1] ""
+"Nažalost, %s koje ste tražili ne mogu se pronaći. Pogledajte %s za više "
+"informacija."
+msgstr[2] ""
+"Nažalost, %s koje ste tražili ne mogu se pronaći. Pogledajte %s za više "
+"informacija."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Neuspjelo pretraživanje svih rezultata pretraživanja"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s datotečni format"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Stranica kôdeka"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Dobrodošli"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Dobrodošli u Softver"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Softver vam omogućuje instalaciju svog potrebnog softvera, sve s jednog "
+"mjesta. Pogledajte naše preporuke, pregledajte kategorije ili potražite "
+"željenu aplikaciju."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Krenimo u kupovinu"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Uklonjeno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalirano"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Nadopunjeno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Povijest"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplikacije sustava"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Instalirana strana"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Katalog softvera se preuzima"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Učitavanje stranice"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Pokretanje…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Trenutna mreža je ograničena podacima. Povezivanje ograničeno podacima ima "
+"ograničenje preuzimanja podataka, dodatni preuzeti podaci iznad ograničenja "
+"mogu se dodatno naplaćivati. Kako bi uštedjeli podatke, automatsko "
+"nadopunjivanje je pauzirano .\n"
+"\n"
+"Automatsko nadopunjivanje će se nastaviti kada postane dostupna mreža s "
+"neograničenim podacima. Do tada, još uvijek je moguće ručno instalirati "
+"nadopune.\n"
+"\n"
+"Alternativno, ako je trenutna mreža pogrešno identificirana kao mreža s "
+"ograničenim podacima, ova postavka se može promijeniti."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Otvori mrežne _postavke"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Stranica moderiranja"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Nema recenzija za moderiranje"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sustav"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "korisnik"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ogranak"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalacija"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Više…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Preporučene aplikacije videa i zvuka"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Preporučene igre"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Preporučene aplikacije za grafiku"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Preporučene aplikacije produktivnosti"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Pristup dodatnom softveru iz odabranih repozitorija treće strane."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Pojedini softver je vlasnički softver i stoga ima ograničenje korištenja i "
+"pristup izvornom kôdu."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Potražite više…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Omogući"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Stranica pojedinosti"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Želite li omogućiti repozitorij softvera treće strane?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Prijašnje"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Sljedeće"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Odabir distribucije"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nedavna izdanja"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorije"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nema pronađenih podataka o aplikaciji"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Pripremam %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Sigurno želite ukloniti %s repozitorij?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Sve aplikacije iz %s će biti uklonjene i morati ćete ponovno instalirati "
+"repozitorij kako bi ga ponovno koristili."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Sigurno želite ukloniti %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s će biti uklonjen i trebat ćete ga ponovno instalirati kako bi ga mogli "
+"koristiti."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalirano)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Osobitosti nadopune"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatsko nadopunjivanje"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatsko nadopunjavanje je onemogućeno na mobilnom povezivanju ili "
+"povezivanju ograničenom podacima."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Obavijesti automatske nadopune"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Prikazuje obavijesti kada se nadopune instaliraju automatski."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Pojedini trenutno instalirani softver nije kompatibilan sa %s. Ako "
+"nastavite, sljedeći paketi će biti automatski uklonjeni tijekom nadogradnje:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Nekompatibilan softver"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Nastavi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplikacija instalirana"
+msgstr[1] "%u aplikacije instalirane"
+msgstr[2] "%u aplikacija instalirano"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u dodatak instaliran"
+msgstr[1] "%u dodatka instalirana"
+msgstr[2] "%u dodataka instalirana"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplikacija"
+msgstr[1] "%u aplikacije"
+msgstr[2] "%u aplikacija"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u dodatak"
+msgstr[1] "%u dodatka"
+msgstr[2] "%u dodataka"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s i %s instalirano"
+msgstr[1] "%s i %s instalirano"
+msgstr[2] "%s i %s instalirano"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Ukloni “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Onemogući “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Softver koji je instaliran iz ovog repozitorija neće više primati nadopune, "
+"uključujući sigurnosne popravke."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Onemogući"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operativan sustav"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Ovi repozitoriji nadopunjuju zadani softver koji pruža %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repozitoriji treće strane"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nema dodatnih repozitorija"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Omogući"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Ukloni…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Onemogući…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Omogućavanje"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Onemogućavanje"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Omogućeno"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Onemogućeno"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Mrzim ga"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Ne sviđa mi se"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "U redu je"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Sviđa mi se"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Obožavam ga"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Odvojite više vremena kako bi napisali recenziju"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Odaberite zvjezdicu ocjene"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Sadržaj je prekratak"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Sadržaj je predugačak"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Opis je prekratak"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Opis je predugačak"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Objavi recenziju"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Objavi"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Sažetak"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Dajte nam kratak opis vaše recenzije, na primjer \"Izvrsna aplikacija, "
+"preporučujem je svakome\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recenzija"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Što mislite o aplikaciji? Dajte nam svoje mišljenje o aplikaciji."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Saznajte koji se podaci šalju u <a href=\"https://odrs.gnome.org/privacy"
+"\">pravilima privatnosti</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "ukupno ocjena"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Možete prijaviti uvredljive, nepristojne ili diskriminirajuće recenzije."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Jednom kada je objavljena, recenzija neće biti dostupna dok je ne provjeri i "
+"odobri administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Prijavi recenziju?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Prijavi"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Je li vam ova recenzija bila korisna?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Da"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ne"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Ah"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Prijavi…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Ukloni…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Snimak zaslona nije dostupan"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Neuspjelo učitavanje slike"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Veličina snimka zaslona nije pronađena"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nemoguće stvaranje predmemorije"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Snimak zaslona nije valjan"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Snimak zaslona nije dostupan"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Slika zaslona"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "Još %u podudaranje"
+msgstr[1] "Još %u podudaranja"
+msgstr[2] "Još %u podudaranja"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Stranica pretrage"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nema pronađene aplikacije"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Nemoguće preuzimanje nadopuna frimvera s %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nemoguće preuzimanje nadopuna s %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nemoguće preuzimanje nadopuna"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nemoguće preuzimanje nadopuna: pristup internetu je potreban, ali nije "
+"dostupan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Nemoguće preuzimanje nadopuna s %s: nema dovoljno slobodnog diskovnog "
+"prostora"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Nemoguće preuzimanje nadopuna: nema dovoljno slobodnog diskovnog prostora"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Nemoguće preuzimanje nadopuna: potrebna je ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nemoguće preuzimanje nadopuna: pogrešna ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Nemoguće preuzimanje nadopuna: nemate dozvolu za instalaciju softvera"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nemoguće je preuzeti popis nadopuna"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Nemoguća je instalirati %s uslijed neuspješnog preuzimanja s %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Nemoguća je instalirati %s uslijed neuspješnog preuzimanja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Nemoguća je instalirati %s jer komponenta izvršavanja %s nije dostupna"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nemoguće je instalirati %s jer nije podržano"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Nemoguća instalacija: pristup internetu je potreban, ali nije dostupan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nemoguća instalacija: aplikacija ima neispravni format"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nemoguće je instalirati %s: nema dovoljno slobodnog diskovnog prostora"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Nemoguće je instalirati %s: potrebna je ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Nemoguće je instalirati %s: pogrešna ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Nemoguće je instalirati %s: nemate dozvolu za instalaciju softvera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nemoguće je instalirati %s: potrebno je priključiti napajanje"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Nemoguće je instalirati %s: energija baterije je preslaba"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nemoguće je instalirati %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Nemoguće je nadopuniti %s iz %s uslijed neuspješnog preuzimanja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Nemoguća je nadopuniti %s uslijed neuspješnog preuzimanja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Nemoguće je instalirati nadopune iz %s uslijed neuspješnog preuzimanja"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nemoguće je instalirati nadopune uslijed neuspješnog preuzimanja"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Nemoguća nadopuna: pristup internetu je potreban, ali nije dostupan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nemoguće je nadopuniti %s: nema dovoljno slobodnog diskovnog prostora"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Nemoguće je instalirati nadopune: nema dovoljno slobodnog diskovnog prostora"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Nemoguće je nadopuniti %s: potrebna je ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nemoguće je instalirati nadopune: potrebna je ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Nemoguće je nadopuniti %s: pogrešna ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Nemoguće je instalirati nadopune: pogrešna ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Nemoguće je nadopuniti %s: nemate dozvolu za nadopunu softvera"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "Nemoguće je instalirati nadopune: nemate dozvolu za nadopunu softvera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Nemoguće je nadopuniti %s: potrebno je priključiti napajanje"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nemoguće je instalirati nadopune: potrebno je priključiti napajanje"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Nemoguće je nadopuniti %s: energija baterije je preslaba"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Nemoguće je instalirati nadopune: energija baterije je preslaba"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nemoguća je nadopuniti %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nemoguće je instalirati nadopune"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nemoguća nadogradnja na %s s %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nemoguća je nadograditi %s uslijed neuspješnog preuzimanja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nemoguća nadogradnja na %s: pristup internetu je potreban, ali nije dostupan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nemoguća nadogradnja na %s: nema dovoljno slobodnog diskovnog prostora"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nemoguća nadogradnja na %s: potrebna je ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Nemoguća nadogradnja na %s: pogrešna ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nemoguća nadogradnja na %s: nemate dozvolu za nadogradnju"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nemoguća nadogradnja na %s: potrebno je priključiti napajanje"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Nemoguća nadogradnja na %s: energija baterije je preslaba"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nemoguća nadogradnja na %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Nemoguće je ukloniti %s: potrebna je ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nemoguće je ukloniti %s: pogrešna ovjera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Nemoguće je ukloniti %s: nemate dozvolu za uklanjanje softvera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nemoguće je ukloniti %s: potrebno je priključiti napajanje"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Nemoguće je ukloniti %s: energija baterije je preslaba"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nemoguće je ukloniti %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nemoguće je pokrenuti %s: %s nije instaliran"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Nema dovoljno slobodnog diskovnog prostora — oslobodite nešto prostora i "
+"pokušajte ponovno"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Nažalost, nešto je pošlo po krivu"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Neuspješna instalacija datoteke: nije podržana"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Neuspješna instalacija datoteke: ovjera neuspjela"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Neuspješna instalacija: nije podržano"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Neuspješna instalacija: ovjera neuspjela"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nemoguće je kontaktirati %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+"%s se mora ponovno pokrenuti kako bi se mogao koristiti novi priključak."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Aplikacija se mora ponovno pokrenuti kako bi se mogao koristiti novi "
+"priključak."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Potrebno je priključiti napajanje"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Energija baterije je preslaba"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Repozitorij: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instaliranje)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Uklanjanje)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Ukloni sve"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nema dostupnog opisa nadopune."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalirano %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Instalirane nadopune"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Dodaci"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Uklanjanje"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Nadopune"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Vraćanje starije inačice"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nema instaliranih nadopuna na ovom sustavu."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Sigurnosne nadopune na čekanju"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Preporučljivo je da važne nadopune instalirate odmah"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Ponovno pokreni i instaliraj"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Nadopune softvera su dostupne"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Bitne nadopune operativnog sustava i aplikacija su spremne za instalaciju"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Preglednik"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplikacija je nadopunjena — potrebno je ponovno pokretanje"
+msgstr[1] "%u aplikacije su nadopunjene — potrebno je ponovno pokretanje"
+msgstr[2] "%u aplikacija je nadopunjeno — potrebno je ponovno pokretanje"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplikacija je nadopunjena"
+msgstr[1] "%u aplikacije su nadopunjene"
+msgstr[2] "%u aplikacija je nadopunjeno"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s je nadopunjen."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Ponovno pokrenite aplikaciju."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s i %s su nadopunjeni."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikacija zahtijeva ponovno pokretanje."
+msgstr[1] "%u aplikacije zahtijevju ponovno pokretanje."
+msgstr[2] "%u aplikacija zahtijeva ponovno pokretanje."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Uključuje %s, %s i %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Nadopune operativnog sustava nisu dostupne"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Nadogradi za nastavak preuzimanja sigurnosnih nadopuna."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Nova %s inačica je dostupna za instalaciju"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Dostupna je nadogradnja softvera"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Neuspjelo nadopunjavanje softvera"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Bitna nadopuna operativnog sustava je neuspješno instalirana."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Prikaži pojedinosti"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Nadogradnja sustava završena"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Dobrodošli u %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Softverska nadopuna je instalirana"
+msgstr[1] "Softverske nadopune su instalirane"
+msgstr[2] "Softverske nadopune su instalirane"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Važna nadopuna operativnog sustava je instalirana."
+msgstr[1] "Važne nadopune operativnog sustava su instalirane."
+msgstr[2] "Važne nadopune operativnog sustava su instalirane."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Recenzija"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Neuspjea nadopuna"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sustav ima najnovije nadopune."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Nadopunjivanje je prekinuto."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Potreban je pristup Internetu ali nije dostupan. Pobrinite se da ste "
+"povezani s Internetom i pokušajte ponovno."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Postoji sigurnosni problem s nadopunom. Obratite se svome pružatelju "
+"softvera za više pojedinosti."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Nema dovoljno slobodnog diskovnog prostora. Oslobodite nešto prostora i "
+"pokušajte ponovno."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Nažalost, nadopuna se neuspješno instalirala. Pričekajte drugu nadopunu i "
+"pokušajte ponovno. Ako se problem nastavi, obratite se svome pružatelju "
+"softvera."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Jučer, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Jučer, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "prije dva dana"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "prije tri dana"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "prije četiri dana"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "prije pet dana"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "prije šest dana"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Prije tjedan dana"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "prije dva tjedna"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Pretraživanje novih nadopuna…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Postavljanje nadopuna…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Ovo može potrajati neko vrijeme)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Posljednja provjera: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s više nije podržan(a)."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Vaš operativni sustav više nije podržan."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "To znači da više nećete primati sigurnosne nadopune."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+"Preporučljivo je da vaš operativni sustav nadogradite na najnovije izdanje."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Mogu nastati dodatni novčani troškovi"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Provjeravanje nadopuna korištenjem mobilnog širokopojasnog interneta može "
+"prouzročiti dodatne novčane troškove."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Svejedno _provjeri"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nema pristupa internetu"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Potreban je pristup Internetu za provjeru nadopuna."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Provjeravanje…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Potraži nadopune"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Stranica nadopuna"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Softver je nadopunjen"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Provjeravanje nadopuna korištenjem mobilnog širokopojasnog interneta može "
+"prouzročiti dodatne novčane troškove"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Svejedno provjeri"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Provjerite nadopune putem Interneta"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Mrežne postavke"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Nadopune su automatski upravljane"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Ponovno pokreni i nadopuni"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Nadopuni sve"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Ugrađeni firmver"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Zahtijeva ponovno pokretanje"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Nadopune aplikacija"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmver uređaja"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Preuzmi"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Preporučljivo je da sigurnosno kopirate svoje podatke i datoteke prije "
+"nadogradnje."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Ponovno pokreni odmah"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Nadopune će se primijeniti kada se računalo ponovno pokrene."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s je sada dostupan"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Čekanje preuzimanja %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Preuzimam %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s spremno za instalaciju"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Glavna nadopuna, s novim značajkama i poboljšanjima."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Saznajte više"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Dodaj, ukloni ili nadopuni softver na ovom računalu"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Nadopune;Nadogradnja;Izvori;Repozitoriji;Osobitosti;Instaliraj;Deinstaliraj;"
+"Program;Softver;Aplikacija;Trgovina;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Zvučno stvaralaštvo i uređivanje"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Glazbeni reporoduktori"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Otklanjanje grešaka"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Integrirana razvojna okruženja"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Umjetna inteligencija"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kemija"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Jezici"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Akcija"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Avantura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkada"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokovi"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Društvene igre"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kartaške igre"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatori"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Djeca"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Igranje uloga"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategija"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografija"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skeniranje"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorska grafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Preglednici"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendar"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Baza podataka"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Financije"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Obrada teksta"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Slova"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kôdeki"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Tipkovnički načini unosa"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Jezični paketi"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalizacija"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Upravljački programi"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Razgovor"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Vijesti"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Web preglednici"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Uređivači teksta"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Popularno"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Umjetnost"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Životopis"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Stripovi"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fantastika"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Zdravlje"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Povijest"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Životni stil"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Glazba i video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Alati za razvijatelje"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Edukacija i znanost"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Igre"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika i fotografija"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivnost"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komuniciranje i vijesti"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Preporuke"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Pomagala"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Nadopune operativnog sustava"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"Uključuje poboljšanja performansa, stabilnosti i sigurnosna poboljšanja."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Preuzimanje potrebnih slika…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS nadopuna, s novim značajkama i popravcima."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS usluga nadopune ne može preuzeti i primijeniti nadopunu."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Softver AppStream instalacijski program za cijeli sustav"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Neuspjela obrada argumenta naredbenog redka"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Morate navesti točno jedan naziv datoteke"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Ovaj program može samo koristiti korijenski korisnik"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Neuspjela provjera vrste sadržaja"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Neuspjelo kopiranje"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Preuzimanje dodatnih datoteke metapodataka…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Preuzimanje informacija nadogradnje…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Nadogradite kako bi imali najnovije značajke, performanse i poboljšanja "
+"sustava."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak podrška"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak je radni okvir za aplikacije radne površine na Linuxu"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Dobivanje flatpak metapodataka za %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s nadopuna uređaja"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s nadopuna sustava"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s nadopuna ugrađenog upravljačkog uređaja"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s nadopuna PU"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s nadopuna korporativnog PU"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s nadopuna potrošačkog PU"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s nadopuna upravljačkog uređaja"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s nadopuna Thunderbolt upravljačkog uređaja"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s nadopuna CPU mikrokôda"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s nadopuna podešavanja"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Preuzimanje potpisa nadopune frimvera…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Preuzimanje metapodataka nadopune frimvera…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Podrška za nadogradnju frimvera"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Omogućuje podršku za nadogradnju frimvera"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Preuzimanje ocjena aplikacija…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Otvori podršku ocjene radne površine"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS je usluga koja omogućuje korisničke recenzije aplikacija"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap trgovina"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap podrška"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap je univerzalan Linux paket"
+
+#~ msgid "About %s"
+#~ msgstr "O %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s PU"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Postavke proširenja"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Proširenja koristite na vlastit rizik. Ako imate bilo kakvih problema sa "
+#~ "sustavom, preporučeno je njihovo onemogućavanje."
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Proširenja ljuske"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Repozitorij proširenja GNOME ljuske"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Preuzimanje metapodataka proširenja ljuske…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Proširenja GNOME ljuske"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Prikaži korisničko sučelje upravljanja mapom"
+
+#~ msgid "Folder Name"
+#~ msgstr "Naziv mape"
+
+#~ msgid "_Add"
+#~ msgstr "_Dodaj"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Dodaj u mapu aplikacije"
+
+#~ msgid "Top Rated"
+#~ msgstr "Najpopularnije"
+
+#~ msgid "Failed to load components"
+#~ msgstr "Neuspjelo učitavanje komponenti"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS je prošao provjeru!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Neuspješno učitavanje datoteke"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Nespremljene promjene"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Popis aplikacija je već učitan."
+
+#~ msgid "Merge documents"
+#~ msgstr "Spoji dokumente"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Odbaci promjene"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Otvori AppStream datoteku"
+
+#~ msgid "_Open"
+#~ msgstr "_Otvori"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Spremi AppStream datoteku"
+
+#~ msgid "_Save"
+#~ msgstr "_Spremi"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Neuspješno spremanje datoteke"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s transparent je obrisan."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Transparent je obrisan."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Popis aplikacija ima nespremljene promjene."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Koristi opširnije zapisivanje"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME softver dizajner transparenata"
+
+#~ msgid "No Designs"
+#~ msgstr "Nema dizajna"
+
+#~ msgid "Error message here"
+#~ msgstr "Ovdje poruka greške"
+
+#~ msgid "App ID"
+#~ msgstr "ID aplikacije"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Odabir distribucije"
+
+#~ msgid "Category Featured"
+#~ msgstr "Popularne kategorije"
+
+#~ msgid "Undo"
+#~ msgstr "Vrati"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Dizajner transparenta"
+
+#~ msgid "New Banner"
+#~ msgstr "Novi transparent"
+
+#~ msgid "Import from file"
+#~ msgstr "Uvezi iz datoteke"
+
+#~ msgid "Export to file"
+#~ msgstr "Izvezi u datoteku"
+
+#~ msgid "Delete Design"
+#~ msgstr "Obriši dizajn"
+
+#~ msgid "Featured App"
+#~ msgstr "Popularne aplikacije"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Nadogradnja operativnog sustava"
+
+#~ msgid "Spacing"
+#~ msgstr "Razmak"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Količina razmaka među sadržanim elementima"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Kliknite na stavku za odabir"
+
+#~ msgid "Select"
+#~ msgstr "Odaberi"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Dodaj u mapu…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Premjesti u mapu…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Ukloni iz mape"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Istaknute aplikacije"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Dizajniraj potrebne transparente za GNOME Softver"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Softver;Aplikacija;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Web Apps podrška"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Pokrenite popularne web aplikacije u pregledniku"
+
+#~ msgid "_All"
+#~ msgstr "_Sve"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Prijava / Registracija…"
+
+#~ msgid "Continue"
+#~ msgstr "Nastavi"
+
+#~ msgid "Use"
+#~ msgstr "Koristi"
+
+#~ msgid "Add another…"
+#~ msgstr "_Dodaj drugi…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Sigurno želite kupiti %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s će biti instaliran, i biti će naplaćen %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Kupi"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Prijavljen kao %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Prijava…"
+
+#~ msgid "Sign out"
+#~ msgstr "Odjava"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Nemoguće je kupiti %s: potrebna je ovjera"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Nemoguće je kupiti %s: pogrešna ovjera"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Nemoguće je kupiti %s: nema postavljenog načina plaćanja"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Nemoguće je kupiti %s: plaćanje je odbijeno"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Nemoguća je kupiti %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Za nastavak, potreban vam je račun Ubuntu jednokratne prijave."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr ""
+#~ "Za nastavak, potreban vam je vlastiti račun Ubuntu jednokratne prijave."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Prikaži određene informacije za uslugu"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Za nastavak se morate prijaviti na %s."
+
+#~ msgid "Email address"
+#~ msgstr "Adresa e-pošte"
+
+#~ msgid "I have an account already"
+#~ msgstr "Već posjedujem račun"
+
+#~ msgid "Password"
+#~ msgstr "Lozinka"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Želim registrirati račun odmah"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Zaboravio sam svoju lozinku"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Prijavi se automatski sljedeći put"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Upišite svoj jednokratan pin za dvostruku ovjeru."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Ovjera"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Katalog softvera se učitava"
+
+#~ msgid "_About"
+#~ msgstr "_O programu"
+
+#~ msgid "_Quit"
+#~ msgstr "_Izlaz"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informacije o %s, kao i upute kako nabaviti kôdek koji može reproducirati "
+#~ "ovaj format mogu se pronaći na web stranici."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Instalacija softvera nije moguća sve dok se ovo ne razriješi."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Za više informacija, posjetite %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Nemoguća je nadopuniti %s s %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Preuzimanje novih nadopuna…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Ponovno pokreni i nadopuni"
+
+#~ msgid "U_pdate All"
+#~ msgstr "N_adopuni sve"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Ponovno pokreni i _instaliraj"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Dobivanje izvora komponente izvršavanja…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Preuzimanje nadopune frimvera…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba podrška"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba omogućuje razvijateljima lagan način stvaranja softverskih paketa"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Preuzimanje stranice aplikacije…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam podrška"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Ultimativna platforma za zabavu od Valvea"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Razvrstano po nazivu"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Razvrstano po ocjeni"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Popis dodatnih repozitorija koji su prije omogućeni"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Popis repozitorija koji su prije omogućeni prilikom instalacije "
+#~ "aplikacija treće strane."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Prikaži neslobodni softver u rezultatima pretrage"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Popis neslobodnih repozitorija koji se mogu omogućiti po potrebi"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Igrač-prema-igraču unaprijed postavljena interakcija igre bez mogućnosti "
+#~ "međusobnog razgovora"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Dijeljenje informacija korisnika sa trećom stranom"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Omogućuje pristup dodatnom softveru, uključujući web preglednike i igre."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Omogući vlasničke repozitorije softvera?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Nema instaliranih aplikacija ili dodataka; drugi softver je možda prisutan"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Uobičajeno ima ograničenja korištenja i pristupa izvornom kôdu."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Repozitoriji vlasničkog softvera"
+
+#~ msgid "Remove Source"
+#~ msgstr "Ukloni repozitorij"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Repozitoriji softvera mogu se preuzeti s Interneta. Omogućuju vam pristup "
+#~ "dodatnom softveru koji nije dostupan putem %s repozitorija."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Uklanjanje repozitorija će isto tako ukloniti sav softver koji je "
+#~ "instaliran iz njega."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nema softvera instaliranog iz ovog repozitorija"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalirano iz ovog repozitorija"
+
+#~ msgid "Source Details"
+#~ msgstr "Pojedinosti repozitorija"
+
+#~ msgid "Last Checked"
+#~ msgstr "Posljednja provjera"
+
+#~ msgid "Added"
+#~ msgstr "Dodano"
+
+#~ msgid "Website"
+#~ msgstr "Web stranica"
+
+#~ msgid "page1"
+#~ msgstr "stranica1"
+
+#~ msgid "page2"
+#~ msgstr "stranica2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgid "Total"
+#~ msgstr "Ukupno"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Nemoguće je pronaći '%s'"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instaliraj sve"
+
+#~ msgid "Other Updates"
+#~ msgstr "Ostale nadopune"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "%s instalacija neuspješna."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Uklanjanje %s neuspjelo"
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Pobrinite se da imate pristup internetu i pokušajte ponovno."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Oslobodite nešto diskovnog prostora i pokušajte ponovno."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr ""
+#~ "Ako se problem nastavi, kontaktirajte svojeg softverskog opskrbitelja."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Nepoznata"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Nepoznat"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Nepoznato"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Popularno"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgid "Science"
+#~ msgstr "Znanost"
+
+#~ msgid " or "
+#~ msgstr " ili "
+
+#~ msgid "Open Source"
+#~ msgstr "Otvoreni kôd"
+
+#~ msgid "3rd party"
+#~ msgstr "3 strana"
+
+#~ msgid "web app"
+#~ msgstr "web aplikacija"
+
+#~ msgid "nonfree"
+#~ msgstr "vlasničko"
+
+#~ msgid "_Installing"
+#~ msgstr "_Instalacija"
+
+#~ msgid "_Removing"
+#~ msgstr "_Uklanjanje"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Nepoznata"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Nepoznata"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Nepoznata"
+
+#~ msgid "_History"
+#~ msgstr "_Povijest"
+
+#~ msgid "Size"
+#~ msgstr "Veličina"
+
+#~ msgid "non-free"
+#~ msgstr "neslobodno"
+
+#~ msgid "%i add-on"
+#~ msgid_plural "%i add-ons"
+#~ msgstr[0] "%i dodatak"
+#~ msgstr[1] "%i dodatka"
+#~ msgstr[2] "%i dodatka"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dvije zvjezdice"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tri zvjezdice"
+
+#~ msgid "Four Stars"
+#~ msgstr "Četiri zvjezdice"
+
+#~ msgid "Five Stars"
+#~ msgstr "Pet zvjezdica"
+
+#~ msgid "An error occurred"
+#~ msgstr "Greška se dogodila"
+
+#~ msgid "_Email address:"
+#~ msgstr "_Adresa e-pošte:"
+
+#~ msgid "One-time password:"
+#~ msgstr "Jednostruka lozinka:"
+
+#~ msgid "You are now signed into Ubuntu One."
+#~ msgstr "Sada ste prijavljeni na Ubuntu One."
+
+#~ msgid "Audio"
+#~ msgstr "Zvuk"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Uređivanje"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Baze podataka"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Snimanje diskova"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amaterski radio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Glazba"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Players"
+#~ msgstr "Reproduktori"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Snimači"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Prijemnici"
+
+#~ msgid "Development Tools"
+#~ msgstr "Razvojni alati"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Izgradnja"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Baze podataka"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Oblikovanje"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Razvoj weba"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Chemistry"
+#~ msgstr "Kemija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Računalna znanost"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inženjerstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geography"
+#~ msgstr "Geografija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Povijest"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Obrada slika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Arcade"
+#~ msgstr "Arkada"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Board"
+#~ msgstr "Društvene igre"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Card"
+#~ msgstr "Kartaške igre"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Emulators"
+#~ msgstr "Emulatori"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Role Playing"
+#~ msgstr "Role playing"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulacija"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Strategy"
+#~ msgstr "Strategija"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "3D Graphics"
+#~ msgstr "3D grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Photography"
+#~ msgstr "Fotografija"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Izdavaštvo"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Vector Graphics"
+#~ msgstr "Vektorska grafika"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-pošta"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Prijenos datoteka"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amaterski radio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC klijenti"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "News"
+#~ msgstr "Vijesti"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Udaljeni pristup"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonija"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Video Conference"
+#~ msgstr "Video konferencija"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Browser"
+#~ msgstr "Web preglednik"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Razvoj weba"
+
+#~ msgid "Office"
+#~ msgstr "Ured"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Calendar"
+#~ msgstr "Kalendar"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Database"
+#~ msgstr "Baza podataka"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Rječnik"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-pošta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Finance"
+#~ msgstr "Financije"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografija"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Prezentacija"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Izdavaštvo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Proračunska tablica"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Word Processor"
+#~ msgstr "Obrada teksta"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Računalna znanost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Graditeljstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inženjerstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Povijest"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Obrada slika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Jezici"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mape"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerička analiza"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Usporedno izračunavanje"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Upravitelj datoteka"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Alati za datoteke"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Nadgledanje"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Sigurnost"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulator terminala"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Pristupačnost"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arhiviranje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Kalkulator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Sat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Sažimanje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Alati za datatoteke"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mape"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Alati za telefoniju"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Text Editor"
+#~ msgstr "Obrada teksta"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Uređivanje"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Baza podataka"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Snimanje diskova"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Reproduktori"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Snimači"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Televizija"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Fonts"
+#~ msgstr "Slova"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Codecs"
+#~ msgstr "Kôdeki"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Language Packs"
+#~ msgstr "Jezični paketi"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Proširenja ljuske"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Localization"
+#~ msgstr "Lokalizacija"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Preporučene aplikacije za ured"
+
+#~ msgid "Recommended Audio Applications"
+#~ msgstr "Preporučene aplikacije za zvuk"
+
+#~ msgid "%i add-on installed"
+#~ msgid_plural "%i add-ons installed"
+#~ msgstr[0] "%i dodatak instaliran"
+#~ msgstr[1] "%i dodatka instalirana"
+#~ msgstr[2] "%i dodataka instalirano"
+
+#~ msgid "%i application"
+#~ msgid_plural "%i applications"
+#~ msgstr[0] "%i aplikacija"
+#~ msgstr[1] "%i aplikacije"
+#~ msgstr[2] "%i aplikacija"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Repozitoriji softvera omogućuju vam pristup dodatnom softveru."
+
+#~ msgid "One Star"
+#~ msgstr "Jedna zvjezidca"
+
+#~ msgid "Too many requests"
+#~ msgstr "Previše zahtjeva"
+
+#~ msgid "An update is needed to show all installable apps. Download now?"
+#~ msgstr ""
+#~ "Nadopuna je potrebna za prikaz svih aplikacija koje se mogu instalirati. "
+#~ "Preuzmi odmah?"
+
+#~ msgid "Incorrect email or password"
+#~ msgstr "Neispravna adresa e-pošte ili lozinka"
+
+#~ msgid "Account deactivated"
+#~ msgstr "Račun deaktiviran"
+
+#~ msgid "Email invalidated"
+#~ msgstr "Adresa e-pošte neispravna"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mikser"
+
+#~ msgid "I have an Ubuntu Single Sign-On account"
+#~ msgstr "Posjedujem račun Ubuntu jedinstvene prijave."
+
+#~ msgid ""
+#~ "To rate and review software, you need an Ubuntu Single Sign-On account."
+#~ msgstr ""
+#~ "Za ocjenu i recenziranje softvera, potreban vam je račun Ubuntu "
+#~ "jedinstvene prijave."
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Debuggers"
+#~ msgstr "Otklanjanje grešaka"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Usklađivači"
+
+#~ msgid "I've forgotten my password"
+#~ msgstr "Zaboravio/la sam lozinku"
+
+#~ msgid "Enter your one-time password for two-factor authentication."
+#~ msgstr "Upišite svoju jednostruku lozinku za dvostruku provjeru ovjere."
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Prijevod"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Umjetna inteligencija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Art"
+#~ msgstr "Umjetnost"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Električna energija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Vizualizacija podataka"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Graditeljstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geo-znanost"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Upravljanje projektima"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Usporedno izračunavanje"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Glazba"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mape"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanističke znanosti"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Languages"
+#~ msgstr "Jezici"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerička analiza"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Logic"
+#~ msgstr "Logika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Scanning"
+#~ msgstr "Skeniranje"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Action"
+#~ msgstr "Akcija"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Adventure"
+#~ msgstr "Avantura"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Blocks"
+#~ msgstr "Blokovi"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Pucačina"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Kids"
+#~ msgstr "Djeca"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Viewer"
+#~ msgstr "Preglednici"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Upravljanje kontaktima"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafikon"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Nadgledanje"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Dijagrami toka"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Dlanovnik"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Upravljanje projektima"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Trenutno dopisivanje"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Vizualizacija podataka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Električna energija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geo-znanost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Umjetna inteligencija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Umjetnost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanističke znanosti"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Input Sources"
+#~ msgstr "Ulazni izvori"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rasterska grafika"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Kanali"
+
+#~ msgid "Ubuntu Software"
+#~ msgstr "Ubuntu softver"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "AppStream podaci nisu pronađeni"
+
+#~ msgid ""
+#~ "To install and remove snaps, you need an Ubuntu Single Sign-On account."
+#~ msgstr ""
+#~ "Za instalaciju ili uklanjanje snap paketa, potreban vam je račun Ubuntu "
+#~ "jedinstvene prijave."
+
+#~ msgid "%i application installed"
+#~ msgid_plural "%i applications installed"
+#~ msgstr[0] "%i aplikacija instalirana"
+#~ msgstr[1] "%i aplikacije instalirane"
+#~ msgstr[2] "%i aplikacija instalirano"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Chat"
+#~ msgstr "Razgovor"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Softver dolazi od treće strane."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Ovaj softver dolazi od treće strane i može sadržavati vlasničke "
+#~ "komponente."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Ovaj softver može sadržavati vlasničke komponente."
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..1ba0358
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,4412 @@
+# Hungarian translation for gnome-software.
+# Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnome-software package.
+#
+# Balázs Úr <ur.balazs at fsf dot hu>, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Gabor Kelemen <kelemeng at gnome dot hu>, 2013, 2014, 2015, 2016, 2017, 2018.
+# Balázs Meskó <mesko.balazs at fsf dot hu>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-09-05 23:24+0200\n"
+"Last-Translator: Balázs Úr <ur.balazs at fsf dot hu>\n"
+"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 19.12.3\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Szoftver"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Alkalmazáskezelő a GNOME-hoz"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"A Szoftverek lehetővé teszi új alkalmazások és rendszerkiterjesztések "
+"keresését, telepítését, valamint a meglévő telepített alkalmazások "
+"eltávolítását."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"A GNOME Szoftver bemutatja a kiemelt és népszerű alkalmazásokat, hasznos "
+"leírásokat és alkalmazásonként több képernyőképet is megjelenít. Az "
+"alkalmazások a kategóriák listáinak tallózásával vagy kereséssel találhatók "
+"meg. A program lehetővé teszi a rendszer frissítését kapcsolat nélküli "
+"frissítés használatával is."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Áttekintés panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Részletek panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Telepített panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Frissítések panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "A frissítés részletei"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "A GNOME projekt"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Appstream fájl telepítése egy, a rendszer számára elérhető helyre"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Appstream fájl telepítése egy, a rendszer számára elérhető helyre"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Kompatibilis projektek listája"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ez a megjelenítendő kompatibilis projektek listája, például GNOME, KDE és "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Kezelje-e a frissítéseket és új verziókat a GNOME Szoftverben"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Ha le van tiltva, akkor a GNOME Szoftver elrejti a frissítések panelt, és "
+"nem végez automatikus frissítési műveleteket és nem tesz fel kérdéseket."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Frissítések automatikus letöltése és telepítése"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Ha engedélyezve van, akkor a GNOME Szoftver automatikusan letölti a "
+"szoftverfrissítéseket a háttérben, és telepíti is azokat, amelyek nem "
+"igényelnek újraindítást."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "A felhasználó értesítése, hogy szoftverek frissültek a háttérben"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Ha engedélyezve van, akkor a GNOME Szoftver értesíti a felhasználót azokról "
+"a frissítésekről, amelyek akkor történetek, amikor a felhasználó tétlen volt."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Automatikus legyen-e a keresés, ha forgalomkorlátos kapcsolatot használ"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Ha be van kapcsolva, akkor a GNOME Szoftver automatikusan keres a háttérben, "
+"még akkor is, ha forgalomkorlátos kapcsolatot használ (letölt néhány "
+"metaadatot, frissítéseket keres stb., amely költségeket okozhat a "
+"felhasználónak)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Vajon ez a GNOME Szoftver legelső futása-e"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Csillagos értékelések megjelenítése az alkalmazások mellett"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Az alkalmazások szűrése a távoli tárolóhoz beállított alapértelmezett ág "
+"alapján"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"A nem szabad szoftverekhez figyelmeztető ablak jelenik meg telepítés előtt"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Nem szabad szoftverek telepítése előtt megjeleníthető egy figyelmeztető "
+"ablak. Itt beállítható ennek megjelenése."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Népszerű alkalmazások listája"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Használandó alkalmazások listája, a rendszer által definiáltak "
+"felülbírálására."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Utolsó frissítéskeresés időbélyege"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Az utolsó frissítés értesítésének időbélyege"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Az első biztonsági frissítés időbélyege, a frissítés után törlődik"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Utolsó frissítés időbélyege"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Az utolsó időbélyeg, amikor a rendszer kapcsolatban volt és frissítéseket "
+"kapott"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"A kor másodpercben, annak megállapítására, hogy a képernyőkép még érvényes-e"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"A nagyobb érték kevesebb fordulót jelent a távoli kiszolgálóhoz, de a "
+"frissített képernyőképek később jelennek meg a felhasználónál. A 0 érték azt "
+"jelenti, hogy sosem ellenőrzi a kiszolgálót, ha már létezik kép a "
+"gyorsítótárban."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Az alkalmazásértékelésekhez használandó kiszolgáló"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "A vélemények minimális karma pontszáma"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Az ennél alacsonyabb karmájú vélemények nem jelennek meg."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Azon hivatalos tárolók listája, amelyeket nem szabad harmadik féltől "
+"származónak tekinteni"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Azon hivatalos tárolók listája, amelyeket szabad szoftvernek kell tekinteni"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"A használandó licenc URL, ha az alkalmazást szabad szoftvernek kell tekinteni"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Csomagolt alkalmazások telepítése az összes felhasználónak a rendszeren, "
+"ahol csak lehetséges"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Hozzáférés engedélyezése a Szoftvertárolók párbeszédablakhoz"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Frissítések ajánlása előzetes kiadásokhoz"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Néhány felhasználói felületelem megjelenítése a felhasználó tájékoztatására, "
+"hogy egy alkalmazás nem szabad"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Kérdés megjelenítése a nem szabad szoftvertárolók telepítéséhez"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Az alkalmazások telepített méretének megjelenítése a telepített alkalmazások "
+"listájában"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+"'https://hu.wikipedia.org/wiki/Z%C3%A1rt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Az URI, amely elmagyarázza a nem szabad és a tulajdonosi szoftvereket"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"URL-ek listája, amelyek azokra az appstream fájlokra mutatnak, amelyek "
+"letöltésre kerülnek egy app-info mappába"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Az AppStream fájlok telepítése rendszerszinten elérhető helyre, az összes "
+"felhasználó számára"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "GNOME Shell kiterjesztések tárolójának engedélyezése"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Egy karakterlánc, amely a bejelentkezéshez használt gnome-online-account "
+"azonosítót tárolja"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Szoftvertelepítő"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "A kijelölt szoftverek telepítése a rendszerre"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Összes kijelölése"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Kijelölés törlése"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "S_zoftvertárolók"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Beállítások _frissítése"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Szoftver"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Vissza"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Felfedezés"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Telepítve"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Frissítések"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Keresés"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Forrás"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Szoftvertárolók"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Lemez vizsgálata"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Hálózati beállítások"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Újraindítás most"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "További információk"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatikus frissítések szüneteltetve"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Tudjon meg _többet"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Helyi fájl"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Csomag"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Függőben"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Telepítve"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Telepítés"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Eltávolítás"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Indítási mód: az „updates” (frissítések), „updated” (frissítve), "
+"„installed” (telepített) vagy „overview” (áttekintés) egyike"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MÓD"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Alkalmazások keresése"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "KERESÉS"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Alkalmazásadatok megjelenítése (alkalmazásazonosító használata)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "AZONOSÍTÓ"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Alkalmazásadatok megjelenítése (csomagnév használata)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "CSOMAGNÉV"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Alkalmazás telepítése (alkalmazásazonosító használata)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Egy helyi csomagfájl megnyitása"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FÁJLNÉV"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"A művelettől várt interakció típusa: a „none” (nincs), „notify” (értesítés) "
+"vagy „full” (teljes) egyike"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Részletes hibakeresési információk megjelenítése"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Telepíti az összes függőben lévő frissítést a háttérben"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Frissítési beállítások megjelenítése"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Kilépés a futó példányból"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Helyi fájlforrások előnyben részesítése az alkalmazáshoz"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Verziószám megjelenítése"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Kelemen Gábor <kelemeng at gnome dot hu>\n"
+"Úr Balázs <ur dot balazs at fsf dot hu>\n"
+"Meskó Balázs <mesko dot balazs at fsf dot hu>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+#| msgid "Software"
+msgid "About Software"
+msgstr "A Szoftver névjegye"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "A rendszerén található szoftverek kezelése elegánsan."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Elnézést, nincsenek részletek ahhoz az alkalmazáshoz."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Honlap felkeresése"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Telepítés…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Mégse"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Telepítés"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Frissítés"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Eltávolítás"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Az eszköz nem használható frissítés közben."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "További jogosultságokat igényel"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Bejelentkezés szükséges távoli %s (tartomány: %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Bejelentkezés szükséges"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "Mé_gse"
+
+#: src/gs-basic-auth-dialog.ui:39
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "_Bejelentkezés"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Felhasználó"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Jelszó"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Egyéb"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Mind"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Kiemelt"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Kiemelt: %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Értékelés"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Név"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Megjelenítés"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Alkategóriák szűrése menü"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Rendezés"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Alkategóriák rendezése menü"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Adjon meg egy számot 1 és %u között: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Válasszon alkalmazást:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Az operációs rendszer frissítései telepítve"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "A nemrég telepített frissítések megtekinthetőek"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s telepítve lett"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "A változtatások érvénybe léptetéséhez újraindítás szükséges."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Az alkalmazás használatra kész."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Újraindítás"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Indítás"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Telepíti a harmadik féltől származó szoftvereket?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Engedélyezi a harmadik féltől származó szoftvertárolót?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"A(z) %s nem <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">szabad és nyílt forrású szoftver</a>, és a következő "
+"biztosítja: „%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "A(z) %s alkalmazást ez biztosítja: „%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Ezt a szoftvertárolót engedélyezni kell a telepítés folytatásához."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Néhány országban szabálytalan lehet a(z) %s alkalmazás telepítése vagy "
+"használata."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Néhány országban szabálytalan lehet ezen kodek telepítése vagy használata."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Ne figyelmeztessen többé"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Engedélyezés és telepítés"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "A részletes hibaüzenetek a következők voltak a csomagkezelőtől:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Részletek"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Egy frissítés lett telepítve"
+msgstr[1] "Frissítések lettek telepítve"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Újraindítás szükséges a változtatás érvénybe léptetéséhez."
+msgstr[1] "Újraindítás szükséges a változtatások érvénybe léptetéséhez."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Most nem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Nincs rajzfilmes erőszak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Rajzfilmfigurák veszélyes helyzetekben"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Rajzfilmfigurák agresszív konfliktusban"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Rajzfilmfigurákat érintő grafikus erőszak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Nincs kitalált erőszak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Karakterek veszélyes helyzetekben, amely könnyen megkülönböztethető a "
+"valóságtól"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Karakterek agresszív konfliktusban, amely könnyen megkülönböztethető a "
+"valóságtól"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafikus erőszak, amely könnyen megkülönböztethető a valóságtól"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Nincs valósághű erőszak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Enyhén valósághű karakterek veszélyes helyzetekben"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Valósághű karakterek ábrázolása agresszív konfliktusban"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Valósághű karaktereket érintő grafikus erőszak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Nincs vérontás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Nem valósághű vérontás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Valósághű vérontás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Várontás és a testrészek megcsonkításának ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Nincs szexuális erőszak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Megerőszakolás vagy egyéb erőszakos szexuális viselkedés"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Nincs alkoholtartalmú italokra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Alkoholtartalmú italokra való hivatkozások"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Alkoholtartalmú italok használata"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Nincs tiltott kábítószerekre való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Tiltott kábítószerekre való hivatkozások"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Tiltott kábítószerek használata"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Nincs dohánytermékekre való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Dohánytermékekre való hivatkozások"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Dohánytermékek használata"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Nincs semmiféle meztelenség"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Rövid művészi meztelenség"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Hosszan tartó meztelenség"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Nincs szexuális természetű hivatkozás vagy annak ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Kihívó hivatkozások vagy ábrázolások"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Szexuális hivatkozások vagy ábrázolások"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafikus szexuális viselkedés"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Nincs káromkodás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Enyhe vagy ritka káromkodáshasználat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Mérsékelt káromkodáshasználat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Erős vagy gyakori káromkodáshasználat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Nincs helytelen humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Helyzethumor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgáris vagy fürdőszoba humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Felnőtt vagy szexuális humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Nincs semmiféle diszkriminatív nyelvezet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatívság egy bizonyos embercsoport felé"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Érzelmi károsodást okozó tervezett diszkrimináció"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Kifejezetten nemi, szexuális, faji vagy vallási alapú diszkrimináció"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Nincs semmiféle hirdetés"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Termékelhelyezés"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Közvetlen utalások egy bizonyos márkára vagy védjeggyel védett termékre"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"A felhasználókat arra ösztönzik, hogy a valódi világban bizonyos tárgyakat "
+"vásároljanak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Nincs semmiféle szerencsejáték"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+"Szerencsejáték véletlenszerű eseményeken zsetonok vagy kreditek használatával"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Szerencsejáték „játékpénz” használatával"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Szerencsejáték valódi pénz használatával"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Nem lehet valódi pénzt elkölteni"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "A felhasználókat arra ösztönzik, hogy valós pénzt adományozzanak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Lehetőség az alkalmazáson belül valódi pénzt elkölteni"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Nincs mód a csevegésre más felhasználókkal"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Felhasználók közötti interakciók, csevegés funkcionalitás nélkül"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderált csevegés funkcionalitás a felhasználók között"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Ellenőrizetlen csevegés funkcionalitás a felhasználók között"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Nincs mód a beszélgetésre más felhasználókkal"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+"Ellenőrizetlen hang- vagy videocsevegés funkcionalitás a felhasználók között"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Nincs közösségi hálózatokon használt felhasználónevek vagy e-mail címek "
+"megosztása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Közösségi hálózatokon használt felhasználónevek vagy e-mail címek megosztása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Nincs felhasználói információk megosztása harmadik féllel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "A legfrissebb alkalmazásverzió ellenőrzése"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Diagnosztikai adatok megosztása, amelyek mások számára nem azonosítják a "
+"felhasználót"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Információk megosztása, amelyek mások számára azonosítják a felhasználót"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Nincs fizikai hely megosztása más felhasználók számára"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Fizikai hely megosztása más felhasználók számára"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Nincs homoszexualitásra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Közvetett homoszexualitásra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Csókolózás azonos nemű emberek között"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafikus szexuális viselkedés azonos nemű emberek között"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Nincs prostitúcióra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Közvetett prostitúcióra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Közvetlen prostitúcióra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Prostitúció grafikus ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Nincs házasságtörésre való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Közvetett házasságtörésre való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Közvetlen házasságtörésre való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Házasságtörés grafikus ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Nincsenek szexualizált karakterek"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Hiányosan öltözött emberi karakterek"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Nyíltan szexualizált emberi karakterek"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Nincs gyalázásra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Gyalázás történelmi ábrázolása vagy arra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Modern kori emberi gyalázás ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Modern kori emberi gyalázás grafikus ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Nincsenek látható emberi maradványok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Látható emberi maradványok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Emberi maradványok, kitéve az időjárási viszonyoknak"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Emberi testek gyalázásának grafikus ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Nincs rabszolgaságra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Rabszolgaság történelmi ábrázolása vagy arra való hivatkozás"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Modern kori rabszolgaság ábrázolása"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Modern kori rabszolgaság grafikus ábrázolása"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Általános"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ÖSSZES"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Csak felnőtt"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Érett"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Tizenéves"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Mindenki 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Mindenki"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Fiatal gyermekkor"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Egy alkalmazás"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "A(z) %s további fájlformátum támogatást kér."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "További MIME-típusok szükségesek"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "A(z) %s további betűkészleteket kér."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "További betűkészletek szükségesek"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "A(z) %s további multimédia kodekeket kér."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "További multimédia kodekek szükségesek"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "A(z) %s további nyomtató illesztőprogramokat kér."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "További nyomtató illesztőprogramok szükségesek"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "A(z) %s további csomagokat kér."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "További csomagok szükségesek"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Keresés a Szoftverben"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Eltávolítás…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Függőben lévő telepítés…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Függőben lévő frissítés…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "Előkészítés…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Ez az alkalmazás csak akkor használható, ha van aktív internet-kapcsolat."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Telepítés"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Telepítés…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "I_ndítás"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Eltávolítás"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Hálózat"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Kommunikálhat a hálózaton keresztül"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Rendszerszolgáltatások"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Hozzáférhet a D-Bus szolgáltatásokhoz a rendszerbuszon"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Munkamenet-szolgáltatások"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Hozzáférhet a D-Bus szolgáltatásokhoz a munkamenetbuszon"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Eszközök"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Hozzáférhet a rendszereszköz fájljaihoz"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Saját mappa"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Megtekinthet, szerkeszthet és létrehozhat fájlokat"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Megtekinthet fájlokat"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Fájlrendszer"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Letöltések mappa"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Beállítások"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Megtekinthet és megváltoztathat bármilyen beállítást"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Örökölt megjelenítési rendszer"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Egy régi, nem biztonságos megjelenítési rendszert használ"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Biztonságos környezet elhagyása"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+"Elhagyhatja a biztonságos környezetet és megkerülhet bármilyen korlátozást"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Ez az alkalmazás teljesen biztonságos."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nem lehet meghatározni, hogy az alkalmazás a rendszer mely részeihez fér "
+"hozzá. Ez jellemző a régebbi alkalmazásoknál."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Soha"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Alacsony"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Közepes"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Magas"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Értékelés írásához internetelérés szükséges"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nem található: „%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Közkincs"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://hu.wikipedia.org/wiki/K%C3%B6zkincs"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.hu.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Szabad szoftver"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "A felhasználót a következő licenc köti:"
+msgstr[1] "A felhasználót a következő licencek kötik:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "További információk"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Részletek oldal"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Letöltés"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Frissítés"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Parancsikon hozzá_adása"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Parancsikon el_távolítása"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nincs képernyőkép megadva"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Szoftvertárolót tartalmaz"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ez az alkalmazás szoftvertárolót tartalmaz, amely frissítéseket és más "
+"szoftverekhez való hozzáférést biztosít."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Nem tartalmaz szoftvertárolót"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ez az alkalmazás nem tartalmaz szoftvertárolót. Nem lesz új verziókkal "
+"frissítve."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Ezt a szoftvert a disztribúciója már biztosítja, és nem szabad lecserélni."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Szoftvertároló azonosítva"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Ezen szoftvertároló hozzáadása hozzáférést biztosít további szoftverekhez és "
+"frissítésekhez."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Csak olyan szoftvertárolókat használjon, amelyekben megbízik."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Webhely"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Adományozás"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Honosítva az ön nyelvén"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentáció"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Kiadási tevékenység"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Rendszer-integráció"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Biztonságos"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Csatorna"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Verzió"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Korhatár-besorolás"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Jogosultságok"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Frissítve"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategória"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Telepített méret"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Letöltési méret"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Fejlesztő"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licenc"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Szabad"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Tulajdonosi"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Kiegészítők"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "A kijelölt kiegészítők telepítve lesznek az alkalmazással."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Vélemények"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Í_rjon véleményt"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Több"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Ez azt jelenti, hogy a szoftver szabadon futtatható, másolható, "
+"terjeszthető, tanulmányozható és módosítható."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Tulajdonosi szoftver"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Ez azt jelenti, hogy a szoftver egy személy vagy egy vállalt tulajdonában "
+"van. Gyakran megkötések vannak a használatára, és a forráskódja általában "
+"nem hozzáférhető."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Ismeretlen szoftverlicenc"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Ennek a szoftvernek a licencfeltételei ismeretlenek."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+"Az alkalmazás azért lett így besorolva, mert a következőket tartalmazza:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Nem érhetőek el részletek ehhez a besoroláshoz."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " és "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Elérhető betűkészletek a(z) %s írásrendszerhez"
+msgstr[1] "Elérhető betűkészletek a(z) %s írásrendszerekhez"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Elérhető szoftverek ehhez: %s"
+msgstr[1] "Elérhető szoftverek ehhez: %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nem találhatók a kért szoftverek"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "„%s” nem található"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "ezen a weblapon"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nem érhetők el alkalmazások, amelyek ezt a fájlt szolgáltatják: %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Információk a(z) %s kodekről, valamint a hiányzó alkalmazások beszerzésének "
+"lehetőségei %s találhatók."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nem érhetők el alkalmazások a következő támogatásához: %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s nem érhető el."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Információk a(z) %s kodekről, valamint a formátumot támogató alkalmazások "
+"beszerzésének lehetőségei %s találhatók."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+"Nem érhetők el betűkészletek a következő írásrendszer támogatásához: %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Információk a(z) %s kodekről, valamint további betűkészletek beszerzésének "
+"lehetőségei %s találhatók."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Nem érhetők el kiegészítő kodekek ehhez a formátumhoz: %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Információk a(z) %s kodekről, valamint a formátumot lejátszani képes kodek "
+"beszerzésének lehetőségei %s találhatók."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nem érhetők el Plasma erőforrások a következő támogatásához: %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Információk a(z) %s kodekről, valamint további Plasma erőforrások "
+"beszerzésének lehetőségei %s találhatók."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nem érhetők el nyomtató illesztőprogramok ehhez: %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Információk a(z) %s kodekről, valamint a nyomtatót támogató illesztőprogram "
+"beszerzésének lehetőségei %s találhatók."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "ezt a weboldalt"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Sajnos a keresett %s kodek nem található. További információkért tekintse "
+"meg %s."
+msgstr[1] ""
+"Sajnos a keresett %s kodek nem található. További információkért tekintse "
+"meg %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Nem sikerült megtalálni semmilyen keresési eredményt"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s fájlformátum"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kodekek oldal"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Üdvözöljük"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Üdvözli a Szoftver"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"A Szoftver lehetővé teszi az összes szükséges szoftver telepítését egyetlen "
+"helyről. Nézze meg a javaslatainkat, böngésszen a kategóriákban, vagy "
+"keresse meg a kívánt alkalmazást."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Gyerünk vásárolni"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Eltávolítva"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Telepítve"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Frissítve"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y. %B %-e."
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Előzmények"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Rendszeralkalmazások"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Telepítettek oldal"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "A szoftverkatalógus letöltésre kerül"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Betöltési oldal"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Indítás…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"A jelenlegi hálózat forgalomdíjas. A forgalomdíjas kapcsolatok adatkorláttal "
+"rendelkeznek vagy folyamatos költségeket számítanak fel. Az adatmennyiséggel "
+"spórolás érdekében a frissítések szüneteltetve lettek.\n"
+"\n"
+"Az automatikus frissítések akkor lesznek folytatva, ha elérhetővé válik egy "
+"nem forgalomdíjas hálózat. Addig is, kézzel továbbra is telepíthet "
+"frissítéseket.\n"
+"\n"
+"Egyéb esetben, ha a jelenlegi hálózat hibásan lett forgalomdíjasként "
+"azonosítva, akkor a beállítás módosítható."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Hálózati _beállítások megnyitása"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderálás oldal"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Nincs több moderálandó vélemény"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "rendszer"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "felhasználó"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ág"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formátum"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Telepítés"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Több…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Javasolt hang- és videoalkalmazások"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Javasolt játékok"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Javasolt grafikai alkalmazások"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Javasolt irodai alkalmazások"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Hozzáférés további szoftverekhez a kiválasztott harmadik féltől származó "
+"forrásokból."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Néhány szoftver tulajdonosi szoftver, és ezért megkötéseik vannak a "
+"használatra és a forráskódhoz való hozzáférésre vonatkozóan."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Tudjon meg többet…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Engedélyezés"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Áttekintés oldal"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Engedélyezi a harmadik féltől származó szoftvertárolókat?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Előző"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Következő"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "A szerkesztő választása"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Friss kiadások"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategóriák"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nem találhatók alkalmazásadatok"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s előkészítése"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Biztosan el szeretné távolítani a(z) %s tárolót?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Az összes alkalmazás el lesz távolítva a(z) %s tárolóból, és újra kell majd "
+"telepítenie a tárolót, hogy ismét használhassa."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Biztos, hogy el akarja távolítani a következőt: „%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s eltávolításra kerül, és telepíteni kell a jövőbeli használatához."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (telepítve)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Beállítások frissítése"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatikus frissítések"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Az automatikus frissítések le vannak tiltva, ha mobil vagy forgalomkorlátos "
+"kapcsolatokat használ."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Automatikus frissítés értesítései"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Értesítések megjelenítése, amikor a frissítések automatikusan telepítve "
+"lettek."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Néhány jelenleg telepített szoftver nem összeférhető ezzel: %s. Ha "
+"folytatja, akkor a frissítés során automatikusan el lesz távolítva a "
+"következő:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Összeférhetetlen szoftverek"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Folytatás"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u alkalmazás telepítve"
+msgstr[1] "%u alkalmazás telepítve"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u kiegészítő telepítve"
+msgstr[1] "%u kiegészítő telepítve"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u alkalmazás"
+msgstr[1] "%u alkalmazás"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u kiegészítő"
+msgstr[1] "%u kiegészítő"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s és %s telepítve"
+msgstr[1] "%s és %s telepítve"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Eltávolítja ezt: „%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Letiltja ezt: „%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Az ebből a tárolóból telepített szoftverek nem fognak további frissítéseket "
+"kapni, a biztonsági frissítéseket is beleértve."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Letiltás"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "az operációs rendszer"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Ezek a tárolók kiegészítik a(z) %s által biztosított alapértelmezett "
+"szoftvereket."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Harmadik féltől származó tárolók"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nincsenek további tárolók"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Engedélyezés"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "El_távolítás…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Letiltás…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Engedélyezés"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Letiltás"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Engedélyezve"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Letiltva"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Utálom"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Nem kedvelem"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Rendben van"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Kedvelem"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Imádom"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Töltsön több időt véleménye megírásával"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Válasszon egy csillagos értékelést"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Az összegzés túl rövid"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Az összegzés túl hosszú"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "A leírás túl rövid"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "A leírás túl hosszú"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Vélemény közzététele"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Közzététel"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Összegzés"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Adja meg a véleménye rövid összegzését, például: „Nagyszerű alkalmazás, "
+"ajánlanám”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Vélemény"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Mit gondol az alkalmazásról? Próbálja megindokolni véleményét."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Keresse meg az <a href=\"https://odrs.gnome.org/privacy\">adatvédelmi "
+"irányelveinkben</a>, hogy mely adatok lettek elküldve."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "értékelés összesen"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Bejelentheti a zaklató, nyers vagy diszkriminatív szöveget tartalmazó "
+"véleményeket."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"A bejelentés után a vélemény elrejtésre kerül, amíg egy adminisztrátor nem "
+"ellenőrzi."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Jelenti a véleményt?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Jelentés"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Hasznos volt ez a vélemény?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Igen"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nem"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Nem igazán"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Jelentés…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Eltávolítás…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Nem található képernyőkép"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "A kép betöltése meghiúsult"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "A képernyőkép mérete nem található"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nem lehet létrehozni a gyorsítótárat"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "A képernyőkép nem érvényes"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "A képernyőkép nem érhető el"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Képernyőkép"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u további találat"
+msgstr[1] "%u további találat"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Keresés az oldalon"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nem található alkalmazás"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "A firmware frissítések nem tölthetőek le innen: %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "A frissítések nem tölthetőek le innen: %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "A frissítések nem tölthetőek le"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"A frissítések nem tölthetőek le: internet-hozzáférés szükséges, de nem "
+"érhető el"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "A frissítések nem tölthetőek le innen: %s, nincs elég lemezterület"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "A frissítések nem tölthetőek le: nincs elég lemezterület"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "A frissítések nem tölthetőek le: hitelesítés szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "A frissítések nem tölthetőek le: a hitelesítés érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "A frissítések nem tölthetőek le: nincs joga szoftvereket telepíteni"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "A frissítések listája nem kérhető le"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "A(z) %s nem telepíthető, mert a letöltés meghiúsult innen: %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "A(z) %s nem telepíthető, mert a letöltés meghiúsult"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "A(z) %s nem telepíthető, mert a(z) %s futtatókörnyezet nem érhető el"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "A(z) %s nem telepíthető, mert nem támogatott"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Nem telepíthető: internet-hozzáférés szükséges, de nem érhető el"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nem telepíthető: az alkalmazás formátuma érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "A(z) %s nem telepíthető: nincs elég lemezterület"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "A(z) %s nem telepíthető: hitelesítés szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "A(z) %s nem telepíthető: a hitelesítés érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "A(z) %s nem telepíthető: nincs joga szoftvereket telepíteni"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "A(z) %s nem telepíthető: elektromos hálózat szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "A(z) %s nem telepíthető: az akkumulátorszint túl alacsony"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "A(z) %s nem telepíthető"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "A(z) %s nem frissíthető %s használatakor, mert a letöltés meghiúsult"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "A(z) %s nem frissíthető, mert a letöltés meghiúsult"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Nem lehet telepíteni a frissítéseket %s használatakor, mert a letöltés "
+"meghiúsult"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nem lehet telepíteni a frissítéseket, mert a letöltés meghiúsult"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Nem lehet frissíteni: internetelérés szükséges, de nem érhető el"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "A(z) %s nem frissíthető: nincs elég lemezterület"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nem lehet telepíteni a frissítéseket: nincs elég szabad hely"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "A(z) %s nem frissíthető: hitelesítés szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nem lehet telepíteni a frissítéseket: hitelesítés szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "A(z) %s nem frissíthető: a hitelesítés érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Nem lehet telepíteni a frissítéseket: a hitelesítés érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "A(z) %s nem frissíthető: nincs joga szoftvereket frissíteni"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nem lehet telepíteni a frissítéseket: nincs joga szoftvereket frissíteni"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "A(z) %s nem frissíthető: elektromos hálózat szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nem lehet telepíteni a frissítéseket: elektromos hálózat szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "A(z) %s nem frissíthető: az akkumulátorszint túl alacsony"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Nem lehet telepíteni a frissítéseket: az akkumulátorszint túl alacsony"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "A(z) %s nem frissíthető"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nem lehet telepíteni a frissítéseket"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nem lehet frissíteni erre: %s, erről: %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nem lehet frissíteni erre: %s, mert a letöltés meghiúsult"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nem lehet frissíteni erre: %s: internet-hozzáférés szükséges, de nem érhető "
+"el"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nem lehet frissíteni erre: %s, nincs elég lemezterület"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nem lehet frissíteni erre: %s, hitelesítés szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Nem lehet frissíteni erre: %s, a hitelesítés érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nem lehet frissíteni erre: %s, nincs joga frissíteni"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nem lehet frissíteni erre: %s, elektromos hálózat szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Nem lehet frissíteni erre: %s, az akkumulátorszint túl alacsony"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nem lehet frissíteni erre: %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "A(z) %s nem távolítható el: hitelesítés szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "A(z) %s nem távolítható el: a hitelesítés érvénytelen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "A(z) %s nem távolítható el: nincs joga szoftvereket eltávolítani"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "A(z) %s nem távolítható el: elektromos hálózat szükséges"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "A(z) %s nem távolítható el: az akkumulátorszint túl alacsony"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "A(z) %s nem távolítható el"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "A(z) %s nem indítható el: a(z) %s nincs telepítve"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Nincs elég lemezterület – szabadítson fel egy kis helyet, és próbálja újra"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Elnézést, hiba történt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Nem sikerült telepíteni a fájlt: nem támogatott"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Nem sikerült telepíteni a fájlt: a hitelesítés sikertelen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Nem sikerült telepíteni: nem támogatott"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Nem sikerült telepíteni: a hitelesítés sikertelen"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nem vehető fel a kapcsolat ezzel: %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "A(z) %s újraindítása szükséges az új bővítmények használatához."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Az alkalmazás újraindítása szükséges az új bővítmények használatához."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Elektromos hálózat szükséges"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Az akkumulátorszint túl alacsony"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Forrás: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (telepítés)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (eltávolítás)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Ö_sszes eltávolítása"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nem áll rendelkezésre frissítési leírás."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Telepítve ekkor: %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Telepített frissítések"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Telepítendők"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Eltávolítandók"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Frissítendők"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Visszafejlesztendők"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nem lettek frissítések telepítve erre a rendszerre."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Biztonsági frissítések függőben"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Ajánlott a fontos frissítéseket most telepíteni"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Újraindítás és telepítés"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Szoftverfrissítések érhetők el"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Fontos rendszer- és alkalmazásfrissítések állnak készen telepítésre"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Megjelenítés"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u alkalmazás frissítve — újraindítás szükséges"
+msgstr[1] "%u alkalmazás frissítve — újraindítás szükséges"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u alkalmazás frissítve"
+msgstr[1] "%u alkalmazás frissítve"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "A(z) %s frissítve lett."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Indítsa újra az alkalmazást."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "A(z) %s és a(z) %s frissítve lett."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u alkalmazás újraindítást igényel."
+msgstr[1] "%u alkalmazás újraindítást igényel."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Tartalmazza a következőket: %s, %s és %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Nem érhetők el operációs rendszer frissítések"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Frissítse rendszerét, hogy továbbra is kaphasson biztonsági frissítéseket."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "A(z) %s egy új verziója érhető el telepítésre"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Disztribúciófrissítés érhető el"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "A szoftverfrissítések meghiúsultak"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Fontos rendszerfrissítés telepítése hiúsult meg."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Részletek megjelenítése"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Rendszerfrissítés kész"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Üdvözli a(z) %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Szoftverfrissítés telepítve"
+msgstr[1] "Szoftverfrissítések telepítve"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Fontos rendszerfrissítés lett telepítve."
+msgstr[1] "Fontos rendszerfrissítések lettek telepítve."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Vélemény"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "A frissítés meghiúsult"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "A rendszer már naprakész volt."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "A frissítés megszakítva."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internet-hozzáférés volt szükséges, de nem volt elérhető. Győződjön meg "
+"arról, hogy van internet-hozzáférése, és próbálja újra."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Biztonsági problémák voltak a frissítéssel. Kérjen tanácsot a "
+"szoftverszolgáltatójától a további részletekért."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Nem volt elég lemezterület. Szabadítson fel egy kis helyet, és próbálja újra."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Sajnáljuk: a frissítés telepítése nem sikerült. Várjon egy másik frissítést, "
+"és próbálja újra. Ha a probléma továbbra is fennáll, akkor lépjen "
+"kapcsolatba a szoftverszolgáltatójával."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%H:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Tegnap %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Tegnap %H:%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Két nappal ezelőtt"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Három nappal ezelőtt"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Négy nappal ezelőtt"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Öt nappal ezelőtt"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Hat nappal ezelőtt"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Egy héttel ezelőtt"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Két héttel ezelőtt"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Új frissítések keresése…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Frissítések beállítása…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Ez eltarthat egy ideig)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Utolsó ellenőrzés: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "A(z) %s %s már nem támogatott."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Az operációs rendszere már nem támogatott."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Ez azt jelenti, hogy nem fog biztonsági frissítéseket kapni."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Ajánlott, hogy frissítsen egy frissebb verzióra."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Költségek merülhetnek fel"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Frissítések keresése mobil széles sáv használatakor költségek "
+"kiszámlázásához vezethet."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Keresés _mindenképp"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nincs hálózat"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "A frissítések kereséséhez internetkapcsolat szükséges."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Ellenőrzés…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Frissítések keresése"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Frissítések oldal"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "A szoftverek naprakészek"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Frissítések keresése mobil széles sáv használatakor költségek "
+"kiszámlázásához vezethet"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Keresés mindenképp"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Frissítések kereséséhez csatlakozzon"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Hálózat beállításai"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "A frissítések automatikusan kezelve vannak"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Újraindítás és frissítés"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Összes frissítése"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Beépített firmware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Újraindítás szükséges"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Alkalmazásfrissítések"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Eszköz firmware"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Letöltés"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Ajánlott az adatainak és fájljainak mentése a frissítés előtt."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Újra_indítás most"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "A frissítések akkor lesznek alkalmazva, ha a számítógép újraindul."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s most már elérhető"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Várakozás a(z) %s %s letöltésére"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Letöltés: %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s és %s telepítésre kész"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Jelentős frissítés, új funkciókkal és felületi újításokkal."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_További tudnivalók"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Szoftver hozzáadása, eltávolítása vagy frissítése ezen a számítógépen"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Frissítések;Frissítés;Források;Tárolók;Beállítások;Telepítés;Eltávolítás;"
+"Program;Szoftver;Alkalmazás;Bolt;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Zeneszerkesztés"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Zenelejátszók"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Hibakeresők"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE-k"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Mesterséges intelligencia"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Csillagászat"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kémia"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Nyelvek"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Akció"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Kaland"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Ügyességi"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Kockák"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tábla"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kártya"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulátorok"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Gyerekjátékok"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logikai"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Szerepjátékok"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Stratégia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fényképészet"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Lapolvasás"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Megjelenítők"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Naptár"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Adatbázis"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Pénzügyek"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Szövegszerkesztő"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Betűkészletek"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodekek"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Beviteli források"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Nyelvi csomagok"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Honosítás"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardver illesztőprogramok"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Csevegés"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Hírolvasó"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webböngészők"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Szövegszerkesztők"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Összes"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Kiemelt"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Művészet"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Életrajz"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Képregény"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Kitalált"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Egészség"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Történelem"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Életstílus"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Hang és videó"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Fejlesztőeszközök"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Oktatás és tudomány"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Játékok"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika és fényképészet"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Iroda"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Kommunikáció és hírek"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Hivatkozás"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Segédprogramok"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Operációs rendszer frissítések"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Teljesítménybeli, stabilitási és biztonsági javításokat tartalmaz."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Kiemelt képek letöltése…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Egy Endless OS frissítés új funkciókkal és javításokkal."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Az EOS frissítési szolgáltatás nem tudta letölteni és alkalmazni a "
+"frissítést."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Szoftver – AppStream rendszerszintű telepítő"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "A parancssori argumentumok feldolgozása meghiúsult"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Pontosan egy fájlnevet kell megadnia"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Ezt a programot csak a root felhasználó használhatja"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "A tartalomtípus érvényesítése meghiúsult"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "A másolás meghiúsult"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Extra metaadatfájlok letöltése…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Frissítési információk letöltése…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Frissítés a legújabb funkciókért, teljesítmény és stabilitási javításokért."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak támogatás"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "A Flatpak egy keretrendszer Linuxos asztali alkalmazásokhoz"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Flatpak metaadatok lekérése ehhez: %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+#| msgid "%s Device"
+msgid "%s Device Update"
+msgstr "%s eszköz frissítés"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+#| msgid "%s System"
+msgid "%s System Update"
+msgstr "%s rendszer frissítés"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+#| msgid "%s Embedded Controller"
+msgid "%s Embedded Controller Update"
+msgstr "%s beágyazott vezérlő frissítés"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "%s ME frissítés"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+#| msgid "%s Corporate ME"
+msgid "%s Corporate ME Update"
+msgstr "%s vállalati ME frissítés"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+#| msgid "%s Consumer ME"
+msgid "%s Consumer ME Update"
+msgstr "%s fogyasztói ME frissítés"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+#| msgid "%s Controller"
+msgid "%s Controller Update"
+msgstr "%s vezérlő frissítés"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+#| msgid "%s Thunderbolt Controller"
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt vezérlő frissítés"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU mikrokód frissítés"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%u Application Updated"
+#| msgid_plural "%u Applications Updated"
+msgid "%s Configuration Update"
+msgstr "%s konfigurációs frissítés"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Firmware frissítési ujjlenyomat letöltése…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Firmware frissítési metaadatok letöltése…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Firmware frissítés támogatás"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Támogatást biztosít a firmware frissítésekhez"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Alkalmazésértékelések letöltése…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings (nyílt asztali értékelések) támogatás"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"Az ODRS egy szolgáltatás, mely felhasználói értékeléseket biztosít az "
+"alkalmazásokhoz"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap tároló"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap támogatás"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "A snapek univerzális Linuxos csomagok"
+
+#~ msgid "About %s"
+#~ msgstr "%s névjegye"
+
+#~ msgid "%s ME"
+#~ msgstr "%s kezelőmotor"
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..7c2787b
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,4737 @@
+# Indonesian translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Andika Triwidada <andika@gmail.com>, 2013-2015, 2017, 2018.
+# Dirgita <dirgitadevina@gmail.com>, 2015.
+# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2017-2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-20 18:44+0700\n"
+"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
+"Language-Team: Indonesian <gnome@i15n.org>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.1\n"
+"Plural-Forms: nplurals=2; plural= n!=1;\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Perangkat Lunak"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Manajer aplikasi bagi GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Perangkat Lunak memungkinkan Anda menemukan dan memasang aplikasi dan "
+"ekstensi sistem baru dan menghapus aplikasi yang telah dipasang."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Perangkat Lunak memajang aplikasi-aplikasi populer dan pilihan dengan "
+"deskripsi yang berguna dan beberapa cuplikan layar per aplikasi. Aplikasi "
+"bisa ditemukan dengan meramban daftar kategori atau dengan mencari. Itu juga "
+"memungkinkan Anda memutakhirkan sistem Anda memakai pemutakhiran luring."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel ringkasan"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel rincian"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel terpasang"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel pemutakhiran"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detail pemutakhiran"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Proyek GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Pasang berkas AppStream ke lokasi sistem"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Sedang memasang berkas AppStream ke lokasi sistem"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Daftar proyek yang kompatibel"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ini adalah daftar proyek yang kompatible yang mesti kami tampilkan seperti "
+"misalnya GNOME, KDE, dan XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Apakah mengelola pemutakhiran dan peningkatan dalam GNOME Perangkat Lunak"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Bila tak difungsikan, GNOME Perangkat Lunak akan menyembunyikan panel "
+"pemutakhiran, tidak melalukan sebarang aksi pemutakhiran atau peningkatan "
+"otomatis."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Unduh dan pasang pemutakhiran secara otomatis"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Bila diaktifkan, GNOME Perangkat Lunak secara otomatis mengunduh "
+"pemutakhiran perangkat lunak di latar belakang dan memasang yang tidak "
+"memerlukan nyala ulang."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"Beri tahu pengguna tentang pemutakhiran perangkat lunak di latar belakang"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Jika diaktifkan, GNOME Perangkat Lunak memberi tahu pengguna tentang "
+"pemutakhiran yang terjadi saat pengguna dalam keadaan menganggur."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Apakah secara otomatis menyegarkan ketika memakai koneksi dengan kuota"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Bila difungsikan, GNOME Perangkat Lunak secara otomatis menyegarkan di latar "
+"belakang bahkan ketika memakai koneksi dengan kuota (pada akhirnya mengunduh "
+"beberapa metadata, memeriksa pemutakhiran, dsb., yang mungkin berakibat "
+"biaya bagi pengguna)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Apakah ini pertama kalinya GNOME Perangkat Lunak dijalankan"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Tampilkan nilai bintang di sebelah aplikasi"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Menyaring aplikasi berdasarkan cabang baku yang diatur bagi remote"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Aplikasi bukan bebas menampilkan suatu dialog peringatan sebelum pemasangan"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Ketika aplikasi bukan-bebas dipasang, suatu dialog peringatan dapat "
+"ditampilkan. Ini mengendalikan apakah dialog tersebut dimunculkan."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Daftar aplikasi populer"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Suatu daftar aplikasi yang akan dipakai, menimpa yang didefinisikan oleh "
+"sistem."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Stempel waktu pemeriksaan pemutakhiran terakhir"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Stempel waktu pemberitahuan peningkatan terakhir"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Stempel waktu dari pemutakhiran keamanan pertama, dibersihkan setelah "
+"pemutakhiran"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Stempel waktu pemutakhiran terakhir"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Stempel waktu terakhir ketika sistem daring dan mendapat pemutakhiran apa pun"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Umur dalam detik untuk verifikasi apakah cuplikan layar hulu masih valid"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Memilih nilai yang lebih besar berarti lebih sedikit bolak-balik ke peladen "
+"jauh tapi pemutakhiran ke cuplikan layar mungkin memakan waktu lebih lama "
+"untuk tampil ke pengguna. Nilai 0 berarti jangan pernah memeriksa ke peladen "
+"apakah citra telah ada dalam singgahan."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Peladen yang dipakai untuk ulasan aplikasi"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Nilai karma minimum bagi ulasan"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Ulasan dengan karma kurang dari angka ini tidak akan ditampilkan."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Daftar repositori resmi yang tidak boleh dianggap sebagai pihak ke-3"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Daftar repositori resmi yang mesti dianggap sebagai perangkat lunak bebas"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"URL lisensi yang dipakai ketika suatu aplikasi mesti dianggap perangkat "
+"lunak bebas"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Pasang aplikasi terbundel bagi semua pengguna pada sistem bila mungkin"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Izinkan akses ke dialog Repositori Perangkat Lunak"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Tawarkan peningkatan bagi prarilis"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Tampilkan beberapa elemen UI yang menginformasikan ke pengguna bahwa app "
+"bukan bebas"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Tampilkan pertanyaan untuk memasang repositori perangkat lunak tak bebas"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Tampilkan ukuran terpasang bagi app dalam daftar aplikasi terpasang"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URL yang menerangkan perangkat lunak tak bebas dan proprietari"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Daftar URL yang menunjuk ke berkas appstream yang akan diunduh ke dalam "
+"suatu folder app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Pasang berkas AppStream ke lokasi keseluruhan sistem untuk semua pengguna"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Aktifkan repositori ekstensi GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Sebuah string yang menyimpan id gnome-online-account yang digunakan untuk "
+"masuk"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Pasang Perangkat Lunak"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Pasang perangkat lunak yang dipilih pada sistem"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Pilih Semua"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Pilih Tak Satupun"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Repo_sitori Perangkat Lunak"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Preferensi Pem_utakhiran"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Perangkat Lunak"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Kembali"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "J_elajahi"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "Ter_pasang"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Pem_utakhiran"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Pencarian"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Sumber"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repositori Perangkat Lunak"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Periksa Disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Pengaturan Jaringan"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Mulai Ulang Sekarang"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Informasi lebih lanjut"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Pemutakhiran Otomatis Ditunda"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Te_mukan Lebih Jauh"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Berkas lokal"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Tertunda"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Terpasang"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Memasang"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Menghapus"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mode awal mula: bisa ‘updates’, ‘updated’, ‘installed’, atau ‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Cari aplikasi"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "CARI"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Tampilkan rincian aplikasi (memakai ID aplikasi)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Tampilkan rincian aplikasi (memakai nama paket)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NAMAPAKET"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Pasang aplikasi (memakai ID aplikasi)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Buka suatu berkas paket lokal"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NAMABERKAS"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Jenis interaksi yang diharapkan untuk tindakan ini: baik 'tidak ada (none)', "
+"'memberitahu (notify)', atau 'penuh (full)'"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Tampilkan informasi pengawakutuan cerewet"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Pasang semua pemutakhiran yang tertunda di latar belakang"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Tampilkan preferensi pemutakhiran"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Keluar dari instansi yang tengah berjalan"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Lebih suka sumber berkas lokal daripada AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Tampilkan nomor versi"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Andika Triwidada <andika@gmail.com>, 2013-2015, 2017, 2018.\n"
+"Dirgita <dirgitadevina@gmail.com>, 2015.\n"
+"Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2017-2020."
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Tentang Perangkat Lunak"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr ""
+"Suatu cara yang manis untuk mengelola perangkat lunak pada sistem Anda."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Maaf! Tidak ada detail untuk aplikasi itu."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Kunjungi situs web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Pasang…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Batal"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Pasang"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Mutakhiran"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Hapus"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Perangkat tidak dapat dipakai selama pemutakhiran."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Membutuhkan izin tambahan"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Diperlukan log masuk jarak jauh %s (bidang %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Log Masuk Diperlukan"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Batal"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Log Masuk"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Pengg_una"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Kata _Sandi"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Lainnya"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Semua"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Pilihan"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s Pilihan"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Peringkat"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nama"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Tampilkan"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menu penyaringan subkategori"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Urutkan"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menu pengurutan subkategori"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Masukkan nomor dari 1 sampai %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Pilih aplikasi:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Pemutakhiran SO (Sistem Operasi) telah terpasang"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Pemutakhiran yang baru dipasang tersedia untuk ditinjau"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s kini telah terpasang"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Mulai ulang diperlukan agar perubahan diterapkan."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplikasi siap untuk digunakan."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Mulai Ulang"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Luncurkan"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Pasang Perangkat Lunak Pihak Ketiga?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Fungsikan Repositori Perangkat Lunak Pihak Ketiga?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s bukanlah <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">perangkat lunak bebas dan terbuka</a>, dan disediakan oleh "
+"“%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s disediakan oleh “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Repositori perangkat lunak ini harus diaktifkan untuk melanjutkan pemasangan."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Mungkin tak legal untuk memasang atau memakai %s di beberapa negara."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Bisa saja ilegal untuk memasang atau menggunakan kodek ini di sejumlah "
+"negara."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Jangan Peringatkan Lagi"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Aktifkan dan Pasang"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Rincian galat dari manajer paket adalah:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Rincian"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Pemutakhiran telah dipasang"
+msgstr[1] "Pemutakhiran telah dipasang"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Mulai ulang diperlukan agar berdampak."
+msgstr[1] "Mulai ulang diperlukan agar berdampak."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Jangan Sekarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Tidak ada kekerasan kartun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Karakter kartun dalam situasi yang tidak aman"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Karakter kartun dalam konflik agresif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Kekerasan grafis yang melibatkan karakter kartun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Tidak ada kekerasan fantasi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Karakter dalam situasi yang tidak aman dengan mudah dibedakan dari realitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Karakter dalam konflik agresif dengan mudah dibedakan dari realitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Kekerasan grafis dengan mudah dibedakan dari realitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Tidak ada kekerasan realistis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Sedikit karakter realistis dalam situasi yang tidak aman"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Penggambaran karakter yang realistis dalam konflik agresif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Kekerasan grafis yang melibatkan karakter yang realistis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Tidak ada pertumpahan darah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Pertumpahan darah yang tidak realistis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Pertumpahan darah yang realistis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Penggambaran pertumpahan darah dan mutilasi bagian tubuh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Tidak ada kekerasan seksual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Perkosaan atau perilaku seksual kekerasan lainnya"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Tidak ada referensi untuk alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referensi untuk minuman beralkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Penggunaan minuman beralkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Tidak ada referensi untuk obat-obatan terlarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referensi untuk obat-obatan terlarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Penggunaan obat-obatan terlarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Tidak ada referensi untuk produk tembakau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referensi untuk produk tembakau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Penggunaan produk tembakau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Tidak ada ketelanjangan apapun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Ketelanjangan artistik singkat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Ketelanjangan berkepanjangan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Tidak ada referensi atau penggambaran sifat seksual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Referensi provokatif atau penggambaran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Referensi seksual atau penggambaran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Perilaku seksual grafis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Tidak ada kata-kata tidak senonoh apapun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Penggunaan ringan atau jarang kata-kata tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Penggunaan sedang kata-kata tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Penggunaan kuat atau sering kata-kata tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Tidak ada humor yang tidak pantas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Humor slapstick"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgar atau humor kamar mandi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor dewasa atau seksual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Tidak ada bahasa diskriminatif apapun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatif terhadap sekelompok orang tertentu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminasi dirancang untuk menyebabkan kerusakan emosional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Diskriminasi eksplisit berdasarkan gender, seksualitas, ras atau agama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Tidak ada iklan jenis apapun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Penempatan produk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Referensi eksplisit untuk merek tertentu atau produk dengan merek dagang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Pengguna dianjurkan untuk membeli barang dunia nyata tertentu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Tidak ada perjudian jenis apapun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Perjudian pada peristiwa acak menggunakan token atau kredit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Perjudian menggunakan \"permainan\" uang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Perjudian menggunakan uang riil"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Tidak ada kemampuan membelanjakan uang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Pengguna dianjurkan untuk menyumbangkan uang sungguhan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Kemampuan untuk menghabiskan uang riil dalam aplikasi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Tidak ada cara untuk mengobrol dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interaksi antar pengguna tanpa fungsi obrolan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderasi fungsi obrolan antar pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Fungsi obrolan yang tidak terkontrol antara pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Tidak ada cara untuk berbicara dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Fungsi obrolan audio atau video yang tidak terkontrol antara pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Tidak berbagi alamat surel atau nama pengguna media sosial"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Berbagai nama pengguna jejaring sosial atau alamat surel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Tidak berbagi informasi pengguna dengan pihak ketiga"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Memeriksa versi aplikasi terbaru"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Berbagi data diagnostik yang tidak membiarkan orang lain mengidentifikasi "
+"pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Berbagi informasi yang memungkinkan orang lain mengidentifikasi pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Tidak berbagi lokasi fisik dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Berbagi lokasi fisik dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Tidak ada referensi untuk homoseksualitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Tidak ada referensi untuk homoseksualitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Berciuman antara orang-orang dengan jenis kelamin yang sama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Perilaku seksual grafis antara orang dengan jenis kelamin yang sama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Tidak ada referensi untuk prostitusi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referensi tidak langsung untuk prostitusi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referensi langsung ke prostitusi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Penggambaran grafis dari prostitusi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Tidak ada referensi untuk perzinaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referensi tidak langsung untuk perzinaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referensi langsung ke perzinaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Penggambaran grafis dari tindakan perzinaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Tidak ada karakter seksual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Karakter manusia berpakaian minim"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Karakter manusia seksual secara menyeluruh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Tidak ada referensi untuk penodaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Penggambaran atau referensi tentang penodaan sejarah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Penggambaran tentang penodaan manusia zaman modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Penggambaran grafis tentang penodaan modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Tidak ada sisa manusia mati yang terlihat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Sisa manusia mati yang terlihat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Sisa manusia mati yang terpapar unsur"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Penggambaran grafis penodaan tubuh manusia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Tidak ada referensi untuk perbudakan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Penggambaran atau referensi tentang perbudakan sejarah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Penggambaran perbudakan modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Penggambaran grafis tentang perbudakan modern"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Umum"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "SEMUA"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Hanya untuk orang dewasa"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Dewasa"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Remaja"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Semua orang 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Semua orang"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Anak usia dini"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Aplikasi"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s meminta dukungan format berkas tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Memerlukan Jenis MIME Tambahan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s meminta fonta tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Memerlukan Fonta Tambahan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s meminta kodek multimedia tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Memerlukan Kodek Multimedia Tambahan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s meminta pengandar pencetak tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Memerlukan Pengandar Pencetak Tambahan"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s meminta paket tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Memerlukan Paket Tambahan"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Cari dalam Perangkat Lunak"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Menghapus…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Pemasangan tertunda…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Pemutakhiran tertunda…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Mempersiapkan…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Aplikasi ini hanya dapat dipakai ketika ada koneksi internet aktif."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Pasang"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Pasang…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Luncurkan"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Hapus"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Jaringan"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Dapat berkomunikasi melalui jaringan"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Layanan Sistem"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Dapat mengakses layanan D-Bus pada bus sistem"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Layanan Sesi"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Dapat mengakses layanan D-Bus pada bus sesi"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Perangkat"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Dapat mengakses berkas perangkat sistem"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Folder rumah"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Dapat melihat, menyunting, dan membuat berkas"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Dapat melihat berkas"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistem berkas"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Folder unduhan"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Pengaturan"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Dapat melihat dan mengubah pengaturan apa pun"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistem tampilan lama"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Menggunakan sistem tampilan yang lama dan tidak aman"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Sandbox escape"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Dapat menghindari sandbox dan menghindari pembatasan lainnya"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Aplikasi ini sepenuhnya sandbox."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Tidak dapat menentukan bagian mana dari sistem yang diakses aplikasi ini. "
+"Ini tipikal untuk aplikasi yang lebih lama."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Tak diketahui"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Tak Pernah"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Tak diketahui"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Rendah"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Sedang"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Tinggi"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Tak diketahui"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Anda perlu akses internet untuk menulis ulasan"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Tak bisa temukan \"%s\""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domain publik"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Perangkat Lunak Bebas"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Pengguna terikat oleh lisensi-lisensi berikut:"
+msgstr[1] "Pengguna terikat oleh lisensi-lisensi berikut:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Informasi lebih lanjut"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Halaman rincian"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Mengunduh"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "M_utakhirkan"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "T_ambah Pintasan"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Hapus pi_ntasan"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Tidak disediakan cuplikan layar"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Repositori Perangkat Lunak Yang Disertakan"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Aplikasi ini menyertakan repositori perangkat lunak yang menyediakan "
+"pemutakhiran maupun akses ke perangkat lunak lain."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Tak Ada Repositori Perangkat Lunak Yang Disertakan"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Aplikasi ini tak termasuk repositori perangkat lunak. Ini tak akan "
+"dimutakhirkan ke versi-versi lebih baru."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Perangkat lunak ini telah disediakan distribusi Anda dan tak boleh diganti."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Repositori Perangkat Lunak Teridentifikasi"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Menambahkan repositori perangkat lunak ini akan memberi Anda akses ke "
+"perangkat lunak tambahan dan peningkatan."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Hanya pakai repositori perangkat lunak yang Anda percayai."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Situs _Web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donasi"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Terlokalisasi dalam Bahasa Anda"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentasi"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Aktivitas Rilis"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integrasi Sistem"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Sandbox"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versi"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Peringkat Umur"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Izin"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Diperbarui"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategori"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Ukuran Terpasang"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Ukuran Unduh"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Pengembang"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lisensi"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Bebas"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietari"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Tambahan"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Tambahan yang dipilih akan dipasang dengan aplikasi."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Ulasan"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Tulis Ulasan"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Tampilkan _Rinciannya"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Ini berarti bahwa perangkat lunak dapat secara bebas dijalankan, disalin, "
+"didistribusikan, dipelajari, dan dimodifikasi."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Perangkat Lunak Proprietari"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Ini berarti bahwa perangkat lunak tersebut dimiliki oleh seorang individu "
+"atau perusahaan. Sering ada pembatasan pada penggunaan dan kode sumber "
+"biasanya tidak dapat diakses."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Lisensi Perangkat Lunak Tidak Diketahui"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Persyaratan lisensi perangkat lunak ini tidak diketahui."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Aplikasi ini dinilai dengan cara ini karena fitur:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Tak ada rincian yang tersedia bagi peringkat ini."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " dan "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Fonta yang tersedia untuk skrip %s"
+msgstr[1] "Fonta yang tersedia untuk skrip %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Perangkat lunak yang tersedia untuk %s"
+msgstr[1] "Perangkat lunak yang tersedia untuk %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Tak Menemukan Perangkat Lunak yang Dicari"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s tak ditemukan"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "pada laman situs"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Tak satupun aplikasi yang ada menyediakan berkas %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan aplikasi "
+"yang kurang mungkin dapat ditemukan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Tak satupun aplikasi yang ada untuk dukungan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s tak tersedia."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan suatu "
+"aplikasi yang dapat mendukung format ini mungkin dapat ditemukan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Tak ada fonta yang tersedia bagi dukungan skrip %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan fonta "
+"tambahan mungkin dapat ditemukan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Tak ada kodek tambahan yang tersedia bagi format %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan suatu kodek "
+"yang dapat memutar format ini mungkin dapat ditemukan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Tak ada sumber daya Plasma yang tersedia bagi dukungan %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan sumber daya "
+"Plasma tambahan mungkin dapat ditemukan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Tak ada penggerak pencetak yang tersedia bagi %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan suatu "
+"penggerak yang mendukung pencetak ini mungkin dapat ditemukan %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "laman situs ini"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Sayangnya, %s yang Anda cari tak dapat kami temukan. Kunjungilah %s untuk "
+"informasi lebih lanjut."
+msgstr[1] ""
+"Sayangnya, %s yang Anda cari tak dapat kami temukan. Kunjungilah %s untuk "
+"informasi lebih lanjut."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Tak menemukan apa pun"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Format berkas %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Halaman kodek"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Selamat Datang"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Selamat Datang ke Perangkat Lunak"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Perangkat Lunak memungkinkan Anda memasang semua perangkat lunak yang Anda "
+"perlukan, semua dari satu tempat. Lihat rekomendasi kami, ramban kategori, "
+"atau cari aplikasi yang Anda inginkan."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "Mari Berbe_lanja"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Dihapus"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Terpasang"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Dimutakhirkan"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Tak diketahui"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Sejarah"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplikasi Sistem"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Halaman terpasang"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Katalog perangkat lunak sedang diunduh"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Memuat halaman"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Memulai…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Jaringan saat ini menggunakan kuota. Koneksi menggunakan kuota memiliki "
+"batas data atau biaya yang terkait dengannya. Untuk menyimpan data, "
+"pemutakhiran otomatis telah dijeda.\n"
+"\n"
+"Pemutakhiran otomatis akan dilanjutkan ketika jaringan yang tidak "
+"menggunakan kuota tersedia. Sampai saat itu, masih dimungkinkan untuk "
+"memasang pemutakhiran secara manual.\n"
+"\n"
+"Atau, jika jaringan saat ini telah diidentifikasi secara tidak benar "
+"menggunakan kuota, pengaturan ini dapat diubah."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Buka Pengaturan _Jaringan"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Halaman moderasi"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Tidak ada ulasan yang akan dimoderasi"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistem"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "pengguna"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Cabang"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Pemasangan"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Lebih banyak…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplikasi Audio & Video yang Disarankan"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Permainan yang Disarankan"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplikasi Grafik yang Disarankan"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplikasi Produktivitas yang Disarankan"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Mengakses perangkat lunak tambahan dari sumber-sumber pihak ketiga yang "
+"dipilih."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Sebagian dari perangkat lunak ini proprietary sehingga memiliki pembatasan "
+"pada penggunaan, pemakaian bersama, dan akses ke kode sumber."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Temukan lebih jauh…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Fungsikan"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Halaman ringkasan"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Fungsikan Repositori Perangkat Lunak Pihak Ketiga?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Sebelumnya"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Selanjutnya"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Pilihan Penyunting"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Rilis Terbaru"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategori"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Tak Ada Data Aplikasi Yang Ditemukan"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Persiapkan %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Anda yakin ingin menghapus repositori %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Semua aplikasi dari %s akan dihapus, dan Anda perlu memasang ulang "
+"repositori untuk memakainya lagi."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Apakah Anda yakin ingin menghapus %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s akan dihapus, dan Anda perlu memasangnya untuk memakainya lagi."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Terpasang)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferensi Pemutakhiran"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Pemutakhiran Otomatis"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Pemutakhiran otomatis dinonaktifkan ketika menggunakan koneksi seluler atau "
+"kuota."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Pemberitahuan Pemutakhiran Otomatis"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Tampilkan pemberitahuan ketika pemutakhiran telah dipasang secara otomatis."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Beberapa perangkat lunak yang kini terpasang tidak kompatibel dengan %s. "
+"Bila Anda melanjutkan, yang berikut akan secara otomatis dihapus saat "
+"peningkatan:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Perangkat Lunak Tak Kompatibel"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Lanjut"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplikasi terpasang"
+msgstr[1] "%u aplikasi terpasang"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u tambahan terpasang"
+msgstr[1] "%u tambahan terpasang"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplikasi"
+msgstr[1] "%u aplikasi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tambahan"
+msgstr[1] "%u tambahan"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s dan %s terpasang"
+msgstr[1] "%s dan %s terpasang"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Hapus \"%s\"?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Nonaktifkan \"%s\"?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Perangkat lunak yang telah dipasang dari repositori ini tidak akan lagi "
+"menerima pemutakhiran, termasuk perbaikan keamanan."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Nonaktifkan"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "sistem operasi"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Repositori-repositori ini melengkapi perangkat lunak baku yang disediakan "
+"oleh %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repositori Pihak Ketiga"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Tidak Ada Repositori Tambahan"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Fungsikan"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Hapus…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Nonaktifkan…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Memfungsikan"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Menonaktifkan"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Difungsikan"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Dinonaktifkan"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Benci"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Tidak suka"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Suka"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Cinta"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Harap sisihkan lebih banyak waktu saat menulis ulasan"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Harap pilih nilai bintang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Ringkasan terlalu pendek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Ringkasan terlalu panjang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Keterangan terlalu pendek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Keterangan terlalu panjang"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Kirim Ulasan"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Kirim"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Ringkasan"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Berikan ringkasan ulasan Anda, sebagai contoh: \"App bagus, akan menyarankan"
+"\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Ulasan"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Apa pendapat Anda tentang app? Cobalah memberi alasan tentang pandangan Anda."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Temukan data apa yang dikirim di <a href=\"https://odrs.gnome.org/privacy"
+"\">kebijakan privasi</a> kami."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "total peringkat"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Anda dapat melaporkan ulasan untuk perilaku diskriminatif, kasar, atau "
+"abusif."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Sekali dilaporkan, suatu ulasan akan disembunyikan sampai diperiksa oleh "
+"seorang administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Laporkan Ulasan?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Lapor"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Apakah ulasan ini berguna bagi Anda?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ya"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Tidak"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Laporan…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Hapus…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Cuplikan layar tak ditemukan"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Gagal memuat citra"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Ukuran cuplikan layar tak ditemukan"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Tak bisa membuat singgahan"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Cuplikan layar tak valid"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Cuplikan layar tak tersedia"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Cuplikan layar"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u lagi yang cocok"
+msgstr[1] "%u lagi yang cocok"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Halaman pencarian"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Tak Ada Aplikasi Yang Ditemukan"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "\"%s\""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Tidak bisa mengunduh pemutakhiran perangkat tegar dari %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Tidak bisa mengunduh pemutakhiran dari %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Tidak bisa mengunduh pemutakhiran"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Tidak bisa mengunduh pemutakhiran: akses internet diperlukan tapi tak "
+"tersedia"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Tidak bisa mengunduh pemutakhiran dari %s: ruang disk tidak cukup"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Tidak bisa mengunduh pemutakhiran: ruang disk tidak cukup"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Tidak bisa mengunduh pemutakhiran: perlu autentikasi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Tidak bisa mengunduh pemutakhiran: autentikasi tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Tidak bisa mengunduh pemutakhiran: Anda tidak punya hak untuk memasang "
+"perangkat lunak"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Tidak bisa mendapat daftar pemutakhiran"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Tidak bisa memasang %s karena pengunduhan gagal dari %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Tidak bisa memasang %s karena pengunduhan gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Tidak bisa memasang %s karena runtime %s tidak tersedia"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Tidak bisa memasang %s karena tidak didukung"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Tidak bisa memasang: akses internet diperlukan tapi tidak tersedia"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Tidak bisa memasang: aplikasi memiliki format yang tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Tidak bisa memasang %s: ruang disk tidak cukup"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Tidak bisa memasang %s: perlu autentikasi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Tidak bisa memasang %s: autentikasi tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Tidak bisa memasang %s: Anda tidak punya hak untuk memasang perangkat lunak"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Tidak bisa memasang %s: perlu daya AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Tidak bisa memasang %s: Level baterai terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Tidak bisa memasang %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Tidak bisa memutakhirkan %s dari %s karena pengunduhan gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Tidak bisa memutakhirkan %s karena pengunduhan gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Tidak bisa memasang pemutakhiran dari %s karena pengunduhan gagal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Tidak bisa memasang pemutakhiran karena pengunduhan gagal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Tidak bisa mutakhirkan: akses internet diperlukan tapi tidak tersedia"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Tidak bisa memutakhirkan %s: ruang diska tidak cukup"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Tidak bisa memasang pemutakhiran: ruang diska tidak cukup"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Tidak bisa memutakhirkan %s: perlu autentikasi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Tidak bisa memasang pemutakhiran: perlu autentikasi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Tidak bisa memutakhirkan %s: autentikasi tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Tidak bisa memasang pemutakhiran: autentikasi tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Tidak bisa memutakhirkan %s: Anda tidak punya hak untuk memutakhirkan "
+"perangkat lunak"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Tidak bisa memasang pemutakhiran: Anda tidak punya hak untuk memutakhirkan "
+"perangkat lunak"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Tidak bisa memutakhirkan %s: perlu daya AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Tidak bisa memasang pemutakhiran: perlu daya AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Tidak bisa memutakhirkan %s: Level baterai terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Tidak bisa memasang pemutakhiran: Level baterai terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Tidak bisa memutakhirkan %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Tidak bisa memasang pemutakhiran"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Tidak bisa meningkatkan ke %s dari %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Tidak bisa meningkatkan ke %s karena pengunduhan gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Tidak bisa meningkatkan ke %s: akses internet diperlukan tapi tidak tersedia"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Tidak bisa meningkatkan ke %s: ruang disk tidak cukup"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Tidak bisa meningkatkan ke %s: perlu autentikasi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Tidak bisa meningkatkan ke %s: autentikasi tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Tidak bisa meningkatkan ke %s: Anda tidak punya hak untuk meningkatkan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Tidak bisa meningkatkan ke %s: perlu daya AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Tidak bisa meningkatkan ke %s: Level baterai terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Tidak bisa meningkatkan ke %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Tidak bisa menghapus %s: perlu autentikasi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Tidak bisa menghapus %s: autentikasi tidak valid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Tidak bisa menghapus %s: Anda tidak punya hak untuk menghapus perangkat lunak"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Tidak bisa menghapus %s: perlu daya AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Tidak bisa menghapus %s: Level baterai terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Tidak bisa menghapus %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Tidak bisa meluncurkan %s: %s tidak terpasang"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Ruang disk tidak cukup — kosongkan sebagian dan coba lagi"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Maaf, ada yang tidak beres"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Gagal memasang berkas: tidak didukung"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Gagal memasang berkas: autentikasi gagal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Gagal memasang: tidak didukung"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Gagal memasang: autentikasi gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Tidak bisa mengontak %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s perlu dijalankan ulang untuk memakai pengaya baru."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Aplikasi ini perlu dijalankan ulang untuk memakai pengaya baru."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Daya AC diperlukan"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Level baterai terlalu rendah"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Sumber: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Memasang)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s( Menghapus)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Hapus Semua"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Deskripsi pemutakhiran tak tersedia."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Dipasang pada %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Pemutakhiran Terpasang"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Penambahan"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Penghapusan"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Pemutakhiran"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Penurunan"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Tak ada pemutakhiran yang telah dipasang pada sistem ini."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Pemutakhiran Keamanan Tertunda"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr ""
+"Anda sangat disarankan untuk memasang pemutakhiran yang penting ini sekarang"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Mulai Ulang & Pasang"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Pemutakhiran Perangkat Lunak Tersedia"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Pemutakhiran OS dan aplikasi yang penting siap dipasang"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Tilik"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Aplikasi Dimutakhirkan — Mulai Ulang Diperlukan"
+msgstr[1] "%u Aplikasi Dimutakhirkan — Mulai Ulang Diperlukan"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Aplikasi Dimutakhirkan"
+msgstr[1] "%u Aplikasi Dimutakhirkan"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s telah dimutakhirkan."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Mohon memulai ulang aplikasi."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s dan %s telah dimutakhirkan."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikasi memerlukan mulai ulang."
+msgstr[1] "%u aplikasi memerlukan mulai ulang."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Termasuk %s, %s dan %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Pemutakhiran Sistem Operasi Tidak Tersedia"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Tingkatkan versi untuk terus menerima pemutakhiran keamanan."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Sebuah versi baru %s telah tersedia untuk dipasang"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Pemutakhiran Perangkat Lunak Tersedia"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Pemutakhiran Perangkat Lunak Gagal"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Suatu pemutakhiran SO (Sistem Operasi) yang penting gagal dipasang."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Tampilkan Rincian"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Peningkatan Sistem Selesai"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Selamat datang di %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Pemutakhiran Perangkat Lunak Terpasang"
+msgstr[1] "Pemutakhiran Perangkat Lunak Terpasang"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Pemutakhiran SO (Sistem Operasi) yang penting telah dipasang."
+msgstr[1] "Pemutakhiran SO (Sistem Operasi) yang penting telah dipasang."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Ulasan"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Gagal Memutakhirkan"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistem sudah pada kondisi terbaru."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Pemutakhiran dibatalkan."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Akses Internet yang diperlukan tidak tersedia. Pastikan Anda terhubung pada "
+"Internet dan coba lagi."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Terdapat masalah keamanan pada pemutakhiran perangkat lunak. "
+"Konsultasikanlah pada penyedia perangkat lunak Anda untuk informasi lebih "
+"rinci."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Tidak tersedia ruang diska yang cukup. Kosongkanlah beberapa dan coba lagi."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Maaf: pemutakhiran gagal dipasang. Tunggulah untuk pemutakhiran yang lain "
+"dan coba lagi. Jika terus berlanjut, hubungi penyedia perangkat lunak Anda."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Kemarin, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Kemarin, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Dua hari yang lalu"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Tiga hari yang lalu"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Empat hari yang lalu"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Lima hari yang lalu"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Enam hari yang lalu"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Seminggu yang lalu"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Dua minggu yang lalu"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Mencari pemutakhiran baru…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Menyiapkan pemutakhiran…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Ini mungkin memakan waktu)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Terakhir diperiksa: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s tidak lagi didukung."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "SO (Sistem Operasi) Anda tidak lagi didukung."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Ini berarti tidak menerima pemutakhiran keamanan."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Anda sangat disarankan untuk meningkatkan ke versi yang lebih baru."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Mungkin Ada Biaya"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Memeriksa pemutakhiran ketika memakai data seluler bisa menyebabkan tambahan "
+"biaya."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Periksa S_aja"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Tak Ada Jaringan"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Akses internet diperlukan untuk memeriksa pemutakhiran."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Memeriksa…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Periksa pemutakhiran"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Halaman pemutakhiran"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Perangkat lunak mutakhir"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Memeriksa pemutakhiran ketika memakai data seluler bisa menambah tagihan"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Periksa Saja"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Pergi daring untuk memeriksa pemutakhiran"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Pe_ngaturan Jaringan"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Pemutakhiran dikelola secara otomatis"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Mulai Ulang & Mutakhirkan"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Mutakhirkan Semua"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Perangkat Tegar Terpadu"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Perlu Mulai Ulang"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Pemutakhiran Aplikasi"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Perangkat Tegar"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "Un_duh"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Disarankan untuk membuat salinan cadangan data dan berkas Anda sebelum "
+"meningkatkan."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Mulai Ulang Seka_rang"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Pemutakhiran akan diterapkan ketika komputer dinyalakan ulang."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Kini Tersedia"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Menunggu untuk Mengunduh %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Mengunduh %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Siap dipasang"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Peningkatan mayor, dengan fitur-fitur baru dan polesan tambahan."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Pelajari _Lebih Jauh"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Tambah, hapus, atau mutakhirkan perangkat lunak pada komputer ini"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Pemutakhiran;Peningkatan;Sumber;Repositori;Preferensi;Pasang;Copot;Program;"
+"Perangkat Lunak;App;Toko;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Pembuatan & Penyuntingan Audio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Pemutar Musik"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Pengawakutu"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Kecerdasan Buatan"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kimia"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Bahasa"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Aksi"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Petualangan"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blok"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Papan"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kartu"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulator"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Anak-anak"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Memainkan Peran"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Olah Raga"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategi"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafik 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografi"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Pemindaian"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafik Vektor"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Penilik"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalender"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Basis Data"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Keuangan"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Pengolah Kata"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fonta"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodek"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Sumber Masukan"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Paket Bahasa"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Penerjemahan"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Penggerak Perangkat Keras"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Mengobrol"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Berita"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Peramban Web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Penyunting Teks"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Pilihan"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Seni"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografi"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komik"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiksi"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Kesehatan"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Sejarah"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Gaya Hidup"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politik"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Olah Raga"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio & Video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Alat Pengembangan"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Edukasi & Sains"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Permainan"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafis & Fotografi"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivitas"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikasi & Berita"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Rujukan"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilitas"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Pemutakhiran SO (Sistem Operasi)"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Memuat perbaikan kinerja, stabilitas, dan keamanan."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Mengunduh gambar pilihan…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Pemutakhiran Endless OS dengan fitur dan perbaikan baru."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Layanan pemutakhiran EOS tidak dapat mengambil dan menerapkan pemutakhiran."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Installer seluruh sistem GNOME Software AppStream"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Gagal mengurai argumen baris perintah"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Anda perlu menentukan satu nama berkas"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Program ini hanya dapat digunakan oleh pengguna root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Gagal untuk memvalidasi jenis konten"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Gagal menyalin"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Mengunduh berkas ekstra metadata…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Mengunduh informasi peningkatan…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "Tingkatkan untuk fitur, kinerja, dan stabilitas terbaru."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Dukungan Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak adalah kerangka kerja untuk aplikasi destop di Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Mendapatkan metadata flatpak untuk %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s Pemutakhiran Perangkat"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s Pemutakhiran Sistem"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s Pemutakhiran Pengontrol Tertanam"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s Pemutakhiran ME"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s Pemutakhiran ME Korporat"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s Pemutakhiran ME Konsumer"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s Pemutakhiran Pengendali"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Pemutakhiran Pengontrol Thunderbolt"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s Pemutakhiran Mikrokode CPU"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s Pemutakhiran Konfigurasi"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Mengunduh tanda tangan pemutakhiran perangkat tegar…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Mengunduh metadata pemutakhiran perangkat tegar…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Dukungan Peningkatan Perangkat Tegar"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Menyediakan dukungan untuk peningkatan perangkat tegar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Mengunduh peringkat aplikasi…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS adalah layanan yang menyediakan ulasan pengguna dari aplikasi"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Toko Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Dukungan Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap adalah paket Linux yang universal"
+
+#~ msgid "About %s"
+#~ msgstr "Tentang %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Pengaturan Ekstensi"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Risiko memakai ekstensi Anda tanggung sendiri. Bila Anda mengalami "
+#~ "sebarang masalah sistem, disarankan untuk menonaktifkan mereka."
+
+#~ msgid "Spacing"
+#~ msgstr "Jarak Antara"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Banyaknya ruang di antara anak"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplikasi Pilihan"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Ekstensi Shell"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Repositori Ekstensi GNOME Shell"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Mengunduh metadata ekstensi shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Ekstensi GNOME Shell"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Tampilkan UI manajemen folder"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nama Folder"
+
+#~ msgid "_Add"
+#~ msgstr "T_ambah"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Tambah ke Folder Aplikasi"
+
+#~ msgid "Failed to load components"
+#~ msgstr "Gagal memuat komponen"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS divalidasi OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Gagal memuat berkas"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Perubahan yang belum disimpan"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Daftar aplikasi sudah dimuat."
+
+#~ msgid "Merge documents"
+#~ msgstr "Gabungkan dokumen"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Buang perubahan"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Buka berkas AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Buka"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Simpan berkas AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Simpan"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Gagal menyimpan berkas"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Desain banner %s dihapus."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Desain banner dihapus."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Daftar aplikasi memiliki perubahan yang belum disimpan."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Gunakan logging verbose"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Perangkat Lunak Perancang Banner"
+
+#~ msgid "No Designs"
+#~ msgstr "Tidak Ada Desain"
+
+#~ msgid "Error message here"
+#~ msgstr "Pesan kesalahan disini"
+
+#~ msgid "App ID"
+#~ msgstr "ID aplikasi"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Pilihan Penyunting"
+
+#~ msgid "Category Featured"
+#~ msgstr "Kategori Pilihan"
+
+#~ msgid "Undo"
+#~ msgstr "Tak Jadi"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Perancang Banner"
+
+#~ msgid "New Banner"
+#~ msgstr "Banner Baru"
+
+#~ msgid "Import from file"
+#~ msgstr "Impor dari berkas"
+
+#~ msgid "Export to file"
+#~ msgstr "Ekspor ke berkas"
+
+#~ msgid "Delete Design"
+#~ msgstr "Hapus Desain"
+
+#~ msgid "Featured App"
+#~ msgstr "Aplikasi Pilihan"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Peningkatan OS"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Klik pada butir untuk memilihnya"
+
+#~ msgid "Select"
+#~ msgstr "Pilih"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "T_ambah ke Folder…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "Pin_dah ke Folder…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Hapus da_ri Folder"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Rancang banner pilihan untuk Perangkat Lunak GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream:Perangkat Lunak;Aplikasi;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Dukungan Aplikasi Web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Jalankan aplikasi web populer di peramban"
+
+#~ msgid "Top Rated"
+#~ msgstr "Peringkat Teratas"
+
+#~ msgid "_All"
+#~ msgstr "Semu_a"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Masuk / Daftar…"
+
+#~ msgid "Continue"
+#~ msgstr "Lanjutkan"
+
+#~ msgid "Use"
+#~ msgstr "Gunakan"
+
+#~ msgid "Add another…"
+#~ msgstr "Tambah yang lain…"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Masuk sebagai %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Masuk…"
+
+#~ msgid "Sign out"
+#~ msgstr "Keluar"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Untuk melanjutkan, Anda perlu menggunakan akun Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Untuk melanjutkan, Anda harus menggunakan akun Ubuntu One Anda."
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Apakah Anda yakin ingin membeli %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s akan dipasang, dan Anda akan dikenakan biaya %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Pembelian"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Tidak bisa membeli %s: perlu autentikasi"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Tidak bisa membeli %s: autentikasi tidak valid"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Tidak bisa membeli %s: tidak ada metoda pembayaran yang disiapkan"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Tidak bisa membeli %s: pembayaran ditolak"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Tidak bisa membeli %s"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Katalog perangkat lunak sedang dimuat"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Untuk melanjutkan Anda perlu masuk ke %s."
+
+#~ msgid "Email address"
+#~ msgstr "Alamat surel"
+
+#~ msgid "I have an account already"
+#~ msgstr "Saya telah memiliki akun"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Saya ingin mendaftar akun sekarang"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Saya lupa kata sandi"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Secara otomatis masuk untuk selanjutnya"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Masukkan pin sekali-waktu Anda untuk autentikasi dua faktor."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autentikasi"
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Akun %s Anda telah diskors."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Tidak mungkin memasang perangkat lunak sampai hal ini telah diselesaikan."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Untuk informasi lebih banyak, kunjungi %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Tidak bisa memperbarui %s dari %s"
+
+#~ msgid "_About"
+#~ msgstr "Tent_ang"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Tampilkan informasi profil bagi layanan"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informasi tentang %s, maupun opsi tentang bagaimana mendapatkan suatu "
+#~ "kodek yang dapat memutar format ini dapat ditemukan pada situs web."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Mengunduh pemutakhiran baru…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Mengunduh laman aplikasi…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Dukungan Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Platform hiburan paling pamungkas dari Valve"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Aplikasi Dimutakhirkan"
+
+#~ msgid "Includes: ."
+#~ msgstr "Termasuk: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Mulai Ulang & Pe_rbarui"
+
+#~ msgid "U_pdate All"
+#~ msgstr "_Perbarui Semua"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Start Ulang & _Pasang"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Mendapatkan sumber runtime…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Mengunduh pemutakhiran perangkat tegar…"
+
+#~ msgid "_Quit"
+#~ msgstr "_Keluar"
+
+#~ msgid "Limba Support"
+#~ msgstr "Dukungan Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba memberikan pengembang cara untuk membuat bundel perangkat lunak "
+#~ "dengan mudah"
diff --git a/po/is.po b/po/is.po
new file mode 100644
index 0000000..7859a3f
--- /dev/null
+++ b/po/is.po
@@ -0,0 +1,4546 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sveinn í Felli <sv1@fellsnet.is>, 2017, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2019-07-30 16:25+0000\n"
+"PO-Revision-Date: 2019-08-16 05:40+0000\n"
+"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
+"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
+"Language: is\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME hugbúnaður"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Forritastýring fyrir GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Yfirlitsspjald"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Spjald með nánari upplýsingum"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Spjald með uppsettu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Spjald með uppfærslum"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Nánari upplýsingar um uppfærslu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1386
+msgid "The GNOME Project"
+msgstr "GNOME verkefnið"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Uppsetning hugbúnaðar"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr ""
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Velja allt"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Velja ekkert"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "Hugbúnaðar_söfn"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "Kjörstillingar uppfærslu"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Hugbúnaður"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Fara til baka"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_All"
+msgstr "_Allt"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "U_ppsett"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "_Uppfærslur"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Leita"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:292 src/gs-details-page.ui:838
+msgid "Source"
+msgstr "Upptök"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Hugbúnaðarsöfn"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "Athuga disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "Netstillingar"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "Endurræsa núna"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "Nánari upplýsingar"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4479
+msgid "Local file"
+msgstr "Staðbundin skrá"
+
+#: lib/gs-app.c:4531
+msgid "Package"
+msgstr "Pakki"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:412
+msgid "Pending"
+msgstr "Í bið"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:185 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:72
+msgid "Installed"
+msgstr "Uppsett"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:171 src/gs-details-page.c:321
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "Set upp"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:177 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "Fjarlægi"
+
+#: src/gs-app-folder-dialog.c:296
+msgid "Folder Name"
+msgstr "Heiti möppu"
+
+#: src/gs-app-folder-dialog.c:307 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:243 src/gs-editor.c:609 src/gs-editor.c:641
+#: src/gs-installed-page.c:598 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Hætta við"
+
+#: src/gs-app-folder-dialog.c:312 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Bæta við"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Bæta við forritamöppu"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "HAMUR"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr "Leita að forritum"
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "LEITA"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr ""
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr ""
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr ""
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "SKRÁARHEITI"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr ""
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr ""
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr ""
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr ""
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "Birta útgáfunúmer"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Sveinn í Felli, sv1@fellsnet.is"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:1967
+#, c-format
+msgid "About %s"
+msgstr "Um %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:126
+msgid "Visit website"
+msgstr "Heimsækja vefsvæðið"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:131
+msgid "Install…"
+msgstr "Setja inn…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:138 src/gs-auth-dialog.ui:44 src/gs-updates-section.c:484
+msgid "Cancel"
+msgstr "Hætta við"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:145 src/gs-common.c:287 src/gs-page.c:582
+msgid "Install"
+msgstr "Setja inn"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:152
+msgid "Update"
+msgstr "Uppfæra"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:156 src/gs-app-row.c:165 src/gs-page.c:741
+#: src/gs-repos-dialog.c:323
+msgid "Remove"
+msgstr "Fjarlægja"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:282
+msgid "Device cannot be used during update."
+msgstr ""
+
+#: src/gs-app-row.c:480 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr ""
+
+#: src/gs-auth-dialog.c:127
+msgid "Sign In / Register…"
+msgstr ""
+
+#: src/gs-auth-dialog.c:134
+msgid "Continue"
+msgstr "Halda áfram"
+
+#: src/gs-auth-dialog.c:141
+msgid "Use"
+msgstr "Nota"
+
+#: src/gs-auth-dialog.ui:30
+#| msgid "_Add to Folder…"
+msgid "Add another…"
+msgstr "Bæta við öðru…"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:180
+msgid "Other"
+msgstr "Annað"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:185
+msgid "All"
+msgstr "Allt"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:189
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:480
+#, c-format
+msgid "Featured %s"
+msgstr "%s í deiglunni"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26
+msgid "Top Rated"
+msgstr "Hæsta einkunn"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-editor.ui:225
+#: src/gs-origin-popover-row.c:52
+msgid "Name"
+msgstr "Heiti"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:896
+msgid "Extension Settings"
+msgstr ""
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "Birta"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "Raða"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr "Veldu forrit:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr ""
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+msgid "A restart is required for the changes to take effect."
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-updates-section.c:325
+msgid "Restart"
+msgstr "Endurræsa"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "Ræsa"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:234
+msgid "Enable Third-Party Software Repository?"
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr ""
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr "Ekki vara mig við aftur"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr "Virkja og setja upp"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:435
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+
+#: src/gs-common.c:454 src/gs-details-page.ui:435
+msgid "Details"
+msgstr "Nánar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:62
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:68
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:71
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:77
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:80
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:86
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:95
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:101
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:104
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:110
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:113
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:119
+msgid "References to alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "Use of alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:125
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "References to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:131
+msgid "Use of illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:137
+msgid "Use of tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:140
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:143
+msgid "Brief artistic nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:149
+msgid "No references to or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "Provocative references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:155
+msgid "Sexual references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:161
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:164
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:170
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:173
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:179
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:188
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:194
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:197
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:203
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:206
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:212
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:221
+msgid "No ability to spend money"
+msgstr ""
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:224
+msgid "Users are encouraged to donate real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:227
+msgid "Ability to spend real money in-app"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:233
+msgid "User-to-user interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Moderated chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "Uncontrolled chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:242
+msgid "No way to talk with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:245
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:251
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:254
+msgid "No sharing of user information with third parties"
+msgstr ""
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "Checking for the latest application version"
+msgstr ""
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:260
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:266
+msgid "No sharing of physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:269
+msgid "Sharing physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:274
+msgid "No references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:277
+msgid "Indirect references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:280
+msgid "Kissing between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:286
+msgid "No references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:289
+msgid "Indirect references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "Direct references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:295
+msgid "Graphic depictions of the act of prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "No references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:304
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:310
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:313
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:316
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "No references to desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:325
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:331
+msgid "No visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:334
+msgid "Visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:340
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:343
+msgid "No references to slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "Depictions of or references to historical slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:349
+msgid "Depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr ""
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr "Finna í hugbúnaði"
+
+#: src/gs-details-page.c:316
+msgid "Removing…"
+msgstr "Fjarlægi…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:335
+msgid "Pending installation…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:342
+msgid "Pending update…"
+msgstr ""
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:666
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:812 src/gs-details-page.c:838
+#: src/gs-details-page.ui:162 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.ui:122
+msgid "_Install"
+msgstr "Setja _inn"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:852 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "Setja _inn…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:901
+msgid "_Launch"
+msgstr "_Ræsa"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:926 src/gs-details-page.ui:187
+msgid "_Remove"
+msgstr "Fja_rlægja"
+
+#: src/gs-details-page.c:959 src/gs-update-dialog.c:92
+#| msgid "No Network"
+msgid "Network"
+msgstr "Netkerfi"
+
+#: src/gs-details-page.c:959 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr ""
+
+#: src/gs-details-page.c:960 src/gs-update-dialog.c:93
+msgid "System Services"
+msgstr ""
+
+#: src/gs-details-page.c:960 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr ""
+
+#: src/gs-details-page.c:961 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr ""
+
+#: src/gs-details-page.c:961 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr ""
+
+#: src/gs-details-page.c:962 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "Tæki"
+
+#: src/gs-details-page.c:962 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr ""
+
+#: src/gs-details-page.c:963 src/gs-details-page.c:964
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+#| msgid "_Remove from Folder"
+msgid "Home folder"
+msgstr "Heimamappa"
+
+#: src/gs-details-page.c:963 src/gs-details-page.c:965
+#: src/gs-details-page.c:967 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr ""
+
+#: src/gs-details-page.c:964 src/gs-details-page.c:966
+#: src/gs-details-page.c:968 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr ""
+
+#: src/gs-details-page.c:965 src/gs-details-page.c:966
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+msgid "File system"
+msgstr "Skráakerfi"
+
+#: src/gs-details-page.c:967 src/gs-details-page.c:968
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+#| msgid "Download Size"
+msgid "Downloads folder"
+msgstr "Niðurhalsmappa"
+
+#: src/gs-details-page.c:969 src/gs-update-dialog.c:102
+#| msgid "Network Settings"
+msgid "Settings"
+msgstr "Stillingar"
+
+#: src/gs-details-page.c:969 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr ""
+
+#: src/gs-details-page.c:970 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr ""
+
+#: src/gs-details-page.c:970 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr ""
+
+#: src/gs-details-page.c:985
+msgid "This application is fully sandboxed."
+msgstr ""
+
+#: src/gs-details-page.c:993
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1142
+msgctxt "version"
+msgid "Unknown"
+msgstr "Óþekkt"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1155
+msgctxt "updated"
+msgid "Never"
+msgstr "Aldrei"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1208
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Óþekkt"
+
+#: src/gs-details-page.c:1261
+msgid "Low"
+msgstr ""
+
+#: src/gs-details-page.c:1263
+msgid "Medium"
+msgstr ""
+
+#: src/gs-details-page.c:1265
+msgid "High"
+msgstr ""
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1267 src/gs-details-page.ui:957 src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "Óþekkt"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1643
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1826 src/gs-details-page.c:1842
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Gat ekki fundið \"%s\""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2405
+msgid "Public domain"
+msgstr "Almenningseign"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2408
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2415
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2425 src/gs-details-page.ui:1201
+msgid "Free Software"
+msgstr "Frjáls hugbúnaður"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2482
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-details-page.c:2509 src/gs-details-page.ui:1273
+msgid "More information"
+msgstr "Nánari upplýsingar"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr ""
+
+#: src/gs-details-page.ui:214
+#| msgid "_Download"
+msgid "Downloading"
+msgstr "Sæki gögn"
+
+#: src/gs-details-page.ui:253
+msgid "_Update"
+msgstr "_Uppfæra"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:269
+msgid "_Add shortcut"
+msgstr "Bæt_a við flýtilykli"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:280
+msgid "Re_move shortcut"
+msgstr "Fjarlæ_gja flýtilykil"
+
+#: src/gs-details-page.ui:354
+msgid "No screenshot provided"
+msgstr ""
+
+#: src/gs-details-page.ui:374
+msgid "Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:375
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+
+#: src/gs-details-page.ui:382
+msgid "No Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:383
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+
+#: src/gs-details-page.ui:391
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:398
+msgid "Software Repository Identified"
+msgstr ""
+
+#: src/gs-details-page.ui:399
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+
+#: src/gs-details-page.ui:400
+msgid "Only use software repositories that you trust."
+msgstr ""
+
+#: src/gs-details-page.ui:410
+msgid "_Website"
+msgstr "_Vefsvæði"
+
+#: src/gs-details-page.ui:419
+msgid "_Donate"
+msgstr "_Gefa pening"
+
+#: src/gs-details-page.ui:529
+msgid "Localized in your Language"
+msgstr "Staðfært tungumálið þitt"
+
+#: src/gs-details-page.ui:540
+msgid "Documentation"
+msgstr "Handbækur"
+
+#: src/gs-details-page.ui:551
+msgid "Release Activity"
+msgstr ""
+
+#: src/gs-details-page.ui:562
+msgid "System Integration"
+msgstr "Aðlögun að stýrikerfi"
+
+#: src/gs-details-page.ui:573
+msgid "Sandboxed"
+msgstr "Einangrað"
+
+#: src/gs-details-page.ui:593
+msgid "Version"
+msgstr "Útgáfa"
+
+#: src/gs-details-page.ui:629
+msgid "Age Rating"
+msgstr "Aldursbil"
+
+#: src/gs-details-page.ui:667 src/gs-details-page.ui:1359
+#| msgid "Version"
+msgid "Permissions"
+msgstr "Heimildir"
+
+#: src/gs-details-page.ui:705
+msgid "Updated"
+msgstr "Uppfært"
+
+#: src/gs-details-page.ui:739
+msgid "Category"
+msgstr "Flokkur"
+
+#: src/gs-details-page.ui:776
+msgid "Installed Size"
+msgstr "Uppsett stærð"
+
+#: src/gs-details-page.ui:807
+msgid "Download Size"
+msgstr "Niðurhalsstærð"
+
+#: src/gs-details-page.ui:869
+msgid "Developer"
+msgstr "Forritari"
+
+#: src/gs-details-page.ui:914
+msgid "License"
+msgstr "Notkunarleyfi"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:933
+msgid "Free"
+msgstr "Frjálst"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:945
+msgid "Proprietary"
+msgstr "Séreignarhugbúnaður"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:995 src/gs-installed-page.c:478
+#: plugins/core/gs-desktop-common.c:317
+msgid "Add-ons"
+msgstr "Viðbætur"
+
+#: src/gs-details-page.ui:1007
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1045
+msgid "Reviews"
+msgstr "Umsagnir"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1063
+msgid "_Write a Review"
+msgstr "Skrifa _umsögn"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1084
+msgid "_Show More"
+msgstr "_Birta meira"
+
+#: src/gs-details-page.ui:1212
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+
+#: src/gs-details-page.ui:1252
+msgid "Proprietary Software"
+msgstr "Séreignarhugbúnaður"
+
+#: src/gs-details-page.ui:1263
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+
+#: src/gs-details-page.ui:1295
+msgid "Unknown Software License"
+msgstr "Óþekkt hugbúnaðarleyfi"
+
+#: src/gs-details-page.ui:1306
+msgid "The license terms of this software are unknown."
+msgstr ""
+
+#: src/gs-details-page.ui:1326
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1340
+msgid "No details were available for this rating."
+msgstr ""
+
+#: src/gs-editor.c:347
+msgid "CSS validated OK!"
+msgstr ""
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:550
+msgid "Failed to load file"
+msgstr "Mistókst að hlaða inn skrá"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:584 src/gs-editor.c:860
+msgid "Unsaved changes"
+msgstr "Óvistaðar breytingar"
+
+#: src/gs-editor.c:586
+msgid "The application list is already loaded."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:590
+msgid "Merge documents"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:594 src/gs-editor.c:865
+msgid "Throw away changes"
+msgstr "Henda breytingum"
+
+#. import the new file
+#: src/gs-editor.c:606 src/gs-editor.c:638
+msgid "Open AppStream File"
+msgstr ""
+
+#: src/gs-editor.c:610
+msgid "_Open"
+msgstr "_Opna"
+
+#: src/gs-editor.c:642
+msgid "_Save"
+msgstr "Vi_sta"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:662
+msgid "Failed to save file"
+msgstr "Tókst ekki að vista skrá"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:737
+#, c-format
+msgid "%s banner design deleted."
+msgstr ""
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:740
+msgid "Banner design deleted."
+msgstr ""
+
+#: src/gs-editor.c:862
+msgid "The application list has unsaved changes."
+msgstr ""
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1096
+msgid "Use verbose logging"
+msgstr ""
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1104
+#, fuzzy
+#| msgid "GNOME Software"
+msgid "GNOME Software Banner Designer"
+msgstr "GNOME hugbúnaður"
+
+#: src/gs-editor.ui:53 src/gs-editor.ui:62
+msgid "No Designs"
+msgstr ""
+
+#: src/gs-editor.ui:137
+msgid "Error message here"
+msgstr "Villuskilaboð hér"
+
+#: src/gs-editor.ui:196
+msgid "App ID"
+msgstr "Auðkenni forrits"
+
+#: src/gs-editor.ui:253 src/gs-review-dialog.ui:109
+msgid "Summary"
+msgstr "Samantekt"
+
+#: src/gs-editor.ui:278
+msgid "Editor’s Pick"
+msgstr "Valið af ritstjórn"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:287
+msgid "Category Featured"
+msgstr "Flokkur í deiglunni"
+
+#. button in the info bar
+#: src/gs-editor.ui:336
+msgid "Undo"
+msgstr "Afturkalla"
+
+#: src/gs-editor.ui:371 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr ""
+
+#: src/gs-editor.ui:392
+msgid "New Banner"
+msgstr "Nýr borði"
+
+#: src/gs-editor.ui:452
+msgid "Import from file"
+msgstr "Flytja inn úr skrá"
+
+#: src/gs-editor.ui:461
+msgid "Export to file"
+msgstr "Flytja út í skrá"
+
+#: src/gs-editor.ui:470
+msgid "Delete Design"
+msgstr ""
+
+#: src/gs-editor.ui:491
+msgid "Featured App"
+msgstr "Forrit í deiglunni"
+
+#: src/gs-editor.ui:500
+msgid "OS Upgrade"
+msgstr "Uppfærsla stýrikerfis"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:133
+msgid " and "
+msgstr " og "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:136
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:162
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tiltækt letur fyrir %s skriftuna"
+msgstr[1] "Tiltækt letur fyrir %s skrifturnar"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:170
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Tiltækur hugbúnaður fyrir %s"
+msgstr[1] "Tiltækur hugbúnaður fyrir %s"
+
+#: src/gs-extras-page.c:212
+msgid "Unable to Find Requested Software"
+msgstr ""
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:317
+#, c-format
+msgid "%s not found"
+msgstr "%s fannst ekki"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:321
+msgid "on the website"
+msgstr "á vefsvæðinu"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:332 src/gs-extras-page.c:343 src/gs-extras-page.c:354
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339 src/gs-extras-page.c:361
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350
+#, c-format
+msgid "%s is not available."
+msgstr "%s er ekki tiltækt."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:372
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:453
+msgid "this website"
+msgstr ""
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:457
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:525 src/gs-extras-page.c:581 src/gs-extras-page.c:620
+msgid "Failed to find any search results"
+msgstr ""
+
+#: src/gs-extras-page.c:808
+#, c-format
+msgid "%s file format"
+msgstr "%s skráasnið"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Velkomin"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Velkomin í hugbúnaðarstýringuna"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr ""
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:367
+msgid "Spacing"
+msgstr "Millibil"
+
+#: src/gs-hiding-box.c:368
+msgid "The amount of space between children"
+msgstr "Bil milli afleiða"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr "Fjarlægt"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "Uppsett"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "Uppfært"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Óþekkt"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Ferill"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:474
+msgid "System Applications"
+msgstr "Kerfisforrit"
+
+#: src/gs-installed-page.c:608
+msgid "Click on items to select them"
+msgstr "Smelltu á atriði til að velja þau"
+
+#: src/gs-installed-page.c:812
+msgid "Select"
+msgstr "Velja"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr ""
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "Bæt_a í möppu…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "Flytja í _möppu…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "Fja_rlægja úr möppu"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr ""
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Hleð inn síðu"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Keyri upp…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr ""
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:77
+msgid "system"
+msgstr "kerfis"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:80
+msgid "user"
+msgstr "notanda"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Slóð (URL)"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Snið"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+#| msgid "Installing"
+msgid "Installation"
+msgstr "Uppsetning"
+
+#. add button
+#: src/gs-overview-page.c:318
+msgid "More…"
+msgstr "Meira…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:596
+msgid "Recommended Audio & Video Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:601
+msgid "Recommended Games"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:606
+msgid "Recommended Graphics Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:611
+msgid "Recommended Productivity Applications"
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:993 src/gs-repos-dialog.c:822
+msgid "Access additional software from selected third party sources."
+msgstr "Settu upp hugbúnað frá utanaðkomandi aðilum/upptökum."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:997 src/gs-repos-dialog.c:826
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Sumt af þessu hugbúnaði er séreignarhugbúnaður og er þar af leiðandi með "
+"hömlur á notkun, deilingu og aðgangi að grunnkóða."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:1002 src/gs-repos-dialog.c:831
+msgid "Find out more…"
+msgstr "Frekari upplýsingar…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:1010 src/gs-repos-dialog.c:239
+msgid "Enable"
+msgstr "Virkja"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Yfirlitssíða"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Virkja hugbúnaðarsöfn annarra aðila?"
+
+#: src/gs-overview-page.ui:83
+#| msgid "System Applications"
+msgid "Featured Applications"
+msgstr "Helstu forrit"
+
+#: src/gs-overview-page.ui:116
+msgid "Categories"
+msgstr "Flokkar"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:232
+msgid "Editor’s Picks"
+msgstr ""
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:258
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:328
+msgid "No Application Data Found"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:482
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "Ertu viss um að þú viljir kaupa %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:486
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr ""
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:499
+msgid "Purchase"
+msgstr "Kaupa"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:573
+#, c-format
+msgid "Prepare %s"
+msgstr "Undirbúa %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:710
+#, c-format
+#| msgid "Are you sure you want to remove %s?"
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Ertu viss um að þú viljir fjarlægja %s hugbúnaðarsafnið?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:714
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:722
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Ertu viss um að þú viljir fjarlægja %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:725
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:57 src/gs-summary-tile.c:59
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (uppsett)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:43
+#| msgid "Restart & Update"
+msgid "Automatic Updates"
+msgstr "Sjálfvirkar uppfærslur"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+
+#: lib/gs-price.c:97
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:99
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:101
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:103
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:105
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:107
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:109
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:117
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:113
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Halda áfram"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:96
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u forrit uppsett"
+msgstr[1] "%u forrit uppsett"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:103
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u viðbót uppsett"
+msgstr[1] "%u viðbætur uppsettar"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:111
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u forrit"
+msgstr[1] "%u forrit"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u viðbót"
+msgstr[1] "%u viðbætur"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:124
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s og %s uppsett"
+msgstr[1] "%s og %s uppsett"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:299
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Fjarlægja „%s“?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:304
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Gera “%s” óvirkt?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:308
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:326
+msgid "Disable"
+msgstr "Gera óvirkt"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:735
+msgid "the operating system"
+msgstr ""
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:801 src/gs-repos-dialog.c:837
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:819
+msgid "Third Party Repositories"
+msgstr "Hugbúnaðarsöfn annarra aðila"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "V_irkja"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Fja_rlægja…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Gera óvirkt…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Virkja"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Geri óvirkt"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Virkt"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Óvirkt"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "Hata það"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "Líkar það ekki"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "Það er í lagi"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "Líkar það"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "Kann mjög vel við"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr ""
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Senda umsögn"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Senda inn"
+
+#: src/gs-review-dialog.ui:75
+msgid "Rating"
+msgstr "Einkunn"
+
+#: src/gs-review-dialog.ui:119
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:144
+msgctxt "app review"
+msgid "Review"
+msgstr "Yfirfara"
+
+#: src/gs-review-dialog.ui:154
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:220
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:225
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:239
+msgid "Report Review?"
+msgstr ""
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:243
+msgid "Report"
+msgstr "Skýrsla"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr ""
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Já"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nei"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Skýrsla…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Fjarlægja…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr "Skjámynd fannst ekki"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr "Get ekki opnað myndina"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:375
+msgid "Screenshot size not found"
+msgstr ""
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:405
+msgid "Could not create cache"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:465
+msgid "Screenshot not valid"
+msgstr ""
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:480
+msgid "Screenshot not available"
+msgstr ""
+
+#: src/gs-screenshot-image.c:532
+msgid "Screenshot"
+msgstr "Skjámynd"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:141
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Leitarsíða"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Ekkert forrit fannst"
+
+#. TRANSLATORS: menu item that signs into the named account with a particular username
+#: src/gs-shell.c:736
+#, c-format
+msgid "Signed in as %s"
+msgstr ""
+
+#. TRANSLATORS: menu item that signs into the named account
+#: src/gs-shell.c:740
+#, c-format
+msgid "Sign in…"
+msgstr ""
+
+#. TRANSLATORS: menu item for signing out from the named account
+#: src/gs-shell.c:748
+#, c-format
+msgid "Sign out"
+msgstr ""
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:941 src/gs-shell.c:946 src/gs-shell.c:961 src/gs-shell.c:965
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1012
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1018
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1025 src/gs-shell.c:1070
+msgid "Unable to download updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1031
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1040
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1045
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1052
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1057
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1062
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1073
+msgid "Unable to get list of updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to purchase %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1116
+#, c-format
+msgid "Unable to purchase %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1123
+#, c-format
+msgid "Unable to purchase %s: no payment method setup"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1130
+#, c-format
+msgid "Unable to purchase %s: payment was declined"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1137
+#, c-format
+msgid "Unable to purchase %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1169
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1175
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1194
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1207
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1212
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1219
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1226
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1233
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1241
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1250
+#, c-format
+msgid "Unable to install %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1297
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1304
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1315
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1321
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1331
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1346
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1351
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1360
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1380
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1390
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1396
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1407
+#, c-format
+msgid "Unable to update %s"
+msgstr "Tókst ekki að uppfæra %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1410
+#, c-format
+#| msgid "Unable to update %s"
+msgid "Unable to install updates"
+msgstr "Tókst ekki að setja inn uppfærslur"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1453
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1458
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1467
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1476
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1491
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1505
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1552
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1558
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1564
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1571
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1583
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Mistókst að fjarlægja %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1626
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1633 src/gs-shell.c:1684 src/gs-shell.c:1725
+#: src/gs-shell.c:1773
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1644 src/gs-shell.c:1695 src/gs-shell.c:1736
+#: src/gs-shell.c:1803
+msgid "Sorry, something went wrong"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1676
+#| msgid "Failed to save file"
+msgid "Failed to install file: not supported"
+msgstr "Ekki tókst að setja upp skrána: ekki studd"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1680
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1717
+msgid "Failed to install: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1721
+#| msgid "Failed to save file"
+msgid "Failed to install: authentication failed"
+msgstr "Ekki tókst að setja upp skrána: auðkenning mistókst"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1767
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1782
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1787
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1794
+msgid "AC power is required"
+msgstr ""
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "Uppruni: %s"
+
+#: src/gs-summary-tile.c:64
+#, c-format
+msgid "%s (Installing)"
+msgstr ""
+
+#: src/gs-summary-tile.c:69
+#, c-format
+msgid "%s (Removing)"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr "Fja_rlægja allt"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:186
+msgid "No update description available."
+msgstr ""
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:290
+#, c-format
+msgid "Installed on %s"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:310
+msgid "Installed Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:526
+msgid "Additions"
+msgstr "Viðbætur"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:530
+msgid "Removals"
+msgstr "Fjarlægingar"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:534
+msgid "Updates"
+msgstr "Uppfærslur"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:538
+msgid "Downgrades"
+msgstr "Niðurfærslur"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr ""
+
+#: src/gs-update-monitor.c:92
+msgid "Security Updates Pending"
+msgstr ""
+
+#: src/gs-update-monitor.c:93
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: src/gs-update-monitor.c:96
+msgid "Restart & Install"
+msgstr "Endurræsa og setja inn"
+
+#: src/gs-update-monitor.c:100
+msgid "Software Updates Available"
+msgstr ""
+
+#: src/gs-update-monitor.c:101
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:104 src/gs-updates-section.c:323
+msgid "Not Now"
+msgstr "Ekki núna"
+
+#: src/gs-update-monitor.c:105
+msgid "View"
+msgstr "Skoða"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:203
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:209
+#, c-format
+#| msgid "No Application Found"
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u forrit uppfært"
+msgstr[1] "%u forrit uppfærð"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:220
+#, c-format
+msgid "%s has been updated."
+msgstr ""
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:223
+#| msgid "Choose an application:"
+msgid "Please restart the application."
+msgstr "Endurræstu forritið."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:231
+#, c-format
+msgid "%s and %s have been updated."
+msgstr ""
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:237 src/gs-update-monitor.c:256
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr ""
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:479 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr ""
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:481
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:536
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:540
+msgid "Software Upgrade Available"
+msgstr ""
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:842
+msgid "Software Updates Failed"
+msgstr ""
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:844
+msgid "An important OS update failed to be installed."
+msgstr ""
+
+#: src/gs-update-monitor.c:845
+msgid "Show Details"
+msgstr "Sýna nánar"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:868
+msgid "System Upgrade Complete"
+msgstr ""
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:873
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr ""
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:879
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:883
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:894
+msgctxt "updates"
+msgid "Review"
+msgstr "Yfirfara"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:942
+msgid "Failed To Update"
+msgstr ""
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:948
+msgid "The system was already up to date."
+msgstr ""
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:953
+msgid "The update was cancelled."
+msgstr ""
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:959
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:965
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:971
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:976
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "Í gær kl. %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "Í gær, kl. %I:%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "Fyrir tveimur dögum síðan"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "Fyrir þremur dögum síðan"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "Fyrir fjórum dögum síðan"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "Fyrir fimm dögum síðan"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "Fyrir sex dögum síðan"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "Fyrir viku síðan"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "Fyrir tveimur vikum síðan"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%e. %B %Y"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr ""
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr ""
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+msgid "Charges may apply"
+msgstr "Gjöld gætu fylgt gagnamagni"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+msgid "Check Anyway"
+msgstr ""
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "Engin nettenging"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr ""
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1339
+#| msgid "Removing…"
+msgid "Checking…"
+msgstr "Athuga..."
+
+#: src/gs-updates-page.c:1352
+msgid "Check for updates"
+msgstr "Leita að uppfærslum"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr ""
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr ""
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr ""
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Netstillingar"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr ""
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:273
+msgid "Restart & Update"
+msgstr "Endurræsa & uppfæra"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:279
+msgid "Update All"
+msgstr "Uppfæra allt"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-section.c:319
+msgid "Updates have been installed"
+msgstr ""
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-section.c:321
+msgid "A restart is required for them to take effect."
+msgstr ""
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:421
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:425
+msgid "Requires Restart"
+msgstr "Krefst endurræsingar"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:429
+msgid "Application Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:433
+msgid "Device Firmware"
+msgstr ""
+
+#: src/gs-updates-section.c:461 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "Sæ_kja"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:71
+#, c-format
+msgid "%s %s Now Available"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:81
+#, c-format
+msgid "Downloading %s %s"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:92
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Vita meira"
+
+#: src/gs-upgrade-banner.ui:85
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Hljóðvinnsla og blöndun"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Tónlistarspilarar"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Aflúsarar"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Forritunarumhverfi"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Gervigreind"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Stjörnufræði"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Efnafræði"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Tungumál"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Stærðfræði"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Vélmennafræði"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Aðgerð"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Ævintýraleikir"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Spilasalur"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Kubbar"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Borðleikir"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Spjald"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Hermar"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Krakkaleikir"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Rökrænt"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Hlutverkaleikir"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Íþróttir"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Herkænska"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Þrívíddarmyndvinnsla"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Ljósmyndun"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skönnun"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vigrateikning"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Skoðarar"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Dagatal"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Gagnagrunnar"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Fjármál"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Ritvinnsla"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Letur"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kóðunarlyklar (codecs)"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Inntaksgjafar"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Tungumálapakkar"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Shell Extension skeljarviðbætur"
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Staðfærsla"
+
+#: plugins/core/gs-desktop-common.c:212
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Vélbúnaðarreklar"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Spjall"
+
+#: plugins/core/gs-desktop-common.c:233
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Fréttir"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Netvafrar"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Textaritlar"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Allt"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Í deiglunni"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Listir"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Æviágrip"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Myndasögur"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Skáldskapur"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Heilsa"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Ferill"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Lífstíll"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Pólitík"
+
+#: plugins/core/gs-desktop-common.c:289
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Íþróttir"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:299
+msgid "Audio & Video"
+msgstr "Hjóð/Myndskeið"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:302
+msgid "Developer Tools"
+msgstr "Forritunartól"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:305
+msgid "Education & Science"
+msgstr "Menntun & vísindi"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:308
+msgid "Games"
+msgstr "Leikir"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:311
+msgid "Graphics & Photography"
+msgstr "Ljósmyndun og myndefni"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:314
+msgid "Productivity"
+msgstr "Vinna"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:320
+msgid "Communication & News"
+msgstr "Samskipti og fréttir"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:323
+msgid "Reference"
+msgstr "Uppflettirit"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:326
+msgid "Utilities"
+msgstr "Nytjatól"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "Uppfærslur stýrikerfis"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:138
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:140
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:147
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:154
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:162
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:169
+msgid "Failed to copy"
+msgstr "Mistókst að afrita"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:229
+msgid "Downloading extra metadata files…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "Sæki upplýsingar um uppfærslu…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:824
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:663
+msgid "Downloading firmware update signature…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:704
+msgid "Downloading firmware update metadata…"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:195
+msgid "Downloading application ratings…"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:403
+msgid "GNOME Shell Extensions Repository"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:800
+msgid "Downloading shell extension metadata…"
+msgstr ""
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:900
+#| msgctxt "Menu of Add-ons"
+#| msgid "Shell Extensions"
+msgid "GNOME Shell Extension"
+msgstr "GNOME Shell Extension skeljarviðbætur"
+
+#: plugins/snap/gs-plugin-snap.c:67 plugins/snap/gs-plugin-snap.c:69
+msgid "To continue, you need to use an Ubuntu One account."
+msgstr ""
+
+#: plugins/snap/gs-plugin-snap.c:68
+msgid "To continue, you need to use your Ubuntu One account."
+msgstr ""
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:224
+msgid "Snap Store"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+#| msgid "Steam Support"
+msgid "Snap Support"
+msgstr "Stuðningur við Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#~ msgid "Email address"
+#~ msgstr "Tölvupóstfang"
+
+#~ msgid "Password"
+#~ msgstr "Lykilorð"
+
+#~ msgid "PIN"
+#~ msgstr "PIN-númer"
+
+#~ msgid "Authenticate"
+#~ msgstr "Auðkenna"
+
+#~ msgid "_About"
+#~ msgstr "_Um hugbúnaðinn"
+
+#~ msgid "_Quit"
+#~ msgstr "_Hætta"
+
+#~| msgid "More information"
+#~ msgid "For more information, visit %s."
+#~ msgstr "Til að vita meira ættirðu að skoða %s."
+
+#~| msgid "Restart & Install"
+#~ msgid "_Restart & Update"
+#~ msgstr "Endu_rræsa & uppfæra"
+
+#~| msgid "_Update"
+#~ msgid "U_pdate All"
+#~ msgstr "U_ppfæra allt"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Endurræsa og setja _inn"
+
+#~| msgid "Software"
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "About Software"
+#~ msgstr "Um hugbúnaðinn"
+
+#~ msgid "Total"
+#~ msgstr "Samtals"
+
+#~ msgid "_Install All"
+#~ msgstr "Setja allt _inn"
+
+#~ msgid "Other Updates"
+#~ msgstr "Aðrar uppfærslur"
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Upptök séreignarhugbúnaðar"
+
+#~ msgid "Added"
+#~ msgstr "Bætt við"
+
+#~ msgid "Website"
+#~ msgstr "Vefsvæði"
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ekkert"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Stjörnufræði"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Efnafræði"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Stærðfræði"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Allt"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Í deiglunni"
+
+#~ msgid "Science"
+#~ msgstr "Vísindi"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..28f6648
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,4434 @@
+# Italian translation of gnome-software
+# Copyright (C) 2013-2019, 2020 Free Software Foundation
+# This file is distributed under the same license as the gnome-software package.
+# Milo Casagrande <milo@milo.name>, 2020.
+# Gianvito Cavasoli <gianvito@gmx.it>, 2013-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software 3.26\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-09-08 14:16+0200\n"
+"Last-Translator: Gianvito Cavasoli <gianvito@gmx.it>\n"
+"Language-Team: Italian <gnome-it-list@gnome.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Gtranslator 3.36.0\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestore applicazioni per GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software consente di trovare e installare nuove applicazioni, estensioni di "
+"sistema e rimuovere applicazioni già esistenti."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software mette in evidenza in bacheca le applicazioni popolari con "
+"descrizioni utili e molte schermate per ogni applicazione. Le applicazioni "
+"possono essere trovate sia esplorando l'elenco delle categorie sia usando la "
+"ricerca. Consente anche di aggiornare il sistema usando un aggiornamento "
+"fuori rete."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Riquadro panoramica"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Riquadro dettagli"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Riquadro installato"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Riquadro aggiornamenti"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "I dettagli dell'aggiornamento"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Il progetto GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installa un file appstream in una posizione del sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installazione di un file appstream in una posizione del sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Un elenco di progetti compatibili"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Questo è un elenco di progetti compatibili che si dovrebbero mostrare, come "
+"GNOME, KDE e XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Indica se gestire gli aggiornamenti e gli avanzamenti in GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Se disabilitata, GNOME Software nasconderà il riquadro aggiornamenti e non "
+"eseguirà alcuna azione automatica degli aggiornamenti o proporrà degli "
+"avanzamenti."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Scarica automaticamente e installa gli aggiornamenti"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Se abilitata, GNOME Software scaricherà automaticamente in background gli "
+"aggiornamenti software, e installerà anche quelli che non richiedono un "
+"riavvio."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notifica l'utente sul software aggiornato in bakcground"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Se abilitata, GNOME Software notificherà sul software aggiornato mentre "
+"l'utente era inattivo."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Indica se aggiornare automaticamente quando si è su una connessione a consumo"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Se abilitata, GNOME Software aggiornerà automaticamente in background anche "
+"quando si sta usando una connessione a consumo (eventualmente scaricando "
+"alcuni metadati, controllando gli aggiornamenti, eccetera, che possono "
+"incorrere in costi per l'utente)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Indica se è la prima volta che si esegue GNOME Software"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostra le stelle di valutazione accanto alle applicazioni"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtra applicazioni basate sul ramo base predefinito per il remoto"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Le applicazioni non libere mostreranno un dialogo di avvertimento prima di "
+"installarle"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quando applicazioni non libere sono installate un dialogo di avvertimento "
+"può essere visualizzato. Questo verifica se tale finestra è soppressa."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Un elenco di applicazioni popolari"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Un elenco di applicazioni da usare, ignorando quelle definite dal sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "La data del controllo dell'ultimo aggiornamento"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "La data dell'ultima notifica di avanzamento"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"La data del primo aggiornamento di sicurezza, pulito dopo l'aggiornamento"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "La data dell'ultimo aggiornamento"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"La data dell'ultima volta che il sistema è stato in rete e ha ricevuto degli "
+"aggiornamenti"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"La data in secondi per verificare che la schermata upstream sia ancora valida"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Scegliere un valore alto sta a significare meno traffico in entrata e in un "
+"uscita al server remoto ma gli aggiornamenti alle schermate potrebbero "
+"prendere più tempo per essere mostrate all'utente. Un valore di 0 significa "
+"non controllare mai il server se l'immagine esiste già nella cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Il server da usare per le recensioni delle applicazioni"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Il punteggio minimo di karma per le recensioni"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+"Recensioni con karma inferiore a questo numero non saranno visualizzate."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Un elenco di repository ufficiali che non devono essere considerati di terze "
+"parti"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Un elenco di repository ufficiali che devono essere considerati software "
+"libero"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"L'URL della licenza da usare quando un'applicazione è stata considerata "
+"software libero"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Dove possibile, installare le applicazioni raggruppate per tutti gli utenti "
+"sul sistema"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Consente l'accesso alla finestra di dialogo Repository software"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Propone gli avanzamenti di pre-rilascio"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostra alcuni elementi di interfaccia che informino l'utente che "
+"un'applicazione non è libera"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Mostra la richiesta di installare repository software non liberi"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostra la dimensione installata per le applicazioni nell'elenco delle "
+"applicazioni installate"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://it.wikipedia.org/wiki/Software_proprietario'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "L'URI che spiega il software non libero e proprietario"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Un elenco di URL che punta a file appstream che saranno scaricati in una "
+"cartella app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Installa un file appstream in una posizione del sistema per tutti gli utenti"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Abilita il repository delle estensioni di GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Una stringa che salva l'identificativo di gnome-online-account usato per "
+"l'accesso"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Installa software"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installa il software selezionato sul sistema"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Seleziona tutto"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Nessuna selezione"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Repository _software"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Preferenze di aggiornamento"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Vai indietro"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Esplora"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installato"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Aggiornamenti"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Cerca"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Sorgente"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repository software"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Esamina disco"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Impostazioni rete"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Riavvia ora"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Maggiori informazioni"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Aggiornamenti automatici in pausa"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Scopri di _più"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "File locale"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pacchetto"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "In attesa"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installato"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installazione"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Rimozione"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Modalità d'avvio: a scelta fra \"updates\", \"updated\", \"installed\" o "
+"\"overview\""
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODALITÀ"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Cerca le applicazioni"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "CERCA"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostra i dettagli dell'applicazione (usando l'ID dell'applicazione)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostra i dettagli dell'applicazione (usando il nome del pacchetto)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Installare l'applicazione (usando l'ID dell'applicazione)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Apre un file di pacchetto locale"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NOMEFILE"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Il tipo di interazione prevista per questa azione: una fra \"none\", \"notify"
+"\" o \"full\""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostra informazioni dettagliate di debug"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installa in background gli aggiornamenti in attesa"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostra le preferenze di aggiornamento"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Chiudere l'istanza in esecuzione"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferire sorgenti di file locali ad AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostra il numero della versione"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Gianvito Cavasoli <gianvito@gmx.it>\n"
+"\n"
+"...e un ringraziamento ai revisori del Translation Project."
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+#| msgid "Software"
+msgid "About Software"
+msgstr "Informazioni su Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Un piacevole modo per gestire il software sul sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Non ci sono dettagli per questa applicazione."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visita sito web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installa…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Annulla"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installa"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Aggiorna"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Rimuovi"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Il dispositivo non può essere usato durante l'aggiornamento."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Richiede permessi aggiuntivi"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "L'accesso richiede %s remoto (%s realm)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Accesso richiesto"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Annulla"
+
+#: src/gs-basic-auth-dialog.ui:39
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "A_ccedi"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Utente"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Pass_word"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Altro"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Tutte"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "In evidenza"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "In evidenza in %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Valutazione"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nome"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostra"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menù filtro delle sottocategorie"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordina"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menù ordinamento delle sottocategorie"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Immettere un numero da 1 a %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Scegli un'applicazione:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Gli aggiornamenti del sistema sono ora installati"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Gli aggiornamenti recentemente installati sono disponibili per essere "
+"esaminati"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s è ora installato"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "È richiesto un riavvio per rendere effettive le modifiche."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "L'applicazione è pronta per essere usata."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Riavvia"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Avvia"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Installare software di terze parti?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Abilitare repository software di terze parti?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s non è <a href=\"https://it.wikipedia.org/wiki/"
+"Free_and_Open_Source_Software\">software libero e open source</a>, ed è "
+"fornito da «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s è fornito da «%s»."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Questo repository software deve essere abilitato per continuare "
+"l'installazione."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Può essere illegale installare o usare %s in alcuni paesi."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Può essere illegale installare o usare questo codec in alcuni paesi."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Non avvisare più"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Abilita e installa"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Seguono gli errori dettagliati del gestore dei pacchetti:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Dettagli"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Un aggiornamento è stato installato"
+msgstr[1] "Degli aggiornamenti sono stati installati"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "È richiesto un riavvio per cui abbia effetto."
+msgstr[1] "È richiesto un riavvio per cui abbiano effetto."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Non adesso"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Nessuna violenza nel cartone animato"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personaggi dei cartoni animati in situazioni rischiose"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personaggi dei cartoni animati in conflitti aggressivi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violenza grafica che coinvolge personaggi dei cartoni animati"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Nessuna violenza nel fantasy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personaggi in situazioni rischiose facilmente distinguibili dalla realtà"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Personaggi in conflitti aggressivi facilmente distinguibili dalla realtà"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violenza grafica facilmente distinguibile dalla realtà"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Nessuna violenza realistica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personaggi lievemente realistici in situazioni rischiose"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Raffigurazioni di personaggi realistici in conflitti aggressivi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Violenza grafica che coinvolge personaggi realistici"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Nessun eccidio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Eccidio non realistico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Eccidio realistico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Raffigurazioni di eccidi e mutilazioni di parti del corpo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Nessuna violenza sessuale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Stupro o altri comportamenti sessuali violenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Nessun riferimento all'alcol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Riferimenti a bevande alcoliche"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Uso di bevande alcoliche"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Nessun riferimento a droghe illecite"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Riferimenti a droghe illecite"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uso di droghe illecite"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Nessun riferimento a prodotti del tabacco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Riferimenti a prodotti del tabacco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uso di prodotti del tabacco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Nessuna nudità di qualsiasi sorta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Breve nudità artistica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Nudità prolungata"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Nessun riferimento a/o raffigurazione di natura sessuale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Riferimenti o raffigurazioni provocanti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Riferimenti o raffigurazioni sessuali"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Comportamento grafico sessuale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Nessuna volgarità di qualsiasi tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Lieve o infrequente uso di volgarità"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Moderato uso di volgarità"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Forte o frequente uso di volgarità"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Nessun umorismo inappropriato"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Umorismo da pagliacciata"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Umorismo volgare o da gabinetto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Umorismo maturo o sessuale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Nessun linguaggio discriminatorio di qualsiasi tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatività verso un gruppo specifico di persone"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminazione progettata per causare danni emotivi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminazione esplicita basata sul sesso, sessualità, razza o religione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Nessuna pubblicità di qualsiasi tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Inserimento prodotto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Riferimenti espliciti a specifici marchi o prodotti commerciali"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Gli utenti sono incoraggiati ad acquistare specifici oggetti del mondo reale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Nessun gioco d'azzardo di qualsiasi tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Gioco d'azzardo su eventi casuali che usano gettoni o crediti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Gioco d'azzardo che usa soldi «di gioco»"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Gioco d'azzardo che usa soldi veri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Nessuna possibilità di spendere soldi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Gli utenti sono incoraggiati a donare moneta reale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Possibilità di spendere soldi veri nell'applicazione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Nessuna possibilità di conversare con altri utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interazioni fra utenti senza funzionalità di chat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funzionalità di chat moderata fra utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funzionalità di chat non controllata fra utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Nessuna possibilità di parlare con altri utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Funzionalità di chat audio e video non controllata fra utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Nessuna condivisione di nomi utente di social network o di indirizzi email"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Condivisione di nomi utente di social network o di indirizzi email"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Nessuna condivisione di informazioni dell'utente con terze parti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Verifica dell'ultima versione dell'applicazione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Condivisione di dati diagnostici che non consentono agli altri di "
+"identificare l'utente"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Condivisione di informazioni che consentono ad altri di identificare l'utente"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Nessuna condivisione della posizione fisica con altri utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Condivisione della posizione fisica con altri utenti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Neessun riferimento all'omosessualità"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Riferimenti indiretti all'omosessualità"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Effusioni fra persone dello stesso sesso"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportamento sessuale grafico fra persone dello stesso sesso"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Nessun riferimento alla prostituzione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Riferimenti indiretti alla prostituzione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Riferimenti diretti alla prostituzione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Rappresentazioni grafiche dell'atto di prostituzione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Nessun riferimento all'adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Riferimenti indiretti all'adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Riferimenti diretti all'adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Rappresentazioni grafiche dell'atto dell'adulterio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Nessuna personaggio sessualizzato"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Personaggi umani poco vestiti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Personaggi umani sessualizzati in modo anomalo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Nessun riferimento alla profanazione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Raffigurazioni o riferimenti alla profanazione storica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Rappresentazioni della moderna dissacrazione umana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Rappresentazioni grafiche di moderna profanazione"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Nessun resto visibile di umano morto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Resti visibili di umano morto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Resti di umano morto che è stato esposto agli elementi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Rappresentazioni grafiche della profanazione di corpi umani"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Nessun riferimento alla schiavitù"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Raffigurazioni o riferimenti alla schiavitù storica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Rappresentazioni della schiavitù moderna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Rappresentazioni grafiche della schiavitù moderna"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Generale"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Tutto"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Solo per adulti"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Maturo"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescente"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Chiunque di 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Chiunque"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Prima infanzia"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Un'applicazione"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s richiede supporto per il formato di file aggiuntivi."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Tipi di MIME aggiuntivi richiesti"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s richiede tipi di carattere aggiuntivi."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Tipi di carattere aggiuntivi richiesti"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s richiede codec multimediali aggiuntivi."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Codec multimediali aggiuntivi richiesti"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s richiede driver di stampa aggiuntivi."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Driver di stampa aggiuntivi richiesti"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s richiede pacchetti aggiuntivi."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Pacchetti aggiuntivi richiesti"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Trova in Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Rimozione…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Installazione in attesa…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Aggiornamento in attesa…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "Preparazione…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Questa applicazione può essere usata solo quando c'è una connessione a "
+"Internet attiva."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installa"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installa…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Avvia"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Rimuovi"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Rete"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Può comunicare attraverso la rete"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Servizi di sistema"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Può accedere ai servizi D-Bus sul bus di sistema"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Servizi di sessione"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Può accedere ai servizi D-Bus sul bus di sessione"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositivi"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Può accedere ai file di sistema del dispositivo"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Cartella home"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Può visualizzare, modificare e creare file"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Può visualizzare file"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "File system"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Cartella degli scaricamenti"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Può visualizzare e modificare qualsiasi impostazione"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistema di visualizzazione legacy"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Usa un vecchio sistema di visualizzazione non sicuro"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Evita ambiente di prova"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Può sfuggire l'ambiente di prova ed aggirare ogni altra restrizione"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Questa applicazione è completamente in modalità sandbox."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Impossibile determinare a quali parti del sistema accede questa "
+"applicazione. Questo è tipico per le vecchie applicazioni."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Sconosciuta"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Mai"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Sconosciuta"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Bassa"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Media"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Alta"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Sconosciuta"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "È necessario un accesso Internet per scrivere una recensione"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Impossibile trovare «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Dominio pubblico"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://it.wikipedia.org/wiki/Pubblico_dominio"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.it"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software libero"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Gli utenti sono vincolati dalla seguente licenza:"
+msgstr[1] "Gli utenti sono vincolati dalle seguenti licenze:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Maggiori informazioni"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pagina dettagli"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Scaricamento"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Aggiorna"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "A_ggiungi scorciatoia"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Ri_muovi scorciatoia"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nessuna schermata fornita"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Repository software incluso"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Questa applicazione include un repository software che fornisce "
+"aggiornamenti, nonché l'accesso ad altri software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Nessun repository software incluso"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Questa applicazione non include un repository software. Non verrà aggiornata "
+"con nuove versioni."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Questo software è già fornito dalla distribuzione e non dovrebbe essere "
+"sostituito."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Repository software identificato"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"L'aggiunta di questo repository software darà l'accesso a software e "
+"aggiornamenti aggiuntivi."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Usare solo repository software di cui si ha fiducia."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Sito _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donazione"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Localizzata nella lingua in uso"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentazione"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Attività di rilascio"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integrazione nel sistema"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Ambiente di prova"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canale"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versione"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Fasce di età"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permessi"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Aggiornata"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categoria"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Dimensione installata"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Dimensione scaricamento"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Sviluppatore"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licenza"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Libera"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietaria"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Estensioni"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "L'estensione selezionata sarà installata con l'applicazione."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recensioni"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Scri_vi una recensione"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mostra altre"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Questo significa che il software può essere liberamente eseguito, copiato, "
+"distribuito, studiato e modificato."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Software proprietario"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Questo significa che il software è di proprietà di un individuo o di una "
+"società. Spesso ci sono restrizioni sul suo uso e il suo codice sorgente di "
+"solito non può essere accessibile."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licenza software sconosciuta"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "I termini della licenza di questo software sono sconosciuti."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+"L'applicazione è stata valutata in questo modo perché ha queste funzionalità:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Non è disponibile nessuna informazione per questa valutazione."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " e "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tipi di carattere disponibili per la scrittura %s"
+msgstr[1] "Tipi di carattere disponibili per le scritture %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Software disponibile per %s"
+msgstr[1] "Software disponibili per %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Impossibile trovare il software richiesto"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s non trovato"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "sul sito web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Non è disponibile alcuna applicazione che fornisce il file %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Le informazioni su %s, così come le opzioni su come ottenere le applicazioni "
+"mancanti potrebbero essere trovate su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Non è disponibile nessuna applicazione per il supporto di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s non è disponibile."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Le informazioni su %s, così come le opzioni su come ottenere l'applicazione "
+"mancante che può supportare questo formato potrebbero essere trovate su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+"Non è disponibile nessun tipo di carattere aggiuntivo per il supporto alla "
+"scrittura %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Le informazioni su %s, così come le opzioni su come ottenere tipi di "
+"carattere aggiuntivi potrebbero essere trovate su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Non è disponibile nessun codec per il formato %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Le informazioni su %s, così come le opzioni su come ottenere un codec per "
+"riprodurre questo formato potrebbero essere trovate su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Non è disponibile nessuna risorsa di Plasma per il supporto di %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Le informazioni su %s, così come le opzioni su come ottenere risorse "
+"aggiuntive per Plasma potrebbero essere trovate su %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Non è disponibile nessun driver di stampa per %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Le informazioni su %s, così come le opzioni su come ottenere un driver che "
+"supporti questa stampante potrebbero essere trovate su %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "questo sito web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Sfortunatamente, si stava cercando %s e non è stato possibile trovarlo. "
+"Consultare %s per maggiori informazioni."
+msgstr[1] ""
+"Sfortunatamente, si stava cercando %s e non è stato possibile trovarli. "
+"Consultare %s per maggiori informazioni."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Impossibile trovare alcun risultato della ricerca"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Formato di file %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Pagina dei codec"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Benvenuti"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Benvenuti su Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software permette di installare tutto il software di cui si ha bisogno, "
+"tutto da una sola posizione. Consultare i nostri consigli, esplorare le "
+"categorie o cercare le applicazioni che si desiderano."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Cominciamo con le compere"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Rimossa"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installata"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Aggiornata"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Sconosciuta"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Cronologia"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Applicazioni di sistema"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Pagina installata"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Il catalogo software sta per essere scaricato"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Caricamento pagina"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Avvio…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"L'attuale rete è a consumo. Le connessioni a consumo hanno limiti di dati o "
+"addebiti associati. Di conseguenza, per salvare i dati, gli aggiornamenti "
+"automatici sono stati messi in pausa.\n"
+"\n"
+"Gli aggiornamenti automatici saranno ripresi quando sarà disponibile di "
+"nuovo una rete non a consumo. Fino ad allora, è ancora possibile installare "
+"manualmente gli aggiornamenti.\n"
+"\n"
+"In alternativa, se l'attuale rete è stata erroneamente identificata come a "
+"consumo, questa impostazione può essere modificata."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Apri imposta_zioni di rete"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Pagina moderata"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Non ci sono recensioni da moderare"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistema"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "utente"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ramo"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formato"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installazione"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Altro…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Applicazioni audio e video consigliate"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Giochi consigliati"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Applicazioni grafiche consigliate"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Applicazioni di produttività consigliate"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Accedi a software aggiuntivo da fonti selezionate di terze parti."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Alcuni di questi software sono proprietari e pertanto hanno restrizioni "
+"sull'uso, la condivisione e l'accesso al codice sorgente."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Scopri di più…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Abilita"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Pagina panoramica"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Abilitare repository software di terze parti?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Precedente"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Successiva"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Selezionate da noi"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Rilasci recenti"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorie"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Dati dell'applicazione non trovati"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparare %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Rimuovere il repository %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Tutte le applicazioni da %s saranno rimosse, si dovrà reinstallare la "
+"repository per poterle riutilizzare."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Rimuovere %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s verrà rimossa, dovrà essere installata di nuovo per poterla utilizzare."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Installato)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferenze di aggiornamento"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Aggiornamenti automatici"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Gli aggiornamenti automatici sono disabilitati quando si è su una "
+"connessione mobile o a consumo."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notifiche aggiornamenti automatici"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Mostra le notifiche quando gli aggiornamenti sono stati installati "
+"automaticamente."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Alcuni dei software attualmente installati non sono compatibili con %s. Se "
+"si continua, i seguenti software saranno rimossi automaticamente durante "
+"l'avanzamento:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Software incompatibile"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continua"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u applicazione installata"
+msgstr[1] "%u applicazioni installate"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u estensione installata"
+msgstr[1] "%u estensioni installate"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u applicazione"
+msgstr[1] "%u applicazioni"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u estensione"
+msgstr[1] "%u estensioni"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s e %s installate"
+msgstr[1] "%s e %s installate"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Rimuovere «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Disattivare «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Il software che è stato installato da questo repository non riceverà più "
+"aggiornamenti, incluse le correzioni di sicurezza."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Disattiva"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "il sistema operativo"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Questi repository integrano il software predefinito fornito da %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repository di terze parti"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nessun repository aggiuntivo"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Attiva"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Rimuovi…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Disattiva…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Attivazione"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Disattivazione"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Attivato"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Disattivato"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "La detesto"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Non mi piace"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Va bene"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Mi piace"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "La adoro"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Prendi più tempo per scrivere la recensione"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Scegliere una stella come valutazione"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Il riassunto è troppo corto"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Il riassunto è troppo lungo"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "La descrizione è troppo corta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "La descrizione è troppo lunga"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Inserisci recensione"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Inserisci"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Riassunto"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Dare un breve riassunto della recensione, per esempio: \"Ottima "
+"applicazione, consigliata\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recensione"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Cosa si pensa dell'applicazione? Provare a dare delle motivazioni alle "
+"proprie opinioni."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Trova quali dati sono inviati nella <a href=\"https://odrs.gnome.org/privacy"
+"\">politica di riservatezza</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "valutazioni in totale"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"È possibile segnalare recensioni per comportamento offensivo, maleducato o "
+"discriminatorio."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Una volta segnalata, una recensione sarà non visibile fino a quando un "
+"amministratore non la controlla."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Segnala recensione?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Segnala"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "La recensione è stata utile?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sì"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "No"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Indifferente"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Segnala…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Rimuovi…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Schermata non trovata"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Caricamento dell'immagine non riuscito"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Dimensione schermata non trovata"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Impossibile creare la cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Schermata non valida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Schermata non disponibile"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Schermata"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u altro risultato"
+msgstr[1] "Altri %u risultati"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Pagina di ricerca"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Applicazione non trovata"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Impossibile scaricare gli aggiornamenti firmware da %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Impossibile scaricare gli aggiornamenti da %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Impossibile scaricare gli aggiornamenti"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Impossibile scaricare gli aggiornamenti: è stato richiesto l'accesso a "
+"Internet ma non era disponibile"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Impossibile scaricare gli aggiornamenti da %s: non c'è abbastanza spazio sul "
+"disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Impossibile scaricare gli aggiornamenti: non c'è abbastanza spazio sul disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Impossibile scaricare gli aggiornamenti: è richiesta l'autenticazione"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Impossibile scaricare gli aggiornamenti: l'autenticazione non è valida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Impossibile scaricare gli aggiornamenti: non si hanno i permessi per "
+"installare il software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Impossibile ottenere l'elenco degli aggiornamenti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Impossibile installare %s poiché lo scaricamento non è riuscito da %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Impossibile installare %s poiché lo scaricamento non è riuscito"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Impossibile installare %s poiché le librerie %s non sono disponibili"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Impossibile installare %s poiché non supportato"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Impossibile installare: è stato richiesto l'accesso a Internet ma non era "
+"disponibile"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Impossibile installare: l'applicazione ha un formato non valido"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Impossibile installare %s: non c'è abbastanza spazio sul disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Impossibile installare %s: è richiesta l'autenticazione"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Impossibile installare %s: l'autenticazione non è valida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Impossibile installare %s: non si hanno i permessi per installare il software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Impossibile installare %s: è richiesta l'alimentazione di rete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Impossibile installare %s: il livello della batteria è troppo basso"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Impossibile installare %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Impossibile aggiornare %s da %s poiché lo scaricamento non è riuscito"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Impossibile aggiornare %s poiché lo scaricamento non è riuscito"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Impossibile installare gli aggiornamenti da %s poiché lo scaricamento non è "
+"riuscito"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"Impossibile installare gli aggiornamenti poiché lo scaricamento non è "
+"riuscito"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Impossibile aggiornare: è stato richiesto l'accesso a Internet ma non era "
+"disponibile"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Impossibile aggiornare %s: non c'è abbastanza spazio sul disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Impossibile installare gli aggiornamenti: non c'è abbastanza spazio sul disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Impossibile aggiornare %s: è richiesta l'autenticazione"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Impossibile installare gli aggiornamenti: è richiesta l'autenticazione"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Impossibile aggiornare %s: l'autenticazione non è valida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Impossibile installare gli aggiornamenti: l'autenticazione non è valida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Impossibile aggiornare %s: non si hanno i permessi per aggiornare il software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Impossibile installare gli aggiornamenti: non si hanno i permessi per "
+"aggiornare il software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Impossibile aggiornare %s: è richiesta l'alimentazione da rete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Impossibile installare gli aggiornamenti: è richiesta l'alimentazione di rete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Impossibile aggiornare %s: il livello della batteria è troppo basso"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Impossibile installare gli aggiornamenti: il livello della batteria è troppo "
+"basso"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Impossibile aggiornare %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Impossibile installare gli aggiornamenti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Impossibile avanzare a %s da %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Impossibile avanzare a %s poiché lo scaricamento non è riuscito"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Impossibile avanzare a %s: è stato richiesto l'accesso a Internet ma non era "
+"disponibile"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Impossibile avanzare a %s: non c'è abbastanza spazio sul disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Impossibile avanzare a %s: è richiesta l'autenticazione"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Impossibile avanzare a %s: l'autenticazione non è valida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Impossibile avanzare a %s: non si hanno i permessi per avanzare"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Impossibile avanzare a %s: è richiesta l'alimentazione da rete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Impossibile avanzare a %s: il livello della batteria è troppo basso"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Impossibile avanzare a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Impossibile rimuovere %s: è richiesta l'utenticazione"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Impossibile rimuovere %s: l'autenticazione non è valida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Impossibile rimuovere %s: non si hanno i permessi per rimuovere il software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Impossibile rimuovere %s: è richiesta l'alimentazione da rete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Impossibile rimuovere %s: il livello della batteria è troppo basso"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Impossibile rimuovere %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Impossibile lanciare %s: %s non è installato"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Non c'è abbastanza spazio libero sul disco — liberare dello spazio e "
+"riprovare"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Qualcosa è andato storto"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Installazione del file non riuscita: non supportato"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Installazione del file non riuscita: autenticazione non riuscita"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Installazione non riuscita: non supportato"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Installazione non riuscita: autenticazione non riuscita"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Impossibile contattare %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s necessita di un riavvio per usare i nuovi plugin."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Questa applicazione necessita di essere riavviata per usare i nuovi plugin."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "È richiesta l'alimentazione da rete"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Il livello della batteria è troppo basso"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Sorgente: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Installazione)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Rimozione)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Rimuovi tutti"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nessuna descrizione dell'aggiornamento disponibile."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installato il %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Aggiornamenti installati"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Aggiuntivi"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Rimozioni"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Aggiornamenti"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Retrocessioni"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nessun aggiornamento è stato installato su questo sistema."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Aggiornamento di sicurezza in attesa"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "È consigliato di installare subito gli aggiornamenti importanti"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Riavvia e installa"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Aggiornamenti software disponibili"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Sono pronti per essere installati degli aggiornamenti importanti per il "
+"sistema operativo e per le applicazioni"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Visualizza"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u applicazione aggiornata — Richiesto riavvio"
+msgstr[1] "%u applicazioni aggiornate — Richiesto riavvio"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u applicazione aggiornata"
+msgstr[1] "%u applicazioni aggiornate"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s è stata aggiornata."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Riavviare l'applicazione."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s e %s sono state aggiornate."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u applicazione richiede il riavvio."
+msgstr[1] "%u applicazioni richiedono il riavvio."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Incluse %s, %s e %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Aggiornamenti del sistema operativo non disponibili"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Avanzare per continuare a ricevere gli aggiornamenti di sicurezza."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Una nuova versione di %s è disponibile per l'installazione"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Avanzamento software disponibile"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Aggiornamenti software non riusciti"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"Non è riuscita l'installazione di un aggiornamento importante del sistema "
+"operativo."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostra dettagli"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Avanzamento del sistema completato"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Benvenuti su %s %s."
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Aggiornamento software installato"
+msgstr[1] "Aggiornamenti software installati"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+"È stato installato un aggiornamento importante del sistema operativo."
+msgstr[1] ""
+"Sono stati installati degli aggiornamenti importanti del sistema operativo."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Esamina"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Aggiornamento non riuscito"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Il sistema è già stato aggiornato."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "L'aggiornamento è stato annullato."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"L'accesso a Internet era richiesto ma non era disponibile. Assicurarsi di "
+"avere l'accesso a Internet e riprovare."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Ci sono problemi di sicurezza con l'aggiornamento. Consultare il fornitore "
+"del software per maggiori dettagli."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Non c'è abbastanza spazio libero sul disco. Liberare dello spazio e "
+"riprovare."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"L'installazione dell'aggiornamento non è riuscita. Attendere per un altro "
+"aggiornamento e riprovare. Se il problema persiste, contattare il proprio "
+"fornitore di software."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Ieri %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Ieri %H:%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Due giorni fa"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Tre giorni fa"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Quattro giorni fa"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Cinque giorni fa"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Sei giorni fa"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Una settimana fa"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Due settimane fa"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "In cerca di nuovi aggiornamenti…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Impostazione aggiornamenti…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Potrebbe richiedere tempo)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Ultimo controllo: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s non è più supportata."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Il sistema operativo non è più supportato."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr ""
+"Questo significa che non si riceveranno più aggiornamenti di sicurezza."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "È consigliato avanzare a una versione più recente."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Potrebbero esserci dei costi"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Controllare gli aggiornamenti quando si usa la banda larga mobile potrebbe "
+"causare costi aggiuntivi."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Controlla _comunque"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nessuna rete"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "L'accesso alla rete è richiesto per controllare gli aggiornamenti."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Controllo…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Controllo aggiornamenti"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Pagina aggiornamenti"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Il software è aggiornato"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Controllare gli aggiornamenti quando si usa la banda larga mobile potrebbe "
+"causare costi aggiuntivi"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Controlla comunque"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Va in rete per controllare gli aggiornamenti"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Impostazioni della _rete"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Gli aggiornamenti sono gestiti automaticamente"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Riavvia e aggiorna"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Aggiorna tutto"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Firmware integrato"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Riavvio richiesto"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Aggiornamenti applicazioni"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware dispositivo"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Scarica"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"È consigliato fare un backup dei dati e file prima di eseguire l'avanzamento."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Riavvia ora"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Gli aggiornamenti saranno applicati al riavvio del computer."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s è ora disponibile"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "In attesa di scaricare %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Scaricamento di %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s è pronta per essere installata"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+"Un avanzamento importante, con nuove funzionalità e migliorie aggiuntive."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Maggiori informa_zioni"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Aggiunge, rimuove o aggiorna software su questo computer"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Aggiornamenti;Avanzamento;Sorgenti;Repository;Preferenze;Installare;"
+"Disinstallare;Programma;Software;Applicazione;Negozio;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Creazione e modifica audio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Riproduttori musicali"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Debugger"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Intelligenza artificiale"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chimica"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Lingue"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematica"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tutto"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Azione"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Avventura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocchi"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tavolo"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Carte"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatori"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Bambini"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Gioco di ruolo"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafica 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Acquisizione"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafica vettoriale"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visualizzatori"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendario"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Database"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanza"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Elaboratore di testo"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Caratteri"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codec"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Sorgenti di input"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pacchetti delle lingue"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localizzazione"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Driver hardware"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Notizie"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Browser web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tutte"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editor di testo"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tutto"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "In evidenza"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Arte"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Fumetti"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Finzione"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Salute"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Storia"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Stile di vita"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politica"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio e video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Strumenti di sviluppo"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educazione e scienza"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Giochi"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafica e fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produttività"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicazione e notizie"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Fonte"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilità"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Aggiornamenti sistema operativo"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Include miglioramenti di prestazioni, stabilità e sicurezza."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Scaricamento immagini in evidenza…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Un aggiornamento di Endless OS con nuove funzionalità e correzioni."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Impossibile per il servizio di aggiornamento di EOS recuperare e applicare "
+"l'aggiornamento."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Installatore globale di sistema GNOME Sotfware AppStream"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Analisi degli argomenti della riga di comando non riuscita"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "È necessario specificare esattamente un nome di file"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Questo programma può essere usato solo dall'utente root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Convalida del tipo di contenuto non riuscita"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Copia non riuscita"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Scaricamento file metadata aggiuntivi…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Scaricamento informazioni d'avanzamento…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Avanzamento per le ultime funzionalità, prestazioni e miglioramenti di "
+"stabilità."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Supporto Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak è un framework per le applicazioni desktop su Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Recupero metadata flatpak di %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+#| msgid "%s Device"
+msgid "%s Device Update"
+msgstr "Aggiornamento dispositivo %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+#| msgid "%s System"
+msgid "%s System Update"
+msgstr "Aggiornamento sistema %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+#| msgid "%s Embedded Controller"
+msgid "%s Embedded Controller Update"
+msgstr "Aggiornamento xontroller incorporato %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "Aggiornamento ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+#| msgid "%s Corporate ME"
+msgid "%s Corporate ME Update"
+msgstr "Aggiornamento ME aziendale %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+#| msgid "%s Consumer ME"
+msgid "%s Consumer ME Update"
+msgstr "Aggiornamento ME di consumo %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+#| msgid "%s Controller"
+msgid "%s Controller Update"
+msgstr "Aggiornamento controller %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+#| msgid "%s Thunderbolt Controller"
+msgid "%s Thunderbolt Controller Update"
+msgstr "Aggiornamento controller Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Aggiornamento microcodice precessore %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%u Application Updated"
+#| msgid_plural "%u Applications Updated"
+msgid "%s Configuration Update"
+msgstr "Aggiornamento configurazione %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Scaricamento firma dell'aggiornamento del firmware…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Scaricamento metadata dell'aggiornamento del firmware…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Supporto aggiornamento firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Fornisce il supporto agli aggiornamenti dei firmware"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Scaricamento valutazioni dell'applicazione…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS è un servizio che fornisce le recensioni degli utenti per le "
+"applicazioni"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Supporto Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Uno snap è un pacchetto universale per Linux"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..7a902ff
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,4472 @@
+# Japanese translation for gnome-software.
+# Copyright (C) 2013-2020 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Jiro Matsuzawa <jmatsuzawa@gnome.org>, 2013-2018.
+# Hajime Taira <htaira@redhat.com>, 2015.
+# Kentaro KAZUHAMA <kazken3@gmail.com>, 2015.
+# Rockworld <sumoisrock@gmail.com>, 2016.
+# Takashi Oshie <>, 2016.
+# sujiniku <sujinikusityuu@gmail.com>, 2018, 2020.
+# Shinichirou Yamada <yamada_strong_yamada_nice_64bit@yahoo.co.jp>, 2018.
+# sicklylife <translation@sicklylife.jp>, 2019-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-26 21:15+0900\n"
+"Last-Translator: sicklylife <translation@sicklylife.jp>\n"
+"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME ソフトウェア"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME 用アプリケーションマネージャー"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"GNOME ソフトウェアでは、新しいアプリケーションやシステム拡張の検索、インス"
+"トールができます。また、インストール済みアプリケーションの削除も可能です。"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME ソフトウェアでは、注目アプリケーションやよく使用されるアプリケーション"
+"を、役立つ説明や豊富なスクリーンショットとともにわかりやすく紹介しています。"
+"お探しのアプリケーションを探すのに適した、カテゴリーリストや検索機能も備えて"
+"います。また、オフラインアップデートによるシステムの更新も可能です。"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "概要パネル"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "詳細パネル"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "インストール済みパネル"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "アップデートパネル"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "アップデートの詳細"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "The GNOME Project"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "互換性のあるプロジェクトの一覧"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "これは GNOME、KDE、XFCE など互換性のあるプロジェクトの一覧です。"
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "GNOME Software でアップデートとアップグレードを管理する"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "アップデートを自動的にダウンロードしてインストールする"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"有効化されている場合、GNOME Software はバックグラウンドでソフトウェアアップ"
+"デートを自動的にダウンロードし、再起動の必要がないものをインストールします。"
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "GNOME Software の初めての実行かどうか"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "アプリケーションの隣に評価点を星で表示する"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"ノンフリーのアプリケーションをインストールする前に警告ダイアログを表示する"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"ノンフリーのライセンスのアプリケーションをインストールする前に警告ダイアログ"
+"を表示することができます。ダイアログを表示するかどうかを、この設定で制御でき"
+"ます。"
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "人気のあるアプリケーションの一覧"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"おすすめとして表示するアプリケーションの一覧。システムで定義されている一覧よ"
+"りも優先します。"
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "最後にアップデートを確認した時のタイムスタンプ"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "最終アップグレード通知のタイムスタンプ"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"セキュリティアップデートのタイムスタンプ (アップデート後にクリアされる)"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "最終アップデートのタイムスタンプ"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "アプリケーションのレビューに使用されるサーバー"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "レビューを表示する最低カルマスコア"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "カルマがこの数値に達しないレビューは表示されません。"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "サードパーティーのものとして扱うべきでない公式リポジトリの一覧"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "自由ソフトウェアとして扱うべき公式リポジトリの一覧"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+"'https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD"
+"%E3%83%97%E3%83%A9%E3%82%A4%E3%82%A8%E3%82%BF%E3%83%AA%E3%83%BB%E3%82%BD"
+"%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "ソフトウェアのインストール"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "選択したソフトウェアをシステムにインストールします"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "すべて選択"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "すべて解除"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "ソフトウェアリポジトリ(_S)"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "アップデート設定(_U)"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "ソフトウェア"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "戻る"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "探す(_E)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "インストール済み(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "アップデート(_U)"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "検索"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "ソース"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "ソフトウェアリポジトリ"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "ディスクを確認"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "ネットワーク設定"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "再起動"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "詳細情報"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "自動アップデート一時停止中"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "詳細を確認(_M)"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "ローカルファイル"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "パッケージ"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "保留"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "インストール済み"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "インストール中"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "削除中"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"起動モード (指定可能な値): ‘updates’, ‘updated’, ‘installed’, ‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "アプリケーションを検索する"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "アプリケーションの詳細を表示する (アプリケーション ID を指定)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "アプリケーションの詳細を表示する (パッケージ名を指定)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "アプリケーションをインストールする (アプリケーション ID を指定)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "ローカルのパッケージファイルを開く"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "詳細なデバッグ情報を表示する"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "保留中のアップデートをバックグラウンドでインストールする"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "アップデート設定を表示する"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "実行中のインスタンスを終了する"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream よりローカルのファイルソースを優先させる"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "バージョン情報を表示する"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"松澤 二郎 <jmatsuzawa@gnome.org>\n"
+"Hajime Taira <htaira@redhat.com>\n"
+"Kentaro KAZUHAMA <kazken3@gmail.com>\n"
+"Rockworld <sumoisrock@gmail.com>\n"
+"Shinichirou Yamada <yamada_strong_yamada_nice_64bit@yahoo.co.jp >\n"
+"sicklylife <translation@sicklylife.jp>\n"
+"sujiniku <sujinikusityuu@gmail.com>\n"
+"Takashi Oshie <>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "“ソフトウェア”について"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "システムのソフトウェア管理に役立ちます"
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "そのアプリケーションの詳細はありません。"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "ウェブサイトへアクセス"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "インストール…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "キャンセル"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "インストール"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "アップデート"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "削除"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "更新中はデバイスを使用できません。"
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "追加の権限が必要です"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "リモートの %s (レルム %s) へのログインが必要です"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "ログインが必要です"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "キャンセル(_C)"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "ログイン(_L)"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "ユーザー(_U)"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "パスワード(_P)"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "その他"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "すべて"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "注目のソフト"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "注目の%s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "評価"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "名前"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "表示"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "サブカテゴリーの絞り込みメニュー"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "並べ替え"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "サブカテゴリーの並び替えメニュー"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "1 から %u までの数字を入力してください: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "アプリケーションを選択してください:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS のアップデートをインストールしました"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "最近インストールしたアップデートの内容を確認できます"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s をインストールしました"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "変更を有効にするには再起動が必要です。"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "アプリケーションを使用できます。"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "再起動"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "起動"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "サードパーティーのソフトウェアをインストールしますか?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "サードパーティーのソフトウェアリポジトリを有効にしますか?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s は<a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">"
+"自由でオープンソースのソフトウェア</a>ではなく、“%s”によって提供されていま"
+"す。"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s は“%s”によって提供されています。"
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"インストールを続行するには、このソフトウェアリポジトリを有効にする必要があり"
+"ます。"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "国や地域によっては %s のインストールや使用は違法となります。"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "国や地域によってはこのコーデックのインストールや使用は違法となります。"
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "今後警告しない"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "有効にしてインストール"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "パッケージマネージャーからのエラーの詳細:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "詳細"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "アップデートをインストールしました"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "アップデートを有効にするには再起動が必要です。"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "あとで"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr ""
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr ""
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr ""
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr ""
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr ""
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr ""
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr ""
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr ""
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "アプリケーション"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s には追加のファイルフォーマットサポートが必要です。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "追加の MIME タイプが必要です"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s には追加のフォントが必要です。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "追加のフォントが必要です"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s には追加のマルチメディアコーデックが必要です。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "追加のマルチメディアコーデックが必要です"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s には追加のプリンタードライバーが必要です。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "追加のプリンタードライバーが必要です"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s には追加のパッケージが必要です。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "追加のパッケージが必要です"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "“ソフトウェア”で探す"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "削除中…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "インストール保留中…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "アップデート保留中…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "準備中…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"このアプリケーションはインターネットに接続していなければ使用できません。"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "インストール(_I)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "インストール(_I)…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "起動(_L)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "削除(_R)"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "ネットワーク"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "ネットワークを介して通信できます"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "システムサービス"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "システムバスの D-Bus サービスにアクセスできます"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "セッションサービス"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "セッションバスの D-Bus サービスにアクセスできます"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "デバイス"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "システムのデバイスファイルにアクセスできます"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "ホームフォルダー"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "ファイルを作成、表示、編集できます"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "ファイルを表示できます"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "ファイルシステム"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "ダウンロードフォルダー"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "設定"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "設定を表示、変更できます"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "レガシーなディスプレイシステム"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "古くてセキュアではないディスプレイシステムを使用します"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "サンドボックス回避"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "サンドボックスから抜け出して色々な制限を回避できます"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "このアプリケーションは完全にサンドボックス化されています。"
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"このアプリケーションは一般的な古い形式のアプリケーションのため、システムのど"
+"の部分にアクセスするか確認できません。"
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "なし"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "不明"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "低"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "中"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "高"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "レビューを書くにはインターネットへの接続が必要です"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "“%s”が見つかりません"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "パブリックドメイン"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+"https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF"
+"%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.ja"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "自由ソフトウェア"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "ユーザーは下記のライセンスによる拘束を受けることになります:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "詳細情報"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "詳細ページ"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "ダウンロード中"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "アップデート(_U)"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "ショートカットを追加(_A)"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "ショートカットを削除(_M)"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "スクリーンショットは未提供です"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "ソフトウェアリポジトリあり"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"このアプリケーションにはアップデートや他のソフトウェアを利用できるようになる"
+"ソフトウェアリポジトリが含まれています。"
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "ソフトウェアリポジトリなし"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"このアプリケーションにはソフトウェアリポジトリが含まれていません。新しいバー"
+"ジョンへのアップデートは行われません。"
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"このソフトウェアはお使いのディストリビューションですでに提供されているため、"
+"置き換えないほうがよいでしょう。"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "ソフトウェアリポジトリを特定"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"このソフトウェアリポジトリを追加することで、追加のソフトウェアやアップグレー"
+"ドを利用できるようになります。"
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "信頼できるソフトウェアリポジトリのみを利用しましょう。"
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "ウェブサイト(_W)"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "寄付(_D)"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "お使いの言語にローカライズされているか"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "ドキュメント"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "活発なリリース"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "システム統合"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "サンドボックス化"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "チャンネル"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "バージョン"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "推奨年齢レーティング"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "権限"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "アップデート"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "カテゴリー"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "インストールサイズ"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "ダウンロードサイズ"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "開発者"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "ライセンス"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "フリー (自由)"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "プロプライエタリ"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "アドオン"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "選択したアドオンはこのアプリケーションと一緒にインストールされます。"
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "レビュー"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "レビューを書く(_W)"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "さらに表示(_S)"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"該当のソフトウェアは実行、複製、配布、調査、および改変を自由に行えることを意"
+"味します。"
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "プロプライエタリソフトウェア"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"該当のソフトウェアは特定の個人または企業が所有していることを意味します。使用"
+"上の制約がある場合が多く、通常ソースコードへのアクセスは許可されていません。"
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "ソフトウェアライセンス不明"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "このソフトウェアのライセンス条項が不明です。"
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "このアプリのレーティング理由:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "レーティングの詳細はありません。"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " および "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s 用の利用可能なフォント"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s 用の利用可能なソフトウェア"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "要求されたソフトウェアが見つかりません"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s は見つかりませんでした"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "ウェブサイト"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "ファイル %s を提供するアプリケーションはありません。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"%s についての情報や、見つからないアプリケーションの入手方法は %s で確認できる"
+"かもしれません。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s をサポートする利用可能なアプリケーションはありません。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s は利用できません。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"%s についての情報および、このフォーマットをサポートするアプリケーションの入手"
+"方法は %s で確認できるかもしれません。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s スクリプトをサポートする利用可能なフォントがありません。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"%s についての情報および、追加フォントの入手方法は %s で確認できるかもしれませ"
+"ん。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s フォーマットが利用可能なコーデックのアドオンはありません。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"%s についての情報および、このフォーマットを再生可能なコーデックの入手方法は "
+"%s で確認できるかもしれません。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s をサポートする利用可能な Plasma リソースはありません。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"%s についての情報および、追加の Plasma リソースの入手方法は %s で確認できるか"
+"もしれません。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s を利用可能なプリンタードライバーはありません。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"%s についての情報および、このプリンターをサポートするドライバーの入手方法は "
+"%s で確認できるかもしれません。"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "このウェブサイト"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"残念ながら、お探しの %s は見つかりませんでした。詳しくは %s を参照してくださ"
+"い。"
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "何も見つかりませんでした"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s ファイルフォーマット"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "コーデックページ"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "ようこそ"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "“ソフトウェア”へようこそ"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"“ソフトウェア”で、必要なアプリケーションをすべてインストールすることができま"
+"す。おすすめのアプリケーションをチェックしたり、カテゴリーから探してみてくだ"
+"さい。欲しいアプリケーションを検索することもできます。"
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "ショッピングに行きましょう(_L)"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "削除"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "インストール"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "アップデート"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y年%B%-e日"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "履歴"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "システムアプリケーション"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "インストールページ"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "ソフトウェアカタログをダウンロードしています"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "ページを読み込み中"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "起動中…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"現在のネットワークは従量制です。従量制課金接続にはデータ量の制限があり、超過"
+"すると追加料金が発生する場合があります。データ量の消費を抑えるため、自動アッ"
+"プデートを一時的に停止しています。\n"
+"\n"
+"制限のないネットワークが利用可能になると、自動アップデートを再開します。それ"
+"までの間、手動でアップデートをインストールすることは可能です。\n"
+"\n"
+"現在のネットワークが従量制に誤認識されてしまっている場合は、設定を変更してみ"
+"てください。"
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "ネットワーク設定を開く(_S)"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "審査ページ"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "審査するレビューはありません"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "システム"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "ユーザー"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "ブランチ"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "フォーマット"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "インストール"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "さらに…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "おすすめのオーディオ、ビデオアプリケーション"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "おすすめのゲーム"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "おすすめのグラフィックアプリケーション"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "おすすめのプロダクティビティアプリケーション"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"選択したサードパーティーソースにある追加のソフトウェアにアクセスします。"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"このソフトウェアの一部はプロプライエタリです。使用、共有、ソースコードへのア"
+"クセスに制限があります。"
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "もっと探す…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "有効"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "概要ページ"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "サードパーティーのソフトウェアリポジトリを有効にしますか?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "前へ"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "次へ"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "編集者のおすすめ"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "最近のリリース"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "カテゴリー"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "アプリケーションのデータが見つかりません"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s を準備"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "%s のリポジトリを削除しますか?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"%s のアプリケーションはすべて削除されます。再び使用するにはソフトウェアリポジ"
+"トリをインストールし直す必要があります。"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "%s を削除しますか?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s は削除されます。再び使用するにはインストールし直す必要があります。"
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (インストール済み)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "アップデート設定"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "自動アップデート"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "モバイル接続や従量制課金接続では、自動アップデートは無効になります。"
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "自動アップデートの通知"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "アップデートが自動的にインストールされたときに通知を表示します。"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"現在インストールされているソフトウェアの一部は %s と互換性がありません。続行"
+"する場合、アップグレード中に次のソフトウェアが自動的に削除されます:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "非互換のソフトウェア"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "続行(_C)"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u 個のアプリケーションをインストールしました"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u 個のアドオンをインストールしました"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u 個のアプリケーション"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u 個のアドオン"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s と %s をインストールしました"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "“%s”を削除しますか?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "“%s”を無効にしますか?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"このリポジトリからインストールしたソフトウェアは、脆弱性の修正などのアップ"
+"デートが提供されません。"
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "無効"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "オペレーティングシステム"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"これらのリポジトリは %s のデフォルトソフトウェアに不足しているものを補いま"
+"す。"
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "サードパーティーリポジトリ"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "追加のリポジトリはありません"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "有効(_E)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "削除(_R)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "無効(_D)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "有効化中"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "無効化中"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "有効"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "無効"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "嫌い"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "好きではない"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "まあまあ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "気に入った"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "とても気に入った"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "もう少し時間を掛けてレビューを書いてください"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "評価の点数を選択してください"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "サマリーが短すぎます"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "サマリーが長すぎます"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "レビュー内容が短すぎます"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "レビュー内容が長すぎます"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "レビューを投稿"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "投稿(_P)"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "サマリー"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"レビューの短い要約を書いてください(例:「すばらしいアプリです。おすすめしま"
+"す」)。"
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "レビュー"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"このアプリケーションについてどう思いますか。できれば理由もあわせて書いてくだ"
+"さい。"
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"どのようなデータが送信されるかは<a href=\"https://odrs.gnome.org/privacy\">プ"
+"ライバシーポリシー</a>のページで確認できます。"
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "回の評価 (合計)"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "侮蔑的、暴言、差別的なレビューを報告することができます。"
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "一度報告すると、レビューは管理者が確認するまで隠されます。"
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "レビューを報告しますか?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "報告"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "このレビューは役に立ちましたか?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "はい"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "いいえ"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "どうでもいい"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "報告する…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "削除する…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "スクリーンショットが見つかりませんでした"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "画像の読み込みに失敗しました"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "スクリーンショットサイズの画像がありません"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "キャッシュを作成できませんでした"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "スクリーンショットは無効です"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "スクリーンショットは利用できません"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "スクリーンショット"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "他 %u 件"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "検索ページ"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "アプリケーションが見つかりません"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "%s からファームウェアのアップデートをダウンロードできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s からアップデートをダウンロードできません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "アップデートをダウンロードできません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"アップデートをダウンロードできません: インターネットアクセスが必要でしたが接"
+"続できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"%s からアップデートをダウンロードできません: 十分なディスク領域がありません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "アップデートをダウンロードできません: 十分なディスク領域がありません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "アップデートをダウンロードできません: 認証が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "アップデートをダウンロードできません: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"アップデートをダウンロードできません: ソフトウェアをインストールする権限があ"
+"りません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "アップデートの一覧を取得できません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"ダウンロードに失敗したため %s をインストールできません (ダウンロード元: %s)"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "ダウンロードに失敗したため %s をインストールできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "%s をインストールできません (%s ランタイムが利用できません)"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "サポートしていないため %s をインストールできません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"インストールできません: インターネットアクセスが必要でしたが接続できませんで"
+"した"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "インストールできません: アプリケーションのフォーマットが不正です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s をインストールできません: 十分なディスク領域がありません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s をインストールできません: 認証が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s をインストールできません: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"%s をインストールできません: ソフトウェアをインストールする権限がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "%s をインストールできません: AC 電源が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "%s をインストールできません: バッテリー残量に余裕がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s をインストールできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "%s をアップデートできません (%s からのダウンロードに失敗しました)"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "ダウンロードに失敗したため %s をアップデートできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"%s からのダウンロードに失敗したためアップデートをインストールできません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "ダウンロードに失敗したためアップデートをインストールできません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"アップデートできません: インターネットアクセスが必要でしたが接続できませんで"
+"した"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s をアップデートできません: 十分なディスク領域がありません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "アップデートをインストールできません: 十分なディスク領域がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "%s をアップデートできません: 認証が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "アップデートをインストールできません: 認証が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s をアップデートできません: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "アップデートをインストールできません: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"%s をアップデートできません: ソフトウェアをアップデートする権限がありません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"アップデートをインストールできません: ソフトウェアをアップデートする権限があ"
+"りません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "%s をアップデートできません: AC 電源が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "アップデートをインストールできません: AC 電源が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "%s をアップデートできません: バッテリー残量に余裕がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "アップデートをインストールできません: バッテリー残量に余裕がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "%s をアップデートできません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "アップデートをインストールできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%2$s から %1$s にアップグレードできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "ダウンロードに失敗したため %s をアップグレードできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"%s にアップグレードできません: インターネットアクセスが必要でしたが接続できま"
+"せんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s にアップグレードできません: 十分なディスク領域がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s にアップグレードできません: 認証が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s にアップグレードできません: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%s にアップグレードできません: アップグレードする権限がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s にアップグレードできません: AC 電源が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "%s にアップグレードできません: バッテリー残量に余裕がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "%s にアップグレードできません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s を削除できません: 認証が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s を削除できません: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s を削除できません: ソフトウェアを削除する権限がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s を削除できません: AC 電源が必要です"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "%s を削除できません: バッテリー残量に余裕がありません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "%s を削除できません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s を起動できません: %s はインストールされていません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "十分なディスク領域がありません — 空き領域を確保して再実行してください"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "問題が発生しました"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "ファイルのインストールに失敗しました: サポートしていません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "ファイルのインストールに失敗しました: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "インストールに失敗しました: サポートしていません"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "インストールに失敗しました: 認証できませんでした"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s に接続できません"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "新しいプラグインを使用するには、%s を再起動する必要があります。"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"新しいプラグインを使用するには、このアプリケーションを再起動する必要がありま"
+"す。"
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "AC 電源が必要です"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "バッテリー残量に余裕がありません"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "ソース: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (インストール中)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (削除中)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "すべて削除(_R)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "アップデートの説明がありません。"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "%s にインストール済み"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "インストール済みのアップデート"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "追加"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "削除"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "アップデート"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "ダウングレード"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "このシステムにインストールされたアップデートはありません。"
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "セキュリティアップデートが未適用です"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "重要なアップデートはすぐにインストールすることをお勧めします"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "再起動してインストール"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "ソフトウェアのアップデートが利用可能です"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"OS やアプリケーションの重要なアップデートをインストールする準備ができました"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "表示"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u 個のアプリケーションをアップデートしました — 再起動が必要です"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u 個のアプリケーションをアップデートしました"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s をアップデートしました。"
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "アプリケーションを再起動してください。"
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s と %s をアップデートしました。"
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u 個のアプリケーションは再起動が必要です。"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "%s、%s、%s を含みます。"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "OS のアップデートは利用できません"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "セキュリティアップデートを受け取るにはアップグレードしてください。"
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s の新しいバージョンが利用可能です"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "アップグレードが利用可能です"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "ソフトウェアのアップデートに失敗しました"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "重要な OS アップデートのインストールに失敗しました。"
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "詳細を表示"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "システムのアップグレードが完了しました"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "%s %s へようこそ!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "ソフトウェアのアップデートをインストールしました"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "重要な OS アップデートをインストールしました。"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "確認"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "アップデートに失敗しました"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "システムは最新です。"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "このアップデートをキャンセルしました。"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"必要なインターネットアクセスが利用できませんでした。インターネットに接続でき"
+"ることを確認して再実行してください。"
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"アップデート中にセキュリティ上の問題に遭遇しました。詳細についてソフトウェア"
+"の提供元に問い合わせてください。"
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"十分なディスク領域がありませんでした。空き領域を確保して再実行してください。"
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"残念ながら、アップデートのインストールに失敗しました。次のアップデートを待っ"
+"て再実行してください。それでも問題が解決しない場合は、ソフトウェアの提供元に"
+"問い合わせてください。"
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%H:%M"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%p %l:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "昨日 %H:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "昨日 %p %l:%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "2 日前"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "3 日前"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "4 日前"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "5 日前"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "6 日前"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "1 週間前"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "2 週間前"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "新しいアップデートを確認中…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "アップデート準備中…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(時間のかかる場合があります)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "最終確認: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s はサポートが終了しています。"
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "お使いの OS はサポートが終了しています。"
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "セキュリティアップデートを受け取ることはできません。"
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "より新しいバージョンへアップグレードすることをお勧めします。"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "料金が掛かる可能性があります"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"モバイル接続の利用中にアップデートを確認すると費用が発生する場合があります。"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "確認する(_A)"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "ネットワークがありません"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "アップデートを確認するにはインターネットにアクセスする必要があります。"
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "確認中…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "アップデートを確認"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "アップデートページ"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "ソフトウェアは最新です"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "モバイル接続でのアップデートの確認は費用が発生する場合があります"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "確認する(_C)"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "アップデートの確認のためにオンライン接続してください"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "ネットワーク設定(_N)"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "アップデートは自動的に管理されます"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "再起動してアップデート"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "すべてアップデート"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "統合ファームウェア"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "再起動が必要です"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "アプリケーションのアップデート"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "デバイスファームウェア"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "ダウンロード(_D)"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"アップグレードの前に必要なデータやファイルのバックアップを取っておくことをお"
+"勧めします。"
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "再起動(_R)"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "アップデートはコンピューターを再起動したときに適用されます。"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s が利用可能です"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "%s %s のダウンロードを待っています"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s をダウンロード中"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s のインストール準備完了"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "メジャーアップグレード。新機能や改良が提供されます。"
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "詳細(_L)"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "このコンピューターでソフトウェアの追加、削除、更新を行います"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;更新;アップデート;アップグレード;ソース;リポジトリ;レポジ"
+"トリ;設定;インストール;アンインストール;プログラム;ソフトウェア;アプリケー"
+"ション;ストア;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "オーディオ作成 & 編集"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "音楽プレーヤー"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "デバッガー"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "人工知能"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "天文学"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "化学"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "言語"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "数学"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "ロボット工学"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "アクション"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "アドベンチャー"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "アーケード"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "ブロック"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "ボード"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "カード"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "エミュレーター"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "キッズ"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "ロジック"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "ロールプレイング"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "スポーツ"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "ストラテジー"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D グラフィック"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "写真"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "スキャニング"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "ベクターグラフィック"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "ビューアー"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "カレンダー"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "データベース"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "ファイナンス"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "ワープロ"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "フォント"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "コーデック"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "入力ソース"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "言語パック"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "ローカライゼーション"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "ハードウェアドライバー"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "チャット"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "ニュース"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "ウェブブラウザー"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "テキストエディター"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "すべて"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "注目のソフト"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "アート"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "地理学"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "コミック"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "フィクション"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "健康"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "歴史"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "ライフスタイル"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "政治"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "スポーツ"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "オーディオ & ビデオ"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "開発ツール"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "教育と科学"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "ゲーム"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "グラフィック & 写真"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "プロダクティビティ"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "コミュニケーション & ニュース"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "リファレンス"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "ユーティリティ"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "OS のアップデート"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"このアップデートには性能、安定性、およびセキュリティの向上が含まれています。"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "新機能やバグ修正を含んだ Endless OS のアップデートです。"
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS アップデートサービスのアップデート取得と適用ができませんでした。"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Software AppStream システムワイドインストーラー"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "コマンドライン引数の解析に失敗しました"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "ファイル名を一つ指定する必要があります"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "このプログラムは root ユーザーのみ実行可能です"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "コンテンツタイプの検証に失敗しました"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "コピーに失敗しました"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "追加のメタデータをダウンロード中…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "アップグレード情報をダウンロード中…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "更新して最新の機能、性能、安定性の改善を"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak サポート"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+"Flatpak は Linux 上のデスクトップアプリケーション向けフレームワークです"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "%s の Flatpak メタデータを取得中…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s デバイスのアップデート"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s システムのアップデート"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s Embedded Controller のアップデート"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s ME のアップデート"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s Corporate ME のアップデート"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s Consumer ME のアップデート"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s コントローラーのアップデート"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt コントローラーのアップデート"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU マイクロコードのアップデート"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s の設定のアップデート"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "ファームウェアアップデートの署名をダウンロード中…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "ファームウェアアップデートのメタデータをダウンロード中…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "ファームウェアアップグレードサポート"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "ファームウェアのアップグレード機能を提供します"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "アプリケーションの評価をダウンロード中…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS はアプリケーションのユーザーレビューを提供するサービスです"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap ストア"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap サポート"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap は汎用的な Linux パッケージです"
+
+#~ msgid "About %s"
+#~ msgstr "“%s”について"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "拡張機能はユーザー自身のリスクで使用してください。システムに何らかの問題が"
+#~ "発生した場合、拡張機能を無効化することが推奨されます。"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell 拡張機能"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell 拡張機能リポジトリ"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "GNOME Shell 拡張機能のメタデータをダウンロード中…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell 拡張機能"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "アプリケーションフォルダーに追加"
+
+#~ msgid "Top Rated"
+#~ msgstr "高評価"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "未保存の変更"
+
+#~ msgid "Merge documents"
+#~ msgstr "ドキュメントをマージ"
+
+#~ msgid "Throw away changes"
+#~ msgstr "変更を破棄"
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "アプリケーション一覧に未保存の変更があります。"
+
+#~ msgid "No Designs"
+#~ msgstr "デザインがありません"
+
+#~ msgid "Error message here"
+#~ msgstr "エラーメッセージはこちら"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "編集者のおすすめ"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "OS アップグレード"
+
+#~ msgid "Featured Applications"
+#~ msgstr "注目のアプリケーション"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "サインイン / 登録…"
+
+#~ msgid "Continue"
+#~ msgstr "続行"
+
+#~ msgid "Use"
+#~ msgstr "使用"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "%s を購入しますか?"
+
+#~ msgid "Purchase"
+#~ msgstr "購入"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "%s を購入できません: 認証が必要です"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "%s を購入できません: 認証できませんでした"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "%s を購入できません: 支払い方法が設定されていません"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "%s を購入できません: 支払いが拒否されました"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "%s を購入できません"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "サービス用のプロファイル情報を表示する"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "次は自動的にサインインする"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "二要素認証用のワンタイム PIN を入力してください。"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "%s についての情報および、このフォーマットを再生できるコーデックの入手方法"
+#~ "はウェブサイト上で確認できます。"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba は開発者がソフトウェアバンドルを簡単に作成できる方法を提供します"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Valve による究極のエンターテイメントプラットフォーム"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "以前に有効化された追加ソースの一覧"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "サードパーティーのアプリケーションをインストールする時に有効化したソースの"
+#~ "リストです。"
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "プロプライエタリのソフトウェアソースを有効にしますか?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "アプリケーションやアドオンはインストールされていません。他のソフトウェアも"
+#~ "まだそうかもしれません"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "ソフトウェアソースはインターネットからダウンロードできます。ソフトウェア"
+#~ "ソースを追加すると、%s で提供されていないソフトウェアも利用できるようにな"
+#~ "ります。"
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "ソースを削除すると、そのソースからインストールしたソフトウェアもすべて削除"
+#~ "することになります。"
diff --git a/po/kab.po b/po/kab.po
new file mode 100644
index 0000000..b808d42
--- /dev/null
+++ b/po/kab.po
@@ -0,0 +1,4211 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-10-01 07:23+0000\n"
+"PO-Revision-Date: 2020-11-10 14:53+0100\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 2.4.1\n"
+"Last-Translator: Slimane Selyan Amiri <selyan.kab@protonmail.com>\n"
+"Language: kab\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1524
+msgid "The GNOME Project"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr ""
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr ""
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr ""
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr ""
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Aseɣẓan"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Uɣal ɣer deffir"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr ""
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr ""
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr ""
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Rechercher"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Source"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Ikufan n useɣzan"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr ""
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Iɣewwaṛen n uẓeṭṭa"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Ugar n isallen"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr ""
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr ""
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr ""
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paquet"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Yegguni"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Yettwasbedd"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Asebded"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Tukksa"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr ""
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr ""
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr ""
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr ""
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr ""
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr ""
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "ISEM N UFAYLU"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr ""
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr ""
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr ""
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr ""
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr ""
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr ""
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Sefsex"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Sebdeed"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Mettre à jour"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Supprimer"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr ""
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr ""
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "Sefsex (_C)"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Awal uffir"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Wayeḍ"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Tous"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr ""
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Tazmilt"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Isem"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Sken"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Asmizzwer"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr ""
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Ales tanekra"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Sker"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr ""
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr ""
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Talqayt"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Amatu"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "AKK"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr ""
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Amawaḍ"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr ""
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr ""
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr ""
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr ""
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr ""
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Tukksa..."
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr ""
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Asewjed…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr ""
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Sebded..."
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Kkes"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Réseau"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr ""
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr ""
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr ""
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr ""
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr ""
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Périphériques"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr ""
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Akaram umager"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr ""
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr ""
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr ""
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr ""
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Paramètres"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr ""
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr ""
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr ""
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr ""
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr ""
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Arussin"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Werjin"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Arussin"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Faible"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "D alemmas"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Haut"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Arussin"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr ""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Taɣult tazayezt"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr ""
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr ""
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Ugar n telɣut"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr ""
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Asider"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr ""
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr ""
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr ""
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr ""
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr ""
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr ""
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr ""
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr ""
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Tasemlit"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr ""
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr ""
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr ""
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Abadu"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr ""
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Tisirag"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Yettwalqem"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Catégorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr ""
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr ""
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Aneflay"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licence"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Ilelli"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Bab"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Izegrar"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Iceggiren"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr ""
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr ""
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr ""
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr ""
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr ""
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " akked "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr ""
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr ""
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr ""
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr ""
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Anṣuf"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Yettwasbedd"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Yettwalqem"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Arussin"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr ""
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Amazray"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr ""
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr ""
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr ""
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr ""
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr ""
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr ""
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "aseqdac"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr ""
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Amasal"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Asbeddi"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Uggar …"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Kcem ɣer yiseɣzan-nniḍen seg teɣbula n wis tlata yettwafernen."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"kra seg yiseɣzan-a sɛan bab ɣef waya sɛan tilas n useqdec, n beṭṭu d unekcum "
+"ɣer tengalt taɣbalut."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr ""
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Activer"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr ""
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr ""
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Ɣer deffir"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Ɣer zdat"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr ""
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Taggayin"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "D tidet tebɣiḍ ad tekkseḍ %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Kemmel"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Désactiver"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr ""
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Ikufan n wis tlata"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr ""
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Yermed"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Ittwarermed"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr ""
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Aglam wezzil aṭas"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr ""
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr ""
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr ""
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Agzul"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Cegger"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr ""
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Aneqqis"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr ""
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Oui"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Uhu"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr ""
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr ""
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr ""
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr ""
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr ""
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr ""
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr ""
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Tuṭṭfa n ugdil"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr ""
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr ""
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr ""
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Aɣbalu: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr ""
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr ""
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr ""
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Isedγiten"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr ""
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr ""
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr ""
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr ""
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr ""
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Askan"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s imucceḍ."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr ""
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr ""
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr ""
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr ""
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr ""
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr ""
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Sken tealqayt"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr ""
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr ""
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Cegger"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr ""
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr ""
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr ""
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr ""
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr ""
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr ""
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr ""
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr ""
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr ""
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr ""
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr ""
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr ""
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr ""
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr ""
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr ""
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr ""
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr ""
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr ""
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr ""
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr ""
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr ""
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Ales asekker tura"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Tasnallunt"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Takrura"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Tutlayin"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Tusnakt"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Iḥedran"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Takarḍa"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Tameẓla"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Addalen"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Tawlaft"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Tasleṭ"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Taswast"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Azadur n isefka"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Tadrimt"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tisefsiyin"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Asideg"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Asqerdec"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Isallen"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tous"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Yuɣal ɣer sdat"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Taẓuri"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Tameddurt"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Iseḍsayen"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Tadawsa"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Amazray"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Tasertit"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Addalen"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Ifecka n uneflay"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Uraren"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Tamsisɣelt"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr ""
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr ""
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Anɣal ur yeddi ara"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr ""
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr ""
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr ""
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr ""
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr ""
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr ""
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr ""
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
diff --git a/po/kk.po b/po/kk.po
new file mode 100644
index 0000000..9e1d815
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,5495 @@
+# Kazakh translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2014-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-12 18:40+0500\n"
+"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
+"Language-Team: Kazakh <kk_KZ@googlegroups.com>\n"
+"Language: kk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME үшін қолданбалар басқарушысы"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Software қолданбасы сізге жаңа қолданбалар мен жүйелік кеңейтулерді тауып, "
+"орнатуды және орнатылған қолданбаларды өшіруді мүмкін қылады."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Software қолданбасы ұсынылатын және әйгілі қолданбаларды көрсетіп "
+"отырады, олардың пайдалы сипаттамасы және әрбіреуінің бірнеше скриншоты бар "
+"болады. Қолданбаларды санаттар тізімдерін шолу арқылы немесе тікелеі іздеу "
+"арқылы табуға болады. Сонымен қатар, бұл қолданба арқылы жүйеңізді желіден "
+"тыс жаңартуларымен жаңартуға болады."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Шолу панелі"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Көбірек ақпарат панелі"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Орнатылған панелі"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Жаңартулар панелі"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Жаңарту ақпараты"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "GNOME жобасы"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Appstream файлын жүйелік орналасуға орнату"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Appstream файлы жүйелік орналасуға орнатылуда"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Үйлесімді жобалар тізімі"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"GNOME, KDE және XFCE сияқты көрсетуіміз керек болатын үйлесімді жобалар "
+"тізімі."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Жаңартуларды GNOME Software көмегімен басқару керек пе"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Сөндірілген болса, GNOME Software жаңартулар панелін жасырады, және ешбір "
+"автожаңарту немесе жүйелік жаңарту әрекеттерін орындамайды."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Жаңартуларды автоматты түрде жүктеп алу және орнату"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Іске қосылған болса, GNOME Software фонда жаңартуларды жүктеп алып, жүйені "
+"қайта іске қосуды талап етпейтіндерді өздігінен орнатады."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Фонда жаңартылған БҚ туралы пайдаланушыға хабарлау"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Іске қосылған болса, GNOME БҚ пайдаланушыға ол іссіз болған кезде орын алған "
+"жаңартулар туралы хабарлайды."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Өлшенетін байланыста жаңартуларды автоматты түрде жүктеп алу керек пе"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Іске қосылған болса, GNOME Software фонда автожаңартылады, егер өлшенетін "
+"байланыста болса да (кейбір метадеректерді алу, жаңартуларды тексеру, т.б., "
+"бұл пайдаланушы байланыс үшін төлейтін ақысын арттыруы мүмкін)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "GNOME Software қолданбасының бірінші жөнелтілуі ме"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Қолданбалар қасында рейтингті жұлдызшалар ретінде көрсету"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Еркін емес қолданбалар орнату алдында ескерту сұхбатын көрсетеді"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Еркін емес қолданбалар орнатылған кезде ескерту сұхбатын көрсетілуі мүмкін. "
+"Осында ондай сұхбатты басуға болады."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Әйгілі қолданбалар тізімі"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Жүйелік қолданбалардың орнына пайдаланылатын қолданбалар тізімі."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Соңғы рет жаңартуды тексерудің уақыт белгісі"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Соңғы рет жаңарту туралы ескертудің уақыт белгісі"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Жаңартудан кейін тазартылатын қауіпсіздіктің бірінші жаңартуының уақыт "
+"белгісі"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Соңғы рет жаңартудың уақыт белгісі"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Жүйе онлайн режимінде болған және кез келген жаңартулар алғанның соңғы уақыт "
+"белгісі"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Қолданбаларға пікірлерді қалдыру үшін қолданылатын сервер"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Шолулар үшін карманың ең төменгі баллы"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "БҚ көздерін баптау сұхбатына қатынауды рұқсат ету"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Шығарылымға дейінгі нұсқаларға дейін жаңартуды ұсынып отыру"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Тегін емес бағдарламалық қамтама репозиторийлерін орнату үшін сұрауды көрсету"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Орнатылған бағдарламалар тізімінде бағдарламалардың орнатылған өлшемін "
+"көрсету"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Тегін емес және меншігі бар бағдарламалық қамтаманы түсіндіретін URI"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"AppStream файлдарын барлық пайдаланушылар үшін жүйелік орналасуға орнату"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "GNOME қоршамы кеңейтулері репозиторийін іске қосу"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Кіру үшін қолданылған gnome-online-account id сақтайтын мәтіндік жол"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "БҚ орнату"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Таңдалған БҚ-ны жүйеге орнату"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Барлығын таңдау"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Ештеңе таңдамау"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_БҚ қайнар көздері"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Жаңарту баптаулары"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Бағд. қамтама"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Артқа"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Шолу"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "Орнат_ылған"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Жаңар_тулар"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Іздеу"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Қайнар көзі"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "БҚ қайнар көздері"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Дискті сынау"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Желі баптаулары"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Қазір қайта қосу"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Көбірек ақпарат"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Автоматты жаңартулар аялдатылған"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Кө_бірек білу"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Жергілікті файл"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Десте"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Кезекте"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Орнатылған"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Орнатылуда"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Өшірілуде"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Іске қосылу режимі келесіден біреу: ‘updates’, ‘updated’, ‘installed’ не "
+"‘overview’"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "РЕЖИМІ"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Қолданбаларды іздеу"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "ІЗДЕУ"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Қолданба ақпаратын көрсету (қолданба ID-ін қолданып)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Қолданба ақпаратын көрсету (десте атын қолданып)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "ДЕСТЕ_АТЫ"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Қолданбаны орнату (қолданба ID-ін қолданып)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Жергілікті десте файлын ашу"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "ФАЙЛ_АТЫ"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Кеңейтілген жөндеу ақпаратын көрсету"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Кезекте тұрған әрбір жаңартуды фонда орнату"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Жаңарту баптауларын көрсету"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Орындалып тұрған нұсқаның жұмысын аяқтау"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream орнына жергілікті файлдағы қайнар көздерін қалау"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Нұсқа ақпаратын шығару"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Baurzhan Muftakhidinov <baurthefirst@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Осы туралы"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Жүйеңізде БҚ-ны басқарудың ыңғайлы жолы."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Кешіріңіз! Бұл қолданба үшін ақпараты жоқ."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Веб сайтын шолу"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Орнату…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Бас тарту"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Орнату"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Жаңарту"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Өшіру"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Құрылғыны жаңарту кезінде қолдану мүмкін емес."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Қосымша рұқсаттарды талап етеді"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Жүйеге кіру қажет"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "Ба_с тарту"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Логин"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Па_йдаланушы"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Пароль"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Басқа"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Барлығы"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Ұсынылатын %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Рейтинг"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Аты"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Көрсету"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Сұрыптау"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "1 және %u арасындағы санды енгізіңіз: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Қолданбаны таңдаңыз:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "ОЖ жаңартулары орнатылды"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Жуырда орнатылған жаңартулар бағалау үшін қолжетімді"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s енді орнатылған"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Өзгерістер іске асуы үшін жүйені қайта қосу керек."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Қолданба қолданылуға дайын."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Қайта қосу"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Жөнелту"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Үшінші жақты БҚ орнату керек пе?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Үшінші жақты БҚ көзін іске қосу керек пе?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">еркін және ашық БҚ</a> емес болып табылады, және оны “%s” ұсынады."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s дестесін “%s” ұсынады."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Орнатуды жалғастыру үшін бұл БҚ көзі іске қосылған болуы тиіс."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "%s кейбір елдерде орнату немесе қолдану заңсыз болуы мүмкін."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Бұл кодекті кейбір елдерде орнату немесе қолдану заңсыз болуы мүмкін."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Келесіде ескертпеу"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Іске қосу және орнату"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Дестелер басқарушысы ұсынған толығырақ ақпараты бар қателер:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Ақпараты"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Жаңартулар орнатылды"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Олар іске асуы үшін жүйені қайта қосу керек."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Қазір емес"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Мультфильмдегі зорлық-зомбылық жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Мультфильм кейіпкерлері қауіпті жағдайларда"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Агрессивті жанжалдағы мультфильм кейіпкерлері"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Мультфильм кейіпкерлерінің қатысуымен графикалық зорлық-зомбылық"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Қиялдағы зорлық-зомбылық жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Қауіпті жағдайлардағы кейіпкерлер шындықтан оңай ажыратылады"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Агрессивті жанжалдағы кейіпкерлер шындықтан оңай ажыратылады"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Графикалық зорлық-зомбылық шындықтан оңай ажыратылады"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Нақты зорлық-зомбылық жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Қауіпті жағдайларда шынайыға ұқсайтын кейіпкерлер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Агрессивті жанжалдағы шынайы кейіпкерлердің бейнелері"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Нақты кейіпкерлерді қамтитын графикалық зорлық-зомбылық"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Қантөгіс жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Шындыққа жанаспайтын қантөгіс"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Реалистік қантөгіс"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Қантөгіст және дене мүшелерінің зақымдануы"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Жыныстық зорлық-зомбылық жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Зорлау немесе басқа жыныстық зорлық-зомбылық"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Алкогольге сілтемелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Алкогольді өнімдеріне сілтемелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Алкогольді өнімдерін пайдалану"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Заңсыз есірткіге сілтемелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Заңсыз есірткіге сілтемелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Заңсыз есірткіні қолдану"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Темекі өнімдеріне сілтемелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Темекі өнімдеріне сілтемелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Темекі өнімдерін пайдалану"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Ешқандай жалаңаштық жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Қысқа көркем жалаңаштық"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Ұзақ жалаңаштық"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Сексуалдық сипаттағы сілтемелер немесе бейнелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Арандатушылық сілтемелер немесе бейнелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Сексуалдық сілтемелер немесе бейнелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Графикалық жыныстық мінез-құлық"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Орынсыз әзіл жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Жай әзіл"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Дөрекі немесе дәретханалық әзіл"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Жетілген немесе жыныстық әзіл"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Ешқандай дискриминациялық тіл жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Адамдардың белгілі бір тобына деген теріс көзқарас"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Эмоционалдық зиян келтіруге арналған кемсітушілік"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Жынысы, сексуалдылық, нәсілі немесе діні бойынша айқын кемсіту"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Жарнаманың ешбір түрі жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Өнімнің өз-өзін беру"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Кейбір брендтер немесе сауда маркасымен қорғалған өнімдерге тікелей сілтеу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Пайдаланушыларға шын әлемнен кейбір нәрселерді сатып алу ұсынылады"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Ешқандай құмар ойын болмайды"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Кездейсоқ оқиғалардағы токендер немесе кредиттер арқылы құмар ойындар"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "\"Ойын\" ақшасын пайдаланатын құмар ойындар"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Нақты ақшаны пайдаланатын құмар ойындар"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Ақшаны жарату мүмкіндігі жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Пайдаланушылар шын ақшаны жіберуге ұсынылады"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Нақты ақшаны бағдарламада жұмсай алу мүмкіндігі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Басқа ойыншылармен чат мүмкін емес"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Сөйлесу функциясынсыз пайдаланушы-пайдаланушы арасындағы қарым-қатынас"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Ойыншылар арасындағы басқарылатын чат мүмкіндігі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Ойыншылар арасындағы басқарылмайтын чат мүмкіндігі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Басқа ойыншылармен сөйлесу мүмкін емес"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Ойыншылар арасындағы басқарылмайтын аудио немесе видео чат мүмкіндігі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Әлеуметтік желілердегі аттар немесе эл. пошта адрестермен бөлісу жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Әлеуметтік желілердегі аттар немесе эл. пошта адрестермен бөлісу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Пайдаланушы ақпаратын үшінші тараппен бөліспеу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Қолданбаның соңғы нұсқасы тексерілуде"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Басқалар пайдаланушыны анықтауға мүмкіндік бермейтін диагностикалық "
+"деректерді бөлісу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Басқалар пайдаланушыны анықтай алатын ақпаратымен бөлісу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Басқа пайдаланушылармен физикалық орналасумен бөліспеу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Басқа пайдаланушылармен физикалық орналасумен бөлісу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Гомосексуализмге сілтемелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Гомосексуализмге жанама сілтемелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Бір жыныстағы адамдар арасындағы сүйісу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Бір жыныстағы адамдар арасындағы графикалық жыныстық қатынас"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Жезөкшелікке сілтемелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Жезөкшелікке жанама сілтемелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Жезөкшелікке тікелей сілтемелер"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Жезөкшелік актісінің графикалық бейнелері"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Көзге көрінетін өлі адам жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Көрінетін өлі адамның қалдықтары"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Элементтерге ұшыраған адамның өлі қалдықтары"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Құлдық туралы сілтемелер жоқ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Тарихи құлдықтың бейнелері немесе сілтемелері"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Қазіргі уақыттағы құлдықтың суреттелуі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Қазіргі уақыттағы құлдықтың графикалық бейнелері"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Жалпы"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "БАРЛЫҒЫ"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Тек ересектер"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Ересек"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Жасөспірім"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Әркім 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Әркім"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Ерте балалық шақ"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Қолданба"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s қосымша файл пішімдерін қолдауды талап етеді."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Қосымша MIME түрлері керек"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s қосымша қаріптерді талап етеді."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Қосымша қаріптер керек"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s қосымша мультимедиа кодектерін талап етеді."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Қосымша мультимедиа кодектері керек"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s қосымша принтер драйверлерін талап етеді."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Қосымша принтер драйверлері керек"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s қосымша дестелерді талап етеді."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Қосымша дестелер керек"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Software ішінен табу"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Өшірілуде…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Орнату кезекте тұр…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Жаңарту кезекте…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Дайындау…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Бұл қолданбаны тек Интернетпен белсенді байланыс болған кезде ғана қолдануға "
+"болады."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "Ор_нату"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "Ор_нату…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "Жөне_лту"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Ө_шіру"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Желі"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Желік арқылы байланыса алады"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Жүйелік қызметтер"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr ""
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Сессия қызметтері"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr ""
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Құрылғылар"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Жүйелік құрылғылар файлдарына қатынай алады"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Үй бумасы"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Файлдарды қарау, түзету және жасау құқығы бар"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Файлдарды қарай алады"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Файлдық жүйе"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Жүктемелер бумасы"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Баптаулар"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Кез келген параметрлерді көре және өзгерте алады"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Баяғы дисплей жүйесі"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Ескі, қауіпсіз емес дисплей жүйесін пайдаланады"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Құмсалғыштан шығып кету"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Құмсалғыштан қашып, кез келген басқа шектеулерді айналып өте алады"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Бұл қолданба толығымен құмсалғышта жасайды."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Белгісіз"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Ешқашан"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Белгісіз"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Төмен"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Орташа"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Жоғары"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Белгісіз"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Пікірді қалдыру үшін интернетпен байланыс керек"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "\"%s\" табу мүмкін емес"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Публикалық меншік"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Еркін бағд. қамтама"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Пайдаланушылар келесі лицензиялармен шектелген:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Көбірек ақпарат"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Көбірек ақпарат парағы"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Жүктеп алуда"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Жаңар_ту"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Жарлықты қо_су"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Жарлықты ө_шіру"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Скриншот жоқ"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "БҚ қайнар көзі қоса берілді"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Бұл қолданбада жаңартуларды және басқа да БҚ-қа қатынауды ұсынатын БҚ "
+"репозиторийі бар."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Ешбір БҚ қайнар көзі қоса берілмеді"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Бұл қолданбада БҚ репозиторийі жоқ. Ол жаңа нұсқаларға жаңартылмайтын болады."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "Бұл БҚ сіздің дистрибутивіңізбен ұсынылып тұр, оны алмастырмау керек."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "БҚ қайнар көзі анықталды"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Бұл БҚ репозиторийін қосу сізге қосымша БҚ және жаңартуларға қол жеткізеді."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Тек сенімді БҚ қайнар көздерін қолданыңыз."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Веб сайты"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "Ақ_шалай көмектесу"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Сіздің тіліңізде аудармасы бар"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Құжаттама"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Шығарылым әрекеттері"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Жүйелік интеграция"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Құмсалғышта"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Арна"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Нұсқасы"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Жас бойынша рейтингі"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Рұқсаттар"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Жаңартылған"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Санат"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Орнатылған өлшемі"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Жүктеп алынатын өлшемі"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Өндіруші"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Лицензиясы"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Тегін"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Проприетарлы"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Қосымшалар"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Таңдалған кеңейтулер қолданбамен бірге орнатылады."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Пікірлер"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Пікірді _жазу"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Көбірек көрсету"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Бұл дегеніміз, бағдарламалық қамтаманы еркін іске қосып, көшіру, тарату, "
+"зерттеу және өзгертуге болады."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Проприетарлы БҚ"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Бұл дегеніміз, бағдарламалық қамтаманың иесі жеке тұлға немесе компания "
+"болып табылады. Көбінесе, оның қолдануға қойылған шектеулер, және оның "
+"бастапқы кодтың қолжетімсіз болу жағдайлары орын алады."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "БҚ лизензиясы белгісіз"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Қолданбаның лицензиялық шарттары белгісіз."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Қолданба осылай бағаланды, себебі ол ұсынады:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Бұл рейтинг үшін ақпараты жоқ."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " және "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s жазуы үшін қолжетерлік қаріптер"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s үшін қолжетерлік БҚ"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Сұралған БҚ табу мүмкін емес"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s табылмады"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "вебсайттан"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "%s файлын ұсынатын бірде-бір қолданба жоқ."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"%s туралы ақпаратты және жетіспейтін қолданбаларды орнату жолы жөнінде %s "
+"білуге болады."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s қолдауы үшін бірде-бір қолданба жоқ."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s қолжетерсіз."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"%s туралы ақпаратты және бұл пішімді қолдай алатын қолданбаны орнату жолы "
+"жөнінде %s білуге болады."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s жазудың қолдауы үшін бірде-бір қаріп жоқ."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"%s туралы ақпаратты және қосымша қаріптерді орнату жолы жөнінде %s білуге "
+"болады."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s пішімі үшін бірде-бір аддон кодектері жоқ."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"%s туралы ақпаратты және бұл пішімді ойната алатын кодекті орнату жолы "
+"жөнінде %s білуге болады."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s қолдауы үшін бірде-бір Plasma ресурсы жоқ."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"%s туралы ақпаратты және қосымша Plasma ресурстарын орнату жолы жөнінде %s "
+"білуге болады."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s үшін принтер драйверлері жоқ."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"%s туралы ақпаратты және бұл принтерді қолдайтын драйверді орнату жолы "
+"жөнінде %s білуге болады."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "бұл вебсайт"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Өкінішке орай, сіз іздеген %s табу мүмкін емес. Көбірек білу үшін, %s "
+"қараңыз."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Іздеу нәтижелері табылмады"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s файл пішімі"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Кодектер беті"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Қош келдіңіз"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Software қолданбасына қош келдіңіз"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Software қолданбасы өзіңізге керек барлық БҚ-ны бір жерден орнатуға мүмкін "
+"қылады. Біздің ұсыныстарымызды қарап, санаттарды шолыңыз, немесе керек "
+"қолданбаны іздеп көріңіз."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Шолуға өту"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Өшірілген"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Орнатылған"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Жаңартылған"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Белгісіз"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Тарихы"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Жүйелік қолданбалар"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Орнатылған парағы"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "БҚ каталогы жүктеліп алынуда"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Бетті жүктеу"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Іске қосылу…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Желі ба_птауларын ашу"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr ""
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "жүйе"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "пайдаланушы"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Бұтақ"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Пішім"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Орнату"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Көбірек…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Ұсынылатын аудио және видео қолданбалары"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Ұсынылатын ойындар"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Ұсынылатын графикалық қолданбалары"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Ұсынылатын өнімділік қолданбалары"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Таңдалған үшінші жақты ұсынушыларынан қосымша БҚ-ға қол жеткізу."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Бұл БҚ ішінен кейбірі проприетарлы БҚ, оның қолданылу және бастапқы кодтарға "
+"қатынау бойынша шектеулері бар."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Көбірек білу…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Іске қосу"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Шолу парағы"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Үшінші жақты БҚ көздерін іске қосу керек пе?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Алдыңғы"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Келесі"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Редакторлар таңдауы"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Соңғы шығарылымдар"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Санаттар"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Қолданба деректері табылмады"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s дайындау"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "%s репозиторийін өшіруді шынымен қалайсыз ба?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "%s өшіруді шынымен қалайсыз ба?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s өшіріледі, және оны қолданғыңыз келсе, сізге оны қайтадан орнату керек "
+"болады."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Орнатылған)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Жаңарту баптаулары"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Автоматты жаңартулар"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Автожаңартулар мобильді немесе өлшенетін байланыста сөндірілген болады."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Автожаңарту ескертулері"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Жаңартулар автоорнатылған кезде ескертулерді көрсету."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Үйлесімсіз БҚ"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "Жалға_стыру"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u қолданба орнатылды"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u қосымша орнатылды"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u қолданба"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u қосымша"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s және %s орнатылды"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "\"%s\" өшіру керек пе?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "\"%s\" сөндіру керек пе?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Сөндіру"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "операциялық жүйе"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Үшінші жақты БҚ репозиторийлер"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Қосымша қайнар көздері жоқ"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "Іск_е қосу"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Ө_шіру…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "Сө_ндіру…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Іске қосылуда"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Сөндірілуде"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Іске қосылған"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Сөндірілген"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Жек көремін"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Ұнатпаймын"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Жарайды"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Ұнатамын"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Тамаша"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Жұлдызшалы рейтингті таңдаңыз"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Қорытындысы тым қысқа"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Қорытындысы тым ұзын"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Сипаттамасы тым қысқа"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Сипаттамасы тым ұзын"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Пікірді жариялау"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Жариялау"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Қорытынды"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Пікір"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Пікірге шағым жазу керек пе?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Шағым жіберу"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Бұл пікір сізге пайдалы болды ма?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Иә"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Жоқ"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr ""
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Шағым жіберу…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Өшіру…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Скриншот табылмады"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Бейнені жүктеу сәтсіз аяқталды"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Скриншот өлшемі табылмады"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Кэшті жасау мүмкін емес"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Скриншот жарамсыз"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Скриншот қолжетерсіз"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Скриншот"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "тағы %u сәйкестік"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Іздеу парағы"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Қолданбалар табылмады"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "\"%s\""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "%s адресінен бинарлық кодтар жаңартуларын жүктеп алу мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s адресінен жаңартуларды жүктеп алу мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Жаңартуларды жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Жаңартуларды жүктеп алу мүмкін емес: интернетке байланыс керек, бірақ, ол "
+"қолжетерсіз"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "%s адресінен жаңартуларды жүктеп алу мүмкін емес: диск орны жетпейді"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Жаңартуларды жүктеп алу мүмкін емес: диск орны жетпейді"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Жаңартуларды жүктеп алу мүмкін емес: аутентификация керек болды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Жаңартуларды жүктеп алу мүмкін емес: аутентификация қате болды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Жаңартуларды жүктеп алу мүмкін емес: сізде БҚ орнатуға рұқсаттар жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Жаңартулар тізімін алу мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "%s орнату мүмкін емес, өйткені %s адресінен жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "%s орнату мүмкін емес, өйткені жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "%s орнату мүмкін емес, өйткені %s орындалу ортасы қолжетерсіз"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "%s қолдауы жоқ ретінде орнату мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Орнату мүмкін емес: интернетке байланыс керек, бірақ, ол қолжетерсіз"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Орнату мүмкін емес: қолданба пішімі қате"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s орнату мүмкін емес: диск орны жетпейді"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s орнату мүмкін емес: аутентификация керек болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s орнату мүмкін емес: аутентификация қате болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "%s орнату мүмкін емес: сізде БҚ орнатуға рұқсаттар жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "%s орнату мүмкін емес: эл. қорегіне қосылу керек"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "%s орнату мүмкін емес: батарея деңгейі тым төмен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s орнату мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"%s жаңарту мүмкін емес, өйткені %s адресінен жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "%s жаңарту мүмкін емес, өйткені жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Жаңартуларды орнату мүмкін емес, өйткені %s адресінен жүктеп алу сәтсіз "
+"аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Жаңартуларды орнату мүмкін емес, өйткені жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Жаңарту мүмкін емес: интернетке байланыс керек, бірақ, ол қолжетерсіз"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s жаңарту мүмкін емес: диск орны жетпейді"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Жаңартуларды орнату мүмкін емес: диск орны жетпейді"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "%s жаңарту мүмкін емес: аутентификация керек болды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Жаңартуларды орнату мүмкін емес: аутентификация керек болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s жаңарту мүмкін емес: аутентификация қате болды"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Жаңартуларды орнату мүмкін емес: аутентификация сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "%s жаңарту мүмкін емес: сізде БҚ орнатуға рұқсаттар жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "Жаңартуларды орнату мүмкін емес: сізде БҚ жаңарту құқығы жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "%s жаңарту мүмкін емес: эл. қорегіне қосылу керек"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Жаңартуларды орнату мүмкін емес: Эл. қорегіне қосылуы керек"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "%s жаңарту мүмкін емес: батарея деңгейі тым төмен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Жаңартуларды орнату мүмкін емес: батарея деңгейі тым төмен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "%s жаңарту мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Жаңартуларды орнату мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%s дейін %s өнімін жаңарту мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "%s дейін жаңартылу мүмкін емес, өйткені жүктеп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"%s жаңарту мүмкін болмады: интернетке қатынау қажет болды, бірақ қолжетімсіз"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s дейін жаңарту мүмкін емес: диск орны жетпейді"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s дейін жаңартылу мүмкін емес: аутентификация керек болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s дейін жаңартылу мүмкін емес: аутентификация қате болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%s дейін жаңартылу мүмкін емес: сізде жүйені жаңартуға рұқсаттар жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s дейін жаңартылу мүмкін емес: эл. қорегіне қосылу керек"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "%s дейін жаңартылу мүмкін емес: батарея деңгейі тым төмен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "%s дейін жаңарту мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s өшіру мүмкін емес: аутентификация керек болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s өшіру мүмкін емес: аутентификация қате болды"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s өшіру мүмкін емес: сізде БҚ орнатуға рұқсаттар жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s өшіру мүмкін емес: эл. қорегіне қосылу керек"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "%s өшіру мүмкін емес: батарея деңгейі тым төмен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "%s өшіру мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s жөнелту мүмкін емес: %s орнатылмаған"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Диск орны жетпейді — орынды босатып, қайталап көріңіз"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Кешіріңіз, бірнәрсе қате кетті"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Файлды орнату сәтсіз аяқталды: қолдауы жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Файлды орнату сәтсіз аяқталды: аутентификация сәтсіз"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Орнату сәтсіз аяқталды: қолдау жоқ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Орнату сәтсіз аяқталды: аутентификация сәтсіз"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s адресіне байланысу мүмкін емес"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Жаңа плагиндерді қолдану үшін %s қайта іске қосу керек."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Бұл қолданба жаңа плагиндерді қолдану үшін қайта іске қосылуы керек."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Эл. қорегіне қосылу керек"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Батареяның деңгейі тым төмен"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Қайнар көзі: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Орнатылуда)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Өшірілуде)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Барлық ө_шіру"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Жаңартудың сипаттамасы жоқ."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Орнатылған %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Орнатылған жаңартулар"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Қосылатындар"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Өшірілетіндер"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Жаңартулар"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Нұсқасы төмендетілетіндер"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Бұл жүйеде ешбір жаңарту орнатылмаған."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Қауіпсіздік жаңартулары кезекте бар"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Маңызды жаңартуларды қазір орнату ұсынылады"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Қайта қосу және орнату"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "БҚ жаңартулары қолжетерлік"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Маңызды ОЖ және қолданба жаңартулары орнатылуға дайын"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Қарау"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u қолданба жаңартылды — қайта іске қосу керек"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u қолданба жаңартылды"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s жаңартылды."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Қолданбаны қайта іске қосыңыз."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s және %s жаңартылды."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u қолданба қайта іске қосуды талап етеді."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Соның ішінде %s, %s және %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "ОЖ жаңартулары қолжетерсіз"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Қауіпсіздік жаңартуларын алуды жалғастыру үшін жаңартыңыз."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Орнату үшін %s жаңа нұсқасы қолжетерлік"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "БҚ жаңартулары қолжетерлік"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "БҚ жаңартулары сәтсіз"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Маңызды БҚ жаңартуларын орнату сәтсіз аяқталды."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Деректерді көрсету"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Жүйелік жаңарту аяқталды"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "%s %s ішіне қош келдіңіз!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "БҚ жаңартулары орнатылды"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Маңызды БҚ жаңартулары орнатылды."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Қарап шығу"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Жаңарту сәтсіз аяқталды"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Жүйе жаңа болып тұр."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Жаңартудан бас тартылды."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Интернетпен байланыс керек болды, бірақ ол жоқ. Оны тексеріп, қайталап "
+"көріңіз."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Жаңартудың қауіпсіздік мәселелері бар. Көбірек білу үшін БҚ өндірушісіне "
+"хабарласыңыз."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Диск орны жетпеді. Орынды босатып, қайталап көріңіз."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Кешірім сұраймыз: жаңартуды орнату сәтсіз аяқталды. Басқа жаңартуды күтіп, "
+"қайталап көріңіз. Сонда да мәселе кетпесе, БҚ өндірушісіне хабарласыңыз."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Кеше, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Кеше, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Екі күн бұрын"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Үш күн бұрын"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Төрт күн бұрын"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Бес күн бұрын"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Алты күн бұрын"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Бір апта бұрын"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Екі апта бұрын"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Жаңа жаңартуларды іздеу…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Жаңартуларды баптау…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Бұл біраз уақытты алуы мүмкін)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Соңғы тексерілген: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s үшін енді қолдау жоқ."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Сіздің ОЖ үшін енді қолдау жоқ."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Бұл дегеніміз, ол енді қауіпсіздік жаңартуларын алмайтын болады."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Жаңалау нұсқаға дейін жаңарту ұсынылады."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Ақы алынуы мүмкін"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Сымсыз кеңжолақты желісін пайдалану кезінде жаңартуларға тексеру қосымша "
+"шығындарға әкеп соғуы мүмкін."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Сонд_а да тексеру"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Желі жоқ"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Жаңартуларға тексеру үшін Интернетпен байланыс керек."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Тексеру…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Жаңартуларға тексеру"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Жаңартулар парағы"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "БҚ ескірмеді"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Сымсыз кеңжолақты желісін пайдалану кезінде жаңартуларға тексеру қосымша "
+"шығындарға әкеп соғуы мүмкін"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Сонда да тексеру"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Жаңартуларға тексеру үшін желіге байланысыңыз"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Желі баптаулары"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Жаңартулар автоматты түрде басқарылады"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Қайта қосу және жаңарту"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Барлығын жаңарту"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Құрамындағы бинарлық кодтар"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Қайта қосуды талап етеді"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Қолданба жаңартулары"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Құрылғының бинарлық кодтары"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "Жү_ктеп алу"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Жаңартылу алдында деректер және файлдарыңыздың қор көшірмелерін жасау "
+"ұсынылады."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Қазір қа_йта қосу"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Жаңартулар компьютер қайта іске қосылғанда іске асырылатын болады."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s қолжетерлік"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "%s %s жүктелуді күту"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s жүктеліп алынуда"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s орнатылуға дайын"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Маңызды жаңарту, жаңа мүмкіндіктерді әкеледі."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Көбірек бі_лу"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Бұл компьютерде БҚ-ны қосу, өшіру не жаңарту"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Жаңарту;Қайнар көздер;Репозиторийлер;Баптаулар;Орнату;Өшіру;Бағдарлама;БҚ;"
+"Қолданба;Дүкен;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Аудионы жасау және түзету"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Музыкалық плеерлер"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Жөндеушілер"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Өндіру орталары"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Жасанды интеллект"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Астрономия"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Химия"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Тілдер"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Математика"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Робототехника"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Әрекет"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Саяхат"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Аркадалар"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Блоктар"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Тақталы"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Карта ойындары"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Эмуляторлар"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Балалар үшін"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Логикалық"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Рольмен ойнау"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Спорт"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Стратегиялық"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D графикасы"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Фотография"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Сканерлеу"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Векторлық графика"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Қарау қолданбалары"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Күнтізбе"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Дерекқор"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Қаржы"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Мәтіндік процессор"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Қаріптер"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Кодектер"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Кіріс қайнар көздері"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Тілдік дестелер"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Локализация"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Құрылғылық драйверлер"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Чат"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Жаңалықтар"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Веб браузерлері"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Мәтін түзетушілері"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Барлығы"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Ұсынылатын"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Өнер"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Өмірбаян"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Комикстер"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Фантастика"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Деңсаулық"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Тарих"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Өмір стилі"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Саясат"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Спорт"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Аудио және видео"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Өндіру саймандары"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Білім алу және ғылым"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Ойындар"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Графика және фотография"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Өнімділік"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Байланысу және жаңалықтар"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Сілтеме"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Утилиталар"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "ОЖ жаңартулары"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Өнімділік, тұрақтылық және қауіпсіздік жақсартуларын әкеледі."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Ұсынылатын суреттерді жүктеп алу…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Жаңа мүмкіндіктер мен түзетулері бар Endless OS жаңартуы."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Software AppStream жүйелік орынға орнатқышы"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Командалық жол аргументтерін талдау сәтсіз аяқталды"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Тек бір файл атын көрсету керек"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Бұл бағдарламаны тек әкімші (root) пайдалана алады"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Құрама түрін тексеру сәтсіз аяқталды"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Көшіріп алу сәтсіз аяқталды"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Қосымша метадеректер файлдарын жүктеп алу…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Жаңарту ақпаратын жүктеп алу…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Соңғы мүмкіндіктер, өнімділік және тұрақтылық жақсартуларын алу үшін жаңарту."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak қолдауы"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak - бұл Linux үшін жұмыс үстел қолданбаларының жүйесі"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "%s үшін flatpak метадеректерін алу…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s құрылғы жаңартуы"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s жүйе жаңартуы"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s ендірілген контроллер жаңартуы"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s ME жаңартуы"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr ""
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s контроллер жаңартуы"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr ""
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr ""
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s баптаулар жаңартуы"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Бинарлы кодтар жаңартудың қолтаңбасын жүктеп алу…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Бинарлы кодтар жаңартудың метадеректерін жүктеп алу…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Бинарлық кодтарды жаңарту қолдауы"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Бинарлық кодтарды жаңарту мүмкіндігін ұсынады"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Қолданбалар рейтингтерін жүктеп алу…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap дүкені"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap қолдауы"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap - бұл әмбебап Linux дестесі"
+
+#~ msgid "About %s"
+#~ msgstr "%s туралы"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Бумаларды басқару интерфейсін көрсету"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "Б_арлығы"
+
+#~ msgid "Folder Name"
+#~ msgstr "Бума атауы"
+
+#~ msgid "_Add"
+#~ msgstr "Қо_су"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Қолданбалар бумасына қосу"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Кіру / Тіркелу…"
+
+#~ msgid "Continue"
+#~ msgstr "Жалғастыру"
+
+#~ msgid "Use"
+#~ msgstr "Қолдану"
+
+#~| msgid "_Add to Folder…"
+#~ msgid "Add another…"
+#~ msgstr "Басқасын қосу…"
+
+#~ msgid "Top Rated"
+#~ msgstr "Үздік"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Кеңейту баптаулары"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Кеңейтулерді өз тәуекеліңізге қарай қолданыңыз. Егер де жүйеңізде "
+#~ "мәселелер болса, оларды сөндіру ұсынылады."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS сәтті тексерілді!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Файлды жүктеу сәтсіз аяқталды"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Сақталмаған өзгерістер"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Қолданбалар тізімі жүктелген болып тұр."
+
+#~ msgid "Merge documents"
+#~ msgstr "Құжаттарды біріктіру"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Өзгерістерді елемеу"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "AppStream файлын ашу"
+
+#~ msgid "_Open"
+#~ msgstr "_Ашу"
+
+#~ msgid "_Save"
+#~ msgstr "_Сақтау"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Файлды сақтау сәтсіз аяқталды"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s баннер дизайны өшірілді."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Баннер дизайны өшірілді."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Қолданбалар тізімінің сақталмаған өзгерістері бар."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Кеңейтілген журналдауды қолдану"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Software баннерлер дизайнері"
+
+#~ msgid "No Designs"
+#~ msgstr "Дизайндар жоқ"
+
+#~ msgid "Error message here"
+#~ msgstr "Қате хабарламасы осында"
+
+#~ msgid "App ID"
+#~ msgstr "App ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Редакторлар таңдауы"
+
+#~ msgid "Category Featured"
+#~ msgstr "Ұсынылған санаты"
+
+#~ msgid "Undo"
+#~ msgstr "Болдырмау"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Баннерлер дизайнері"
+
+#~ msgid "New Banner"
+#~ msgstr "Жаңа баннер"
+
+#~ msgid "Import from file"
+#~ msgstr "Файлдан импорттау"
+
+#~ msgid "Export to file"
+#~ msgstr "Файлға экспорттау"
+
+#~ msgid "Delete Design"
+#~ msgstr "Дизайнды өшіру"
+
+#~ msgid "Featured App"
+#~ msgstr "Ұсынылатын қолданба"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "ОЖ жаңартуы"
+
+#~ msgid "Spacing"
+#~ msgstr "Аралық"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Екі ұрпақ арасындағы бос аралық шамасы"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Бірнәрсені таңдау үшін оның үстіне шертіңіз"
+
+#~ msgid "Select"
+#~ msgstr "Таңдау"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Бумаға қосу…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Бумаға жылжыту…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Бумадан ө_шіру"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "БҚ каталогы жүктелуде"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Ұсынылатын қолданбалар"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "%s сатып алуды шынымен қалайсыз ба?"
+
+#~ msgid "Purchase"
+#~ msgstr "Сатып алу"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "%s ретінде кіргенсіз"
+
+#~ msgid "Sign in…"
+#~ msgstr "Кіру…"
+
+#~| msgid "Sign out from %s"
+#~ msgid "Sign out"
+#~ msgstr "Шығу"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "%s сатып алу мүмкін емес: аутентификация керек болды"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "%s сатып алу мүмкін емес: аутентификация жарамсыз болды"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "%s сатып алу мүмкін емес: ешбір төлеу тәсілі бапталмаған"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "%s сатып алу мүмкін емес: төлем тайдырылған"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "%s сатып алу мүмкін емес"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "GNOME Software үшін ұсынылатын баннерлер дизайнын жасау"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;Бағдарламалық қамтама;БҚ;Қолданба;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Қоршам кеңейтулері"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Веб қолданбалар қолдауы"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Әйгілі веб қолданбаларын браузер ішінде жөнелту"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell кеңейтулер репозиторийі"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Қоршам кеңейтуінің метадеректерін жүктеп алу…"
+
+#~| msgctxt "Menu of Add-ons"
+#~| msgid "Shell Extensions"
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell кеңейтуі"
+
+#~| msgid "To continue you need to sign in."
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Жалғастыру үшін, сізге Ubuntu One тіркелгісін қолдану керек."
+
+#~| msgid "To continue you need to sign in."
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Жалғастыру үшін, сізге Ubuntu One тіркелгіңізді қолдану керек."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Қызмет үшін профильдеу ақпаратын көрсету"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Жалғастыру үшін сізге %s ішіне кіру керек."
+
+#~ msgid "Email address"
+#~ msgstr "Эл. пошта адресі"
+
+#~ msgid "I have an account already"
+#~ msgstr "Менде тіркелгім бар"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Тіркелгі жасағым келеді"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Паролімді ұмытып қалдым"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Келесі рет автокіру"
+
+#~ msgid "PIN"
+#~ msgstr "PIN коды"
+
+#~ msgid "Authenticate"
+#~ msgstr "Аутентификация"
+
+#~ msgid "_About"
+#~ msgstr "Осы т_уралы"
+
+#~ msgid "_Quit"
+#~ msgstr "_Шығу"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "%s туралы ақпаратты және бұл пішімді ойната алатын кодекті орнату жолы "
+#~ "жөнінде вебсайттан білуге болады."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Бұл шешілмегенше, БҚ орнату мүмкін емес."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Көбірек ақпарат алу үшін, %s шолыңыз."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "%s өнімін %s адресінен жаңарту мүмкін емес"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Қолданбалар жаңартылды"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Жаңа жаңартуларды жүктеп алу…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Қолданба парағын жүктеп алу…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam қолдауы"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Valve ұсынған көңіл көтеру платформасы"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Қа_йта қосу және жаңарту"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Барлығын жаңа_рту"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Қайта қосу және _орнату"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Бинарлы кодтар жаңартуын жүктеп алу…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba қолдауы"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba өңдірушілерге БҚ пакеттерін жасау мүмкіндігін береді"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Осыған дейін іске қосылған қосымша БҚ көздер тізімі"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Осыған дейін үшінші жақты қолданбаларды орнату кезінде іске қосылған "
+#~ "қосымша БҚ көздер тізімі."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Іздеу нәтижелерінде еркін емес БҚ көрсету"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Еркін емес қайнар көздер тізімі, оны қосымша түрде іске қосуға болады"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Қосымша БҚ-ны қолжетерлік қылады, соның ішінде браузерлер және ойындар."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Проприетарлы БҚ қайнар көздерін іске қосу керек пе?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "Қолданба не қосымшалар орнатылмады; басқа БҚ болуы мүмкін"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Әдетте қолданылу және бастапқы кодтарға қатынау бойынша шектеулері бар."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Проприетарлы БҚ қайнар көздері"
+
+#~ msgid "Remove Source"
+#~ msgstr "Қайнар көзін өшіру"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "БҚ көздерін интернеттен алуға болады. Бұл %s құрамында келмейтін қосымша "
+#~ "БҚ-ға қол жеткізеді."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Қайнар көзін өшіру нәтижесінде одан орнатылған барлық БҚ-ның өшірілуіне "
+#~ "де әкеп соғады."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Бұл қайнар көзінен ешбір БҚ орнатылмаған"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Бұл қайнар көзінен орнатылған"
+
+#~ msgid "Source Details"
+#~ msgstr "Қайнар көзі ақпараты"
+
+#~ msgid "Last Checked"
+#~ msgstr "Соңғы тексерілген"
+
+#~ msgid "Added"
+#~ msgstr "Қосылған"
+
+#~ msgid "Website"
+#~ msgstr "Веб сайты"
+
+#~ msgid "page1"
+#~ msgstr "page1"
+
+#~ msgid "page2"
+#~ msgstr "page2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "\"%s\" [%s]"
+
+#~ msgid "Other Updates"
+#~ msgstr "Басқа жаңартулар"
+
+#~ msgid "Total"
+#~ msgstr "Жалпы"
+
+#~ msgid "_Install All"
+#~ msgstr "Барлығын ор_нату"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "%s орнату сәтсіз аяқталды."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "%s өшіру сәтсіз аяқталды."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Интернетпен байланысты тексеріп, қайталап көріңіз."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Дисктегі орынды босатып, қайталап көріңіз."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ешнәрсе"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Барлығы"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Ұсынылатын"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Астрономия"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Химия"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Математика"
+
+#~ msgid "Science"
+#~ msgstr "Ғылым"
+
+#~ msgid "3rd party"
+#~ msgstr "3-ші жақтық"
+
+#~ msgid "web app"
+#~ msgstr "веб қолданбасы"
+
+#~ msgid "nonfree"
+#~ msgstr "еркін_емес"
+
+#~ msgid "shell extension"
+#~ msgstr "қоршам кеңейтуі"
+
+#~ msgid "_Installing"
+#~ msgstr "Ор_натылуда"
+
+#~ msgid "_Removing"
+#~ msgstr "Ө_шірілуде"
+
+#~ msgid " or "
+#~ msgstr " немесе "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Белгісіз"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Бұл БҚ үшінші жақтан келді."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr "Бұл БҚ үшінші жақтан келді, онда еркін емес құрамасы болуы мүмкін."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Бұл БҚ-да еркін емес құрамасы болуы мүмкін."
+
+#~ msgid "non-free"
+#~ msgstr "еркін_емес"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "БҚ қайнар көздері сізге қосымша БҚ-ға жол ашады."
+
+#~ msgid "One Star"
+#~ msgstr "Бір жұлдыз"
+
+#~ msgid "Two Stars"
+#~ msgstr "Екі жұлдыз"
+
+#~ msgid "Three Stars"
+#~ msgstr "Үш жұлдыз"
+
+#~ msgid "Four Stars"
+#~ msgstr "Төрт жұлдыз"
+
+#~ msgid "Five Stars"
+#~ msgstr "Бес жұлдыз"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Есептеу…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Белгісіз"
+
+#~ msgid "_History"
+#~ msgstr "_Тарихы"
+
+#~ msgid "Size"
+#~ msgstr "Өлшемі"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Ұсынылатын кеңселік қолданбалары"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "AppStream деректері табылмады"
+
+#~ msgid "Audio"
+#~ msgstr "Аудио"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Түзету"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Дерекқорлар"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Дисктерді жазу"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Әуесқойлық радио"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Миксер"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Музыка"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Жазу"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Секвенсор"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Тюнер"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Жинау"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Дерекқорлар"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Профильдеу"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Аудармалар"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Веб үшін өндіру"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Биология"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Информатика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Құрылыс"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Деректерді бейнелеу"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Экономика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Электр"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Электроника"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Инжиниринг"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Геология"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Жер қойнауы ғылымдары"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Тарих"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Гуманитарлық ғылымдар"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Суреттерді өңдеу"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Әдебиет"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Карталар"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Музыка"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Сандық анализ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Параллельді есептеу"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Физика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Руханият"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Ату"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Симуляторлар"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Спорт"
+
+#~ msgid "Graphics"
+#~ msgstr "Графика"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D графикасы"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Мәтінді тану"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Жариялау"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Растрлық графика"
+
+#~ msgid "Internet"
+#~ msgstr "Интернет"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Коммутация"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Эл. пошта"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Таспа"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Файлдармен алмасу"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Әуесқойлық радио"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Лезде хабарласу"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC клиенттері"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Бақылау"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Қашықтан қатынау"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Телефония"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Веб үшін өндіру"
+
+#~ msgid "Office"
+#~ msgstr "Офис"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Диаграммалар"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Контакттарды басқару"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Сөздік"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Эл. пошта"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Блок-сұлбалар"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "ҚДК"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Фотография"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Презентация"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Жобаларды басқару"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Жариялау"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Эл. кестелер"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Көрсетуші"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Өнер"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Жасанды интеллект"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Астрономия"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Биология"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Химия"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Информатика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Құрылыс"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Деректерді бейнелеу"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Экономика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Электр"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Электроника"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Инжиниринг"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "География"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Геология"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Жер қойнауы ғылымдары"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Тарих"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Гуманитарлық ғылымдар"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Суреттерді өңдеу"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Тілдер"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Әдебиет"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Карталар"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Математика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Медицина"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Сандық анализ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Параллельді есептеу"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Физика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Робототехника"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Руханият"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Спорт"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Эмулятор"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Файлдар басқарушысы"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Файлдық саймандар"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Бақылау"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Қауіпсіздік"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Терминал эмуляторы"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Қол жетерлілік"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Архивтеу"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Калькулятор"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Сағат"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Сығу"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Файлдық саймандар"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Карталар"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Руханият"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Телефония"
+
+#~ msgid "Video"
+#~ msgstr "Видео"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Түзету"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Дерекқор"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Дисктерді жазу"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Ойнатқыштар"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Жазу қолданбалары"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Алдыңғы жаңарту аяқталмаған."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Жаңартуды орнату мүмкін емес; мәселе жаңартудың өзінде болуы мүмкін. "
+#~ "Басқа жаңартуды күтіп, қайталап көріңіз."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Тек интернет болғанда істейтін қолданбалар"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "GApplication қызметтік режиміне өту"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Жаңартуға дұрыс қолтаңба қойылған жоқ."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Жаңартуды аяқтау мүмкін емес."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Желіден тыс жаңарту сұралған, бірақ, бірде-бір десте жаңартуды талап "
+#~ "етпейді."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Дискте орын қалмады."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Жаңарту дұрыс орнатыла алмады."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Желіден тыс жаңарту күтпеген түрде сәтсіз аяқталды."
+
+#~ msgid "No sources found."
+#~ msgstr "Қайнар көздері табылмады."
+
+#~ msgid "OK"
+#~ msgstr "ОК"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i қолданба және %i қосымша орнатылды"
diff --git a/po/km.po b/po/km.po
new file mode 100644
index 0000000..0f89f5a
--- /dev/null
+++ b/po/km.po
@@ -0,0 +1,1900 @@
+# Khmer translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Khoem Sokhem <sokhem@open.org.kh>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-04-21 19:29+0000\n"
+"PO-Revision-Date: 2014-04-21 19:29+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Khmer <km@li.org>\n"
+"Language: km\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: WordForge0.8 RC1\n"
+"X-Language: km-KH\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "Application manager for GNOME"
+msgstr "កម្មវិធី​គ្រប់គ្រង​កម្មវិធី​សម្រាប់ GNOME"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"កម្មវិធីអនុញ្ញាត​ឲ្យ​អ្នក​រក និង​ដំឡើង​កម្មវិធីថ្មីៗ​ "
+"ព្រមទាំង​ផ្នែក​បន្ថែម​ប្រព័ន្ធ​ និង​លុប​កម្មវិធី​ដែល​បានឡើង​មាន​ស្រាប់​ចេញ។"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"កម្មវិធី GNOME បង្ហាញ​កម្មវិធី​បាន​ជ្រើសរើស "
+"និង​មាន​ប្រជាប្រិយ​​រួម​នឹង​ការ​ពណ៌នា​មាន​ប្រយោជន៍​ "
+"ព្រម​ទាំង​រូបថត​អេក្រង់​ជា​ច្រើន​ក្នុង​កម្មវិធី​មួយៗ​។ "
+"កម្មវិធី​អាច​រក​បាន​ទាំង​តាម​ការរុករក​បញ្ជី​​តាម​ប្រភេទ ឬ​ដោយ​ស្វែងរក​។ វា​ក"
+"៏​អនុញ្ញាត​ឲ្យ​អ្នក​ធ្វើ​បច្ចុប្បន្នភាព​ប្រព័ន្ធ​របស់​អ្នក​ដោយ​ប្រើ​បច្ចុប្ប"
+"ន្នភាព​ក្រៅ​បណ្ដាញ​។"
+
+#: ../src/app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr "បន្ថែម​ទៅ​ថត​កម្មវិធី"
+
+#: ../src/app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:325
+#: ../src/gs-shell-details.c:229 ../src/gs-shell-installed.c:590
+msgid "_Cancel"
+msgstr "បោះបង់"
+
+#: ../src/app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:330
+msgid "_Add"
+msgstr "បន្ថែម"
+
+#: ../src/app-menu.ui.h:1
+msgid "_Software Sources"
+msgstr "ប្រភព​កម្មវិធី"
+
+#: ../src/app-menu.ui.h:2
+msgid "_About"
+msgstr "អំពី"
+
+#: ../src/app-menu.ui.h:3
+msgid "_Quit"
+msgstr "ចាកចេញ"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#: ../src/app-tile.ui.h:1 ../src/gs-app-tile.c:80 ../src/gs-app-tile.c:83
+#: ../src/gs-feature-tile.c:76 ../src/gs-popular-tile.c:79
+#: ../src/gs-popular-tile.c:82 ../src/popular-tile.ui.h:1
+msgid "Installed"
+msgstr "បាន​ដំឡើង"
+
+#. TRANSLATORS: this is the application name
+#. TRANSLATORS: this is the main window title
+#: ../src/org.gnome.Software.desktop.in.h:1 ../src/gnome-software.ui.h:3
+#: ../src/gs-application.c:240 ../src/gs-shell.c:161
+msgid "Software"
+msgstr "កម្មវិធី"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr "បន្ថែម, លុប ឬ​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី​លើ​កុំព្យូទ័រ​នេះ"
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr "ដំឡើង​កម្មវិធី"
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr "ដំឡើង​កម្មវិធី​បាន​ជ្រើស​លើ​ប្រព័ន្ធ"
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr "ជ្រើស​ទាំងអស់"
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr "មិន​ជ្រើស​ទាំងអស់"
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-sources-dialog.ui.h:2
+#: ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr "ត្រឡប់ក្រោយ"
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "ទាំងអស់"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "បាន​ដំឡើង"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "បច្ចុប្បន្នភាព"
+
+#: ../src/gnome-software.ui.h:11
+msgid "Restart & _Install"
+msgstr "ចាប់ផ្ដើម​ឡើងវិញ និង​ដំឡើង"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#: ../src/gnome-software.ui.h:12 ../src/gs-shell-details.c:178
+msgid "_Install"
+msgstr "ដំឡើង"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: ../src/gnome-software.ui.h:13 ../src/gs-shell-details.c:216
+msgid "_Remove"
+msgstr "លុបចេញ"
+
+#: ../src/gnome-software.ui.h:14
+msgid "Select"
+msgstr "ជ្រើស"
+
+#: ../src/gnome-software.ui.h:15
+msgid "Check for updates"
+msgstr "ពិនិត្យ​មើល​បច្ចុប្បន្នភាព"
+
+#: ../src/gs-app-folder-dialog.c:313
+msgid "Folder Name"
+msgstr "ឈ្មោះថត"
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:238
+msgid "About Software"
+msgstr "អំពី​កម្មវិធី"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:243
+msgid "A nice way to manage the software on your system."
+msgstr "វិធី​ដ៏​ល្អ​ដើម្បី​គ្រប់គ្រង​កម្មវិធី​លើ​ប្រព័ន្ធ​របស់​អ្នក"
+
+#: ../src/gs-application.c:247
+msgid "translator-credits"
+msgstr "ខឹម សុខែម, សេង សុត្ថា, សុខ សុភាព"
+
+#: ../src/gs-application.c:488
+msgid "Enter GApplication service mode"
+msgstr "បញ្ចូល​របៀប​សេវាកម្ម GApplication"
+
+#. TRANSLATORS: this is a command line option
+#: ../src/gs-application.c:491
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"របៀប​ចាប់ផ្ដើម​៖ ថា​តើ ‘​ធ្វើ​បច្ចុប្បន្នភាព’, ‘បាន​ធ្វើបច្ចុប្បន្នភាព’, "
+"‘បាន​ដំឡើង’ ឬ ‘ទិដ្ឋភាព​ទូទៅ’"
+
+#: ../src/gs-application.c:491
+msgid "MODE"
+msgstr "របៀប"
+
+#: ../src/gs-application.c:493
+msgid "Search for applications"
+msgstr "ស្វែងរក​កម្មវិធី"
+
+#: ../src/gs-application.c:493
+msgid "SEARCH"
+msgstr "ស្វែងរក"
+
+#: ../src/gs-application.c:495 ../src/gs-application.c:497
+msgid "Show application details"
+msgstr "បង្ហាញ​ព័ត៌មាន​លម្អិត​កម្មវិធី"
+
+#: ../src/gs-application.c:495 ../src/gs-application.c:497
+#: ../src/gs-application.c:499
+msgid "ID"
+msgstr "លេខ​សម្គាល់"
+
+#: ../src/gs-application.c:499
+msgid "Set the specified debugging level"
+msgstr "កំណត់​កម្រិត​កែ​កំហុស​បាន​បញ្ជាក់"
+
+#: ../src/gs-application.c:501
+msgid "Show profiling information for the service"
+msgstr "បង្ហាញ​ព័ត៌មាន​ប្រវត្តិរូប​សម្រាប់​សេវាកម្ម"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being installing
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: ../src/gs-app-tile.c:89 ../src/gs-app-tile.c:92 ../src/gs-app-widget.c:237
+msgid "Installing"
+msgstr "ដំឡើង"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being removed
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: ../src/gs-app-tile.c:98 ../src/gs-app-tile.c:101 ../src/gs-app-widget.c:246
+msgid "Removing"
+msgstr "លុបចេញ"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user there is an update for the installed
+#. * application available
+#: ../src/gs-app-tile.c:107 ../src/gs-app-tile.c:111
+#: ../src/gs-feature-tile.c:81 ../src/gs-popular-tile.c:88
+#: ../src/gs-popular-tile.c:92
+msgid "Updates"
+msgstr "ធ្វើ​បច្ចុប្បន្នភាព"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-widget.c:200
+msgid "Visit website"
+msgstr "មើល​តំបន់​បណ្ដាញ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-widget.c:207
+msgid "Cancel"
+msgstr "បោះបង់"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-widget.c:210
+msgid "Pending"
+msgstr "រង់ចាំ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-widget.c:217
+msgid "Install"
+msgstr "ដំឡើង"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-widget.c:226 ../src/gs-shell-details.c:1044
+#: ../src/gs-shell-installed.c:210 ../src/gs-shell-search.c:166
+msgid "Remove"
+msgstr "លុបចេញ"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:172
+msgid "Other"
+msgstr "ផ្សេងៗ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "បាន​លុប​ចេញ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: ../src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "បាន​ដំឡើង"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gs-history-dialog.c:93
+msgctxt "app status"
+msgid "Updated"
+msgstr "បាន​ធ្វើ​បច្ចុប្បន្នភាព"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: ../src/gs-history-dialog.c:99
+msgctxt "app status"
+msgid "Unknown"
+msgstr "មិន​ស្គាល់"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "ប្រវត្តិ"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-offline-updates.c:249
+msgid "Failed To Update"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ធ្វើ​បច្ចុប្បន្នភាព"
+
+#. TRANSLATORS: the transaction could not be completed
+#. * as a previous transaction was unfinished
+#: ../src/gs-offline-updates.c:255
+msgid "A previous update was unfinished."
+msgstr "បច្ចុប្បន្ន​មុន​មិន​ត្រូវ​បាន​បញ្ចប់។"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-offline-updates.c:265
+msgid "Network access was required but not available."
+msgstr "ការ​ចូល​ដំណើរការ​បណ្ដាញ​ត្រូវ​បាន​ទាមទារ​ប៉ុន្តែ​មិន​អាច​ប្រើ​បាន។"
+
+#. TRANSLATORS: if the package is not signed correctly
+#. *
+#: ../src/gs-offline-updates.c:274
+msgid "An update was not signed in the correct way."
+msgstr "បច្ចុប្បន្នភាព​មិន​ត្រូវ​បាន​ចូល​តាម​វិធី​ត្រឹមត្រូវ។"
+
+#. TRANSLATORS: the transaction failed in a way the user
+#. * probably cannot comprehend. Package management systems
+#. * really are teh suck.
+#: ../src/gs-offline-updates.c:284
+msgid "The update could not be completed."
+msgstr "មិន​អាច​បញ្ចប់​បច្ចុប្បន្នភាព។"
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-offline-updates.c:289
+msgid "The update was cancelled."
+msgstr "បច្ចុប្បន្នភាព​ត្រូវ​បាន​​បោះបង់។"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-offline-updates.c:295
+msgid "An offline update was requested but no packages required updating."
+msgstr ""
+"បាន​ស្នើ​បច្ចុប្បន្នភាព​ក្រៅ​បណ្ដាញ "
+"ប៉ុន្តែ​គ្មាន​កញ្ចប់​បាន​ទាមទារ​ធ្វើ​បច្ចុប្បន្នភាព​។"
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-offline-updates.c:299
+msgid "No space was left on the drive."
+msgstr "គ្មាន​ទំហំ​នៅ​សល់​លើ​ថាស"
+
+#. TRANSLATORS: the update process failed in a general
+#. * way, usually this message will come from source distros
+#. * like gentoo
+#: ../src/gs-offline-updates.c:307
+msgid "An update failed to install correctly."
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ដំឡើង​បច្ចុប្បន្នភាព​ត្រឹមត្រូវ។"
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-offline-updates.c:312
+msgid "The offline update failed in an unexpected way."
+msgstr "បច្ចុប្បន្នភាព​ក្រៅ​បណ្ដាញ​បាន​បរាជ័យ​តាម​វិធី​​ដែល​មិន​រំពឹង​ទុក។"
+
+#. TRANSLATORS: these are geeky messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-offline-updates.c:321
+msgid "Detailed errors from the package manager follow:"
+msgstr "កំហុស​លម្អិត​ពី​កម្មវិធី​គ្រប់គ្រង​កញ្ចប់​ដូច​ខាង​ក្រោម៖"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:713
+msgid "OS Updates"
+msgstr "បច្ចុប្បន្នភាព​ប្រព័ន្ធ​ប្រតិបត្តិការ"
+
+#. TRANSLATORS: this is a longer description of the
+#. * os-update item
+#: ../src/gs-plugin-loader.c:718
+msgid ""
+"Includes performance, stability and security improvements for all users."
+msgstr ""
+"រួម​បញ្ចូលការ​បង្កើន​ការ​​អនុវត្ត, ស្ថេរភាព "
+"និងសុវត្ថិភាព​សម្រាប់អ្នក​ប្រើ​ទាំងអស់។"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-plugin-loader.c:1311
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "មិនមាន​កូឌិក​បន្ថែម​សម្រាប់​ទ្រង់ទ្រាយ %s ។"
+
+#: ../src/gs-plugin-loader.c:1314
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"ព័ត៌មាន​អំពី %s, ព្រម​ទាំង​ជម្រើស​ម្រាប់​វិធី​ទទួល​កូឌិក​ដែល​អាច​ចាក់ទ្រង់ទ្"
+"រាយ​នេះ​អាច​រក​បាននៅ​លើ​វេបសាយ។"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:130
+msgid "Screenshot not found"
+msgstr "រកមិន​ឃើញ​រូបថត​អេក្រង់"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:238
+msgid "Screenshot size not found"
+msgstr "រក​មិន​ឃើញ​ទំហំ​រូបថត​អេក្រង់"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:252
+msgid "Could not create cache"
+msgstr "មិន​អាច​បង្កើតឃ្លាំង​សម្ងាត់"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:269
+msgid "Screenshot not valid"
+msgstr "រូបថត​អេក្រង់មិន​ត្រឹមត្រូវ"
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:275
+msgid "Screenshot not available"
+msgstr "មិនមាន​រូបថត​អេក្រង់"
+
+#: ../src/gs-screenshot-image.c:328
+msgid "Screenshot"
+msgstr "រូបថត​អេក្រង់"
+
+#: ../src/gs-shell-details.c:161
+msgid "_Pending"
+msgstr "រង់ចាំ"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:189
+msgid "_Installing"
+msgstr "ដំឡើង"
+
+#. TRANSLATORS: button text in the header when an application can be installed
+#: ../src/gs-shell-details.c:223
+msgid "_Removing"
+msgstr "លុបចេញ"
+
+#. TRANSLATORS: this is where the licence is not known
+#: ../src/gs-shell-details.c:594
+msgctxt "license"
+msgid "Unknown"
+msgstr "មិន​ស្គាល់"
+
+#. TRANSLATORS: this is where the licence is insanely
+#. * complicated and the full string is put into the tooltip
+#: ../src/gs-shell-details.c:599
+msgctxt "license"
+msgid "Complicated!"
+msgstr "ស្មុគស្មាញ!"
+
+#. TRANSLATORS: this is where the version is not known
+#: ../src/gs-shell-details.c:612
+msgctxt "version"
+msgid "Unknown"
+msgstr "មិន​ស្គាល់"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:618
+msgctxt "size"
+msgid "Calculating…"
+msgstr "កំពុង​គណនា..."
+
+#. TRANSLATORS: this is where the size is not known
+#: ../src/gs-shell-details.c:621
+msgctxt "size"
+msgid "Unknown"
+msgstr "មិន​ស្គាល់"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:633
+msgctxt "updated"
+msgid "Never"
+msgstr "កុំ"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined menu category
+#: ../src/gs-shell-details.c:648
+msgctxt "menu category"
+msgid "None"
+msgstr "គ្មាន"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-shell-details.c:658
+msgctxt "origin"
+msgid "Unknown"
+msgstr "មិន​ស្គាល់"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-shell-details.c:1029 ../src/gs-shell-installed.c:195
+#: ../src/gs-shell-search.c:151
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "តើអ្នកប្រាកដ​ជា​ចង់​លុប %s?"
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-shell-details.c:1041 ../src/gs-shell-installed.c:207
+#: ../src/gs-shell-search.c:163
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s នឹង​ត្រូវ​បាន​លុប​ចេញ "
+"ហើយ​អ្នក​នឹង​ត្រូវ​ដំឡើង​វា​ដើម្បី​ប្រើ​វា​ម្ដង​ទៀត។"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-details.ui.h:1
+msgid "Details page"
+msgstr "ទំព័រ​លម្អិត"
+
+#: ../src/gs-shell-details.ui.h:2
+msgid "Software Source Included"
+msgstr "រួម​បញ្ចូល​ប្រភព​កម្មវិធី"
+
+#: ../src/gs-shell-details.ui.h:3
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+"កម្មវិធី​នេះរួមមាន​ប្រភពកម្មវិធី​ដែល​ផ្ដល់បច្ចុប្បន្នភាព "
+"ព្រម​ទាំង​ចូល​ដំណើរការ​កម្មវិធី​ផ្សេង។"
+
+#: ../src/gs-shell-details.ui.h:4
+msgid "No Software Source Included"
+msgstr "គ្មាន​ប្រភព​កម្មវិធី​បាន​ដាក់​បញ្ចូល"
+
+#: ../src/gs-shell-details.ui.h:5
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr ""
+"កម្មវិធីនេះ​មិន​ដាក់បញ្ចូល​ប្រភព​កម្មវិធី។ "
+"វា​នឹង​មិន​ត្រូវ​បាន​ធ្វើបច្ចុប្បន្នភាព​ជា​មួយ​កំណែ​ថ្មី​ទេ។"
+
+#: ../src/gs-shell-details.ui.h:6
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"កម្មវិធី​នេះ​ត្រូវ​បាន​ផ្ដល់​ឲ្យ​រួច​ហើយ​ដោយ​ការចែកចាយ​របស់ "
+"និង​មិន​គួរត្រូវ​បាន​ជំនួស​ទេ។"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: ../src/gs-shell-details.ui.h:8
+msgid "Software Source Identified"
+msgstr "បាន​បញ្ជាក់អត្តសញ្ញាណ​ប្រភព​កម្មវិធី"
+
+#: ../src/gs-shell-details.ui.h:9
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr ""
+"ការ​បន្ថែម​ប្រភព​កម្មវិធី​នេះ​ផ្ដល់ឲ្យ​អ្នកចូល​ដំណើរការ​កម្មវិធី "
+"និង​បច្ចុប្បន្នភាព​បន្ថែម។"
+
+#: ../src/gs-shell-details.ui.h:10
+msgid "Only use software sources that you trust."
+msgstr "ប្រើ​តែ​ប្រភព​កម្មវិធី​ដែលអ្នក​ទុក​ចិត្ត។"
+
+#: ../src/gs-shell-details.ui.h:11
+msgid "Internet Only Application"
+msgstr "តែ​កម្មវិធីអ៊ីនធឺណិត"
+
+#: ../src/gs-shell-details.ui.h:12
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "កម្មវិធី​នេះ​អាច​ត្រូវ​បាន​ប្រើ​តែ​នៅ​ពេល​មាន​ការ​ភ្ជាប់​អ៊ីនធឺណិត​។"
+
+#: ../src/gs-shell-details.ui.h:13
+msgid "_Website"
+msgstr "តំបន់​បណ្ដាញ"
+
+#: ../src/gs-shell-details.ui.h:14
+msgid "_History"
+msgstr "ប្រវត្តិ"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gs-shell-details.ui.h:16
+msgid "_Launch"
+msgstr "ចាប់ផ្ដើម"
+
+#: ../src/gs-shell-details.ui.h:17
+msgid "Details"
+msgstr "ព័ត៌មាន​លម្អិត"
+
+#: ../src/gs-shell-details.ui.h:18 ../src/gs-sources-dialog.ui.h:9
+msgid "Version"
+msgstr "កំណែ"
+
+#: ../src/gs-shell-details.ui.h:19
+msgid "Updated"
+msgstr "បាន​ធ្វើ​បច្ចុប្បន្នភាព"
+
+#: ../src/gs-shell-details.ui.h:20
+msgid "Category"
+msgstr "ប្រភេទ"
+
+#: ../src/gs-shell-details.ui.h:21
+msgid "Source"
+msgstr "ប្រភព"
+
+#: ../src/gs-shell-details.ui.h:22
+msgid "Licence"
+msgstr "អាជ្ញាប័ណ្ណ"
+
+#: ../src/gs-shell-details.ui.h:23
+msgid "Size"
+msgstr "ទំហំ"
+
+#: ../src/gs-shell-details.ui.h:24
+msgid "Developer"
+msgstr "អ្នក​អភិវឌ្ឍន៍"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-installed.c:509 ../src/gs-shell-updates.c:617
+#: ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr "ផ្នែកបន្ថែម"
+
+#: ../src/gs-shell-installed.c:598
+msgid "Click on items to select them"
+msgstr "ចុច​លើធាតុ ដើម្បីជ្រើសពួកវា"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-installed.ui.h:1
+msgid "Installed page"
+msgstr "ទំព័រ​បាន​ដំឡើង"
+
+#: ../src/gs-shell-installed.ui.h:2
+msgid "_Add to Folder…"
+msgstr "បន្ថែម​ទៅថត..."
+
+#: ../src/gs-shell-installed.ui.h:3
+msgid "_Move to Folder…"
+msgstr "ផ្លាស់ទីទៅថត..."
+
+#: ../src/gs-shell-installed.ui.h:4
+msgid "_Remove from Folder"
+msgstr "លុប​ចេញ​ពី​ថត"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-overview.ui.h:1
+msgid "Overview page"
+msgstr "ទំព័រ​ទិដ្ឋភាព​ទូទៅ"
+
+#: ../src/gs-shell-overview.ui.h:2
+#: ../src/plugins/gs-plugin-hardcoded-categories.c:160
+msgid "Featured"
+msgstr "ពិសេស"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: ../src/gs-shell-overview.ui.h:4
+msgid "Picks"
+msgstr "ជ្រើស"
+
+#: ../src/gs-shell-overview.ui.h:5
+msgid "Categories"
+msgstr "ប្រភេទ"
+
+#: ../src/gs-shell-overview.ui.h:6
+msgid "No Application Data Found"
+msgstr "រកមិន​ឃើញ​ទិន្នន័យ​កម្មវិធី"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-search.ui.h:1
+msgid "Search page"
+msgstr "ស្វែងរក​ទំព័រ"
+
+#: ../src/gs-shell-search.ui.h:2
+msgid "No Application Found"
+msgstr "រក​មិន​ឃើញ​កម្មវិធី"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:144
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:147
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: ../src/gs-shell-updates.c:153
+msgid "Yesterday, %R"
+msgstr "ម្សិលមិញ %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: ../src/gs-shell-updates.c:157
+msgid "Yesterday, %l:%M %p"
+msgstr "ម្សិលមិញ %l:%M %p"
+
+#: ../src/gs-shell-updates.c:160
+msgid "Two days ago"
+msgstr "ពីរថ្ងៃ​មុន"
+
+#: ../src/gs-shell-updates.c:162
+msgid "Three days ago"
+msgstr "បីថ្ងៃ​មុន"
+
+#: ../src/gs-shell-updates.c:164
+msgid "Four days ago"
+msgstr "បួន​ថ្ងៃ​មុន"
+
+#: ../src/gs-shell-updates.c:166
+msgid "Five days ago"
+msgstr "ប្រាំថ្ងៃ​មុន"
+
+#: ../src/gs-shell-updates.c:168
+msgid "Six days ago"
+msgstr "ប្រាំមួយ​ថ្ងៃ​មុន"
+
+#: ../src/gs-shell-updates.c:170
+msgid "One week ago"
+msgstr "មួយ​សប្ដាហ៍​មុន"
+
+#: ../src/gs-shell-updates.c:172
+msgid "Two weeks ago"
+msgstr "ពីរសប្ដាហ៍​មុន"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:176
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:235
+msgid "Setting up updates…"
+msgstr "កំពុង​រៀបចំ​បច្ចុប្បន្នភាព…"
+
+#: ../src/gs-shell-updates.c:236 ../src/gs-shell-updates.c:243
+msgid "(This could take a while)"
+msgstr "(វា​អាច​ចំណាយ​ពេល​មួយ​រយៈ)"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:242
+msgid "Looking for new updates…"
+msgstr "កំពុង​រកមើល​បច្ចុប្បន្នភាព​ថ្មី…"
+
+#. TRANSLATORS: this is when the updates panel is starting up
+#: ../src/gs-shell-updates.c:249
+msgid "Checking for updates…"
+msgstr "កំពុង​ពិនិត្យ​មើល​បច្ចុប្បន្នភាព…"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:365
+#, c-format
+msgid "Last checked: %s"
+msgstr "បាន​ពិនិត្យ​ចុងក្រោយ៖ %s"
+
+#. TRANSLATORS: window title to suggest that we are showing
+#. * the offline updates that have just been applied
+#: ../src/gs-shell-updates.c:502
+msgid "Recent Software Updates"
+msgstr "បច្ចុប្បន្នភាព​កម្មវិធីថ្មីៗ"
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:807
+msgid "No Network"
+msgstr "គ្មាន​បណ្ដាញ"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:811
+msgid "Internet access is required to check for updates."
+msgstr "ទាមទារ​អ៊ីនធឺណិតដើម្បី​ពិនិត្យ​មើល​បច្ចុប្បន្នភាព។"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:815
+msgid "Network Settings"
+msgstr "ការ​កំណត់​បណ្ដាញ"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: ../src/gs-shell-updates.c:835
+msgid "Charges may apply"
+msgstr "ការ​គិតលុយ​អាច​អនុវត្ត"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:839
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "ការ​ពិនិត្យ​បច្ចុប្បន្នភាព​ខណៈ​ពេលប្រើប្រតបែន​ចល័ត​អាច​គិត​លុយ​បន្ថែម។"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:843
+msgid "Check Anyway"
+msgstr "អញ្ចឹង ពិនិត្យ​មើល"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-updates.ui.h:1
+msgid "Updates page"
+msgstr "ទំព័រ​បច្ចុប្ប​ន្នភាព"
+
+#: ../src/gs-shell-updates.ui.h:2
+msgid "Software is up to date"
+msgstr "កម្មវិធីគឺ​ទាន់សម័យ​ហើយ"
+
+#: ../src/gs-shell-updates.ui.h:3
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "ពិនិត្យ​បច្ចុប្បន្នភាព​ពេលប្រើប្រតបែន​ចល័ត​អាច​គិត​ថ្លៃ​បន្ថែម"
+
+#: ../src/gs-shell-updates.ui.h:4
+msgid "_Check Anyway"
+msgstr "អញ្ចឹង ពិនិត្យ​មើល"
+
+#: ../src/gs-shell-updates.ui.h:5
+msgid "Go online to check for updates"
+msgstr "ចូល​លើបណ្ដាញ ដើម្បី​ពិនិត្យ​មើល​បច្ចុប្បន្នភាព"
+
+#: ../src/gs-shell-updates.ui.h:6
+msgid "_Network Settings"
+msgstr "ការ​កំណត់​បណ្ដាញ"
+
+#. TRANSLATORS: this source has no apps installed from it
+#: ../src/gs-sources-dialog.c:91
+msgid "No software installed"
+msgstr "គ្មាន​កម្មវិធី​បាន​ដំឡើង"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-sources-dialog.c:94
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] "%i applications installed"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-sources-dialog.c:99
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] "%i add-ons installed"
+
+#. TRANSLATORS: this source has some apps and addons installed from it
+#: ../src/gs-sources-dialog.c:104
+#, c-format
+msgid "%i application and %i add-ons installed"
+msgid_plural "%i applications and %i add-ons installed"
+msgstr[0] "%i applications and %i add-ons installed"
+
+#: ../src/gs-sources-dialog.c:296 ../src/gs-sources-dialog.ui.h:13
+msgid "Remove Source"
+msgstr "លុប​ប្រភព​ចេញ"
+
+#: ../src/gs-sources-dialog.c:311
+msgid "Removing…"
+msgstr "កំពុងលុប​ចេញ"
+
+#. vim: set noexpandtab:
+#: ../src/gs-sources-dialog.ui.h:1
+msgid "Software Sources"
+msgstr "ប្រភព​កម្មវិធី"
+
+#: ../src/gs-sources-dialog.ui.h:3
+msgid "No sources found."
+msgstr "រក​មិន​ឃើញ​ប្រភព។"
+
+#: ../src/gs-sources-dialog.ui.h:4
+msgid "Software sources give you access to additional software."
+msgstr "ប្រភព​កម្មវិធី​ផ្ដល់​ឲ្យ​អ្នក​ចូល​ដំណើរការ​កម្មវិធី​បន្ថែម។"
+
+#: ../src/gs-sources-dialog.ui.h:5
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr "ការលុប​ប្រភព​នឹង​លុប​កម្មវិធីមួយ​ចំនួន​ដែលអ្នក​បាន​ដំឡើង​ពីរ​វា​ផង​ដែរ។"
+
+#: ../src/gs-sources-dialog.ui.h:6
+msgid "No software installed from this source"
+msgstr "គ្មាន​កម្មវិធី​បាន​ដំឡើង​ពី​ប្រភព​នេះ"
+
+#: ../src/gs-sources-dialog.ui.h:7
+msgid "Installed from this Source"
+msgstr "បាន​ដំឡើង​ពី​ប្រភព​នេះ"
+
+#: ../src/gs-sources-dialog.ui.h:8
+msgid "Source Details"
+msgstr "ព័ត៌មាន​លម្អិត​ប្រភព"
+
+#: ../src/gs-sources-dialog.ui.h:10
+msgid "Last Checked"
+msgstr "បាន​ពិនិត្យ​ចុងក្រោយ"
+
+#: ../src/gs-sources-dialog.ui.h:11
+msgid "Added"
+msgstr "បាន​បន្ថែម"
+
+#: ../src/gs-sources-dialog.ui.h:12
+msgid "Website"
+msgstr "វេបសាយ"
+
+#: ../src/gs-update-monitor.c:102
+msgid "Software Updates Available"
+msgstr "មាន​បច្ចុប្បន្ន​ភាព​កម្មវិធី"
+
+#: ../src/gs-update-monitor.c:103
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"បច្ចុប្បន្នភាព​ប្រព័ន្ធ​ប្រតិបត្តិការ "
+"និង​កម្មវិធី​សំខាន់ៗ​ត្រូវ​បាន​ដំឡើងរួច​ហើយ"
+
+#: ../src/gs-update-monitor.c:106
+msgid "View"
+msgstr "ទិដ្ឋភាព"
+
+#: ../src/gs-update-monitor.c:107
+msgid "Not Now"
+msgstr "មិនមែន​ឥឡូវ"
+
+#: ../src/gs-update-monitor.c:148
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "បាន​ដំឡើង​បច្ចុប្បន្នភាព"
+
+#. TRANSLATORS: message when we've done offline updates
+#: ../src/gs-update-monitor.c:152
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "បាន​ដំឡើង​បច្ចុប្បន្នភាព​ប្រព័ន្ធ​ប្រតិបត្តិការ​សំខាន់។"
+
+#: ../src/gs-update-monitor.c:157
+msgid "Software Updates Failed"
+msgstr "បាន​បរាជ័យ​ក្នុងការ​ធ្វើបច្ចុប្បន្នភាព​កម្មវិធី"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:159
+msgid "An important OS update failed to be installed."
+msgstr "បាន​បរាជ័យ​ក្នុងការ​ដំឡើង​បច្ចុប្បន្នភាព​ប្រព័ន្ធ​ប្រតិបត្តិការ​សំខាន់។"
+
+#: ../src/gs-update-monitor.c:168
+msgid "Review"
+msgstr "ពិនិត្យ​ឡើងវិញ"
+
+#: ../src/gs-update-monitor.c:170
+msgid "Show Details"
+msgstr "បង្ហាញព័ត៌មាន​លម្អិត"
+
+#: ../src/gs-update-monitor.c:171
+msgid "OK"
+msgstr "យល់ព្រម"
+
+#. vim: set noexpandtab:
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "ផ្កាយ​មួយ"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "ផ្កាយ​ពីរ"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "ផ្កាយ​បី"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "ផ្កាយ​បួន"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "ផ្កាយ​ប្រាំ"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:131
+#, c-format
+msgid "%s is now installed"
+msgstr "ឥឡូវ​បាន​ដំឡើង %s"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:135
+msgid "Launch"
+msgstr "ចាប់ផ្ដើម"
+
+#: ../src/gs-utils.c:160
+msgid "Sorry, this did not work"
+msgstr "សូម​ទោស វា​មិន​ដំណើរការ​ទេ"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:164
+#, c-format
+msgid "Installation of %s failed."
+msgstr "ការ​ដំឡើង %s បាន​បរាជ័យ។"
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:169
+#, c-format
+msgid "Removal of %s failed."
+msgstr "បាន​បរាជ័យ​ក្នុងការលុប %s ។"
+
+#: ../src/plugins/gs-plugin-appstream.c:171
+#, c-format
+msgid "No AppStream data found"
+msgstr "រក​មិន​ឃើញ​ទិន្នន័យ AppStream"
+
+#. TRANSLATORS: this is when a webapp has no comment
+#: ../src/plugins/gs-plugin-epiphany.c:143
+#, c-format
+msgid "Web app"
+msgstr "កម្មវិធី​បណ្ដាញ"
+
+#. TRANSLATORS: this is the licence of the web-app
+#: ../src/plugins/gs-plugin-epiphany.c:151
+msgid "Proprietary"
+msgstr "មាន​កម្មសិទ្ធិ"
+
+#. TRANSLATORS: this is where update details either are
+#. * no longer available or were never provided in the first place
+#: ../src/plugins/gs-plugin-packagekit-refine.c:414
+msgid "No update details were provided"
+msgstr "គ្មាន​ព័ត៌មាន​លម្អិត​បច្ចុប្បន្នភាព​ត្រូវ​បាន​ផ្ដល់ឲ្យ"
+
+#. TRANSLATORS: this is the menu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "អូឌីយ៉ូ"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Menu subcategory of Audio"
+msgid "Editing"
+msgstr "កែសម្រួល"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Menu subcategory of Audio"
+msgid "Databases"
+msgstr "មូលដ្ឋាន​ទិន្នន័យ"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Menu subcategory of Audio"
+msgid "Disc Burning"
+msgstr "ការ​ដុតថាស"
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Menu subcategory of Audio"
+msgid "Ham Radio"
+msgstr "វិទ្យុ Ham"
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Menu subcategory of Audio"
+msgid "MIDI"
+msgstr "មីឌី"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Menu subcategory of Audio"
+msgid "Mixer"
+msgstr "ឧបករណ៍​លាយ"
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Menu subcategory of Audio"
+msgid "Music"
+msgstr "តន្ត្រី"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Menu subcategory of Audio"
+msgid "Players"
+msgstr "កម្មវិធី​ចាក់"
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Menu subcategory of Audio"
+msgid "Recorders"
+msgstr "កម្មវិធី​ថត"
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Menu subcategory of Audio"
+msgid "Sequencers"
+msgstr "ដាក់​ជា​លំដាប់"
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Menu subcategory of Audio"
+msgid "Tuners"
+msgstr "Tuners"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr "ឧបករណ៍​អភិវឌ្ឍន៍"
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Menu subcategory of Development"
+msgid "Building"
+msgstr "បង្កើត"
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Menu subcategory of Development"
+msgid "Databases"
+msgstr "មូលដ្ឋាន​ទិន្នន័យ"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Menu subcategory of Development"
+msgid "Debuggers"
+msgstr "អ្នកែ​កំហុស"
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Menu subcategory of Development"
+msgid "GUI Designers"
+msgstr "អ្នករចនា GUI"
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Menu subcategory of Development"
+msgid "IDE"
+msgstr "IDE"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Menu subcategory of Development"
+msgid "Profiling"
+msgstr "ប្រវត្តិរូប"
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Menu subcategory of Development"
+msgid "Project Management"
+msgstr "ការ​គ្រប់គ្រង​គម្រោង"
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Menu subcategory of Development"
+msgid "Revision Control"
+msgstr "Revision Control"
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Menu subcategory of Development"
+msgid "Translation"
+msgstr "បកប្រែ"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Menu subcategory of Development"
+msgid "Web Development"
+msgstr "អភិវឌ្ឍន៍​បណ្ដាញ"
+
+#. TRANSLATORS: this is the menu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "អប់រំ"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Menu subcategory of Education"
+msgid "Art"
+msgstr "សិល្បៈ"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Menu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr "ទំនាក់ទំនង​ក្លែងក្លាយ"
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Menu subcategory of Education"
+msgid "Astronomy"
+msgstr "តារាវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Menu subcategory of Education"
+msgid "Biology"
+msgstr "ជីវវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Menu subcategory of Education"
+msgid "Chemistry"
+msgstr "គីមីវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Menu subcategory of Education"
+msgid "Computer Science"
+msgstr "វិទ្យាសាស្ត្រ​កុំព្យូទ័រ"
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Menu subcategory of Education"
+msgid "Construction"
+msgstr "សំណង់"
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Menu subcategory of Education"
+msgid "Data Visualization"
+msgstr "រូបភាព​ទិន្នន័យ"
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Menu subcategory of Education"
+msgid "Economy"
+msgstr "សេដ្ឋកិច្ច"
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Menu subcategory of Education"
+msgid "Electricity"
+msgstr "អគ្គិសនី"
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Menu subcategory of Education"
+msgid "Electronics"
+msgstr "អេឡិចត្រូនិក"
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Menu subcategory of Education"
+msgid "Engineering"
+msgstr "វិស្វករ"
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Menu subcategory of Education"
+msgid "Geography"
+msgstr "ភូមិវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Menu subcategory of Education"
+msgid "Geology"
+msgstr "ភូគុព្ភវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Menu subcategory of Education"
+msgid "Geoscience"
+msgstr "ភូគុព្ភសាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Menu subcategory of Education"
+msgid "History"
+msgstr "ប្រវត្តិវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Menu subcategory of Education"
+msgid "Humanities"
+msgstr "មនុស្សធម៌"
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Menu subcategory of Education"
+msgid "Image Processing"
+msgstr "ដំណើរការ​រូបភាព"
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Menu subcategory of Education"
+msgid "Languages"
+msgstr "ភាសា"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Menu subcategory of Education"
+msgid "Literature"
+msgstr "អក្សរ​សាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Menu subcategory of Education"
+msgid "Maps"
+msgstr "ផែនទី"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Menu subcategory of Education"
+msgid "Math"
+msgstr "គណិត"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Menu subcategory of Education"
+msgid "Medical"
+msgstr "វេជ្ជសាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Menu subcategory of Education"
+msgid "Music"
+msgstr "តន្ត្រី"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Menu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr "ការ​វិភាគ​ជា​លេខ"
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Menu subcategory of Education"
+msgid "Parallel Computing"
+msgstr "ការ​គណនា​ស្រប​គ្នា"
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Menu subcategory of Education"
+msgid "Physics"
+msgstr "រូបវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Menu subcategory of Education"
+msgid "Robotics"
+msgstr "មនុស្ស​យន្ត"
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Menu subcategory of Education"
+msgid "Spirituality"
+msgstr "ផ្លូវ​ចិត្ត"
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Menu subcategory of Education"
+msgid "Sports"
+msgstr "កីឡា"
+
+#. TRANSLATORS: this is the menu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr "ហ្គេម"
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Menu subcategory of Games"
+msgid "Action"
+msgstr "សកម្មភាព"
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Menu subcategory of Games"
+msgid "Adventure"
+msgstr "ការ​ផ្សងព្រេង"
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Menu subcategory of Games"
+msgid "Arcade"
+msgstr "ផ្សារ​ទំនើប"
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Menu subcategory of Games"
+msgid "Blocks"
+msgstr "ទប់ស្កាត់"
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Menu subcategory of Games"
+msgid "Board"
+msgstr "ក្ដារ"
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Menu subcategory of Games"
+msgid "Card"
+msgstr "បៀរ​"
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Menu subcategory of Games"
+msgid "Emulators"
+msgstr "អ្នក​ប្រណាំង"
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Menu subcategory of Games"
+msgid "Kids"
+msgstr "កុមារ"
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Menu subcategory of Games"
+msgid "Logic"
+msgstr "តក្កវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Menu subcategory of Games"
+msgid "Role Playing"
+msgstr "ការ​ដើរតួ"
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Menu subcategory of Games"
+msgid "Shooter"
+msgstr "អ្នក​បាញ់"
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Menu subcategory of Games"
+msgid "Simulation"
+msgstr "ការ​ក្លែងធ្វើ"
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Menu subcategory of Games"
+msgid "Sports"
+msgstr "កីឡា"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Menu subcategory of Games"
+msgid "Strategy"
+msgstr "យុទ្ធសាស្ត្រ"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr "ក្រាហ្វិក"
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Menu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr "ក្រាហ្វិក​ទ្វេ​មាត្រ"
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Menu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr "ក្រាហ្វិក​ត្រីមាត្រ"
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Menu subcategory of Graphics"
+msgid "OCR"
+msgstr "OCR"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Menu subcategory of Graphics"
+msgid "Photography"
+msgstr "រូបថត"
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Menu subcategory of Graphics"
+msgid "Publishing"
+msgstr "បោះពុម្ពផ្សាយ"
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Menu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr "ក្រាហ្វិក​រ៉ាស្ទ័រ"
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Menu subcategory of Graphics"
+msgid "Scanning"
+msgstr "ការ​វិភាគ"
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Menu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr "ក្រាហ្វិក​វ៉ិចទ័រ"
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Menu subcategory of Graphics"
+msgid "Viewer"
+msgstr "កម្មវិធី​មើល"
+
+#. TRANSLATORS: this is the menu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "អ៊ីនធឺណិត"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Menu subcategory of Network"
+msgid "Chat"
+msgstr "ជជែក"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Menu subcategory of Network"
+msgid "Dialup"
+msgstr "ចុច"
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Menu subcategory of Network"
+msgid "Email"
+msgstr "អ៊ីមែល"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Menu subcategory of Network"
+msgid "Feed"
+msgstr "អត្ថបទព័ត៌មាន"
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Menu subcategory of Network"
+msgid "File Transfer"
+msgstr "ការ​ផ្ទេរ​ឯកសារ"
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Menu subcategory of Network"
+msgid "Ham Radio"
+msgstr "វិទ្យុ Ham"
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Menu subcategory of Network"
+msgid "Instant Messaging"
+msgstr "ការ​ផ្ញើសារ​បន្ទាន់"
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Menu subcategory of Network"
+msgid "IRC Clients"
+msgstr "ម៉ាស៊ីន​កូន IRC"
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Menu subcategory of Network"
+msgid "Monitor"
+msgstr "ត្រួតពិនិត្យ"
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Menu subcategory of Network"
+msgid "News"
+msgstr "ព័ត៌មាន"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Menu subcategory of Network"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Menu subcategory of Network"
+msgid "Remote Access"
+msgstr "ការ​ចូល​ដំណើរការ​ពី​ចម្ងាយ"
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Menu subcategory of Network"
+msgid "Telephony"
+msgstr "ទូរស័ព្ទ"
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Menu subcategory of Network"
+msgid "Video Conference"
+msgstr "សន្និសីទ​វីដេអូ"
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Menu subcategory of Network"
+msgid "Web Browser"
+msgstr "កម្មវិធីរុករក​បណ្ដាញ"
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Menu subcategory of Network"
+msgid "Web Development"
+msgstr "ការ​អភវិឌ្ឍន៍​បណ្ដាញ"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "ការិយាល័យ"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Menu subcategory of Office"
+msgid "Calendar"
+msgstr "ប្រតិទិន"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Menu subcategory of Office"
+msgid "Chart"
+msgstr "គំនូស​តាង"
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Menu subcategory of Office"
+msgid "Contact Management"
+msgstr "ការ​គ្រប់គ្រង​ទំនាក់ទំនង"
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Menu subcategory of Office"
+msgid "Database"
+msgstr "មូលដ្ឋាន​ទិន្នន័យ"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Menu subcategory of Office"
+msgid "Dictionary"
+msgstr "វចនានុក្រម"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Menu subcategory of Office"
+msgid "Email"
+msgstr "អ៊ីមែល"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Menu subcategory of Office"
+msgid "Finance"
+msgstr "ហិរញ្ញវត្ថុ"
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Menu subcategory of Office"
+msgid "Flow Chart"
+msgstr "គំនូស​តាង​លំហូរ"
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Menu subcategory of Office"
+msgid "PDA"
+msgstr "PDA"
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Menu subcategory of Office"
+msgid "Photography"
+msgstr "រូបថត"
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Menu subcategory of Office"
+msgid "Presentation"
+msgstr "ការ​បង្ហាញ"
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Menu subcategory of Office"
+msgid "Project Management"
+msgstr "ការ​គ្រប់គ្រង​គម្រោង"
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Menu subcategory of Office"
+msgid "Publishing"
+msgstr "ការបោះពុម្ពផ្សាយ"
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Menu subcategory of Office"
+msgid "Spreadsheet"
+msgstr "សៀវភៅ​បញ្ជី"
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Menu subcategory of Office"
+msgid "Viewer"
+msgstr "កម្មវិធី​មើល"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Menu subcategory of Office"
+msgid "Word Processor"
+msgstr "កម្មវិធី​វាយ​អត្ថបទ"
+
+#. TRANSLATORS: this is the menu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "វិទ្យាសាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Menu subcategory of Science"
+msgid "Art"
+msgstr "សិល្បៈ"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Menu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr "ទំនាក់ទំនងក្លែងក្លាយ"
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Menu subcategory of Science"
+msgid "Astronomy"
+msgstr "តារាវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Menu subcategory of Science"
+msgid "Biology"
+msgstr "ជីវវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Menu subcategory of Science"
+msgid "Chemistry"
+msgstr "គីមីវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Menu subcategory of Science"
+msgid "Computer Science"
+msgstr "វិទ្យាសាស្ត្រ​កុំព្យូទ័រ"
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Menu subcategory of Science"
+msgid "Construction"
+msgstr "សំណង់"
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Menu subcategory of Science"
+msgid "Data Visualization"
+msgstr "ការ​បង្ហាញ​ទិន្នន័យ"
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Menu subcategory of Science"
+msgid "Economy"
+msgstr "សេដ្ឋកិច្ច"
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Menu subcategory of Science"
+msgid "Electricity"
+msgstr "អគ្គិសនី"
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Menu subcategory of Science"
+msgid "Electronics"
+msgstr "អេឡិចត្រូនិក"
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Menu subcategory of Science"
+msgid "Engineering"
+msgstr "វិស្វករ"
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Menu subcategory of Science"
+msgid "Geography"
+msgstr "ភូមិវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Menu subcategory of Science"
+msgid "Geology"
+msgstr "ភូគុព្ភវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Menu subcategory of Science"
+msgid "Geoscience"
+msgstr "ភូគុព្ភសាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Menu subcategory of Science"
+msgid "History"
+msgstr "ប្រវត្តិវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Menu subcategory of Science"
+msgid "Humanities"
+msgstr "មនុស្ស​ធម៌"
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Menu subcategory of Science"
+msgid "Image Processing"
+msgstr "ដំណើរការ​រូបភាព"
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Menu subcategory of Science"
+msgid "Languages"
+msgstr "ភាសា"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Menu subcategory of Science"
+msgid "Literature"
+msgstr "អក្សរសាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Menu subcategory of Science"
+msgid "Maps"
+msgstr "ផែនទី"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Menu subcategory of Science"
+msgid "Math"
+msgstr "គណិត"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Menu subcategory of Science"
+msgid "Medical"
+msgstr "វេជ្ជសាស្ត្រ"
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Menu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr "ការ​វិភាគ​ជា​លេខ"
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Menu subcategory of Science"
+msgid "Parallel Computing"
+msgstr "ការ​គណនា​ស្រប"
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Menu subcategory of Science"
+msgid "Physics"
+msgstr "រូបវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Menu subcategory of Science"
+msgid "Robotics"
+msgstr "មនុស្ស​យន្ត"
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Menu subcategory of Science"
+msgid "Spirituality"
+msgstr "ផ្លូវចិត្ត"
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Menu subcategory of Science"
+msgid "Sports"
+msgstr "កីឡា"
+
+#. TRANSLATORS: this is the menu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "ប្រព័ន្ធ"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Menu subcategory of System"
+msgid "Emulator"
+msgstr "វត្ថុ​ត្រាប់​តាម"
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Menu subcategory of System"
+msgid "File Manager"
+msgstr "កម្មវិធីគ្រប់គ្រង​ឯកសារ"
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Menu subcategory of System"
+msgid "File System"
+msgstr "ប្រព័ន្ធ​ឯកសារ"
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Menu subcategory of System"
+msgid "File Tools"
+msgstr "ឧបករណ៍​ឯកសារ"
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Menu subcategory of System"
+msgid "Monitor"
+msgstr "ត្រួតពិនិត្យ"
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Menu subcategory of System"
+msgid "Security"
+msgstr "សុវត្ថិភាព"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Menu subcategory of System"
+msgid "Terminal Emulator"
+msgstr "វត្ថុ​ត្រាប់តាម​ស្ថានីយ"
+
+#. TRANSLATORS: this is the menu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr "ការ​​ប្រើប្រាស់"
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Menu subcategory of Utility"
+msgid "Accessibility"
+msgstr "មធ្យោបាយ​ងាយស្រួល"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Menu subcategory of Utility"
+msgid "Archiving"
+msgstr "ប័ណ្ណសារ"
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Menu subcategory of Utility"
+msgid "Calculator"
+msgstr "ម៉ាស៊ីន​គិតលេខ"
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Menu subcategory of Utility"
+msgid "Clock"
+msgstr "នាឡិកា"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Menu subcategory of Utility"
+msgid "Compression"
+msgstr "ការ​បង្ហាប់"
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Menu subcategory of Utility"
+msgid "File Tools"
+msgstr "ឧបករណ៍​ឯកសារ"
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Menu subcategory of Utility"
+msgid "Maps"
+msgstr "ផែនទី"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Menu subcategory of Utility"
+msgid "Spirituality"
+msgstr "ចិត្តវិទ្យា"
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Menu subcategory of Utility"
+msgid "Telephony Tools"
+msgstr "ឧបករណ៍​ទូរស័ព្ទ"
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Menu subcategory of Utility"
+msgid "Text Editor"
+msgstr "កម្មវិធីកែ​អត្ថបទ"
+
+#. TRANSLATORS: this is the menu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "វីដេអូ"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Menu subcategory of Video"
+msgid "Editing"
+msgstr "កែសម្រួល"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Menu subcategory of Video"
+msgid "Database"
+msgstr "មូលដ្ឋាន​ទិន្នន័យ"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Menu subcategory of Video"
+msgid "Disc Burning"
+msgstr "ការ​ដុតថាស"
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Menu subcategory of Video"
+msgid "Players"
+msgstr "កម្មវិធីចាក់"
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Menu subcategory of Video"
+msgid "Recorders"
+msgstr "កម្មវិធី​ថត"
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Menu subcategory of Video"
+msgid "TV"
+msgstr "ទូរទស្សន៍"
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Menu subcategory of Addons"
+msgid "Fonts"
+msgstr "ពុម្ពអក្សរ"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Menu subcategory of Addons"
+msgid "Codecs"
+msgstr "កូឌិក"
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Menu subcategory of Addons"
+msgid "Input Sources"
+msgstr "ប្រភព​បញ្ចូល"
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Menu subcategory of Addons"
+msgid "Language Packs"
+msgstr "កញ្ចប់​ភាសា"
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..7159f52
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,4543 @@
+# Korean translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Seong-ho Cho <shcho@gnome.org>, 2013-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-29 18:43+0900\n"
+"Last-Translator: Seong-ho Cho <shcho@gnome.org>\n"
+"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.3.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "그놈 소프트웨어"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "그놈용 프로그램 관리자"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"소프트웨어에서 새 프로그램과 시스템 확장을 찾아 설치할 수 있고, 기존에 설치"
+"한 프로그램을 제거할 수 있습니다."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"그놈 소프트웨어 프로그램은 각각의 추천 항목과 인기 있는 프로그램을 유용한 설"
+"명과 여러가지 미리보기 화면을 곁들여 선보입니다. 분류 목록을 탐색하거나 검색"
+"을 통해 프로그램을 찾을 수 있습니다. 오프라인 업데이트를 사용하여 시스템을 업"
+"데이트할 수도 있습니다."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "개요 패널"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "세부 정보 패널"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "설치한 항목 패널"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "업데이트 패널"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "업데이트 세부 항목"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "그놈 프로젝트"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "시스템 관리 위치에 appstream 파일 설치"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "시스템 관리 위치에 appstream 파일을 설치합니다"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "호환 프로젝트 목록"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "그놈, KDE, XFCE와 같이 나타낼 호환 프로젝트 목록입니다."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "그놈 소프트웨어 업데이트 및 업그레이드 관리 여부"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"비활성화하면, 그놈 소프트웨어는 업데이트 패널을 숨기며 자동 업데이트 동작을 "
+"수행하거나 업그레이드 여부를 물어보지 않습니다."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "업데이트를 자동으로 다운로드하고 설치"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"설정을 활성화하면, 그놈 소프트웨어는 백그라운드에서 업데이트를 자동으로 다운"
+"로드하며, 재시작이 필요치 않은 항목을 설치합니다."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "백그라운드 프로그램 업데이트를 사용자에게 알림"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"활성화하면, 그놈 소프트웨어에서 사용자가 아무런 일을 하지 않을 때 업데이트 진"
+"행 여부를 알립니다."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "종량제 연결을 활용할 때 자동으로 새로 고침 여부"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"활성하면, 그놈 소프트웨어는 자동으로 종량제 연결을 활용하더라도 백그라운드에"
+"서 상태를 새로 고칩니다(일부 메타데이터를 다운로드하고, 업데이트를 검사하는 "
+"등의 동작으로 사용 비용이 발생할 수 있음)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "그놈 소프트웨어 처음 실행 여부"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "프로그램 옆에 별점 표시"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "원격 기본 브랜치셋을 기반으로 프로그램 구분"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "독점 프로그램을 설치하기 전 경고 대화상자 표시"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"독점 프로그램을 설치할 때 경고 대화상자를 표시할 수 있습니다. 대화 상자를 표"
+"시 여부를 다룹니다."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "인기있는 프로그램 목록"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "시스템에서 지정한 프로그램 목록보다 우선해서 활용할 프로그램 목록."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "최근 업데이트 확인 타임스탬프"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "최근 업그레이드 알림 타임스탬프"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "첫 보안 업데이트 실시 후 정리한 타임스탬프"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "최근 업데이트 타임스탬프"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "시스템을 네트워크에 연결하여 업데이트를 받은 최종 일시(타임스탬프)"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "업스트림 스크린샷을 검증할 초단위 경과 시간은 여전히 유효합니다"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"큰 값을 설정하면 원격 서버 접근 횟수는 적어지지만 사용자에게 보여줄 스크린샷 "
+"업데이트 시간이 오래걸릴 수 있습니다. 0 값은 캐시에 이미 그림이 있을 경우 검"
+"사하지 않음을 의미합니다."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "프로그램 평가에 활용할 서버"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "평가에 대한 최소 카르마 점수"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "이 숫자보다 적은 카르마를 보유한 평가는 나타나지 않습니다."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "제 3자 공급원으로 간주하지 않는 공식 저장소 목록"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "자유 프로그램으로 간주하는 공식 저장소 목록"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "자유 프로그램으로 간주하는 프로그램 항목에 활용할 라이선스 URL"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "가능한 시스템에 모든 사용자용 번들 프로그램 설치"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "프로그램 저장소 대화상자 접근 허용"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "릴리스 이전판 업그레이드 제공"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "사용자에게 비 자유 앱을 알리는 일부 UI 구성 요소 표시"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "비 자유 프로그램 저장소 설치시 확인 메시지 표시"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "설치 프로그램 목록에 앱 설치 크기 표시"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+"'https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9C%A0_%EC%86%8C%ED%94%84%ED%8A"
+"%B8%EC%9B%A8%EC%96%B4'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "비 자유-상업용 프로그램을 나타내는 URI"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "app-info 폴더로 다운로드할 appstream 파일 URL 목록"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "모든 사용자용 시스템 관리 위치에 appstream 파일 설치"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "그놈 쉘 확장 저장소 활성화"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "로그인 할 때 사용하려고 gnome-online-account에 저장하는 ID 문자열"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "프로그램 설치"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "선택한 프로그램을 시스템에 설치"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "모두 선택"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "선택 취소"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "소프트웨어 저장소(_S)"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "업데이트 기본 설정(_U)"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "소프트웨어"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "뒤로 가기"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "탐색(_E)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "설치함(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "업데이트(_U)"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "검색"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "공급원"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "프로그램 저장소"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "디스크 검사"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "네트워크 설정"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "지금 다시 시작"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "자세한 정보"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "자동 업데이트 멈춤"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "더 찾아보기(_M)"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "로컬 파일"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "패키지"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "대기 중"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "설치함"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "설치 중"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "제거 중"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "시작 모드: 'updates', 'updated', 'installed', 'overview'"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "모드"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "프로그램 검색"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "검색"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "프로그램 세부 정보 표시(application ID 사용)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "프로그램 세부 정보 표시(패키지 이름 사용)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "<패키지 이름>"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "프로그램 설치(application ID 사용)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "지역 패키지 파일 열기"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "<파일 이름>"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "이 동작에 따른 상호 반응 형태: 'none, 'notify', 'full'"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "디버깅 정보 자세히 표시"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "백그라운드에서 업데이트 대기 중인 항목 설치"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "업데이트 기본 설정 표시"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "실행 인스턴스 끝내기"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "로컬 파일 공급원을 앱스트림에 준비"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "버전 번호 표시"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Seong-ho Cho <shcho@gnome.org>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "소프트웨어 정보"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "시스템의 프로그램을 관리하는 세련된 수단입니다."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "죄송합니다! 해당 프로그램의 세부 정보가 없습니다."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "웹사이트 방문"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "설치…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "취소"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "설치"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "업데이트"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "제거"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "업데이트 하는 동안 장치를 사용할 수 없습니다."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "추가 권한 필요"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "원격 %s에 로그인해야합니다(%s 영역)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "로그인 필요"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "취소(_C)"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "로그인(_L)"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "사용자(_U)"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "암호(_P)"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "기타"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "모두"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "추천"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "추천 %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "평점 매기기"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "이름"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "보이기"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "하위분류 필터 메뉴"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "정렬"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "하위 분류 정렬 메뉴"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "1과 %u 사이의 숫자 값을 입력하십시오: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "프로그램을 선택하십시오:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "운영체제 업데이트를 설치했습니다"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "최근 설치한 업데이트를 평가할 수 있습니다"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s을(를) 설치했습니다"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "바뀐 내용대로 동작하게 하려면 다시 시작해야합니다."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "프로그램을 사용할 준비를 마쳤습니다."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "다시 시작"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "실행"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "제 3자 프로그램을 설치합니까?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "제 3자 프로그램 저장소를 활성화하시겠습니까?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s 프로그램은 <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">자유 오픈 소스 소프트웨어</a>가 아니며, “%s”에서 제공합니"
+"다."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "“%2$s”에서 %1$s 프로그램을 제공함."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "설치를 계속하려면 이 프로그램 저장소를 활성화해야합니다."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "일부 국가에서는 %s 설치 및 사용이 법에 저촉될 수 있습니다."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "일부 국가에서는 이 코덱의 설치 및 사용이 법에 저촉될 수 있습니다."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "다시 경고 안함"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "활성화 및 설치"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "패키지 관리자의 자세한 오류 정보는 다음과 같습니다:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "자세히 보기"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "업데이트를 설치했습니다"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "제대로 동작하게 하려면 다시 시작해야합니다."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "아직 하지 않음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "만화 수준 폭력 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "안전하지 않은 상황의 만화 주인공 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "적극적 폭력 상황의 만화 주인공 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "만화 주인공의 그래픽 폭력"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "판타지 폭력 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "실제와 구분할 수 있는 안전하지 않은 상황의 등장 인물 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "실제와 구분할 수 있는 적극적 폭력 상황의 등장 인물 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "실제와 구분할 수 있는 그래픽 폭력"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "폭력 재현 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "실제와 비슷하게 안전하지 않은 상황의 등장 인물 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "실제에 가깝게 적극적 폭력 상황의 등장 인물 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "실제에 가까운 적극적 그래픽 폭력"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "유혈 장면 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "비현실적 혈흔"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "현실적 혈흔"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "혈흔 묘사 및 사지 절단"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "성폭력 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "강간/기타 금지 성 행위"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "알콜 음료 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "알콜 음료 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "알콜 음료 활용"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "불법 약물 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "불법 약물 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "불법 약물 활용"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "담배 상품 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "담배 상품 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "담배 상품 활용"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "나체 표현 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "대략적인 예술 전라 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "지속적인 전라 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "성적 표현 언급 또는 묘사 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "도발적 표현 언급 또는 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "성적 표현 언급 또는 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "그래픽 성 행위"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "비속어 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "온화하거나 드문 모독 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "어중간한 모독 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "강렬하거나 빈번한 모독 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "부적절한 유머 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "슬랩스틱 유머"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "3류/화장실 유머"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "성인/성 유머"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "차별 문구 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "특정 인물 집단에 대한 부정"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "감정적 해를 끼치도록 의도한 차별"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "성, 인종, 종교에 기반한 적나라한 차별"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "광고 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "제품 배치"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "특정 브랜드 및 상표 등록 제품을 명백하게 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "특정 실물 구매를 장려"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "도박 내용 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "토큰 또는 크레딧을 활용한 임의 이벤트 도박"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "“게임” 머니 활용 도박"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "현금 활용 도박"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "현금 소비 기능 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "현금 기부 장려"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "앱 내 현금 소비성"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "다른 사용자와의 문장 대화 기능 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "문장 대화 없는 사용자간 교류"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "사용자간 중재 문장 대화 기능"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "사용자간 비통제 문장 대화 기능"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "다른 사용자와의 음성 대화 기능 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "사용자간 비통제 영상/음성 대화 기능"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "소셜 네트워크 사용자 이름 또는 전자메일 주소를 공유하지 않음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "소셜 네트워크 사용자 이름 또는 전자메일 주소를 공유함"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "사용자 정보를 제 3자와 공유하지 않음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "프로그램 최신 버전 확인"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "사용자를 식별할 수 없는 진단 데이터 공유"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "사용자 상호 식별 가능한 정보 공유"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "실제 위치를 다른 사용자에게 공유하지 않음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "실제 위치를 다른 사용자에게 공유함"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "동성애 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "동성애 간접 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "동성간의 키스"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "동성간의 성적 행동 화면 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "매춘 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "매춘 간접 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "매춘 직접 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "매춘 행위 화면 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "간통 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "간통 간접 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "간통 직접 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "간통 행위 화면 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "성적 대상화 주인공 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "반라 인간상"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "명백히 성적 매력을 부여한 인간상"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "신성 모독 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "역사적 신성 모독 표현 또는 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "현대식 인간 모독 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "현대식 모독 화면 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "명확하지 않은 죽은 인간 시신 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "명확한 죽은 인간 시신 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "실외에 노출된 죽은 인간 시신 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "인간 신체 모독 화면 묘사"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "노예제도 언급 없음"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "역사적 노예 모독 표현 또는 언급"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "현대식 노예제도 표현"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "현대식 노예제도 화면 묘사"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "일반"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "모두"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "성인 전용"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "성인용"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "10대"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "10세이상 전연령용"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "전연령용"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "영유아용"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "프로그램"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s이(가) 추가 파일 형식 지원을 요청합니다."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "추가 MIME 형식이 필요함"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s이(가) 추가 글꼴을 요청합니다."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "추가 글꼴이 필요함"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s이(가) 추가 멀티미디어 코덱을 요청합니다."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "추가 멀티미디어 코덱이 필요함"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s이(가) 추가 프린터 드라이버를 요청합니다."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "추가 프린터 드라이버가 필요함"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s이(가) 추가 패키지를 요청합니다."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "추가 패키지가 필요함"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "소프트웨어에서 찾기"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "제거 중…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "설치 대기 중…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "업데이트 대기 중…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "준비 중…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "이 프로그램은 인터넷에 연결되어 있을 때만 사용할 수 있습니다."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "설치(_I)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "설치(_I)…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "실행(_L)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "제거(_R)"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "네트워크"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "네트워크 통신할 수 있습니다"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "시스템 서비스"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "시스템 버스에서 D-Bus 서비스에 접근할 수 있습니다"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "세션 서비스"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "세션 버스에서 D-Bus 서비스에 접근할 수 있습니다"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "장치"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "시스템 장치 파일에 접근할 수 있습니다"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "내 폴더"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "파일 내용을 보고 편집하고 만들 수 있습니다"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "파일 내용을 볼 수 있습니다"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "파일 시스템"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "다운로드 폴더"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "설정"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "임의 설정을 보고 바꿀 수 있습니다"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "이전 디스플레이 시스템"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "오래된, 안전하지 않은 디스플레이 시스템을 사용합니다"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "샌드박스 외부 동작"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "샌드박스를 벗어나서 제한 요소를 회피할 수 있습니다"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "이 프로그램은 온전히 샌드박스에서 실행합니다."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"이 프로그램에서 시스템의 어떤 부분에 접근하는지 확인할 수 없습니다. 오래된 프"
+"로그램에선 일반적입니다."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "알 수 없음"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "안 함"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "알 수 없음"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "하"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "중"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "상"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "알 수 없음"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "평가를 작성하려면 인터넷 연결이 필요합니다"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "“%s”을(를) 찾을 수 없습니다."
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "퍼블릭 도메인"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+"https://ko.wikipedia.org/wiki/%ED%8D%BC%EB%B8%94%EB%A6%AD_%EB%8F%84%EB"
+"%A9%94%EC%9D%B8"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "자유 소프트웨어"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "사용자는 다음 라이선스를 따릅니다:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "자세한 정보"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "세부 정보 페이지"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "다운로드 중"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "업데이트(_U)"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "바로 가기 추가(_A)"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "바로 가기 제거(_M)"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "스크린샷이 없습니다"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "포함된 프로그램 저장소"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"이 프로그램에는 다른 프로그램처럼 접근하여 업데이트를 제공하는 프로그램 저장"
+"소가 있습니다."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "포함된 프로그램 저장소 없음"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"이 프로그램에는 프로그램 저장소가 없습니다. 새 버전으로 업데이트하지 않겠습니"
+"다."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"이 프로그램은 이미 배포판에서 제공하며 다른 프로그램으로 바꿀 수 없습니다."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "식별된 프로그램 저장소"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"이 프로그램 저장소을 추가하면 추가 프로그램과 업그레이드에 접근할 수 있습니"
+"다."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "신뢰하는 프로그램 저장소만 사용합니다."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "웹사이트(_W)"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "기부(_D)"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "사용 언어 환경에 맞춰 지역화함"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "문서"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "출시 활동"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "시스템 통합"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "샌드박싱 처리"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "채널"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "버전"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "연령별 등급"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "권한"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "업데이트함"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "분류"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "설치 용량"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "다운로드 용량"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "개발자"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "라이선스"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "자유"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "상업용"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "추가 프로그램"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "선택한 추가 기능을 프로그램과 함께 설치합니다."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "평가"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "평가 작성(_W)"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "더 보기(_S)"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"프로그램을 자유롭게 실행, 복제, 배포, 연구, 수정이 가능함을 의미합니다."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "상업용 프로그램"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"이 프로그램을 개인 또는 회사에서 소유함을 의미합니다. 사용에 종종 제한이 있으"
+"며, 소스 코드에 일반적으로 접근할 수 없습니다."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "알 수 없는 프로그램 라이선스"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "이 프로그램의 라이선스 조항을 알 수 없습니다."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "프로그램에 다음 기능이 있어 이 방식으로 등급을 매겼습니다:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "이 등급에 대한 세부 정보가 없습니다."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " 그리고 "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s 문자에 대응하는 글꼴"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s용 프로그램"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "요청한 프로그램을 찾을 수 없습니다"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s이(가) 없습니다"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "웹사이트"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "%s 파일을 제공하는 프로그램이 없습니다."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"빠진 프로그램 가져오기 설정 항목 같은 %s 정보는 %s에서 찾을 수 있습니다."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s을(를) 지원하는 프로그램이 없습니다."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s이(가) 없습니다."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"이 형식을 지원하는 프로그램 가져오기 설정 항목 같은 %s 정보는 %s에서 찾을 수 "
+"있습니다."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s 문자를 지원하는 글꼴이 없습니다."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "추가 글꼴 가져오기 설정 항목 같은 %s 정보는 %s에서 찾을 수 있습니다."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s 형식에 대한 추가 코덱이 없습니다."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"이 형식을 재생할 수 있는 코덱 가져오기 설정 항목 같은 %s 정보는 %s에서 찾을 "
+"수 있습니다."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s을(를) 지원하는 플라즈마 자원이 없습니다."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"추가 플라즈마 자원 가져오기 설정 항목 같은 %s 정보는 %s에서 찾을 수 있습니다."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s용 프린터 드라이버가 없습니다."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"이 프린터를 지원하는 드라이버 가져오기 설정 항목 같은 %s 정보는 %s에서 찾을 "
+"수 있습니다."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "이 웹사이트"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"안타깝게도, \"%s\" 검색 대상을 찾지 못했습니다. 더 알아보시려면 %s을(를) 참고"
+"하십시오."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "검색 결과 찾기에 실패했습니다"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s 파일 형식"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "코덱 페이지"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "환영합니다"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "소프트웨어 사용을 환영합니다"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"소프트웨어는 여러분이 필요한 모든 프로그램을 한 곳에서 모두 설치할 수 있게 해"
+"줍니다. 추천 항목을 살펴보고, 분류를 탐색하거나, 원하는 프로그램을 검색해보세"
+"요."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "쇼핑하러 가요!(_L)"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "제거함"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "설치함"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "업데이트함"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "알 수 없음"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y년 %B %e일"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "역사"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "시스템 프로그램"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "설치한 페이지"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "소프트웨어 카탈로그를 다운로드하고 있습니다"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "페이지 읽어들이는 중"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "시작 중…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"현재 접속 네트워크는 종량제입니다. 종량제 연결은 데이터 사용량, 속도 등을 제"
+"한하거나 해당 사용건에 대해 요금을 부과합니다. 데이터 사용량을 절약하려면 자"
+"동 업데이트를 멈춰야합니다.\n"
+"\n"
+"비 종량제 네트워크를 연결할 수 있을 경우 자동 업데이트를 재개합니다. 그때까지"
+"라도, 직접 업데이트를 설치하실 수 있습니다.\n"
+"\n"
+"대신 현재 네트워크를 종량제 네트워크로 잘못 인식했다면, 이 설정을 바꿀 수 있"
+"습니다."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "네트워크 설정 열기(_S)"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "관리 페이지"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "관리할 평가가 없습니다"
+
+# flatpak 설치 범위를 나타냅니다. user vs system
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "system"
+
+# flatpak 설치 범위를 나타냅니다. user vs system
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "user"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "브랜치"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "형식"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "설치 대상"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "더 보기…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "추천 영상/음성 프로그램"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "추천 게임"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "추천 그래픽 프로그램"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "추천 생산성 프로그램"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "선택한 제 3자 공급원에서 추가 프로그램에 접근합니다."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"일부 프로그램은 상업용이며, 소스코드 활용, 공유 접근에 제한이 있습니다."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "더 찾아보기…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "활성화"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "개요 페이지"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "제 3자 프로그램 저장소를 활성화하시겠습니까?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "이전"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "다음"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "편집자 추천"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "최근 릴리스"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "분류"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "프로그램 데이터가 없습니다"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s 준비"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "정말로 %s 저장소를 제거하시겠습니까?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"%s에서 모든 프로그램을 제거하겠으며, 다시 사용하려면 저장소를 다시 설치해야 "
+"합니다."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "정말로 %s 프로그램을 제거하시겠습니까?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s 프로그램을 제거하겠으며, 다시 사용하려면 설치해야 합니다."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s(설치함)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "업데이트 기본 설정"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "자동 업데이트"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"모바일 연결 또는 종량제 연결 상태일 경우 자동 업데이트를 비활성화합니다."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "자동 업데이트 알림"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "업데이트를 자동으로 설치할 때 알림을 나타냅니다."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"현재 설치한 일부 프로그램이 %s에 호환되지 않습니다. 계속하면 업그레이드를 진"
+"행하는 동안 다음 항목을 자동으로 제거합니다:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "호환성 없는 프로그램"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "계속(_C)"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "프로그램 %u개 설치"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "추가 기능 %u개 설치"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "프로그램 %u개"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "추가 기능 %u개"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s 및 %s을(를) 설치했습니다"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "“%s”을(를) 제거하시겠습니까??"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "“%s”을(를) 비활성화하시겠습니까?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"이 저장소에서 설치한 프로그램의 최신 업데이트와 보안 수정판이 더 이상 없습니"
+"다."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "비활성화"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "운영체제"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "기본 프로그램을 공급하는 이 저장소는 %s에서 제공합니다."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "제 3자 저장소"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "추가 공급원 없음"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "활성화(_E)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "제거(_R)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "비활성(_D)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "활성화 중"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "비활성화 중"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "활성화됨"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "비활성화함"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "싫어요"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "별로예요"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "괜찮군요"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "좋아요"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "완전 좋아요"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "시간을 내어 평가를 작성해주세요"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "별점을 선택하세요"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "요약 내용이 너무 짧습니다"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "요약 내용이 너무 깁니다"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "설명이 너무 짧습니다"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "설명이 너무 깁니다"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "평가 제출"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "게시(_P)"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "요약"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "“대단한데요, 추천합니다”와 같이 간단한 평가 소감을 적어주세요."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "평가"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "이 앱은 어떤가요? 평가해보시고 이유를 이야기해보세요."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"<a href=\"https://odrs.gnome.org/privacy\">개인 정보 보호 정책</a>에서 어떤 "
+"데이터를 보내는지 확인해보십시오."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "총점"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"시스템에 해를 가하거나, 기능이 제대로 동작하지 않거나, 사용자를 차별하는 기능"
+"에 대한 평가를 보고할 수 있습니다."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "제출하고 나면, 관리자가 확인하기 전까지는 평가 내용을 숨겨놓습니다."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "평가를 제출하시겠습니까?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "제출"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "평가 내용이 도움 됐나요?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "예"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "아니요"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "지루해요"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "보고…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "제거…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "스크린샷이 없습니다"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "이미지 읽어들이기에 실패했습니다"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "스크린샷 크기 정보가 없습니다"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "캐시를 만들 수 없습니다"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "스크린샷이 유효하지 않습니다"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "스크린샷이 없습니다"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "스크린샷"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "일치하는 결과 %u개 더"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "검색 페이지"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "프로그램이 없습니다"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "%s에서 펌웨어 업데이트를 다운로드할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s에서 업데이트를 다운로드할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "업데이트를 다운로드할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "업데이트를 다운로드할 수 없습니다: 필요한 인터넷 연결이 끊어짐"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "%s에서 업데이트를 다운로드할 수 없습니다: 디스크 용량 부족"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "업데이트를 다운로드할 수 없습니다: 디스크 용량 부족"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "업데이트를 다운로드할 수 없습니다: 인증 필요"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "업데이트를 다운로드할 수 없습니다: 인증 정보 잘못됨"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "업데이트를 다운로드할 수 없습니다: 프로그램 설치 권한 없음"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "업데이트 목록을 가져올 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "%2$s에서 다운로드에 실패하여 %1$s을(를) 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "다운로드에 실패하여 %s을(를) 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "%2$s 런타임이 없어 %1$s을(를) 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "지원하지 않는 %s을(를) 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "설치할 수 없습니다: 필요한 인터넷 연결이 끊어짐"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "설치할 수 없습니다: 잘못된 형식의 프로그램"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s을(를) 설치할 수 없습니다: 디스크 용량 부족"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s을(를) 설치할 수 없습니다: 인증 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s을(를) 설치할 수 없습니다: 인증 정보 잘못됨"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "%s을(를) 설치할 수 없습니다: 프로그램 설치 권한 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "%s을(를) 설지할 수 없습니다: 교류 전원 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "%s을(를) 설지할 수 없음: 배터리 잔여량이 매우 부족합니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s을(를) 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "다운로드에 실패하여 %2$s에서 %1$s을(를) 업데이트할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "다운로드에 실패하여 %s을(를) 업데이트할 수 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "다운로드에 실패하여 %s에서 업데이트를 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "다운로드에 실패하여 업데이트를 설치할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "업데이트할 수 없습니다: 필요한 인터넷 연결이 끊어짐"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s을(를) 업데이트할 수 없습니다: 디스크 용량 부족"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "업데이트를 설치할 수 없음: 디스크 용량 부족"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "%s을(를) 업데이트할 수 없습니다: 인증 필요"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "업데이트를 설치할 수 없음: 인증 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s을(를) 업데이트할 수 없습니다: 인증 정보 잘못됨"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "업데이트를 설치할 수 없음: 인증 정보 잘못됨"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "%s을(를) 업데이트할 수 없습니다: 프로그램 업데이트 권한 없음"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "업데이트를 설치할 수 없음: 프로그램을 업데이트할 권한이 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "%s을(를) 업데이트할 수 없습니다: 교류 전원 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "업데이트를 설치할 수 없음: 교류 전원을 연결해야 함"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "%s을(를) 업데이트할 수 없음: 배터리 잔여량이 매우 부족합니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "업데이트를 설치할 수 없음: 배터리 잔여량이 매우 부족합니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "%s을(를) 업데이트할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "업데이트를 설치할 수 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%2$s에서 %1$s(으)로 업그레이드할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "다운로드에 실패하여 %s 업그레이드에 실패했습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "%s(으)로 업그레이드할 수 없음: 인터넷 연결이 필요하지만 연결할 수 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s(으)로 업그레이드할 수 없습니다: 디스크 용량 부족"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s을(를) 업그레이드할 수 없습니다: 인증 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s을(를) 업그레이드할 수 없습니다: 인증 정보 잘못됨"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%s을(를) 업그레이드할 수 없습니다: 업그레이드 권한 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s을(를) 업그레이드할 수 없습니다: 교류 전원 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "%s을(를) 업그레이드할 수 없음: 배터리 잔여량이 매우 부족합니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "%s을(를) 업그레이드할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s을(를) 제거할 수 없습니다: 인증 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s을(를) 제거할 수 없습니다: 인증 정보 잘못됨"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s을(를) 제거할 수 없습니다: 프로그램 제거 권한 없음"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s을(를) 제거할 수 없습니다: 교류 전원 필요"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "%s을(를) 제거할 수 없음: 배터리 잔여량이 매우 부족합니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "%s을(를) 제거할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s을(를) 실행할 수 없습니다: %s을(를) 설치하지 않음"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "디스크 용량이 부족합니다 — 일부 공간을 확보하고 다시 시도하십시오"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "유감스럽게도 뭔가가 잘못되었습니다"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "파일 설치를 실패했습니다: 지원하지 않음"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "파일 설치에 실패했습니다: 인증 실패"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "설치를 실패했습니다: 지원하지 않음"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "설치를 실패했습니다: 인증 실패"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s에 연락할 수 없습니다"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "새 플러그인을 활용하려면 %s을(를) 다시 시작해야합니다."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "새 플러그인을 활용하려면 이 프로그램을 다시 시작해야합니다."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "교류 전원 필요"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "배터리 잔여량이 매우 부족합니다"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "공급원: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s(설치 중)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s(제거 중)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "모두 제거(_R)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "업데이트 설명이 없습니다."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "%s에 설치함"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "설치한 업데이트"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "추가"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "제거"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "업데이트"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "다운그레이드"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "이 시스템에 설치한 업데이트가 없습니다."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "대기 중인 보안 업데이트"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "지금 중요한 업데이트를 설치하시는 것이 좋습니다"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "다시 시작하고 설치"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "프로그램 업데이트가 있습니다"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "중요한 OS 업데이트와 프로그램 업데이트에 대한 설치 준비가 끝났습니다"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "보기"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "프로그램 %u개 업데이트 함 — 다시 시작해야합니다"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "프로그램 %u개 업데이트 함"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s 프로그램을 업데이트했습니다."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "프로그램을 다시 시작해주십시오."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s 프로그램과 %s 프로그램을 업데이트했습니다."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "프로그램 %u개를 다시 시작해야합니다."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "%s, %s, %s을(를) 포함합니다."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "운영체제 업데이트가 없습니다"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "보안 업데이트를 계속 받으려면 업그레이드하십시오."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s 새 버전을 설치할 수 있습니다"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "업그레이드할 프로그램이 있습니다"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "프로그램 업데이트에 실패했습니다"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "중요한 OS 업데이트 설치에 실패했습니다."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "상세 정보 표시"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "시스템 업그레이드 완료"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "%s %s 사용을 환영합니다!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "프로그램 업데이트를 설치했습니다"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "중요한 OS 업데이트를 설치했습니다."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "평가"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "업데이트에 실패했습니다"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "시스템이 이미 최신입니다."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "업데이트를 취소했습니다."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"인터넷 연결이 필요하지만 연결할 수 없습니다. 인터넷 연결을 확인하고 다시 시도"
+"하십시오."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"업데이트에 보안 문제가 있습니다. 자세한 문제를 알아보려면 프로그램 공급자에"
+"게 연락하십시오."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"디스크 공간이 충분하지 않습니다. 여분의 공간을 확보하고 다시 시도하십시오."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"죄송합니다. 업데이트 설치에 실패했습니다. 다른 업데이트를 기다린 후 다시 시도"
+"하십시오. 문제가 계속되면 프로그램 공급자에게 연락하십시오."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%p %l:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "어제, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "어제, %p %l:%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "2일 전"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "3일 전"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "4일 전"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "5일 전"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "6일 전"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "1주 전"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "2주 전"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "새 업데이트 찾는 중…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "업데이트 설정 중…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(시간이 좀 걸릴 수 있습니다)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "마지막 확인 일시: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s을(를) 더 이상 지원하지 않습니다."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "현재 운영체제를 더 이상 지원하지 않습니다."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "보안 업데이트를 더 이상 받지 않음을 의미합니다."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "좀 더 최신 버전으로 업그레이드 하시는 편이 좋습니다."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "요금이 청구될 수 있음"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"모바일 광대역망을 사용하여 업데이트를 확인하면 추가요금이 청구될 수 있습니다."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "어쨌든 확인(_A)"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "네트워크 연결이 없습니다"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "업데이트를 확인하려면 인터넷 접근이 필요합니다."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "검사 중…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "업데이트 검사"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "업데이트 페이지"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "프로그램이 최신입니다"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"모바일 광대역망을 사용하여 업데이트를 확인하면 추가요금이 청구될 수 있습니다"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "어쨌든 확인(_C)"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "업데이트 확인차 온라인으로 이동"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "데스크톱 설정(_N)"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "업데이트를 자동으로 관리함"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "다시 시작하고 업데이트"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "모두 업데이트"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "통합 펌웨어"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "다시 시작 필요"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "프로그램 업데이트"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "장치 펌웨어"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "다운로드(_D)"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "업데이트하기 전 데이터와 파일을 백업하는 것이 좋습니다."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "지금 다시 시작(_R)"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "컴퓨터를 다시 시작하면 업데이트가 적용됩니다."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s이(가) 있습니다"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "%s %s 다운로드 대기 중"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s 다운로드 중"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s 설치 준비가 끝났습니다"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "새 기능을 추가하고 매끄럽게 다듬은 주요 업그레이드."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "더 알아보기(_L)"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "이 컴퓨터에 프로그램을 추가, 제거, 업데이트 합니다"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;업데이트;Upgrade;업그레이드;Sources;공급원;Repositories;저장소;"
+"Preferences;기본 설정;Install;설치;Uninstall;설치 제거;Program;프로그램;"
+"Software;소프트웨어;App;앱;Store;스토어;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "오디오 창작 및 편집"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "음악 재생 프로그램"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "디버거"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "통합 개발 환경"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "인공지능"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "천문학"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "화학"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "언어"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "수학"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "로봇 공학"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "모든 게임"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "추천 게임"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "액션"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "어드벤처"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "아케이드"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "블록"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "보드"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "카드"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "에뮬레이터"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "어린이"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "로직"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "롤플레잉"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "스포츠"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "전략"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D 그래픽"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "사진"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "스캐닝"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "벡터 그래픽"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "뷰어"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "달력"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "데이터베이스"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "금융"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "워드프로세서"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "글꼴"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "코덱"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "입력기"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "언어팩"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "지역화"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "하드웨어 드라이버"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "대화"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "뉴스"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "웹 브라우저"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "모두"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "추천"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "텍스트 편집기"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "모든 참고 자료"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "추천 참고 자료"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "예술"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "위인전"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "만화"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "소설"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "건강"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "역사"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "생활 방식"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "정치"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "스포츠"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "영상 및 음악"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "개발자 도구"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "교육 / 과학"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "게임"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "그래픽 및 사진"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "생산성"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "통신 및 뉴스"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "참고 자료"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "유틸리티"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "운영체제 업데이트"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "성능, 안정성, 보안 개선 요소가 있습니다."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "추천 그림 다운로드 중…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "새 기능과 수정 사항이 들어있는 Endless OS 업데이트입니다."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS 업데이트 서비스에서 업데이트를 가져오고 적용할 수 없습니다."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "그놈 소프트웨어 AppStream 시스템 범위 설치 프로그램"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "명령행 인자 해석에 실패했습니다"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "정확히 파일 이름 하나를 지정해야합니다"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "이 프로그램은 루트 사용자만 활용할 수 있습니다"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "컨텐트 형식 검증에 실패했습니다"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "복사에 실패했습니다"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "추가 메타데이터 파일 다운로드 중…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "업그레이드 정보 다운로드 중…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "최신 기능, 성능, 안정성 개선 업그레이드입니다."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak 지원"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak은 리눅스 데스크톱 프로그램용 프레임워크입니다"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "%s flatpak 메타데이터 가져오는 중…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s 장치 업데이트"
+
+# flatpak 설치 범위를 나타냅니다. user vs system
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s 시스템 업데이트"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s 내장 컨트롤러 업데이트"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s 관리 엔진 업데이트"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s 기업 관리 엔진 업데이트"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s 고객 관리 엔진 업데이트"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s 컨트롤러 업데이트"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s 썬더볼트 컨트롤러 업데이트"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU 마이크로코드 업데이트"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s 설정 업데이트"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "펌웨어 업데이트 서명 다운로드 중…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "펌웨어 업데이트 메타데이터 다운로드 중…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "펌웨어 업그레이드 지원"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "펌웨어 업그레이드 지원 기능이 들어있습니다"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "프로그램 등급 정보 다운로드 중…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "공개 데스크톱 평가 지원"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS는 사용자의 프로그램 평가를 보여주는 서비스입니다"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "스냅 스토어"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "스냅 지원"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "스냅은 통합 리눅스 패키지 형식입니다"
+
+#~ msgid "About %s"
+#~ msgstr "%s 정보"
+
+#~ msgid "%s ME"
+#~ msgstr "%s 관리 엔진"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "폴더 관리 UI 표시"
+
+#~ msgid "Folder Name"
+#~ msgstr "폴더 이름"
+
+#~ msgid "_Add"
+#~ msgstr "추가(_A)"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "프로그램 폴더에 추가"
+
+#~ msgid "Top Rated"
+#~ msgstr "순위권"
+
+#~ msgid "Extension Settings"
+#~ msgstr "추가 기능 설정"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "확장 기능 사용시 문제가 생길 수 있습니다. 시스템에 문제가 있다면, 동작을 "
+#~ "끄는 것이 좋습니다."
+
+#~ msgid "Failed to load components"
+#~ msgstr "구성요소 읽어 들이기에 실패했습니다"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS 검증 이상 없음!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "파일 읽어들이기에 실패했습니다"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "저장하지 않은 바뀜"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "프로그램 목록을 이미 읽어들였습니다."
+
+#~ msgid "Merge documents"
+#~ msgstr "문서 병합"
+
+#~ msgid "Throw away changes"
+#~ msgstr "바뀐 내용 버리기"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "AppStream 파일 열기"
+
+#~ msgid "_Open"
+#~ msgstr "열기(_O)"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "AppStream 파일 저장"
+
+#~ msgid "_Save"
+#~ msgstr "저장(_S)"
+
+#~ msgid "Failed to save file"
+#~ msgstr "파일 저장에 실패했습니다"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s 배너 디자인을 삭제했습니다."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "배너 디자인을 삭제했습니다."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "프로그램 목록이 바뀐 채로 저장하지 않았습니다."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "자세한 로깅 사용"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "그놈 소프트웨어 배너 디자이너"
+
+#~ msgid "No Designs"
+#~ msgstr "디자인 없음"
+
+#~ msgid "Error message here"
+#~ msgstr "여기에 오류 메시지를 적으십시오"
+
+#~ msgid "App ID"
+#~ msgstr "앱 ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "편집자 추천"
+
+#~ msgid "Category Featured"
+#~ msgstr "분류별 추천"
+
+#~ msgid "Undo"
+#~ msgstr "실행 취소"
+
+#~ msgid "Banner Designer"
+#~ msgstr "배너 디자이너"
+
+#~ msgid "New Banner"
+#~ msgstr "새 배너 만들기"
+
+#~ msgid "Import from file"
+#~ msgstr "파일에서 가져오기"
+
+#~ msgid "Export to file"
+#~ msgstr "파일로 내보내기"
+
+#~ msgid "Delete Design"
+#~ msgstr "디자인 삭제"
+
+#~ msgid "Featured App"
+#~ msgstr "추천 앱"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "운영체제 업그레이드"
+
+#~ msgid "Spacing"
+#~ msgstr "여백"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "하위 객체 사이의 공간"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "항목을 선택하려면 항목을 마우스로 누르십시오"
+
+#~ msgid "Select"
+#~ msgstr "선택"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "폴더에 추가(_A)…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "폴더로 이동(_M)…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "폴더에서 제거(_R)"
+
+#~ msgid "Featured Applications"
+#~ msgstr "추천 프로그램"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "그놈 소프트웨어용 추천 배너를 디자인합니다"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;소프트웨어;App;앱;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "쉘 확장 기능"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "웹 앱 지원"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "브라우저에서 인기있는 웹 프로그램을 실행합니다"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "그놈 쉘 확장 저장소"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "쉘 확장 기능 메타데이터 다운로드 중…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "그놈 쉘 확장 기능"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "모두(_A)"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "로그인 / 등록…"
+
+#~ msgid "Continue"
+#~ msgstr "계속"
+
+#~ msgid "Use"
+#~ msgstr "사용"
+
+#~ msgid "Add another…"
+#~ msgstr "다른 항목 추가…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "소프트웨어 카탈로그를 불러오는 중입니다"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "정말로 %s 프로그램을 구매하시겠습니까?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s을(를) 설치하며 %s을(를)바꿉니다."
+
+#~ msgid "Purchase"
+#~ msgstr "구매"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "%s 사용자로 로그인 함"
+
+#~ msgid "Sign in…"
+#~ msgstr "로그인…"
+
+#~ msgid "Sign out"
+#~ msgstr "로그아웃"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "%s을(를) 구매할 수 없습니다: 인증 필요"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "%s을(를) 구매할 수 없습니다: 인증 정보 잘못됨"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "%s을(를) 구매할 수 없습니다: 결제정보 없음"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "%s을(를) 구매할 수 없습니다: 결제 거절됨"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "%s을(를) 구매할 수 없습니다"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "계속하려면 우분투 원 계정을 사용해야합니다."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "계속하려면 우분투 원 계정을 사용해야합니다."
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..2df0c1d
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,5653 @@
+# Lithuanian translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# FULL NAME <EMAIL@ADDRESS>, 2014, 2015.
+# Aurimas Černius <aurisc4@gmail.com>, 2014-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-25 23:08+0300\n"
+"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
+"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2)\n"
+"X-Generator: Gtranslator 3.36.0\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME programinė įranga"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME programų tvarkytuvė"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Programinė įranga leidžia jums rasti ir įdiegti naujos programas bei "
+"sistemos plėtinius, taip pat pašalinti įdiegtas programas."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME programinė įranga parodo siūlomas bei populiarias programas su "
+"naudingais aprašymais bei kelios ekrano nuotraukomis kiekvienai programai. "
+"Programas galima rasti naršant po kategorijų sąrašą arba ieškant. Taip pat "
+"galima atnaujinti sistemą naudojant atnaujinimą atsijungus."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Apžvalgos skydelis"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Detalių skydelis"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Įdiegtų skydelis"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Atnaujinimų skydelis"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Atnaujinimo detalės"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "GNOME projektas"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Įdiegti appstream failą į sisteminę vietą"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Diegiamas appstream failas į sisteminę vietą"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Suderinamų projektų sąrašas"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Tai yra suderinamų projektų, tokių kaip GNOME, KDE ir XFCE, kuriuos mes "
+"turėtume rodyti, sąrašas."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Ar tvarkyti atnaujinimus GNOME Programinėje įrangoje"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Jei išjungta, GNOME Programinė įranga paslėps atnaujinimų skydelį ir "
+"nevykdys automatinio atnaujinimo veiksmų."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automatiškai parsiųsti ir įdiegti atnaujinimus"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Jei įjungta, GNOME Programinė įranga automatiškai fone atsiunčia "
+"atnaujinimus, taip pat įdiegia tuos, kuriems nereikia iš naujo paleisti "
+"sistemos."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Pranešti naudotojui apie programinės įrangos atnaujinimą fone"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Jei įjungta, GNOME Programinės įranga praneša naudotojai apie atnaujinimus, "
+"kurie vyko jam nedirbant."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Ar atsisiųsti atnaujinimus automatiškai esant prisijungus prie skaičiuojamo "
+"ryšio"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Jei įjungta, GNOME Programinė įranga automatiškai atnaujinama fone net esant "
+"prisijungus prie matuojamo ryšio (galiausiai atsisiųsdama kai kuriuos "
+"metaduomenis, tikrina atnaujinimus ir t. t., dėl ko gali būti išlaidų "
+"naudotojui)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Ar tai yra pirmasis GNOME Programinės įrangos paleidimas"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Šalia programų rodyti jų įvertinimą žvaigždutėmis"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtruoti programas pagal numatytąją šaką, nustatytą nutolusiam kompiuteriui"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Nelaisvos programos prieš įdiegimą rodo įspėjimo dialogą"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Kai yra įdiegiamos nelaisvos programos, gali būti rodomas įspėjimo dialogas. "
+"Tai valdo, ar šis dialogas bus nuslopinamas."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Populiarių programų sąrašas"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Naudotinų programų, nustelbiančių sistemos apibrėžtąsias programas, sąrašas."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Paskutinio atnaujinimų patikrinimo laiko žyma"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Paskutinio pranešimo apie atnaujinimą laiko žyma"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Pirmojo saugos atnaujinimo laiko žyma, išvaloma po atnaujinimo"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Paskutinio atnaujinimo laiko žyma"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "Paskutinė laiko žyma, kai sistema buvo įjungta ir atnaujinta"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Amžius sekundėmis kada tikrinama, ar ekrano nuotrauka vis dar tinkama"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Pasirinkus didesnę vertę bus mažiau užklausų nutolusiam serveriui, bet "
+"atnaujinimų parodymas naudotojui gali ilgiau užtrukti. Vertė 0 reiškia, kad "
+"serveris niekada nebus tikrinamas, jei paveikslėlis yra podėlyje."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Programų atsiliepimams naudojamas serveris"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Mažiausias atsiliepimų karmos įvertis"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Atsiliepimai su mažesne nei ši karma nebus rodomi."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Oficialių šaltinių, kurie neturėtų būti laikomi trečiosiomis šalimis, sąrašas"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Oficialių šaltinių, kurie neturėtų būti laikomi laisvąja programine įranga, "
+"sąrašas"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Licencijos URL, naudojamas, kai programa neturi būti laikoma laisva "
+"programine įranga"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Kai tik įmanoma, įdiegti supakuotas programas visiems sistemos naudotojams"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Leisti prieigą prie programinės įrangos šaltinių dialogo"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Siūlyti atnaujinimus į negalutines versijas"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Rodyti sąsajos elementus, pranešančius, kad programa yra nelaisva"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Rodyti pranešimą ne laisvos programinės įrangos šaltinius"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Rodyti įdiegtų programų dydį įdiegtų programų sąraše"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI, kuris paaiškina ne laisvą ir nuosavybinę programinę įrangą"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Sąrašas URL, nurodančių appstream failus, kurie bus parsiųsti į jūsų app-"
+"info aplanką"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Įdiegti AppStream failą į sisteminę vietą visiems naudotojams"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Įjungti GNOME apvalkalo plėtinių saugyklą"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Simboliu eilutė, sauganti gnome-online-account id, naudojamą prisijungimui"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Programinės įrangos diegimas"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Įdiegti pažymėtą programinę įrangą sistemoje"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Žyminė viską"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Nežymėti nieko"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Programinės įrangos šaltiniai"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Atnaujinimų nustatymai"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programinė įranga"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Grįžti atgal"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Naršyti"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "Į_diegta"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Atnaujinimai"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Paieška"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Šaltinis"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Programinės įrangos šaltiniai"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Tikrinti diską"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Tinklo nustatymai"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Paleisti dabar"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Daugiau informacijos"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatiniai atnaujinimai pristabdyti"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Sužinokite _daugiau…"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Vietinis failas"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paketas"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Laukia"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Įdiegta"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Diegiama"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Šalinama"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Paleidimo veiksena: viena iš „updates“, „updated“, „installed“ arba "
+"„overview“"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "VEIKSENA"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Ieškoti programų"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "IEŠKOTI"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Rodyti programas detalią informaciją (naudojant programos ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Rodyti programas detalią informaciją (naudojant paketo pavadinimą)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Įdiegti programą (naudojant programos ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Atverti vietinį paketo failą"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FAILOPAVADINIMAS"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "Tikimosi interaktyvumo šiam veiksmui: „none“, „notify“ arba „full“"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Rodyti išsamią derinimo informaciją"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Įdiegia paruoštus atnaujinimus fone"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Rodyti atnaujinimų nustatymus"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Išeiti iš veikiančio vieneto"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Teikti pirmenybę vietiniams failų šaltiniams vietoj AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Rodyti versijos numerį"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Išvertė:\n"
+"Aurimas Černius <aurisc4@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Apie programinę įrangą"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Gražus būdas tvarkyti sistemos programinę įrangą."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Atsiprašome! Apie šią programą nėra informacijos."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Aplankyti tinklalapį"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Įdiegti…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Atsisakyti"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Įdiegti"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Atnaujinti"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Pašalinti"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Atnaujinimo metu įrenginys naudoti negalima."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Reikia papildomų leidimų"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Reikalingas nuotolinis prisijungimas %s (sritis %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Reikia prisijungti"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Atsisakyti"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Prisijungti"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Na_udotojas"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Sla_ptažodis"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Kita"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Visos"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Siūlomos"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Siūlomos %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Įvertinimas"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Pavadinimas"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Rodyti"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Sub-kategorijų filtrų meniu"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Rikiuoti"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Sub-kategorijų rikiavimo meniu"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Įveskite skaičių nuo 1 iki %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Pasirinkite programą:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS atnaujinimai buvo įdiegti"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Galima parašyti atsiliepimą apie neseniai įdiegtus atnaujinimus"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s dabar įdiegta"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Reikia paleisti iš naujo, kad pakeitimai įsigaliotų."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Programa pasiruošusi naudojimui."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Paleisti iš naujo"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Paleisti"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Įdiegti trečių šalių programinę įrangą?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Įjungti trečių šalių programinės įrangos šaltinį?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nėra <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">laisva ir atviro kodo programinė įranga</a>, o ją tiekia „%s“."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s tiekia „%s“."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Šį programinės įrangos šaltinį reikia įjungti prieš tęsiant diegimą."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Kai kuriose šalyse gali būti nelegalu naudoti %s."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Kai kuriose šalyse įdiegti ar naudoti kodeką gali būti nelegalu."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Daugiau neperspėti"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Įjungti ir įdiegti"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detalios klaidos iš paketų tvarkytuvės:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detali informacija"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Atnaujinimas buvo įdiegtas"
+msgstr[1] "Atnaujinimai buvo įdiegti"
+msgstr[2] "Atnaujinimai buvo įdiegti"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Reikia paleisti iš naujo, kad jis įsigaliotų."
+msgstr[1] "Reikia paleisti iš naujo, kad jie įsigaliotų."
+msgstr[2] "Reikia paleisti iš naujo, kad jie įsigaliotų."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ne dabar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Nėra animacinio smurto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Animaciniai personažai nesaugiose situacijose"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Animaciniai personažai agresyviame konflikte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafinis smurtas, įtraukiantis animacinius personažus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Nėra fantastinio smurto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Personažai nesaugiose, lengvai nuo realybės atskiriamose, situacijose"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Personažai agresyviame, lengvai nuo realybės atskiriamame, konflikte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafinis, lengvai nuo realybės atskiriamas, smurtas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Nėra tikroviško smurto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Švelnūs tikroviški personažai nesaugiose situacijose"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Tikroviškų personažų vaizdavimai agresyviame konflikte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafinis smurtas, įtraukiantis tikroviškus personažus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Nėra kraujo praliejimo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Netikroviškas kraujo praliejimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Tikroviškas kraujo praliejimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Kraujo praliejimo ir kūno dalių sužalojimo vaizdavimai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Nėra seksualinio smurto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Išprievartavimai ar kita smurtinė seksualinė elgsena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Nėra nuorodos į alkoholinius gėrimus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Nuorodos į alkoholinius gėrimus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Alkoholinių gėrimų vartojimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Nėra nuorodų į uždraustus narkotikus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Nuorodos į uždraustus narkotikus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uždraustų narkotikų vartojimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Nėra nuorodos į tabako gaminius"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Nuorodos į tabako gaminius"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Tabako gaminių vartojimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Nėra jokio tipo nuogumo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Trumpas meninis nuogumas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Užsitęsęs nuogumas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Nėra nuorodų į seksualinį pobūdžio vaizdavimus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokuojančios nuorodos ar vaizdavimai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksualinės nuorodos ar vaizdavimai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafinė seksualinė elgsena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Nėra jokių keiksmažodžių"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Nesmarkus ar nedažnas keiksmų naudojimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Vidutinis keiksmų naudojimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Smarkus ar dažnas keiksmų naudojimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Nėra netinkamo humoro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Papliauškų humoras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgarus ar tualeto humoras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Suaugusiųjų ar seksualinis humoras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Nėra jokio pobūdžio diskriminuojančios kalbos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Priešiškumas, nukreiptas į tam tikrą žmonių grupę"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminacija, sukurta sukelti emocinę žalą"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Atvira diskriminacija dėl lyties, rasės ar religijos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Nėra jokio pobūdžio reklamų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Produktų išdėstymas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Atviros nuorodos į tam tikrus prekės ženklus ar produktus su prekyženkliu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Naudotojai yra skatinami įsigyti tam tikrus realaus pasaulio daiktus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Nėra jokio pobūdžio azartinių lošimų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Lošimas iš atsitiktinių įvykių, naudojantis žetonais ar kreditais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Lošimai naudojant „žaidimo“ pinigus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Lošimai naudojant tikrus pinigus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Nėra galimybės išleisti pinigus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Naudotojai yra skatinami aukoti realius pinigus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Galimybė žaidime išleisti tikrus pinigus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Nėra galimybės susirašinėti su kitais žaidėjais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Žaidėjo su žaidėju sąveikos žaidime be pokalbių funkcionalumo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Prižiūrimas pokalbių funkcionalumas tarp žaidėjų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Neprižiūrimas pokalbių funkcionalumas tarp žaidėjų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Nėra galimybės kalbėti su kitais žaidėjais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Neprižiūrimas garso ir vaizdo pokalbių funkcionalumas tarp žaidėjų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Nėra dalinimosi socialinių tinklų naudotojų vardais ar el. pašto adresais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Dalinimasis socialinių tinklų naudotojų vardais ar el. pašto adresais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Nėra dalinimosi naudotojo informacija su trečiosiomis šalimis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Tikrinama, ar naujausia programos versija"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Dalinimasis diagnostikos duomenimis neleidžia kitiems identifikuoti naudotojų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Dalinimasis informacija, kuri leidžia kitiems identifikuoti naudotoją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Nėra dalinimosi savo fizine buvimo vieta su kitais naudotojais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Dalinimasis savo fizine buvimo vieta su kitais naudotojais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Nėra nuorodos į homoseksualumą"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Netiesioginės nuorodos į homoseksualumą"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Bučiniai tarp tos pačios lyties asmenų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Vazdinis seksualus elgesys tarp tos pačios lyties asmenų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Nėra nuorodų į prostituciją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Netiesioginės nuorodos į prostituciją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Tiesioginės nuorodos į prostituciją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Vaizdinis prostitucijos akto atvaizdavimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Nėra nuorodos į turinį suaugusiems"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Netiesioginės nuorodos į turinį suaugusiems"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Tiesioginės nuorodos į turinį suaugusiems"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Vaizdinis turinio suaugusiems atvaizdavimas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Nėra išreikšto seksualumo veikėjų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Mažai apsirengę žmonės/herojai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Itin seksualūs žmonės/herojai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Nėra nuorodų į išniekinimą"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Vaizdavimai arba nuorodos į istorinį išniekinimą"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Šiuolaikinio žmonių išniekinimo vaizdavimai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Šiuolaikinio žmonių išniekinimo vaizdai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Nėra matomų mirusių žmonių palaikų"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Matomi mirusių žmonių palaikai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Detaliai vaizduojami mirusių žmonių palaikai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Žmonių kūnų išniekinimo vaizdai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Nėra nuorodos į vergiją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Vaizdavimai arba nuorodos į istorinę vergiją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Šiuolaikinės vergijos vaizdavimai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Šiuolaikinės vergijos vaizdai"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Bendra"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "VISKAS"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Tik suaugusiems"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Subrendusiems"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Paaugliams"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Visiems nuo 10-ies"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Visiems"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Ankstyvai vaikystei"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Programa"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s prašo papildomo failo formato palaikymo."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Reikalingas papildomas MIME tipas"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s prašo papildomų šriftų."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Reikalingi papildomi šriftai"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s prašo papildomų daugialypės terpės kodekų."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Reikalingi papildomi daugialypės terpės kodekai"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s prašo papildomų spausdintuvo tvarkyklių."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Reikalingos papildomos spausdintuvo tvarkyklės"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s prašo papildomų paketų."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Reikalingi papildomi paketai"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Rasti programinėje įrangoje"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Šalinama…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Laukia diegimo…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Laukia atnaujinimo…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Ruošiama…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Šią programą galima naudoti tik esant aktyviam interneto ryšiui."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "Į_diegti"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "Į_diegti…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "Pa_leisti"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Pašalinti"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Tinklas"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Gali komunikuoti per tinklą"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Sistemos tarnybos"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Gali pasiekti D-Bus tarnybas sisteminėje magistralėje"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Seanso tarnybos"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Gali pasiekti D-Bus tarnybas seanso magistralėje"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Įrenginiai"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Gali pasiekti sistemos įrenginių failus"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Namų aplankas"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Gali rodyti, redaguoti arba sukurti failus"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Gali rodyti failus"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Failų sistema"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Atsisiuntimų aplankas"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Nustatymai"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Gali rodyti bei keisti bet kokius nustatymus"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Pasenusi vaizduoklio sistema"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Naudoja seną, nesaugią vaizduoklio sistemą"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Išėjimas iš dėžės"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Gali išeiti iš dėžės ir apeiti kitus ribojimus"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Ši programa yra visiškai izoliuota."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nepavyksta nustatyti, kurias sistemos dalis ši programa pasiekia. Tai "
+"įprasta senoms programoms."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Niekada"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Žema"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Vidutinė"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Aukšta"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Norėdami parašyti atsiliepimą turite prisijungti prie interneto"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nepavyko rasti „%s“"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Visuotinio naudojimo"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Laisva programinė įranga"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Naudotojams taikoma ši licencija:"
+msgstr[1] "Naudotojams taikomos šios licencijos:"
+msgstr[2] "Naudotojams taikomos šios licencijos:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Daugiau informacijos"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Detalių puslapis"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Parsiunčiama"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Atnaujinti"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Pridėti trumpinį"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Paša_linti trumpinį"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nepateikta ekrano nuotrauka"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Įtrauktas programinė įrangos šaltinis"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ši programa įtraukia programinės įrangos šaltinį, kuris pateikia "
+"atnaujinimus, taip pat leidžia prieiti prie kitos programinės įrangos."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Neįtrauktas programinės įrangos šaltinis"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ši programa neturi programinės įrangos šaltinio. Ji nebus atnaujinama į "
+"naujas versijas."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Šią programinę įrangą jau pateikia jūsų distribucija ir jos nereikėtų "
+"pakeisti."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Programinės įrangos šaltinis identifikuotas"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Šio programinės įrangos šaltinio pridėjimas suteiks jums priėjimą prie "
+"papildomos programinės įrangos ir atnaujinimų."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Naudoti tik patikimą programinę įrangą."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Tinklalapis"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Paremti"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Lokalizuota jūsų kalbai"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentacija"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Leidimo veikla"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Sistemos integracija"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Apsaugota"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanalas"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versija"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Amžiaus įvertinimas"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Leidimai"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Atnaujinta"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorija"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Dydis įdiegus"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Atsisiuntimo dydis"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Kūrėjas"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licencija"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Laisva"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Nuosavybinė"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Priedai"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Pasirinkti priedai bus įdiegti su programa."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Atsiliepimai"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Raš_yti atsiliepimą"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Rodyti daugiau"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Tai reiškia, kad programą galima laisvai vykdyti, kopijuoti, platinti, "
+"nagrinėti bei keisti."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Nuosavybinė programinė įranga"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Tai reiškia, kad programinė įranga priklauso individui ar kompanijai. "
+"Dažniausiai yra apribojimų, ką su ja galima daryti, bei dažniausiai negalima "
+"prieiti jos pradinio kodo."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Nežinoma programinės įrangos licencija"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Šios programinės įrangos licencijos sąlygos yra nežinomos."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Programa buvo taip įvertinta dėl šių priežasčių:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Nėra informacijos apie šį reitingą."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " ir "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Galimi šriftai %s scenarijui"
+msgstr[1] "Galimi šriftai %s scenarijams"
+msgstr[2] "Galimi šriftai %s scenarijų"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s prieinama programinė įranga"
+msgstr[1] "%s prieinama programinė įranga"
+msgstr[2] "%s prieinama programinė įranga"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nepavyko rasti prašomos programinės įrangos"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s nerasta"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "žiniatinklyje"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nėra programų, kurios pateikia failą %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informaciją apie %s, taip pat kaip gauti trūkstamas programas, galite rasti "
+"tinklalapyje %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nėra programų %s palaikymui."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s neprieinama."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informaciją apie %s, taip pat kaip gauti programą, kuri gali palaikyti šį "
+"formatą, galite rasti tinklalapyje %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Nėra šriftų %s scenarijaus palaikymui."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informaciją apie %s, taip pat kaip gauti papildomus šriftus, galite rasti "
+"tinklalapyje %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Nėra papildomų kodekų %s formatui."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informaciją apie %s, taip pat kaip gauti kodeką, kuris gali groti šį "
+"formatą, galite rasti tinklalapyje %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nėra Plasma išteklių %s palaikymui."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informaciją apie %s, taip pat kaip gauti papildomus Plasma išteklius, galite "
+"rasti tinklalapyje %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nėra %s prieinamų spausdintuvo tvarkyklių."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informaciją apie %s, taip pat kaip gauti tvarkyklę, kuri palaiko šį "
+"spausdintuvą, galite rasti tinklalapyje %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "šiame tinklalapyje"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Deja, jūsų ieškomos %s nepavyko rasti. Daugiau informacijos rasite %s."
+msgstr[1] ""
+"Deja, jūsų ieškomų %s nepavyko rasti. Daugiau informacijos rasite %s."
+msgstr[2] ""
+"Deja, jūsų ieškomų %s nepavyko rasti. Daugiau informacijos rasite %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Nepavyko rasti jokių rezultatų"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s failo formatas"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kodekų puslapis"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Sveiki"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Sveiki pradėję naudoti Programinę įrangą"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Programinė įranga leidžia įdiegti visą reikiamą programinę įrangą, viską "
+"vienoje vietoje. Matykite mūsų rekomendacijas, naršykite kategorijas ar "
+"ieškokite pageidaujamų programų."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Pradėkite apsipirkinėti"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Pašalinta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Įdiegta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Atnaujinta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y %e %B"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Istorija"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Sisteminės programos"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Įdiegtų puslapis"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Programinės įrangos katalogas yra siunčiamas"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Įkeliamas puslapis"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Paleidžiama…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Dabartinis tinklas yra matuojamas. Matuojami ryšiai turi duomenų ribas ir su "
+"jomis susijusias kainas. Siekiant apriboti duomenų naudojimą, automatiniai "
+"atnaujinimai buvo pristabdyti.\n"
+"\n"
+"Automatiniai atnaujinimai bus pratęsti, kai nematuojamas ryšys taps "
+"prieinamas. Iki tol galima įdiegti atnaujinimus rankiniu būdu.\n"
+"\n"
+"Taip pat, jei dabartinis tinklas buvo neteisingai identifikuotas kaip "
+"matuojamas, šį nustatymą galima pakeisti."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Atverti tinklo _nustatymus"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderuoti puslapį"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Nėra atsiliepimų, kuriuos moderuoti"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistemai"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "naudotojui"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Šaka"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formatas"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Diegimas"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Daugiau…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Rekomenduojamos garso ir vaizdo programos"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Rekomenduojami žaidimai"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Rekomenduojamos grafikos programos"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Rekomenduojamos produktyvumo programos"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Pasiekti papildomą programinę įrangą iš pažymėtų trečiųjų šalių šaltinių."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Dalis šios programinės įrangos turi naudojimo, platinimo bei prieigos prie "
+"pradinio kodo ribojimų."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Sužinokite daugiau…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Įjungti"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Apžvalgos puslapis"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Įjungti trečių šalių programinės įrangos šaltinius?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Ankstesnis"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Kitas"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Redaktoriaus pasirinkimai"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nauji leidimai"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorijos"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nerasto programos duomenų"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Paruošiama %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Ar tikrai norite pašalinti %s saugyklą?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Visos programos iš %s bus pašalintos ir turėsite vėl įdiegti saugyklą, jei "
+"norite jomis naudotis."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Ar tikrai norite pašalinti %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s bus pašalinta, norint naudotis, reikės vėl įdiegti."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (įdiegta)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Atnaujinimų nustatymai"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatiniai atnaujinimai"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatiniai atnaujinimai yra išjungti esant prisijungus prie mobilaus ar "
+"matuojamo ryšio."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Automatinių atnaujinimų pranešimai"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Rodyti pranešimus automatiškai įdiegus atnaujinimus."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Dalis šiuo metu įdiegtos programinės įrangos nėra suderinama su %s. Jei "
+"tęsite, šie paketai bus automatiškai pašalinti atnaujinant:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Nesuderinama programinė įranga"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Tęsti"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Įdiegta %u programa"
+msgstr[1] "Įdiegtos %u programos"
+msgstr[2] "Įdiegta %u programų"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Įdiegtas %u priedas"
+msgstr[1] "Įdiegti %u priedai"
+msgstr[2] "Įdiegta %u priedų"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u programa"
+msgstr[1] "%u programos"
+msgstr[2] "%u programų"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u priedas"
+msgstr[1] "%u priedai"
+msgstr[2] "%u priedų"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "Įdiegta: %s ir %s"
+msgstr[1] "Įdiegta: %s ir %s"
+msgstr[2] "Įdiegta: %s ir %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Pašalinti „%s“?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Išjungti „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programinė įranga, kuri buvo įdiegta iš šio šaltinio, nebegaus atnaujinimų, "
+"taip pat ir saugumo atnaujinimų."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Išjungti"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operacinė sistema"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Šie šaltiniai papildo numatytąjį %s pateiktą šaltinį."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Trečiųjų šalių šaltiniai"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nėra papildomų šaltinių"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "Į_jungti"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Š_alinti…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Išjungti…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Įjungiamas"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Išjungiamas"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Įjungtas"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Išjungtas"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Šlamštas"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Nepatinka"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Gera"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Patinka"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Nuostabi"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Prašome atsiliepimo rašymui skirti daugiau laiko"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Prašome pasirinkti įvertinimą žvaigždutėmis"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Santrauka pernelyg trumpa"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Santrauka pernelyg ilga"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Aprašas pernelyg trumpas"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Aprašas pernelyg ilgas"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Siųsti atsiliepimą"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "S_iųsti"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Santrauka"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Pateikite trumpą savo atsiliepimo aprašą, pavyzdžiui: \"Puiki programa, "
+"rekomenduoju\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Atsiliepimas"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Ką manote apie šią programą? Pasistenkite pateikti savo nuomonės priežastis."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Mūsų siunčiamus duomenis sužinosite perskaitę mūsų <a href=\"https://odrs."
+"gnome.org/privacy\">privatumo politiką</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "visi įvertinimai"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Jūs galite pranešti apie įžeidžiančius, nepadorius ir diskriminacinio "
+"pobūdžio atsiliepimus."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Pranešus, atsiliepimas bus paslėptas tol, kol jo nepatikrins "
+"administratorius."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Pranešti apie atsiliepimą?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Pranešti"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Ar šis atsiliepimas buvo jums naudingas?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Taip"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ne"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Šiaip sau"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Pranešti…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Šalinti…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Ekrano nuotrauka nerasta"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Nepavyko įkelti paveikslėlio"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Ekrano nuotraukos dydis nerastas"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nepavyko sukurti podėlio"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Ekrano nuotrauka netinkama"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Ekrano nuotrauka neprieinama"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Ekrano nuotrauka"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "dar %u atitikmuo"
+msgstr[1] "dar %u atitikmenys"
+msgstr[2] "dar %u atitikmenų"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Paieškos puslapis"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nerasta programų"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+"Nepavyksta parsisiųsti aparatinės programinės įrangos atnaujinimų iš %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nepavyksta parsisiųsti atnaujinimų iš %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nepavyksta parsisiųsti atnaujinimų"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nepavyksta parsisiųsti atnaujinimų: buvo reikalinga interneto prieiga, bet "
+"nebuvo prieinama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Nepavyksta parsisiųsti atnaujinimų iš %s: nepakanka disko vietos"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Nepavyksta parsisiųsti atnaujinimų: nepakanka disko vietos"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Nepavyksta parsisiųsti atnaujinimų: reikia patvirtinti tapatybę"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nepavyksta parsisiųsti atnaujinimų: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Nepavyksta parsisiųsti atnaujinimų: neturite leidimo įdiegti programinę "
+"įrangą"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nepavyko gauti atnaujinimų sąrašo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Nepavyko įdiegti %s, nes parsiuntimas iš %s nepavyko"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Nepavyko įdiegti %s, nes parsiuntimas nepavyko"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Nepavyko įdiegti %s nes vykdymo aplinka %s nėra prieinama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nepavyko įdiegti %s nes nepalaikoma"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Nepavyko įdiegti: buvo būtina interneto prieiga, bet jos nebuvo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nepavyko įdiegti: programa yra netinkamo formato"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nepavyko įdiegti %s: nepakanka disko vietos"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Nepavyko įdiegti %s: būtina patvirtinti tapatybę"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Nepavyko įdiegti %s: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Nepavyko įdiegti %s: neturite leidimo diegti programinę įrangą"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nepavyko įdiegti %s: būtinas kintamosios srovės šaltinis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Nepavyko įdiegti %s: akumuliatorius per daug išsikrovęs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nepavyko įdiegti %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Nepavyko atnaujinti %s iš %s, nes nepavyko parsisiųsti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Nepavyko atnaujinti %s, nes nepavyko parsisiųsti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Nepavyko įdiegti atnaujinimų iš %s, nes parsiuntimas nepavyko"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nepavyko įdiegti atnaujinimų, nes parsiuntimas nepavyko"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Nepavyko atnaujinti: buvo reikalinga interneto prieiga, bet nebuvo prieinama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nepavyko atnaujinti %s: nepakanka disko vietos"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nepavyko įdiegti atnaujinimų: nepakanka disko vietos"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Nepavyko atnaujinti %s: būtina patvirtinti tapatybę"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nepavyko įdiegti atnaujinimų: būtina patvirtinti tapatybę"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Nepavyko atnaujinti %s: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Nepavyko įdiegti atnaujinimų: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Nepavyko atnaujinti %s: neturite leidimo atnaujinti programinę įrangą"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nepavyko atnaujinti atnaujinimų: neturite leidimo atnaujinti programinę "
+"įrangą"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Nepavyko atnaujinti %s: būtinas kintamosios srovės šaltinis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nepavyko įdiegti atnaujinimų: būtinas kintamosios srovės šaltinis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Nepavyko atnaujinti %s: akumuliatorius per daug išsikrovęs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Nepavyko įdiegti atnaujinimų: akumuliatorius per daug išsikrovęs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nepavyko atnaujinti %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nepavyko įdiegti atnaujinimų"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nepavyko iš esmės atnaujinti %s iš %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nepavyko iš esmės atnaujinti %s, nes nepavyko parsisiųsti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nepavyko iš esmės atnaujinti į %s: buvo reikalinga interneto prieiga, bet "
+"nebuvo prieinama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nepavyko iš esmės atnaujinti į %s: nepakanka disko vietos"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nepavyko iš esmės atnaujinti į %s: būtina patvirtinti tapatybę"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Nepavyko iš esmės atnaujinti į %s: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nepavyko iš esmės atnaujinti į %s: neturite leidimo atnaujinti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nepavyko iš esmės atnaujinti į %s: būtinas kintamosios srovės šaltinis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Nepavyko iš esmės atnaujinti į %s: akumuliatorius per daug išsikrovęs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nepavyko iš esmės atnaujinti į %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Nepavyko pašalinti %s: būtina patvirtinti tapatybę"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nepavyko pašalinti %s: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Nepavyko pašalinti %s: neturite leidimo pašalinti programinę įrangą"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nepavyko pašalinti %s: būtinas kintamosios srovės šaltinis"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Nepavyko pašalinti %s: akumuliatorius per daug išsikrovęs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nepavyko pašalinti %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nepavyko paleisti %s: %s neįdiegta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Nepakanka disko vietos – atlaisvinkite vietos ir bandykite vėl"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Atleiskite, atsitiko kažkas negero"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Nepavyko įdiegti failo: nepalaikoma"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Nepavyko įdiegti failo: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Nepavyko įdiegti: nepalaikoma"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Nepavyko įdiegti: nepavyko patvirtinti tapatybės"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nepavyko susisiekti su %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Reikia perleisti %s norint naudoti naujus įskiepius."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Šią programą reikia paleisti iš naujo norint naudoti naujus įskiepius."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Būtinas kintamosios srovės šaltinis"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Akumuliatorius per daug išsikrovęs"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Šaltinis: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (diegiama)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (šalinama)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Ša_linti visus"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nėra prieinamo atnaujinimo aprašo."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Įdiegta %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Įdiegti atnaujinimai"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Pridedama"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Šalinama"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Atnaujinimai"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Grąžinama senesnė versija"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Šioje sistemoje nebuvo įdiegta atnaujinimų."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Yra saugumo atnaujinimų"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Rekomenduojama dabar įdiegti svarbius atnaujinimus"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Perleisti ir įdiegti"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Yra programinės įrangos atnaujinimų"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Svarbūs OS ir programų atnaujinimai paruošti diegimui"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Rodyti"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u programa atnaujinta – reikia paleisti iš naujo"
+msgstr[1] "%u programos atnaujintos – reikia paleisti iš naujo"
+msgstr[2] "%u programų atnaujinta – reikia paleisti iš naujo"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u programa atnaujinta"
+msgstr[1] "%u programos atnaujintos"
+msgstr[2] "%u programų atnaujinta"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s buvo atnaujinta."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Paleiskite programą iš naujo."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s ir %s buvo atnaujintos."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "Reikia iš naujo paleisti %u programą"
+msgstr[1] "Reikia iš naujo paleisti %u programas"
+msgstr[2] "Reikia iš naujo paleisti %u programų"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Įskaitant %s, %s bei %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Yra programinės įrangos atnaujinimų"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Atnaujinkite, jei norite toliau gauti saugumo spragų taisymus."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Nauja %s versija yra prieinama diegimui"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Yra programinės įrangos atnaujinimas"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Nepavyko įdiegti atnaujinimų"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Nepavyko įdiegti svarbaus OS atnaujinimo."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Rodyti detalią informaciją"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Sistemos esminis atnaujinimas baigtas"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Sveiki pradėję naudoti %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Programinės įrangos atnaujinimas įdiegtas"
+msgstr[1] "Programinės įrangos atnaujinimai įdiegti"
+msgstr[2] "Programinės įrangos atnaujinimai įdiegti"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Svarbus OS atnaujinimas įdiegtas."
+msgstr[1] "Svarbūs OS atnaujinimai įdiegti."
+msgstr[2] "Svarbūs OS atnaujinimai įdiegti."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Peržiūrėti"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Nepavyko atnaujinti"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistema jau buvo atnaujinta."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Atnaujinimas buvo nutrauktas."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Buvo būtinas tinklo ryšys, bet jis neprieinamas. Patikrinkite, ar yra "
+"interneto ryšys ir bandykite dar kartą."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Atnaujinant kilo saugumo problemų. Pasikonsultuokite su programinės įrangos "
+"tiekėju."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Nepakanka disko vietos. Atlaisvinkite vietos ir bandykite vėl."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Atsiprašome, atnaujinimo nepavyko įdiegti. Palaukite kito atnaujinimo ir "
+"bandykite vėl. Jei problema išliks, kreipkitės į programinės įrangos tiekėją."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Vakar, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Vakar, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Prieš dvi dienas"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Prieš tris dienas"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Prieš keturias dienas"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Prieš penkias dienas"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Prieš šešias dienas"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Prieš savaitę"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Prieš dvi savaites"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Ieškoma naujų atnaujinimų…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Nustatomi atnaujinimai…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Tai gali užtrukti)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Paskutinį kartą tikrinta: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s daugiau nebepalaikoma."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Jūsų OS daugiau nebepalaikoma."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Tai reiškia, kad daugiau nebegausite saugumo spragų taisymų."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Rekomenduojama dabar atsinaujinti į paskutinę versiją."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Tai gali kainuoti"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Atnaujinimų tikrinimas naudojant mobilų plačiajuostį ryšį gali kainuoti."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Vistiek tikrinti"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nėra tinklo"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Atnaujinimų tikrinimui reikalingas tinklo ryšys."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Tikrinama…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Tikrinti, ar yra atnaujinimų"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Atnaujinimų puslapis"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Programinė įranga yra naujausia"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Atnaujinimų tikrinimas naudojant mobilųjį plačiajuostį ryšį gali kainuoti"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Vistiek tikrinti"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Prisijungti ir tikrinti, ar yra atnaujinimų"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Tinklo _nustatymai"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Atnaujinimai tvarkomi automatiškai"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Perleisti ir atnaujinti"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Atnaujinti viską"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integruota aparatinė programinė įranga"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Reikia perleisti"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Programos atnaujinimai"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Įrenginio aparatinė programinė įranga"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Atsisiųsti"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Prieš atnaujinant, yra rekomenduojama pasidaryti savo duomenų ir failų "
+"atsarginę kopiją."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Pe_rleisti dabar"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Atnaujinimai bus pritaikyti, kai kompiuteris bus paleistas iš naujo."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Dabar prieinama %s %s"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Laukiama atsisiuntimo %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Atsiunčiama %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s yra paruošta įdiegimui"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+"Didesnis atnaujinimas su naujomis ypatybėmis ir pridėtomis įmantrybėmis."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Sužinoti daugiau"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Pridėti, šalinti arba atnaujinti šio kompiuterio programinę įrangą"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Atnaujinimai;Šaltiniai;Saugyklos;Nuostatos;Įdiegti;Išdiegti;Programa;"
+"Programinė;Įranga;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Garso kūrimo ir redagavimo"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Muzikos grotuvai"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Derintuvės"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Integruotos aplinkos"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Dirbtinis intelektas"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemija"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Kalbos"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Veiksmo"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Nuotykių"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkada"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokai"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Stalo"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kortų"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuliatoriai"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Vaikams"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rolių"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sportas"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategija"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografija"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skenavimas"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorinė grafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Žiūryklės"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendoriai"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Duomenų bazės"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finansų"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Teksto procesoriai"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Šriftai"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodekai"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Įvesties šaltiniai"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Kalbų paketai"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalizacija"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Aparatūros tvarkyklės"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Pokalbiai"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Naujienos"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Žiniatinklio naršyklės"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Tekstų redaktoriai"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Visos"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Siūlomos"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Meno"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografija"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komiksai"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Veiksmo"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Sveikata"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Istorija"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Gyvenimo būdas"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sportas"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Garsas ir vaizdas"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Kūrėjo įrankiai"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Mokomoji ir mokslinė"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Žaidimai"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika ir fotografija"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktyvumas"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikacija ir naujienos"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Rodyklė"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Priemonės"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "OS atnaujinimai"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Turi našumo, stabilumo bei saugumo patobulinimus."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Parsiunčiami siūlomų programų paveikslėliai…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS atnaujinimas su naujomis ypatybėmis ir taisymais."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS atnaujinimo tarnybai nepavyko gauti ir pritaikyti atnaujinimo."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Programinės įrangos AppStream sisteminė diegtuvė"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Nepavyko perskaityti komandų eilutės argumentų"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Reikia nurodyti vienintelį failą"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Šią programą gali naudoti tik root naudotojas"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Nepavyko patikrinti turinio tipo"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Nepavyko nukopijuoti"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Parsiunčiami papildomi metaduomenų failai…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Parsiunčiami atnaujinimo informacija…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "Atnaujinkite ir gaukite naujausias savybes bei patobulinimus."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak palaikymas"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak yra karkasas, skirtas darbalaukio programoms Linux sistemose"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Gaunami %s flatpak metaduomenys…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s įrenginio atnaujinimas"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s sistemos atnaujinimas"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s integruoto valdiklio atnaujinimas"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s ME atnaujinimas"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s korporacijos ME atnaujinimas"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s naudotojo ME atnaujinimas"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s valdiklio atnaujinimas"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt valdiklio atnaujinimas"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU mikrokodo atnaujinimas"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%s Controller Update"
+msgid "%s Configuration Update"
+msgstr "%s konfigūracijos atnaujinimas"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Parsiunčiamas aparatinės programinės įrangos atnaujinimo parašas…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Parsiunčiami aparatinės programinės įrangos atnaujinimo metaduomenys…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Programinės aparatinės įrangos naujinimo palaikymas"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Pateikia palaikymą, skirtą programinės aparatinės įrangos naujinimams"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Parsiunčiami programų reitingai…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Atvirojo darbalaukio įvertinimų palaikymas (ODRS)"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS yra paslauga, pateikianti naudotojų įvertinimus apie programas"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap parduotuvė"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap palaikymas"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap yra universalus Linux paketas"
+
+#~ msgid "About %s"
+#~ msgstr "Apie %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Rodyti aplanko valdymo sąsają"
+
+#~ msgid "Folder Name"
+#~ msgstr "Aplanko pavadinimas"
+
+#~ msgid "_Add"
+#~ msgstr "_Pridėti"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Pridėti programų aplanką"
+
+#~ msgid "Top Rated"
+#~ msgstr "Geriausiai įvertintos"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Plėtinio nustatymai"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Plėtiniai yra naudojami jūsų pačių rizika. Jeigu susidūrėte su sistemos "
+#~ "problemomis, yra rekomenduojama juos išjungti."
+
+#~| msgid "Failed to load image"
+#~ msgid "Failed to load components"
+#~ msgstr "Nepavyko įkelti komponentų"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS patikrinimas sėkmingas!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Nepavyko įkelti failo"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Neįrašyti pakeitimai"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Programų sąrašas jau įkeltas."
+
+#~ msgid "Merge documents"
+#~ msgstr "Sulieti dokumentus"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Išmesti pakeitimus"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Atverti AppStream failą"
+
+#~ msgid "_Open"
+#~ msgstr "_Atverti"
+
+#~| msgid "Open AppStream File"
+#~ msgid "Save AppStream File"
+#~ msgstr "Įrašyti AppStream failą"
+
+#~ msgid "_Save"
+#~ msgstr "Į_rašyti"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Nepavyko įrašyti failo"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s reklamjuostė ištrinta."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Reklamjuostė ištrinta."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Programų sąraše yra neįrašytų pakeitimų."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Vesti išsamų žurnalą"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME programinės įrangos reklamjuosčių kūrėjas"
+
+#~ msgid "No Designs"
+#~ msgstr "Nėra reklamjuosčių"
+
+#~ msgid "Error message here"
+#~ msgstr "Čia pranešimas apie klaidą"
+
+#~ msgid "App ID"
+#~ msgstr "Programos ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Redaktoriaus pasirinkimai"
+
+#~ msgid "Category Featured"
+#~ msgstr "Siūlomų kategorijoje"
+
+#~ msgid "Undo"
+#~ msgstr "Atšaukti"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Reklamjuosčių kūrėjas"
+
+#~ msgid "New Banner"
+#~ msgstr "Nauja reklamjuostė"
+
+#~ msgid "Import from file"
+#~ msgstr "Importuoti iš failo"
+
+#~ msgid "Export to file"
+#~ msgstr "Eksportuoti į failą"
+
+#~ msgid "Delete Design"
+#~ msgstr "Ištrinti reklamjuostę"
+
+#~ msgid "Featured App"
+#~ msgstr "Siūloma programa"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "OS atnaujinimas"
+
+#~ msgid "Spacing"
+#~ msgstr "Tarpai"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Tarpas tarp vaikų"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Spauskite elementui pažymėti"
+
+#~ msgid "Select"
+#~ msgstr "Žymėti"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Pridėti į aplanką…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "Per_kelti į aplanką…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Paša_linti iš aplanko"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Įtrauktos programos"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Kurkite GNOME programinėje įrangoje siūlomų programų reklamjuostes"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Programinė įranga;Programa;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Apvalkalo plėtiniai"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Žiniatinklio programų palaikymas"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Vykdyti populiarias žiniatinklio programas naršyklėje"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME apvalkalo plėtinių saugykla"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Parsiunčiami apvalkalo plėtinių metaduomenys…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Apvalkalo plėtiniai"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Viskas"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Prisijungti / prisiregistruoti…"
+
+#~ msgid "Continue"
+#~ msgstr "Tęsti"
+
+#~ msgid "Use"
+#~ msgstr "Naudoti"
+
+#~ msgid "Add another…"
+#~ msgstr "Pridėti kitą…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Įkeliamas programinės įrangos katalogas"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Ar tikrai norite įsigyti %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s bus įdiegta, o jums teks sumokėti %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Pirkti"
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2f A$"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2f C$"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2f CN¥"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f €"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f £"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f ¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2f NZ$"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f ₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2f US$"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Prisijungta naudotoju %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Prisijungiama…"
+
+#~ msgid "Sign out"
+#~ msgstr "Atsijungti"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Nepavyko įsigyti %s: reikėjo patvirtinti tapatybę"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Nepavyko įsigyti %s: tapatybės patvirtinimas buvo neteisingas"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Nepavyko įsigyti %s: nėra mokėjimo būdo sąrankos"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Nepavyko įsigyti %s: mokėjimas buvo atmestas"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Nepavyko įsigyti %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Norėdami tęsti, turite naudoti Ubuntu One paskyrą."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Norėdami tęsti, turite naudoti savo Ubuntu One paskyrą."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Norėdami tęsti, turite prisijungti prie %s."
+
+#~ msgid "Email address"
+#~ msgstr "El. pašto adresas"
+
+#~ msgid "I have an account already"
+#~ msgstr "Jau turiu paskyrą"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Noriu dabar registruoti paskyrą"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Pamiršau savo slaptažodį"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Automatiškai prisijungti kitą kartą"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Įveskite vienkartinį PIN dviejų žingsnių tapatybės patvirtinimui."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Patvirtinti tapatybę"
+
+#~ msgid "_About"
+#~ msgstr "_Apie"
+
+#~ msgid "_Quit"
+#~ msgstr "_Išeiti"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informaciją apie %s, taip pat kaip gauti kodeką, kuris gali groti šį "
+#~ "formatą, galite rasti tinklalapyje."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Jūsų %s paskyros galiojimas sustabdytas."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Neįmanoma diegti programinės įrangos iki tai bus išspręsta."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Daugiau informacijos rasite apsilankę %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Nepavyko atnaujinti %s iš %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Parsiunčiami nauji atnaujinimai…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Parsiunčiamas programos puslapis…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam palaikymas"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Didžiausia pramogų platforma iš Valve"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Rodyti tarnybos profiliavimo informaciją"
+
+#~| msgid "Application Updates"
+#~ msgid "Applications Updated"
+#~ msgstr "Programos atnaujinimai"
+
+#~ msgid "Includes: ."
+#~ msgstr "Įskaitant: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Pe_rleisti ir įdiegti"
+
+#~ msgid "U_pdate All"
+#~ msgstr "_Atnaujinti viską"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Perleisti ir į_diegti"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Gaunamas vykdymo aplinkos šaltinis…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Parsiunčiamas aparatinės programinės įrangos atnaujinimas…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba palaikymas"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba pateikia kūrėjams būdą lengvai kurti programinės įrangos rinkinius"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Rikiuojama pagal pavadinimą"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Rikiuojama pagal įvertinimą"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Anksčiau įjungtų, papildomų šaltinių sąrašas"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Šaltinių, kurie buvo anksčiau įjungti įdiegiant trečiųjų šalių programas, "
+#~ "sąrašas."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Rodyti ne laisvą programinę įrangą paieškos rezultatuose"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Papildomų ne laisvų šaltinių, kuriuos galima įjungti, sąrašas"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Pateikia prieiga prie papildomos programinės įrangos, įskaitant "
+#~ "žiniatinklio naršykles bei žaidimus."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Įjungti nuosavybinės programinės įrangos šaltinius?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Nebuvo įdiegta programų ar priedų; gali būti kitos programinės įrangos"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Įprastai turi naudojimo ir prieigos prie pradinio kodo ribojimų."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Nuosavybinės programinės įrangos šaltiniai"
+
+#~ msgid "Remove Source"
+#~ msgstr "Pašalinti šaltinį"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Programinės įrangos šaltinius galima parsisiųsti iš interneto. Jie "
+#~ "suteiks jums priėjimą prie papildomos programinės įrangos, kurios "
+#~ "neteikia %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Šaltinio pašalinimas taip pat pašalins visą iš jo įdiegtą programinę "
+#~ "įrangą."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nėra iš šio šaltinio įdiegtos programinės įrangos"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Įdiegta iš šio šaltinio"
+
+#~ msgid "Source Details"
+#~ msgstr "Šaltinio detali informacija"
+
+#~ msgid "Last Checked"
+#~ msgstr "Paskutinį kartą tikrinta"
+
+#~ msgid "Added"
+#~ msgstr "Pridėta"
+
+#~ msgid "Website"
+#~ msgstr "Tinklalapis"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Žaidėjo su žaidėju iš anksto nustatytos sąveikos be pokalbių funkcionalumo"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Dalinimasis naudotojo informacija su trečiosiomis šalimis"
+
+#~ msgid "page1"
+#~ msgstr "puslapis1"
+
+#~ msgid "page2"
+#~ msgstr "puslapis2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "„%s“ [%s]"
+
+#~ msgid "Total"
+#~ msgstr "Viso"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Nepavyko rasti „%s“"
+
+#~ msgid "Other Updates"
+#~ msgstr "Kiti atnaujinimai"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Visos"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Siūlomos"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chemija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgid "Science"
+#~ msgstr "Mokslas"
+
+#~ msgid "_Install All"
+#~ msgstr "Įdiegti _viską"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Nepavyko įdiegti %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Nepavyko pašalinti %s."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Patikrinkite, ar yra interneto ryšys ir bandykite dar kartą."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Atlaisvinkite vietos ir bandykite vėl."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Jei problema išliks, kreipkitės į savo programinės įrangos tiekėją."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr ""
+#~ "Programinės įrangos šaltiniai suteikia priėjimą prie papildomos "
+#~ "programinės įrangos."
+
+#~ msgid " or "
+#~ msgstr " arba "
+
+#~ msgid "3rd party"
+#~ msgstr "Trečiosios šalies"
+
+#~ msgid "web app"
+#~ msgstr "internetinė programa"
+
+#~ msgid "nonfree"
+#~ msgstr "nelaisva"
+
+#~ msgid "shell extension"
+#~ msgstr "apvalkalo plėtinys"
+
+#~ msgid "_Installing"
+#~ msgstr "_Diegiama"
+
+#~ msgid "_Removing"
+#~ msgstr "Š_alinama"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Nežinoma"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Nėra"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Ši programinė įranga yra pateikiama trečiųjų šalių."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Ši programinė įranga yra pateikiama trečiųjų šalių ir joje gali būti "
+#~ "nelaisvųjų komponentų."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Šioje programinėje įrangoje gali būti nelaisvųjų komponentų."
+
+#~ msgid "non-free"
+#~ msgstr "nelaisva"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Rekomenduojamos raštinės programos"
+
+#~ msgid "One Star"
+#~ msgstr "Viena žvaigždutė"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dvi žvaigždutės"
+
+#~ msgid "Three Stars"
+#~ msgstr "Trys žvaigždutės"
+
+#~ msgid "Four Stars"
+#~ msgstr "Keturios žvaigždutės"
+
+#~ msgid "Five Stars"
+#~ msgstr "Penkios žvaigždutės"
+
+#~ msgid "Audio"
+#~ msgstr "Garsas"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Redagavimas"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Duomenų bazės"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Diskų kūrimas"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Jam radijas"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mikseris"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Muzika"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Įrašymo programos"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Grotuvai"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Reguliatoriai"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Kūrimas"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Duomenų bazės"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profiliavimas"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Projektų tvarkymas"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Vertimai"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Žiniatinklio kūrimas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Kompiuterių mokslas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Statyba"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Duomenų vizualizacija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektros grandinės"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inžinerija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geomokslas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Istorija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanitariniai"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Paveikslėlių apdorojimas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatūra"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Žemėlapiai"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Muzika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Skaitiniai metodai"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Lygiagretūs skaičiavimai"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Dvasiniai dalykai"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Šaudyklės"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simuliatoriai"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sporto"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Žiniasklaida"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rastrinė grafika"
+
+#~ msgid "Internet"
+#~ msgstr "Internetas"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Prisijungimas"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "El. paštas"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Sklaidos kanalai"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Failų perdavimas"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham radijas"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Tiesioginiai pranešimai"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC klientai"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitorius"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Nuotolinė prieiga"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonija"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Žiniatinklio kūrimas"
+
+#~ msgid "Office"
+#~ msgstr "Ofisas"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagrama"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Kontaktų tvarkymas"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Žodynas"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "El. paštas"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Tėkmės diagrama"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Delninukas"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografija"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Pateiktis"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projektų tvarkymas"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Žiniasklaida"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Skaičiuoklė"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Žiūryklė"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Menas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Dirbtinis intelektas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chemija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Kompiuterių mokslas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Statyba"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Duomenų vizualizacija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektros grandinės"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inžinerija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geomokslas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Istorija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanitariniai mokslai"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Paveikslėlių apdorojimas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Kalbos"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatūra"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Žemėlapiai"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Skaitiniai metodai"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Lygiagretūs skaičiavimai"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Dvasiniai dalykai"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sportas"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emuliatorius"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Failų tvarkytuvė"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Failų įrankiai"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitorius"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Saugumas"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Terminalo emuliatorius"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Prieiga"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Archyvavimas"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Skaičiuotuvas"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Laikrodis"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Suspaudimas"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Failų įrankiai"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Žemėlapiai"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Dvasiniai dalykai"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefonijos įrankiai"
+
+#~ msgid "Video"
+#~ msgstr "Vaizdas"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Redagavimas"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Duomenų bazė"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Diskų kūrimas"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Grotuvai"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Įrašymo programos"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Skaičiuojama…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Nežinoma"
+
+#~ msgid "_History"
+#~ msgstr "_Istorija"
+
+#~ msgid "Size"
+#~ msgstr "Dydis"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Nerasta AppStream duomenų"
+
+#~ msgid "Depictions of or dialog including slapstick humor"
+#~ msgstr "Vaizdavimai ar dialogai, kuriuose yra papliauškų (slapstick) humoro"
+
+#~ msgid "Depictions of or dialog including vulgar humor; bathroom humor"
+#~ msgstr ""
+#~ "Vaizdavimai ar dialogai, kuriuose yra vulgaraus humoro; tualeto humoro"
+
+#~ msgid "Depictions of or dialog including mature humor; sexual humor"
+#~ msgstr ""
+#~ "Vaizdavimai ar dialogai, kuriuose yra suaugusiųjų humoro; seksualinio "
+#~ "humoro"
+
+#~ msgid ""
+#~ "Player-to-player scripted interactions (e.g. giving an axe for a quest) "
+#~ "without chat functionality"
+#~ msgstr ""
+#~ "Scenarizuotos žaidėjo su žaidėju sąveikos (pvz., kirvio perdavimas "
+#~ "užduočiai atlikti) be pokalbių funkcionalumo"
+
+#~ msgid ""
+#~ "Ability to share Twitter, Facebook or email addresses to other players"
+#~ msgstr ""
+#~ "Galimybė dalintis savo Twitter, Facebook ar el. pašto adresais su kitais "
+#~ "žaidėjais"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Ankstesnis atnaujinimas nebuvo baigtas."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Atnaujinimo nepavyko įdiegti; tai dažniausiai yra problema su pačiu "
+#~ "atnaujinimu. Palaukite kito atnaujinimo ir bandykite vėl."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Interneto reikalaujanti programa"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Įveskite GApplication tarnybos veikseną"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Atnaujinimas nebuvo tvarkingai pasirašytas."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Atnaujinimo nepavyko užbaigti."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "Atnaujinimas atsijungus buvo prašytas, bet nėra atnaujinamų paketų."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Diske neliko vietos."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Atnaujinimo nepavyko tvarkingai įdiegti."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Atnaujinimas atsijungus nepavyko netikėtu būdu."
+
+#~ msgid "OK"
+#~ msgstr "Gerai"
+
+#~ msgid "No sources found."
+#~ msgstr "Nerasta šaltinių."
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "Įdiegta %i programa(-os) ir %i priedas(-ai)"
+#~ msgstr[1] "Įdiegta %i programa(-os) ir %i priedas(-ai)"
+#~ msgstr[2] "Įdiegta %i programa(-os) ir %i priedas(-ai)"
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 0000000..a1808af
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,4741 @@
+# This file is distributed under the same license as the gnome-software package.
+#
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-13 10:33+0300\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
+"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 :"
+" 2);\n"
+"X-Generator: Lokalize 19.12.3\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME programmatūra"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME lietotņu pārvaldnieks"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"“Programmatūra” jums ļauj atrast un instalēt jaunas lietotnes un sistēmas "
+"paplašinājumus, kā arī izņemt jau instalētās lietotnes."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME “Programmatūra” rāda izceltās un populārās lietotnes, ar noderīgiem "
+"aprakstiem un vairākiem ekrānattēliem uz lietotni. Lietotnes var atrast vai "
+"nu pārlūkojot kategoriju sarakstu, vai arī meklējot. Tā jums ļauj arī atrast "
+"sistēmas atjauninājumus, izmantojot nesaistes atjaunināšanu."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Pārskata rūts"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Sīkākas informācijas rūts"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Instalēto lietotņu rūts"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Atjauninājumu rūts"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Atjauninājumu informācija"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "GNOME projekts"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalēt appstream datni sistēmas atrašanās vietā"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalē appstream datni sistēmas atrašanās vietā"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Saraksts ar savietojamiem projektiem"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Šis ir saraksts ar savietojamiem projektiem, ko rādīt, piemēram GNOME, KDE "
+"un XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Vai pārvaldīt atjauninājumus un uzlabojumus “GNOME programmatūrā”"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Ja izslēgts, “GNOME Programmatūra” paslēps atjauninājumu paneli, neizpildīs "
+"nekādas automātiskās atjaunināšanas darbības un neprasīs atjaunināt."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automātiski lejupielādēt un instalēt atjauninājumus"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Ja ieslēgts, “GNOME programmatūra” fonā automātiski lejupielādēs "
+"atjauninājumus un instalēs tos, kuriem nav nepieciešama pārstartēšana."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Ziņot lietotājam par fonā atjaunināto programmatūru"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Ja ieslēgts, “GNOME programmatūra” lietotājam ziņos par atjauninājumiem, "
+"kamēr lietotājs nav aktīvs."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Vai automātiski atsvaidzināt, kad ir uz savienojuma ar mērītāju"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Ja ieslēgts, “GNOME Programmatūra” automātiski atsvaidzina fonu, pat ja "
+"lieto savienojumu ar skaitītāju (dažkārt lejupielādējot kādus metadatus, "
+"pārbaudot atjauninājumus utt., kas var novest pie izmaksām lietotājam)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Vai šī ir pirmā “GNOME programmatūras” palaišanas reize"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Pie lietotnēm rādīt vērtējumu"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtrēt lietotnes, balstoties uz noklusējuma zara kopu attālinātajam"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Ne-brīvas lietotnes pirms instalēšanas rāda brīdinājuma dialoglodziņu"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Kad instalē nebrīvu lietotni, tiek rādīts brīdinājuma dialoglodziņš. Šis "
+"nosaka, vai dialoglodziņu nerādīt."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Populāru lietotņu saraksts"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Saraksts ar lietotnēm, ko izmantot. Pārraksta sistēmas noteiktās."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Pēdējās atjauninājumu pārbaudīšanas laika spiedogs"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Pēdējā uzlabošanas paziņojuma laika spiedogs"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Laika spiedogs pirmajam drošības atjauninājumam, pēc atjaunināšanas tiek "
+"attīrīts"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Pēdējais atjauninājuma laika spiedogs"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Pēdējais laika spiedogs, kad sistēma bija tiešsaistē un saņēma kādus"
+" atjauninājumus"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Vecums sekundēs, lai pārbaudītu, vai augšteces ekrānattēls joprojām ir derīgs"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Lielākas vērtības izvēlēšanās nozīmē mazāk apkārtceļošanas uz attālināto "
+"serveri, bet ekrānuzņēmumumu atjaunināšana var aizņemt ilgāku laiku, līdz "
+"tie parādās lietotājam. Vērtība 0 nozīmē nekad nepārbaudīt serverī, ja "
+"attēls jau ir kešatmiņā."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Serveris, ko izmantot lietotņu recenzijām"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Recenziju minimālais karmas reitings"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Netiks rādītas recenzijas, kurām karma ir mazāka par šo skaitli."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Saraksts ar oficiālajām krātuvēm, kuras nevajadzētu uzskatīt par trešās "
+"puses krātuvēm"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Saraksts ar oficiālajām krātuvēm, kuras vajadzētu uzskatīt par brīvo "
+"programmatūru"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Licences URL, ko izmantot, kad lietotni jāuzskata par brīvu programmatūru"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Ja iespējams, instalēt sakopotās lietotnes visiem sistēmas lietotājiem"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Ļaut piekļūt programmatūras krātuvju dialoglodziņam"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Piedāvāt uzlabojumus testa laidieniem"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Rādīt dažus UI elementus, kas informē lietotāju, ka lietotne nav brīva"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Rādīt uzvedni, lai instalētu nebrīvās programmatūras krātuves"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Instalēto lietotņu sarakstā rādīt lietotņu aizņemto vietu uz diska"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI, kur izskaidro nebrīvu un īpašnieku programmatūru"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Saraksts ar URL, kas norāda uz appstream datnēm, kuras tiks lejupielādētas "
+"app-info mapē"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Instalēt AppStream datnes sistēmas atrašanās vietā visiem lietotājiem"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Ieslēgt GNOME čaulas paplašinājumu krātuvi"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Virkne, kurā ir gnome-online-account id, kuru izmanto, lai ierakstītos"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Programmatūras instalēšana"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalēt izvēlēto programmatūru sistēmā"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Izvēlēties visu"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Neizvēlēties nevienu"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Programmatūra_s krātuves"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Atja_unināšanas iestatījumi"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programmatūra"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Iet atpakaļ"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Pārskatīt"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalētās"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Atjauninājumi"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Meklēt"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Avots"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Programmatūras krātuves"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Pārbaudīt disku"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Tīkla iestatījumi"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Pārstartēt tagad"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Vairāk informācijas"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+#| msgid "Automatic Updates"
+msgid "Automatic Updates Paused"
+msgstr "Automātiska atjaunināšana ir pauzēta"
+
+#: src/gnome-software.ui:480
+#| msgid "Find out more…"
+msgid "Find Out _More"
+msgstr "Uzzināt _vairāk"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokālā datne"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pakotne"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Gaida"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalēts"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalē"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Izņem"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Ieslēgšanās režīms: var būt “updates”, “updated”, “installed” vai “overview”"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "REŽĪMS"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Meklēt lietotnes"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "MEKLĒT"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Rādīt informāciju par lietotni (izmantojot lietotnes ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Rādīt informāciju par lietotni (izmantojot pakotes nosaukumu)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNOSAUKUMS"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instalēt lietotni (izmantojot lietotnes ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Atvērt lokālas pakotnes datni"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "DATNES_NOSAUKUMS"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Mijiedarbības veids, sagaidīts šai darbībai: vai nu “neviens”, “paziņot” vai "
+"arī “pilns”"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Rādīt izvērstu atkļūdošanas informāciju"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Fonā instalē rindā esošos atjauninājumus"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Rādīt atjaunināšanas iestatījumus"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Iziet no strādājošas instances"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Dot priekšroku lokālo datņu avotiem, nevis AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Rādīt versijas numuru"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+#| msgid "Software"
+msgid "About Software"
+msgstr "Par “Programmatūru”"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Labs veids, kā pārvaldīt programmatūru uz sava datora."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+#| msgid "Please restart the application."
+msgid "Sorry! There are no details for that application."
+msgstr "Atvainojiet, bet par šo lietotni nav papildu informācijas."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Apmeklēt tīmekļa vietni"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalēt…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Atcelt"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalēt"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Atjaunināt"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Izņemt"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Uzlabošanas laikā nevar izmantot ierīci"
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Nepieciešamas papildu atļaujas"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Attālinātajam %s vajag ierakstīties (apgabals %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+#| msgid "Restart Required"
+msgid "Login Required"
+msgstr "Nepieciešama ierakstīšanās"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "At_celt"
+
+#: src/gs-basic-auth-dialog.ui:39
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "_Ierakstīties"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Lietotājs"
+
+#: src/gs-basic-auth-dialog.ui:119
+#| msgid "Password"
+msgid "_Password"
+msgstr "_Parole"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Citas"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Visi"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Piedāvājums “%s”"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Vērtējums"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nosaukums"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Rādīt"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Apakškategoriju filtru izvēlne"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Kārtot"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Apakškategoriju kārtošanas izvēlne"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Lūdzu, ievadiet skaitli no 1 līdz %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Izvēlieties lietotni:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS atjauninājumi tagad ir uzinstalēti"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nesen instalētie atjauninājumi ir pieejami atsauksmju izteikšanai"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s tagad ir instalēts"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Nepieciešama pārstartēšana, lai izmaiņas stātos spēkā."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Lietotne ir gatava lietošanai."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Pārstartēt"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Palaist"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalēt trešās puses programmatūru?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Ieslēgt trešās puses programmatūras krātuves?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nav <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">brīva un atvērta programmatūra</a>, un to nodrošina “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s nodrošina “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Jāieslēdz šīs programmatūras krātuves, lai varētu turpināt instalēšanu."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "%s instalēšana vai izmantošana dažās valstīs varētu būt nelegāla."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Šī kodeka instalēšana vai izmantošana dažās valstīs varētu būt nelegāla."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Vairs nebrīdināt"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Ieslēgt un instalēt"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Seko detalizēta informācija par kļūdām no pakotņu pārvaldnieka:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Sīkāka informācija"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+#| msgid "Updates have been installed"
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Atjauninājums tika uzinstalēts"
+msgstr[1] "Atjauninājumi tika uzinstalēti"
+msgstr[2] "Atjauninājumi tika uzinstalēti"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Nepieciešama pārstartēšana, lai tas stātos spēkā."
+msgstr[1] "Nepieciešama pārstartēšana, lai tie stātos spēkā."
+msgstr[2] "Nepieciešama pārstartēšana, lai tie stātos spēkā."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ne tagad"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Nav multeņu vardarbības"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Multeņu tēli nedrošās situācijās"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Multeņu tēli agresīvā konfliktā"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafiska vardarbība, kur iesaistīti multeņu tēli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Nav fantāzijas vardarbības"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Tēli nedrošās situācijās, ko viegli atšķirt no realitātes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Tēli agresīvā konfliktā, ko viegli atšķirt no realitātes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafiska vardarbība, ko viegli atšķirt no realitātes"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Nav reālistiskas vardarbības"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Nedaudz reālistiski tēli nedrošās situācijās"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Ataino reālistiskus tēlus agresīvā konfliktā"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafiska vardarbība, kur iesaistīti reālistiski tēli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Nav asinsizliešanas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Nereālistiska asinsizliešana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Reālistiska asinsizliešana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Ataino asinsizliešanu un ķermeņu daļu kropļošanu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Nav seksuālas vardarbības"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Izvarošana un cita vardarbīga seksuāla uzvedība"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Nav norāžu uz alkoholiskiem dzērieniem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Norādes uz alkoholiskiem dzērieniem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Alkoholisku dzērienu lietošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Nav norāžu uz nelegālām narkotikām"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Norādes uz nelegālām narkotikām"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Nelegālu narkotiku lietošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+#| msgid "References to tobacco products"
+msgid "No references to tobacco products"
+msgstr "Nav norāžu uz tabakas produktiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Norādes uz tabakas produktiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Tabakas produktu izmantošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Nav nekāda veida kailuma"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Īss māksliniecisks kailums"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Ilglaicīgs kailums"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Nav seksuālas dabas norādes vai atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provocējošas norādes vai atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksuālas norādes vai atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafiska seksuāla uzvedība"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Nav nekāda veida lādēšanās"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Neliela vai reta rupjību lietošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Mērena rupjību lietošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Stipra vai bieža rupjību lietošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Nav nepiedienīga humora"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Farsa humors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgārs vai atejas humors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Pieaugušo vai seksuāls humors"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Nav nekāda veida diskriminējošas valodas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativitāte pret noteiktu cilvēku grupu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminācija, kas paredzēta emocionāla kaitējuma izraisīšanai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Eksplicīta dzimuma, seksualitātes, rases vai reliģijas diskriminācija"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Nav nekāda veida reklāmu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Produktu izvietošana"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Atklātas norādes uz noteikiem zīmoliem vai preču zīmju produktiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Lietotāji tiek iedrošināti iegādāties noteiktas reālās pasaules preces"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Nav nekāda veida derības"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Likt derības uz nejaušiem notikumiem, izmantojot žetonus vai kredītus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Likt derības ar “spēļu” naudu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Likt derības ar īstu naudu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Nav iespējas tērēt naudu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Lietotāji tiek iedrošināti ziedot īstu naudu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Iespēja lietotnē tērēt īstu naudu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Nav tērzēšanas iespējas ar citiem lietotājiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Lietotāju savstarpēja mijiedarbība bez tērzēšanas iespējām"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderēta tērzēšanas iespēja starp lietotājiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nekontrolēta tērzēšanas iespēja starp lietotājiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Nav sarunāšanās iespējas ar citiem lietotājiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nekontrolēta audio un video tērzēšanas iespēja starp lietotājiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Nav dalīšanās ar sociālo tīklu lietotājvārdiem vai e-pasta adresēm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Dalās ar sociālo tīklu lietotājvārdiem vai e-pasta adresēm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Nav dalīšanās ar lietotāju informāciju ar trešajām pusēm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Pārbauda, vai ir jaunāka lietotnes versija"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Dalās ar diagnostikas datiem, kas neļauj citiem identificēt lietotāju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Dalās informāciju, kas ļauj citiem identificēt lietotāju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Nav dalīšanās ar fizisko atrašanās vietu ar citiem lietotājiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Dalās ar citiem lietotājiem ar fizisko atrašanās vietu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Nav norāžu uz homoseksualitāti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Netiešas norādes uz homoseksualitāti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Skūpstīšanās starp viena dzimuma cilvēkiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafiska seksuāla uzvedība starp viena dzimuma cilvēkiem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Nav norāžu uz prostitūciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Netiešas norādes uz prostitūciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Tiešas norādes uz prostitūciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafisks prostitūcijas akta atainojums"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Nav norāžu uz laulības pārkāpšanu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Netiešas norādes uz laulības pārkāpšanu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Tiešas norādes uz laulības pārkāpšanu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafisks laulības pārkāpšanas akta atainojums"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Nav seksualizētu tēlu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Daļēji apģērbti cilvēku tēli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Atklāti seksualizēti cilvēki tēli"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Nav norāžu uz apgānīšanu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Apraksti vai norādes uz vēsturisku apgānīšanu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Mūsdienu apgānīšanas atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafiski mūsdienu apgānīšanas atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Nav redzamu cilvēku mirstīgo atlieku"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Redzamas cilvēku mirstīgās atliekas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Cilvēku mirstīgās atliekas skarbos vides apstākļos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafiski cilvēku ķermeņu apgānīšanas atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Nav norāžu uz verdzību"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Apraksti vai norādes uz vēsturisku verdzību"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Mūsdienu verdzības atainojumi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafiski mūsdienu verdzības atainojumi"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Vispārīgi"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Visiem"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Tikai pieaugušajiem"
+
+#: src/gs-content-rating.c:561
+#| msgid "Featured"
+msgid "Mature"
+msgstr "Pieaugušajiem"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Pusaudžiem"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Ikvienam 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Ikvienam"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Agrā bērnībā"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Lietotne"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s pieprasa papildu datņu formātu atbalstu."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Nepieciešami papildu MIME tipi"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s pieprasa papildu fontus."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Nepieciešami papildu fonti"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s pieprasa papildu multimediju kodekus."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Nepieciešami papildu multimediju kodeki"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s pieprasa papildu printeru draiverus."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Nepieciešami printeru draiveri"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s pieprasa papildu pakotnes."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Nepieciešama papildu pakotnes"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Meklēt programmatūrā"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Izņem…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Instalēšana gaida…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Atjaunināšana gaida…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "Sagatavo…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Šo lietotni var izmantot tikai tad, kad ir savienojums ar internetu."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalēt"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalēt…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "Pa_laist"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Izņemt"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Tīkls"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Var sazināties caur tīklu"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Sistēmas pakalpojumi"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Var piekļūt D-Bus pakalpojumiem uz sistēmas kopnes"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Sesijas pakalpojumi"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Var piekļūt D-Bus pakalpojumiem uz sesijas kopnes"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Ierīces"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Var piekļūt sistēmas ierīču datnēm"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Mājas mape"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Var skatīt, rediģēt un izveidot datnes"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Var skatīt datnes"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Datņu sistēma"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Lejupielāžu mape"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Iestatījumi"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Var skatīt un mainīt jebkurus iestatījumus"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Mantotā attēlošanas sistēma"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Izmanto vecu, nedrošu attēlošanas sistēmu"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+#| msgid "Sandboxed"
+msgid "Sandbox escape"
+msgstr "Izmukšana no smilškastes"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Var izkļūt no smilškastes un apiet citus ierobežojumus"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Šī lietotne ir pilnībā izolēta smilškastē."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nevarēja noteikt, kurām sistēmas daļām šī lietotne piekļūst. Vecākām "
+"lietotnēm tas ir tipiski."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nezināma"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nekad"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nezināma"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Zems"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Vidējs"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Augsts"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Nezināma"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Jums vajadzīga interneta piekļuve, lai rakstītu apskatu"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nevar atrast “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Sabiedriskā īpašuma"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://lv.wikipedia.org/wiki/Neaizsarg%C4%81jams_darbs"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Brīvā programmatūra"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Uz lietotāju attiecas šī licence:"
+msgstr[1] "Uz lietotāju attiecas šīs licences:"
+msgstr[2] "Uz lietotāju attiecas šīs licences:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Vairāk informācijas"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Sīkākas informācijas lapa"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Lejupielādē"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Atja_unināt"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Pievienot s_aīsni"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Izņe_mt saīsni"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ekrānattēls nav nodrošināts"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Programmatūras krātuve ir iekļauta"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Šī lietotne iekļauj programmatūras krātuvi, kas sniedz atjauninājumus, kā "
+"arī piekļuvi citai programmatūrai."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Programmatūras krātuve nav iekļauta"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Šī lietotne neiekļauj programmatūras krātuves. Tā netiks atjaunināta līdz ar "
+"jaunām versijām."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Šo programmatūru jau piegādā jūsu distribūcija un to nevajadzētu aizvietot."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Programmatūras krātuve identificēta"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Šīs programmatūras krātuves pievienošana jums sniegs piekļuvi papildu "
+"programmatūrai un uzlabojumiem."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Izmantojiet tikai uzticamas programmatūras krātuves."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Tīmekļa vietne"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Ziedot"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Lokalizēts jūsu valodā"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentācija"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Laidiena aktivitāte"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Sistēmas integrācija"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Smilškastē"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanāls"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versija"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Vecuma vērtējums"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Atļaujas"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Atjaunināta"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorija"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Instalācijas izmērs"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Lejupielādes izmērs"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Izstrādātājs"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licence"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Brīva"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Īpašnieka"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Pielikumi"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Izvēlētie papildinājumi tiks instalēti kopā ar lietotni."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Atsauksmes"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Rakstīt atsauksmi"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Rādīt vairāk"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Tas nozīmē, ka programmatūru var brīvi izpildīt, kopēt, izplatīt, pētīt un "
+"modificēt."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Īpašnieka programmatūra"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Tas nozīmē, ka programmatūra var piederēt indivīdiem vai uzņēmumam. Nereti "
+"ir ierobežojumi tās izmantošanai un parasti tās pirmkodam nevar piekļūt."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Nezināma programmatūras licence"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Šīs programmatūras licences nosacījumi nav zināmi."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Lietotne tika novērtēta šādā veidā, jo tā satur šādas iespējas:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Šim vērtējumam nebija pieejama nekāda detalizētāka informācija."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " un "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Pieejamie fonti %s skriptam"
+msgstr[1] "Pieejamie fonti %s skriptiem"
+msgstr[2] "Pieejamie fonti %s skriptiem"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Pieejamā programmatūra kodekam %s"
+msgstr[1] "Pieejamā programmatūra kodekiem %s"
+msgstr[2] "Pieejamā programmatūra kodekiem %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nevarēja atrast pieprasīto programmatūru"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s nav atrasts"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "tīmekļa vietnē"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nav lietotņu, kas nodrošinātu datni %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informācija par %s, kā arī opcijas par to, kā saņemt trūkstošās lietotnes, "
+"var atrast %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s atbalstam nav pieejamu lietotņu."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s nav pieejams."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informāciju par %s, kā arī opcijas par to, kā saņemt lietotnes, kas atbalsta "
+"šo formātu, var atrast %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s rakstības atbalstam nav pieejamu fontu."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informāciju par %s, kā arī opcijas par to, kā saņemt papildu fontus, var "
+"atrast %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s formātam nav pieejamu papildinājuma kodeku."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informāciju par %s, kā arī opcijas par to, kā saņemt kodeku, kas var "
+"atskaņot šo formātu, var atrast %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s atbalstam nav pieejamu Plasma resursu."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informāciju par %s, kā arī opcijas par to, kā saņemt papildu Plasma "
+"resursus, var atrast %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s nav pieejamu printera draiveru."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informāciju par %s, kā arī opcijas par to, kā saņemt draiveri, kas atbalsta "
+"šo printeri, var atrast %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "šī tīmekļa vietne"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Diemžēl neizdevās atrast jūsu meklēto kodeku %s. Lūdzu, skatiet %s, lai "
+"uzzinātu vairāk."
+msgstr[1] ""
+"Diemžēl neizdevās atrast jūsu meklētos kodekus %s. Lūdzu, skatiet %s, lai "
+"uzzinātu vairāk."
+msgstr[2] ""
+"Diemžēl neizdevās atrast jūsu meklētos kodekus %s. Lūdzu, skatiet %s, lai "
+"uzzinātu vairāk."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Neizdevās atrast nevienu meklēšanas rezultātu"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s datnes formāts"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kodeku lapa"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Laipni lūdzam"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Laipni lūdzam “Programmatūrā”"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"“Programmatūra” ļauj instalēt visu jums vajadzīgo programmatūru. Apskatiet "
+"ieteikumus, pārlūkojiet kategorijas vai meklējiet lietotnes."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Iesim iepirkties"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Izņemta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalēta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Atjaunināta"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nezināma"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Vēsture"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Sistēmas lietotnes"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Instalētās lapas"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Programmatūras katalogs tiek lejupielādēts"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Ielādē lapu"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Startējas…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Pašreizējais tīkls tiek mērīts. Mērītiem savienojumiem ir datu limiti vai ir"
+" jāmaksā par patērēto datu apjomu. Lai saglabātu datus, automātiskā"
+" atjaunināšana ir pauzēta.\n"
+"\n"
+"Automātisko atjaunināšanu var turpināt, kad ir pieejams nemērīts tīkls. Līdz"
+" tam brīdim atjauninājumus var instalēt pašrocīgi.\n"
+"\n"
+"Vēl varētu būt tā, ka šis tīkls ir nepareizi identificēts kā mērīts tīkls. Šo"
+" iestatījumu var mainīt."
+
+#: src/gs-metered-data-dialog.ui:53
+#| msgid "Network Settings"
+msgid "Open Network _Settings"
+msgstr "Atvērt tīkla ie_statījumus"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderācijas lapa"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Nav atsauksmju, ko pārbaudīt"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistēmas"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "lietotāja"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Zars"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formāts"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalācija"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Vairāk…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Ieteiktās audio un video lietotnes"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Ieteiktās spēles"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Ieteiktās grafikas lietotnes"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Ieteiktās produktivitātes lietotnes"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Piekļūstiet papildu programmatūrai no izvēlētajām trešo pušu krātuvēm."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Daļa no šīs programmatūras ir slēgta un tāpēc ir ierobežojumi tās "
+"lietošanai, izplatīšanai un piekļuvei pirmkodam."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Uzzināt vairāk…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Ieslēgt"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Pārskata lapa"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Ieslēgt trešās puses programmatūras krātuves?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Iepriekšējais"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Nākamais"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Redaktora izvēle"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nesenie laidieni"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorijas"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nav atrastu lietotņu datu"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Sagatavot %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Vai tiešām vēlaties izņemt %s krātuvi?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Visas lietotnes no %s tiks izņemtas. Lai tās lietotu atkal, krātuve būs "
+"jāpārinstalē."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Vai tiešām vēlaties izņemt %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s tiks izņemta. Lai to lietotu atkal, tā būs jāuzinstalē."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (instalēts)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Atjaunināšanas iestatījumi"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automātiska atjaunināšana"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automātiskā atjaunināšana ir izslēgta, kad izmanto mobilo vai mērītu "
+"savienojumu."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Automātiskās atjaunināšanas paziņojumi"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Rādīt paziņojumus, kad atjauninājumi ir automātiski uzinstalēti."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Daļa no pašlaik instalētās programmatūras nav savienojama ar %s. Ja "
+"turpināsiet, uzlabošanas laikā tiks automātiski izņemtas:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Nesavietojamā programmatūra"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Turpināt"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Instalēta %u lietotne"
+msgstr[1] "Instalētas %u lietotnes"
+msgstr[2] "Instalētas %u lietotnes"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Instalēts %u papildinājums"
+msgstr[1] "Instalēti %u papildinājumi"
+msgstr[2] "Instalēti %u papildinājumi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u lietotne"
+msgstr[1] "%u lietotnes"
+msgstr[2] "%u lietotņu"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u papildinājums"
+msgstr[1] "%u papildinājumi"
+msgstr[2] "%u papildinājumu"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s un %s instalēts"
+msgstr[1] "%s un %s instalēti"
+msgstr[2] "%s un %s instalēti"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Izņemt “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Izslēgt “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programmatūras, kas tika instalēta no šīs krātuves, vairs nesaņems "
+"atjauninājumus, tai skaitā drošības labojumus."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Izslēgt"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "šī operētājsistēma"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Šīs krātuves papildina noklusējuma programmatūru, ko nodrošina %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Trešo pušu krātuves"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nav papildu krātuvju"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "I_eslēgt"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Izņemt…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "I_zslēgt…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Ieslēdz"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Izslēdz"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Ieslēgts"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Izslēgts"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Nevaru ciest"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Nepatīk"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Ir labi"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Patīk"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Esmu sajūsmā"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Lūdzu, veltiet vairāk laika, rakstot atsauksmi"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Ludzu, izvēlieties zvaigznes vērtējumu"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Kopsavilkums ir pārāk īss"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Kopsavilkums ir pārāk garš"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Apraksts ir pārāk īss"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Apraksts ir pārāk garš"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publicēt atsauksmi"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Sūtīt"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Kopsavilkums"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Sniedziet atsauksmes kopsavilkumu, piemēram: “Lieliska programma, iesaku”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Atsauksme"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Ko jūs domājat par šo lietotni? Mēģiniet pamatot savu viedokli."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Mūsu <a href=\"https://odrs.gnome.org/privacy"
+"\">privātuma politikā</a> varat uzzināt, kādi dati tiek nosūtīti."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "vērtējumi kopumā"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Jūs varat ziņot par rupjām, nepiedienīgām vai diskriminējošām atsauksmēm."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Kad atsauksme ir nosūtīta, tā būs paslēpta līdz to izskatīs administrators."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Ziņot par atsauksmi?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Ziņot"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Vai šī atsauksme bija noderīga?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Jā"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nē"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Ziņot…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Izņemt…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Ekrānattēls nav atrasts"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Neizdevās ielādēt attēlu"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Ekrānattēla izmērs nav atrasts"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Neizdevās izveidot kešu"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Ekrānattēls nav derīgs"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Ekrānattēls nav pieejams"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Ekrānattēls"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "Vēl %u atbilstība"
+msgstr[1] "Vēl %u atbilstības"
+msgstr[2] "Vēl %u atbilstību"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Meklēšanas lapa"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nav atrastu lietotņu"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Nevar lejupielādēt aparātprogrammatūras atjauninājumus no %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nevar lejupielādēt atjauninājumus no %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nevar lejupielādēt atjauninājumus"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nevar lejupielādēt atjauninājumus: bija nepieciešama pieeja internetam, bet "
+"tā nebija pieejama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Nevar lejupielādēt atjauninājumus no %s: nepietiek diska vietas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Nevar lejupielādēt atjauninājumus: nepietiek diska vietas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Nevar lejupielādēt atjauninājumus: bija vajadzīga autentifikācija"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nevar lejupielādēt atjauninājumus: autentifikācija bija nederīga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Nevar lejupielādēt atjauninājumus: jums nav atļaujas instalēt programmatūru"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nevar iegūt atjauninājumu sarakstu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Nevar instalēt %s, jo neizdevās lejupielādēt no %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Nevar instalēt %s, jo neizdevās lejupielādēt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Nevar instalēt %s, jo izpildlaiks %s nav pieejams"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nevar instalēt %s, jo nav atbalstīta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Nevar instalēt: bija nepieciešama pieeja internetam, bet tā nebija pieejama"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nevar instalēt: lietotnei ir nederīgs formāts"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nevar instalēt %s: nepietiek diska vietas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Nevar instalēt %s: bija vajadzīga autentifikācija"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Nevar instalēt %s: autentifikācija bija nederīga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Nevar instalēt %s: jums nav atļaujas instalēt programmatūru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nevar instalēt %s: ir vajadzīgs maiņstrāvas pieslēgums"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+#| msgid "Unable to install %s: AC power is required"
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Nevar instalēt %s: baterijā ir pārāk maz enerģijas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nevar instalēt %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Nevar atjaunināt %s no %s, jo neizdevās lejupielādēt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Nevar atjaunināt %s, jo neizdevās lejupielādēt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Nevar instalēt atjauninājumus no %s, jo neizdevās lejupielādēt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nevar instalēt atjauninājumus, jo neizdevās lejupielādēt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Nevar atjaunināt: bija nepieciešama pieeja internetam, bet tā nebija pieejama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nevar atjaunināt %s: nepietiek diska vietas"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nevar instalēt atjauninājumus: nepietiek vietas uz diska"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Nevar atjaunināt %s: bija vajadzīga autentifikācija"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nevar instalēt atjauninājumus: bija vajadzīga autentifikācija"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Nevar atjaunināt %s: autentifikācija bija nederīga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Nevar instalēt atjauninājumus: autentifikācija bija nederīga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Nevar atjaunināt %s: jums nav atļaujas atjaunināt programmatūru"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nevar instalēt atjauninājumus: jums nav atļaujas atjaunināt programmatūru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Nevar atjaunināt %s: ir vajadzīgs maiņstrāvas pieslēgums"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nevar instalēt atjauninājumus: ir vajadzīgs maiņstrāvas pieslēgums"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+#| msgid "Unable to update %s: AC power is required"
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Nevar atjaunināt %s: baterijā ir pārāk maz enerģijas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+#| msgid "Unable to install updates: AC power is required"
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Nevar instalēt atjauninājumus: baterijā ir pārāk maz enerģijas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nevar atjaunināt %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nevar instalēt atjauninājumus"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nevar uzlabot uz %s no %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nevar uzlabot uz %s, jo neizdevās lejupielādēt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nevar uzlabot uz %s: bija nepieciešama pieeja internetam, bet tā nebija "
+"pieejama"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nevar uzlabot uz %s: nepietiek diska vietas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nevar uzlabot uz %s: bija vajadzīga autentifikācija"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Nevar uzlabot uz %s: autentifikācija bija nederīga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nevar uzlabot uz %s: jums nav atļaujas uzlabot"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nevar uzlabot uz %s: ir vajadzīgs maiņstrāvas pieslēgums"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+#| msgid "Unable to upgrade to %s: AC power is required"
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Nevar uzlabot %s: baterijā ir pārāk maz enerģijas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nevar uzlabot uz %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Nevar noņemt %s: bija vajadzīga autentifikācija"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nevar noņemt %s: autentifikācija bija nederīga"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Nevar noņemt %s: jums nav atļaujas noņemt programmatūru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nevar noņemt %s: ir vajadzīgs maiņstrāvas pieslēgums"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+#| msgid "Unable to remove %s: you do not have permission to remove software"
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Nevar noņemt %s: baterijā ir pārāk maz enerģijas"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nevar noņemt %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nevar palaist %s: %s nav instalēts"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Nepietika diska vietas — atbrīvojiet kādu vietu un mēģiniet vēlreiz"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Diemžēl kaut kas nogāja greizi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Neizdevās instalēt datni: nav atbalstīta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Neizdevās instalēt datni: autentifikācija neizdevās"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Neizdevās instalēt: nav atbalstīts"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Neizdevās instalēt: autentifikācija neizdevās"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nevar sazināties ar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Vajag pārstartēt %s, lai lietotu jaunos spraudņus."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Šai lietotnei vajadzīgs tikt pārstartētai, lai lietotu jaunos spraudņus."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Ir vajadzīgs maiņstrāvas pieslēgums"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+#| msgid "The summary is too long"
+msgid "The battery level is too low"
+msgstr "Baterijā ir pārāk maz enerģijas"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Avots: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (instalē)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (izņem)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Izņemt _visas"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nav pieejams atjauninājumu apraksts."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalēts %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Instalētās lietotnes"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Pievienotās"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Izņemtās"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Atjauninājumi"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Pazeminājumi"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Uz šīs sistēmas netika instalēti nekādi atjauninājumi."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Rindā gaida drošības atjauninājumi"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Ieteicams jau tagad instalēt svarīgus atjauninājumus"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Pārstartēt un instalēt"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Pieejami programmatūras atjauninājumi"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Svarīgi operētājsistēmas un lietotņu atjauninājumi ir gatavi instalēšanai"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Skatīt"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u lietotne ir atjaunināta — Nepieciešama pārstartēšana"
+msgstr[1] "%u lietotnes ir atjauninātas — Nepieciešama pārstartēšana"
+msgstr[2] "%u lietotnes ir atjauninātas — Nepieciešama pārstartēšana"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u lietotne ir atjaunināta"
+msgstr[1] "%u lietotnes ir atjauninātas"
+msgstr[2] "%u lietotnes ir atjauninātas"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s tika atjaunināts."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Lūdzu, pārstartējiet lietotni."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s un %s tika atjaunināti."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u lietotne pieprasa pārstartēšanu."
+msgstr[1] "%u lietotnes pieprasa pārstartēšanu."
+msgstr[2] "%u lietotņu pieprasa pārstartēšanu."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Iekļauj %s, %s un %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Operētājsistēmai atjauninājumi nav pieejami"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Pārejiet uz jaunāku OS versiju, lai turpinātu saņemt drošības atjauninājumus."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Jauna %s versija ir pieejama instalēšanai"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Pieejami programmatūras atjauninājumi"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Neizdevās atjaunināt programmatūru"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Neizdevās uzinstalēt svarīgus OS atjauninājumus."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Rādīt sīkāku informāciju"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Sistēmas uzlabošana ir pabeigta"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Laipni lūdzam sistēmā %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Programmatūras atjauninājums uzinstalēts"
+msgstr[1] "Programmatūras atjauninājumi uzinstalēti"
+msgstr[2] "Programmatūras atjauninājumi uzinstalēti"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Tika uzinstalēts svarīgs OS atjauninājums."
+msgstr[1] "Tika uzinstalēti svarīgi OS atjauninājumi."
+msgstr[2] "Tika uzinstalēti svarīgi OS atjauninājumi."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Pārskats"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Neizdevās atjaunināt"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistēma jau ir aktuāla."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Atjaunināšana tika atcelta."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Bija nepieciešama pieeja internetam, bet tā nebija pieejama. "
+"Pārliecinieties, ka jums ir pieeja internetam un mēģiniet vēlreiz."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Šim atjauninājumam bija problēmas ar drošību. Lūdzu, sazinieties ar "
+"programmatūras nodrošinātāju, lai uzzinātu vairāk."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Nepietika diska vietas. Lūdzu, atbrīvojiet vietu un mēģiniet vēlreiz."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Diemžēl neizdevās uzinstalēt atjauninājumu. Gaidiet nākamo atjauninājumu un "
+"tad mēģiniet vēlreiz. Ja problēma neatrisinās, sazinieties ar programmatūras "
+"nodrošinātāju."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l.%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Vakar, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Vakar %l.%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Pirms divām dienām"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Pirms trīs dienām"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Pirms četrām dienām"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Pirms piecām dienām"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Pirms sešām dienām"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Pirms nedēļas"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Pirms divām nedēļām"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Meklē jaunus atjauninājumus…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Iestata atjauninājumus…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Tas var aizņemt kādu laiciņu)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Pēdējo reizi pārbaudīts: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s vairs netiek atbalstīta."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Jūsu OS vairs netiek atbalstīta."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Tas nozīmē, ka tā vairs nesaņem drošības atjauninājumus."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Ieteicams uzlabot OS uz jaunāku versiju."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+#| msgid "Charges may apply"
+msgid "Charges May Apply"
+msgstr "Var tikt piemērota maksa"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Atjauninājumu pārbaudīšana, lietojot mobilo platjoslas savienojumu, var "
+"maksāt papildus"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+#| msgid "Check Anyway"
+msgid "Check _Anyway"
+msgstr "_Tomēr pārbaudīt"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nav tīkla"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Lai pārbaudītu atjauninājumus, nepieciešama piekļuve internetam."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Pārbauda…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Pārbaudīt atjauninājumus"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Atjauninājumu mape"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Programmatūra ir aktuāla"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Atjauninājumu pārbaudīšana, lietojot mobilo platjoslas savienojumu, var "
+"izmaksās papildus"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Tomēr pārbaudīt"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Doties tiešsaistē, lai pārbaudītu atjauninājumus"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Tīkla iestatījumi"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Atjauninājumi tika automātiski sapludināti"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Pārstartēt un atjaunināt"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Atjaunināt visu"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrētā aparātprogrammatūra"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Pieprasa pārstartēšanu"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Lietotņu atjauninājumi"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Ierīces aparātprogrammatūra"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Lejupielādēt"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Pirms uzlabošanas ieteicams izveidot datu un datņu dublējumu."
+
+#: src/gs-upgrade-banner.c:95
+#| msgid "Restart Now"
+msgid "_Restart Now"
+msgstr "Pā_rstartēt tagad"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Atjauninājumi tiks piemēroti, kad dators tiks pārstartēts."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s tagad pieejams."
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+#| msgid "Downloading %s %s"
+msgid "Waiting to Download %s %s"
+msgstr "Gaida uz %s %s lejupielādēšanu"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Lejupielādē %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s ir gatavs instalēšanai"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Liels uzlabojums, ar jaunām iespējām un uzlabojumiem."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Uzzināt vairāk"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Pievienot, izņemt vai atjaunināt programmatūru uz šī datora"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Atjauninājumi;Uzlabojumi;Avoti;Krātuves;Repozitoriji;Iestatījumi;Instalēt;"
+"Uzstādīt;Atinstalēt;Noņemt;Programmatūra;Lietotne;Veikals;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Audio veidošana un rediģēšana"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Mūzikas atskaņotāji"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Atkļūdotāji"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Izstrādes vides"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Mākslīgais intelekts"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Ķīmija"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Valodas"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemātika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Visas"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Piedāvātās"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Darbības"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Piedzīvojumu"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkādes"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Bloku"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Galda"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kāršu"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatori"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Bērnu"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Loģikas"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Lomu spēļu"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sporta"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Stratēģijas"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografēšana"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skenēšana"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Skatītāji"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendāri"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Datubāzes"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanses"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Tekstapstrādes programmas"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fonti"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeki"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Ievades avoti"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Valodu pakas"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalizācija"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Aparatūra un draiveri"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Tērzēšanai"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Ziņas"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Tīmekļa pārlūki"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Visa"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Piedāvātā"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Teksta redaktori"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Visas"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Piedāvātās"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Māksla"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biogrāfija"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komiksi"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Daiļliteratūra"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Veselība"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Vēsture"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Dzīvesveids"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sports"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio un video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Izstrādes rīki"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Izglītība un zinātne"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Spēles"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika un fotografēšana"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivitāte"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikācijas un ziņas"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Uzziņas"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilītprogrammas"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "OS atjauninājumi"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Iekļauj veiktspējas, stabilitātes un drošības uzlabojumus."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Lejupielādē piedāvātos attēlus…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+#| msgid "A major upgrade, with new features and added polish."
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS atjauninājumus ar jaunām iespējām un labojumiem."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS atjauninājumu pakalpojums nevarēja saņemt un uzlikt atjauninājumu."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Software AppStream sistēmas mēroga instalētājs"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Neizdevās parsēt komandrindas argumentus"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Jums jānorāda tieši vienu datnes nosaukumu"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Šo programmu var lietot tikai root lietotājs"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Neizdevās validēt satura tipu"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Neizdevās kopēt"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Lejupielādē papildu metadatu datnes…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Lejupielādē informāciju par uzlabojumiem…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Uzlabojiet uz jaunākajām iespējām, veiktspējas un stabilitātes uzlabojumiem."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak atbalsts"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak ir ietvars darbvirsmas lietotnēm uz Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Saņem %s flatpak metadatus…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+#| msgid "%s has been updated."
+msgid "%s Device Update"
+msgstr "%s ierīces atjauninājums"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+#| msgid "System Upgrade Complete"
+msgid "%s System Update"
+msgstr "%s sistēmas atjauninājumus"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s iegultā kontroliera atjauninājumus"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "%s ME atjauninājumus"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s uzņēmumu ME atjauninājumus"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s patērētāju ME atjauninājumus"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+#| msgid "Installed Updates"
+msgid "%s Controller Update"
+msgstr "%s kontroliera atjauninājumus"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt kontroliera atjauninājumus"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU mikrokoda atjauninājumus"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%u Application Updated"
+#| msgid_plural "%u Applications Updated"
+msgid "%s Configuration Update"
+msgstr "%s konfigurācijas atjauninājumus"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Lejupielādē aparātprogrammatūras atjauninājumu parakstu…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Lejupielādē aparātprogrammatūras atjauninājumu metadatus…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Aparātprogrammatūras uzlabošanas atbalsts"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Nodrošina atbalstu aparātprogrammatūras uzlabojumiem"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Lejupielādē lietotnes vērtējumus…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings atbalsts"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS ir pakalpojums, kas nodrošina lietotāju atsauksmes par lietotnēm"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap veikals"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap atbalsts"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "snap ir universāla Linux pakotne"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Rādīt mapju pārvaldības UI"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Visas"
+
+#~ msgid "Folder Name"
+#~ msgstr "Mapes nosaukums"
+
+#~ msgid "_Add"
+#~ msgstr "_Pievienot"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Pievienot lietotņu mapei"
+
+#~ msgid "About %s"
+#~ msgstr "Par %s"
+
+#~| msgid "Sign in to %s…"
+#~ msgid "Sign In / Register…"
+#~ msgstr "Ierakstīties / reģistrēties…"
+
+#~ msgid "Continue"
+#~ msgstr "Turpināt"
+
+#~ msgid "Use"
+#~ msgstr "Izmantot"
+
+#~| msgid "_Add to Folder…"
+#~ msgid "Add another…"
+#~ msgstr "Pievienot citu…"
+
+#~ msgid "Top Rated"
+#~ msgstr "Augstāk novērtētās"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Paplašinājuma iestatījumi"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Paplašinājumus izmantojiet uz savu atbildību. Ja gadās problēmas ar "
+#~ "sistēmu, tos ir ieteicams izslēgt."
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validācija ir OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Neizdevās ielādēt datni"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Nesaglabātās izmaiņas"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Lietotņu saraksts jau ir ielādēts."
+
+#~ msgid "Merge documents"
+#~ msgstr "Apvienot dokumentus"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Izmest izmaiņas"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Atvērt AppStream datni"
+
+#~ msgid "_Open"
+#~ msgstr "_Atvērt"
+
+#~ msgid "_Save"
+#~ msgstr "_Saglabāt"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Neizdevās saglabāt datni"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s karoga dizains ir dzēsts."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Karoga dizains ir dzēsts."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Lietotņu sarakstam ir nesaglabātas izmaiņas."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Izmantot detalizētu reģistrēšanu žurnālā"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME programmatūras karoga dizaineris"
+
+#~ msgid "No Designs"
+#~ msgstr "Nav dizainu"
+
+#~ msgid "Error message here"
+#~ msgstr "Kļūdu ziņojums šeit"
+
+#~ msgid "App ID"
+#~ msgstr "Lietotnes ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Redaktora izvēle"
+
+#~ msgid "Category Featured"
+#~ msgstr "Kategoriju piedāvātā"
+
+#~ msgid "Undo"
+#~ msgstr "Atsaukt"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Karogu dizaineri"
+
+#~ msgid "New Banner"
+#~ msgstr "Jauns karogs"
+
+#~ msgid "Import from file"
+#~ msgstr "Importēt no datnes"
+
+#~ msgid "Export to file"
+#~ msgstr "Eksportēt uz datni"
+
+#~ msgid "Delete Design"
+#~ msgstr "Dzēst dizainu"
+
+#~ msgid "Featured App"
+#~ msgstr "Piedāvātā lietotne"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "OS uzlabojumi"
+
+#~ msgid "Spacing"
+#~ msgstr "Atstarpe"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Atstarpes lielums starp bērniem"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Spiediet uz vienumiem, lai tos izvēlētos"
+
+#~ msgid "Select"
+#~ msgstr "Izvēlēties"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "Pievienot uz m_api…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "Pārvietot uz _mapi…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Izņemt no mapes"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Programmatūras katalogs tiek ielādēts"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Izceltās lietotnes"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Vai tiešām vēlaties pirkt %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s tiks instalēts un jums būs jāmaksā %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Pirkt"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~| msgid "Signed in into %s as %s"
+#~ msgid "Signed in as %s"
+#~ msgstr "Ierakstījās kā %s"
+
+#~| msgid "Sign in to %s…"
+#~ msgid "Sign in…"
+#~ msgstr "Ierakstīties…"
+
+#~| msgid "Sign out from %s"
+#~ msgid "Sign out"
+#~ msgstr "Izrakstīties"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Nevar iegādāties %s: bija vajadzīga autentifikācija"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Nevar iegādāties %s: autentifikācija bija nederīga"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Nevar iegādāties %s: nav iestatīta maksājumu metode"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Nevar iegādāties %s: maksājums tika noraidīts"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Nevar iegādāties %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Veidot ieteiktās programmatūras karogus “GNOME programmatūrai”"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Programmatūra;Lietotne;Aplikācija;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Čaulas paplašinājumi"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Tīmekļa lietotņu atbalsts"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Palaist populāras tīmekļa lietotnes pārlūkā"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME čaulas paplašinājumu krātuve"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Lejupielādē čaulas paplašinājumu metadatus…"
+
+#~| msgctxt "Menu of Add-ons"
+#~| msgid "Shell Extensions"
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME čaulas paplašinājums"
+
+#~| msgid "To continue you need to sign in."
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Lai turpinātu, jums jāizmanto Ubuntu One konts."
+
+#~| msgid "To continue you need to sign in."
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Lai turpinātu, jums jāizmanto savs Ubuntu One konts."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Rādīt pakalpojuma profilēšanas informāciju"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Lai turpinātu, jums jāierakstās %s."
+
+#~ msgid "Email address"
+#~ msgstr "E-pasta adrese"
+
+#~ msgid "I have an account already"
+#~ msgstr "Man jau ir konts"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Vēlos reģistrēt kontu tagad"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Aizmirsu savu paroli"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Nākamajā reizē ierakstīties automātiski"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Ievadiet savu vienreizējo paroli divu pakāpju autentifikācijai."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autentificēt"
+
+#~ msgid "_About"
+#~ msgstr "P_ar"
+
+#~ msgid "_Quit"
+#~ msgstr "I_ziet"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informāciju par %s, kā arī opcijas par to, kā saņemt kodeku, kas var "
+#~ "atskaņot šo formātu, var atrast tīmekļa vietnē."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Jūsu %s konts ir aizturēts."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Nav iespējams instalēt programmatūru līdz šis tiks atrisināts."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Lai iegūtu vairāk informācijas, apmeklējiet %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Nevar atjaunināt %s no %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Lejupielādē jaunus atjauninājumus…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Lejupielādē lietotnes lapu…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam atbalsts"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Valve izklaides platforma"
+
+#~| msgid "Application Updates"
+#~ msgid "Applications Updated"
+#~ msgstr "Lietotnes ir atjauninātas"
+
+#~ msgid "Includes: ."
+#~ msgstr "Tajā skaitā: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Pā_rstartēt un atjaunināt"
+
+#~ msgid "U_pdate All"
+#~ msgstr "_Atjaunināt visu"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Pārstartēt un _instalēt"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Saņem izpildlaika pirmkodu…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Lejupielādē aparātprogrammatūras atjauninājumus…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba atbalsts"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba sniedz izstrādātājiem veidu, kādā viegli izveidot programmatūras "
+#~ "komplektus"
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000..6b9a7bc
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1,6 @@
+i18n.gettext(meson.project_name(),
+ preset : 'glib',
+ args: [
+ '--default-domain=' + meson.project_name(),
+ ]
+)
diff --git a/po/mjw.po b/po/mjw.po
new file mode 100644
index 0000000..f08ea59
--- /dev/null
+++ b/po/mjw.po
@@ -0,0 +1,4203 @@
+# Karbi translation for gnome-software.
+# Copyright (C) 2019 gnome-software's Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnome-software package.
+# Jor Teron <jor.teron@gmail.com>, 2019-20.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-02-01 12:49+0000\n"
+"PO-Revision-Date: 2020-02-22 22:35+0530\n"
+"Last-Translator: Jor Teron <jor.teron@gmail.com>\n"
+"Language-Team: Karbi <karbi.translation@gmail.com>\n"
+"Language: mjw\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2 ; plural=( n != 1 );\n"
+"X-Generator: Gedit\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1449
+msgid "The GNOME Project"
+msgstr "GNOME Project"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr ""
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr ""
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Angse chongvai"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr ""
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr ""
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Phi chedam"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_Explore"
+msgstr ""
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr ""
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "_Updates"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Kiri"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:287 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Source"
+
+#. button in the info bar
+#: src/gnome-software.ui:381 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:389
+msgid "Examine Disk"
+msgstr ""
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:397 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:405
+msgid "Restart Now"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:413
+msgid "More Information"
+msgstr ""
+
+#: src/gnome-software.ui:465 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr ""
+
+#: src/gnome-software.ui:484
+msgid "Find Out _More"
+msgstr ""
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4504
+msgid "Local file"
+msgstr ""
+
+#: lib/gs-app.c:4556
+msgid "Package"
+msgstr ""
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:412
+msgid "Pending"
+msgstr ""
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:175 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:68
+msgid "Installed"
+msgstr "Thaptang"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:165 src/gs-details-page.c:329
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "Thapbom"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:171 src/gs-repo-row.c:125
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "Thanbom"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "MODE"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr ""
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "KIRI"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr ""
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr ""
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "FILE-MEN"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr ""
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr ""
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr ""
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr ""
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "Version phai paklang"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Jor Teron <jor.teron@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:2104
+#, c-format
+msgid "About %s"
+msgstr "%s Aputhak"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:567
+msgid "Sorry! There are no details for that application."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:120
+msgid "Visit website"
+msgstr "Website kevur"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:125
+msgid "Install…"
+msgstr "Install…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:132 src/gs-updates-section.c:476
+msgid "Cancel"
+msgstr "Pasang-kok"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:139 src/gs-common.c:287 src/gs-page.c:273
+msgid "Install"
+msgstr "Install"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:146
+msgid "Update"
+msgstr "Update"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:150 src/gs-app-row.c:159 src/gs-page.c:434
+#: src/gs-repos-dialog.c:325
+msgid "Remove"
+msgstr "Kethan"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:277
+msgid "Device cannot be used during update."
+msgstr ""
+
+#: src/gs-app-row.c:470 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr ""
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:177
+msgid "Other"
+msgstr "Kaprek"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:182
+msgid "All"
+msgstr "Kado-kawe"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:186
+msgid "Featured"
+msgstr "Kemesen"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:467
+#, c-format
+msgid "Featured %s"
+msgstr "Kemesen %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Rating"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:58
+msgid "Name"
+msgstr "Amen"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Paklang"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr ""
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr ""
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr ""
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+msgid "A restart is required for the changes to take effect."
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-common.c:638
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "Ingpu"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:234
+msgid "Enable Third-Party Software Repository?"
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr ""
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr ""
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:440
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+
+#: src/gs-common.c:459 src/gs-details-page.ui:447
+msgid "Details"
+msgstr ""
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:624
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:629
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:636 src/gs-update-monitor.c:119
+msgid "Not Now"
+msgstr "Non kali"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:59
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:70
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:103
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:112
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "References to alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "Use of alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "References to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Use of illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "No references to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "Use of tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:142
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Brief artistic nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "No references to or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "Provocative references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Sexual references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:163
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:196
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "Product placement"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "No ability to spend money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "Users are encouraged to donate real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:223
+msgid "Ability to spend real money in-app"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "No way to chat with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "User-to-user interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "Moderated chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Uncontrolled chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "No way to talk with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "No sharing of user information with third parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "Checking for the latest application version"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:268
+msgid "No sharing of physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Sharing physical location with other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "Indirect references to homosexuality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Kissing between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "No references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "Indirect references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Direct references to prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic depictions of the act of prostitution"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "No references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "Indirect references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references to adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:312
+msgid "No sexualized characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:315
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+msgid "No references to desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "Depictions of or references to historical desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of modern-day human desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:333
+msgid "No visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Visible dead human remains"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Graphic depictions of desecration of human bodies"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No references to slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "Depictions of or references to historical slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Graphic depictions of modern-day slavery"
+msgstr ""
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:406
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:540
+msgid "General"
+msgstr ""
+
+#: src/gs-content-rating.c:549
+msgid "ALL"
+msgstr "KADO-KAWE"
+
+#: src/gs-content-rating.c:553
+msgid "Adults Only"
+msgstr "Kethe-atum anchot"
+
+#: src/gs-content-rating.c:555
+msgid "Mature"
+msgstr "Arta-kangtang"
+
+#: src/gs-content-rating.c:557
+msgid "Teen"
+msgstr "Pariso mir-mir"
+
+#: src/gs-content-rating.c:559
+msgid "Everyone 10+"
+msgstr "Arta 10+ aphan"
+
+#: src/gs-content-rating.c:561
+msgid "Everyone"
+msgstr "Kado-kawe aphan"
+
+#: src/gs-content-rating.c:563
+msgid "Early Childhood"
+msgstr "Oso-bihek"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr "Application"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr ""
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr ""
+
+#: src/gs-details-page.c:324
+msgid "Removing…"
+msgstr "Than bomlo…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:343
+msgid "Pending installation…"
+msgstr ""
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:350
+msgid "Pending update…"
+msgstr ""
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:710
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:855 src/gs-details-page.c:872
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.c:70
+msgid "_Install"
+msgstr "_Install"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:886 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "_Install…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:928
+msgid "_Launch"
+msgstr "_Launch"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:952 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Kethan"
+
+#: src/gs-details-page.c:983 src/gs-update-dialog.c:92
+msgid "Network"
+msgstr "Network"
+
+#: src/gs-details-page.c:983 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr ""
+
+#: src/gs-details-page.c:984 src/gs-update-dialog.c:93
+msgid "System Services"
+msgstr ""
+
+#: src/gs-details-page.c:984 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr ""
+
+#: src/gs-details-page.c:985 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr ""
+
+#: src/gs-details-page.c:985 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr ""
+
+#: src/gs-details-page.c:986 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr ""
+
+#: src/gs-details-page.c:986 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr ""
+
+#: src/gs-details-page.c:987 src/gs-details-page.c:988
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+msgid "Home folder"
+msgstr ""
+
+#: src/gs-details-page.c:987 src/gs-details-page.c:989
+#: src/gs-details-page.c:991 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr ""
+
+#: src/gs-details-page.c:988 src/gs-details-page.c:990
+#: src/gs-details-page.c:992 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr ""
+
+#: src/gs-details-page.c:989 src/gs-details-page.c:990
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+msgid "File system"
+msgstr "File system"
+
+#: src/gs-details-page.c:991 src/gs-details-page.c:992
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+msgid "Downloads folder"
+msgstr ""
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:102
+msgid "Settings"
+msgstr ""
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr ""
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr ""
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr ""
+
+#: src/gs-details-page.c:995 src/gs-update-dialog.c:104
+msgid "Sandbox escape"
+msgstr ""
+
+#: src/gs-details-page.c:995 src/gs-update-dialog.c:104
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+
+#: src/gs-details-page.c:1010
+msgid "This application is fully sandboxed."
+msgstr ""
+
+#: src/gs-details-page.c:1018
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1177
+msgctxt "version"
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1190
+msgctxt "updated"
+msgid "Never"
+msgstr ""
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1243
+msgctxt "origin"
+msgid "Unknown"
+msgstr ""
+
+#: src/gs-details-page.c:1296
+msgid "Low"
+msgstr ""
+
+#: src/gs-details-page.c:1298
+msgid "Medium"
+msgstr ""
+
+#: src/gs-details-page.c:1300
+msgid "High"
+msgstr ""
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1302 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:57
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1640
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1826 src/gs-details-page.c:1842
+#, c-format
+msgid "Unable to find “%s”"
+msgstr ""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2420
+msgid "Public domain"
+msgstr ""
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2423
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2430
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr ""
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2440 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software akejoi"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2497
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-details-page.c:2524 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr ""
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr ""
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr ""
+
+#: src/gs-details-page.ui:252 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr ""
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr ""
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr ""
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr ""
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr ""
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr ""
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr ""
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr ""
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr ""
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr ""
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr ""
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr ""
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr ""
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr ""
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:102
+msgid "Channel"
+msgstr ""
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr ""
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr ""
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr ""
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Muluk"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr ""
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr ""
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Developer"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "License"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Kejoi"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Kejoi-kali"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:314
+msgid "Add-ons"
+msgstr "Add-ons"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Reviews"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Review ketok"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Ako dolang"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr ""
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr ""
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr ""
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:134
+msgid " and "
+msgstr " lapen "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:137
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:163
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:171
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:213
+msgid "Unable to Find Requested Software"
+msgstr ""
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:318
+#, c-format
+msgid "%s not found"
+msgstr "%s longle"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:322
+msgid "on the website"
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:329
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:333 src/gs-extras-page.c:344 src/gs-extras-page.c:355
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:362
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:351
+#, c-format
+msgid "%s is not available."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:366
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:373
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:377
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:384
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:388
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:395
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:399
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:406
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:410
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:454
+msgid "this website"
+msgstr ""
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:458
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:526 src/gs-extras-page.c:582 src/gs-extras-page.c:621
+msgid "Failed to find any search results"
+msgstr ""
+
+#: src/gs-extras-page.c:809
+#, c-format
+msgid "%s file format"
+msgstr ""
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Codecs page"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Kur-e-wang"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "Thaptang"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:110 src/gs-review-row.c:64 src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr ""
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr ""
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr ""
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr ""
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr ""
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr ""
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:83
+msgid "system"
+msgstr "system"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:86
+msgid "user"
+msgstr "user"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:107 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr ""
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr ""
+
+#. add button
+#: src/gs-overview-page.c:312
+msgid "More…"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:562
+msgid "Recommended Audio & Video Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:567
+msgid "Recommended Games"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:572
+msgid "Recommended Graphics Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:577
+msgid "Recommended Productivity Applications"
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:925 src/gs-repos-dialog.c:827
+msgid "Access additional software from selected third party sources."
+msgstr ""
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:929 src/gs-repos-dialog.c:831
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:934 src/gs-repos-dialog.c:836
+msgid "Find out more…"
+msgstr ""
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:942 src/gs-repos-dialog.c:239
+msgid "Enable"
+msgstr ""
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr ""
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr ""
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Aphi"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Dunthu"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr ""
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr ""
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:264
+#, c-format
+msgid "Prepare %s"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:403
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Nangli paka lo %s phan repository pen than pong po?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:407
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:415
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Nangli paka lo %s than pong po?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:418
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s than pong po, mo ot thu ji pulote thap thu nangpo."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:52 src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Installed)"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr ""
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:114
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:97
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:104
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:112
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:118
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:301
+#, c-format
+msgid "Remove “%s”?"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:306
+#, c-format
+msgid "Disable “%s”?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:310
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:328
+msgid "Disable"
+msgstr ""
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:740
+msgid "the operating system"
+msgstr ""
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:806 src/gs-repos-dialog.c:842
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:824
+msgid "Third Party Repositories"
+msgstr ""
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:95
+msgid "_Enable"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:104
+msgid "_Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:109
+msgid "_Disable…"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:117
+msgid "Enabling"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:129
+msgid "Disabling"
+msgstr ""
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:143
+msgid "Enabled"
+msgstr ""
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:149
+msgid "Disabled"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "Lang un-eh"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "Ning hang heh"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "Chok chit"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "Ning hang"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "Ning dok-it lo"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr ""
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Review Kelo"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "Kelo"
+
+#: src/gs-review-dialog.ui:108
+msgid "Summary"
+msgstr ""
+
+#: src/gs-review-dialog.ui:118
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "Lamthe thi hek review ketok, lason “App mepik, Ot vek nangji”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:143
+msgctxt "app review"
+msgid "Review"
+msgstr "Review"
+
+#: src/gs-review-dialog.ui:153
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Laso app phan nangli kopi si puji? Ason pi tame."
+
+#: src/gs-review-dialog.ui:185
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "kado-kawe ratings"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:222
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:227
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:241
+msgid "Report Review?"
+msgstr ""
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:245
+msgid "Report"
+msgstr "Report"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr ""
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr ""
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr ""
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr ""
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr ""
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr ""
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:381
+msgid "Screenshot size not found"
+msgstr ""
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:411
+msgid "Could not create cache"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:471
+msgid "Screenshot not valid"
+msgstr ""
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:486
+msgid "Screenshot not available"
+msgstr ""
+
+#: src/gs-screenshot-image.c:544
+msgid "Screenshot"
+msgstr ""
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:142
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr ""
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr ""
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1090 src/gs-shell.c:1095 src/gs-shell.c:1110
+#: src/gs-shell.c:1114
+#, c-format
+msgid "“%s”"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1161
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1167
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1174 src/gs-shell.c:1219
+msgid "Unable to download updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1180
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1189
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1194
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1206
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1211
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to get list of updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1265
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1271
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1284
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1290
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1297
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1303
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1308
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1315
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1322
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1337
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1344
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1353
+#, c-format
+msgid "Unable to install %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1400
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1407
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1414
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1418
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1424
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1434
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1449
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1454
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1463
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1468
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1477
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1483
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1493
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1499
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1508
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1525
+#, c-format
+msgid "Unable to update %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1528
+#, c-format
+msgid "Unable to install updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1571
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1576
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1585
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1594
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1602
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1609
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1616
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1639
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1677
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1683
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1689
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1696
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1703
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1715
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1758
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1765 src/gs-shell.c:1816 src/gs-shell.c:1857
+#: src/gs-shell.c:1905
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1776 src/gs-shell.c:1827 src/gs-shell.c:1868
+#: src/gs-shell.c:1939
+msgid "Sorry, something went wrong"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1808
+msgid "Failed to install file: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1812
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1849
+msgid "Failed to install: not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1853
+msgid "Failed to install: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1899
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1914
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1919
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1926
+msgid "AC power is required"
+msgstr "AC current pacheju nanagji"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1930
+msgid "The battery level is too low"
+msgstr "Battery kom pik"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "Source: %s"
+
+#: src/gs-summary-tile.c:90
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Thap bom)"
+
+#: src/gs-summary-tile.c:95
+#, c-format
+msgid "%s (Removing)"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr ""
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:187
+msgid "No update description available."
+msgstr ""
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:291
+#, c-format
+msgid "Installed on %s"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:311
+msgid "Installed Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:527
+msgid "Additions"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:531
+msgid "Removals"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:535
+msgid "Updates"
+msgstr "Updates"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:539
+msgid "Downgrades"
+msgstr "Downgrades"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr ""
+
+#: src/gs-update-monitor.c:107
+msgid "Security Updates Pending"
+msgstr ""
+
+#: src/gs-update-monitor.c:108
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: src/gs-update-monitor.c:111
+msgid "Restart & Install"
+msgstr ""
+
+#: src/gs-update-monitor.c:115
+msgid "Software Updates Available"
+msgstr "Software Updates Dolo"
+
+#: src/gs-update-monitor.c:116
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#: src/gs-update-monitor.c:120
+msgid "View"
+msgstr "Kelang"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:228
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:234
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:245
+#, c-format
+msgid "%s has been updated."
+msgstr "%s updated tanglo."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:248
+msgid "Please restart the application."
+msgstr ""
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:256
+#, c-format
+msgid "%s and %s have been updated."
+msgstr ""
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:262 src/gs-update-monitor.c:281
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:274
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr ""
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:515 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr ""
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:517
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:572
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:576
+msgid "Software Upgrade Available"
+msgstr ""
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:965
+msgid "Software Updates Failed"
+msgstr ""
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:967
+msgid "An important OS update failed to be installed."
+msgstr ""
+
+#: src/gs-update-monitor.c:968
+msgid "Show Details"
+msgstr ""
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:991
+msgid "System Upgrade Complete"
+msgstr ""
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:996
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr ""
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1002
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1017
+msgctxt "updates"
+msgid "Review"
+msgstr "Review"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1065
+msgid "Failed To Update"
+msgstr ""
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1071
+msgid "The system was already up to date."
+msgstr ""
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1076
+msgid "The update was cancelled."
+msgstr ""
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1082
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1088
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1094
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1099
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "Yesterday, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "Tumi, %l:%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "Ni ni aphrang"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "Ni thom aphrang"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "Ni phli aphrang"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "Ni pho aphrang"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "Ni throk aphrang"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "Erui aphrang"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "Rui ni aphrang"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr "Updates kimi lang bomlo…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr "(ajir ding chet tahi)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr "Kelang arni: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s support pe tanglo."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr "Nangli OS support pe tanglo."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+msgid "Charges May Apply"
+msgstr "Ador do tahai"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "Mobile broadband pen updates lote tangka dam tahai."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+msgid "Check _Anyway"
+msgstr "Chok, langle langnoi"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "Network awe"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr "Updates phan internet chepho do nangji."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1340
+msgid "Checking…"
+msgstr "Lang bom…"
+
+#: src/gs-updates-page.c:1353
+msgid "Check for updates"
+msgstr "Updates kelang"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Updates page"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Software update tanglo"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "Mobile broadband pen updates lote tangka dam tahai"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Chok, langle langnoi"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr ""
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr ""
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:278
+msgid "Restart & Update"
+msgstr "Restart & Update"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:284
+msgid "Update All"
+msgstr "Update All"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:415
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:419
+msgid "Requires Restart"
+msgstr "Restart nangji"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:423
+msgid "Application Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:427
+msgid "Device Firmware"
+msgstr ""
+
+#: src/gs-updates-section.c:455 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Download"
+
+#: src/gs-upgrade-banner.c:64
+msgid "_Restart Now"
+msgstr "_Restart Nonmat"
+
+#: src/gs-upgrade-banner.c:66
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+
+#: src/gs-upgrade-banner.c:72
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:87
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Non dolo"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:97
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Download chonghong %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:107
+#, c-format
+msgid "Downloading %s %s"
+msgstr "San bom lo %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:118
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Ready to be Installed"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Lun/Seh Semar pen Editing"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Music Players"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Debuggers"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEs"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Artificial Intelligence"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomy"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemistry"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Languages"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Math"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotics"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Adventure"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocks"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Board"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Card"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulators"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Osotum"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logic"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Role Playing"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sports"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategy"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D Graphics"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Photography"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scanning"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vector Graphics"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Viewers"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendar"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Database"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Tangka"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Word Processor"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fonts"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Input Sources"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Language Packs"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localisation"
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardware Drivers"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:230
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Birta"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Web Browsers"
+
+#: plugins/core/gs-desktop-common.c:242
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Text Editors"
+
+#: plugins/core/gs-desktop-common.c:256
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Kado-kawe"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Kemesen"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biography"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Comics"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fiction"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Health"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "History"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Lifestyle"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politics"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sports"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:296
+msgid "Audio & Video"
+msgstr "Lun pen lun-arjan"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:299
+msgid "Developer Tools"
+msgstr "Developer Hormu"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:302
+msgid "Education & Science"
+msgstr "Lo-charli"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:305
+msgid "Games"
+msgstr "Pathu-Kejui"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:308
+msgid "Graphics & Photography"
+msgstr "Graphics & Photography"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:311
+msgid "Productivity"
+msgstr "Productivity"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:317
+msgid "Communication & News"
+msgstr "Chingki-chethan lapen Birta"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:320
+msgid "Reference"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:323
+msgid "Utilities"
+msgstr "Utilities"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "OS ke Updates"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr ""
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:561
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:564
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:825
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:139
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:148
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:155
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:163
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:173
+msgid "Failed to copy"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:235
+msgid "Downloading extra metadata files…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "Upgrade information san bomlo…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak Support"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:861
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:135
+#, c-format
+msgid "%s Device"
+msgstr ""
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:140
+#, c-format
+#| msgid "system"
+msgid "%s System"
+msgstr "%s System"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:145
+#, c-format
+msgid "%s Embedded Controller"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:150
+#, c-format
+msgid "%s ME"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:155
+#, c-format
+msgid "%s Corporate ME"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:160
+#, c-format
+msgid "%s Consumer ME"
+msgstr ""
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:166
+#, c-format
+msgid "%s Controller"
+msgstr ""
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:172
+#, c-format
+msgid "%s Thunderbolt Controller"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:669
+msgid "Downloading firmware update signature…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:710
+msgid "Downloading firmware update metadata…"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Firmware Upgrade Support"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:196
+msgid "Downloading application ratings…"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:228
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap Support"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#~ msgid "_All"
+#~ msgstr "K_ado-kawe"
+
+#~ msgid "Folder Name"
+#~ msgstr "Folder men"
+
+#~ msgid "App ID"
+#~ msgstr "App ID"
+
+#~ msgid "Featured App"
+#~ msgstr "Kemesen App"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "OS Upgrade"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Kemesen Applications"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell Extensions"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell Extension"
diff --git a/po/ml.po b/po/ml.po
new file mode 100644
index 0000000..c43edda
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,3961 @@
+# Malayalam translation for gnome-software.
+# Copyright (C) 2018 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# HIjas T <hijas.ht@gmail.com>, 2018.
+# Ranjith Siji <ranjith.sajeev@gmail.com>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2018-10-18 16:09+0000\n"
+"PO-Revision-Date: 2018-10-27 10:46+0530\n"
+"Last-Translator: Ranjith Siji <ranjith.sajeev@gmail.com>\n"
+"Language-Team: Malayalam <l10n@lists.smc.org.in>\n"
+"Language: ml\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "ഗ്നോം സോഫ്റ്റ്‌വെയര്‍"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "ഗ്നോമിന് വേണ്ടിയുള്ള അപ്ലിക്കേഷൻ മാനേജർ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid "Software allows you to find and install new applications and system extensions and remove existing installed applications."
+msgstr "പുതിയ ആപ്ലിക്കേഷനുകളും സിസ്റ്റം വിപുലീകരണങ്ങളും കണ്ടെത്താനും ഇൻസ്റ്റാൾ ചെയ്യാനും നിലവിലുള്ള ഇൻസ്റ്റാൾ ചെയ്ത ആപ്ലിക്കേഷനുകളെ നീക്കംചെയ്യുന്നതിനും സോഫ്റ്റ്‌വെയര്‍ നിങ്ങളെ അനുവദിക്കുന്നു."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid "GNOME Software showcases featured and popular applications with useful descriptions and multiple screenshots per application. Applications can be found either through browsing the list of categories or by searching. It also allows you to update your system using an offline update."
+msgstr "ഓരോ ആപ്ലിക്കേഷനുമുള്ള ഉപയോഗപ്രദമായ വിവരണങ്ങളും ഒന്നിലധികം സ്ക്രീൻഷോട്ടുകളും ഉപയോഗിച്ച്ഫീച്ചർ ചെയ്തതും ജനപ്രീതിയാർജ്ജിച്ചതുമായ ആപ്ലിക്കേഷനുകൾ ഗ്നോം സോഫ്റ്റ്‌വെയര്‍ പ്രദർശിപ്പിച്ചിരിക്കുന്നു. ആപ്ലിക്കേഷനുകൾ വിഭാഗങ്ങളുടെ പട്ടിക ബ്രൗസ് ചെയ്യുന്നതിലൂടെയോ തിരയുന്നതിലൂടെയോ കണ്ടെത്താനാകും. ഓഫ്‌ലൈൻ നവീകരണം ഉപയോഗിച്ച് നിങ്ങളുടെ സിസ്റ്റം നവീകരിക്കാനും ഇത് അനുവദിക്കുന്നു."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "അവലോകന പട്ടിക"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "വിശദാംശ പട്ടിക"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്തതിൻ്റെ പട്ടിക"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "പുതുക്കലുകളുടെ പട്ടിക"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "പുതുക്കിയതിൻ്റെ വിശദാംശങ്ങൾ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1199
+msgid "The GNOME Project"
+msgstr "ഗ്നോം പദ്ധതി"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "സിസ്റ്റത്തിലെ സ്ഥാനത്തേക്ക് ഒരു ആപ്സ് സ്ട്രീം ഫയൽ ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "സിസ്റ്റത്തിലെ സ്ഥാനത്തേക്ക് ഒരു ആപ്സ് സ്ട്രീം ഫയൽ ഇൻസ്റ്റാൾ ചെയ്ത് കൊണ്ടിരിക്കുന്നു"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "അനുയോജ്യമായ പദ്ധതികളുടെ ഒരു ലിസ്റ്റ്"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid "This is a list of compatible projects we should show such as GNOME, KDE and XFCE."
+msgstr "ഗ്നോം, കെഡിഇ, എക്സ്എഫ്‌സിഇ എന്നിവ പോലെയുളള അനുയോജ്യമായ പദ്ധതികളുടെ ഒരു പട്ടികയാണിത്."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "ഗ്നോം സോഫ്റ്റ്‌വെയറിൽ പുതുക്കലുകളും നവീകരണങ്ങളും കൈകാര്യം ചെയ്യണമോ എന്ന്"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid "If disabled, GNOME Software will hide the updates panel, not perform any automatic updates actions or prompt for upgrades."
+msgstr "അപ്രാപ്തമാക്കിയിരിക്കുകയാണെങ്കിൽ, ഗ്നോം സോഫ്റ്റ്‌വെയര്‍ പുതുക്കൽ പട്ടിക മറയ്ക്കുകയും, ഏതെങ്കിലും സ്വമേധയായുള്ള പുതുക്കൽ പ്രവർത്തനങ്ങൾ നടത്തുകയോ നവീകരണത്തിനോ ആവശ്യപ്പെടുകയോ ചെയ്യുന്നില്ല."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "പുതുക്കലുകൾ സ്വമേധയാ ഡൗൺലോഡ് ചെയ്ത് ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid "If enabled, GNOME Software automatically downloads software updates in the background, also installing ones that do not require a reboot."
+msgstr "പ്രാപ്തമാക്കിയാൽ, പശ്ചാത്തലത്തിൽ ഗ്നോം സോഫ്റ്റ്‌വെയര്‍ സ്വപ്രേരിതമായി സോഫ്റ്റ്‌വെയര്‍ പുതുക്കുവാനുള്ളവ ഡൗൺലോഡ് ചെയ്യുന്നു, പുനഃരാരംഭം ആവശ്യമില്ലാത്തവ ഇൻസ്റ്റാളും ചെയ്യുന്നു."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "പശ്ചാത്തലത്തിൽ പുതുക്കിയ സോഫ്റ്റ്‌വെയറിനെ കുറിച്ച് ഉപയോക്താവിനെ അറിയിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid "If enabled, GNOME Software notifies the user about updates that happened whilst the user was idle."
+msgstr "പ്രവർത്തന സജ്ജമാക്കിയാൽ, ഉപയോക്താവ് നിഷ്ക്രിയമായിരിക്കുമ്പോൾ സംഭവിച്ച പുതുക്കളുകളെ സംബന്ധിച്ച് ഉപയോക്താവിനെ ഗ്നോം സോഫ്റ്റ്‌വെയര്‍ അറിയിക്കുന്നു."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "മീറ്റർ ചെയ്യപ്പെട്ട കണക്ഷനിൽ ആയിരിക്കുമ്പോൾ സ്വമേധയാ പുതുക്കണമോ എന്ന്"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid "If enabled, GNOME Software automatically refreshes in the background even when using a metered connection (eventually downloading some metadata, checking for updates, etc., which may incur in costs for the user)."
+msgstr "പ്രാപ്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, മീറ്റർ ചെയ്ത കണക്ഷൻ ഉപയോഗിക്കുമ്പോൾ പോലും ഗ്നോം സോഫ്റ്റ്‌വെയര്‍ സ്വമേധയാ പശ്ചാത്തലത്തിൽ പുതുക്കപ്പെടുന്നു (ഒടുവിൽ ചില മെറ്റാഡാറ്റ ഡൗൺലോഡ് ചെയ്യുന്നു, പുതുക്കാൻ വേണ്ടി പരിശോധിക്കുന്നു മുതലായവ ചെയ്യപ്പെടുന്നു. ഇത് ഉപയോക്താവിനായി ചെലവുകൾക്ക് ഇടയാക്കിയേക്കാം)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "ഗ്നോം സോഫ്റ്റ്വെയറിന്റെ ആദ്യത്തെ ഉപയോഗമാണോയെന്ന്"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "ആപ്ലിക്കേഷനുകൾക്ക് അടുത്തുള്ള നക്ഷത്ര മൂല്യം കാണിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "വിദൂരമായി സജ്ജമാക്കിയ സ്വതവേ ശാഖ അടിസ്ഥാനമാക്കിയുള്ള ആപ്ലിക്കേഷനുകൾ വേർതിരിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനു മുമ്പ് സൗജന്യമല്ലാത്ത ആപ്ലിക്കേഷൻസ് ഒരു മുന്നറിയിപ്പ് കാണിക്കുന്നു"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "When non-free applications are installed a warning dialog can be shown. This controls if that dialog is suppressed."
+msgstr "സൗജന്യമല്ലാത്ത ആപ്ലിക്കേഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യുമ്പോൾ ഒരു മുന്നറിയിപ്പ് ദൃശ്യമാക്കാം. ആ മുന്നറിയിപ്പ് അടിച്ചമർത്തപ്പെട്ടാൽ ഇത് നിയന്ത്രിക്കുന്നു."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "ജനപ്രിയ അപ്ലിക്കേഷനുകളുടെ ഒരു പട്ടിക"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "സിസ്റ്റം നിഷ്കർഷിച്ചിട്ടുള്ളവക്ക് പകരം ഉപയോഗിക്കേണ്ട അപ്ലിക്കേഷനുകളുടെ ഒരു പട്ടിക."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "അവസാന പുതുക്കൽ പരിശോധനാ സമയവിവരം"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "അവസാന നവീകരണ പരിശോധനാ സമയവിവരം"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "ആദ്യത്തെ സുരക്ഷാ പുതുക്കലിന്റെ സമയവിവരം, പുതുക്കലിന് ശേഷം മായ്ച്ചു കളയുന്നതാണ്"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "അവസാനമായി പുതുക്കിയതിന്റെ സമയവിവരം"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "ആപ്പ്സ്‌ട്രീമിൻ്റെ സ്ക്രീൻഷോട്ട് പരിശോധിക്കുന്നതിനുള്ള സമയം ഇപ്പോഴും സാധുവാണ്"
+
+#: data/org.gnome.software.gschema.xml:69
+msgid "Choosing a larger value will mean less round-trips to the remote server but updates to the screenshots may take longer to show to the user. A value of 0 means to never check the server if the image already exists in the cache."
+msgstr "വലിയ മൂല്യം തിരഞ്ഞെടുക്കുന്നത് വിദൂര സെർവറിലേക്ക് കുറച്ച് റൗണ്ട് ട്രിപ്പുകൾ എന്നതാണർത്ഥം, എന്നാൽ സ്ക്രീൻഷോട്ടുകളുടെ പുതുക്കലുകൾ ഉപയോക്താവിന് കാണിക്കാൻ കൂടുതൽ സമയമെടുത്തേക്കാം. ഇമേജ് കാഷിൽ നിലവിലുണ്ടെങ്കിൽ സെർവർ ഒരിക്കലും പരിശോധനയലല്ല എന്നതാണ് പൂജ്യം കൊണ്ട് അർത്ഥമാക്കുന്നത്."
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "അപ്ലിക്കേഷൻ അവലോകനങ്ങൾക്കായി ഉപയോഗിക്കുന്ന സെർവർ"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr "അവലോകനങ്ങൾക്കുള്ള ഏറ്റവും കുറഞ്ഞ കർമ രേഖ"
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "ഈ നമ്പരിനേക്കാൾ കുറഞ്ഞ കർമയുമായുള്ള അവലോകനങ്ങൾ പ്രദർശിപ്പിക്കുകയില്ല."
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "മൂന്നാം കക്ഷിയായിരിക്കാൻ പാടില്ലാത്ത ഔദ്യോഗിക റിപ്പോസിറ്ററികളുടെ ഒരു പട്ടിക"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should be considered free software"
+msgstr "സ്വതന്ത്ര സോഫ്റ്റ്‌വെയറായി കണക്കാക്കേണ്ട ഔദ്യോഗിക റിപ്പോസിറ്ററികളുടെ പട്ടിക"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "The licence URL to use when an application should be considered free software"
+msgstr "ഒരു ആപ്ലിക്കേഷൻ സ്വതന്ത്ര സോഫ്റ്റ്‌വെയറായി പരിഗണിക്കപ്പെടുമ്പോൾ ഉപയോഗിക്കാനുള്ള ലൈസൻസിൻ്റെ ലിങ്ക്"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "സാധ്യമാകുന്നിടത്തെല്ലാം എല്ലാ ഉപയോക്താക്കൾക്കും ഒരുമിച്ചുള്ള ആപ്ലിക്കേഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr "ഫോൾഡർ നിർവഹണത്തിൻ്റെ ഉപഭോക്താ-സമ്പർക്കം കാണിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററികളുടെ ഡയലോഗിലേക്ക് പ്രവേശനം അനുവദിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "ആദ്യ പ്രസിദ്ധീകരണത്തിന് നവീകരണം വാഗ്ദാനം ചെയ്യുക"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "ഒരു ആപ്ലിക്കേഷൻ സൗജന്യമല്ലെന്ന് ഉപയോക്താവിനെ അറിയിക്കുന്ന ചില ഉപഭോക്താ-സമ്പർക്ക ഘടകങ്ങൾ കാണിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "സൗജന്യമല്ലാത്ത സോഫ്റ്റ്‌വെയർ റെപ്പോസിറ്ററികൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനായി പ്രോംപ്റ്റ് പ്രദർശിപ്പിക്കുക"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്ത അപ്ലിക്കേഷനുകളുടെ പട്ടികയിൽ അപ്ലിക്കേഷനുകളുടെ ഇൻസ്റ്റാൾ ചെയ്ത വലിപ്പം കാണിക്കുക"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://ml.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "സ്വതന്ത്രമല്ലാത്തതും കുത്തക സോഫ്റ്റ്‌വെയറുകളേയും പറ്റി വിശദീകരിക്കുന്ന ലിങ്ക്"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid "A list of URLs pointing to appstream files that will be downloaded into an app-info folder"
+msgstr "ഒരു അപ്ലിക്കേഷൻ-വിവര ഫോൾഡറിൽ ഡൗൺലോഡ് ചെയ്യപ്പെടുന്ന ആപ്ലിക്കേഷൻ സ്ട്രീമിനെ സൂചിപ്പിക്കുന്ന ലിങ്കുകളുടെ ഒരു പട്ടിക"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "എല്ലാ ഉപയോക്താക്കൾക്കുമായുള്ള സിസ്റ്റം മുഴുക്കെയുള്ള സ്ഥാനത്തേക്ക് ആപ്പ്സ്ട്രീം ഫയലുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "ഗ്നോം ഷെൽ എക്സ്റ്റൻഷനുകളുടെ റിപോസിറ്ററി പ്രവർത്തന സജ്ജമാക്കുക"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "സോഫ്റ്റ്‌വെയർ ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "സിസ്റ്റത്തിൽ തിരഞ്ഞെടുത്ത സോഫ്റ്റ്‌വെയർ ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "എല്ലാം തിരഞ്ഞെടുക്കുക"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "ഒന്നും തിരഞ്ഞെടുക്കാതിരിക്കുക"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "സോഫ്റ്റ്‍വെയർ റെപ്പോസിറ്ററികൾ(_S)"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "മുന്‍ഗണനകള്‍ പുതുക്കുക(_U)"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "സോഫ്റ്റ്‌വെയർ"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "തിരികെ പോവുക"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_All"
+msgstr "എല്ലാം(_A)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യപ്പെട്ടത്(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "പുതുക്കലുകൾ(_U)"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "തിരയുക"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:306 src/gs-details-page.ui:781
+msgid "Source"
+msgstr "ഉറവിടം"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "സോഫ്റ്റ്‍വെയർ റെപ്പോസിറ്ററികൾ"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "ഡിസ്ക് പരിശോധിക്കുക"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:932
+msgid "Network Settings"
+msgstr "ശൃംഖല ക്രമീകരണങ്ങൾ"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "പുനരാരംഭിക്കുക"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "കൂടുതൽ വിവരങ്ങൾ"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4476
+msgid "Local file"
+msgstr "പ്രാദേശിക ഫയൽ"
+
+#: lib/gs-app.c:4523
+msgid "Package"
+msgstr "പാക്കേജ്"
+
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:428
+msgid "Pending"
+msgstr "തീരുമാനിക്കപ്പെടാത്ത"
+
+#: src/gs-app-addon-row.c:102 src/gs-app-row.ui:182 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:87
+msgid "Installed"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യപ്പെട്ടത്"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:106 src/gs-app-row.c:185 src/gs-details-page.c:325
+#: src/gs-third-party-repo-row.c:113
+msgid "Installing"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുന്നു"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:110 src/gs-app-row.c:191 src/gs-repo-row.c:140
+#: src/gs-third-party-repo-row.c:120
+msgid "Removing"
+msgstr "നീക്കം ചെയ്യുന്നു"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "ഫോൾഡർ നാമം"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:240 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:612 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "റദ്ദാക്കുക (_C)"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "ചേര്‍ക്കുക(_A)"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "അപ്ലിക്കേഷൻ ഫോൾഡറിൽ ചേർക്കുക"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:123
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "ആരംഭിക്കുന്ന മോഡ്: ഒന്നുകിൽ 'പുതുക്കലുകൾ', 'പുതുക്കിയത്', 'ഇൻസ്റ്റാൾ ചെയ്തത്' അല്ലെങ്കിൽ 'അവലോകനം'"
+
+#: src/gs-application.c:123
+msgid "MODE"
+msgstr "സമ്പ്രദായം"
+
+#: src/gs-application.c:125
+msgid "Search for applications"
+msgstr "ആപ്ലിക്കേഷനുകൾക്കായി തിരയുക"
+
+#: src/gs-application.c:125
+msgid "SEARCH"
+msgstr "തിരയുക"
+
+#: src/gs-application.c:127
+msgid "Show application details (using application ID)"
+msgstr "അപ്ലിക്കേഷൻ വിശദാംശങ്ങൾ കാണിക്കുക (അപ്ലിക്കേഷൻ ഐഡി ഉപയോഗിച്ച്)"
+
+#: src/gs-application.c:127 src/gs-application.c:131
+msgid "ID"
+msgstr "ഐഡി"
+
+#: src/gs-application.c:129
+msgid "Show application details (using package name)"
+msgstr "അപ്ലിക്കേഷൻ വിശദാംശങ്ങൾ കാണിക്കുക (പാക്കേജ് പേര് ഉപയോഗിച്ച്)"
+
+#: src/gs-application.c:129
+msgid "PKGNAME"
+msgstr "പാക്കേജ് നാമം"
+
+#: src/gs-application.c:131
+msgid "Install the application (using application ID)"
+msgstr "അപ്ലിക്കേഷൻ ഇൻസ്റ്റാൾ ചെയ്യുക (അപ്ലിക്കേഷൻ ഐഡി ഉപയോഗിച്ച്)"
+
+#: src/gs-application.c:133
+msgid "Open a local package file"
+msgstr "ഒരു ലോക്കൽ പാക്കേജ് ഫയൽ തുറക്കുക"
+
+#: src/gs-application.c:133
+msgid "FILENAME"
+msgstr "ഫയൽ നാമം"
+
+#: src/gs-application.c:135
+msgid "The kind of interaction expected for this action: either ‘none’, ‘notify’, or ‘full’"
+msgstr "ഈ പ്രവർത്തനത്തിന് പ്രതീക്ഷിക്കുന്ന പ്രവർത്തനരീതി: 'ഒന്നുമില്ല', 'അറിയിക്കുക', അല്ലെങ്കിൽ 'പൂർണ്ണമായി'"
+
+#: src/gs-application.c:138
+msgid "Show verbose debugging information"
+msgstr "വെർബോസ് ഡീബഗ്ഗിംഗ് വിവരങ്ങൾ കാണിക്കുക"
+
+#: src/gs-application.c:140
+msgid "Installs any pending updates in the background"
+msgstr "പശ്ചാത്തലത്തിൽ തീരാത്ത ഏതെങ്കിലും അപ്ഡേറ്റുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: src/gs-application.c:142
+msgid "Show update preferences"
+msgstr "മുന്‍ഗണനാ പുതുക്കുലുകൾ പ്രദർശിപ്പിക്കുക"
+
+#: src/gs-application.c:144
+msgid "Quit the running instance"
+msgstr "പ്രവർത്തിപ്പിക്കുന്ന സംഭവം ഉപേക്ഷിക്കുക"
+
+#: src/gs-application.c:146
+msgid "Prefer local file sources to AppStream"
+msgstr "ആപ്പ്സ്ട്രീമിലേക്ക് പ്രാദേശിക ഫയൽ ഉറവിടങ്ങൾ തിരഞ്ഞെടുക്കുക"
+
+#: src/gs-application.c:148
+msgid "Show version number"
+msgstr "പതിപ്പ് നമ്പർ കാണിക്കുക"
+
+#: src/gs-application.c:342
+msgid "translator-credits"
+msgstr "പരിഭാഷക-അംഗീകാരങ്ങൾ"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:349 src/gs-shell.c:1947
+msgid "About %s"
+msgstr "%s സംബന്ധിച്ച്"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:353
+msgid "A nice way to manage the software on your system."
+msgstr "നിങ്ങളുടെ സിസ്റ്റത്തിൽ സോഫ്റ്റ്‌വെയർ കൈകാര്യം ചെയ്യുന്നതിനുള്ള ഒരു നല്ല മാർഗ്ഗം."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:140
+msgid "Visit website"
+msgstr "വെബ്സൈറ്റ് സന്ദർശിക്കുക"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:145
+msgid "Install…"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുക…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:152 src/gs-updates-section.c:441
+msgid "Cancel"
+msgstr "റദ്ദാക്കുക"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:159 src/gs-common.c:285 src/gs-page.c:596
+msgid "Install"
+msgstr "ഇൻസ്റ്റാൾ"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:166
+msgid "Update"
+msgstr "പുതുക്കുക"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:170 src/gs-app-row.c:179 src/gs-page.c:755
+#: src/gs-repos-dialog.c:336
+msgid "Remove"
+msgstr "നീക്കം ചെയ്യുക"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:296
+msgid "Device cannot be used during update."
+msgstr "അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ ഉപകരണം ഉപയോഗിക്കാൻ കഴിയില്ല."
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:69
+msgid "To continue you need to sign in."
+msgstr "തുടരുന്നതിന് നിങ്ങൾ സൈൻ ഇൻ ചെയ്യേണ്ടതുണ്ട്."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:73
+msgid "To continue you need to sign in to %s."
+msgstr "തുടരുന്നതിന് നിങ്ങൾ %s ൽ സൈൻ ഇൻ ചെയ്യേണ്ടതുണ്ട്."
+
+#: src/gs-auth-dialog.ui:57
+msgid "Email address"
+msgstr "ഇമെയിൽ വിലാസം"
+
+#: src/gs-auth-dialog.ui:81
+msgid "I have an account already"
+msgstr "എനിക്ക് ഇതിനകം ഒരു അക്കൗണ്ട് ഉണ്ട്"
+
+#: src/gs-auth-dialog.ui:98
+msgid "Password"
+msgstr "പാസ്‌വേർഡ്"
+
+#: src/gs-auth-dialog.ui:122
+msgid "I want to register for an account now"
+msgstr "എനിക്ക് ഇപ്പോൾ ഒരു അക്കൗണ്ടിനായി രജിസ്റ്റർ ചെയ്യണം"
+
+#: src/gs-auth-dialog.ui:138
+msgid "I have forgotten my password"
+msgstr "ഞാൻ എന്റെ പാസ്‌വേർഡ് മറന്നുപോയി"
+
+#: src/gs-auth-dialog.ui:163
+msgid "Sign in automatically next time"
+msgstr "അടുത്ത തവണ സ്വമേധയാ പ്രവേശിക്കുക"
+
+#: src/gs-auth-dialog.ui:189
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "രണ്ട്-വസ്തുത പ്രാമാണീകരണത്തിനായി നിങ്ങളുടെ ഒറ്റത്തവണ പിൻ നൽകുക."
+
+#: src/gs-auth-dialog.ui:201
+msgid "PIN"
+msgstr "പിൻ"
+
+#: src/gs-auth-dialog.ui:284
+msgid "Authenticate"
+msgstr "സാധുവാക്കുക"
+
+#: src/gs-auth-dialog.ui:296
+msgid "Continue"
+msgstr "തുടരുക"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:194
+msgid "Other"
+msgstr "മറ്റുള്ളവ"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:199
+msgid "All"
+msgstr "മുഴുവന്‍"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:203
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:494
+msgid "Featured %s"
+msgstr "സവിശേഷമാക്കപെട്ട %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26
+msgid "Top Rated"
+msgstr "ഉയർന്ന മൂല്യമുള്ളവ"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-editor.ui:225
+#: src/gs-origin-popover-row.c:63
+msgid "Name"
+msgstr "പേര്"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:890
+msgid "Extension Settings"
+msgstr "വിപുലീകരണ ക്രമീകരണങ്ങൾ"
+
+#: src/gs-category-page.ui:136
+msgid "Extensions are used at your own risk. If you have any system problems, it is recommended to disable them."
+msgstr "നിങ്ങളുടെ സ്വന്തം ഉത്തരവാദിത്തത്തിൽ വിപുലീകരണങ്ങൾ ഉപയോഗിക്കും. നിങ്ങൾക്ക് സിസ്റ്റം സംബന്ധിയായ പ്രശ്നങ്ങൾ ഉണ്ടെങ്കിൽ, അവ പ്രവർത്തന രഹിതമാക്കുന്നത് ഉത്തമം."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "പ്രദര്‍ശിപ്പിക്കുക"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "ഉപവിഭാഗങ്ങളുടെ അരിച്ചെടുത്ത പട്ടിക"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "തരം"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "ഉപവിഭാഗങ്ങൾ അടുക്കിവയ്ക്കുന്ന പട്ടിക"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:204
+msgid "Please enter a number from 1 to %u: "
+msgstr "ദയവായി 1 മുതൽ %u വരെയുള്ള ഒരു നമ്പർ നൽകുക: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:267
+msgid "Choose an application:"
+msgstr "ഒരു അപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:137
+msgid "OS updates are now installed"
+msgstr "OS പുതുക്കലുകൾ ഇപ്പോൾ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:140
+msgid "Recently installed updates are available to review"
+msgstr "സമീപകാലത്ത് ഇൻസ്റ്റാൾ ചെയ്ത പുതുക്കലുകൾ അവലോകനം ചെയ്യാൻ ലഭ്യമാണ്"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:145 src/gs-common.c:153
+msgid "%s is now installed"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യപ്പെട്ടു"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:148
+msgid "Application is ready to be used."
+msgstr "ആപ്ലിക്കേഷൻ ഉപയോഗിക്കാൻ തയാറാണ്."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:161
+msgid "Launch"
+msgstr "തുടങ്ങുക"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:219
+msgid "Install Third-Party Software?"
+msgstr "മൂന്നാം-കക്ഷി സോഫ്റ്റ്‌വെയർ ഇൻസ്റ്റാൾ ചെയ്യണോ?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:223 src/gs-repos-dialog.c:247
+msgid "Enable Third-Party Software Repository?"
+msgstr "മൂന്നാം-കക്ഷി സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററി പ്രാപ്തമാക്കണോ?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:239
+msgid "%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr "%s എന്നത് <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\"> സ്വതന്ത്രവും സ്വതന്ത്രവുമായ സോഫ്റ്റ്വെയർ </a> അല്ല, കൂടാതെ അത് \"%s\" ആണ് നൽകുന്നത്."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:249
+msgid "%s is provided by “%s”."
+msgstr "%s നൽകുന്നത് \"%s\" ആണ്."
+
+#: src/gs-common.c:258
+msgid "This software repository must be enabled to continue installation."
+msgstr "ഇൻസ്റ്റാളേഷൻ തുടരുന്നതിന് ഈ സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററി പ്രാപ്തമാക്കണം."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "ചില രാജ്യങ്ങളിൽ %s ഇൻസ്റ്റാൾ ചെയ്യുകയോ ഉപയോഗിക്കുകയോ ചെയ്യുന്നത് നിയമവിരുദ്ധമാണ്."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:274
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "ചില രാജ്യങ്ങളിൽ ഈ കോഡെക് ഇൻസ്റ്റാൾ ചെയ്യുകയോ ഉപയോഗിക്കുകയോ ചെയ്യുന്നത് നിയമവിരുദ്ധമാണ്."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:281
+msgid "Don’t Warn Again"
+msgstr "വീണ്ടും മുന്നറിയിപ്പ് നൽകരുത്"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:290
+msgid "Enable and Install"
+msgstr "പ്രാപ്തമാക്കി ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:435
+msgid "Detailed errors from the package manager follow:"
+msgstr "പാക്കേജ് കാര്യസ്ഥനിൽ നിന്നുള്ള വിശദമായ പിശകുകൾ:"
+
+#: src/gs-common.c:454 src/gs-details-page.ui:417
+msgid "Details"
+msgstr "വിശദാംശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "കാർട്ടൂൺ അക്രമം പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "സുരക്ഷിതമല്ലാത്ത സാഹചര്യങ്ങളിലെ കാർട്ടൂൺ പ്രതീകങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "ആക്രമണ സംഘർഷത്താലുള്ള കാർട്ടൂൺ പ്രതീകങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "കാർട്ടൂൺ പ്രതീകങ്ങൾ ഉൾപ്പെടുന്ന വിവരണരൂപേണയുള്ള അക്രമം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "കാൽപനിക അക്രമം പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "സുരക്ഷിതമല്ലാത്ത സാഹചര്യങ്ങളിൽ പ്രതീകങ്ങൾ യാഥാർഥ്യത്തിൽ നിന്ന് എളുപ്പത്തിൽ വേർതിരിച്ചറിയാൻ കഴിയുന്നതാണ്"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "ആക്രമണകാരികളായ പ്രതീകങ്ങൾ യാഥാർഥ്യത്തിൽ നിന്ന് എളുപ്പത്തിൽ വേർതിരിച്ചറിയാൻ കഴിയുന്നതാണ്"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "യാഥാർത്ഥ്യത്തെ തിരിച്ചറിയാൻ വിവരണരൂപേണയുള്ള അതിക്രമം എളുപ്പത്തിൽ വേർതിരിച്ചറിയാൻ കഴിയും"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "യാഥാർഥ്യമായ അക്രമം പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "സുരക്ഷിതമല്ലാത്ത സാഹചര്യങ്ങളിലെ യാഥാസ്ഥിതിക സൗമ്യ പ്രതീകങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "ആക്രമണാത്മക സംഘർഷത്തിൽ യാഥാസ്ഥിതിക കഥാപാത്രങ്ങളുടെ ചിത്രീകരണം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "യഥാർത്ഥ പ്രതീകങ്ങൾ ഉൾപ്പെടുന്ന വിവരണരൂപേണയുള്ള അക്രമം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "രക്തച്ചൊരിച്ചില്‍ പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "അയാഥാര്‍ത്ഥ്യമായ രക്തച്ചൊരിച്ചില്‍"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "യഥാർത്ഥ രക്തച്ചൊരിച്ചിൽ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "രക്തച്ചൊരിച്ചിലെ പ്രതിബന്ധം, ശരീര ഭാഗങ്ങളുടെ അവയവഛേദം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "ലൈംഗിക അതിക്രമം പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "ബലാത്സംഗം അല്ലെങ്കിൽ മറ്റ് അക്രമാസക്തമായ ലൈംഗിക പെരുമാറ്റം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "മദ്യത്തെ പറ്റി പരാമർശിച്ചിട്ടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "ലഹരിപാനീയങ്ങൾക്കുള്ള പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "ലഹരിപാനീയങ്ങളുടെ ഉപയോഗം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "നിയമവിരുദ്ധമായ ലഹരിമരുന്നുകളെ പറ്റിയുള്ള പരാമർശങ്ങളൊന്നുമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "നിയമവിരുദ്ധമായ ലഹരിമരുന്നുകളെ പറ്റിയുള്ള പരാമർശം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "അനധികൃത മരുന്നുകളുടെ ഉപയോഗം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "പുകയില ഉത്പന്നങ്ങൾക്കുള്ള പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "പുകയില ഉൽപന്നങ്ങളുടെ ഉപയോഗം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "ഏത് തരത്തിലുള്ള നഗ്നതയും പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "ലഘു കലാപരമായ നഗ്നത"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "നീണ്ട നഗ്നത"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "ലൈംഗിക സ്വഭാവം സംബന്ധിച്ച പരാമർശങ്ങളോ ചിത്രങ്ങളോ ഇല്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "പ്രകോപനപരമായ പരാമർശങ്ങൾ അല്ലെങ്കിൽ ചിത്രീകരണങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "ലൈംഗിക പരാമർശങ്ങൾ അല്ലെങ്കിൽ ചിത്രീകരണങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "വിവരണരൂപേണയുള്ള ലൈംഗിക പെരുമാറ്റം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "ഒരു തരത്തിലുള്ള അശ്ലീലവും ഇല്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "ചെറുതോ അപൂര്‍വ്വമായതോ അശ്ലീലങ്ങളുടെ ഉപയോഗം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "അശ്ലീലത്തിൻറെ മിതമായ ഉപയോഗം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "വൃത്തികെട്ട അല്ലെങ്കിൽ പതിവായി ഉപയോഗിക്കുന്ന അശ്ലീലം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "അനുചിതമായ ഹാസ്യം പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "തരം താണ ഹാസ്യം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "അസഭ്യമായ അല്ലെങ്കിൽ ബാത്ത്റൂം ഹാസ്യം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "പക്വമായ അല്ലെങ്കിൽ ലൈംഗിക ഹാസ്യം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "ഏതെങ്കിലും തരത്തിലുള്ള വിവേചന ഭാഷയില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "ഒരു പ്രത്യേക കൂട്ടത്തോടുള്ള അവഗണന"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "വൈകാരികമായ ദോഷം ഉണ്ടാക്കുന്നതിന് രൂപകൽപ്പന ചെയ്തിരിക്കുന്ന വിവേചനങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "ലിംഗഭേദം, ലൈംഗികത, വർഗം അല്ലെങ്കിൽ മതം എന്നിവയെ അടിസ്ഥാനമാക്കിയുള്ള വിവേചനം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "ഒരു തരത്തിലുള്ള പരസ്യവും പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "ഉൽപന്നനിയമനം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "നിർദ്ദിഷ്ട ബ്രാൻഡുകൾ അല്ലെങ്കിൽ വ്യാപാരമുദ്ര ഉല്പന്നങ്ങൾക്ക് വ്യക്തമായ പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "ഉപയോക്താക്കൾക്ക് നിർദ്ദിഷ്ട യഥാർത്ഥ ഇനങ്ങൾ വാങ്ങാൻ പ്രോത്സാഹിപ്പിക്കുന്നു"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "ഒരു തരത്തിലുള്ള ചൂതാട്ടവുമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "അടയാളങ്ങൾ അല്ലെങ്കിൽ വായ്‌പ്പ ഉപയോഗിച്ചുള്ള ആകസ്‌മികമായ ഇനങ്ങളിലെ ചൂതാട്ടം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "യഥാർത്ഥമല്ലാത്ത പണം ഉപയോഗിച്ച് ചൂതാട്ടം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "യഥാർത്ഥ പണം ഉപയോഗിച്ച് ചൂതാട്ടം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "പണം ചെലവഴിക്കാൻ ശേഷിയില്ല"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Users are encouraged to donate real money"
+msgstr "യഥാർത്ഥ പണം സംഭാവന ചെയ്യാൻ ഉപയോക്താക്കളെ പ്രോത്സാഹിപ്പിക്കുന്നു"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "Ability to spend real money in-game"
+msgstr "കളിയിൽ യഥാർത്ഥ പണം ചെലവാക്കാനുള്ള കഴിവ്"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "No way to chat with other users"
+msgstr "മറ്റ് ഉപയോക്താക്കളുമായി ചാറ്റ് ചെയ്യുന്നതിനുള്ള മാർഗമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "User-to-user game interactions without chat functionality"
+msgstr "സംഭാഷണ പ്രവർത്തനം കൂടാതെ ഉപയോക്താവിൽ നിന്നും ഉപയോക്തവിലേക്കുള്ള മത്സര ഇടപെടലുകൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Moderated chat functionality between users"
+msgstr "ഉപയോക്താക്കൾക്കിടയിലുള്ള മിതമായ സംഭാഷണ പ്രവർത്തനം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Uncontrolled chat functionality between users"
+msgstr "ഉപയോക്താക്കൾക്കിടയിൽ നിയന്ത്രിക്കാത്ത സംഭാഷണ പ്രവർത്തനം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "No way to talk with other users"
+msgstr "മറ്റ് ഉപയോക്താക്കളുമായി സംസാരിക്കാൻ യാതൊരു വഴിയുമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "ഉപയോക്താക്കളെ തമ്മിൽ നിയന്ത്രിക്കാത്ത ഓഡിയോ അല്ലെങ്കിൽ വീഡിയോ ചാറ്റ് പ്രവർത്തനം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "No sharing of social network usernames or email addresses"
+msgstr "സാമൂഹിക ശൃംഖലകളിലെ ഉപയോക്തൃനാമങ്ങൾ അല്ലെങ്കിൽ ഇമെയിൽ വിലാസങ്ങൾ പങ്കിടരുത്"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "Sharing social network usernames or email addresses"
+msgstr "സാമൂഹിക ശൃംഖലകളിലെ ഉപയോക്തൃനാമങ്ങൾ അല്ലെങ്കിൽ ഇമെയിൽ വിലാസങ്ങൾ പങ്കിടുന്നു"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "No sharing of user information with 3rd parties"
+msgstr "മൂന്നാം കക്ഷികളുമായി ഉപയോക്തൃ വിവരങ്ങളുടെ പങ്കാളിത്തം ഒന്നുമില്ല"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Checking for the latest application version"
+msgstr "ഏറ്റവും പുതിയ അപ്ലിക്കേഷൻ പതിപ്പിനായി പരിശോധിക്കുന്നു"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "മറ്റുള്ളവർക്ക് തിരിച്ചറിയാത്ത രീതിയിൽ ഡയഗണോസ്റ്റിക് വിവരം പങ്കുവെയ്ക്കുന്നു"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:276
+msgid "Sharing information that lets others identify the user"
+msgstr "മറ്റുള്ളവരെ തിരിച്ചറിയാൻ അനുവദിക്കുന്ന വിവരങ്ങൾ പങ്കുവെക്കൽ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No sharing of physical location to other users"
+msgstr "മറ്റ് ഉപയോക്താക്കൾക്ക് ഭൗതിക സ്ഥാനം പങ്കിടരുത്"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:282
+msgid "Sharing physical location to other users"
+msgstr "മറ്റ് ഉപയോക്താക്കൾക്ക് ഭൗതിക സ്ഥാനം പങ്കിടൽ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "No references to homosexuality"
+msgstr "സ്വവർഗാനുരാഗത്തെക്കുറിച്ച് പരാമർശങ്ങളില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "Indirect references to homosexuality"
+msgstr "സ്വവർഗ്ഗരതിയെക്കുറിച്ചുള്ള പരോക്ഷ പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:293
+msgid "Kissing between people of the same gender"
+msgstr "ഒരേ ലിംഗത്തിലുള്ള ആളുകൾ തമ്മിലുള്ള ചുംബനം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "ഒരേ ലിംഗത്തിലുള്ള ആളുകൾ തമ്മിലുള്ള വിവരണരൂപേനയുള്ള ലൈംഗിക പെരുമാറ്റം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:299
+msgid "No references to prostitution"
+msgstr "വേശ്യാവൃത്തിയെ പറ്റി പരാമർശങ്ങളൊന്നുമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:302
+msgid "Indirect references to prostitution"
+msgstr "വേശ്യാവൃത്തിക്ക് പരോക്ഷ സൂചനകൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references of prostitution"
+msgstr "വ്യഭിചാരം സംബന്ധിച്ച നേരിട്ടുള്ള പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:308
+msgid "Graphic depictions of the act of prostitution"
+msgstr "വേശ്യാവൃത്തിയെ പറ്റിയുള്ള വിവരണരൂപേനയുള്ള ചിത്രീകരണം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:311
+msgid "No references to adultery"
+msgstr "വ്യഭിചാരത്തെ പറ്റി പരാമർശങ്ങളില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "Indirect references to adultery"
+msgstr "വ്യഭിചാരത്തെക്കുറിച്ച് പരോക്ഷ സൂചനകൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Direct references of adultery"
+msgstr "വ്യഭിചാരത്തെക്കുറിച്ച് നേരിട്ടുള്ള പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:320
+msgid "Graphic depictions of the act of adultery"
+msgstr "വ്യഭിചാരത്തെ പറ്റിയുള്ള വിവരണരൂപേനയുള്ള ചിത്രീകരണം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:323
+msgid "No sexualized characters"
+msgstr "ലൈംഗികതയുള്ള പ്രതീകങ്ങൾ പാടില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Scantily clad human characters"
+msgstr "നാമമാത്രമായ വസ്ത്രമുള്ള മനുഷ്യ പ്രതീകങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:329
+msgid "Overtly sexualized human characters"
+msgstr "അതിലൈംഗികതയുള്ള മനുഷ്യ പ്രതീകങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:332
+msgid "No references to desecration"
+msgstr "ഹീനതയെ പറ്റിയുള്ള പരാമർശങ്ങളൊന്നുമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Depictions or references to historical desecration"
+msgstr "ചരിത്രാപരമായ ഹീനതയെ പറ്റിയുള്ള പ്രതീകങ്ങളും പരാമർശങ്ങളും"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:338
+msgid "Depictions of modern-day human desecration"
+msgstr "ആധുനിക മനുഷ്യഹീനതയെ പറ്റിയുള്ള ചിത്രീകരണം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of modern-day desecration"
+msgstr "ആധുനിക ദിനാചരണത്തിൻ്റെ വിവരണരൂപേനയുള്ള ചിത്രീകരണം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No visible dead human remains"
+msgstr "മരിച്ചവരുടെ മൃതദേഹങ്ങൾ കാണാതിരിക്കൽ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:347
+msgid "Visible dead human remains"
+msgstr "മരിച്ചവരുടെ അവശിഷ്ടങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Dead human remains that are exposed to the elements"
+msgstr "അംഗഭംഗം സംഭവിച്ച മനുഷ്യ മൃതദേഹങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:353
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "മനുഷ്യ ശരീരം നശിപ്പിക്കുന്നതിൻ്റെ വിവരണരൂപേനയുള്ള ചിത്രീകരണം"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:356
+msgid "No references to slavery"
+msgstr "അടിമത്തെ പറ്റി പരാമർശമില്ല"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:359
+msgid "Depictions or references to historical slavery"
+msgstr "ചരിത്രപരമായ അടിമത്തത്തോടുള്ള പ്രതീകങ്ങൾ അല്ലെങ്കിൽ പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:362
+msgid "Depictions of modern-day slavery"
+msgstr "ആധുനിക കാലഘട്ടത്തിലെ അടിമത്തത്തെ പറ്റിയുള്ള പരാമർശങ്ങൾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:365
+msgid "Graphic depictions of modern-day slavery"
+msgstr "ആധുനിക കാലഘട്ടത്തിലെ അടിമത്തത്തിൻ്റെ വിവരണരൂപേനയുള്ള ചിത്രീകരണം"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:295
+msgid "An application"
+msgstr "ഒരു അപ്ലിക്കേഷൻ"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:301
+msgid "%s is requesting additional file format support."
+msgstr "%s കൂടുതൽ ഫയൽ ഘടനക്ക് വേണ്ടിയുള്ള പിന്തുണ അഭ്യർത്ഥിക്കുന്നു."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:303
+msgid "Additional MIME Types Required"
+msgstr "കൂടുതൽ MIME തരങ്ങൾ ആവശ്യമാണ്"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:307
+msgid "%s is requesting additional fonts."
+msgstr "%s കൂടുതൽ ഫോണ്ടുകൾ അഭ്യർത്ഥിക്കുന്നു."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:309
+msgid "Additional Fonts Required"
+msgstr "കൂടുതൽ ഫോണ്ടുകൾ ആവശ്യമാണ്"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:313
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s കൂടുതൽ മൾട്ടിമീഡിയ കോഡെക്കുകൾ അഭ്യർത്ഥിക്കുന്നു."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:315
+msgid "Additional Multimedia Codecs Required"
+msgstr "അധിക മൾട്ടിമീഡിയ കോഡെക്കുകൾ ആവശ്യമാണ്"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:319
+msgid "%s is requesting additional printer drivers."
+msgstr "%s കൂടുതൽ പ്രിന്റർ ഡ്രൈവറുകൾ ആവശ്യപ്പെടുന്നു."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:321
+msgid "Additional Printer Drivers Required"
+msgstr "അധിക പ്രിന്റർ ഡ്രൈവറുകൾ ആവശ്യമാണ്"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:325
+msgid "%s is requesting additional packages."
+msgstr "%s കൂടുതൽ പാക്കേജുകൾ ആവശ്യപ്പെടുന്നു."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:327
+msgid "Additional Packages Required"
+msgstr "കൂടുതൽ പാക്കേജുകൾ ആവശ്യമുണ്ട്"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:336
+msgid "Find in Software"
+msgstr "സോഫ്റ്റ്‌വെയറിൽ കണ്ടെത്തുക"
+
+#: src/gs-details-page.c:320
+msgid "Removing…"
+msgstr "നീക്കം ചെയ്യുന്നു…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:339
+msgid "Pending installation…"
+msgstr "ഇൻസ്റ്റാളേഷൻ ശേഷിക്കുന്നു…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:346
+msgid "Pending update…"
+msgstr "പുതുക്കലുകൾ ശേഷിക്കുന്നു…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:667
+msgid "This application can only be used when there is an active internet connection."
+msgstr "സജീവ ഇൻറർനെറ്റ് കണക്ഷൻ ലഭ്യമാകുമ്പോൾ മാത്രമേ ഈ അപ്ലിക്കേഷൻ ഉപയോഗിക്കാൻ കഴിയൂ."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:815 src/gs-details-page.c:843
+#: src/gs-details-page.ui:159 src/gs-third-party-repo-row.c:97
+#: src/gs-upgrade-banner.ui:122
+msgid "_Install"
+msgstr "ഇൻസ്റ്റാൾ(_I)"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:848
+msgid "_Update"
+msgstr "പുതുക്കൽ(_U)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:861 src/gs-third-party-repo-row.c:89
+msgid "_Install…"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുക…(_I)"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:895
+msgid "_Launch"
+msgstr "തുടങ്ങുക(_L)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:920 src/gs-details-page.ui:184
+msgid "_Remove"
+msgstr "നീക്കം ചെയ്യുക(_R)"
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1050
+msgctxt "version"
+msgid "Unknown"
+msgstr "അജ്ഞാതം"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1063
+msgctxt "updated"
+msgid "Never"
+msgstr "ഒരിക്കലുമില്ല"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1111
+msgctxt "origin"
+msgid "Unknown"
+msgstr "അജ്ഞാതം"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1504
+msgid "You need internet access to write a review"
+msgstr "ഒരു അവലോകനം എഴുതാൻ നിങ്ങൾക്ക് ഇന്റർനെറ്റ് ലഭ്യത ആവശ്യമാണ്"
+
+#: src/gs-details-page.c:1693
+msgid "Unable to find “%s”"
+msgstr "\"%s\" കണ്ടെത്താൻ കഴിയുന്നില്ല"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2230
+msgid "Public domain"
+msgstr "പൊതുസഞ്ചയം"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2233
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://ml.wikipedia.org/wiki/പൊതുസഞ്ചയം"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2240
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2250 src/gs-details-page.ui:1143
+msgid "Free Software"
+msgstr "സ്വതന്ത്ര സോഫ്റ്റ്‌വെയർ"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2307
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "ഉപയോക്താക്കൾക്ക് ഇനിപ്പറയുന്ന ലൈസൻസിനാൽ നിയന്ത്രിക്കപ്പെട്ടിരിക്കുന്നു:"
+msgstr[1] "ഉപയോക്താക്കൾക്ക് ഇനിപ്പറയുന്ന ലൈസൻസുകളാൽ നിയന്ത്രിക്കപ്പെട്ടിരിക്കുന്നു:"
+
+#: src/gs-details-page.c:2334 src/gs-details-page.ui:1215
+msgid "More information"
+msgstr "കൂടുതൽ വിവരങ്ങൾ"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "വിശദാംശങ്ങളുടെ പേജ്"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:251
+msgid "_Add shortcut"
+msgstr "കുറുക്കുവഴി ചേർക്കുക(_A)"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:262
+msgid "Re_move shortcut"
+msgstr "കുറുക്കുവഴി നീക്കം ചെയ്യുക"
+
+#: src/gs-details-page.ui:336
+msgid "No screenshot provided"
+msgstr "സ്ക്രീൻഷോട്ട് നൽകിയിട്ടില്ല"
+
+#: src/gs-details-page.ui:356
+msgid "Software Repository Included"
+msgstr "സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററി അടങ്ങിയിരിക്കുന്നു"
+
+#: src/gs-details-page.ui:357
+msgid "This application includes a software repository which provides updates, as well as access to other software."
+msgstr "ഈ ആപ്ലിക്കേഷൻ പുതുക്കലുകൾ നൽകുന്ന ഒരു സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററിയും മറ്റ് സോഫ്റ്റ്‌വെയറിലേയ്ക്കുള്ള പ്രവേശനവും ഉൾപ്പെടുത്തുന്നു."
+
+#: src/gs-details-page.ui:364
+msgid "No Software Repository Included"
+msgstr "സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററി അടങ്ങിയിട്ടില്ല"
+
+#: src/gs-details-page.ui:365
+msgid "This application does not include a software repository. It will not be updated with new versions."
+msgstr "ഈ ആപ്ലിക്കേഷനിൽ സോഫ്റ്റ്‌വെയർ റിപോസിറ്ററി ഉൾപ്പെടുന്നില്ല. പുതിയ പതിപ്പുകൾ ഉപയോഗിച്ച് ഇത് പുതുക്കുവാനും പറ്റില്ല."
+
+#: src/gs-details-page.ui:373
+msgid "This software is already provided by your distribution and should not be replaced."
+msgstr "ഈ സോഫ്റ്റ്‌വെയർ ഇതിനകം നിങ്ങളുടെ വിതരണത്തിലൂടെ നൽകിയിട്ടുണ്ട്, പകരം മാറ്റി വയ്ക്കരുത്."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:380
+msgid "Software Repository Identified"
+msgstr "സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററി തിരിച്ചറിയപ്പെട്ടു"
+
+#: src/gs-details-page.ui:381
+msgid "Adding this software repository will give you access to additional software and upgrades."
+msgstr "ഈ സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററി ചേർക്കുന്നത് നിങ്ങൾക്ക് കൂടുതൽ സോഫ്റ്റ്‌വെയറുകളിലേക്കും നവീകരണങ്ങളിലേക്കും പ്രവേശനം നൽകും."
+
+#: src/gs-details-page.ui:382
+msgid "Only use software repositories that you trust."
+msgstr "നിങ്ങൾ വിശ്വാസമുള്ള സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററികൾ മാത്രം ഉപയോഗിക്കുക."
+
+#: src/gs-details-page.ui:392
+msgid "_Website"
+msgstr "വെബ്സൈറ്റ്(_W)"
+
+#: src/gs-details-page.ui:401
+msgid "_Donate"
+msgstr "സംഭാവനചെയ്യുക(_D)"
+
+#: src/gs-details-page.ui:511
+msgid "Localized in your Language"
+msgstr "നിങ്ങളുടെ ഭാഷയിൽ പ്രാദേശികവത്കരിക്കുക"
+
+#: src/gs-details-page.ui:522
+msgid "Documentation"
+msgstr "ആധാരമാക്കുക"
+
+#: src/gs-details-page.ui:533
+msgid "Release Activity"
+msgstr "പ്രസിദ്ധീകരണ പ്രവർത്തനം"
+
+#: src/gs-details-page.ui:544
+msgid "System Integration"
+msgstr "സിസ്റ്റം ഏകീകരണം"
+
+#: src/gs-details-page.ui:555
+msgid "Sandboxed"
+msgstr "സാൻഡ് ബോക്സ്"
+
+#: src/gs-details-page.ui:574
+msgid "Version"
+msgstr "പതിപ്പ്"
+
+#: src/gs-details-page.ui:610
+msgid "Age Rating"
+msgstr "പ്രായനിർണയം"
+
+#: src/gs-details-page.ui:648
+msgid "Updated"
+msgstr "പുതുക്കിയത്"
+
+#: src/gs-details-page.ui:682
+msgid "Category"
+msgstr "വിഭാഗം"
+
+#: src/gs-details-page.ui:719
+msgid "Installed Size"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്ത വലുപ്പം"
+
+#: src/gs-details-page.ui:750
+msgid "Download Size"
+msgstr "ഡൗൺലോഡ് വലിപ്പം"
+
+#: src/gs-details-page.ui:812
+msgid "Developer"
+msgstr "ഡെവലപ്പർ"
+
+#: src/gs-details-page.ui:857
+msgid "License"
+msgstr "ലൈസൻസ്"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:876
+msgid "Free"
+msgstr "സ്വതന്ത്രമായ"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:888
+msgid "Proprietary"
+msgstr "കുത്തക"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:900 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "അജ്ഞാതം"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:938 src/gs-installed-page.c:492
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "ആഡ്-ഓണുകൾ"
+
+#: src/gs-details-page.ui:950
+msgid "Selected add-ons will be installed with the application."
+msgstr "തിരഞ്ഞെടുത്ത ആഡ്-ഓണുകൾ അപ്ലിക്കേഷൻ ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യപ്പെടും."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:988
+msgid "Reviews"
+msgstr "അവലോകനങ്ങൾ"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1006
+msgid "_Write a Review"
+msgstr "ഒരു അവലോകനം എഴുതുക(_W)"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1027
+msgid "_Show More"
+msgstr "കൂടുതൽ കാണിക്കുക(_S)"
+
+#: src/gs-details-page.ui:1154
+msgid "This means that the software can be freely run, copied, distributed, studied and modified."
+msgstr "സോഫ്റ്റ്‌വെയർ സ്വതന്ത്രമായി പ്രവർത്തിപ്പിക്കാനും പകർത്താനും വിതരണം ചെയ്യാനും പഠിക്കാനും പരിഷ്കരിക്കാനും കഴിയുമെന്നാണ് ഇതിനർത്ഥം."
+
+#: src/gs-details-page.ui:1194
+msgid "Proprietary Software"
+msgstr "കുത്തക സോഫ്റ്റ്‌വെയർ"
+
+#: src/gs-details-page.ui:1205
+msgid "This means that the software is owned by an individual or a company. There are often restrictions on its use and its source code cannot usually be accessed."
+msgstr "ഇതിനർത്ഥം സോഫ്റ്റ്‌വെയർ ഒരു വ്യക്തിയുടെയോ അല്ലെങ്കിൽ കമ്പനിയുടെയോ ഉടമസ്ഥതയിൽ ആണെന്നാണ്. ഇതിന്റെ ഉപയോഗത്തിൽ പലപ്പോഴും നിയന്ത്രണങ്ങൾ ഉണ്ട്, ഇതിൻറെ സോഴ്സ് കോഡ് സാധാരണയായി ആക്സസ് ചെയ്യാൻ കഴിയില്ല."
+
+#: src/gs-details-page.ui:1237
+msgid "Unknown Software License"
+msgstr "അജ്ഞാത സോഫ്റ്റ്‌വെയർ ലൈസൻസ്"
+
+#: src/gs-details-page.ui:1248
+msgid "The license terms of this software are unknown."
+msgstr "ഈ സോഫ്റ്റ്‌വെയറിന്റെ ലൈസൻസ് നിബന്ധനകൾ അജ്ഞാതമാണ്."
+
+#: src/gs-details-page.ui:1268
+msgid "The application was rated this way because it features:"
+msgstr "ഈ സവിശേഷത ഉള്ളതിനാൽ ഈ അപ്ലിക്കേഷൻ മൂല്യനിർണയം ചെയ്തു:"
+
+#: src/gs-details-page.ui:1282
+msgid "No details were available for this rating."
+msgstr "ഈ നിർണയത്തെ സംബന്ധിച്ച വിശദാംശങ്ങൾ ലഭ്യമല്ല."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "സിഎസ്എസ് സാധുതയുള്ളതാണെന് ശരി വെച്ചു!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "ഫയൽ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "മാറ്റങ്ങൾ സംരക്ഷിച്ചിട്ടില്ല"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "അപ്ലിക്കേഷൻ പട്ടിക ഇതിനകം ലോഡുചെയ്തു."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "പ്രമാണങ്ങൾ ലയിപ്പിക്കുക"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "മാറ്റങ്ങൾ ഒഴിവാക്കുക"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "ആപ്പ്സ്ട്രീം ഫയൽ തുറക്കുക"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "തുറക്കുക(_O)"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "സൂക്ഷിക്കുക (_S)"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "ഫയൽ സംരക്ഷിക്കുന്നതിൽ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+msgid "%s banner design deleted."
+msgstr "%s അറിയിപ്പുകളുടെ രൂപകൽപന ഇല്ലാതാക്കി."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "അറിയിപ്പുകളുടെ രൂപകല്‌പന നീക്കംചെയ്തു."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "അപ്ലിക്കേഷൻ പട്ടികയിൽ സംരക്ഷിക്കാത്ത മാറ്റങ്ങളുണ്ട്."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr "വെർബോസ് ലോഗിംഗ് ഉപയോഗിക്കുക"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "ഗ്നോം സോഫ്റ്റ്‌വെയർ അറിയിപ്പുകളുടെ രൂപകല്‌പന"
+
+#: src/gs-editor.ui:53 src/gs-editor.ui:62
+msgid "No Designs"
+msgstr "രൂപകല്‌പനകളില്ല"
+
+#: src/gs-editor.ui:137
+msgid "Error message here"
+msgstr "പിശകുകളെ കുറിച്ചുള്ള സന്ദേശം"
+
+#: src/gs-editor.ui:196
+msgid "App ID"
+msgstr "അപ്ലിക്കേഷൻ ഐഡി"
+
+#: src/gs-editor.ui:253 src/gs-review-dialog.ui:109
+msgid "Summary"
+msgstr "സംഗ്രഹം"
+
+#: src/gs-editor.ui:278
+msgid "Editor’s Pick"
+msgstr "എഡിറ്റർ തിരഞ്ഞെടുത്തത്"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:287
+msgid "Category Featured"
+msgstr "സവിശേഷതയുള്ള വിഭാഗം"
+
+#. button in the info bar
+#: src/gs-editor.ui:336
+msgid "Undo"
+msgstr "നിഷ്‌ഫലമാക്കുക"
+
+#: src/gs-editor.ui:371 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "അറിയിപ്പുകളുടെ രൂപകല്‌പന"
+
+#: src/gs-editor.ui:392
+msgid "New Banner"
+msgstr "പുതിയ അറിയിപ്പുകള്‍"
+
+#: src/gs-editor.ui:452
+msgid "Import from file"
+msgstr "ഫയലിൽ നിന്ന് ഇറക്കുമതി ചെയ്യുക"
+
+#: src/gs-editor.ui:461
+msgid "Export to file"
+msgstr "ഫയലിലേക്ക് കയറ്റുമതി ചെയ്യുക"
+
+#: src/gs-editor.ui:470
+msgid "Delete Design"
+msgstr "രൂപകല്‌പന നീക്കം ചെയ്യുക"
+
+#: src/gs-editor.ui:491
+msgid "Featured App"
+msgstr "സവിശേഷതയുള്ള ആപ്പ്"
+
+#: src/gs-editor.ui:500
+msgid "OS Upgrade"
+msgstr "OS നവീകരണം"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:147
+msgid " and "
+msgstr " ഉം "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:150
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:176
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s സ്ക്രിപ്റ്റിനായി ലഭ്യമായ അക്ഷരസഞ്ചയം"
+msgstr[1] "%s സ്ക്രിപ്റ്റിനായി ലഭ്യമായ അക്ഷരസഞ്ചയങ്ങൾ"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:184
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s നായി ലഭ്യമായ സോഫ്റ്റ്‌വെയർ"
+msgstr[1] "%s നായി ലഭ്യമായ സോഫ്റ്റ്‌വെയർ"
+
+#: src/gs-extras-page.c:226
+msgid "Unable to Find Requested Software"
+msgstr "അഭ്യർത്ഥിച്ച സോഫ്റ്റ്‌വെയർ കണ്ടെത്താനായില്ല"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:325
+msgid "%s not found"
+msgstr "%s കണ്ടെത്താനായില്ല"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:329
+msgid "on the website"
+msgstr "വെബ്സൈറ്റിൽ"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:336
+msgid "No applications are available that provide the file %s."
+msgstr "%s ഫയൽ നൽകുന്ന അപ്ലിക്കേഷനുകളൊന്നും ലഭ്യമല്ല."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:351 src/gs-extras-page.c:362
+msgid "Information about %s, as well as options for how to get missing applications might be found %s."
+msgstr "%s സംബന്ധിച്ചുളള വിവരങ്ങൾ, കൂടാതെ ലഭ്യമല്ലാത്ത പ്രയോഗങ്ങൾ എങ്ങനെ ലഭ്യമാകണമെന്നതിനുള്ള ഐച്ഛികങ്ങൾ %s ൽ ലഭ്യമായിരിക്കുന്നു."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:347 src/gs-extras-page.c:369
+msgid "No applications are available for %s support."
+msgstr "%s പിന്തുണയ്ക്കായി അപ്ലിക്കേഷനുകളൊന്നും ലഭ്യമല്ല."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:358
+msgid "%s is not available."
+msgstr "%s ലഭ്യമല്ല."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:373
+msgid "Information about %s, as well as options for how to get an application that can support this format might be found %s."
+msgstr "%s സംബന്ധിച്ചുള്ള വിവരങ്ങളും, ഈ ഘടനയെ പിന്തുണയ്ക്കാൻ കഴിയുന്ന ഒരു ആപ്ലിക്കേഷൻ എങ്ങനെ ലഭിയ്ക്കും എന്നതിനുള്ള ഓപ്ഷനുകൾ %s ൽ കണ്ടേക്കാം."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:380
+msgid "No fonts are available for the %s script support."
+msgstr "%s സ്ക്രിപ്റ്റ് പിന്തുണയ്ക്കായി ഫോണ്ടുകൾ ലഭ്യമല്ല."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:384
+msgid "Information about %s, as well as options for how to get additional fonts might be found %s."
+msgstr "%s സംബന്ധിച്ചുളള വിവരങ്ങൾ, കൂടാതെ എങ്ങനെയാണ് കൂടുതൽ ഫിൽറ്ററുകൾ ലഭ്യമാകുന്നത് എന്നതിന്റെ ഐച്ഛികങ്ങളും %s ൽ കണ്ടേക്കാം."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:391
+msgid "No addon codecs are available for the %s format."
+msgstr "%s ഘടനക്കായി ആഡ്-ഓൺ കോഡെക്കുകൾ ലഭ്യമല്ല."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:395
+msgid "Information about %s, as well as options for how to get a codec that can play this format might be found %s."
+msgstr "%s സംബന്ധിച്ചുള്ള വിവരങ്ങളും, ഈ ഘടന എങ്ങനെ പ്രവർത്തിപ്പിക്കണമെന്ന കോഡെക് സ്വീകരിക്കുന്നതിനുള്ള ഐച്ഛികങ്ങളും %s ൽ കണ്ടേക്കാം."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:402
+msgid "No Plasma resources are available for %s support."
+msgstr "%s പിന്തുണയ്ക്കായി പ്ലാസ്മ വിഭവങ്ങൾ ലഭ്യമല്ല."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:406
+msgid "Information about %s, as well as options for how to get additional Plasma resources might be found %s."
+msgstr "%s സംബന്ധിച്ചുളള വിവരങ്ങൾ, അതുപോലെ തന്നെ പ്ലാസ്മ വിഭവങ്ങൾ ലഭ്യമാക്കുന്നതിനുള്ള ഐച്ഛികങ്ങൾ %s ൽ ലഭ്യമായിരിക്കുന്നു."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:413
+msgid "No printer drivers are available for %s."
+msgstr "%s നായി പ്രിന്റർ ഡ്രൈവറുകൾ ലഭ്യമല്ല."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:417
+msgid "Information about %s, as well as options for how to get a driver that supports this printer might be found %s."
+msgstr "%s സംബന്ധിച്ചുള്ള വിവരങ്ങളും, ഈ പ്രിന്ററുകളെ പിന്തുണയ്ക്കുന്ന ഡ്രൈവറെ എങ്ങനെ ലഭ്യമാക്കാം എന്നും %s ൽ കണ്ടേക്കാം."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:461
+msgid "this website"
+msgstr "ഈ വെബ്സൈറ്റ്"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:465
+msgid "Unfortunately, the %s you were searching for could not be found. Please see %s for more information."
+msgid_plural "Unfortunately, the %s you were searching for could not be found. Please see %s for more information."
+msgstr[0] "നിർഭാഗ്യവശാൽ, നിങ്ങൾ തിരയുന്ന %s നെ കണ്ടെത്താനായില്ല. കൂടുതൽ വിവരങ്ങൾക്ക് ദയവായി %s ൽ കാണുക."
+msgstr[1] "നിർഭാഗ്യവശാൽ, നിങ്ങൾ തിരയുന്ന %s നെ കണ്ടെത്താനായില്ല. കൂടുതൽ വിവരങ്ങൾക്ക് ദയവായി %s ൽ കാണുക."
+
+#: src/gs-extras-page.c:533 src/gs-extras-page.c:589 src/gs-extras-page.c:628
+msgid "Failed to find any search results"
+msgstr "തിരയൽ ഫലങ്ങൾ ഒന്നും കണ്ടെത്താനായില്ല"
+
+#: src/gs-extras-page.c:816
+msgid "%s file format"
+msgstr "%s ഫയൽ ഘടന"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "കോഡെക്കുകളുടെ താൾ"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "സ്വാഗതം"
+
+#: src/gs-first-run-dialog.ui:40
+msgid "Welcome to Software"
+msgstr "സോഫ്റ്റ്വെയറിലേക്ക് സ്വാഗതം"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Software lets you install all the software you need, all from one place. See our recommendations, browse the categories, or search for the applications you want."
+msgstr "നിങ്ങൾക്കാവശ്യമുള്ള എല്ലാ സോഫ്റ്റ്‌വെയറുകളും ഇൻസ്റ്റാൾ ചെയ്യാൻ സോഫ്റ്റ്‌വെയർ നിങ്ങളെ അനുവദിക്കുന്നു. ഞങ്ങളുടെ ശുപാർശകൾ കാണുക, വിഭാഗങ്ങൾ ബ്രൗസുചെയ്യുക, അല്ലെങ്കിൽ നിങ്ങൾക്ക് ആവശ്യമുള്ള ആപ്ലിക്കേഷനുകൾക്കായി തിരയുക."
+
+#: src/gs-first-run-dialog.ui:59
+msgid "_Let’s Go Shopping"
+msgstr "ഷോപ്പിങ്ങിന് പോകാം(_L)"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "അകലം"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "കുട്ടികൾക്കിടയിലുള്ള അകലത്തിന്റെ അളവ്"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "നീക്കം ചെയ്തു"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:95
+msgctxt "app status"
+msgid "Updated"
+msgstr "പുതുക്കപ്പെട്ടു"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:101
+msgctxt "app status"
+msgid "Unknown"
+msgstr "അജ്ഞാതമാണ്"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "ചരിത്രം"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:488
+msgid "System Applications"
+msgstr "സിസ്റ്റം ആപ്ലിക്കേഷനുകൾ"
+
+#: src/gs-installed-page.c:622
+msgid "Click on items to select them"
+msgstr "അവ തിരഞ്ഞെടുക്കുന്നതിന് ഇനങ്ങൾ ക്ലിക്കുചെയ്യുക"
+
+#: src/gs-installed-page.c:826
+msgid "Select"
+msgstr "തിരഞ്ഞെടുക്കുക"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്ത താൾ"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "ഫോൾഡറിലേക്ക് ചേർക്കുക…(_A)"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "ഫോൾഡറിലേക്ക് നീക്കുക…(_M)"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "ഫോൾഡറിൽ നിന്ന് നീക്കംചെയ്യുക(_R)"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:75
+msgid "Software catalog is being downloaded"
+msgstr "സോഫ്റ്റ്‌വെയർ സൂചിതപത്രം ഡൗൺലോഡ് ചെയ്യുകയാണ്"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:79
+msgid "Software catalog is being loaded"
+msgstr "സോഫ്റ്റ്‌വെയർ സൂചിതപത്രം ലോഡ് ചെയ്യുന്നു"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "താൾ ലോഡ് ചെയ്യുന്നു"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "ആരംഭിക്കുന്നു…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "മോഡറേറ്റ് താൾ"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "മദ്ധ്യസ്ഥതചെയ്യുന്നതിന് അവലോകനങ്ങളൊന്നുമില്ല"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "യുആർഎൽ"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "ഫോർമാറ്റ് ചെയ്യുക"
+
+#. add button
+#: src/gs-overview-page.c:332
+msgid "More…"
+msgstr "കൂടുതൽ…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:610
+msgid "Recommended Audio & Video Applications"
+msgstr "ശുപാർശ ചെയ്ത ശബ്‌ദ, ചലച്ചിത്ര ആപ്ലിക്കേഷനുകൾ"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:615
+msgid "Recommended Games"
+msgstr "ശുപാർശ ചെയ്ത വിനോദങ്ങൾ"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:620
+msgid "Recommended Graphics Applications"
+msgstr "ശുപാർശ ചെയ്ത ഗ്രാഫിക്സ് ആപ്ലിക്കേഷനുകൾ"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:625
+msgid "Recommended Productivity Applications"
+msgstr "ശുപാർശിത ഉൽപ്പാദനക്ഷമതാ ആപ്ലിക്കേഷനുകൾ"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:1007 src/gs-repos-dialog.c:836
+msgid "Access additional software from selected third party sources."
+msgstr "തിരഞ്ഞെടുത്ത മൂന്നാം കക്ഷി സ്രോതസ്സുകളിൽ നിന്ന് അധിക സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുക."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:1011 src/gs-repos-dialog.c:840
+msgid "Some of this software is proprietary and therefore has restrictions on use, sharing, and access to source code."
+msgstr "ഈ സോഫ്റ്റ്‌വെയറിൽ ചിലത് കുത്തകയാണ്, അതിനാൽ സോഴ്സ് കോഡ് ഉപയോഗിയ്ക്കാനും പങ്കിടാനും ലഭ്യമാക്കാനുമുള്ള നിയന്ത്രണങ്ങൾ ഉണ്ട്."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:1016 src/gs-repos-dialog.c:845
+msgid "Find out more…"
+msgstr "കൂടുതല് കണ്ടെത്തുക…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:1024 src/gs-repos-dialog.c:252
+msgid "Enable"
+msgstr "പ്രാപ്തമാക്കുക"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "അവലോകന താൾ"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "മൂന്നാം കക്ഷി സോഫ്റ്റ്‌വെയർ റിപ്പോസിറ്ററികൾ പ്രാപ്തമാക്കണോ?"
+
+#: src/gs-overview-page.ui:83
+msgid "Featured Applications"
+msgstr "സവിശേഷമാക്കപെട്ട ആപ്ലിക്കേഷനുകൾ"
+
+#: src/gs-overview-page.ui:116
+msgid "Categories"
+msgstr "വിഭാഗങ്ങൾ"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:232
+msgid "Editor’s Picks"
+msgstr "എഡിറ്റർമാർ തിരഞ്ഞെടുത്തവ"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:258
+msgid "Recent Releases"
+msgstr "സമീപകാല പ്രസിദ്ധപ്പെടുത്തിയവ"
+
+#: src/gs-overview-page.ui:328
+msgid "No Application Data Found"
+msgstr "അപ്ലിക്കേഷൻ വിവരം കണ്ടെത്താൻ പറ്റിയില്ല"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:496
+msgid "Are you sure you want to purchase %s?"
+msgstr "%s വാങ്ങാൻ നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടോ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:500
+msgid "%s will be installed, and you will be charged %s."
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യപ്പെടും, നിങ്ങളിൽ നിന്ന് %s ഈടാക്കും."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:513
+msgid "Purchase"
+msgstr "വാങ്ങൽ"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:587
+msgid "Prepare %s"
+msgstr "%s തയ്യാറാക്കുക"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:724
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "%s റിപ്പോസിറ്ററി നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:728
+msgid "All applications from %s will be removed, and you will have to re-install the repository to use them again."
+msgstr "%s ൽ നിന്നുള്ള എല്ലാ അപ്ലിക്കേഷനുകളും നീക്കം ചെയ്യപ്പെടും, അവ വീണ്ടും ഉപയോഗിക്കാനായി നിങ്ങൾ റിപ്പോസിറ്ററി വീണ്ടും ഇൻസ്റ്റോൾ ചെയ്യേണ്ടതായി വരും."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:736
+msgid "Are you sure you want to remove %s?"
+msgstr "%s നീക്കം ചെയ്യണമെന്ന് തീർച്ചയാണോ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:739
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s നീക്കംചെയ്യും, അത് വീണ്ടും ഉപയോഗിക്കാൻ നിങ്ങൾ ഇത് ഇൻസ്റ്റാൾ ചെയ്യണം."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:68 src/gs-summary-tile.c:75
+msgid "%s (Installed)"
+msgstr "%s (ഇൻസ്റ്റാൾ ചെയ്തു)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "മുൻഗണനകൾ പുതുക്കുക"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "സ്വമേധയായുള്ള പുതുക്കലുകൾ"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "മൊബൈൽ അല്ലെങ്കിൽ മീറ്റർ ചെയ്യപ്പെട്ട ബന്ധങ്ങളിൽ സ്വമേധയായുള്ള പുതുക്കലുകൾ പ്രവർത്തനരഹിതമാണ്."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "സ്വമേധയായുള്ള പുതുക്കലുകളുടെ അറിയിപ്പുകൾ"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "പുതുക്കിയത് സ്വപ്രേരിതമായി ഇൻസ്റ്റാൾ ചെയ്യുമ്പോൾ അറിയിപ്പുകൾ കാണിക്കുക."
+
+#: lib/gs-price.c:111
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:127
+msgid "Some of the currently installed software is not compatible with %s. If you continue, the following will be automatically removed during the upgrade:"
+msgstr "നിലവിൽ ഇൻസ്റ്റാൾ ചെയ്ത ചില സോഫ്റ്റ്‌വെയറുകൾ %s നോട് അനുയോജ്യമല്ല. നിങ്ങൾ തുടരുകയാണെങ്കിൽ, താഴെ പറയുന്നവയിൽ നിന്നും സ്വമേധയാ നീക്കം ചെയ്യുന്നതാണ്:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "അനുയോജ്യമല്ലാത്ത സോഫ്റ്റ്‌വെയർ"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "തുടരുക(_C)"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:110
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u അപ്ലിക്കേഷൻ ഇൻസ്റ്റാൾ ചെയ്തു"
+msgstr[1] "%u അപ്ലിക്കേഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:117
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u ആഡ്-ഓൺ ഇൻസ്റ്റാൾ ചെയ്തു"
+msgstr[1] "%u ആഡ്-ഓണുകൾ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:125
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u അപ്ലിക്കേഷൻ"
+msgstr[1] "%u അപ്ലിക്കേഷനുകൾ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:131
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u ആഡ് ഓൺ"
+msgstr[1] "%u ആഡ്-ഓണുകൾ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:138
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s , %s എന്നിവ ഇൻസ്റ്റാൾ ചെയ്തു"
+msgstr[1] "%s , %s എന്നിവ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:312
+msgid "Remove “%s”?"
+msgstr "\"%s\" നീക്കംചെയ്യണോ?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:317
+msgid "Disable “%s”?"
+msgstr "\"%s\" അപ്രാപ്തമാക്കണോ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:321
+msgid "Software that has been installed from this repository will no longer receive updates, including security fixes."
+msgstr "ഈ റിപ്പോസിറ്ററിയിൽ നിന്നും ഇൻസ്റ്റാളുചെയ്ത സോഫ്റ്റ്‌വെയർ സുരക്ഷ പരിഹാരങ്ങൾ ഉൾപ്പെടെയുള്ള അപ്ഡേറ്റുകൾ തുടർന്നങ്ങോട്ട് സ്വീകരിക്കില്ല."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:339
+msgid "Disable"
+msgstr "അപ്രാപ്തമാക്കുക"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:748
+msgid "the operating system"
+msgstr "പ്രവർത്തിക്കുന്ന സിസ്റ്റം"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:815 src/gs-repos-dialog.c:851
+msgid "These repositories supplement the default software provided by %s."
+msgstr "ഈ റിപ്പോസിറ്ററികൾ %s നൽകുന്ന ഡിഫോൾട്ടായ സോഫ്റ്റ്‌വെയറെ കൂട്ടിച്ചേർക്കുന്നു."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:833
+msgid "Third Party Repositories"
+msgstr "മൂന്നാം കക്ഷി റിപ്പോസിറ്ററികൾ"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "അധിക റിപ്പോസിറ്ററികളൊന്നുമില്ല"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:110
+msgid "_Enable"
+msgstr "പ്രാപ്തമാക്കുക(_E)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:119
+msgid "_Remove…"
+msgstr "നീക്കംചെയ്യുക…(_R)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:124
+msgid "_Disable…"
+msgstr "അപ്രാപ്തമാക്കുക…(_D)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:132
+msgid "Enabling"
+msgstr "പ്രാപ്തമാക്കുന്നു"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:144
+msgid "Disabling"
+msgstr "അപ്രാപ്തമാക്കുന്നു"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:158
+msgid "Enabled"
+msgstr "പ്രാപ്തമാക്കി"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:164
+msgid "Disabled"
+msgstr "അപ്രാപ്തമാക്കി"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:95
+msgid "Hate it"
+msgstr "വെറുക്കുന്നു"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:99
+msgid "Don’t like it"
+msgstr "ഇഷ്ടപ്പെട്ടില്ല"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:103
+msgid "It’s OK"
+msgstr "കൊള്ളാം"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:107
+msgid "Like it"
+msgstr "ഇഷ്ടപ്പെട്ടു"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:111
+msgid "Love it"
+msgstr "വളരെ ഇഷ്ടപ്പെട്ടു"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:133
+msgid "Please take more time writing the review"
+msgstr "അവലോകനം എഴുതാൻ കൂടുതൽ സമയം ചിലവഴിക്കുക"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:137
+msgid "Please choose a star rating"
+msgstr "ദയവായി ഒരു നക്ഷത്ര മൂല്യം തിരഞ്ഞെടുക്കുക"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:141
+msgid "The summary is too short"
+msgstr "ചുരുക്കം വളരെ ചെറുതാണ്"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:145
+msgid "The summary is too long"
+msgstr "ചുരുക്കം ദൈർഘ്യമേറിയതാണ്"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:149
+msgid "The description is too short"
+msgstr "വിവരണം വളരെ ചെറുതാണ്"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:153
+msgid "The description is too long"
+msgstr "വിവരണം ദൈർഘ്യമേറിയതാണ്"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "അവലോകനം പ്രസിദ്ധീകരിക്കുക"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "പ്രസിദ്ധീകരിക്കുക(_P)"
+
+#: src/gs-review-dialog.ui:75
+msgid "Rating"
+msgstr "മൂല്യനിർണയം"
+
+#: src/gs-review-dialog.ui:119
+msgid "Give a short summary of your review, for example: “Great app, would recommend”."
+msgstr "നിങ്ങളുടെ അവലോകനത്തിൻ്റെ ഒരു ഹ്രസ്വ സംഗ്രഹം നൽകുക, ഉദാഹരണത്തിന്: \"നല്ല അപ്ലിക്കേഷൻ, ശുപാർശചെയ്യുന്നു\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:144
+msgctxt "app review"
+msgid "Review"
+msgstr "അവലോകനം"
+
+#: src/gs-review-dialog.ui:154
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "ആപ്ലിക്കേഷനെക്കുറിച്ച് എന്ത് തോന്നുന്നു? നിങ്ങളുടെ കാഴ്ചപ്പാടുകൾക്ക് കാരണങ്ങൾ നൽകാൻ ശ്രമിക്കുക."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "ആകെയുള്ള മൂല്യനിർണയം"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "നിങ്ങൾക്ക് അധിക്ഷേപിക്കുന്ന, അസഭ്യമല്ലാത്ത അല്ലെങ്കിൽ വിവേചനപരമായ പെരുമാറ്റം സംബന്ധിച്ച അവലോകനങ്ങൾ റിപ്പോർട്ടുചെയ്യാൻ കഴിയും."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid "Once reported, a review will be hidden until it has been checked by an administrator."
+msgstr "ഒരിക്കൽ റിപ്പോർട്ടുചെയ്താൽ, ഒരു രക്ഷാധികാരി അത് പരിശോധിക്കുന്നതുവരെ അവലോകനം മറയ്ക്കപ്പെടും."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "അവലോകനം റിപ്പോർട്ടുചെയ്യണോ?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "റിപ്പോർട്ട്"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "ഈ അവലോകനം നിങ്ങൾക്ക് ഉപയോഗപ്രദമായിരുന്നോ?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "അതെ"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "ഇല്ല"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "മെഹ്"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "റിപ്പോർട്ട്…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "നീക്കംചെയ്യുക…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:314
+msgid "Screenshot not found"
+msgstr "സ്ക്രീൻഷോട്ട് കണ്ടെത്തിയില്ല"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:329
+msgid "Failed to load image"
+msgstr "ചിത്രം ലോഡു ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:462
+msgid "Screenshot size not found"
+msgstr "സ്ക്രീൻഷോട്ട് വലുപ്പം കണ്ടെത്തിയില്ല"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:492
+msgid "Could not create cache"
+msgstr "കാഷെ സൃഷ്ടിക്കാനായില്ല"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:553
+msgid "Screenshot not valid"
+msgstr "സ്ക്രീൻഷോട്ട് അസാധുവാണ്"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:568
+msgid "Screenshot not available"
+msgstr "സ്ക്രീൻഷോട്ട് ലഭ്യമല്ല"
+
+#: src/gs-screenshot-image.c:621
+msgid "Screenshot"
+msgstr "സ്ക്രീൻഷോട്ട്"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:155
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u ആയി കൂടുതൽ പൊരുത്തം"
+msgstr[1] "%u ആയി കൂടുതൽ പൊരുത്തങ്ങൾ"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "ഏട് തിരയുക"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "അപ്ലിക്കേഷനൊന്നും കണ്ടെത്തിയില്ല"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:915 src/gs-shell.c:920 src/gs-shell.c:935 src/gs-shell.c:939
+msgid "“%s”"
+msgstr "\"%s\""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:991
+msgid "Unable to download firmware updates from %s"
+msgstr "%s എന്നതിൽ നിന്ന് ഫേംവെയർ പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:997
+msgid "Unable to download updates from %s"
+msgstr "%s എന്നതിൽ നിന്ന് പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1004
+msgid "Unable to download updates"
+msgstr "പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1009
+msgid "Unable to download updates: internet access was required but wasn’t available"
+msgstr "പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല: ഇന്റർനെറ്റ് പ്രവേശനം ആവശ്യമാണ് പക്ഷേ ലഭ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1018
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "%s എന്നതിൽ നിന്ന് പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല: ആവശ്യത്തിന് സ്ഥലം ഡിസ്കിലില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1023
+msgid "Unable to download updates: not enough disk space"
+msgstr "പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല: ആവശ്യത്തിന് സ്ഥലം ഡിസ്കിലില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1031
+msgid "Unable to download updates: authentication was required"
+msgstr "പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല: പ്രാമാണീകരണം ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1036
+msgid "Unable to download updates: authentication was invalid"
+msgstr "പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല: പ്രാമാണീകരണം അസാധുവായിരുന്നു"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1041
+msgid "Unable to download updates: you do not have permission to install software"
+msgstr "പുതുക്കലുകൾ ഡൗൺലോഡു ചെയ്യാൻ കഴിയുന്നില്ല: സോഫ്റ്റ്‌വെയർ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് നിങ്ങള്ക്ക് അനുമതിയില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1051
+msgid "Unable to get list of updates"
+msgstr "പുതുക്കലുകളുടെ പട്ടിക ലഭ്യമായില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1090
+msgid "Unable to purchase %s: authentication was required"
+msgstr "%s വാങ്ങാൻ കഴിയുന്നില്ല: പ്രാമാണീകരണം ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1097
+msgid "Unable to purchase %s: authentication was invalid"
+msgstr "%s വാങ്ങാൻ കഴിയുന്നില്ല: പ്രാമാണീകരണം അസാധുവായിരുന്നു"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1104
+msgid "Unable to purchase %s: no payment method setup"
+msgstr "%s വാങ്ങാൻ കഴിയുന്നില്ല: പണമടയ്ക്കൽ സജ്ജീകരണം ഒന്നുമില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1111
+msgid "Unable to purchase %s: payment was declined"
+msgstr "%s വാങ്ങാൻ കഴിയുന്നില്ല: പണമടയ്ക്കൽ നിരസിക്കപ്പെട്ടു"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1118
+msgid "Unable to purchase %s"
+msgstr "%s വാങ്ങാൻ കഴിയുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1154
+msgid "Unable to install %s as download failed from %s"
+msgstr "%s എന്നതിൽ നിന്ന് ഡൗൺലോഡു ചെയ്യാത്തതിനാൽ %s ഇൻസ്റ്റാൾ ചെയ്യാനായില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1160
+msgid "Unable to install %s as download failed"
+msgstr "ഡൗൺലോഡ് ചെയ്യുന്നത് പരാജയപ്പെടുന്നതിനാൽ %s ഇൻസ്റ്റാൾ ചെയ്യാനായില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1172
+msgid "Unable to install %s as runtime %s not available"
+msgstr "റൺടൈം %s ലഭ്യമല്ലത്തതിനാൽ %s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1178
+msgid "Unable to install %s as not supported"
+msgstr "ആശ്രയം ഇല്ലാത്തതിനാൽ %s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1185
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: ഇന്റർനെറ്റ് പ്രവേശനം ആവശ്യമാണ് പക്ഷേ ലഭ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1191
+msgid "Unable to install: the application has an invalid format"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: അപ്ലിക്കേഷന് ഒരു അസാധുവായ ഘടനയാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1196
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: ആവശ്യത്തിന് സ്ഥലം ഡിസ്കിലില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1204
+msgid "Unable to install %s: authentication was required"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: പ്രാമാണീകരണം ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1211
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: പ്രാമാണീകരണം അസാധുവായിരുന്നു"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1218
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: സോഫ്റ്റ്‌വെയർ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് നിങ്ങൾക്ക് അനുമതിയില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1231
+msgid "Your %s account has been suspended."
+msgstr "നിങ്ങളുടെ %s അക്കൗണ്ട് താൽക്കാലികമായി നിർത്തിവച്ചു."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1235
+msgid "It is not possible to install software until this has been resolved."
+msgstr "ഇത് പരിഹരിക്കപ്പെടുന്നതുവരെ സോഫ്റ്റ്‌വെയർ ഇൻസ്റ്റാൾ ചെയ്യാൻ സാധ്യമല്ല."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1246
+msgid "For more information, visit %s."
+msgstr "കൂടുതൽ വിവരങ്ങൾക്ക് %s സന്ദർശിക്കുക."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1255
+msgid "Unable to install %s: AC power is required"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല: എസി വൈദ്യുതി ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1264
+msgid "Unable to install %s"
+msgstr "%s ഇൻസ്റ്റാൾ ചെയ്യുവാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1310
+msgid "Unable to update %s from %s"
+msgstr "%s ൽ നിന്ന് %s പുതുക്കുവാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1316
+msgid "Unable to update %s as download failed"
+msgstr "ഡൗൺലോഡ് പരാജയപ്പെട്ടതിനാൽ %s പുതുക്കുവാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1322
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "പുതുക്കുവാൻ സാധ്യമല്ല: ഇന്റർനെറ്റ് പ്രവേശനം ആവശ്യമാണ് പക്ഷേ ലഭ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1330
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s പുതുക്കുവാൻ സാധ്യമല്ല: ആവശ്യത്തിന് സ്ഥലം ഡിസ്കിലില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1339
+msgid "Unable to update %s: authentication was required"
+msgstr "%s പുതുക്കുവാൻ സാധ്യമല്ല: പ്രാമാണീകരണം ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1346
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s പുതുക്കുവാൻ സാധ്യമല്ല: പ്രാമാണീകരണം അസാധുവായിരുന്നു"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1353
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "%s പുതുക്കുവാൻ സാധ്യമല്ല: സോഫ്റ്റ്‌വെയർ പുതുക്കുവാൻ നിങ്ങൾക്ക് അനുമതിയില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1361
+msgid "Unable to update %s: AC power is required"
+msgstr "%s പുതുക്കുവാൻ സാധ്യമല്ല: എസി വൈദ്യുതി ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1370
+msgid "Unable to update %s"
+msgstr "%s പുതുക്കുവാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1415
+msgid "Unable to upgrade to %s from %s"
+msgstr "%s ൽ നിന്ന് %s നവീകരിക്കാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1420
+msgid "Unable to upgrade to %s as download failed"
+msgstr "ഡൗൺലോഡ് പരാജയപ്പെട്ടതിനാൽ %s നവീകരിക്കാൻ സാധ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1427
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr "നവീകരിക്കാൻ സാധ്യമല്ല: ഇന്റർനെറ്റ് പ്രവേശനം ആവശ്യമാണ് പക്ഷേ ലഭ്യമല്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1435
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s നവീകരിക്കാൻ സാധ്യമല്ല: ആവശ്യത്തിന് സ്ഥലം ഡിസ്കിലില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1444
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s നവീകരിക്കാൻ സാധ്യമല്ല: പ്രാമാണീകരണം ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1451
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s എന്നതിലേക്ക് നവീകരിക്കാൻ കഴിഞ്ഞില്ല: പ്രാമാണീകരണം അസാധുവാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1458
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%s എന്നതിലേക്ക് നവീകരിക്കാൻ കഴിഞ്ഞില്ല: നിങ്ങൾക്ക് നവീകരിക്കാൻ അനുമതിയില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1465
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s എന്നതിലേക്ക് നവീകരിക്കാൻ കഴിഞ്ഞില്ല: ഏസി വിദ്യുച്ഛക്തി ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1474
+msgid "Unable to upgrade to %s"
+msgstr "%s എന്നതിലേക്ക് നവീകരിക്കാൻ കഴിഞ്ഞില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1516
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s നീക്കം ചെയ്യാൻ കഴിയുന്നില്ല: പ്രാമാണീകരണം ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1522
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s നീക്കം ചെയ്യാൻ കഴിയുന്നില്ല: പ്രാമാണീകരണം അസാധുവായിരുന്നു"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1528
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s നീക്കം ചെയ്യാൻ കഴിയുന്നില്ല: നിങ്ങൾക്ക് സോഫ്റ്റ്‌വെയർ നീക്കം ചെയ്യാനുള്ള അനുമതിയില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1535
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s നീക്കം ചെയ്യാൻ കഴിയുന്നില്ല: ഏസി പവർ ആവശ്യമാണ്"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1547
+msgid "Unable to remove %s"
+msgstr "%s നീക്കം ചെയ്യാൻ കഴിയുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1593
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s തുടങ്ങാൻ കഴിയുന്നില്ല: %s ഇൻസ്റ്റാൾ ചെയ്തില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1600 src/gs-shell.c:1654 src/gs-shell.c:1698
+#: src/gs-shell.c:1749
+msgid "Not enough disk space — free up some space and try again"
+msgstr "ആവശ്യമായ ഡിസ്ക് സ്ഥലം ലഭ്യമല്ല - കുറച്ച് സ്ഥലം ശൂന്യമാക്കി വീണ്ടും ശ്രമിക്കുക"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1611 src/gs-shell.c:1665 src/gs-shell.c:1709
+#: src/gs-shell.c:1779
+msgid "Sorry, something went wrong"
+msgstr "ക്ഷമിക്കണം, എന്തോ കുഴപ്പം സംഭവിച്ചു"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1646
+msgid "Failed to install file: not supported"
+msgstr "ഫയൽ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു: പിന്തുണയ്ക്കുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1650
+msgid "Failed to install file: authentication failed"
+msgstr "ഫയൽ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു: പ്രാമാണീകരണം പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1690
+msgid "Failed to install: not supported"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു: പിന്തുണയ്ക്കുന്നില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1694
+msgid "Failed to install: authentication failed"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു: പ്രാമാണീകരണം പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1743
+msgid "Unable to contact %s"
+msgstr "%s മായി ബന്ധപ്പെടാനായില്ല"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1758
+msgid "%s needs to be restarted to use new plugins."
+msgstr "പുതിയ പ്ലഗിനുകൾ ഉപയോഗിക്കുന്നതിന് %s പുനരാരംഭിക്കേണ്ടതുണ്ട്."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1763
+msgid "This application needs to be restarted to use new plugins."
+msgstr "പുതിയ പ്ലഗിന്നുകൾ ഉപയോഗിക്കുന്നതിന് ഈ അപ്ലിക്കേഷൻ പുനരാരംഭിക്കേണ്ടതുണ്ട്."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1770
+msgid "AC power is required"
+msgstr "എസി വൈദ്യുതി ആവശ്യമാണ്"
+
+#. TRANSLATORS: menu item that signs into the named account with a particular username
+#: src/gs-shell.c:2146
+msgid "Signed in into %s as %s"
+msgstr "%s ആയി %s സൈൻ ഇൻ ചെയ്തു"
+
+#. TRANSLATORS: menu item that signs into the named account
+#: src/gs-shell.c:2151
+msgid "Sign in to %s…"
+msgstr "%s ലേക്ക് സൈൻ ഇൻ ചെയ്യുക…"
+
+#. TRANSLATORS: menu item for signing out from the named account
+#: src/gs-shell.c:2159
+msgid "Sign out from %s"
+msgstr "%s ൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യുക"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:270
+msgid "Source: %s"
+msgstr "ഉറവിടം:%s"
+
+#: src/gs-summary-tile.c:80
+msgid "%s (Installing)"
+msgstr "%s (ഇൻസ്റ്റാൾ ചെയ്യുന്നു)"
+
+#: src/gs-summary-tile.c:85
+msgid "%s (Removing)"
+msgstr "%s (നീക്കം ചെയ്യുന്നു)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:106
+msgid "_Remove All"
+msgstr "എല്ലാം നീക്കം ചെയ്യുക(_R)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:131
+msgid "No update description available."
+msgstr "പുതുക്കൽ വിവരണമൊന്നും ലഭ്യമല്ല."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:226
+msgid "Installed on %s"
+msgstr "%s ൽ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:246
+msgid "Installed Updates"
+msgstr "പുതുക്കലുകൾ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:452
+msgid "Additions"
+msgstr "കൂട്ടിച്ചേർക്കലുകൾ"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:456
+msgid "Removals"
+msgstr "നീക്കം ചെയ്യൽ"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:460
+msgid "Updates"
+msgstr "പുതുക്കലുകൾ"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:464
+msgid "Downgrades"
+msgstr "തരാം താഴ്ത്തുക"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "ഈ സിസ്റ്റത്തിൽ ഒരു പുതുക്കലുകളും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല."
+
+#: src/gs-update-monitor.c:113
+msgid "Security Updates Pending"
+msgstr "സുരക്ഷാ പുതുക്കലുകൾ ശേഷിക്കുന്നു"
+
+#: src/gs-update-monitor.c:114
+msgid "It is recommended that you install important updates now"
+msgstr "നിങ്ങൾ പ്രധാനപ്പെട്ട പുതുക്കലുകൾ ഇപ്പോൾ ഇൻസ്റ്റാൾ ചെയ്യണമെന്ന് ശുപാർശ ചെയ്തിട്ടുണ്ട്"
+
+#: src/gs-update-monitor.c:117
+msgid "Restart & Install"
+msgstr "പുനരാരംഭിക്കുക & ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+#: src/gs-update-monitor.c:121
+msgid "Software Updates Available"
+msgstr "സോഫ്റ്റ്‌വെയർ പുതുക്കലുകൾ ലഭ്യമാണ്"
+
+#: src/gs-update-monitor.c:122
+msgid "Important OS and application updates are ready to be installed"
+msgstr "പ്രധാനപ്പെട്ട OS, അപ്ലിക്കേഷൻ പുതുക്കലുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ തയാറാണ്"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:125 src/gs-updates-section.c:307
+msgid "Not Now"
+msgstr "ഇപ്പോൾ വേണ്ട"
+
+#: src/gs-update-monitor.c:126
+msgid "View"
+msgstr "കാണുക"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:224
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u അപ്ലിക്കേഷന് പുതുക്കി- പുനരാരംഭിക്കേണ്ടതുണ്ട്"
+msgstr[1] "%u അപ്ലിക്കേഷനുകൾ പുതുക്കി- പുനരാരംഭിക്കേണ്ടതുണ്ട്"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:230
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u അപ്ലിക്കേഷന് പുതുക്കി"
+msgstr[1] "%u അപ്ലിക്കേഷനുകൾ പുതുക്കി"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:241
+msgid "%s has been updated."
+msgstr "%s പുതുക്കി."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:244
+msgid "Please restart the application."
+msgstr "ദയവായി അപ്ലിക്കേഷൻ പുനരാരംഭിക്കുക."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:252
+msgid "%s and %s have been updated."
+msgstr "%s , %s എന്നിവ പുതുക്കി."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:258 src/gs-update-monitor.c:277
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u അപ്ലിക്കേഷന് ഒരു പുനരാരംഭിക്കേണ്ടതുണ്ട്."
+msgstr[1] "%u അപ്ലിക്കേഷനുകൾ ഒരു പുനരാരംഭിക്കേണ്ടതുണ്ട്."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:270
+msgid "Includes %s, %s and %s."
+msgstr "%s , %s , %s എന്നിവ ഉൾപ്പെടുന്നു."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:486 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "ഓപ്പറേറ്റിംഗ് സിസ്റ്റം പുതുക്കലുകൾ ലഭ്യമല്ല"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:488
+msgid "Upgrade to continue receiving security updates."
+msgstr "സുരക്ഷ പുതുക്കലുകൾ തുടർന്നും ലഭിക്കുന്നതിന് നവീകരിക്കുക."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:543
+msgid "A new version of %s is available to install"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യാൻ %s എന്ന പുതിയ പതിപ്പ് ലഭ്യമാണ്"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:547
+msgid "Software Upgrade Available"
+msgstr "സോഫ്റ്റ്‌വെയർ നവീകരണം ലഭ്യമാണ്"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:858
+msgid "Software Updates Failed"
+msgstr "സോഫ്റ്റ്‌വെയർ പുതുക്കലുകൾ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:860
+msgid "An important OS update failed to be installed."
+msgstr "ഒരു പ്രധാനപ്പെട്ട ഓഎസ് പുതുക്കൽ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു."
+
+#: src/gs-update-monitor.c:861
+msgid "Show Details"
+msgstr "വിശദാംശങ്ങൾ കാണിക്കുക"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:884
+msgid "System Upgrade Complete"
+msgstr "സിസ്റ്റം നവീകരണം പൂർത്തിയായി"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:889
+msgid "Welcome to %s %s!"
+msgstr "%s %s ലേക്ക് സ്വാഗതം!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:895
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "സോഫ്റ്റ്‌വെയർ പുതുക്കൽ ഇൻസ്റ്റാൾ ചെയ്തു"
+msgstr[1] "സോഫ്റ്റ്‌വെയർ പുതുക്കലുകൾ ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:899
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "ഒരു പ്രധാനപ്പെട്ട ഓഎസ് പുതുക്കൽ ഇൻസ്റ്റാൾ ചെയ്തു."
+msgstr[1] "ഒരു പ്രധാനപ്പെട്ട ഓഎസ് പുതുക്കലുകൾ ഇൻസ്റ്റാൾ ചെയ്തു."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:910
+msgctxt "updates"
+msgid "Review"
+msgstr "അവലോകനം ചെയ്യുക"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:958
+msgid "Failed To Update"
+msgstr "പുതുക്കുന്നതിൽ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:964
+msgid "The system was already up to date."
+msgstr "സിസ്റ്റം കാലികമായിരുന്നു."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:969
+msgid "The update was cancelled."
+msgstr "പുതുക്കൽ റദ്ദാക്കി."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:975
+msgid "Internet access was required but wasn’t available. Please make sure that you have internet access and try again."
+msgstr "ഇന്റർനെറ്റ് ഉപയോഗം ആവശ്യമാണെങ്കിലും ലഭ്യമല്ല. നിങ്ങൾക്ക് ഇന്റർനെറ്റ് പ്രവേശനം ഉണ്ടെന്ന് ഉറപ്പുവരുത്തി വീണ്ടും ശ്രമിക്കുക."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:981
+msgid "There were security issues with the update. Please consult your software provider for more details."
+msgstr "പരിഷ്‌കരിച്ചതിൽ സുരക്ഷാ പ്രശ്നങ്ങൾ ഉണ്ടായിരുന്നു. കൂടുതൽ വിവരങ്ങൾക്കായി നിങ്ങളുടെ സോഫ്റ്റ്‌വെയർ ദാതാവുമായി ബന്ധപ്പെടുക."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:987
+msgid "There wasn’t enough disk space. Please free up some space and try again."
+msgstr "മതിയായ സ്ഥലം ഡിസ്കിൽ ഇല്ലായിരുന്നു. കുറച്ച് സ്ഥലം ശൂന്യമാക്കി വീണ്ടും ശ്രമിക്കുക."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:992
+msgid "We’re sorry: the update failed to install. Please wait for another update and try again. If the problem persists, contact your software provider."
+msgstr "ക്ഷമിക്കണം: ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് പുതുക്കൽ പരാജയപ്പെട്ടു. മറ്റൊരു പുതുക്കലിനായി കാത്തിരുന്ന് വീണ്ടും ശ്രമിക്കുക. പ്രശ്നം നിലനിൽക്കുകയാണെങ്കിൽ, നിങ്ങളുടെ സോഫ്റ്റ്‌വെയർ ദാതാവിനെ ബന്ധപ്പെടുക."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:241
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:244
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:250
+msgid "Yesterday, %R"
+msgstr "ഇന്നലെ,%R ന്"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:254
+msgid "Yesterday, %l:%M %p"
+msgstr "ഇന്നലെ, %l:%M %p"
+
+#: src/gs-updates-page.c:257
+msgid "Two days ago"
+msgstr "രണ്ട് ദിവസം മുമ്പ്"
+
+#: src/gs-updates-page.c:259
+msgid "Three days ago"
+msgstr "മൂന്ന് ദിവസം മുമ്പ്"
+
+#: src/gs-updates-page.c:261
+msgid "Four days ago"
+msgstr "നാല് ദിവസം മുമ്പ്"
+
+#: src/gs-updates-page.c:263
+msgid "Five days ago"
+msgstr "അഞ്ച് ദിവസം മുമ്പ്"
+
+#: src/gs-updates-page.c:265
+msgid "Six days ago"
+msgstr "ആറ് ദിവസം മുമ്പ്"
+
+#: src/gs-updates-page.c:267
+msgid "One week ago"
+msgstr "ഒരാഴ്ച മുമ്പ്"
+
+#: src/gs-updates-page.c:269
+msgid "Two weeks ago"
+msgstr "രണ്ടു ആഴ്ച മുമ്പ്"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:273
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:286
+msgid "Downloading new updates…"
+msgstr "പുതിയ പുതുക്കലുകൾ ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:290
+msgid "Looking for new updates…"
+msgstr "പുതിയ പുതുക്കലുകൾ തിരയുന്നു…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:359
+msgid "Setting up updates…"
+msgstr "പുതുക്കലുകൾ സജ്ജീകരിക്കുന്നു…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:360 src/gs-updates-page.c:367
+msgid "(This could take a while)"
+msgstr "(ഇതിന് കുറച്ച് സമയമെടുത്തേക്കാം)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:466
+msgid "Last checked: %s"
+msgstr "അവസാനം പരിശോധിച്ചത്: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:637
+msgid "%s %s is no longer supported."
+msgstr "%s %s നെ ഇനി പിന്തുണയ്ക്കില്ല."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:642
+msgid "Your OS is no longer supported."
+msgstr "നിങ്ങളുടെ ഓഎസ് ഇനി പിന്തുണയ്ക്കില്ല."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:647
+msgid "This means that it does not receive security updates."
+msgstr "ഇത് സുരക്ഷാ പുതുക്കലുകൾ ലഭിക്കുന്നില്ലെന്നാണ് ഇതിനർത്ഥം."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:651
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "ഏറ്റവും പുതിയ പതിപ്പിലേക്ക് നിങ്ങൾ നവീകരിക്കാൻ ശുപാർശചെയ്യുന്നു."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:900
+msgid "Charges may apply"
+msgstr "നിരക്കുകൾ ബാധകമാകാം"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:904
+msgid "Checking for updates while using mobile broadband could cause you to incur charges."
+msgstr "മൊബൈൽ ബ്രോഡ്ബാൻഡ് ഉപയോഗിക്കുന്ന സമയത്ത് പുതുക്കലുകൾക്കായി പരിശോധിക്കുന്നത് ചാർജുകളെ ബാധിക്കും."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:908
+msgid "Check Anyway"
+msgstr "എന്തായാലും പരിശോധിക്കുക"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:924
+msgid "No Network"
+msgstr "നെറ്റ് വർക്കില്ല"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:928
+msgid "Internet access is required to check for updates."
+msgstr "പുതുക്കൽ പരിശോധിക്കാൻ ഇന്റർനെറ്റ് പ്രവേശനം ആവശ്യമാണ്."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1351
+msgid "Checking…"
+msgstr "പരിശോധിക്കുന്നു…"
+
+#: src/gs-updates-page.c:1364
+msgid "Check for updates"
+msgstr "പുതുക്കലുകൾക്കായി പരിശോധിക്കുക"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "പുതുക്കൽ താൾ"
+
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "സോഫ്റ്റ്‌വെയർ കാലികമാണ്"
+
+#: src/gs-updates-page.ui:225
+msgid "Checking for updates when using mobile broadband could cause you to incur charges"
+msgstr "മൊബൈൽ ബ്രോഡ്ബാൻഡ് ഉപയോഗിക്കുമ്പോൾ നിങ്ങൾക്ക് പുതുക്കലുകൾക്കായി പരിശോധിക്കുന്നത് ചാർജുകളെ ബാധിക്കും"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "എന്തായാലും പരിശോധിക്കുക(_C)"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "പുതുക്കലുകൾക്കായി പരിശോധിക്കുന്നതിനായി ഓൺലൈനിൽ പോകുക"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "ശൃംഖല സജ്ജീകരണങ്ങൾ(_N)"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "പുതുക്കലുകൾ യാന്ത്രികമായി കൈകാര്യം ചെയ്യുന്നു"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-section.c:257
+msgid "Restart & Update"
+msgstr "പുനരാരംഭിക്കുക & പുതുക്കുക"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:263
+msgid "Update All"
+msgstr "എല്ലാം പുതുക്കുക"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-section.c:303
+msgid "Updates have been installed"
+msgstr "പുതുക്കുക്കിയത് ഇൻസ്റ്റാൾ ചെയ്തു"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-section.c:305
+msgid "A restart is required for them to take effect."
+msgstr "അവ പ്രാബല്യത്തിൽ വരാൻ പുനരാരംഭിക്കേണ്ടതുണ്ട്."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-section.c:309
+msgid "Restart"
+msgstr "പുനരാരംഭിക്കുക"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:389
+msgid "Integrated Firmware"
+msgstr "സംയോജിത ഫേംവെയർ"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:393
+msgid "Requires Restart"
+msgstr "പുനരാരംഭിക്കേണ്ടതുണ്ട്"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:397
+msgid "Application Updates"
+msgstr "അപ്ലിക്കേഷൻ പുതുക്കലുകൾ"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:401
+msgid "Device Firmware"
+msgstr "ഉപകരണ ഫേംവെയർ"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+msgid "%s %s Now Available"
+msgstr "%s %s ഇപ്പോൾ ലഭ്യമാണ്"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+msgid "Downloading %s %s"
+msgstr "%s %s ഡൗൺലോഡ് ചെയ്യുന്നു"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s ഇൻസ്റ്റാൾ ചെയ്യാൻ തയ്യാറായിക്കഴിഞ്ഞു"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "ഒരു പുതിയ നവീകരണവും പുതിയ സവിശേഷതകളും ചേർത്തിരിയ്ക്കുന്നു."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "കൂടുതലറിയാൻ(_L)"
+
+#: src/gs-upgrade-banner.ui:85
+msgid "It is recommended that you back up your data and files before upgrading."
+msgstr "നവീകരിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഡാറ്റയും ഫയലുകളും ബാക്കപ്പ് ചെയ്യുന്നതിന് ശുപാർശചെയ്യുന്നു."
+
+#: src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "ഡൗൺലോഡ് ചെയ്യുക(_D)"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "ഈ കമ്പ്യൂട്ടറിൽ സോഫ്റ്റ്‌വെയർ ചേർക്കുക, നീക്കംചെയ്യുക അല്ലെങ്കിൽ പുതുക്കുക"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid "Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;"
+msgstr "പുതുക്കലുകൾ;നവീകരണങ്ങൾ;ഉറവിടങ്ങൾ;റിപ്പോസിറ്ററികൾ;മുൻഗണനകൾ;ഇൻസ്റ്റാൾ ചെയ്യുക;അൺഇൻസ്റ്റാൾ ചെയ്യുക;പ്രോഗ്രാം;സോഫ്റ്റ്‌വെയർ;ആപ്പ്;കലവറ;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "ഗ്നോം സോഫ്റ്റ്‌വെയറിനായുള്ള വിശേഷണ അറിയിപ്പുകൾ രൂപകൽപ്പന ചെയ്യുക"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "ആപ്പ്സ്ട്രീം;സോഫ്റ്റ്‌വെയർ;അപ്ലിക്കേഷൻ;"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "ശബ്ദ രചനയും ചിട്ടപ്പെടുത്താലും"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "സംഗീത സഹായികൾ"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "ഡീബഗ്ഗർമാർ"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE- കൾ"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "നിർമ്മിത ബുദ്ധി"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "ജ്യോതിശാസ്ത്രം"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "രസതന്ത്രം"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "ഭാഷകൾ"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "ഗണിതം"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "യന്ത്രസംവിധാനം"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "പ്രവർത്തനം"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "സാഹസികത"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "ആർക്കേഡ്"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "ബ്ലോക്കുകൾ"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "പലക"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "കാർഡ്"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "അനുകരണം"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "കുട്ടികൾ"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "യുക്തിപരമായ"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "കഥാപാത്ര പ്രവർത്തനം"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "കായികം"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "തന്ത്രം"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D ഗ്രാഫിക്സ്"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "ഛായാഗ്രഹണം"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "സ്കാൻ ചെയ്യുന്നു"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "വെക്റ്റർ ഗ്രാഫിക്സ്"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "കാഴ്ചക്കാർ"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "കലണ്ടർ"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "ഡാറ്റാബേസ്"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "ധനകാര്യം"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "വേഡ് പ്രോസസർ"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "ഫോണ്ടുകൾ"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "കോഡെക്കുകൾ"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "ഇൻപുട്ട് ഉറവിടങ്ങൾ"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "ഭാഷ കൂട്ടം"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "ഷെൽ എക്സ്റ്റെൻഷനുകൾ"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "പ്രാദേശികവൽക്കരണം"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "ഹാർഡ്‌വെയർ ഡ്രൈവറുകൾ"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "സംഭാഷണം"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "വാർത്ത"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "വെബ് ബ്രൗസറുകൾ"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "ടെക്സ്റ്റ് എഡിറ്ററുകൾ"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "എല്ലാം"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "സവിശേഷമായവ"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "കല"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "ജീവചരിത്രം"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "കോമിക്സ്"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "കല്‍പിതം"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "ആരോഗ്യം"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "ചരിത്രം"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "ജീവിതശൈലി"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "രാഷ്ട്രീയം"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "ഡെവലപ്പർ ഉപകരണങ്ങൾ"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "ശബ്ദവും ചലച്ചിത്രവും"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "ഡെവലപ്പർ ഉപകരണങ്ങൾ"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "വിദ്യാഭ്യാസവും ശാസ്ത്രവും"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "വിനോദങ്ങൾ"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "ഗ്രാഫിക്സും ഛായാഗ്രഹണവും"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "ഉത്പാദനക്ഷമത"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "ആശയവിനിമയവും വാർത്തയും"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "പരാമര്‍ശം"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "ആവശ്യവസ്തുകൾ"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:73
+msgid "OS Updates"
+msgstr "OS പുതുക്കലുകൾ"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:78
+msgid "Includes performance, stability and security improvements."
+msgstr "പ്രകടനം, സ്ഥിരത, സുരക്ഷാ മെച്ചപ്പെടുത്തലുകൾ എന്നിവ ഉൾപ്പെടുന്നു."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "സവിശേഷമായ ചിത്രങ്ങൾ ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "വെബ് അപ്ലിക്കേഷനുകളുടെ പിന്തുണ"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "ജനപ്രിയ ബ്രൗസറിൽ വെബ് ആപ്ലിക്കേഷനുകൾ പ്രവർത്തിപ്പിക്കുക"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:112
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "ഗ്നോം സോഫ്റ്റ്‌വെയർ ആപ്പ്സ്ട്രീം സിസ്റ്റം-മുഴുകെയുള്ള ഇൻസ്റ്റാളർ"
+
+#: plugins/external-appstream/gs-install-appstream.c:114
+msgid "Failed to parse command line arguments"
+msgstr "നിര്‍ദേശ ലൈൻ ആർഗ്യുമെന്റുകൾ വിശകലനം ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:121
+msgid "You need to specify exactly one filename"
+msgstr "നിങ്ങൾ ഒരു ഫയൽനാമം വ്യക്തമാക്കേണ്ടതുണ്ട്"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:128
+msgid "This program can only be used by the root user"
+msgstr "ഈ പ്രയോഗം റൂട്ട് ഉപയോക്താവിനായി മാത്രം ഉപയോഗിയ്ക്കുവാൻ സാധിയ്ക്കുന്നു"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:136
+msgid "Failed to validate content type"
+msgstr "ഉള്ളടക്ക തരം സാധൂകരിക്കുന്നതിൽ പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to copy"
+msgstr "പകർത്തുന്നത് പരാജയപ്പെട്ടു"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:243
+msgid "Downloading extra metadata files…"
+msgstr "അധിക മെറ്റാഡാറ്റ ഫയലുകൾ ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+msgid "Downloading upgrade information…"
+msgstr "നവീകരണ വിവരം ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:308
+msgid "Upgrade for the latest features, performance and stability improvements."
+msgstr "ഏറ്റവും പുതിയ സവിശേഷതകൾ, പ്രകടനം, സ്ഥിരത മെച്ചപ്പെടുത്തലുകൾ എന്നിവയ്ക്കായുള്ള നവീകരണം."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "ഫ്ലാറ്റ്പാക്ക് പിന്തുണ"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "ലിനക്സിൽ പണിയിട പ്രയോഗങ്ങൾക്കു വേണ്ടിയുള്ള ഒരു ചട്ടക്കൂടാണ് ഫ്ളാറ്റ്പാക്ക്"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:571
+msgid "Getting flatpak metadata for %s…"
+msgstr "%s എന്നതിനായി ഫ്ളാറ്റ്പാക്ക് മെറ്റാഡാറ്റ സ്വീകരിക്കുന്നു…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:673
+msgid "Downloading firmware update signature…"
+msgstr "ഫേംവെയർ പുതുക്കൽ സിഗ്നേച്ചർ ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:714
+msgid "Downloading firmware update metadata…"
+msgstr "ഫേംവെയർ പുതുക്കൽ മെറ്റാഡാറ്റ ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "ഫേംവെയർ നവീകരണ പിന്തുണ"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "ഫേംവെയർ നവീകരിക്കാനുള്ള പിന്തുണ ലഭ്യമാക്കുന്നു"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr "അപ്ലിക്കേഷൻ മൂല്യം ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "ഡെസ്ക്ടോപ്പ് മൂല്യങ്ങളുടെ പിന്തുണ തുറക്കുക"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ആപ്ലിക്കേഷനുകളുടെ ഉപയോക്തൃ അവലോകനങ്ങൾ നൽകുന്ന ഒരു സേവനമാണ് ODRS"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:392
+msgid "GNOME Shell Extensions Repository"
+msgstr "ഗ്നോം ഷെൽ എക്സ്റ്റെൻഷനുകൾ റിപോസിറ്ററി"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:704
+msgid "Downloading shell extension metadata…"
+msgstr "ഷെൽ എക്സ്റ്റൻഷൻ മെറ്റാഡാറ്റ ഡൗൺലോഡ് ചെയ്യുന്നു…"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:209
+msgid "Snap Store"
+msgstr "സ്നാപ്പ് കലവറ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr "സ്നാപ്പ് പിന്തുണ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "സ്നാപ്പ് ഒരു സാർവത്രിക ലിനക്സ് പാക്കേജാണ്"
diff --git a/po/mr.po b/po/mr.po
new file mode 100644
index 0000000..16cf419
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,3881 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Translators:
+# Roddy Shuler <roddy@endlessm.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-12 13:14-0700\n"
+"PO-Revision-Date: 2018-06-12 20:17+0000\n"
+"Last-Translator: Roddy Shuler <roddy@endlessm.com>\n"
+"Language-Team: Marathi (http://www.transifex.com/endless-os/gnome-software/language/mr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1007
+msgid "The GNOME Project"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates in GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel and not perform any "
+"automatic updates actions."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically perform updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads and installs updates in "
+"the background (except for some app types like packages, where it prompts "
+"the user to install them when ready)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This"
+" controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The list of extra sources that have been previously enabled"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:48
+msgid ""
+"The list of sources that have been previously enabled when installing third-"
+"party applications."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0"
+" means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official sources that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free "
+"software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Sources dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software sources"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show non-free software in search results"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "A list of non-free sources that can be optionally enabled"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:139
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:143
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "Sorts the apps shown in the overview in alphabetical order"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:151
+msgid ""
+"Overrides the name of the \"Featured\" entry in the side-filter (category "
+"list)"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr ""
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon
+#. file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr ""
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr ""
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr ""
+
+#: src/gnome-software.ui:24
+msgid "Software"
+msgstr ""
+
+#: src/gnome-software.ui:43 src/gs-sources-dialog.ui:23
+#: src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr ""
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr ""
+
+#. Translators: A label for a button to show only software which is already
+#. installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr ""
+
+#. Translators: A label for a button to show only updates which are available
+#. to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr ""
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-sources-dialog.ui:6
+#: src/gs-sources-dialog.ui:46
+msgid "Software Sources"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr ""
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1478
+msgid "Network Settings"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr ""
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr ""
+
+#: src/gs-app-addon-row.c:95 src/gs-app-row.c:430
+msgid "Pending"
+msgstr ""
+
+#: src/gs-app-addon-row.c:101 src/gs-app-row.ui:210 src/gs-app-tile.ui:51
+#: src/gs-background-tile.ui:67 src/gs-feature-tile.c:88
+#: src/gs-popular-tile.c:70
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: src/gs-app-addon-row.c:105 src/gs-app-row.c:218 src/gs-details-page.c:466
+msgid "Installing"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: src/gs-app-addon-row.c:109 src/gs-app-row.c:224
+msgid "Removing"
+msgstr ""
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr ""
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:342 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:612 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr ""
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr ""
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr ""
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:128
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: src/gs-application.c:128
+msgid "MODE"
+msgstr ""
+
+#: src/gs-application.c:130
+msgid "Search for applications"
+msgstr ""
+
+#: src/gs-application.c:130
+msgid "SEARCH"
+msgstr ""
+
+#: src/gs-application.c:132
+msgid "Show application details (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:132 src/gs-application.c:136
+msgid "ID"
+msgstr ""
+
+#: src/gs-application.c:134
+msgid "Show application details (using package name)"
+msgstr ""
+
+#: src/gs-application.c:134
+msgid "PKGNAME"
+msgstr ""
+
+#: src/gs-application.c:136
+msgid "Install the application (using application ID)"
+msgstr ""
+
+#: src/gs-application.c:138
+msgid "Open a local package file"
+msgstr ""
+
+#: src/gs-application.c:138
+msgid "FILENAME"
+msgstr ""
+
+#: src/gs-application.c:140
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:143
+msgid "Show verbose debugging information"
+msgstr ""
+
+#: src/gs-application.c:145
+msgid "Show profiling information for the service"
+msgstr ""
+
+#: src/gs-application.c:147
+msgid "Quit the running instance"
+msgstr ""
+
+#: src/gs-application.c:149
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:151
+msgid "Show version number"
+msgstr ""
+
+#: src/gs-application.c:353
+msgid "translator-credits"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:360
+#, c-format
+msgid "About %s"
+msgstr ""
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:364
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:171
+msgid "Visit website"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:176
+msgid "Install…"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:183
+msgid "Cancel"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:192 src/gs-common.c:279 src/gs-page.c:544
+msgid "Install"
+msgstr ""
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:199
+msgid "Update"
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: src/gs-app-row.c:203 src/gs-app-row.c:212 src/gs-page.c:700
+msgid "Uninstall"
+msgstr ""
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:330
+msgid "Device cannot be used during update."
+msgstr ""
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:340 src/gs-details-page.ui:991
+msgid "Source"
+msgstr ""
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:68
+msgid "To continue you need to sign in."
+msgstr ""
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:72
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr ""
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr ""
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr ""
+
+#. TRANSLATORS: This is the name and state of an app for the ATK object
+#: src/gs-background-tile.c:159 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr ""
+
+#: src/gs-background-tile.ui:81
+msgid "Scheduled update"
+msgstr ""
+
+#: src/gs-background-tile.ui:95
+msgid "Available in a USB drive"
+msgstr ""
+
+#: src/gs-background-tile.ui:109
+msgid "Requires download"
+msgstr ""
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:193
+msgid "Other"
+msgstr ""
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:198
+msgid "All"
+msgstr ""
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:202 src/gs-shell.c:2325
+msgid "Featured"
+msgstr ""
+
+#: src/gs-category-page.ui:81
+msgid "Extension Settings"
+msgstr ""
+
+#: src/gs-category-page.ui:110
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is"
+" recommended to disable them."
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:205
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:268
+msgid "Choose an application:"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:135
+msgid "OS updates are now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:138
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:142
+#, c-format
+msgid "%s is now installed"
+msgstr ""
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:145
+msgid "Application is ready to be used."
+msgstr ""
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:151
+msgid "Launch"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+msgid "Enable Third-Party Software Source?"
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:232
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by "
+"“%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:242
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: a software source is a repo
+#: src/gs-common.c:252
+msgid "This software source must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:262
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:275
+msgid "Don’t Warn Again"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:284
+msgid "Enable and Install"
+msgstr ""
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:429
+msgid "Detailed errors from the package manager follow:"
+msgstr ""
+
+#: src/gs-common.c:448 src/gs-details-page.ui:579
+msgid "Details"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Players are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Ability to spend real money in-game"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "No way to chat with other players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Player-to-player game interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "Player-to-player preset interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Uncontrolled chat functionality between players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "No way to talk with other players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "Uncontrolled audio or video chat functionality between players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "No sharing of user information with 3rd parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "Sharing user information with 3rd parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location to other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing physical location to other users"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is
+#. unknown
+#: src/gs-dbus-helper.c:294
+msgid "An application"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. MIME types.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional MIME Types Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. fonts.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Fonts Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. codecs.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Multimedia Codecs Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional
+#. printer drivers.
+#: src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:320
+msgid "Additional Printer Drivers Required"
+msgstr ""
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install
+#. additional packages.
+#: src/gs-dbus-helper.c:324
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:326
+msgid "Additional Packages Required"
+msgstr ""
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:335
+msgid "Find in Software"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#: src/gs-details-page.c:296 src/gs-details-page.c:330
+#: src/gs-details-page.ui:237
+msgid "_Install"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed but needs to be downloaded first
+#: src/gs-details-page.c:300 src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:334
+msgid "_Update"
+msgstr ""
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: src/gs-details-page.c:346
+msgid "_Install…"
+msgstr ""
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:393 src/gs-details-page.ui:536
+msgid "_Uninstall"
+msgstr ""
+
+#: src/gs-details-page.c:461
+msgid "Removing…"
+msgstr ""
+
+#: src/gs-details-page.c:480
+msgid "Pending installation…"
+msgstr ""
+
+#: src/gs-details-page.c:487
+msgid "Pending update…"
+msgstr ""
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:844
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:988
+msgctxt "version"
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1024
+msgctxt "updated"
+msgid "Never"
+msgstr ""
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1072
+msgctxt "origin"
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1481
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1610
+#, c-format
+msgid "Unable to find “%s”"
+msgstr ""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2217
+msgid "Public domain"
+msgstr ""
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2233 src/gs-details-page.ui:1386
+msgid "Free Software"
+msgstr ""
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2290
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-details-page.c:2306 src/gs-details-page.ui:1495
+msgid "More information"
+msgstr ""
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr ""
+
+#. Translators: A label for a button to add a shortcut to the selected
+#. application.
+#: src/gs-details-page.ui:209
+msgid "_Add to Desktop"
+msgstr ""
+
+#. Translators: A label for a button to remove a shortcut to the selected
+#. application.
+#: src/gs-details-page.ui:226
+msgid "_Remove from Desktop"
+msgstr ""
+
+#. Translators: A label for a button to execute the selected application.
+#: src/gs-details-page.ui:259
+msgid "_Launch"
+msgstr ""
+
+#: src/gs-details-page.ui:439
+msgid "No screenshot provided"
+msgstr ""
+
+#: src/gs-details-page.ui:475
+msgid "Software Source Included"
+msgstr ""
+
+#: src/gs-details-page.ui:476
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+
+#: src/gs-details-page.ui:489
+msgid "No Software Source Included"
+msgstr ""
+
+#: src/gs-details-page.ui:490
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr ""
+
+#: src/gs-details-page.ui:504
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been
+#. discovered.
+#: src/gs-details-page.ui:517
+msgid "Software Source Identified"
+msgstr ""
+
+#: src/gs-details-page.ui:518
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr ""
+
+#: src/gs-details-page.ui:519
+msgid "Only use software sources that you trust."
+msgstr ""
+
+#: src/gs-details-page.ui:551
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:592
+msgid "Developer _Website"
+msgstr ""
+
+#: src/gs-details-page.ui:704
+msgid "Localized in your Language"
+msgstr ""
+
+#: src/gs-details-page.ui:716
+msgid "Documentation"
+msgstr ""
+
+#: src/gs-details-page.ui:728
+msgid "Release Activity"
+msgstr ""
+
+#: src/gs-details-page.ui:740
+msgid "System Integration"
+msgstr ""
+
+#: src/gs-details-page.ui:752
+msgid "Sandboxed"
+msgstr ""
+
+#: src/gs-details-page.ui:777 src/gs-sources-dialog.ui:365
+msgid "Version"
+msgstr ""
+
+#: src/gs-details-page.ui:814
+msgid "Age Rating"
+msgstr ""
+
+#: src/gs-details-page.ui:852
+msgid "Updated"
+msgstr ""
+
+#: src/gs-details-page.ui:887
+msgid "Category"
+msgstr ""
+
+#: src/gs-details-page.ui:925
+msgid "Installed Size"
+msgstr ""
+
+#: src/gs-details-page.ui:958
+msgid "Download Size"
+msgstr ""
+
+#: src/gs-details-page.ui:1024
+msgid "Developer"
+msgstr ""
+
+#: src/gs-details-page.ui:1058
+msgid "License"
+msgstr ""
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1078
+msgid "Free"
+msgstr ""
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1095
+msgid "Proprietary"
+msgstr ""
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1112 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#: src/gs-details-page.ui:1166 src/gs-installed-page.c:490
+msgid "Add-ons"
+msgstr ""
+
+#: src/gs-details-page.ui:1179
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. Translators: Header of the section with other users' opinions about the
+#. app.
+#: src/gs-details-page.ui:1222
+msgid "Reviews"
+msgstr ""
+
+#. Translators: Button opening a dialog where the users can write and publish
+#. their opinions about the apps.
+#: src/gs-details-page.ui:1238
+msgid "_Write a Review"
+msgstr ""
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1260
+msgid "_Show More"
+msgstr ""
+
+#: src/gs-details-page.ui:1403
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied"
+" and modified."
+msgstr ""
+
+#: src/gs-details-page.ui:1462
+msgid "Proprietary Software"
+msgstr ""
+
+#: src/gs-details-page.ui:1479
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+
+#: src/gs-details-page.ui:1524
+msgid "Unknown Software License"
+msgstr ""
+
+#: src/gs-details-page.ui:1541
+msgid "The license terms of this software are unknown."
+msgstr ""
+
+#: src/gs-details-page.ui:1568
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1594
+msgid "No details were available for this rating."
+msgstr ""
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr ""
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr ""
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr ""
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr ""
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr ""
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr ""
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr ""
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr ""
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr ""
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr ""
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr ""
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr ""
+
+#. TRANSLATORS: program name, an application to add and remove software
+#. repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr ""
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr ""
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr ""
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr ""
+
+#: src/gs-editor.ui:296
+msgid "Name"
+msgstr ""
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr ""
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr ""
+
+#. This check button controls whether the application’s banner appears in the
+#. “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr ""
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr ""
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr ""
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr ""
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr ""
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr ""
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr ""
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr ""
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:146
+msgid " and "
+msgstr ""
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:149
+msgid ", "
+msgstr ""
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:175
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:183
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:225
+msgid "Unable to Find Requested Software"
+msgstr ""
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:325
+#, c-format
+msgid "%s not found"
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:329
+msgid "on the website"
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:336
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:351 src/gs-extras-page.c:362
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications"
+" might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:347 src/gs-extras-page.c:369
+#, c-format
+msgid "No applications are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:358
+#, c-format
+msgid "%s is not available."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:373
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:380
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:384
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:391 lib/gs-plugin-loader.c:1458
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:395
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:402
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:406
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:413
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:417
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:462
+msgid "this website"
+msgstr ""
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual
+#. codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:466
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:538 src/gs-extras-page.c:594 src/gs-extras-page.c:633
+msgid "Failed to find any search results"
+msgstr ""
+
+#: src/gs-extras-page.c:827
+#, c-format
+msgid "%s file format"
+msgstr ""
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See"
+" our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr ""
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr ""
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr ""
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr ""
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:486
+msgid "System Applications"
+msgstr ""
+
+#: src/gs-installed-page.c:620
+msgid "Click on items to select them"
+msgstr ""
+
+#: src/gs-installed-page.c:826
+msgid "Select"
+msgstr ""
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr ""
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr ""
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr ""
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr ""
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:76
+msgid "Software catalog is being downloaded"
+msgstr ""
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:80
+msgid "Software catalog is being loaded"
+msgstr ""
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr ""
+
+#: src/gs-loading-page.ui:37
+msgid "Starting up…"
+msgstr ""
+
+#: src/gs-menus.ui:7
+msgid "_Software Sources"
+msgstr ""
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr ""
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr ""
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr ""
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr ""
+
+#. add button
+#: src/gs-overview-page.c:372
+msgid "More…"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:588
+msgid "Recommended Audio & Video Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:593
+msgid "Recommended Games"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:598
+msgid "Recommended Graphics Applications"
+msgstr ""
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:603
+msgid "Recommended Productivity Applications"
+msgstr ""
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:992
+msgid ""
+"Provides access to additional software, including web browsers and games."
+msgstr ""
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:996
+msgid ""
+"Proprietary software has restrictions on use and access to source code."
+msgstr ""
+
+#. TRANSLATORS: this is the clickable
+#. * link on the proprietary info bar
+#: src/gs-overview-page.c:1003 src/gs-sources-dialog.c:290
+msgid "Find out more…"
+msgstr ""
+
+#. TRANSLATORS: button to turn on proprietary software sources
+#: src/gs-overview-page.c:1054
+msgid "Enable"
+msgstr ""
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr ""
+
+#: src/gs-overview-page.ui:54
+msgid "Enable Proprietary Software Sources?"
+msgstr ""
+
+#: src/gs-overview-page.ui:122
+msgid "Featured Application"
+msgstr ""
+
+#: src/gs-overview-page.ui:155
+msgid "Categories"
+msgstr ""
+
+#. Translators: This is a heading for software which has been featured
+#. ('picked') by the distribution.
+#: src/gs-overview-page.ui:315
+msgid "Editor’s Picks"
+msgstr ""
+
+#. Translators: This is a heading for software which has been recently
+#. released upstream.
+#: src/gs-overview-page.ui:359
+msgid "Recent Releases"
+msgstr ""
+
+#: src/gs-overview-page.ui:446
+msgid "No Application Data Found"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:445
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:449
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr ""
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:462
+msgid "Purchase"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:535
+#, c-format
+msgid "Prepare %s"
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:669
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:673
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:681
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr ""
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:684
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#: lib/gs-plugin-loader.c:1461
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr ""
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr ""
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr ""
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr ""
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr ""
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr ""
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr ""
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr ""
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr ""
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr ""
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:98
+msgid "Hate it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:102
+msgid "Don’t like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:106
+msgid "It’s OK"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:110
+msgid "Like it"
+msgstr ""
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:114
+msgid "Love it"
+msgstr ""
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:136
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "Please choose a star rating"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:144
+msgid "The summary is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:148
+msgid "The summary is too long"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:152
+msgid "The description is too short"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:156
+msgid "The description is too long"
+msgstr ""
+
+#. Translators: Title of the dialog box where the users can write and publish
+#. their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr ""
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr ""
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr ""
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr ""
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr ""
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr ""
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr ""
+
+#. Translators: Users can express their opinions about other users' opinions
+#. about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr ""
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr ""
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr ""
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr ""
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr ""
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr ""
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr ""
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr ""
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:491
+msgid "Could not create cache"
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:552
+msgid "Screenshot not valid"
+msgstr ""
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:567
+msgid "Screenshot not available"
+msgstr ""
+
+#: src/gs-screenshot-image.c:626
+msgid "Screenshot"
+msgstr ""
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:157
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr ""
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr ""
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:890 src/gs-shell.c:895 src/gs-shell.c:910 src/gs-shell.c:914
+#, c-format
+msgid "“%s”"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:942
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:948
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955
+msgid "Unable to download updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:960
+msgid ""
+"Unable to download updates: internet access was required but wasn’t "
+"available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:969
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:974
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:982
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:987
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:992
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:999
+msgid "Unable to get list of updates"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1045
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1051
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1063
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1069
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1076
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1082
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1087
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1095
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1102
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1122
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1126
+msgid "It is not possible to install software until this has been resolved."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1137
+#, c-format
+msgid "For more information, visit %s."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1146
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1155
+#, c-format
+msgid "Unable to install %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1201
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1207
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1213
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1221
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1230
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1237
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1244
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1252
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1261
+#, c-format
+msgid "Unable to update %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1306
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1326
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1335
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1342
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1349
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1356
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1407
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1413
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1419
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1426
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to remove %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1481
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1488 src/gs-shell.c:1536 src/gs-shell.c:1584
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1496 src/gs-shell.c:1544 src/gs-shell.c:1611
+msgid "Sorry, something went wrong"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1531
+msgid "Failed to install file: authentication failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1578
+#, c-format
+msgid "Unable to contact %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1593
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1598
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1605
+msgid "AC power is required"
+msgstr ""
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: src/gs-sources-dialog.c:109
+msgid "No applications or addons installed; other software might still be"
+msgstr ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:114
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:121
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: src/gs-sources-dialog.c:129
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-sources-dialog.c:135
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-sources-dialog.c:142
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: nonfree software
+#: src/gs-sources-dialog.c:280
+msgid "Typically has restrictions on use and access to source code."
+msgstr ""
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-sources-dialog.c:587
+msgid "the operating system"
+msgstr ""
+
+#. TRANSLATORS: list header
+#: src/gs-sources-dialog.c:679
+msgid "Proprietary Software Sources"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-sources-dialog.c:687
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr ""
+
+#: src/gs-sources-dialog.ui:161
+msgid "Additional Sources"
+msgstr ""
+
+#: src/gs-sources-dialog.ui:181
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr ""
+
+#: src/gs-sources-dialog.ui:266
+msgid "No software installed from this source"
+msgstr ""
+
+#: src/gs-sources-dialog.ui:293
+msgid "Installed from this Source"
+msgstr ""
+
+#: src/gs-sources-dialog.ui:339
+msgid "Source Details"
+msgstr ""
+
+#: src/gs-sources-dialog.ui:396
+msgid "Last Checked"
+msgstr ""
+
+#: src/gs-sources-dialog.ui:413
+msgid "Added"
+msgstr ""
+
+#: src/gs-sources-dialog.ui:430
+msgid "Website"
+msgstr ""
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr ""
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr ""
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:129
+msgid "No update description available."
+msgstr ""
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:224
+#, c-format
+msgid "Installed on %s"
+msgstr ""
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:244
+msgid "Installed Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:420
+msgid "Additions"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:424
+msgid "Removals"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:428
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:432
+msgid "Downgrades"
+msgstr ""
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr ""
+
+#: src/gs-update-monitor.c:169
+msgid "Security Updates Pending"
+msgstr ""
+
+#: src/gs-update-monitor.c:170
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: src/gs-update-monitor.c:173
+msgid "Restart & Install"
+msgstr ""
+
+#: src/gs-update-monitor.c:177
+msgid "Software Updates Available"
+msgstr ""
+
+#: src/gs-update-monitor.c:178
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:181 src/gs-updates-page.c:800
+msgid "Not Now"
+msgstr ""
+
+#: src/gs-update-monitor.c:182
+msgid "View"
+msgstr ""
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:696 src/gs-updates-page.ui:79
+msgid "Operating System Updates Unavailable"
+msgstr ""
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:698
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:752
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:756
+msgid "Software Upgrade Available"
+msgstr ""
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:1040
+msgid "Software Updates Failed"
+msgstr ""
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:1042
+msgid "An important OS update failed to be installed."
+msgstr ""
+
+#: src/gs-update-monitor.c:1043
+msgid "Show Details"
+msgstr ""
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1065
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1069
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1080
+msgctxt "updates"
+msgid "Review"
+msgstr ""
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1127
+msgid "Failed To Update"
+msgstr ""
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1133
+msgid "The system was already up to date."
+msgstr ""
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1138
+msgid "The update was cancelled."
+msgstr ""
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1144
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you"
+" have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1150
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1156
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1161
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:306
+msgid "%R"
+msgstr ""
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:309
+msgid "%l:%M %p"
+msgstr ""
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:315
+msgid "Yesterday, %R"
+msgstr ""
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:319
+msgid "Yesterday, %l:%M %p"
+msgstr ""
+
+#: src/gs-updates-page.c:322
+msgid "Two days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:324
+msgid "Three days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:326
+msgid "Four days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:328
+msgid "Five days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:330
+msgid "Six days ago"
+msgstr ""
+
+#: src/gs-updates-page.c:332
+msgid "One week ago"
+msgstr ""
+
+#: src/gs-updates-page.c:334
+msgid "Two weeks ago"
+msgstr ""
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:338
+msgid "%e %B %Y"
+msgstr ""
+
+#. FIXME: We are commenting out the code that checked the status because
+#. * the message it returned is not what a plugin may be doing (it can be
+#. * simply refreshing the metadata), so we need to fix this (maybe adding
+#. * different types of 'downloading' status) in the future.
+#. if (status == GS_PLUGIN_STATUS_DOWNLOADING) {
+#. /\* TRANSLATORS: the updates are being downloaded *\/
+#. return _("Downloading new updates…");
+#. }
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:359
+msgid "Looking for new updates…"
+msgstr ""
+
+#: src/gs-updates-page.c:389
+msgid "automatic updates on"
+msgstr ""
+
+#: src/gs-updates-page.c:392
+msgid "automatic updates off"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:440
+msgid "Setting up updates…"
+msgstr ""
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:441 src/gs-updates-page.c:448
+msgid "(This could take a while)"
+msgstr ""
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:554
+#, c-format
+msgid "Last checked: %s"
+msgstr ""
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:796
+msgid "Updates have been installed"
+msgstr ""
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:798
+msgid "A restart is required for them to take effect."
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:802
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:872
+msgid "Integrated Firmware"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:875 src/gs-updates-page.c:885
+msgid "Restart & Update"
+msgstr ""
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:882
+msgid "Requires Restart"
+msgstr ""
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:892
+msgid "Application Updates"
+msgstr ""
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:895
+msgid "Update All"
+msgstr ""
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:902
+msgid "Device Firmware"
+msgstr ""
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:1087
+msgid "_Restart & Update"
+msgstr ""
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:1091
+msgid "U_pdate All"
+msgstr ""
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1175
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1180
+msgid "Your OS is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1185
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1189
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1446
+msgid "Charges may apply"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1450
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1454
+msgid "Check Anyway"
+msgstr ""
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1470
+msgid "No Network"
+msgstr ""
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1474
+msgid "Internet access is required to check for updates."
+msgstr ""
+
+#: src/gs-updates-page.c:1907
+msgid "Restart & _Install"
+msgstr ""
+
+#: src/gs-updates-page.c:1925
+msgid "Check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr ""
+
+#: src/gs-updates-page.ui:227
+msgid "Software is up to date"
+msgstr ""
+
+#: src/gs-updates-page.ui:278
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+
+#: src/gs-updates-page.ui:290
+msgid "_Check Anyway"
+msgstr ""
+
+#: src/gs-updates-page.ui:333
+msgid "Go online to check for updates"
+msgstr ""
+
+#: src/gs-updates-page.ui:344
+msgid "_Network Settings"
+msgstr ""
+
+#: src/gs-updates-page.ui:426
+msgid "Updates are automatically managed"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr ""
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:98
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:146
+msgid "_Restart Now"
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:3
+msgid "App Center"
+msgstr ""
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "More Apps"
+msgstr "अधिक ऍप्स"
+
+#: src/org.gnome.Software.desktop.in:5
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon
+#. file name)!
+#: src/org.gnome.Software.desktop.in:7
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or
+#. localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:13
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;"
+msgstr ""
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or
+#. localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:31
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:35
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:39
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:45
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:49
+msgctxt "Menu of Graphics"
+msgid "3D Graphics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:52
+msgctxt "Menu of Graphics"
+msgid "Photography"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Graphics"
+msgid "Scanning"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:58
+msgctxt "Menu of Graphics"
+msgid "Vector Graphics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:61
+msgctxt "Menu of Graphics"
+msgid "Viewers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:72
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:87
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:91
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:102
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:147
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:150
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:153
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:166
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:177
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:180
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:184
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:187
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:191
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Utility"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Utility"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:213
+msgctxt "Menu of Communication"
+msgid "Chat"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:229
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:232
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:238
+msgctxt "Menu of Utility"
+msgid "Text Editors"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:241
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:244
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Settings"
+msgid "Settings"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of System"
+msgid "System"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:270 plugins/core/gs-desktop-common.c:314
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Art"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Feed"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "News"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:306
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Learning
+#: plugins/core/gs-desktop-common.c:324
+msgid "Learning"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:327
+msgid "Games"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Multimedia
+#: plugins/core/gs-desktop-common.c:330
+msgid "Multimedia"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Work
+#: plugins/core/gs-desktop-common.c:333
+msgid "Work"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:336
+msgid "Reference & News"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:339
+msgid "Utilities"
+msgstr ""
+
+#. TRANSLATORS: this is the menu spec main category for Dev Tools; it
+#. * should be a relatively short label; as an example, in Portuguese and
+#. * Spanish the direct translation of "Programming" (noun) is used
+#: plugins/core/gs-desktop-common.c:344
+msgid "Dev Tools"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:346
+msgid "USB"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-appstream.c:693
+msgid "Downloading extra metadata files…"
+msgstr ""
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr ""
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr ""
+
+#: plugins/eos/gs-plugin-eos.c:1917
+#, c-format
+msgid "Could not launch this application."
+msgstr ""
+
+#: plugins/eos/gs-plugin-eos.c:1974
+msgid "Endless Platform"
+msgstr ""
+
+#: plugins/eos/gs-plugin-eos.c:1977
+msgid "Framework for applications"
+msgstr ""
+
+#: plugins/eos/gs-plugin-eos.c:2126
+msgid "An Endless update with new features and fixes."
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr ""
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:102
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:104
+msgid "Failed to parse command line arguments"
+msgstr ""
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:111
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:118
+msgid "This program can only be used by the root user"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:126
+msgid "Failed to validate content type"
+msgstr ""
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:133
+msgid "Failed to copy"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+msgid "Downloading upgrade information…"
+msgstr ""
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:311
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:871
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr ""
+
+#: plugins/flatpak/gs-flatpak.c:2114
+#, c-format
+msgid ""
+"The app %s is missing its runtime. Update the app to repair this problem."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:3274
+msgid "Getting runtime source…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:864 plugins/fwupd/gs-plugin-fwupd.c:963
+msgid "Downloading firmware update signature…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:905 plugins/fwupd/gs-plugin-fwupd.c:1009
+msgid "Downloading firmware update metadata…"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:1100
+msgid "Downloading firmware update…"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr ""
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr ""
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr ""
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr ""
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:674
+msgid "Downloading shell extension metadata…"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr ""
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr ""
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr ""
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr ""
diff --git a/po/ms.po b/po/ms.po
new file mode 100644
index 0000000..bae0f95
--- /dev/null
+++ b/po/ms.po
@@ -0,0 +1,4380 @@
+# Malay translation for gnome-software.
+# Copyright (C) 2020 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# abuyop <abuyop@gmail.com>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-01-23 12:43+0000\n"
+"PO-Revision-Date: 2020-01-24 08:59+0800\n"
+"Language-Team: Pasukan Terjemahan GNOME\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"Last-Translator: abuyop <abuyop@gmail.com>\n"
+"X-Generator: Poedit 2.0.6\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Perisian GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Pengurus aplikasi untuk GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Perisian yang memudahkan pencarian dan pemasangan aplikasi-aplikasi baharu "
+"dan sambungan-sambungan sistem serta membuang aplikasi-aplikasi terpasang "
+"yang ada."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Perisian GNOME mewar-warkan aplikasi-aplikasi terfitur dan terkenal berserta "
+"keterangan yang berguna dan beberapa tangkap layarnya mengikut aplikasi. "
+"Aplikasi-aplikasi boleh ditemui sama ada melalui pelayaran senarai kategori "
+"atau dengan cara menggelintar. Ia juga membolehkan anda kemaskini sistem "
+"anda menggunakan kemaskini luar talian."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel selayang pandang"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel perincian"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel terpasang"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel kemas kini"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Perincian kemas kini"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1449
+msgid "The GNOME Project"
+msgstr "Projek GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Pasang satu fail appstream ke dalam lokasi sistem"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Memasang fail appstream ke dalam lokasi sistem"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Satu senarai projek-projek yang serasi"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ini merupakan satu senarai projek-projek serasi yang ditunjukkan seperti "
+"GNOME, KDE dan XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Sama ada hendak mengemas kini dan menatar dalam Perisian GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Jika dilumpuhkan Perisian GNOME akan mengemas kini panel, tidak membuat apa-"
+"apa tindakan kemas kini automatik atau memaklumkan penataran yang ada."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Muat turun dan pasang kemas kini secara automatik"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Jika dibenarkan, Perisian GNOME akan memuat turun kemas kini secara "
+"automatik di balik tabir, dan juga memasang yang tidak memerlukan but semula."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Maklum pengguna berkenaan perisian yang dikemas kini dari balik tabir"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Jika dibenarkan Perisian GNOME akan memaklumkan pengguna berkenaan kemas "
+"kini yang berlaku ketika pengguna melahu."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Sama ada hendak menyegar semula secara automatik ketika dalam sambung "
+"bermeter"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Jika dibenarkan, Perisian GNOME menyegar semula secara automatik di balik "
+"tabir walaupun menggunakan sambungan bermeter (walaupun memuat turun "
+"beberapa data meta, memeriksa kemas kini, dll., yang mungkin menimbulkan kos "
+"data buat pengguna)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Sama ada ini adalah kali pertama menjalankan Perisian GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Tunjuk penarafan bintang di sebelah aplikasi"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Tapis aplikasi-aplikasi berdasarkan set cabang lalai secara jauh"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Aplikasi-aplikasi bukan-bebas atau bukan-percuma menunjukkan dialog amaran "
+"sebelum pemasangan"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Ketika aplikasi-aplikasi bukan-bebas atau bukan-percuma dipasang, satu "
+"dialog amaran dipaparkan. Kawalan ini menunjukkan dialog tersebut boleh "
+"dipaksa atau sebaliknya."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Satu senarai aplikasi-aplikasi terkenal"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Satu senarai aplikasi-aplikasi yang hendak digunakan, membatalkan apa yang "
+"telah ditakrif oleh sistem."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Setem masa semakan kemas kini terakhir"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Setem masa pemberitahuan tatar yang terakhir"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Setem masa bagi kemas kini keselamatan terakhir, dipadamkan selepas kemas "
+"kini"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Setem masa kemas kini terakhir"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Setem masa terakhir bila sistem berada di dalam talian dan mendapat kemas "
+"kini"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Usia dalam saat untuk mengesahkan tangkap layar huluan masih sah"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Pemilihan nilai lebih besar menyebabkan proses ke pelayan jauh lebih cepat "
+"tetapi kemaskini-kemaskini bagi tangkap layar mengambil masa dipaparkan "
+"kepada pengguna. Nilai 0 bermaksud tidak sesekali memeriksa pelayan "
+"sekiranya imej sudah ada di dalam cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Pelayan yang digunakan untuk tinjauan-tinjauan aplikasi"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Skor karma minimum untuk tinjauan-tinjauan"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+"Tinjauan-tinjauan dengan nilai karma kurang daripada angka ini tidak akan "
+"ditunjukkan."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Satu senarai repositori rasmi yang tidak dianggap sebagai pihak ke-3"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Satu senarai repositori rasmi yang patut dianggap sebagai perisian bebas"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"URL lesen yang digunakan ketika sesebuah aplikasi patut dianggap sebagai "
+"perisian bebas"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Pasang aplikasi-aplikasi berkas untuk semua pengguna dalam sistem jika boleh"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Benarkan capaian ke dialog Repositori-Repositori Perisian"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Tawat penataran ketika pra-keluaran"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Tunjuk beberapa unsur UI yang memberitahu pengguna apl tersebut jenis bukan-"
+"bebas"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Tunjuk makluman ketika memasang repositori-repositori perisian bukan-bebas"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Tunjuk saiz terpasang bagi apl di dalam senarai aplikasi-aplikasi terpasang"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+"URL yang menjelaskan apa itu perisian bukan-bebas atau nonfree dan "
+"proprietari"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Satu senarai URL yang menuju ke fail-fail appstream yang akan dimuat turun "
+"ke dalam folder app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Pasang fail-fail AppStream ke dalam lokasi menyeluruhi-sistem untuk semua "
+"pengguna"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Benarkan repositori sambungan-sambungan GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Satu rentetan yang menyimpan id gnome-online-account yang digunakan ketika "
+"mendaftar masuk"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Pasang Perisian"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Pasang perisian terpilih di dalam sistem"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Pilih Semua"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Jangan Pilih Apa-Apa"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "Repositori _Perisian"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "_Kemas Kini Keutamaan"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Perisian"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Pergi balik"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_Explore"
+msgstr "_Jelajah"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "_Dipasang"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "_Kemas kini"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Gelintar"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:287 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Sumber"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repositori-Repositori Perisian"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "Periksa Cakera"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "Tetapan Rangkaian"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "Mula Semula Sekarang"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "Lagi Maklumat"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4504
+msgid "Local file"
+msgstr "Fail setempat"
+
+#: lib/gs-app.c:4556
+msgid "Package"
+msgstr "Pakej"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:412
+msgid "Pending"
+msgstr "Menunggu"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:175 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:68
+msgid "Installed"
+msgstr "Dipasang"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:165 src/gs-details-page.c:329
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "Memasang"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:171 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "Membuang"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mod permulaan: sama ada 'kemas kini', 'dikemas kini', 'dipasang' atau "
+"'selayang pandang'"
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "MOD"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr "Gelintar aplikasi"
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr "Tunjuk perincian aplikasi (menggunakan ID aplikasi)"
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr "Tunjuk perincian aplikasi (menggunakan nama pakej)"
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr "NAMAPKG"
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr "Pasang aplikasi (menggunakan ID aplikasi)"
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr "Buka satu fail pakej setempat"
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "NAMAFAIL"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Jenis interaksi yang dijangka bagi tindakan ini: sama ada 'tiada', 'maklum', "
+"atau 'penuh'"
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr "Tunjuk maklumat penyahpepijat berjela"
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr "Pasang mana-mana kemas kini-kemas kini tertangguh di balik tabir"
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr "Tunjuk keutamaan kemas kini"
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr "Tutup kejadian yang masih berjalan"
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr "Utamakan sumber-sumber fail setempat ke AppStream"
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "Tunjuk nombor versi"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "abuyop"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:1891
+#, c-format
+msgid "About %s"
+msgstr "Mengenai %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr "Satu cara yang elok mengurus perisian di dalam sistem anda."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:567
+msgid "Sorry! There are no details for that application."
+msgstr "Mohon maaf, tiada perincian untuk aplikasi tersebut."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:120
+msgid "Visit website"
+msgstr "Lawati tapak sesawang"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:125
+msgid "Install…"
+msgstr "Pasang…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:132 src/gs-updates-section.c:476
+msgid "Cancel"
+msgstr "Batal"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:139 src/gs-common.c:287 src/gs-page.c:273
+msgid "Install"
+msgstr "Pasang"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:146
+msgid "Update"
+msgstr "Kemas kini"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:150 src/gs-app-row.c:159 src/gs-page.c:434
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Buang"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:277
+msgid "Device cannot be used during update."
+msgstr "Peranti tidak dapat digunakan ketika kemas kini."
+
+#: src/gs-app-row.c:470 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Memerlukan keizinan tambahan"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:177
+msgid "Other"
+msgstr "Lain-lain"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:182
+msgid "All"
+msgstr "Semua"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:186
+msgid "Featured"
+msgstr "Difiturkan"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:475
+#, c-format
+msgid "Featured %s"
+msgstr "%s Terfitur"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Penarafan"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:58
+msgid "Name"
+msgstr "Nama"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:930
+msgid "Extension Settings"
+msgstr "Tetapan Sambungan"
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Sambungan-sambungan digunakan atas risiko anda sendiri. Jika anda masih "
+"menghadapi masalah sistem, disarankan melumpuhkannya."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "Tunjuk"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "Menu tapisan sub-kategori"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "Isih"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "Menu pengisihan sub-kategori"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Sila masukkan nombor dari 1 hingga %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr "Pilih satu aplikasi:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr "Kemas kini-kemas kini OS kini telah dipasang"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Kemas kini-kemas kini dipasang baru-baru ini telah tersedia untuk ditinjau "
+"semula"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr "%s kini telah dipasang"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+msgid "A restart is required for the changes to take effect."
+msgstr "Satu mula semula diperlukan supaya perubahan yang dibuat berkesan."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr "Aplikasi sedia digunakan."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-common.c:638
+msgid "Restart"
+msgstr "Mula semula"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "Lancar"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr "Pasang Perisian Pihak-Ketiga?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Benarkan Repositori Perisian Pihak-Ketiga?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s bukan <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">perisian bebas dan bersumber terbuka</a>, dan disediakan "
+"oleh \"%s\"."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s disediakan oleh \"%s\"."
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Repositori perisian ini mesti dibenarkan supaya pemasangan dapat diteruskan."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Ia mungkin menyalahi undang-undang jika memasang atau menggunakan %s di "
+"beberapa negara tertentu."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Ia mungkin menyalahi undang-undang jika memasang atau menggunakan kodeks ini "
+"di beberapa negara tertentu."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr "Jangan Beri Amaran Lagi"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr "Benarkan dan Pasang"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:440
+msgid "Detailed errors from the package manager follow:"
+msgstr "Ralat-ralat secara terperinci daripada pengurus pakej berikut:"
+
+#: src/gs-common.c:459 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Perincian"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:624
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Satu kemas kini telah dipasang"
+msgstr[1] "Kemas kini telah dipasang"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:629
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Satu mula diperlukan supaya ia berkesan."
+msgstr[1] "Satu mula diperlukan supaya ia berkesan."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:636 src/gs-update-monitor.c:119
+msgid "Not Now"
+msgstr "Bukan Sekarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:59
+msgid "No cartoon violence"
+msgstr "Tiada aksi keganasan kartun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "Cartoon characters in unsafe situations"
+msgstr "Karakter-karakter kartun dalam situasi-situasi tidak selamat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Karakter-karakter kartun berada dalam konflik yang agresif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Graphic violence involving cartoon characters"
+msgstr "Keganasan dalam bentuk grafik yang melibatkan karakter-karakter kartun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:70
+msgid "No fantasy violence"
+msgstr "Tiada aksi keganasan fantasi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Karakter-karakter dalam situasi tidak selamat yang mudah dibezakan dengan "
+"realiti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Karakter-karakter berada dalam konflik agresif yang mudah dibezakan dengan "
+"realiti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Keganasan dalam bentuk grafik yang mudah dibezakan dengan realiti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "No realistic violence"
+msgstr "Tiada aksi keganasan realistik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+"Karakter-karakter berkeadaan sedikit realistik dalam situasi-situasi tidak "
+"selamat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Gambaran karakter-karakter berkeadaan realistik dengan konflik agresif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+"Keganasan dalam bentuk grafik yang melibatkan karakter-karakter berkeadaan "
+"realistik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "No bloodshed"
+msgstr "Tiada pertumpahan darah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "Unrealistic bloodshed"
+msgstr "Pertumpahan darah tidak realistik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Realistic bloodshed"
+msgstr "Pertumpahan darah yang realistik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Gambaran pertumpahan darah dan pencacatan anggota badan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:103
+msgid "No sexual violence"
+msgstr "Tiada aksi keganasan seks"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Rape or other violent sexual behavior"
+msgstr "Aksi rogol atau lain-lain kelakuan seks ganas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:112
+msgid "No references to alcohol"
+msgstr "Tiada penggambaran berkenaan alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "References to alcoholic beverages"
+msgstr "Gambaran berkenaan minuman beralkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "Use of alcoholic beverages"
+msgstr "Penggunaan minuman beralkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "No references to illicit drugs"
+msgstr "Tiada penggambaran berkenaan dadah-dadah terlarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "References to illicit drugs"
+msgstr "Gambaran berkenaan dadah-dadah terlarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Use of illicit drugs"
+msgstr "Penggunaan dadah-dadah terlarang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "No references to tobacco products"
+msgstr "Tiada rujukan terhadap produk-produk tembakau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr "Gambaran berkenaan produk-produk tembakau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "Use of tobacco products"
+msgstr "Penggunaan produk-produk tembakau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:142
+msgid "No nudity of any sort"
+msgstr "Tiada unsur-unsur kebogelan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Brief artistic nudity"
+msgstr "Sedikit unsur-unsur kebogelan bersifat artistik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr "Gambaran kebogelan yang berlanjutan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "No references to or depictions of sexual nature"
+msgstr "Tiada gambaran berkenaan tabiat-tabiat seks"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "Provocative references or depictions"
+msgstr "Gambaran berkenaan sikap-sikap provokatif"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Sexual references or depictions"
+msgstr "Gambaran berkenaan aksi-aksi seksual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr "Kelakuan seksual yang jelas dan nyata"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:163
+msgid "No profanity of any kind"
+msgstr "Tiada aksi-aksi tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Mild or infrequent use of profanity"
+msgstr "Sedikit atau jarang-jarang kelakuan tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr "Ada pelakuan tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Strong or frequent use of profanity"
+msgstr "Aksi-aksi tidak senonoh kerap ditayangkan atau sangat menonjol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No inappropriate humor"
+msgstr "Tiada lawak tidak senonoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr "Lawak bodoh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Vulgar or bathroom humor"
+msgstr "Lawak ganas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Mature or sexual humor"
+msgstr "Lawak dewasa atau seks"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr "Tiada pengucapan bersifat diskriminasi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "Negativity towards a specific group of people"
+msgstr "Ada unsur-unsur negatif yang khusus kepada kumpulan tertentu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Ada unsur-unsur diskriminasi yang mengugat emosi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Ada unsur-unsur diskriminasi terhadap jantina, seks, bangsa atau agama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:196
+msgid "No advertising of any kind"
+msgstr "Tiada pengiklanan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "Product placement"
+msgstr "Ada memaparkan produk-produk tertentu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Gambaran jelas terhadap jenama-jenama atau produk-produk tertentu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Para pengguna digalakkan membeli item-item sebenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "No gambling of any kind"
+msgstr "Tiada aksi-aksi perjudian"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+"Ada unsur-unsur perjudian pada acara-acara secara rawak menggunakan token "
+"atau kredit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling using “play” money"
+msgstr "Ada aksi perjudian menggunakan duit \"khusus\" yang lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using real money"
+msgstr "Ada aksi perjudian menggunakan duit sebenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "No ability to spend money"
+msgstr "Tidak melibatkan penggunaan duit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "Users are encouraged to donate real money"
+msgstr "Para pengguna digalakkan menderma duit sebenar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:223
+msgid "Ability to spend real money in-app"
+msgstr "Ada fungsi yang melibatkan duit di dalam permainan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "No way to chat with other users"
+msgstr "Tiada fungsi sembang dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interaksi permainan pengguna-dengan-pengguna tanpa fungsi sembang"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "Moderated chat functionality between users"
+msgstr "Ada fungsi sembang terpantau antara pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Uncontrolled chat functionality between users"
+msgstr "Ada fungsi sembang tanpa kawalan antara pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "No way to talk with other users"
+msgstr "Tiada fungsi berbual dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Ada fungsi sembang audio atau video tanpa kawalan antara pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Tiada perkongsian nama pengguna rangkaian sosial atau alamat emel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "Sharing social network usernames or email addresses"
+msgstr "Ada perkongsian nama pengguna rangkaian sosial atau alamat emel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "No sharing of user information with third parties"
+msgstr "Tiada perkongsian maklumat pengguna dengan pihak ketiga"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "Checking for the latest application version"
+msgstr "Ada pemeriksaan versi aplikasi yang terkini"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Ada perkongsian data diagnostik yang membolehkan orang lain dapat mengenal "
+"pasti pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Ada perkongsian maklumat yang membolehkan orang lain dapat mengenal pasti "
+"pengguna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:268
+msgid "No sharing of physical location with other users"
+msgstr "Tiada perkongsian lokasi sebenar dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Sharing physical location with other users"
+msgstr "Ada perkongsian lokasi sebenar dengan pengguna lain"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No references to homosexuality"
+msgstr "Tiada gambaran berkenaan homoseks"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "Indirect references to homosexuality"
+msgstr "Gambaran tidak langsung berkenaan homoseks"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Kissing between people of the same gender"
+msgstr "Ada adegan cium antara sama jantina"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Ada adegan seks yang jelas dan nyata antara sama jantina"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "No references to prostitution"
+msgstr "Tiada gambaran berkenaan pelacuran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "Indirect references to prostitution"
+msgstr "Gambaran tidak langsung berkenaan pelacuran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Direct references to prostitution"
+msgstr "Ada gambaran jelas berkenaan pelacuran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Ada gambaran yang jelas dan nyata aksi-aksi pelacuran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "No references to adultery"
+msgstr "Tiada penggambaran berkenaan zina"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "Indirect references to adultery"
+msgstr "Ada gambaran tidak langsung berkenaan zina"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references to adultery"
+msgstr "Ada gambaran jelas berkenaan zina"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr "Ada gambaran yang jelas dan nyata berkenaan aksi-aksi penzinaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:312
+msgid "No sexualized characters"
+msgstr "Tiada karakter-karakter seks"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:315
+msgid "Scantily clad human characters"
+msgstr "Ada karakter-karakter manusia hampir tidak berpakaian"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Overtly sexualized human characters"
+msgstr "Ada karakter-karakter manusia berkelakuan seks yang melampau"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+msgid "No references to desecration"
+msgstr "Tiada gambaran berkenaan penodaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "Depictions of or references to historical desecration"
+msgstr "Ada gambaran berkenaan penodaan bersejarah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of modern-day human desecration"
+msgstr "Ada gambaran berkenaan penodaan manusia di era modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Ada gambaran jelas penodaan di era modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:333
+msgid "No visible dead human remains"
+msgstr "Tiada penampakan mayat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Visible dead human remains"
+msgstr "Ada penampakan mayat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Ada penampakan mayat yang telah terdedah dengan persekitaran"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Ada gambaran jelas penodaan jasad manusia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No references to slavery"
+msgstr "Tiada gambaran berkenaan perhambaan"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "Depictions of or references to historical slavery"
+msgstr "Ada gambaran berkenaan perhambaan bersejarah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of modern-day slavery"
+msgstr "Ada gambaran berkenaan perhambaan di era modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Ada gambaran jelas perhambaan di era modern"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:406
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:540
+msgid "General"
+msgstr "Am"
+
+#: src/gs-content-rating.c:549
+msgid "ALL"
+msgstr "SEMUA"
+
+#: src/gs-content-rating.c:553
+msgid "Adults Only"
+msgstr "Dewasa Sahaja"
+
+#: src/gs-content-rating.c:555
+msgid "Mature"
+msgstr "Dewasa"
+
+#: src/gs-content-rating.c:557
+msgid "Teen"
+msgstr "Remaja"
+
+#: src/gs-content-rating.c:559
+msgid "Everyone 10+"
+msgstr "Sesiapa Sahaja 10+"
+
+#: src/gs-content-rating.c:561
+msgid "Everyone"
+msgstr "Sesiapa Sahaja"
+
+#: src/gs-content-rating.c:563
+msgid "Early Childhood"
+msgstr "Awal Kanak-Kanak"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr "Satu aplikasi"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s memohon sokongan format fail tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr "Jenis MIME Tambahan Diperlukan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s memohon fon-fon tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr "Fon-fon Tambahan Diperlukan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s memohon kodeks-kodeks multimedia tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr "Kodeks-Kodeks Multimedia Tambahan Diperlukan"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s memohon pemacu pencetak tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr "Pemacu Pencetak Tambahan Diperlukan"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s memohon pakej-pakej tambahan."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr "Pakej-Pakej Tambahan Diperlukan"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr "Cari dalam Perisian"
+
+#: src/gs-details-page.c:324
+msgid "Removing…"
+msgstr "Membuang…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:343
+msgid "Pending installation…"
+msgstr "Pemasangan tertangguh…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:350
+msgid "Pending update…"
+msgstr "Kemas kini tertangguh…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:710
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Aplikasi ini hanya boleh digunakan jika ada sambungan internet yang aktif."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:855 src/gs-details-page.c:872
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.c:70
+msgid "_Install"
+msgstr "_Pasang"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:886 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "_Pasang…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:935
+msgid "_Launch"
+msgstr "_Lancar"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:960 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "B_uang"
+
+#: src/gs-details-page.c:991 src/gs-update-dialog.c:92
+msgid "Network"
+msgstr "Rangkaian"
+
+#: src/gs-details-page.c:991 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr "Boleh berkomunikasi menerusi rangkaian"
+
+#: src/gs-details-page.c:992 src/gs-update-dialog.c:93
+msgid "System Services"
+msgstr "Perkhidmatan-Perkhidmatan Sistem"
+
+#: src/gs-details-page.c:992 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr "Boleh mencapai perkhidmatan-perkhidmatan D-Bus di dalam bas sistem"
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr "Perkhidmatan-Perkhidmatan Sesi"
+
+#: src/gs-details-page.c:993 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr "Boleh mencapai perkhidmatan-perkhidmatan D-Bus di dalam bas sesi"
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "Peranti"
+
+#: src/gs-details-page.c:994 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr "Boleh mencapai fail-fail peranti sistem"
+
+#: src/gs-details-page.c:995 src/gs-details-page.c:996
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+msgid "Home folder"
+msgstr "Folder rumah"
+
+#: src/gs-details-page.c:995 src/gs-details-page.c:997
+#: src/gs-details-page.c:999 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr "Boleh lihat, sunting dan cipta fail"
+
+#: src/gs-details-page.c:996 src/gs-details-page.c:998
+#: src/gs-details-page.c:1000 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr "Boleh melihat fail-fail"
+
+#: src/gs-details-page.c:997 src/gs-details-page.c:998
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+msgid "File system"
+msgstr "Sistem fail"
+
+#: src/gs-details-page.c:999 src/gs-details-page.c:1000
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+msgid "Downloads folder"
+msgstr "Folder Muat Turun"
+
+#: src/gs-details-page.c:1001 src/gs-update-dialog.c:102
+msgid "Settings"
+msgstr "Tetapan"
+
+#: src/gs-details-page.c:1001 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr "Boleh melihat dan mengubah apa jua tetapan"
+
+#: src/gs-details-page.c:1002 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr "Sistem paparan legasi"
+
+#: src/gs-details-page.c:1002 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr "Menggunakan sistem paparan yang lama dan tidak selamat"
+
+#: src/gs-details-page.c:1003 src/gs-update-dialog.c:104
+msgid "Sandbox escape"
+msgstr "Sandbox escape"
+
+#: src/gs-details-page.c:1003 src/gs-update-dialog.c:104
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Boleh keluar dari kotak pasir dan memintas apa jua sekatan yang lain"
+
+#: src/gs-details-page.c:1018
+msgid "This application is fully sandboxed."
+msgstr "Aplikasi ini sepenuhnya dikotakpasirkan."
+
+#: src/gs-details-page.c:1026
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Tidak boleh menentukan bahagian sistem bagi aplikasi ini yang manakah boleh "
+"dicapai. Ia biasa berlaku kepada aplikasi-aplikasi yang lama."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1185
+msgctxt "version"
+msgid "Unknown"
+msgstr "Tidak Diketahui"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1198
+msgctxt "updated"
+msgid "Never"
+msgstr "Tidak sesekali"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1251
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Tidak Diketahui"
+
+#: src/gs-details-page.c:1304
+msgid "Low"
+msgstr "Rendah"
+
+#: src/gs-details-page.c:1306
+msgid "Medium"
+msgstr "Sederhana"
+
+#: src/gs-details-page.c:1308
+msgid "High"
+msgstr "Tinggi"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1310 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "Tidak Diketahui"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1648
+msgid "You need internet access to write a review"
+msgstr "Anda perlukan capaian internet untuk menulis ulasan"
+
+#: src/gs-details-page.c:1834 src/gs-details-page.c:1850
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Tidak dapat mencari \"%s\""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2428
+msgid "Public domain"
+msgstr "Domain awam"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2431
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2438
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2448 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Perisian Bebas"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2505
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Pengguna terikat dengan lesen berikut:"
+msgstr[1] "Pengguna terikat dengan lesen-lesen berikut:"
+
+#: src/gs-details-page.c:2532 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Maklumat lanjut"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Halaman perincian"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Memuat turun"
+
+#: src/gs-details-page.ui:252 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "Bata_l"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Kemas Kini"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Tambah pintasan"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Buang pintasan"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Tiada tangkap layar disediakan"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Repositori perisian disertakan"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Aplikasi ini menyertakan satu repositori perisian yang dapat menyediakan "
+"kemas kini-kemas kini, dan juga capaian ke lain-lain perisian."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Tiada Repositori Perisian Disertakan"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Aplikasi ini tidak menyertakan satu repositori perisian. Ia tidak "
+"dikemaskinikan dengan versi-versi baharu."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Perisian ini sudah pun disediakan oleh distribusi anda dan tidak perlu "
+"diganti."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Repositori Perisian Dikenal Pasti"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Dengan menambah repositori perisian, ia membolehkan anda capai perisian "
+"tambahan dan penatarannya."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Hanya guna repositori-repositori perisian yang anda percayai."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Tapak Sesawang"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Derma"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Diterjemah dalam Bahasa anda"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentasi"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Aktiviti Keluaran"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Penyepaduan Sistem"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Dikotakpasirkan"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:102
+msgid "Channel"
+msgstr "Saluran"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versi"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Penarafan Usia"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Keizinan"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Dikemaskini"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategori"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Saiz Dipasang"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Saiz Muat Turun"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Pembangun"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lesen"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Lapang"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietari"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:317
+msgid "Add-ons"
+msgstr "Tambahan"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Tambahan terpilih akan dipasang bersama-sama aplikasi."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Ulasan"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Tulis satu Ulasan"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Tunjuk _Lagi"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Ini bermaksud perisian boleh dijalankan, disalin, diagih, dikaji dan "
+"diubahsuai secara bebas."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Perisian Proprietari"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Ini bermaksud perisian ini adalah milik individu atau syarikat tertentu. "
+"Maka terdapat beberapa sekatan terhadap penggunaannya dan juga kod sumbernya "
+"tidak boleh dicapai."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Lesen Perisian Tidak Diketahui"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Terma lesen bagi perisian ini tidak diketahui."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Aplikasi telah ditaraf dengan cara ini kerana fiturnya:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Tiada perincian tersedia untuk penarafan ini."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:134
+msgid " and "
+msgstr " dan "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:137
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:163
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Fon tersedia untuk skrip %s"
+msgstr[1] "Fon tersedia untuk skrip %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:171
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Perisian tersedia untuk %s"
+msgstr[1] "Perisian tersedia untuk %s"
+
+#: src/gs-extras-page.c:213
+msgid "Unable to Find Requested Software"
+msgstr "Tidak boleh Cari Perisian yang Dipinta"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:318
+#, c-format
+msgid "%s not found"
+msgstr "%s tidak ditemui"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:322
+msgid "on the website"
+msgstr "di dalam laman sesawang"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:329
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Tiada aplikasi-aplikasi yang tersedia menyertakan fail %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:333 src/gs-extras-page.c:344 src/gs-extras-page.c:355
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Maklumat berkenaan%s, dan juga pilihan-pilihan bagaimana hendak mendapatkan "
+"aplikasi-aplikasi boleh dapatkan di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:340 src/gs-extras-page.c:362
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Tiada aplikasi tersedia untuk sokongan %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:351
+#, c-format
+msgid "%s is not available."
+msgstr "%s tidak tersedia."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:366
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Maklumat berkenaan%s, dan juga pilihan-pilihan bagaimana hendak mendapatkan "
+"aplikasi-aplikasi yang menyokong format ini boleh dapatkan di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:373
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Tiada fon-fon tersedia untuk sokongan skrip %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:377
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Maklumat berkenaan%s, dan juga pilihan-pilihan bagaimana hendak mendapatkan "
+"fon-fon tambahan boleh dapatkan di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:384
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Tiada kodeks tambahan tersedia untuk format %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:388
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Maklumat berkenaan%s, dan juga pilihan-pilihan bagaimana hendak mendapatkan "
+"kodeks yang dapat memainkan format ini bolehlah dapatkan di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:395
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Tiada sumber-sumber Plasma tersedia untuk sokongan %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:399
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Maklumat berkenaan%s, dan juga pilihan-pilihan bagaimana hendak mendapatkan "
+"sumber-sumber Plasma tambahan bolehlah dapatkan di %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:406
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Tiada pemacu pencetak tersedia untuk %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:410
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Maklumat berkenaan%s, dan juga pilihan-pilihan bagaimana hendak mendapatkan "
+"pemacu yang menyokong pencetak ini bolehlah dapatkan di %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:454
+msgid "this website"
+msgstr "laman sesawang ini"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:458
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Malangnya, %s yang anda gelintar tidak ditemui. Sila rujuk %s untuk maklumat "
+"lanjut."
+msgstr[1] ""
+"Malangnya, %s yang anda gelintar tidak ditemui. Sila rujuk %s untuk maklumat "
+"lanjut."
+
+#: src/gs-extras-page.c:526 src/gs-extras-page.c:582 src/gs-extras-page.c:621
+msgid "Failed to find any search results"
+msgstr "Gagal mencari apa-apa keputusan gelintar"
+
+#: src/gs-extras-page.c:809
+#, c-format
+msgid "%s file format"
+msgstr "Format fail %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Halaman kodeks"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Selamat Datang"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Selamat Datang ke Perisian"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Perisian membolehkan anda pasang perisian yang anda perlukan, semuanya dalam "
+"satu tempat. Sila rujuk cadangan-cadangan kami, layari kategori-kategori, "
+"atau gelintar aplikasi-aplikasi yang anda mahukan."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Jom Membeli-belah"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr "Telah Dibuang"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "Dipasang"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "Dikemaskini"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Tidak Diketahui"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:110 src/gs-review-row.c:64 src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Sejarah"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplikasi-Aplikasi Sistem"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Halaman terpasang"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr "Katalog perisian telah dimuat turun"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Memuatkan halaman"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Memulakan…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Halaman moderasi"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Tiada ulasan untuk dimoderasikan"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:83
+msgid "system"
+msgstr "sistem"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:86
+msgid "user"
+msgstr "pengguna"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:107 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Cabang"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Pemasangan"
+
+#. add button
+#: src/gs-overview-page.c:312
+msgid "More…"
+msgstr "Lagi…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:562
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplikasi Audio & Video yang Disarankan"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:567
+msgid "Recommended Games"
+msgstr "Permainan Disarankan"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:572
+msgid "Recommended Graphics Applications"
+msgstr "Aplikasi Grafik Disarankan"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:577
+msgid "Recommended Productivity Applications"
+msgstr "Aplikasi Produktiviti Disarankan"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:925 src/gs-repos-dialog.c:828
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Capai perisian tambahan melalui sumber-sumber pihak ketiga yang terpilih."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:929 src/gs-repos-dialog.c:832
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Sesetengah perisian bersifat proprietari dan memiliki sekatan terhadap "
+"penggunaan, perkongsian, dan capaian kepada kod sumbernya."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:934 src/gs-repos-dialog.c:837
+msgid "Find out more…"
+msgstr "Ketahui lagi…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:942 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Aktifkan"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Halaman selayang pandang"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Benarkan repositori-repositori Perisian Pihak Ketiga?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Terdahulu"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Berikutnya"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Pilihan Editor"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Keluaran Baru-baru Ini"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategori"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Tiada Data Aplikasi Ditemui"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:264
+#, c-format
+msgid "Prepare %s"
+msgstr "Sediakan %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:403
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Anda pasti mahu membuang repositori %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:407
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Semua aplikasi daripada %s akan dibuang, dan anda perlu memasang-semula "
+"repositori sebelum dapat menggunakannya semula."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:415
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Anda pasti mahu membuang %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:418
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s akan dibuang, dan anda perlu memasang-semulanya sebelum dapat "
+"menggunakannya lagi."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:52 src/gs-summary-tile.c:96
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Telah Dipasang)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Kemas Kini Keutamaan"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Kemas Kini-Kemas Kini Automatik"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Kemas kini-kemas kini automatik telah dilumpuhkan ketika menggunakan "
+"sambungan telefon bimbit atau bermeter."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Pemberitahuan Kemas Kini Automatik"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Tunjuk pemberitahuan ketika kemas kini-kemas kini telah dipasang secara "
+"automatik."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:114
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Sesetengah perisian yang dipasang tidak serasi dengan %s. Sekiranya anda "
+"teruskan, yang berikut akan dibuang secara automatik ketika penataran:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Perisian Tidak Serasi"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Teruskan"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:97
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplikasi dipasang"
+msgstr[1] "%u aplikasi dipasang"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:104
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u tambahan dipasang"
+msgstr[1] "%u tambahan dipasang"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:112
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplikasi"
+msgstr[1] "%u aplikasi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:118
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tambahan"
+msgstr[1] "%u tambahan"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s dan %s dipasang"
+msgstr[1] "%s dan %s dipasang"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Buang \"%s\"?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Lumpuhkan \"%s\"?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Perisian yang telah dipasang melalui repositori ini tidak lagi boleh "
+"menerima kemas kini, termasuklah pembaikan keselamatan."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Lumpuhkan"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:741
+msgid "the operating system"
+msgstr "sistem pengoperasian"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:807 src/gs-repos-dialog.c:843
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Repositori-repositori ini menambah baik perisian lalai yang disediakan oleh "
+"%s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:825
+msgid "Third Party Repositories"
+msgstr "Repositori-Repositori Pihak Ketiga"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Tiada Repositori-Repositori Tambahan"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Benarkan"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Buang…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Lumpuhkan…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Membenarkan"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Membenarkan"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Dibenarkan"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Dilumpuhkan"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "Benci"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "Tidak suka"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "OK lah"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "Suka"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "Sangat Suka"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr "Sila luangkan sedikit masa untuk menulis ulasan ini"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr "Sila pilh satu penarafan bintang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr "Penulisan terlalu pendek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr "Penulisan terlalu panjang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr "Huraian terlalu pendek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr "Huraian terlalu panjang"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Hantar Ulasan"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Hantar"
+
+#: src/gs-review-dialog.ui:108
+msgid "Summary"
+msgstr "Ringkasan"
+
+#: src/gs-review-dialog.ui:118
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Berikan catatan ringkas bagi ulasan anda, sebagai contoh: \"Apl hebat, "
+"sangat disarankan\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:143
+msgctxt "app review"
+msgid "Review"
+msgstr "Tinjauan"
+
+#: src/gs-review-dialog.ui:153
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Apa yang anda fikirkan berkenaan apl ini? Cuba berikan sebab-sebab pandangan "
+"anda."
+
+#: src/gs-review-dialog.ui:185
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Cari apakah data yang dihantar dalam <a href=\"https://odrs.gnome.org/privacy"
+"\">dasar kerahsiaan</a> kami."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "keseluruhan penarafan"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:222
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Anda boleh laporkan ulasan-ulasan berbentuk kasar, tidak senonoh, atau "
+"menunjukkan kelakuan diskriminikasi."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:227
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Setelah dilaporkan, ulasan tersebut akan disembunyikan sehinggalah ia "
+"disemak oleh pihak pentadbir."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:241
+msgid "Report Review?"
+msgstr "Laporkan Ulasan?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:245
+msgid "Report"
+msgstr "Lapor"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Adakah ulasan ini berguna?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ya"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Tidak"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Iya Ke"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Lapor…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Buang…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr "Tangkap layar tidak ditemui"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr "Gagal memuatkan imej"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:381
+msgid "Screenshot size not found"
+msgstr "Saiz tangkap layar tidak ditemui"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:411
+msgid "Could not create cache"
+msgstr "Tidak dapat cipta cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:471
+msgid "Screenshot not valid"
+msgstr "Tangkap layar tidak sah"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:486
+msgid "Screenshot not available"
+msgstr "Tangkap layar tidak tersedia"
+
+#: src/gs-screenshot-image.c:544
+msgid "Screenshot"
+msgstr "Tangkap layar"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:142
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u padanan lagi"
+msgstr[1] "%u padanan lagi"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Gelintar halaman"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Tiada Aplikasi Ditemui"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:877 src/gs-shell.c:882 src/gs-shell.c:897 src/gs-shell.c:901
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:948
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+"Tidak boleh memuat turun kemas kini-kemas kini perisian tegar daripada %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:954
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Tidak boleh memuat turun kemas kini-kemas kini daripada %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:961 src/gs-shell.c:1006
+msgid "Unable to download updates"
+msgstr "Tidak boleh memuat turun kemas kini-kemas kini"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:967
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Tidak boleh memuat turun kemas kini-kemas kini: capaian internet diperlukan "
+"tetapi tidak disediakan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:976
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Tidak boleh memuat turun kemas kini-kemas kini daripada %s: ruang cakera "
+"tidak mencukupi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:981
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Tidak boleh memuat turun kemas kini-kemas kini: ruang cakera tidak mencukupi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:988
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+"Tidak boleh memuat turun kemas kini-kemas kini: pengesahihan diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:993
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Tidak boleh memuat turun kemas kini-kemas kini: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:998
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Tidak boleh memuat turun kemas kini-kemas kini: anda tidak memiliki keizinan "
+"untuk memasang perisian"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1009
+msgid "Unable to get list of updates"
+msgstr "Tidak memperoleh senarai kemas kini"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1052
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Tidak boleh memasang %s kerana muat turun gagal daripada %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1058
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Tidak boleh memasang %s kerana muat turun gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1071
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Tidak boleh memasang %s kerana masa jalan %s tidak tersedia"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1077
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Tidak boleh memasang %s kerana tidak disokong"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1084
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Tidak boleh memasang: capaian internet diperlukan tetapi tidak disediakan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1090
+msgid "Unable to install: the application has an invalid format"
+msgstr "Tidak boleh memasang: aplikasi mempunyai format tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1095
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Tidak boleh memasang %s: ruang cakera tidak mencukupi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1102
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Tidak boleh memasang %s: pengesahihan diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Tidak boleh memasang %s: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1116
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Tidak boleh memasang %s: anda tidak memiliki keizinan untuk memasang perisian"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1124
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Tidak boleh memasang %s: kuasa AC diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1131
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Tidak boleh memasang %s: Kuasa bateri terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1140
+#, c-format
+msgid "Unable to install %s"
+msgstr "Tidak boleh memasang %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1187
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Tidak boleh mengemas kini %s daripada %s kerana muat turun gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1194
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Tidak boleh mengemas kini %s kerana muat turun gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1201
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Tidak boleh memasang kemas kini-kemas kini daripada %s kerana muat turun "
+"gagal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1205
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Tidak boleh memasang kemas kini-kemas kini kerana muat turun gagal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1211
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Tidak boleh mengemas kini: capaian internet diperlukan tetapi tidak "
+"disediakan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1221
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Tidak boleh mengemask ini %s: ruang cakera tidak mencukupi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1226
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Tidak boleh memasang kemas kini-kemas kini: ruang cakera tidak mencukupi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1236
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Tidak boleh mengemas kini %s: pengesahihan diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1241
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Tidak boleh memasang kemas kini: pengesahihan diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1250
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Tidak boleh mengemas kini %s: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1255
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Tidak boleh memasang kemas kini-kemas kini: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1264
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Tidak boleh mengemas kini %s: anda tidak memiliki keizinan untuk memasang "
+"perisian"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1270
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Tidak boleh memasang kemas kini-kemas kini: anda tidak memiliki keizinan "
+"untuk mengemas kini perisian"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1280
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Tidak boleh mengemas kini %s: kuasa AC diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Tidak boleh memasang kemas kini-kemas kini: kuasa AC diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1295
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Tidak boleh mengemas kini %s: Kuasa bateri terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1301
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Tidak boleh memasang kemas kini: Kuasa bateri terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1312
+#, c-format
+msgid "Unable to update %s"
+msgstr "Tidak boleh mengemas kini %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1315
+#, c-format
+msgid "Unable to install updates"
+msgstr "Tidak boleh memasang kemas kini-kemas kini"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Tidak boleh menatar %s daripada %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1363
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Tidak boleh menatar %s kerana muat turun gagal"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1372
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Tidak boleh menatar %s: capaian internet diperlukan tetapi tidak disediakan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1381
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Tidak boleh menatar %s: ruang cakera tidak mencukupi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1389
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Tidak boleh menatar %s: pengesahihan diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1396
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Tidak boleh menatar %s: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1403
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Tidak boleh menatar %s: anda tidak memiliki keizinan untuk menatarnya"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1410
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Tidak boleh menatar %s: kuasa AC diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1417
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Tidak boleh menatar ke %s: Kuasa bateri terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1426
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Tidak boleh menatar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1464
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Tidak boleh membuang %s: pengesahihan diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Tidak boleh membuang %s: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1476
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Tidak boleh membuang %s: anda tidak memiliki keizinan untuk membuang perisian"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1483
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Tidak boleh membuang %s: kuasa AC diperlukan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1490
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Tidak boleh membuang %s: Kuasa bateri terlalu rendah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1502
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Tidak boleh membuang %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1545
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Tidak boleh melancarkan %s: %s tidak dipasang"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1552 src/gs-shell.c:1603 src/gs-shell.c:1644
+#: src/gs-shell.c:1692
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Ruang cakera tidak mencukupi — bebaskan sedikit ruang dan cuba sekali lagi"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1563 src/gs-shell.c:1614 src/gs-shell.c:1655
+#: src/gs-shell.c:1726
+msgid "Sorry, something went wrong"
+msgstr "Maaf, ada masalah berlaku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1595
+msgid "Failed to install file: not supported"
+msgstr "Gagal memasang fail: tidak disokong"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1599
+msgid "Failed to install file: authentication failed"
+msgstr "Gagal memasang fail: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1636
+msgid "Failed to install: not supported"
+msgstr "Gagal memasang: tidak disokong"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1640
+msgid "Failed to install: authentication failed"
+msgstr "Gagal memasang: pengesahihan tidak sah"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1686
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Tidak boleh menghubungi %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1701
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+"%s perlu dimulakan semula supaya pemalam-pemalam baharu dapat digunakan."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1706
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Aplikasi ini perlu dimulakan semula supaya pemalam-pemalam baharu dapat "
+"digunakan."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1713
+msgid "AC power is required"
+msgstr "Kuasa AC diperlukan"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1717
+msgid "The battery level is too low"
+msgstr "Kuasa bateri terlalu rendah"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "Sumber: %s"
+
+#: src/gs-summary-tile.c:101
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Memasang)"
+
+#: src/gs-summary-tile.c:106
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Membuang)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr "_Buang Semua"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:187
+msgid "No update description available."
+msgstr "Tiada keterangan kemas kini tersedia."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:291
+#, c-format
+msgid "Installed on %s"
+msgstr "Dipasang pada %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:311
+msgid "Installed Updates"
+msgstr "Kemas kini-Kemas kini Terpasang"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:527
+msgid "Additions"
+msgstr "Penambahan"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:531
+msgid "Removals"
+msgstr "Pembuangan"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:535
+msgid "Updates"
+msgstr "Kemas kini-Kemas kini"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:539
+msgid "Downgrades"
+msgstr "Nyahtatar"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Tiada kemas kini-kemas kini telah dipasang dalam sistem ini."
+
+#: src/gs-update-monitor.c:107
+msgid "Security Updates Pending"
+msgstr "Kemas kini-Kemas kini Keselamatan Tertangguh"
+
+#: src/gs-update-monitor.c:108
+msgid "It is recommended that you install important updates now"
+msgstr "Disarankan anda memasang kemas kini-kemas kini penting sekarang"
+
+#: src/gs-update-monitor.c:111
+msgid "Restart & Install"
+msgstr "Mula Semula & Pasang"
+
+#: src/gs-update-monitor.c:115
+msgid "Software Updates Available"
+msgstr "Kemas kini-Kemas kini Perisian Sudah Tersedia"
+
+#: src/gs-update-monitor.c:116
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Kemas kini-kemas kini OS dan aplikasi penting sedia dipasangkan"
+
+#: src/gs-update-monitor.c:120
+msgid "View"
+msgstr "Pandangan"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:228
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Aplikasi Dikemas Kini — Mula Semula Diperlukan"
+msgstr[1] "%u Aplikasi Dikemas Kini — Mula Semula Diperlukan"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:234
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Aplikasi Dikemas Kini"
+msgstr[1] "%u Aplikasi Dikemas Kini"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:245
+#, c-format
+msgid "%s has been updated."
+msgstr "%s telah dikemaskinikan."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:248
+msgid "Please restart the application."
+msgstr "Sila mulakan semula aplikasi."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:256
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s dan %s telah dikemaskinikan."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:262 src/gs-update-monitor.c:281
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikasi memerlukan satu mula semula."
+msgstr[1] "%u aplikasi memerlukan satu mula semula."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:274
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Termasuk %s, %s dan %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:515 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Tiada Kemas kini-Kemas kini Sistem Pengoperasian"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:517
+msgid "Upgrade to continue receiving security updates."
+msgstr "Tatar untuk teruskan penerimaan kemas kini-kemas kini keselamatan."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:572
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Satu versi baharu %s telah sedia untuk dipasangkan"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:576
+msgid "Software Upgrade Available"
+msgstr "Penataran Perisian Sudah Tersedia"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:965
+msgid "Software Updates Failed"
+msgstr "Kemas kini-Kemas kini Perisian Gagal"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:967
+msgid "An important OS update failed to be installed."
+msgstr "Satu kemask ini OS penting gagal dipasang."
+
+#: src/gs-update-monitor.c:968
+msgid "Show Details"
+msgstr "Tunjuk Butiran"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:991
+msgid "System Upgrade Complete"
+msgstr "Penataran Sistem Selesai"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:996
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Selamat datang ke %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1002
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Kemas Kini Perisian Dipasang"
+msgstr[1] "Kemas Kini Perisian Dipasang"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Satu kemas kini OS penting telah dipasang."
+msgstr[1] "Beberapa kemas kini OS penting telah dipasang."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1017
+msgctxt "updates"
+msgid "Review"
+msgstr "Tinjauan"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1065
+msgid "Failed To Update"
+msgstr "Gagal Dikemaskinikan"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1071
+msgid "The system was already up to date."
+msgstr "Sistem sudah dikemaskinikan."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1076
+msgid "The update was cancelled."
+msgstr "Kemas kini dibatalkan."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1082
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Capaian internet diperlukan tetapi tidak tersedia. Sila pastikan anda "
+"mempunyai capaian internet kemudian cuba sekali lagi."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1088
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Terdapat beberapa masalah keselamatan dengan kemas kini. Sila rujuk penyedia "
+"perisian anda untuk maklumat lanjut."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1094
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Ruang cakera tidak mencukupi. Sila bebaskan sedikit ruang dan cuba sekali "
+"lagi."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1099
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Mohon maaf: kemas kini gagal dipasang. Sila tunggu kemaskini yang lain "
+"kemudian cuba sekali lagi. Sekiranya masalah masih berlanjutan, hubungi "
+"penyedia perisian anda."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "Semalam, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "Semalam, %l:%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "Dua hari yang lalu"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "Tiga hari yang lalu"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "Empat hari yang lalu"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "Lima hari yang lalu"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "Enam hari yang lalu"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "Seminggu yang lalu"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "Dua minggu yang lalu"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr "Mencari kemas kini-kemas kini baharu…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr "Menetapkan kemas kini…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr "(Ia mengambil sedikit masa)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr "Terakhir Diperiksa: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s tidak lagi disokong."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr "OS anda tidak lagi disokong."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr ""
+"Ini bermaksud ia tidak lagi menerima kemas kini-kemas kini keselamatan."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Oleh itu disarankan anda menatar ke versi yang terkini."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+msgid "Charges May Apply"
+msgstr "Bayaran Mungkin Dikenakan"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Memeriksa kemas kini-kemas kini ketika menggunakan jalur lebar telefon "
+"bimbit boleh menambah kos bila anda."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+msgid "Check _Anyway"
+msgstr "Periksa _Juga"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "Tiada Rangkaian"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr "Capaian internet diperlukan untuk memeriksa kemas kini."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1340
+msgid "Checking…"
+msgstr "Memeriksa…"
+
+#: src/gs-updates-page.c:1353
+msgid "Check for updates"
+msgstr "Periksa kemas kini"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Halaman kemas kini"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Perisian sudah dikemaskinikan"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Memeriksa kemas kini-kemas kini ketika menggunakan jalur lebar mudah alih "
+"boleh menambah kos bila anda"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Periksa Juga"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Ke dalam talian untuk memeriksa kemas kini"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Tetapan _Rangkaian"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Kemas kini telah diurus secara automatik"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:278
+msgid "Restart & Update"
+msgstr "Mula Semula & Kemas Kini"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:284
+msgid "Update All"
+msgstr "Kemas Kini Semua"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:415
+msgid "Integrated Firmware"
+msgstr "Perisian Tegar Bersepadu"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:419
+msgid "Requires Restart"
+msgstr "Perlukan Mula Semula"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:423
+msgid "Application Updates"
+msgstr "Kemas Kini-Kemas Kini Aplikasi"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:427
+msgid "Device Firmware"
+msgstr "Perisian Tegar Peranti"
+
+#: src/gs-updates-section.c:455 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Muat Turun"
+
+#: src/gs-upgrade-banner.c:64
+msgid "_Restart Now"
+msgstr "_Mula Semula Sekarang"
+
+#: src/gs-upgrade-banner.c:66
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Kemas kini-kemas kini akan diterap ketika komputer dimulakan semula."
+
+#: src/gs-upgrade-banner.c:72
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Oleh itu disarankan anda menyandar data dan fail anda sebelum ditatarkan."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:87
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Kini Tersedia"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:97
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Menunggu Muat Turun %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:107
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Memuat turun %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:118
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Sedia Dipasangkan"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+"Satu penataran major, dengan fitur-fitur baharu dan sedikit penambahbaikan "
+"visual."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Ketahui Lagi"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Tambah, buang atau kemas kini perisian di dalam komputer ini"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Kemas kini;Tatar;Sumber;Repositori;Keutamaan;Pasang;Nyahpasang;Program;"
+"Perisian;Apl;Kedai;"
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Penciptaan & Penyuntingan Audio"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Pemain Muzik"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Penyahpepijat"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Kecerdasan Buatan"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kimia"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Bahasa"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematik"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotik"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Tindakan"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Pengembaraan"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arked"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blok"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Berpapan"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kad"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulator"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Kanak-Kanak"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logik"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Main Peranan"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Olahraga"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategi"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafik 3D"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografi"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Pengimbasan"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafik Vektor"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Pelihat"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendar"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Pangkalan Data"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Kewangan"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Pemprosesan Kata"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fon"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeks"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Sumber Input"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pek Bahasa"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Sambungan Shell"
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Penyetempatan"
+
+#: plugins/core/gs-desktop-common.c:212
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Pemacu Perkakasan"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Sembang"
+
+#: plugins/core/gs-desktop-common.c:233
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Berita"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Pelayar Sesawang"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Penyunting Teks"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Semua"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Difiturkan"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Seni"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografi"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komik"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Cerekaan"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Kesihatan"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Sejarah"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Gaya Hidup"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politik"
+
+#: plugins/core/gs-desktop-common.c:289
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Olahraga"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:299
+msgid "Audio & Video"
+msgstr "Audio & Video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:302
+msgid "Developer Tools"
+msgstr "Alatan Pembangun"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:305
+msgid "Education & Science"
+msgstr "Pendidikan & Sains"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:308
+msgid "Games"
+msgstr "Permainan"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:311
+msgid "Graphics & Photography"
+msgstr "Grafik & Fotografi"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:314
+msgid "Productivity"
+msgstr "Produktiviti"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:320
+msgid "Communication & News"
+msgstr "Komunikasi & Berita"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:323
+msgid "Reference"
+msgstr "Rujukan"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:326
+msgid "Utilities"
+msgstr "Utiliti"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "Kemas Kini OS"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr "Melibatkan penambahbaikan prestasi, kestabilan dan keselamatan."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr "Memuat turun imej-imej terfitur…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:561
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:564
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Terdapat kemas kini Endless OS dengan fitur-fitur baharu dan pembaikan."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:825
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Perkhidmatan kemas kini EOS tidak memperoleh dan terapkan kemas kini."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:139
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Pemasang menyeluruhi-sistem AppStream Perisian GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "Failed to parse command line arguments"
+msgstr "Gagal menghurai argumen-argumen baris perintah"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:148
+msgid "You need to specify exactly one filename"
+msgstr "Anda perlu nyatakan satu nama fail sahaja"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:155
+msgid "This program can only be used by the root user"
+msgstr "Program ini hanya boleh digunakan oleh pengguna root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:163
+msgid "Failed to validate content type"
+msgstr "Gagal mengesahkan jenis kandungan"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:173
+msgid "Failed to copy"
+msgstr "Gagal disalin"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:235
+msgid "Downloading extra metadata files…"
+msgstr "Memuat turun fail-fail data meta tambahan…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "Memuat turun maklumat penataran…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Tatar untuk dapatkan fitur-fitur terkini, penambahanbaikan prestasi dan "
+"kestabilan."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Sokongan Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak merupakan rangka kerja untuk aplikasi-aplikasi atas meja Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:861
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Mendapatkan data meta flatpak untuk %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:135
+#, c-format
+msgid "%s Device"
+msgstr "Peranti %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:140
+#, c-format
+msgid "%s System"
+msgstr "Sistem %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:145
+#, c-format
+msgid "%s Embedded Controller"
+msgstr "Pengawal Terbenam %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:150
+#, c-format
+msgid "%s ME"
+msgstr "ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:155
+#, c-format
+msgid "%s Corporate ME"
+msgstr "ME Korporat %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:160
+#, c-format
+msgid "%s Consumer ME"
+msgstr "ME Pelanggan %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:166
+#, c-format
+msgid "%s Controller"
+msgstr "Pengawal %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:172
+#, c-format
+msgid "%s Thunderbolt Controller"
+msgstr "Pengawal Thunderbolt %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:669
+msgid "Downloading firmware update signature…"
+msgstr "Memuat turun tandatangan kemas kini perisian tegar…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:710
+msgid "Downloading firmware update metadata…"
+msgstr "Memuat turun data meta kemas kini perisian tegar…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Sokongan Penataran Perisian Tegar"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Menyediakan sokongan untuk penataran perisian tegar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:196
+msgid "Downloading application ratings…"
+msgstr "Memuat turun penarafan aplikasi…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS merupakan perkhidmatan yang menyediakan ulasan-ulasan pengguna terhadap "
+"aplikasi"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:74
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:150
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:910
+msgid "GNOME"
+msgstr "GNOME"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:406
+msgid "GNOME Shell Extensions Repository"
+msgstr "Repositori Sambungan Shell GNOME"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:806
+msgid "Downloading shell extension metadata…"
+msgstr "Memuat turun data meta sambungan shell…"
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:914
+msgid "GNOME Shell Extension"
+msgstr "Sambungan GNOME Shell"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:191
+msgid "Snap Store"
+msgstr "Kedai Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Sokongan Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap merupakan pakej Linux universal"
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..a1dc32f
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,4319 @@
+# Norwegian bokmål translation of gnome-software.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-packagekit package.
+# Kjartan Maraas <kmaraas@gnome.org>, 2007-2020.
+# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
+# Harald H. <haarektrans@gmail.com>, 2015.
+# po
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software 3.38.x\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-12-01 13:52+0100\n"
+"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
+"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Programvare"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Programhåndtering for GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Programvare lar deg finne og installere nye programmer og systemutvidelser "
+"samt fjerne eksisterende installerte programmer."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME programvare viser utvalgte og populære programmer med nyttige "
+"beskrivelser og flere skjermbilder for hvert program. Programmer kan finnes "
+"ved å bla gjennom listen med kategorier eller ved å søke. Det lar deg også "
+"oppdatere systemet ved bruk av frakoblet oppdatering."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Oversiktspanel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel med detaljer"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel med installert programvare"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel med oppdateringer"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Vis detaljer for oppdatering"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "GNOME prosjektet"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installer en appstream-fil i en systemlokasjon"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installerer en appstream-fil i en systemlokasjon"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "En liste med kompatible objekter"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "Dette er en liste med kompatible prosjekter vi bør vise slik som GNOME, KDE og XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Hvorvidt oppdateringer og oppgraderinger skal håndteres i GNOME programvare"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Last ned og installer oppdateringer automatisk"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Hvorvidt oppdateringer skal lastes ned automatisk på en betalt tilkobling"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "En liste med populære programmer"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Installer AppStream-filene i en systemlokasjon for alle brukere"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Installer programvare"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installer utvalgt programvare på systemet"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Velg alle"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Velg ingen"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Programvarekilder"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Br_ukervalg for oppdatering"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programvare"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Gå tilbake"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Utforsk"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installert"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Oppdateringer"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Søk"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Kilde"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Programvarekilder"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Undesøk disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Innstillinger for nettverk"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Start på nytt nå"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Mer informasjon"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatiske oppdateringer satt på pause"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Finn ut _mer"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokal fil"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pakke"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Utestående"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installert"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installerer"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Fjerner"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Oppstartsmodus: enten «updates», «updated», «installed» eller «overview»"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODUS"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Søk etter programmer"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SØK"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Vis detaljer for program. Bruker programmets ID"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Vis detaljer for program. Bruker programmets pakkenavn"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PAKKENAVN"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Installer programmet. Bruker programmets ID"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Åpne en lokal pakkefil"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILNAVN"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Type interaksjon som forventes for denne handlingen: enten «none», «notify» "
+"eller «full»"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Vis detaljert feilsøkingsinformasjon"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installerer utestående oppdateringer i bakgrunnen"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Vis brukervalg for oppdatering"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Avslutt kjørende instans"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Foretrekk lokale filkilder over AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Vis versjonsnummer"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Kjartan Maraas <kmaraas@gnome.org>, Torstein Adolf Winterseth <kvikende@fsfe."
+"org>, Harald H. <haarektrans@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Om Programvare"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "En enkel måte å håndtere programmene på ditt system."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Beklager! Ingen detaljer for dette programmet."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Besøk nettsted"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installer …"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installer"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Oppdater"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Fjern"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Enheten kan ikke brukes under oppdatering."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Krever flere rettigheter"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Pålogging kreves - ekstern %s (område %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Pålogging kreves"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "A_vbryt"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Logg inn"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Br_uker"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Passord"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Andre"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Alle"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Utvalgte"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Utvalgte fra %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Rangering"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Navn"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Vis"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Meny for underkategorifilter"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sorter"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Meny for underkategorisortering"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Skriv inn et tall fra 1 til %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Velg et program:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS-oppdateringer er nå installert"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"Nylig installerte oppdateringer er tilgjengelig for å skrive en "
+"tilbakemelding"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s er nå installert"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "En omstart kreves for å ta endringene i bruk."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Programmet er klart til bruk."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Start på nytt"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Start"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Installer tredjepartsprogramvare?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Slå på tredjeparts programvarekilde?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr "%s er ikke <a href=\"https://en.wikipedia.org/wiki/Free_and_open_source_software\">programvare som er fri og åpen kildekode</a>, og tilbys av «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s tilbys av %s."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Dette programvarelageret må slås på for å fortsette installasjonen."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Det kan være ulovlig å installere eller bruke %s i noen land."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Det kan være ulovlig å installere eller bruke denne kodeken i noen land."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Ikke varsle igjen"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Slå på og installer"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detaljert feilmelding fra pakkehåndtereren følger:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detaljer"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "En oppdatering ble installert"
+msgstr[1] "Oppdateringer ble installert"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "En omstart kreves for å ta den i bruk."
+msgstr[1] "En omstart kreves for å ta dem i bruk."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ikke nå"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Ingen tegneserievold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Tegneseriefigurer i utrygge situasjoner"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Tegneseriefigurer i agressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafisk vold som involverer tegneseriefigurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Ingen fantasivold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Karakterer i utrygge situasjoner som lett kan skilles fra virkeligheten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Karakterer i agressiv konflikt og lett å skille fra virkeligheten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafisk vold som lett kan skilles fra virkeligheten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Ingen realistisk vold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Mildt realistiske roller i utrygge situasjoner"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Avbilding av realistiske karakterer i agressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafisk vold som involverer realistiske karakterer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Ingen blodsutgytelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Urealistisk blodsutgytelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistisk blodsutgytelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Avbilding av blodsutgytelse og lemlesting av kroppsdeler"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Ingen seksuell vold"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Voldtekt eller annen voldelig seksuell adferd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Ingen referanser til alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referanser til alkoholholdige drikker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Bruk av alkoholholdige drikker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Ingen referanser til ulovlig dop"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referanser til ulovlig dop"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Bruk av ulovlig dop"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Ingen referanser til tobakksprodukter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referanser til tobakksprodukter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Bruk av tobakksprodukter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Ingen nakenhet av noen sort"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Kortvarig artistisk nakenhet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Langvarig nakenhet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Ingen seksuelle referanser eller avbildninger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provoserende referanser eller avbildinger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksuelle referanser eller avbildninger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafisk seksuell atferd"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Ingen banning av noe slag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Mild eller sjelden bruk av banning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Moderat bruk av banning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Sterk eller hyppig bruk av banning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Ingen upassende humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstick-humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgær eller baderomshumor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Voksen eller seksuell humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Ingen diskriminerende språkbruk av noe slag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativitet mot en spesifikk gruppe med mennesker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Disrkiminering med mål om å forårsake følelsesmessig skade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Eksplisitt diskriminering basert på kjønn, seksualitet, rase eller religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Ingen reklame av noe slag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Produktplassering"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Eksplisitte referanser til spesifikke merker eller merkevarebeskyttede "
+"produkter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Spillere oppfordres til å kjøpe spesifikke og virkelige varer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Ingen pengespill av noe slag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Pengespill på tilfeldige hendelser med bruk av polletter eller kreditt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Pengespill med lekepenger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Pengespill med ekte penger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Inge mulighet for å bruke penger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Spillere oppfordres til å donere ekte penger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Mulighet for å bruke penger i applikasjonen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Ingen måte å prate med andre brukere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Bruker-til-bruker interaksjon uten pratefunksjonalitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderert funksjonalitet for prating mellom spillere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Ukontrollert funksjonalitet for prating mellom spillere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Ingen måte å snakke med andre spillere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Ukontrollert funksjonalitet for lyd eller bildeprat mellom spillere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Ingen deling av brukernavn for sosiale medier eller e-postadresser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Deler brukernavn for sosiale medier eller e-postadresser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Ingen deling av brukerinformasjon med tredjepart"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Ser etter siste versjon av programmet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "Deler diagnostiske data som ikke lar andre identifisere brukeren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Deler informasjon som lar andre identifisere brukeren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Ingen deling av fysisk lokasjon med andre brukere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Deler fysisk lokasjon med andre brukere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Ingen referanser til homoseksualitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Indirekte referanser til homoseksualitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Kyssing mellom personer av samme kjønn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafisk seksuell oppførsel mellom personer av samme kjønn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Ingen referanser til prostitusjon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Indirekte referanser til prostitusjon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Direkte referanser til prostitusjon"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafiske avbildninger av prostitusjonsakten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Ingen referanser til utroskap"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Indirekte referanser til utroskap"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Direkte referanser til utroskap"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafiske avbildinger av utroskap"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Ingen seksualiserte karakterer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Lettkledde menneskelige karakterer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Åpenlyst seksualiserte menneskelige karakterer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Ingen referanser til skjending"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Avbildninger eller referanser til historisk skjending"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Avbildninger av menneskelig skjending i dagens verden"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafiske avbildinger av moderne skjending"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Ingen synlige døde mennesker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Synlige døde mennesker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Menneskelik som er utsatt for naturelementer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafiske avbildinger av skjending av menneskekropper"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Ingen referanser til slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Avbildinger eller referanser til historisk slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Avbildinger av moderne slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafiske avbildinger av moderne slaveri"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Generelt"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ALLE"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Kun voksne"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Moden"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Tenåring"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Alle over 10 år"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Alle"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Tidlig barndom"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Et program"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s ber om støtte for flere filformater."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Flere MIME-typer kreves"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s forespør flere skrifter."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Ekstra skrifter kreves"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s ber om flere mulimediekodeker."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Flere multimediekodeker kreves"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s ber om flere skriverdrivere."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Flere skriverdrivere kreves"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s ber om flere pakker."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Flere pakker kreves"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Finn i programvare"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Fjerner …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Utestående installasjon …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Utestående oppdatering …"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Forbereder …"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Dette programmet kan kun brukes når det finnes en aktiv tilkobling til "
+"internett."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installer"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installer …"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Start"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Fje_rn"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Nettverk"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Kan kommunisere over nettverk"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Systemtjenester"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Kan aksessere D-Bus tjenester på systembussen"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Økttjenester"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Kan aksessere D-Bus-tjenester på øktbussen"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Enheter"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Kan aksessere enhetsfiler for systemet"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Hjemmemappe"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Kan vise, redigere og opprette filer"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Kan vise filer"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Filsystem"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Mappe for nedlastinger"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Innstillinger"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Kan vise og endre alle innstillinger"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Gammelt skjermsystem"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Bruker et gammelt og usikkert skjermsystem"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Kan unslippe sandkasse"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Kan unslippe sandkassen og omgå andre begrensninger"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Programmet kjører utelukkende i sandkassen."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Kan ikke bestemme hvilke deler av systemet denne applikasjonen aksesserer. "
+"Dette er typisk for eldre applikasjoner."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Ukjent"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Aldri"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Ukjent"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Lav"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Middels"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Høy"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Ukjent"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Du må ha tilgang til internett for å skrive en tilbakemelding"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Fant ikke «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Public domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Fri programvare"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Brukere er bundet av følgende lisens:"
+msgstr[1] "Brukere er bundet av følgende lisenser:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mer informasjon"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Side med detaljer"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Laster ned"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Oppdater"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Legg til snarvei"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Fje_rn snarvei"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ingen skjermdump gitt"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Programvarekilde inkludert"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Dette programmet inkluderer en programvarekilde som gir deg oppdateringer og "
+"tilgang til annen programvare."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Ingen programvarekilde inkludert"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Dette programmet inkluderer ikke en programvarekilde. Det vil ikke bli "
+"oppdatert med nye versjoner."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Denne programvaren tilbys allerede av din distribusjon og bør ikke erstattes."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Programvarekilde indentifisert"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Hvis du legger til denne programvarekilden vil du få tilgang til flere "
+"programmer og oppgraderinger."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Bruk kun programvarekilder du stoler på."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Nettsted"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Doner"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Tilpasset ditt språk"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentasjon"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Versjonsaktivitet"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Systemintegrasjon"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Kjører i sandkasse"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versjon"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Aldersrangering"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Rettigheter"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Oppdatert"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategori"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Installert størrelse"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Nedlastet størrelse"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Utvikler"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lisens"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Fri"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietær"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Tillegg"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Valgte tillegg vil bli installert med programmet."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Tilbakemeldinger"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "S_kriv en tilbakemelding"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Vi_s mer"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Dette betyr at programvaren fritt kan kjøres, kopieres, distribueres, "
+"studeres og endres."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Proprietær programvare"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Dette betyr at programvaren eies av et individ eller et selskap. Det er ofte "
+"begrensninger på bruk og kildekoden kan vanligvis ikke aksesseres."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Ukjent programvarelisens"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Lisensbetingelsene for denne programvaren er ukjent."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Programmet var vurdert på denne måten fordi det inneholder:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Ingen detaljer var tilgjengelig for denne vurderingen."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " og "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tilgjengelige skrifter for skriptet %s"
+msgstr[1] "Tilgjengelige skrifter for skriptene %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Tilgjengelig programvare for %s"
+msgstr[1] "Tilgjengelig programvare for %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Fant ikke forespurt programvare"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Fant ikke %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "på nettstedet"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Fant ingen programmer som inneholder filen %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informasjon om %s, og alternativer for å få tak i manglende programmer kan "
+"finnes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Ingen programmer er tilgjengelig for å støtte %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s er ikke tilgjengelig"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informasjon om %s og alternativer for å få tak i programmer som støtter "
+"dette formatet kan finnes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Ingen skrifter er tilgjengelig for å støtte skript %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informasjon om %s og alternativer for å få tak i ekstra skrifter kan finnes "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Ingen tilleggskodeker tilgjengelig for formatet %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informasjon om %s og alternativer for å få tak i en kodek som kan spille av "
+"dette formatet kan finnes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Ingen Plasma-ressurser er tilgjengelig for å støtte %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informasjon om %s og alternativer for å få tak i ekstra Plasma-ressurser kan "
+"finnes %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Ingen skriverdrivere er tilgjengelig for %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informasjon om %s og alternativer for å få tak i en driver som støtter denne "
+"skriveren kan finnes %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "dette nettstedet"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "Fant ikke %s du søkte etter. Vennligst se %s for mer informasjon."
+msgstr[1] "Fant ikke %s du søkte etter. Vennligst se %s for mer informasjon."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Klarte ikke å finne noen søkeresultater"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s filformat"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Side for kodeker"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Velkommen"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Velkommen til programvare"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Programvare lar deg installere alle programmer du trenger fra ett og samme "
+"sted. Se våre anbefalinger, bla gjennom kategorier eller søk etter "
+"programmene du ønsker."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_La oss starte"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Fjernet"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installert"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Oppdatert"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Ukjent"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historikk"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systemprogrammer"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Side med installert programvare"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Programvarekatalogen lastes ned"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Laster side"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Starter opp …"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Nettverket som brukes har en dataplan. Tilkoblinger med en dataplan har "
+"begrensninger på datamengde eller kostnader forbundet med seg. For å spare "
+"på bruk av data har derfor automatiske oppdateringer blitt satt på pause.\n"
+"\n"
+"Automatiske oppdateringer vil gjenopptas når et nettverk uten dataplan blir "
+"tilgjengelig. Inntil dette skjer er det fortsatt mulig å installere "
+"oppdateringer manuelt.\n"
+"\n"
+"Alternativt kan innstillingen endres hvis nettverket er identifisert med "
+"dataplan uten at dette er korrekt."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Åpne inn_stillinger for nettverk"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderer side"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Ingen tilbakemeldinger å moderere"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "system"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "bruker"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Gren"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installasjon"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Mer …"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Anbefalte lyd- og bildeprogrammer"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Anbefalte spill"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Anbefalte grafikkprogrammer"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Anbefalte produktivitetsprogrammer"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Aksesser tilleggsprogramvare fra utvalgte tredjepartskilder."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Noe av denne programvaren er proprietær og har derfor begrensninger på bruk, "
+"deling og tilgang til kildekoden."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Finn ut mer …"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Slå på"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Oversiktsside"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Slå på tredjeparts programvarekilde?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Forrige"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Neste"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Redaktørens utvalgte"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nylige versjoner"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorier"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Ingen programdata funnet"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Forbered %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Er du sikker på at du vil fjerne kilden %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Alle programmer fra %s vil bli fjernet og du vil måtte installere kilden på "
+"nytt for å bruke dem igjen."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Er du sikker på at du vil fjerne %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s vil bli fjernet og du vil måtte installere det for å bruke det igjen."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (installert)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Oppdater brukervalg"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatiske oppdateringer"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatiske oppdateringer er slått av på mobil eller betalt tilkobling."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Varsling om automatiske oppdateringer"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Vis varsling når oppdateringer har blitt installert automatisk."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Deler av den installerte programvaren er ikke kompatibel med %s. Hvis du "
+"fortsetter vil følgende bli fjernet automatisk under oppgraderingen:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Inkompatibel programvare"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Fortsett"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u program installert"
+msgstr[1] "%u programmer installert"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u tillegg installert"
+msgstr[1] "%u tillegg installert"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u program"
+msgstr[1] "%u programmer"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tillegg"
+msgstr[1] "%u tillegg"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s og %s er nå installert"
+msgstr[1] "%s og %s er nå installert"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Fjern «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Slå av «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programvare som er installert fra denne kilden vil ikke motta oppdateringer "
+"eller sikkerhetsfikser."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Slå av"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operativsystemet"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Disse kildene supplementerer forvalgt programvare som tilbys av %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Tredjeparts programvarekilder"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Ingen ekstra programvarekilder"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Slå på"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Fje_rn …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "S_lå av …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Slår på"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Slår av"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Slått på"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Slått av"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Hater det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Liker det ikke"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Det er OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Liker det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Elsker det"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Vennligst bruk litt mer tid på tilbakemeldingen"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Vennligst velg antall stjerner"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Sammendraget er for kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Sammendraget er for langt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Beskrivelsen er for kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Beskrivelsen er for lang"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Legg inn tilbakemelding"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Legg inn"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Sammendrag"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Gi et kort sammendrag av tilbakemeldingen. For eksempel: «Bra program, "
+"anbefales»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Gi tilbakemelding"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Hva mener du om programmet? Prøv å begrunne dine syn."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Finn ut hvilke data som oversendes i våre <a href=\"https://odrs.gnome.org/"
+"privacy\">Retningslinjer for personvern</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "poengsum totalt"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Du kan rapportere tilbakemeldinger hvis de inneholder støtende, uforskammede "
+"eller diskriminerende oppførsel."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Hvis en tilbakemelding rapporteres vil den bli skjult til den er sjekket av "
+"en administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Rapporter tilbakemelding?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Rapporter"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Var denne tilbakemeldingen nyttig for deg?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nei"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Samme det"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Rapporter …"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Fjern …"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Skjermbilde ikke funnet"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Klarte ikke å laste bilde"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Størrelse på skjermbilde ble ikke funnet"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Kunne ikke lage buffer"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Skjermdump ikke gyldig"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Skjermdump ikke tilgjengelig"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Skjermdump"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u treff til"
+msgstr[1] "%u treff til"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Søkeside"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Ingen program funnet"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Kan ikke laste ned fastvareoppdateringer fra %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Kan ikke laste ned oppdateringer fra %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Kan ikke laste ned oppdateringer"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Kan ikke laste ned oppdateringer: Tilgang til internett kreves men var ikke "
+"tilgjengelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Kan ikke laste ned oppdateringer fra %s: ikke nok diskplass"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Kan ikke laste ned oppdateringer: ikke nok diskplass"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Kan ikke laste ned oppdateringer: autentisering var påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Kan ikke laste ned oppdateringer: autentiseringen var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Kan ikke laste ned oppdateringer: du har ikke rettigheter til å installere "
+"programvare"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Kan ikke hente liste med oppdateringer"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Kan ikke installere %s siden nedlasting fra %s feilet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Kan ikke installere %s fordi nedlastingen feilet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Kan ikke installere %s fordi kjøretidsmiljø %s ikke er tilgjengelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Kan ikke installere %s da den ikke er støttet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Kan ikke installere: Tilgang til internett kreves men var ikke tilgjengelig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Kan ikke installere: programmet har ugyldig format"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Kan ikke installere %s: ikke nok diskplass"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Kan ikke installere %s: autentisering var påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Kan ikke installere %s: ugyldig autentisering"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Kan ikke installere %s: du har ikke rettigheter til å installere programvare"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Kan ikke installere %s: Strømtilkobling kreves"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Kan ikke installere %s: Batterinivået er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Kan ikke installere %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Kan ikke oppdatere %s fra %s siden nedlasting feilet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Kan ikke oppdatere %s siden nedlasting feilet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Kan ikke installere oppdateringer fra %s fordi nedlastingen feilet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Kan ikke installere oppdateringer fordi nedlastingen feilet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Kan ikke oppdatere: Tilgang til internett var påkrevet men var ikke "
+"tilgjengelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Kan ikke oppdatere %s: ikke nok diskplass"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Kan ikke installere oppdateringer: ikke nok diskplass"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Kan ikke oppdatere %s: autentisering var påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Kan ikke installere oppdateringer: autentisering var påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Kan ikke oppdatere %s: autentiseringen var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Kan ikke installere oppdateringer: ugyldig autentisering"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Kan ikke oppdatere %s: du har ikke rettigheter til å oppdatere programvare"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Kan ikke oppdatere oppdateringer: du har ikke rettigheter til å oppdatere "
+"programvare"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Kan ikke oppdatere %s: strømtilkobling er påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Kan ikke installere oppdateringer: Strømtilkobling kreves"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Kan ikke oppdatere %s: Batterinivået er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Kan ikke installere oppdateringer: Batterinivået er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Kan ikke oppdatere %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Kan ikke installere oppdateringer"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Kan ikke oppgradere til %s fra %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Kan ikke oppgradere til %s siden nedlasting feilet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Kan ikke oppgradere til %s: nødvendig tilgang til internett var ikke "
+"tilgjengelig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Kan ikke oppgradere til %s: ikke nok diskplass"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Kan ikke oppgradere til %s: autentisering var påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Kan ikke oppgradere til %s: autentiseringen var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Kan ikke oppgradere til %s: du har ikke rettigheter til å oppgradere"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Kan ikke oppgradere til %s: strømtilkobling er påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Kan ikke oppgradere til %s: Batterinivået er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Kan ikke oppgradere til %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Kan ikke fjerne %s: autentisering var påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Kan ikke fjerne %s: autentiseringen var ugyldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Kan ikke fjerne %s: du har ikke rettigheter til å fjerne programvare"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Kan ikke fjerne %s: strømtilkobling er påkrevet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Kan ikke fjerne %s: Batterinivået er for lavt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Kan ikke fjerne %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Kan ikke starte %s: %s er ikke installert"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Ikke nok diskplass – frigjør plass og prøv igjen"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Beklager, noe gikk galt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Kan ikke installere filen: ikke støttet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Klarte ikke å installere fil: autentisering feilet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Klarte ikke å installere: ikke støttet"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Klarte ikke å installere: autentisering feilet"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Kan ikke kontakte %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s må startes på nytt for å bruke nye tillegg."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "DEtte programmet må startes på nytt for å bruke nye tillegg."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Strømtilkobling kreves"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Batterinivået er for lavt"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Kilde: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (installerer)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (fjerner)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Fje_rn alle"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Ingen beskrivelse tilgjengelig for oppdateringen."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installert %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Installerte oppdateringer"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Lagt til"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Fjernet"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Oppdateringer"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Nedgraderinger"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Ingen oppdateringer er installert på dette systemet."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Utestående sikkerhetsoppdateringer"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Det anbefales at du installerer viktige oppdateringer nå"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Start på nytt og installer"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Programvareoppdateringer er tilgjengelig"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Viktige OS- og programvareoppdateringer er klar til å installeres"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Vis"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u program oppdatert – omstart kreves"
+msgstr[1] "%u programmer oppdatert – omstart kreves"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u program oppdatert"
+msgstr[1] "%u programmer oppdatert"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s er oppdatert."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Vennligst start programmet på nytt."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s og %s er oppdatert."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u program krever en omstart."
+msgstr[1] "%u programmer krever en omstart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inkluderer %s, %s og %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Ingen oppdateringer er tilgjengelig for operativsystemet"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Oppgrader for å få nye sikkerhetsoppdateringer."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "En ny versjon av %s er tilgjengelig for installering"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Oppgradering er tilgjengelig"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Programvareoppdateringer feilet"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "En viktig OS-oppdatering feilet ved installasjon."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Vis detaljer"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Systemoppgradering fullført"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Velkommen til %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Programvareoppdatering installert"
+msgstr[1] "Programvareoppdateringer installert"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "En viktig OS-oppdatering har blitt installert."
+msgstr[1] "Viktige OS-oppdateringer har blitt installert."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Se gjennom"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Klarte ikke å oppdatere"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Systemet var allerede oppdatert."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Oppdateringen ble avbrutt."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Tilgang til internett var nødvendig men ikke tilgjengelig. Sjekk at du har "
+"tilgang til internett og prøv igjen."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Oppdateringen hadde problemer med sikkerheten. Spør progamvareleverandøren "
+"om flere detaljer."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Det var ikke nok diskplass. Vennligst frigjør plass og prøv igjen."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Beklager, installering av oppdateringen feilet. Vennligst vent på en ny "
+"oppdatering og prøv igjen. Ta kontakt med programvareleverandøren hvis "
+"problemet vedvarer."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%H.%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "I går, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "I går, %H.%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "To dager siden"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Tre dager siden"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Fire dager siden"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Fem dager siden"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Seks dager siden"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "En uke siden"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "To uker siden"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Ser etter nye oppdateringer …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Klargjør oppdateringer …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Dette kan ta tid)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Siste sjekk: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s er ikke støttet lenger."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Operativsystemet er ikke støttet lenger."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Dette betyr at det ikke får sikkerhetsoppdateringer."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Det anbefales at du oppgraderer til en nyere versjon."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Kostnader kan påløpe"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Sjekk etter oppdateringer mens du bruker mobilt bredbånd kan medføre at det "
+"påløper kostnader."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Sjekk _likevel"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Ikke noe nettverk"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Tilgang til internett kreves for å se etter oppdateringer."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Sjekker …"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Se etter oppdateringer"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Side med oppdateringer"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Programmene er oppdatert"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Å se etter oppdateringer ved bruk av mobilt bredbånd kan medføre kostnader"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Sjekk likevel"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Gå på nettet for å se etter oppdateringer"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Innstillinger for _nettverk"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Oppdateringer håndteres automatisk"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Start på nytt og oppdater"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Oppdater alle"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrert fastvare"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Krever omstart"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Programoppdateringer"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Fastvare for enhet"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "Last ne_d"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Det anbefales at du sikkerhetskopierer dine data og filer før oppgradering."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Sta_rt på nytt nå"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Oppdateringer vil bli tatt i bruk når datamaskinen startes på nytt."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s er nå tilgjengelig"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Venter på nedlasting av %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Laster ned %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s klar til installering"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "En større oppgradering, med ny funksjonalitet og annet."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Lær mer"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Legg til eller fjern programvare på denne datamaskinen"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Oppdateringer;Oppgrader;Kilder;Repo;Brukervalg;Installer;Avinstaller;Program;"
+"Programvare;App;Butikk;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Lag og rediger lyder"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musikkspillere"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Feilsøkere"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEer"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Kunstig intelligens"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kjemi"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Språk"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematikk"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotikk"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Eventyr"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokk"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Brett"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kort"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatorer"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Barn"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logikk"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rollespill"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategi"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafikk"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografi"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skanning"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafikk"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visning"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalender"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Database"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finans"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Tekstbehandler"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Skrifter"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeker"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Inndatakilder"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Språkpakker"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisering"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Maskinvaredrivere"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Lynmeldinger"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nyheter"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Nettlesere"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Tekstredigering"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Alle"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Utvalgte"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Kunst"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Geografi"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Tegneserier"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Helse"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historie"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Livsstil"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politikk"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Lyd og bilde"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Utviklingsverktøy"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Opplæring og vitenskap"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Spill"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafikk og fotografi"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivitet"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Kommunikasjon og nyheter"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referanse"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Verktøy"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Oppdateringer for operativsystemet"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inneholder forbedringer for ytelse, stabilitet og sikkerhet."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Laster ned utvalgte bilder …"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless operativsystem"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"En operativsystemoppdatering for Endless med ny funksjonalitet og "
+"feilrettinger."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"EOS oppdateringstjenesten kunne ikke hente og installere oppdateringen."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME programvare AppStream systeminstallasjon"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Klarte ikke å tolke kommandolinjeargumenter"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Du må oppgi eksakt ett filnavn"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Dette programmet kan kun brukes av root-brukeren"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Klarte ikke å validere innholdstype"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Klarte ikke å kopiere"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Laster ned ekstra metadatafiler …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Laster ned informasjon om oppgradering …"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Oppgrader ditt Fedora system med de siste funksjonene og forbedringene for "
+"ytelse og stabilitet."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Støtte for Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak er et rammeverk for skrivebordsprogrammer på Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Henter flatpak-metadata for %s …"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Oppdatering for enhet %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Oppdatering for system %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Oppdatering for innebygget kontroller %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Oppdatering for administrasjonsmotor %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Oppdatering for %s administrasjonsmotor for bedrifter"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Oppdatering for %s ME for konsumenter"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Oppdatering for %s kontroller"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Oppdatering for %s Thunderbolt kontroller"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU mikrokodeoppdatering"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s konfigurasjonsoppdatering"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Laster ned signatur for fastvareoppdatering …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Laster ned metadata for fastvareoppdatering …"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Støtte for oppgradering av fastvare"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Gir støtte for oppgradering av fastvare"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Laster ned poengsummer for programmer …"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Støtte for Open Desktop poenggiving"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS er en tjeneste som gir brukere omtaler av programmer"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Støtte for Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "En snap er en universell Linux-pakke"
diff --git a/po/ne.po b/po/ne.po
new file mode 100644
index 0000000..de2ee0f
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,4358 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Gnome Nepali Translation Project\n"
+"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software&keywords=I18N"
+"+L10N&component=General\n"
+"POT-Creation-Date: 2017-08-10 08:37+0000\n"
+"PO-Revision-Date: 2017-08-12 17:23+0545\n"
+"Last-Translator: Pawan Chitrakar <chautari@gmail.com>\n"
+"Language-Team: Nepali Translation Team <chautari@gmail.com>\n"
+"Language: ne\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.0.3\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "जिनोम सफ्टवेयर"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "जिनोमको लागि अनुप्रयोग प्रबन्धक"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system extensions and remove existing installed "
+"applications."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful descriptions and multiple screenshots per "
+"application. Applications can be found either through browsing the list of categories or by searching. It also allows "
+"you to update your system using an offline update."
+msgstr ""
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "समिक्षा प्यानल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "विस्तृत विवरणहरू"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "स्थापित प्यानल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "अपडेट प्यानल"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "अद्यावधिक विवरण"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:843
+msgid "The GNOME Project"
+msgstr "जिनोम परियोजना"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "मिल्दो परियोजनाहरूको सूची"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid "This is a list of compatible projects we should show such as GNOME, KDE and XFCE."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates in GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:11
+msgid "If disabled, GNOME Software will hide the updates panel and not perform any automatic updates actions."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically download updates"
+msgstr "उपलब्ध अपडेटहरू स्वचालत रूपमा जाँच गर्नुहोस्"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background and prompts the user to install them "
+"when ready."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even when using a metered connection (eventually "
+"downloading some metadata, checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This controls if that dialog is suppressed."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "लोकप्रिय अनुप्रयोगहरूको सूची"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The list of extra sources that have been previously enabled"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "The list of sources that have been previously enabled when installing third-party applications."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "पछिल्लो अद्यावधिक जाँच टाइमस्ट्याम्प"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "अन्तिम स्तरवृद्धि सूचना टाइमस्ट्याम्प"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "अद्यावधिक खाली पछि पहिलो सुरक्षा अद्यावधिक को टाइमस्ट्याम्प"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "अन्तिम अद्यावधिक टाइमस्ट्याम्प"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but updates to the screenshots may take "
+"longer to show to the user. A value of 0 means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "सर्भर प्रयोगका लागि अनुप्रयोग समीक्षाहरू"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official sources that should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "The licence URL to use when an application should be considered free software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:103
+#, fuzzy
+msgid "Show the folder management UI"
+msgstr "सत्र प्रबन्ध विकल्प देखाउनुहोस्"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Sources dialog"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software sources"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show non-free software in search results"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "A list of non-free sources that can be optionally enabled"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:139
+msgid "A list of URLs pointing to appstream files that will be downloaded into an app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:143
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "सफ्टवेयर स्थापना गर्नुहोस्"
+
+#: src/gnome-software-local-file.desktop.in:4
+#, fuzzy
+msgid "Install selected software on the system"
+msgstr "प्रणाली सफ्टवेयर स्थापना"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr"system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "सबै चयन गर्नुहोस्"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "कुनै पनि होइन (पूर्वानिर्धारित)"
+
+#: src/gnome-software.ui:24 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "सफ्टवेयर"
+
+#: src/gnome-software.ui:43 src/gs-sources-dialog.ui:23 src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "पछाडी जानुहोस्"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "सबै"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "स्थापित"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "अपडेट जाँच गर्नुहोस्"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "_खोज"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-sources-dialog.ui:6 src/gs-sources-dialog.ui:46
+msgid "Software Sources"
+msgstr "सफ्टवेयर स्रोतहरू"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "डिस्क परिक्षण गर्नुहोस्"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1392
+msgid "Network Settings"
+msgstr "सञ्जाल सेटिङ"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "फेरि सुरु गर्नुहोस्"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "थप जानकारी"
+
+#: src/gs-app-addon-row.c:95 src/gs-app-row.c:429 src/gs-details-page.ui:344
+msgid "Pending"
+msgstr "विचाराधिन"
+
+#: src/gs-app-addon-row.c:101 src/gs-app-row.ui:209 src/gs-app-tile.ui:51 src/gs-feature-tile.c:88
+#: src/gs-popular-tile.c:70
+msgid "Installed"
+msgstr "स्थापना भयो"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: src/gs-app-addon-row.c:105 src/gs-app-row.c:218 src/gs-details-page.c:433
+msgid "Installing"
+msgstr "स्थापना गर्दै"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: src/gs-app-addon-row.c:109 src/gs-app-row.c:224
+msgid "Removing"
+msgstr "हटाउँदैछ"
+
+#: src/gs-app-folder-dialog.c:310
+msgid "Folder Name"
+msgstr "फोल्डरको नाम"
+
+#: src/gs-app-folder-dialog.c:321 src/gs-app-folder-dialog.ui:16 src/gs-details-page.c:379 src/gs-details-page.ui:330
+#: src/gs-editor.c:623 src/gs-editor.c:655 src/gs-installed-page.c:609 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "रद्द गर्नुहोस्"
+
+#: src/gs-app-folder-dialog.c:326 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "थप्नुहोस्"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "अनुपर्योग फो्डर थप्नुहोस्"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:99
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: src/gs-application.c:99
+msgid "MODE"
+msgstr "मोड"
+
+#: src/gs-application.c:101
+msgid "Search for applications"
+msgstr "अनुप्रयोगहरु खोज्नुहोस्"
+
+#: src/gs-application.c:101
+msgid "SEARCH"
+msgstr "खोजी गर्नुहोस्"
+
+#: src/gs-application.c:103
+msgid "Show application details (using application ID)"
+msgstr "अनुप्रयोग (अनुप्रयोगहरु आईडी) विवरण देखाउनुहोस्"
+
+#: src/gs-application.c:103 src/gs-application.c:107
+msgid "ID"
+msgstr "आईडी"
+
+#: src/gs-application.c:105
+msgid "Show application details (using package name)"
+msgstr "अनुप्रयोग (प्याकेज नाम) विवरण देखाउनुहोस्"
+
+#: src/gs-application.c:105
+msgid "PKGNAME"
+msgstr ""
+
+#: src/gs-application.c:107
+msgid "Install the application (using application ID)"
+msgstr "अनुप्रयोग (अनुप्रयोगहरु आईडी) स्थापना गर्नुहोस्"
+
+#: src/gs-application.c:109
+msgid "Open a local package file"
+msgstr "स्थानिय प्याकेज खोल्नुहोस्"
+
+#: src/gs-application.c:109
+msgid "FILENAME"
+msgstr "फाइलको नाम"
+
+#: src/gs-application.c:111
+msgid "The kind of interaction expected for this action: either ‘none’, ‘notify’, or ‘full’"
+msgstr ""
+
+#: src/gs-application.c:114
+#, fuzzy
+msgid "Show verbose debugging information"
+msgstr "कन्सोलमा सकेटसँग सम्बन्धित त्रुटिमोचक सूचनालाई मुद्रण गर्नुहोस्:"
+
+#: src/gs-application.c:116
+#, fuzzy
+msgid "Show profiling information for the service"
+msgstr "विशेष सेवा देखाउनुहोस्"
+
+#: src/gs-application.c:118
+#, fuzzy
+msgid "Quit the running instance"
+msgstr "कुनै पनि चालु विकासकर्ता मद्दतलाई अन्त्य गर्नुहोस्"
+
+#: src/gs-application.c:120
+msgid "Prefer local file sources to AppStream"
+msgstr ""
+
+#: src/gs-application.c:122
+msgid "Show version number"
+msgstr "संस्करण नम्बर देखाऊ"
+
+#: src/gs-application.c:306
+msgid "translator-credits"
+msgstr "Pawan Chitrakar <chautari@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:313
+#, c-format
+msgid "About %s"
+msgstr "%s का बारेमा"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:317
+msgid "A nice way to manage the software on your system."
+msgstr ""
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:171
+msgid "Visit website"
+msgstr "वेबसाइट हेर्नुहोस्"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:176
+msgid "Install…"
+msgstr "स्थापना गर्नुहोस्…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:183
+msgid "Cancel"
+msgstr "रद्द गर्नुहोस्"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:192 src/gs-common.c:279 src/gs-page.c:544
+msgid "Install"
+msgstr "स्थापना गर्नुहोस्"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:199
+msgid "Update"
+msgstr "अद्यावधिक गर्नुहोस्"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: src/gs-app-row.c:203 src/gs-app-row.c:212 src/gs-page.c:700
+msgid "Remove"
+msgstr "हटाउनुहोस्"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:329
+msgid "Device cannot be used during update."
+msgstr ""
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:339 src/gs-details-page.ui:1000
+msgid "Source"
+msgstr "स्रोत"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:68
+msgid "To continue you need to sign in."
+msgstr "जारी राख्नको लागि साइन गर्नु "
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:72
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "जारी राख्नको लागि साइन गर्नु %s "
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "इमेल ठेगाना"
+
+#: src/gs-auth-dialog.ui:94
+#, fuzzy
+msgid "I have an account already"
+msgstr "%s खाता पहिले नै अवस्थित छ %s"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "पासवर्ड"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr ""
+
+#: src/gs-auth-dialog.ui:181
+#, fuzzy
+msgid "Sign in automatically next time"
+msgstr "यो संवाद अर्को पटक देखाउनुहोस्।."
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr ""
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "पिन"
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "जारी राख्नुहोस्"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:193
+msgid "Other"
+msgstr "अन्य"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:198
+msgid "All"
+msgstr "_सबै"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:202
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: src/gs-category-page.ui:81
+#, fuzzy
+#| msgid "Network Settings"
+msgid "Extension Settings"
+msgstr "विस्तार द्वारा"
+
+#: src/gs-category-page.ui:110
+msgid "Extensions are used at your own risk. If you have any system problems, it is recommended to disable them."
+msgstr ""
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:205
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr ""
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:268
+msgid "Choose an application:"
+msgstr "अनुप्रयोग छान्नुहोस्"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:135
+#, fuzzy
+msgid "OS updates are now installed"
+msgstr "अद्यावधिक स्थापना गरियो"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:138
+msgid "Recently installed updates are available to review"
+msgstr ""
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:142
+#, fuzzy, c-format
+msgid "%s is now installed"
+msgstr "%s %s उपलब्ध छ"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:145
+#, fuzzy
+msgid "Application is ready to be used."
+msgstr "“%s” तयार छ"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:151
+msgid "Launch"
+msgstr "सुरुआत गर्नुहोस्"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+#, fuzzy
+msgid "Install Third-Party Software?"
+msgstr "प्रणाली सफ्टवेयर स्थापना"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+#, fuzzy
+msgid "Enable Third-Party Software Source?"
+msgstr "तेस्रो-पक्ष सफ्टवेयर विकासकर्ताले प्रदान गरेका"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#.
+#: src/gs-common.c:232
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">free and open source software</a>, "
+"and is provided by “%s”."
+msgstr ""
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: src/gs-common.c:242
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s “%s” बाट प्राप्त भयो."
+
+#. TRANSLATORS: a software source is a repo
+#: src/gs-common.c:252
+msgid "This software source must be enabled to continue installation."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:262
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:268
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:275
+#, fuzzy
+msgid "Don’t Warn Again"
+msgstr "मन नपरेको"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:284
+msgid "Enable and Install"
+msgstr "सक्षम पारि स्थापना गर्नुहोस्"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:429
+msgid "Detailed errors from the package manager follow:"
+msgstr "प्याकेज प्रबन्धकबाट निम्न त्रुटी जानकारीहरू दिइयो:"
+
+#: src/gs-common.c:448 src/gs-details-page.ui:607
+msgid "Details"
+msgstr "विवरण"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+#, fuzzy
+msgid "No cartoon violence"
+msgstr "कार्टुन"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+#, fuzzy
+msgid "No references to alcohol"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+#, fuzzy
+msgid "References to alcoholic beverages"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+#, fuzzy
+msgid "Use of alcoholic beverages"
+msgstr "जस्ताको तस्तै प्रयोग गर्नुहोस्"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+#, fuzzy
+msgid "No references to illicit drugs"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+#, fuzzy
+msgid "References to illicit drugs"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+#, fuzzy
+msgid "Use of illicit drugs"
+msgstr "जस्ताको तस्तै प्रयोग गर्नुहोस्"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+#, fuzzy
+msgid "References to tobacco products"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+#, fuzzy
+msgid "Use of tobacco products"
+msgstr "प्रयोग:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+#, fuzzy
+msgid "No nudity of any sort"
+msgstr "कुनै"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+#, fuzzy
+msgid "Brief artistic nudity"
+msgstr "कलात्मक"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+#, fuzzy
+msgid "Provocative references or depictions"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+#, fuzzy
+msgid "Sexual references or depictions"
+msgstr "सन्दर्भहरू:"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+#, fuzzy
+msgid "Graphic sexual behavior"
+msgstr "व्यवहार"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+#, fuzzy
+msgid "No profanity of any kind"
+msgstr "चरणको प्रकार"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+#, fuzzy
+msgid "Moderate use of profanity"
+msgstr "मध्यम सिमसिम"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+#, fuzzy
+msgid "No advertising of any kind"
+msgstr "चरणको प्रकार"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+#, fuzzy
+#| msgctxt "Menu subcategory of Development Tools"
+#| msgid "Project Management"
+msgid "Product placement"
+msgstr "वस्तु"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Players are encouraged to purchase specific real-world items"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+#, fuzzy
+msgid "No gambling of any kind"
+msgstr "चरणको प्रकार"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+#, fuzzy
+msgid "No ability to spend money"
+msgstr "तपाईँले लगानी गर्नुभएको पैसालाई ट्रयाकमा ल्याउनुहोस् ।"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Ability to spend real money in-game"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "No way to chat with other players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Player-to-player game interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "Player-to-player preset interactions without chat functionality"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Uncontrolled chat functionality between players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "No way to talk with other players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "Uncontrolled audio or video chat functionality between players"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "No sharing of user information with 3rd parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "Sharing user information with 3rd parties"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location to other users"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing physical location to other users"
+msgstr ""
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:294
+msgid "An application"
+msgstr "अनुप्रयोग"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+#, fuzzy
+msgid "Additional MIME Types Required"
+msgstr "ऐच्छिक फर्मवेयर आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Fonts Required"
+msgstr "थप फन्ट आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+#, fuzzy
+msgid "Additional Multimedia Codecs Required"
+msgstr "ऐच्छिक फर्मवेयर आवश्यक"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:318
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr ""
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:320
+#, fuzzy
+msgid "Additional Printer Drivers Required"
+msgstr "कुनै अतिरिक्त चालक उपलब्ध छैन।"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:324
+#, fuzzy, c-format
+msgid "%s is requesting additional packages."
+msgstr "थप प्याकेजहरू: (स्थापना गर्नलाई)"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:326
+msgid "Additional Packages Required"
+msgstr "थप प्याकेजहरू आवश्यक"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:335
+msgid "Find in Software"
+msgstr "सफ्टवेयरमा खोज्नुहोस्"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#: src/gs-details-page.c:278 src/gs-details-page.c:308 src/gs-details-page.ui:206 src/gs-upgrade-banner.ui:146
+msgid "_Install"
+msgstr "स्थापना गर्नुहोस्"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:313
+msgid "_Update"
+msgstr "अद्यावधिक (_U)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: src/gs-details-page.c:326
+msgid "_Install…"
+msgstr "_स्थापना गर्नुहोस्…"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:373 src/gs-details-page.ui:242
+msgid "_Remove"
+msgstr "हटाउनुहोस्"
+
+#: src/gs-details-page.c:428 src/gs-sources-dialog.c:513
+msgid "Removing…"
+msgstr "हटाउँदैछ…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:719
+msgid "This application can only be used when there is an active internet connection."
+msgstr ""
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:854
+msgctxt "version"
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:888
+msgctxt "updated"
+msgid "Never"
+msgstr "कहिल्यै पनि"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:932
+msgctxt "origin"
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1336
+msgid "You need internet access to write a review"
+msgstr ""
+
+#: src/gs-details-page.c:1465
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "फेला पार्न अक्षम: \"%s\""
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2030
+msgid "Public domain"
+msgstr "सार्वजनिक डोमेन"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2046 src/gs-details-page.ui:1395
+msgid "Free Software"
+msgstr "न्स्वतन्त्र सफ्टवेयर"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2103
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-details-page.c:2119 src/gs-details-page.ui:1504
+msgid "More information"
+msgstr "थप जानकारी"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "विवरण पृ्ष्ठ"
+
+#. Translators: A label for a button to execute the selected application.
+#: src/gs-details-page.ui:228
+msgid "_Launch"
+msgstr "सुरुआत गर्नुहोस्"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:358
+msgid "_Add shortcut"
+msgstr "सर्टकट थप्नुहोस्"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:373
+msgid "Re_move shortcut"
+msgstr "सर्टकटहटाउनुहोस् "
+
+#: src/gs-details-page.ui:468
+msgid "No screenshot provided"
+msgstr "स्क्रिनसट प्रदान गरिएको छैन"
+
+#: src/gs-details-page.ui:504
+msgid "Software Source Included"
+msgstr "सफ्टवेर श्रोत सम्मिलित छ"
+
+#: src/gs-details-page.ui:505
+msgid "This application includes a software source which provides updates, as well as access to other software."
+msgstr ""
+
+#: src/gs-details-page.ui:518
+msgid "No Software Source Included"
+msgstr "सफ्टवेर श्रोत सम्मिलित छैन"
+
+#: src/gs-details-page.ui:519
+msgid "This application does not include a software source. It will not be updated with new versions."
+msgstr ""
+
+#: src/gs-details-page.ui:533
+msgid "This software is already provided by your distribution and should not be replaced."
+msgstr ""
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:546
+#, fuzzy
+msgid "Software Source Identified"
+msgstr "प्याकेज बनाइएको सफ्टवेयर वा मानक सफ्टवेयर"
+
+#: src/gs-details-page.ui:547
+msgid "Adding this software source will give you access to additional software and upgrades."
+msgstr ""
+
+#: src/gs-details-page.ui:548
+msgid "Only use software sources that you trust."
+msgstr ""
+
+#: src/gs-details-page.ui:564
+msgid "_Website"
+msgstr "वेबसाइट"
+
+#: src/gs-details-page.ui:579
+msgid "_Donate"
+msgstr ""
+
+#: src/gs-details-page.ui:713
+msgid "Localized in your Language"
+msgstr "तपाँईको भाषामा स्थानियकरण गर्नुहोस्"
+
+#: src/gs-details-page.ui:725
+msgid "Documentation"
+msgstr "अभिलेखीकरण"
+
+#: src/gs-details-page.ui:737
+msgid "Release Activity"
+msgstr "निष्कासन कार्य"
+
+#: src/gs-details-page.ui:749
+msgid "System Integration"
+msgstr "प्रणाली एकीकरण"
+
+#: src/gs-details-page.ui:761
+msgid "Sandboxed"
+msgstr ""
+
+#: src/gs-details-page.ui:786 src/gs-sources-dialog.ui:359
+msgid "Version"
+msgstr "संस्करण"
+
+#: src/gs-details-page.ui:823
+#, fuzzy
+msgid "Age Rating"
+msgstr "छवि"
+
+#: src/gs-details-page.ui:861
+msgid "Updated"
+msgstr "अद्यावधिक गरियो"
+
+#: src/gs-details-page.ui:896
+msgid "Category"
+msgstr "कोटि"
+
+#: src/gs-details-page.ui:934
+msgid "Installed Size"
+msgstr "स्थापना आकार"
+
+#: src/gs-details-page.ui:967
+msgid "Download Size"
+msgstr "डाउनलोड आकार"
+
+#: src/gs-details-page.ui:1033
+msgid "Developer"
+msgstr "प्रमुख विकासकर्ता"
+
+#: src/gs-details-page.ui:1067
+msgid "License"
+msgstr "इजाजतपत्र"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1087
+msgid "Free"
+msgstr "नि:शुल्क"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1104
+msgid "Proprietary"
+msgstr "स्वामित्व भएको"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1121 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1175 src/gs-installed-page.c:487 plugins/core/gs-desktop-common.c:331
+#, fuzzy
+msgid "Add-ons"
+msgstr "जोडनुहोस् [+]"
+
+#: src/gs-details-page.ui:1188
+msgid "Selected add-ons will be installed with the application."
+msgstr ""
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1231
+msgid "Reviews"
+msgstr "समीक्षा"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1247
+msgid "_Write a Review"
+msgstr "समिक्षा लेख्नुहोस्"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1269
+msgid "_Show More"
+msgstr "अरू देखाउनुहोस्"
+
+#: src/gs-details-page.ui:1412
+msgid "This means that the software can be freely run, copied, distributed, studied and modified."
+msgstr ""
+
+#: src/gs-details-page.ui:1471
+#, fuzzy
+#| msgid "Proprietary"
+msgid "Proprietary Software"
+msgstr "स्वामित्व भएको"
+
+#: src/gs-details-page.ui:1488
+msgid ""
+"This means that the software is owned by an individual or a company. There are often restrictions on its use and its "
+"source code cannot usually be accessed."
+msgstr ""
+
+#: src/gs-details-page.ui:1533
+msgid "Unknown Software License"
+msgstr "अज्ञात सफ्टवेर इजाजतपत्र"
+
+#: src/gs-details-page.ui:1550
+msgid "The license terms of this software are unknown."
+msgstr "सफ्टवेर लाईसेन्स सर्तहरू अज्ञात छन"
+
+#: src/gs-details-page.ui:1577
+msgid "The application was rated this way because it features:"
+msgstr ""
+
+#: src/gs-details-page.ui:1603
+msgid "No details were available for this rating."
+msgstr ""
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "CSS वैध छ!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "फाइल लोड गर्न असफल"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "बचत नगरिएको परिवर्तनहरू"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "अनुप्रयोग सुची पहिले नै लोड भइसकेको छ"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "कागजातहरू गाभ्नुहोस्"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+#, fuzzy
+msgid "Throw away changes"
+msgstr "टाढा"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+#, fuzzy
+msgid "Open AppStream File"
+msgstr "अस्थायी फाइल खोल्न असफल"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "खोल्नुहोस्"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "बचत गर्नुहोस्"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "फाइल बचत गर्न असफल भयो"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "%s ब्यानर डिजाइन मेटियो"
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "ब्यानर डिजाइनको मेटियो"
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr ""
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+#, fuzzy
+msgid "Use verbose logging"
+msgstr "धेरै शब्द हुनु"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "जिनोमका सफ्टवेयर ब्यानर डिजाइनर"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+#, fuzzy
+msgid "No Designs"
+msgstr "GUI तत्व"
+
+#: src/gs-editor.ui:110
+msgid "page1"
+msgstr "पृष्ठ १"
+
+#: src/gs-editor.ui:164
+#, fuzzy
+msgid "Error message here"
+msgstr "त्रुटि सन्देश"
+
+#: src/gs-editor.ui:251
+msgid "App ID"
+msgstr "एप ID"
+
+#: src/gs-editor.ui:297
+msgid "Name"
+msgstr "नाम: "
+
+#: src/gs-editor.ui:342 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "सारांश"
+
+#: src/gs-editor.ui:383
+#, fuzzy
+msgid "Editor’s Pick"
+msgstr "सम्पादक फन्ट राख्नुहोस्"
+
+#: src/gs-editor.ui:398
+msgid "Category Feature"
+msgstr "श्रेणी सुविधा"
+
+#: src/gs-editor.ui:428
+msgid "page2"
+msgstr "पृष्ठ २"
+
+#. button in the info bar
+#: src/gs-editor.ui:473
+msgid "Undo"
+msgstr "पुर्वस्थितिमा फर्काउनुहोस्"
+
+#: src/gs-editor.ui:549
+msgid "New Banner"
+msgstr "नया ब्यानर"
+
+#: src/gs-editor.ui:617
+#, fuzzy
+msgid "Import from file"
+msgstr "फाईलबाट आयात गर्नुहोस्"
+
+#: src/gs-editor.ui:631
+#, fuzzy
+msgid "Export to file"
+msgstr "लोड गरिएको फाइल निर्यात गर्नुहोस् र निस्कनुहोस्"
+
+#: src/gs-editor.ui:645
+msgid "Delete Design"
+msgstr "डिजाइन मेटनुहोस्"
+
+#: src/gs-editor.ui:672
+#, fuzzy
+msgid "Featured App"
+msgstr "प्रदर्शित"
+
+#: src/gs-editor.ui:686
+msgid "OS Upgrade"
+msgstr "ओएस्(OS) स्तरवृद्धि गर्नुहोस्"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:145
+msgid " and "
+msgstr "र"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:148
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:174
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:182
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:224
+msgid "Unable to Find Requested Software"
+msgstr "अनुरोध सफ्टवेयर भेटिएन"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:322
+#, c-format
+msgid "%s not found"
+msgstr "%s फेला परेन"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:326
+msgid "on the website"
+msgstr "वेबसाइटमा"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:333
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:337 src/gs-extras-page.c:348 src/gs-extras-page.c:359
+#, c-format
+msgid "Information about %s, as well as options for how to get missing applications might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:344 src/gs-extras-page.c:366
+#, fuzzy, c-format
+msgid "No applications are available for %s support."
+msgstr "%s %s उपलब्ध छ"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:355
+#, c-format
+msgid "%s is not available."
+msgstr "%s उपलब्ध छैन"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:370
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that can support this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:377
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:381
+#, c-format
+msgid "Information about %s, as well as options for how to get additional fonts might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:388 lib/gs-plugin-loader.c:1408
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:392
+#, c-format
+msgid "Information about %s, as well as options for how to get a codec that can play this format might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:399
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr ""
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:403
+#, c-format
+msgid "Information about %s, as well as options for how to get additional Plasma resources might be found %s."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:410
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s मुद्रणयन्त्र ड्राइभर उपलब्ध छैन ."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:414
+#, c-format
+msgid "Information about %s, as well as options for how to get a driver that supports this printer might be found %s."
+msgstr ""
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:459
+msgid "this website"
+msgstr "यो वेबसाइट"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:463
+#, c-format
+msgid "Unfortunately, the %s you were searching for could not be found. Please see %s for more information."
+msgid_plural "Unfortunately, the %s you were searching for could not be found. Please see %s for more information."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/gs-extras-page.c:535 src/gs-extras-page.c:591 src/gs-extras-page.c:630
+msgid "Failed to find any search results"
+msgstr ""
+
+#: src/gs-extras-page.c:824
+#, c-format
+msgid "%s file format"
+msgstr "%s ढाँचाको फाइल"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "कोडेक पृष्ठ"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "स्वागतम्"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "अनुप्रयोगमा स्वागत छ"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See our recommendations, browse the "
+"categories, or search for the applications you want."
+msgstr ""
+
+#: src/gs-first-run-dialog.ui:85
+#, fuzzy
+msgid "_Let’s Go Shopping"
+msgstr "जानुहोस्: %s (%s)"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "दूरी (अन्तराल)"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "शाखाहरुको बीचको ठाँउको मूल्य"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "हटाईयो"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "स्थापना भयो"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:94
+msgctxt "app status"
+msgid "Updated"
+msgstr "अद्यावधिक गरियो"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:100
+msgctxt "app status"
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "इतिहास"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:483
+msgid "System Applications"
+msgstr " अनुप्रयोगहरू प्रणाली"
+
+#: src/gs-installed-page.c:617
+msgid "Click on items to select them"
+msgstr "वस्तु चयन गर्न तपाईँले यसमा क्लिक गर्नु पर्दछ ।"
+
+#: src/gs-installed-page.c:823
+msgid "Select"
+msgstr "चयन गर्नुहोस्"
+
+#: src/gs-installed-page.ui:7
+#, fuzzy
+msgid "Installed page"
+msgstr "स्थापित"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "फोल्डरमा थप्नुहोस्…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "फोल्डरमा सार्नुहोस्…"
+
+#: src/gs-installed-page.ui:81
+#, fuzzy
+msgid "_Remove from Folder"
+msgstr "फोल्डर हटाउनुहोस्"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:74
+#, fuzzy
+msgid "Software catalog is being downloaded"
+msgstr "सफ्टवेयर सुची अपडेट गर्न यहाँले प्रमाणित गर्नुपर्ने हुन्छ"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:78
+#, fuzzy
+msgid "Software catalog is being loaded"
+msgstr "सफ्टवेयर सुची अपडेट गर्न यहाँले प्रमाणित गर्नुपर्ने हुन्छ"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "पृष्ठ लोड"
+
+#: src/gs-loading-page.ui:53
+msgid "Starting up…"
+msgstr "सुरु गर्दै…"
+
+#: src/gs-menus.ui:7
+msgid "_Software Sources"
+msgstr "सफ्टवयर स्रोतहरू"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "बारेमा"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "अन्त्य गर्नुहोस्"
+
+#: src/gs-moderate-page.ui:7
+#, fuzzy
+msgid "Moderate page"
+msgstr "मध्यम वर्षा"
+
+#: src/gs-moderate-page.ui:87
+#, fuzzy
+msgid "There are no reviews to moderate"
+msgstr "मध्यम दाना हिँउ"
+
+#. add button
+#: src/gs-overview-page.c:317
+msgid "More…"
+msgstr "अरू…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:483
+msgid "Recommended Audio & Video Applications"
+msgstr "सिफारिश गरिएको अडियो/भिडियो अनुप्रयोग"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:488
+msgid "Recommended Games"
+msgstr "सिफारिश गरिएका खेलहरू"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:493
+msgid "Recommended Graphics Applications"
+msgstr "सिफारिश गरिएको ग्राफिक्स अनुप्रयोग"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:498
+msgid "Recommended Productivity Applications"
+msgstr "सिफारिश गरिएको उत्पादकता अनुप्रयोग"
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:841
+msgid "Provides access to additional software, including web browsers and games."
+msgstr ""
+
+#. TRANSLATORS: this is the proprietary info bar
+#: src/gs-overview-page.c:845
+msgid "Proprietary software has restrictions on use and access to source code."
+msgstr ""
+
+#. TRANSLATORS: this is the clickable
+#. * link on the proprietary info bar
+#: src/gs-overview-page.c:852 src/gs-sources-dialog.c:267
+msgid "Find out more…"
+msgstr "अरू फेला पार्नुहोस्"
+
+#. TRANSLATORS: button to turn on proprietary software sources
+#: src/gs-overview-page.c:887
+msgid "Enable"
+msgstr "सक्षम पार्नुहोस्"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "अधिलेखन पृष्ठ"
+
+#: src/gs-overview-page.ui:49
+#, fuzzy
+msgid "Enable Proprietary Software Sources?"
+msgstr "सफ्टवयर स्रोतहरू"
+
+#: src/gs-overview-page.ui:117
+msgid "Featured Application"
+msgstr "विशेष अनुप्रयोग"
+
+#: src/gs-overview-page.ui:150
+msgid "Categories"
+msgstr "कोटिहरू"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:310
+msgid "Editor’s Picks"
+msgstr "सम्पादकको छनौट"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:348
+msgid "Recent Releases"
+msgstr "हालको विज्ञप्ति"
+
+#: src/gs-overview-page.ui:421
+#, fuzzy
+msgid "No Application Data Found"
+msgstr "अनुप्रयोग भेटिएन"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:445
+#, fuzzy, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "%s हटाउन निश्चित हुनुहुन्छ ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:449
+#, fuzzy, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "%d %s %d %s चार्ज नभएसम्म (%d%%)"
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:462
+msgid "Purchase"
+msgstr "खरिद"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:535
+#, c-format
+msgid "Prepare %s"
+msgstr "%s तयार गर्नुहोस्"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:669
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "%s स्रोत हटाउन निश्चित हुनुहुन्छ ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:673
+#, c-format
+msgid "All applications from %s will be removed, and you will have to re-install the source to use them again."
+msgstr ""
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:681
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "%s हटाउन निश्चित हुनुहुन्छ ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:684
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#: lib/gs-plugin-loader.c:1411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can play this format can be found on the website."
+msgstr ""
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#: lib/gs-price.c:129
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you continue, the following will be "
+"automatically removed during the upgrade:"
+msgstr ""
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "सफ्टवेयर अद्यावधिक…"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "जारी राख्नुहोस्"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:98
+msgid "Hate it"
+msgstr "मन नपर्ने"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:102
+msgid "Don’t like it"
+msgstr "मन नपरेको"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:106
+msgid "It’s OK"
+msgstr "ठिकै छ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:110
+msgid "Like it"
+msgstr "मन परेको"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:114
+msgid "Love it"
+msgstr "मन पर्यो"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:136
+msgid "Please take more time writing the review"
+msgstr ""
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+#, fuzzy
+msgid "Please choose a star rating"
+msgstr "कृपया अर्को नाम रोज्नुहोस् ।"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:144
+msgid "The summary is too short"
+msgstr "सारंश अति छोटो छ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:148
+msgid "The summary is too long"
+msgstr "सारंश अति लामो छ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:152
+msgid "The description is too short"
+msgstr "वर्णन अति छोटो छ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:156
+msgid "The description is too long"
+msgstr "वर्णन अति लामो छ"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "समिक्षा पोस्ट गर्नुहोस्:"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "पोस्ट"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "दर निर्धारण गर्दै"
+
+#: src/gs-review-dialog.ui:158
+msgid "Give a short summary of your review, for example: “Great app, would recommend”."
+msgstr ""
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "पुनरावलोकन गर्नुहोस्"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+#, fuzzy
+msgid "ratings in total"
+msgstr "यसको जम्मा:"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid "Once reported, a review will be hidden until it has been checked by an administrator."
+msgstr ""
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+#, fuzzy
+msgid "Report Review?"
+msgstr "पुनरावलोकन गर्नुहोस्"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "प्रतिवेदन गर्नुहोस्"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:112
+#, fuzzy
+msgid "Was this review useful to you?"
+msgstr "पूर्वावलोकन"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "ठिक छ"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "कुनै पनि होइन"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr ""
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "प्रतिवेदन…"
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "हटाउनुहोस्…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:313
+msgid "Screenshot not found"
+msgstr "स्क्रिनसट फेला परेन"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:328
+msgid "Failed to load image"
+msgstr "छवि लोड गर्न असफल"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:461
+msgid "Screenshot size not found"
+msgstr "स्क्रिनसट साईज फेला परेन"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:489
+msgid "Could not create cache"
+msgstr "क्यास बनाउन सकिएन"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:550
+msgid "Screenshot not valid"
+msgstr "स्क्रिनसट अवैध छ"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:565
+msgid "Screenshot not available"
+msgstr "स्क्रिनसट उपलब्ध छैन"
+
+#: src/gs-screenshot-image.c:618
+msgid "Screenshot"
+msgstr "स्क्रिनसट"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:155
+#, c-format
+msgid "%u more matches"
+msgstr "%u थप मेलहरू"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "पानामा खोज्नुहोस्"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "अनुप्रयोग भेटिएन"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:807 src/gs-shell.c:812 src/gs-shell.c:827 src/gs-shell.c:831
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:851
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:857
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s बाट अद्यावधिकहरू डाउनलोड गर्न असक्षम भयो"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:864
+msgid "Unable to download updates"
+msgstr "अद्यावधिकहरू डाउनलोड गर्न असक्षम भयो"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:869
+msgid "Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:878
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:883
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:891
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:896
+msgid "Unable to download updates: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:901
+msgid "Unable to download updates: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:908
+msgid "Unable to get list of updates"
+msgstr "अद्यावधिकहरू सुची पाउन असक्षम भयो"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:954
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:960
+#, fuzzy, c-format
+msgid "Unable to install %s as download failed"
+msgstr "%s स्थापना असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:972
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:978
+#, fuzzy, c-format
+msgid "Unable to install %s as not supported"
+msgstr "%s स्थापना असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:985
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:991
+msgid "Unable to install: the application has an invalid format"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:996
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1004
+#, fuzzy, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s स्थापना असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1011
+#, fuzzy, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s स्थापना असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1018
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1031
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1035
+msgid "It is not possible to install software until this has been resolved."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1046
+#, c-format
+msgid "For more information, visit %s."
+msgstr "अरु जानकारी को लागि %s मा जानुहोस्"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1055
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1064
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s स्थापना असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1110
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr "%2$s बाट %1$sअद्यावधिक गर्न असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1116
+#, fuzzy, c-format
+msgid "Unable to update %s as download failed"
+msgstr "%2$s बाट %1$sअद्यावधिक गर्न असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1122
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1130
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1139
+#, fuzzy, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "सहभागी अद्यावधिक गर्न अक्षम । %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1146
+#, fuzzy, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%2$s बाट %1$sअद्यावधिक गर्न असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1153
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1161
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1170
+#, fuzzy, c-format
+msgid "Unable to update %s"
+msgstr "%2$s बाट %1$sअद्यावधिक गर्न असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1215
+#, fuzzy, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%2$s बाट %1$sअद्यावधिक गर्न असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1220
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1235
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1244
+#, fuzzy, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s प्रमाणिकरण आवश्यक छ ।"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1251
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1258
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1265
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1274
+#, fuzzy, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+"बचत गर्न अक्षम `%s':\n"
+"%s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1316
+#, fuzzy, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s प्रमाणिकरण आवश्यक छ ।"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1322
+#, fuzzy, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr ""
+"स्वत: बचत फाइल `%s' हटाउन अक्षम:\n"
+"%s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1328
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1335
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1344
+#, fuzzy, c-format
+msgid "Unable to remove %s"
+msgstr "\"%s\" हटाउन असक्षम"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1390
+#, fuzzy, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s सुरु गर्न असफल"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1397 src/gs-shell.c:1446 src/gs-shell.c:1494
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1405 src/gs-shell.c:1454 src/gs-shell.c:1521
+msgid "Sorry, something went wrong"
+msgstr "ओहो, केही गलत भयो।"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1441
+#, fuzzy
+msgid "Failed to install file: authentication failed"
+msgstr "प्याकेज स्थापना गर्न असफल भयो"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1488
+#, fuzzy, c-format
+msgid "Unable to contact %s"
+msgstr ""
+"बचत गर्न अक्षम `%s':\n"
+"%s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1503
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1508
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1515
+msgid "AC power is required"
+msgstr "AC पावरमा आवश्यक"
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: src/gs-sources-dialog.c:98
+msgid "No applications or addons installed; other software might still be"
+msgstr ""
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:103
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u अनुप्रयोग स्थापना गरिएको"
+msgstr[1] "%u अनुप्रयोगहरू स्थापना गरिएका"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: src/gs-sources-dialog.c:110
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u एड-इन स्थापना गरिएको छ"
+msgstr[1] "%u एड-इनहरू स्थापना गरिएका छन्"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: src/gs-sources-dialog.c:118
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u अनुप्रयोग"
+msgstr[1] "%u अनुप्रयोगहरू"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-sources-dialog.c:124
+#, fuzzy, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "फाइलहरू थप्नुहोस्"
+msgstr[1] "फाइलहरू थप्नुहोस्"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-sources-dialog.c:131
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s र%s स्थापना भयो"
+msgstr[1] "%s र%s स्थापना भयो"
+
+#. TRANSLATORS: nonfree software
+#: src/gs-sources-dialog.c:257
+msgid "Typically has restrictions on use and access to source code."
+msgstr ""
+
+#. TRANSLATORS: list header
+#: src/gs-sources-dialog.c:278
+#, fuzzy
+msgid "Proprietary Software Sources"
+msgstr "सफ्टवयर स्रोतहरू"
+
+#: src/gs-sources-dialog.c:498 src/gs-sources-dialog.ui:487
+msgid "Remove Source"
+msgstr "स्रोत हटाउनुहोस्"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-sources-dialog.c:584
+msgid "the operating system"
+msgstr "सञ्चालन प्रणाली"
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-sources-dialog.c:677
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access to additional software that is not "
+"provided by %s."
+msgstr ""
+
+#: src/gs-sources-dialog.ui:155
+msgid "Additional Sources"
+msgstr "थप स्रोतहरू"
+
+#: src/gs-sources-dialog.ui:175
+msgid "Removing a source will also remove any software you have installed from it."
+msgstr ""
+
+#: src/gs-sources-dialog.ui:260
+#, fuzzy
+msgid "No software installed from this source"
+msgstr "श्रोत प्याकेजहरू स्थापित गर्न सकिएन"
+
+#: src/gs-sources-dialog.ui:287
+#, fuzzy
+msgid "Installed from this Source"
+msgstr "श्रोत प्याकेजहरू स्थापित गर्न सकिएन"
+
+#: src/gs-sources-dialog.ui:333
+msgid "Source Details"
+msgstr "स्रोत विवरण"
+
+#: src/gs-sources-dialog.ui:390
+msgid "Last Checked"
+msgstr "अन्तिम जाँच गरियो"
+
+#: src/gs-sources-dialog.ui:407
+msgid "Added"
+msgstr "थपियो"
+
+#: src/gs-sources-dialog.ui:424
+msgid "Website"
+msgstr "वेबसाइट"
+
+#: src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s स्थापना भयो"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s स्थापना गरिदैछ"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (हटाउँदैछ)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:129
+#, fuzzy
+msgid "No update description available."
+msgstr "वर्णन उपलब्ध छैन ।"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:224
+#, c-format
+msgid "Installed on %s"
+msgstr "%s मा स्थापना गरियो"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:244
+msgid "Installed Updates"
+msgstr "अद्यावधिक स्थापना गरियो"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:419
+msgid "Additions"
+msgstr ""
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:423
+msgid "Removals"
+msgstr "हटाउनेहरू"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:427
+msgid "Updates"
+msgstr "अपडेट जाँच गर्नुहोस्"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:431
+msgid "Downgrades"
+msgstr ""
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "यो प्रणालीमा अद्यावधिक स्थापना गरिएको छैन"
+
+#: src/gs-update-monitor.c:88
+#, fuzzy
+msgid "Security Updates Pending"
+msgstr "बाकि अनुप्रयोग स्थापना गर्नुहोस्"
+
+#: src/gs-update-monitor.c:89
+msgid "It is recommended that you install important updates now"
+msgstr ""
+
+#: src/gs-update-monitor.c:92
+msgid "Restart & Install"
+msgstr "पुन शुरु र स्थापना गर्नुहोस्"
+
+#: src/gs-update-monitor.c:96
+msgid "Software Updates Available"
+msgstr "सफ्टवेयर अद्यावधिकहरू उपलब्ध"
+
+#: src/gs-update-monitor.c:97
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:100 src/gs-updates-page.c:703
+msgid "Not Now"
+msgstr "अहिले होईन"
+
+#: src/gs-update-monitor.c:101
+msgid "View"
+msgstr "दृश्य"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:255 src/gs-updates-page.ui:46
+#, fuzzy
+msgid "Operating System Updates Unavailable"
+msgstr "सञ्चालन प्रणाली "
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:257
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:305
+#, fuzzy, c-format
+msgid "A new version of %s is available to install"
+msgstr "`%.255s' को नयाँ संस्करण स्थापना गर्न अक्षम"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:309
+msgid "Software Upgrade Available"
+msgstr "सफ्टवेयर अपडेटहरू उपलब्ध छन्"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:610
+msgid "Software Updates Failed"
+msgstr "सफ्टवेयर अद्यावधिकहरू असफल भयो"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:612
+msgid "An important OS update failed to be installed."
+msgstr "एउटा महत्वपूर्ण सञ्चालन प्रणाली सञ्चालन प्रणाली स्थापित गर्न असफल भयो।"
+
+#: src/gs-update-monitor.c:613
+msgid "Show Details"
+msgstr "अरू धेरै विवरण देखाउनुहोस्"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:635
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "सफ्टवेयर अद्यावधिक स्थापना गरिएको छ"
+msgstr[1] "सफ्टवेयर अद्यावधिक स्थापना गरिएका छन्"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:639
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:650
+msgctxt "updates"
+msgid "Review"
+msgstr "पुनरावलोकन गर्नुहोस्"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:697
+msgid "Failed To Update"
+msgstr "अद्यावधिक गर्न असफल भयो"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:703
+#, fuzzy
+msgid "The system was already up to date."
+msgstr "कार्यान्वयन '%s' अद्यावधिक छैन ।"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:708
+msgid "The update was cancelled."
+msgstr "अद्यावधिक रद्द गरियो।"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:714
+msgid "Internet access was required but wasn’t available. Please make sure that you have internet access and try again."
+msgstr ""
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:720
+msgid "There were security issues with the update. Please consult your software provider for more details."
+msgstr ""
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:726
+msgid "There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:731
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update and try again. If the problem persists, "
+"contact your software provider."
+msgstr ""
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:273
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:276
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:282
+msgid "Yesterday, %R"
+msgstr "हिजो %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:286
+msgid "Yesterday, %l:%M %p"
+msgstr "हिजो, %l∶%M %p"
+
+#: src/gs-updates-page.c:289
+msgid "Two days ago"
+msgstr "दुई दिन पहिला"
+
+#: src/gs-updates-page.c:291
+msgid "Three days ago"
+msgstr "तीन दिन पहिला"
+
+#: src/gs-updates-page.c:293
+msgid "Four days ago"
+msgstr "चार दिनपहिला"
+
+#: src/gs-updates-page.c:295
+msgid "Five days ago"
+msgstr "पाँच दिनपहिला"
+
+#: src/gs-updates-page.c:297
+msgid "Six days ago"
+msgstr "छ दिन पहिला"
+
+#: src/gs-updates-page.c:299
+msgid "One week ago"
+msgstr "एक हप्ता पहिला"
+
+#: src/gs-updates-page.c:301
+msgid "Two weeks ago"
+msgstr "दुई हप्ता पहिला"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:305
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:318
+msgid "Downloading new updates…"
+msgstr "नयाँ अद्यावधिक डाउनलोड गर्दैछ..."
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:322
+msgid "Looking for new updates…"
+msgstr " नयाँ अद्यावधिकहरू खोज्दै…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:361
+msgid "Setting up updates…"
+msgstr "अद्यावधिक सेटअप गर्दै…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:362 src/gs-updates-page.c:369
+msgid "(This could take a while)"
+msgstr "न्यसले केही समय लिन सक्छ"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:474
+#, c-format
+msgid "Last checked: %s"
+msgstr "अन्तिम जाँच : %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:699
+msgid "Updates have been installed"
+msgstr "अद्यावधिक स्थापना गरियो"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:701
+#, fuzzy
+msgid "A restart is required for them to take effect."
+msgstr "द्ष्व्परिवर्तनहरूले असर गर्न पुन: सुरुआत गर्नुहोस्"
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:705
+msgid "Restart"
+msgstr "फेरि सुरु गर्नुहोस्"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:766
+msgid "Integrated Firmware"
+msgstr "एकीकृत फर्मवेयर"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:769 src/gs-updates-page.c:779
+msgid "Restart & Update"
+msgstr "पुन सुरु गरेर अद्यावधिक गर्नुहोस्"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:776
+msgid "Requires Restart"
+msgstr "फेरि सुरू गर्न आवश्यक"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:786
+msgid "Application Updates"
+msgstr "अनुप्रयोग अद्यावधिक "
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:789
+msgid "Update All"
+msgstr "सबै अद्यावधिक गर्नुहोस्"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:796
+msgid "Device Firmware"
+msgstr "उपकरण फर्मवेयर"
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:986
+msgid "_Restart & Update"
+msgstr "पुन सुरु गरेर अद्यावधिक गर्नुहोस्"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:990
+msgid "U_pdate All"
+msgstr "सबै स्तरबृध्दि गर्नुहोस्"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1088
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s अब उप्रान्त समर्थित छैन"
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1093
+msgid "Your OS is no longer supported."
+msgstr ""
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1098
+msgid "This means that it does not receive security updates."
+msgstr ""
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1102
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1360
+msgid "Charges may apply"
+msgstr "परिवर्तन लागू गर्नुहोस्:"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1364
+msgid "Checking for updates while using mobile broadband could cause you to incur charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1368
+msgid "Check Anyway"
+msgstr "जसरी पनि जाँच्नुहोस्"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1384
+msgid "No Network"
+msgstr "सञ्जाल छैन"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1388
+msgid "Internet access is required to check for updates."
+msgstr ""
+
+#: src/gs-updates-page.c:1793
+msgid "Restart & _Install"
+msgstr "पुन शुरु र स्थापना गर्नुहोस्"
+
+#: src/gs-updates-page.c:1811
+msgid "Check for updates"
+msgstr "अपडेट जाँच गर्नुहोस्"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "अद्यावधिक पृष्ठ"
+
+#: src/gs-updates-page.ui:194
+#, fuzzy
+msgid "Software is up to date"
+msgstr "सुरु: पूर्वावलोकन छवि अद्यावधिक गरिराख्नुहोस्"
+
+#: src/gs-updates-page.ui:245
+msgid "Checking for updates when using mobile broadband could cause you to incur charges"
+msgstr ""
+
+#: src/gs-updates-page.ui:257
+msgid "_Check Anyway"
+msgstr "जसरी पनि जाँच्नुहोस्"
+
+#: src/gs-updates-page.ui:300
+#, fuzzy
+msgid "Go online to check for updates"
+msgstr "अपडेट जाँच गर्नुहोस्"
+
+#: src/gs-updates-page.ui:311
+msgid "_Network Settings"
+msgstr "सञ्जाल सेटिङ"
+
+#: src/gs-updates-page.ui:393
+#, fuzzy
+msgid "Updates are automatically managed"
+msgstr "उपलब्ध अपडेटहरू स्वचालत रूपमा जाँच गर्नुहोस्"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s उपलब्ध छ"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s डाउनलोड गर्दै"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, fuzzy, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "“%s” तयार छ"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "अरु जान्नुहोस्"
+
+#: src/gs-upgrade-banner.ui:98
+msgid "It is recommended that you back up your data and files before upgrading."
+msgstr ""
+
+#: src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "डाउनलोड"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6 src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid "Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;"
+msgstr ""
+
+#: src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "ब्यानर डिजाइनर"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr ""
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+#, fuzzy
+msgid "AppStream;Software;App;"
+msgstr "एप ID"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:36
+#, fuzzy
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "स्वचालित सिर्जना"
+
+#: plugins/core/gs-desktop-common.c:42
+#, fuzzy
+#| msgctxt "Menu subcategory of Audio"
+#| msgid "Players"
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "सङ्गित"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr ""
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "कृत्रिम बुद्धि"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "खगोल शास्त्र"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "रसायन शास्त्र"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "भाषाहरु"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "गणित"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "रोबोटिक्स"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "_सबै"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "क्रिया"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "साहसिक"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "आर्केड"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "ब्लकहरू"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "बोर्ड"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "तास खेलहरू"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "इमुलेटरहरू"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "बालबालिका"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "बुद्धिबर्दक"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "भुमिका निर्वाह"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "खेलकुद"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "रणनीति"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:162
+#, fuzzy
+#| msgctxt "Menu subcategory of Graphics"
+#| msgid "2D Graphics"
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "हालको बिन्दु: $1[ %3d ] को [ %3d ]"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "फोटोग्राफि"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "स्क्यान गर्दै"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "कागजातहरु/भेक्टर ग्राफिक्स"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "दर्शक"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "क्यालेन्डर"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "डाटाबेस"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "वित्त"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "कागजातहरु/वर्ड प्रोसेसर"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "फन्ट"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "कोडेक"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "आगत स्रोतहरू"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "भाषा प्याक"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "सेल विस्तारहरू"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "स्थानियकरण"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "हार्डवेयर ड्राइभरहरु"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "कुराकानी"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "समाचारहरू"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "वेब ब्राउजर"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "सबै"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "सम्पादकहरू"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "_सबै"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "प्रदर्शित"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "कला"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "जीवनी"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "हास्य"
+
+#: plugins/core/gs-desktop-common.c:288
+#, fuzzy
+#| msgctxt "Menu subcategory of Games"
+#| msgid "Action"
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "कार्य"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "स्वास्थ्य"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "इतिहास"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "जीवन शैली"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "राजनीति"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "खेलकुद"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "अडियो/भिडियो"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr " विकासकर्ता उपकरणहरू"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "शिक्षा र विज्ञान"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "खेलहरू"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "फोटोग्राफि र ग्राफिक्स"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "उत्पादकता"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+#, fuzzy
+msgid "Communication & News"
+msgstr "समाचारहरू"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "सन्दर्भ"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "अनुप्रयोगहरू"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-appstream.c:693
+#, fuzzy
+msgid "Downloading extra metadata files…"
+msgstr "फाइलहरू डाउनलोड गरेपछि पज गर्नुहोस्"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr "OS अद्यावधिक"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+#, fuzzy
+msgid "Downloading featured images…"
+msgstr "डाउनलोड हुँदैछ"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+#, fuzzy
+msgid "Web Apps Support"
+msgstr "समर्थन गर्नुहोस्"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:118
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+#: plugins/external-appstream/gs-install-appstream.c:120
+#, fuzzy
+msgid "Failed to parse command line arguments"
+msgstr "%sतर्कहरू पार्स गर्न असफल\n"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:127
+msgid "You need to specify exactly one filename"
+msgstr ""
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:134
+#, fuzzy
+msgid "This program can only be used by the root user"
+msgstr "रुटले मात्र जिडिएम चलाउन सक्छ"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:142
+#, fuzzy
+msgid "Failed to validate content type"
+msgstr "सामाग्री प्रकार: बाह्य-मुख्य\n"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:149
+msgid "Failed to copy"
+msgstr "प्रतिलिपी गर्दा असफल भयो ।"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:212
+#, fuzzy
+msgid "Downloading upgrade information…"
+msgstr "डाउनलोड हुँदैछ"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:303
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr ""
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+#, fuzzy
+msgid "Flatpak Support"
+msgstr "समर्थन गर्नुहोस्"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:563
+#, fuzzy, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "अवैध मेटाडेटा '%s'"
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:2611
+#, fuzzy
+msgid "Getting runtime source…"
+msgstr "रनटाइम"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:774
+#, fuzzy
+msgid "Downloading firmware update signature…"
+msgstr "नयाँ/अद्यावधिक गरिएको द्रष्टव्यहरू डाउनलोड गर्दैछ..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:820
+#, fuzzy
+msgid "Downloading firmware update metadata…"
+msgstr "नयाँ/अद्यावधिक गरिएको द्रष्टव्यहरू डाउनलोड गर्दैछ..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:908
+#, fuzzy
+msgid "Downloading firmware update…"
+msgstr "एकीकृत फर्मवेयर"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+#, fuzzy
+msgid "Firmware Upgrade Support"
+msgstr "स्तरवृद्धि गर्नुहोस्"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+#, fuzzy
+msgid "Provides support for firmware upgrades"
+msgstr "पर्ल प्लगइनका लागि यो प्लगइनले समर्थन प्रदान गर्छ"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+#, fuzzy
+msgid "Limba Support"
+msgstr "समर्थन गर्नुहोस्"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+#, fuzzy
+msgid "Downloading application ratings…"
+msgstr "डाउनलोड हुँदैछ"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+#, fuzzy
+msgid "Open Desktop Ratings Support"
+msgstr "तपाईँको डेस्कटपको फोल्डरमा भएको सामाग्री खोल्नुहोस्"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:662
+#, fuzzy
+msgid "Downloading shell extension metadata…"
+msgstr "विस्तार डाउनलोड गर्दैछ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+#, fuzzy
+msgid "Snappy Support"
+msgstr "समर्थन गर्नुहोस्"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr ""
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+#, fuzzy
+msgid "Downloading application page…"
+msgstr "डाउनलोड हुँदैछ"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+#, fuzzy
+msgid "Steam Support"
+msgstr "समर्थन गर्नुहोस्"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr ""
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "_सबै"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "प्रदर्शित"
+
+#~ msgid "About Software"
+#~ msgstr "सफ्टवेयर प्रयोग"
+
+#, fuzzy
+#~ msgid "The update could not be completed."
+#~ msgstr "क्लिपबोर्ड साइन गर्न सकिएन ।"
+
+#, fuzzy
+#~ msgid "An update failed to install correctly."
+#~ msgstr "चेतावनी: `%s' स्किमा `%s' लोक्याल स्थापना गर्न असफल भयो: %s\n"
+
+#, fuzzy
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "अवयव`%.255s' (in %.255s)खोल्न अप्रत्यासित रुपले असफल"
+
+#~ msgid "_Installing"
+#~ msgstr "स्थापना गर्नुहोस्..."
+
+#~ msgid "_Removing"
+#~ msgstr "हटाउँदैछ"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "अज्ञात"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "गणना गरिदै"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "अज्ञात"
+
+#, fuzzy
+#~ msgid "Internet Only Application"
+#~ msgstr "अनुप्रयोग प्रतिमा मात्रै"
+
+#~ msgid "_History"
+#~ msgstr "इतिहास"
+
+#~ msgid "Size"
+#~ msgstr "साइज"
+
+#, fuzzy
+#~ msgid "Recommended Office Applications"
+#~ msgstr "अनुप्रयोग पाईएन"
+
+#, fuzzy
+#~ msgid "Checking for updates…"
+#~ msgstr "नयाँ पत्र लागि जाँच गर्दै"
+
+#, fuzzy
+#~ msgid "No sources found."
+#~ msgstr "शब्दकोश स्रोत फेला पर्यो"
+
+#~ msgid "OK"
+#~ msgstr "ठीक छ"
+
+#~ msgid "One Star"
+#~ msgstr "प्रतीक तारा"
+
+#, fuzzy
+#~ msgid "Two Stars"
+#~ msgstr "दुईवटा सुट"
+
+#, fuzzy
+#~ msgid "Three Stars"
+#~ msgstr "तीन चौथाइ"
+
+#, fuzzy
+#~ msgid "Four Stars"
+#~ msgstr "चारवटा सुट"
+
+#, fuzzy
+#~ msgid "Five Stars"
+#~ msgstr "चिडीको पञ्जा"
+
+#, fuzzy
+#~ msgid "Installation of %s failed."
+#~ msgstr "प्रयोग स्थापना असफल भयो!"
+
+#, fuzzy
+#~ msgid "Removal of %s failed."
+#~ msgstr "फ्रोक असफल"
+
+#, fuzzy
+#~ msgid "No AppStream data found"
+#~ msgstr "पीजीपी डेटा फेला परेन ।"
+
+#~ msgid " or "
+#~ msgstr " वा"
+
+#, fuzzy
+#~ msgid "Web app"
+#~ msgstr "App ID"
+
+#~ msgid "Audio"
+#~ msgstr "अडियो"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "डेटाबेस"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "डिस्क सङ्ख्या"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "%s समूह रेडियो"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "च्यानल मिश्रण"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "सङ्गीत"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "दृश्य निर्माण गरिदैछ"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "डेटाबेस"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "सचेतक घडीको प्रोफाइल हुँदैछ"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "बायाँ नियन्त्रण"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "वेब विकास"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "जीव शास्त्र"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "कम्प्युटर नाम:"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "सन्देश निर्माण असफल भयो ।"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "दृश्यात्मक साइज:"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "इलेक्ट्रोनिक्स"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "इञ्जिनियरिङ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "जियो विज्ञान"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "इतिहास"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "प्रक्रिया गर्दा त्रुटि"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "मानचित्र"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "सङ्गीत"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "डेटा विश्लेषण"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "आधारभूत रणनीति कम्प्युटिङ गर्नुहोस्..."
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "भौतिक शास्त्र"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "नक्कल"
+
+#~ msgid "Graphics"
+#~ msgstr "ग्राफिक्स"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "ग्राफिक्स अनुप्रयोग"
+
+#~ msgid "Internet"
+#~ msgstr "इन्टरनेट"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "इमेल"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "फिड"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "फाइल स्थानान्तरण"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "%s समूह रेडियो"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "शीघ्र सन्देश"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC प्रोटोकल प्लगइन"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "मोनिटर"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "टाढाको डेस्कटप पहुँच सक्षम पार्नुहोस्"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "टेलिफोनि"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "वेब विकास"
+
+#~ msgid "Office"
+#~ msgstr "कार्यालय"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "चित्रपट"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "-समपर्क व्यवस्थापन"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "शब्दकोश"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "इमेल"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "स्टारचार्ट चार्ट "
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "परियोजना व्यवस्थापन"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "प्रकाशन गर्दै"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "स्प्रेडसिट"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "लग दर्शक"
+
+#~ msgid "Science"
+#~ msgstr "विज्ञान"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "कला"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "खगोल शास्त्र"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "जीव शास्त्र"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "रसायन शास्त्र"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "कम्प्युटर विज्ञान"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "सन्देश निर्माण असफल भयो ।"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "दृश्यात्मक साइज:"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "इलेक्ट्रोनिक्स"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "इञ्जिनियरिङ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "जियो विज्ञान"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "इतिहास"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "प्रक्रिया गर्दा त्रुटि"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "भाषाहरु"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "मानचित्र"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "प्रतीक, म्याथ"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "डेटा विश्लेषण"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "आधारभूत रणनीति कम्प्युटिङ गर्नुहोस्..."
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "भौतिक शास्त्र"
+
+#~ msgid "System"
+#~ msgstr "प्रणाली"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "फाइल प्रबन्धक"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File System"
+#~ msgstr "फाइल प्रणाली"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "/उपकरणहरू/फाइल स्थानान्तरणहरू"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "मोनिटर"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "सुरक्षा"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "टर्मिनल अनुप्रयोग"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "पहुँचता"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "गणकयन्त्र"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "घडी"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "दवाब"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "/उपकरणहरू/फाइल स्थानान्तरणहरू"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "मानचित्र"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "/उपकरणहरू/गोपनीयता"
+
+#~ msgid "Video"
+#~ msgstr "भिडियो"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "सम्पादन गर्दै"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "डेटाबेस"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "डिस्क सङ्ख्या"
+
+#, fuzzy
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "खेलाडी"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "टिभी"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..61e9d93
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,5659 @@
+# Dutch translation for gnome-software.
+# Copyright (C) 2015 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# software repository - softwarebron
+#
+# Nathan Follens <nthn@unseen.is>, 2015-2020.
+# Justin van Steijn <jvs@fsfe.org> 2015, 2016, 2017, 2018, 2019.
+# Hannie Dumoleyn <hannie@ubuntu-nl.org>, 2016, 2018, 2019, 2020.
+# Reinout van Schouwen <reinouts@gnome.org>, 2016 (review).
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software gnome-3-16\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-22 12:59+0200\n"
+"Last-Translator: Hannie Dumoleyn <hannie@ubuntu-nl.org>\n"
+"Language-Team: Dutch <gnome-nl-list@gnome.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 19.12.3\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Gnome Software"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Toepassingsbeheer voor Gnome"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Met Gnome Software kunt u nieuwe toepassingen en systeemuitbreidingen vinden "
+"en installeren, en bestaande geïnstalleerde toepassingen verwijderen."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Gnome Software geeft aanbevolen en populaire toepassingen weer met nuttige "
+"beschrijvingen en meerdere schermafdrukken per toepassing. U vindt "
+"toepassingen door ofwel de lijst van categorieën te bekijken of door te "
+"zoeken. U kunt ook uw systeem bijwerken met behulp van een offline-update."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Overzichtstabblad"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Tabblad met details"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Tabblad met geïnstalleerde toepassingen"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Tabblad met updates"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Details van de update"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Het Gnome-project"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Een appstream-bestand installeren op een systeemlocatie"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Een appstream-bestand installeren op een systeemlocatie"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Een lijst met compatibele projecten"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Dit is een lijst met compatibele projecten die getoond moeten worden, zoals "
+"Gnome, KDE en Xfce."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Of updates en upgrades worden beheerd in Gnome Software"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Indien uitgeschakeld zal Gnome Software het tabblad met updates verbergen, "
+"geen automatische updates uitvoeren en geen upgrades aanbieden."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Updates automatisch downloaden en installeren"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Indien ingeschakeld zal Gnome Software automatisch updates op de achtergrond "
+"downloaden, waarbij ook updates die geen herstart vereisen worden "
+"geïnstalleerd."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"De gebruiker informeren over software die op de achtergrond bijgewerkt is"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Indien ingeschakeld, informeert Gnome Software de gebruiker over updates die "
+"gedaan zijn terwijl de gebruiker niet actief was."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Of automatisch ververst wordt bij een verbinding met een datalimiet"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Indien ingeschakeld zal Gnome Software automatisch op de achtergrond "
+"vernieuwen, zelfs als een verbinding met datalimiet wordt gebruikt (dat "
+"leidt tot het downloaden van wat metadata, controleren op updates, enz., "
+"hetgeen kosten voor de gebruiker met zich mee kan brengen)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Of het de eerste keer opstarten van Gnome Software is of niet"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Beoordelingen met sterren naast toepassingen tonen"
+
+# Betere suggesties zijn welkom - Justin
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Toepassingen filteren gebaseerd op de standaard-branchset van de server op "
+"afstand"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Waarschuwen voor het installeren van niet-vrije toepassingen"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Voordat niet-vrije toepassingen worden geïnstalleerd kan een "
+"waarschuwingsvenster worden weergegeven. Dit bepaalt of dat venster wel of "
+"niet wordt weergegeven."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Lijst van populaire toepassingen"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Een lijst met te gebruiken toepassingen die de door het systeem "
+"gedefinieerde toepassingen overschrijven."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Tijdstempel van de laatste updatecontrole"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Tijdstempel van de laatste upgradecontrole"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Het tijdstempel van de eerste veiligheidsupdate, gewist na de update"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Tijdstempel van laatste update"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "De laatste tijdstempel toen het systeem online was en bijgewerkt werd"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"De tijd in seconden om te controleren of de bovenstroomse schermafdruk nog "
+"geldig is"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Als u een hogere waarde kiest, betekent dit dat u minder heen en terug moet "
+"naar de externe server, maar kan het langer duren tot bijgewerkte "
+"schermafdrukken worden getoond aan de gebruiker. De waarde 0 betekent dat de "
+"server nooit gecontroleerd wordt als het beeld al in de cache staat."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "De server die moet worden gebruikt voor toepassingsbeoordelingen"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "De minimale karma-score voor beoordelingen"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Beoordelingen met minder karma dan dit aantal worden niet getoond."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Een lijst met officiële opslagbronnen die niet als van derden moeten worden "
+"beschouwd"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Een lijst met officiële opslagbronnen die als vrije software moeten worden "
+"beschouwd"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"De URL van de te gebruiken licentie wanneer een toepassing als vrije "
+"software moet worden beschouwd"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Gebundelde toepassingen installeren voor alle gebruikers op het systeem waar "
+"mogelijk"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Toegang geven tot het softwarebronnen-dialoogvenser"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Opwaarderingen aanbieden voor pre-releases"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Enkele UI-elementen tonen waarmee de gebruiker geïnformeerd wordt dat een "
+"app niet-vrij is"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "De prompt voor het installeren van niet-vrije softwarebronnen tonen"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"De grootte van geïnstalleerde toepassingen tonen in de lijst met "
+"geïnstalleerde toepassingen"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://nl.wikipedia.org/wiki/Propri%C3%ABtaire_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+"De URI waarin uitleg wordt gegeven over niet-vrije en propriëtaire software"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Een lijst met URL’s die verwijzen naar appstream-bestanden die gedownload "
+"zullen worden naar een app-info-map"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"De AppStream-bestanden installeren op een systeembrede locatie voor alle "
+"gebruikers"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Pakketbron met GNOME Shell-uitbreidingen inschakelen"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Een tekenreeks met het id van de gnome-online-account om in te loggen"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Software-installatie"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "De geselecteerde software installeren op het systeem"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Alles selecteren"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Niets selecteren"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Softwarebronnen"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Updatevoorkeuren"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Software"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Ga terug"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Verkennen"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Geïnstalleerd"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Updates"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Zoeken"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Bron"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Softwarebronnen"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Schijf nakijken"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Netwerkinstellingen"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Nu herstarten"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Meer informatie"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatische updates gepauzeerd"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "_Meer te weten komen…"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokaal bestand"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pakket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "In behandeling"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Geïnstalleerd"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Wordt geïnstalleerd"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Wordt verwijderd"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Opstartmodus: ofwel ‘updates’, ‘updated’ (bijgewerkt), "
+"‘installed’ (geïnstalleerd) of ‘overview’ (overzicht)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "Modus"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Naar toepassingen zoeken"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "Zoeken"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Toepassingsgegevens tonen (met gebruikmaking van toepassings-ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Toepassingsgegevens tonen (met gebruikmaking van pakketnaam)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "Pakketnaam"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "De toepassing installeren (met behulp van toepassings-ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Een lokaal pakketbestand openen"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "Bestandsnaam"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"De soort interactie verwacht voor deze actie: ‘none’ (geen), "
+"‘notify’ (melden) of ‘full’ (volledig)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Gedetailleerde foutopsporingsinformatie tonen"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installeert updates die op de achtergrond klaar staan"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Updatevoorkeuren tonen"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Draaiende instantie afsluiten"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Lokale bestandsbronnen verkiezen boven AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Versienummer tonen"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Nathan Follens\n"
+"Justin van Steijn\n"
+"Hannie Dumoleyn\n"
+"\n"
+"Meer info over Gnome-NL http://nl.gnome.org"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Over Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Een prettige manier om de software op uw systeem te beheren."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Er zijn helaas geen details voor die toepassing."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Website bezoeken"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installeren…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Annuleren"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installeren"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Bijwerken"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Verwijderen"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Apparaat kan niet worden gebruikt tijdens het bijwerken."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "%s vraagt om extra rechten"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Aanmelding externe server %s (realm %s) verplicht"
+
+#: src/gs-basic-auth-dialog.ui:10
+#| msgid "Restart Required"
+msgid "Login Required"
+msgstr "Aanmelding vereist"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Annuleren"
+
+#: src/gs-basic-auth-dialog.ui:39
+#| msgctxt "Menu of Games"
+#| msgid "Logic"
+msgid "_Login"
+msgstr "_Aanmelden"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Gebr_uiker"
+
+#: src/gs-basic-auth-dialog.ui:119
+#| msgid "Password"
+msgid "_Password"
+msgstr "_Wachtwoord"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Andere"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Alles"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Aanbevolen %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Beoordeling"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Naam"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Tonen"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Filtermenu voor subcategorieën"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sorteren"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Sorteermenu voor subcategorieën"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Voer een getal in van 1 tot %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Kies een toepassing:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS-updates zijn nu geïnstalleerd"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Recent geïnstalleerde updates zijn klaar voor beoordeling"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s is nu geïnstalleerd"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Pas na een herstart zullen de wijzigingen van kracht zijn."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "De toepassing is klaar voor gebruik."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Herstarten"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Starten"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Software van derden installeren?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Softwarebron van derden inschakelen?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s is geen <a href=\"https://nl.wikipedia.org/wiki/"
+"Vrije_software_en_opensourcesoftware\">vrije en openbronsoftware</a>, en "
+"wordt geleverd door ‘%s’."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s wordt geleverd door ‘%s’."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Deze softwarebron moet ingeschakeld worden om met de installatie verder te "
+"kunnen gaan."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"In sommige landen kan het illegaal zijn %s te installeren of te gebruiken."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"In sommige landen kan het illegaal zijn deze codec te installeren of te "
+"gebruiken."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Niet opnieuw waarschuwen"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Inschakelen en installeren"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Gedetailleerde fouten van de pakketbeheerder volgen:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Gegevens"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Er is een update geïnstalleerd"
+msgstr[1] "Er zijn updates geïnstalleerd"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Pas na een herstart zal deze van kracht zijn."
+msgstr[1] "Pas na een herstart zullen ze van kracht zijn."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Niet nu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Geen geweld in strip"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Stripfiguren in onveilige situaties"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Stripfiguren in een agressieve conflictsituatie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafisch geweld met stripfiguren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Geen geweld in fantasie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Figuren in onveilige situaties, gemakkelijk te onderscheiden van de "
+"werkelijkheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Figuren in agressieve conflictsituaties, gemakkelijk te onderscheiden van de "
+"werkelijkheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafisch geweld, gemakkelijk te onderscheiden van de werkelijkheid"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Geen realistisch geweld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Enigszins realistisch figuur in onveilige situaties"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Afbeeldingen van realistische figuren in agressieve conflictsituatie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafisch geweld met realistische figuren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Geen bloedvergieten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Niet-realistisch bloedvergieten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistisch bloedvergieten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Afbeeldingen van bloedvergieten en het mutileren van lichaamsdelen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Geen seksueel geweld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Verkrachting of ander gewelddadig seksueel gedrag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Geen verwijzingen naar alcohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Verwijzingen naar alcoholische dranken"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Gebruik van alcoholische dranken"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Geen verwijzingen naar illegale drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Verwijzingen naar illegale drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Gebruik van illegale drugs"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Kom _meer te weten…"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Verwijzingen naar tabaksproducten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Gebruik van tabaksproducten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Geen enkel naakt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Beknopt artistiek naakt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Langdurig naakt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Geen seksuele verwijzingen of afbeeldingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provocerende verwijzingen of afbeeldingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksuele verwijzingen of afbeeldingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Grafisch seksueel gedrag"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Geen enkele godslastering"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Mild of niet veelvuldig gebruik van godslastering"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Matig gebruik van godslastering"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Sterk of veelvuldig gebruik van godslastering"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Geen ongepaste humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstick-humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgaire of platte humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Volwassen of seksuele humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Geen enkel discriminerend woordgebruik"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativiteit in de richting van een specifieke groep mensen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminatie met de bedoeling emotionele schade te berokkenen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Expliciete discriminatie op grond van geslacht, seksuele geaardheid, ras of "
+"religie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Zonder enige reclame"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Sluikreclame"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Expliciete verwijzingen naar bepaalde merken of producten met handelsmerk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Gebruikers worden aangemoedigd om bepaalde echte artikelen te kopen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Zonder gokken"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Gokken op willekeurige gebeurtenissen met behulp van tokens of credits"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Gokken met ‘speel’geld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Gokken met echt geld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Geen mogelijkheid om echt geld uit te geven"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Gebruikers worden aangemoedigd om echt geld te doneren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Mogelijk om in de toepassing echt geld uit te geven"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Niet mogelijk om met andere gebruikers te chatten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interactie tussen gebruikers zonder gespreksfunctionaliteit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Gecontroleerde gespreksfunctionaliteit tussen gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Niet-gecontroleerde gespreksfunctionaliteit tussen gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Geen manier om met andere gebruikers te praten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+"Niet-gecontroleerde audio- of videogespreksfunctionaliteit tussen gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Gebruikersnamen van sociale netwerken en e-mailadressen worden niet gedeeld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Deelt gebruikersnamen van sociale netwerken of e-mailadressen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Gebruikersinformatie wordt niet gedeeld met derden"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Controleert voor de nieuwste toepassingsversie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Deelt diagnostische gegevens waarmee anderen de gebruiker niet kunnen "
+"identificeren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Deelt diagnostische gegevens waarmee anderen de gebruiker kunnen "
+"identificeren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Fysieke locatie wordt niet gedeeld met andere gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Deelt fysieke locatie met andere gebruikers"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Geen verwijzingen naar homoseksualiteit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Indirecte verwijzingen naar homoseksualiteit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Mensen van hetzelfde geslacht kussen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafisch seksueel gedrag tussen mensen van hetzelfde geslacht"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Geen verwijzingen naar prostitutie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Indirecte verwijzingen naar prostitutie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Directe verwijzingen naar prostitutie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafische vertoningen van prostitutiedaden"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Geen verwijzingen naar overspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Indirecte verwijzingen naar overspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Directe verwijzingen naar overspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafische vertoningen van overspel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Geen geseksualiseerde personages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Schaars geklede menselijke personages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Openlijk geseksualiseerde menselijke personages"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Geen verwijzingen naar beschadigingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Vertoningen van of verwijzingen naar historische beschadigingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Vertoningen van moderne menselijke beschadigingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafische vertoningen van moderne menselijke beschadigingen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Geen zichtbare dode menselijke overblijfselen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Zichtbare dode menselijke overblijfselen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+"Dode menselijke overblijfselen die worden blootgesteld aan weer en wind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafische vertoningen van beschadiging van menselijke lichamen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Geen verwijzingen naar slavernij"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Vertoningen van of verwijzingen naar historische slavernij"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Vertoningen van moderne slavernij"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafische vertoningen van moderne slavernij"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Algemeen"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ALLES"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Volwassenen"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Volwassen inhoud"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Tieners"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Iedereen 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Iedereen"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Jonge kinderen"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Een toepassing"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s vraagt om extra bestandsformaatondersteuning."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Aanvullende MIME-types vereist"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s vraagt om extra lettertypes."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Extra lettertypes vereist"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s vraagt om extra multimedia-codecs."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Extra multimedia-codecs vereist"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s vraagt om extra printerstuurprogramma’s."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Extra printerstuurprogramma’s vereist"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s vraagt om extra pakketten."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Extra pakketten vereist"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Zoeken in Software"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Wordt verwijderd…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Installatie in afwachting…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Update in afwachting…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+#| msgid "Removing…"
+msgid "Preparing…"
+msgstr "Voorbereiden…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Deze toepassing kan alleen gebruikt worden met een actieve "
+"internetverbinding."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installeren"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installeren…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Starten"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Verwijderen"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Netwerk"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Kan over het netwerk communiceren"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Systeemdiensten"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Heeft toegang tot D-Bus-diensten op de systeembus"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Sessiediensten"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Heeft toegang tot D-Bus-diensten op de sessiebus"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Apparaten"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Kan systeem-apparaatbestanden lezen"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Persoonlijke map"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Kan bestanden lezen, bewerken en aanmaken"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Kan bestanden lezen"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Bestandssysteem"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Downloadmap"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Instellingen"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Kan alle instellingen inzien en wijzigen"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Verouderd weergavesysteem"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Gebruikt een oud en onveilig weergavesysteem"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Zandbak omzeilen"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Kan de zandbak en andere beperkingen omzeilen"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Deze toepassing bevindt zich volledig in een zandbak."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Kan niet bepalen tot welke delen van het systeem deze toepassing toegang "
+"heeft. Dit geldt vaak voor oudere toepassingen."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nooit"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Laag"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Gemiddeld"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Hoog"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Onbekend"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "U heeft internettoegang nodig om een beoordeling te schrijven"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "‘%s’ niet gevonden"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Publiek domein"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://nl.wikipedia.org/wiki/Publiek_domein"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.nl"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Vrije software"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Gebruikers zijn gebonden aan de volgende licentie:"
+msgstr[1] "Gebruikers zijn gebonden aan de volgende licenties:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Meer informatie"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pagina met informatie"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Downloaden"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Bijwerken"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Sneltoets _toevoegen"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Sneltoets _verwijderen"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Geen schermafdruk beschikbaar"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Inclusief softwarebron"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Deze toepassing bevat een softwarebron die naast updates ook toegang biedt "
+"tot andere software."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Geen softwarebron inbegrepen"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Deze toepassing bevat geen softwarebron en zal niet worden bijgewerkt met "
+"nieuwe versies."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Deze software wordt al door uw distributie aangeboden en hoeft niet "
+"vervangen te worden."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Softwarebron geïdentificeerd"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Door het toevoegen van deze softwarebron krijgt u toegang tot extra software "
+"en upgrades."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Gebruik alleen softwarebronnen die u vertrouwt."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Website"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Doneren"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Vertaald in uw taal"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentatie"
+
+# Ik weet niet wat hier met Release bedoeld wordt. Ik laat het maar even onvertaald.
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Uitgave-activiteit"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Systeemintegratie"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "In een zandbak"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanaal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versie"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Leeftijdsbeoordeling"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Rechten"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Bijgewerkt"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Grootte na installatie"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Downloadgrootte"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Ontwikkelaar"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licentie"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Vrij"
+
+# Ik heb toch maar gekozen voor Bedrijfseigen i.p.v. proriëtair. - Hannie
+# ‘Proprietary’ is het tegenovergestelde van ‘free’ en is dus een synoniem van ‘nonfree’; in dit geval is het het meest logisch om in het Nederlands te kiezen voor ‘niet-vrij’. Niet-vrije software hoeft niet door een bedrijf ontwikkeld te zijn. - Justin
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Niet-vrij"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Add-ons"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Geselecteerde add-ons zullen met de toepassing worden geïnstalleerd."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Beoordelingen"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "Een beoordeling _schrijven"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Meer weergeven"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Dit betekent dat de software vrij kan worden gebruikt, gekopieerd, "
+"verspreid, bestudeerd en gewijzigd."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Niet-vrije software"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Dit betekent dat de software eigendom is van een individu of bedrijf. Vaak "
+"zijn er beperkingen met betrekking tot het gebruik ervan en er is meestal "
+"geen toegang tot de broncode."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Onbekende softwarelicentie"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "De licentievoorwaarden van deze software zijn niet bekend."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "De beoordeling van deze toepassing is gebaseerd op:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Er zijn geen details beschikbaar voor deze beoordeling."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " en "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Beschikbare lettertypes voor het %s-script"
+msgstr[1] "Beschikbare lettertypes voor de %s-scripts"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Beschikbare software voor %s"
+msgstr[1] "Beschikbare software voor %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Gevraagde software kon niet gevonden worden"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s niet gevonden"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "op de website"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Geen toepassingen beschikbaar die het bestand %s aanbieden."
+
+# Ik vraag mij af waar het woord "op" vandaan moet komen (op %s).
+# Van de entry die hier 2 boven staat - Justin
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informatie over %s en opties voor het verkrijgen van ontbrekende "
+"toepassingen kunnen mogelijk gevonden worden %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Geen toepassingen beschikbaar die %s ondersteunen."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s is niet beschikbaar."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informatie over %s en opties voor het verkrijgen van een toepassing die dit "
+"formaat ondersteunt kunnen mogelijk gevonden worden %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr ""
+"Er zijn geen lettertypes beschikbaar voor ondersteuning van het %s-script."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informatie over %s en opties voor het verkrijgen van extra lettertypes "
+"kunnen mogelijk gevonden worden %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Geen add-on-codecs beschikbaar voor het formaat %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informatie over %s en opties voor het verkrijgen van een codec die dit "
+"formaat kan afspelen kunnen mogelijk gevonden worden %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Geen Plasma-bronnen beschikbaar die %s ondersteunen."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informatie over %s en opties voor het verkrijgen van extra Plasma-bronnen "
+"kunnen gevonden worden %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Geen printerstuurprogramma’s beschikbaar voor %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informatie over %s en opties voor het verkrijgen van een stuurprogramma dat "
+"deze printer ondersteunt kunnen gevonden worden %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "deze website"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"De %s waar u naar zocht kon niet gevonden worden. Zie %s voor meer "
+"informatie."
+msgstr[1] ""
+"De %s waar u naar zocht konden niet gevonden worden. Zie %s voor meer "
+"informatie."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Geen zoekresultaten gevonden"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s bestandsformaat"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Codecs-pagina"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Welkom"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Welkom bij Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Met Software kunt u vanaf één plek alle software installeren die u nodig "
+"heeft. Bekijk onze aanbevelingen, doorzoek de categorieën of zoek naar de "
+"gewenste toepassingen."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Laten we winkelen"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Verwijderd"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Geïnstalleerd"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Bijgewerkt"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Geschiedenis"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systeemtoepassingen"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Geïnstalleerd-pagina"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "De softwarecatalogus wordt gedownload"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Laden-pagina"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Starten…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Het huidige netwerk heeft een datalimiet. Netwerken met een datalimiet "
+"brengen doorgaans kosten met zich mee. Om data te besparen zijn automatische "
+"updates gepauzeerd.\n"
+"\n"
+"Automatische updates worden hervat zodra er een netwerk zonder datalimiet "
+"beschikbaar is. U kunt tot dan nog altijd handmatig updates installeren.\n"
+"\n"
+"Als het huidige netwerk verkeerdelijk geïdentificeerd is als netwerk met een "
+"datalimiet, kan deze instelling aangepast worden."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Netwerkin_stellingen openen"
+
+# Moet dit niet ‘pagina modereren’ zijn?
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Modereren-pagina"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Er zijn geen beoordelingen om te modereren"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "systeem"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "gebruiker"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Branch"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Indeling"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installatie"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Meer…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aanbevolen audio- en videotoepassingen"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Aanbevolen spelletjes"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aanbevolen grafische toepassingen"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aanbevolen productiviteitstoepassingen"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Toegang krijgen tot aanvullende software van geselecteerde derde partijen."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Deze software is niet-vrij en er heeft daarom beperkingen met betrekking tot "
+"het gebruik, verspreiding, en toegang tot de broncode."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Meer te weten komen…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Inschakelen"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Overzicht-pagina"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Softwarebronnen van derden inschakelen?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Vorige"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Volgende"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Keuze van de redactie"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Recente uitgaven"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorieën"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Geen toepassingsgegevens gevonden"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s voorbereiden"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Weet u zeker dat u de pakketbron %s wilt verwijderen?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Alle toepassingen van %s zullen verwijderd worden en u zult de pakketbron "
+"opnieuw moeten installeren om ze weer te kunnen gebruiken."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Weet u zeker dat u %s wilt verwijderen?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s zal verwijderd worden en u zult het opnieuw moeten installeren om het te "
+"gebruiken."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (geïnstalleerd)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Updatevoorkeuren"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatische updates"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatisch bijwerken wordt uitgeschakeld op een mobiel of bij een "
+"verbinding met een datalimiet."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Meldingen over automatische updates"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Melding tonen wanneer updates automatisch geïnstalleerd zijn."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Een deel van de momenteel geïnstalleerde software is niet compatibel met %s. "
+"Als u doorgaat zal het volgende automatisch worden verwijderd bij het "
+"opwaarderen:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Incompatibele software"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Doorgaan"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u toepassing geïnstalleerd"
+msgstr[1] "%u toepassingen geïnstalleerd"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u add-on geïnstalleerd"
+msgstr[1] "%u add-ons geïnstalleerd"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u toepassing"
+msgstr[1] "%u toepassingen"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u add-on"
+msgstr[1] "%u add-ons"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s en %s geïnstalleerd"
+msgstr[1] "%s en %s geïnstalleerd"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "‘%s’ verwijderen?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "‘%s’ uitschakelen?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Software die vanuit deze softwarebron is geïnstalleerd zal geen updates meer "
+"ontvangen, waaronder beveiligingsupdates."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Uitschakelen"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "het besturingssysteem"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Deze softwarebronnen leveren de standaardsoftware vanuit %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Softwarebronnen van derden"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Geen aanvullende softwarebronnen"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Inschakelen"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Verwijderen…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Uitschakelen…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Wordt ingeschakeld"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Wordt uitgeschakeld"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Ingeschakeld"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Uitgeschakeld"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Ik haat het"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Vind het niet leuk"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Het is oké"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Vind het leuk"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Ik hou ervan"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Gelieve de tijd te nemen voor het schrijven van de beoordeling"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Kies één of meer sterren voor de beoordeling"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "De samenvatting is te kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "De samenvatting is te lang"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "De beschrijving is te kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "De beschrijving is te lang"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Beoordeling plaatsen"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Plaatsen"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Samenvatting"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Geef een korte samenvatting van uw beoordeling, bijvoorbeeld: “Geweldige "
+"app, een aanrader”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Beoordeling"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Wat vindt u van de app? Probeer uw mening nader te verklaren."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Bekijk welke gegevens er worden verzonden in ons <a href=\"https://odrs."
+"gnome.org/privacy\">privacybeleid</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "aantal beoordelingen"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"U kunt beoordelingen rapporteren vanwege misbruik, onbeleefdheid of "
+"discriminatie."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Als een beoordeling is gerapporteerd zal zij worden verborgen totdat het "
+"door een beheerder is gecontroleerd."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Beoordeling rapporteren?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Rapporteren"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Was deze beoordeling nuttig voor u?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nee"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Een beetje"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Rapporteren…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Verwijderen…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Schermafdruk niet gevonden"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Laden van afbeelding mislukt"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Schermafdrukgrootte niet gevonden"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Cache kon niet worden aangemaakt"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Schermafdruk ongeldig"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Schermafdruk niet beschikbaar"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Schermafdruk"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "nog %u resultaat"
+msgstr[1] "nog %u resultaten"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Zoek-pagina"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Geen toepassing gevonden"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "‘%s’"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Downloaden van firmware-updates van %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Downloaden van updates van %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Downloaden van updates mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Downloaden van updates mislukt: internettoegang vereist, maar niet "
+"beschikbaar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Downloaden van updates van %s mislukt: niet genoeg schijfruimte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Downloaden van updates mislukt: niet genoeg schijfruimte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Downloaden van updates mislukt: authenticatie vereist"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Downloaden van updates mislukt: authenticatie ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Downloaden van updates mislukt: u heeft niet de rechten om software te "
+"installeren"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Verkrijgen van lijst met updates mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Installeren van %s niet mogelijk omdat het downloaden van %s is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Installeren van %s niet mogelijk omdat het downloaden is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Installeren van %s niet mogelijk omdat runtime %s niet beschikbaar is"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Installeren van %s niet mogelijk omdat het niet wordt ondersteund"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Installeren mislukt: internettoegang vereist, maar niet beschikbaar"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Installeren mislukt: de toepassing heeft een ongeldig formaat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Installeren van %s mislukt: niet genoeg schijfruimte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Installeren van %s mislukt: authenticatie vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Installeren van %s mislukt: authenticatie ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Installeren van %s mislukt: u heeft niet de rechten om software te "
+"installeren"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Installeren van %s mislukt: wisselstroomvermogen vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Installeren van %s mislukt: accuniveau is te laag"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Installeren van %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Bijwerken van %s niet mogelijk omdat het downloaden van %s is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Bijwerken van %s niet mogelijk omdat het downloaden is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Installeren van updates uit %s niet mogelijk omdat het downloaden is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Installeren van updates niet mogelijk omdat het downloaden is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Bijwerken mislukt: internettoegang vereist, maar niet beschikbaar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Bijwerken van %s mislukt: niet genoeg schijfruimte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Installeren van updates mislukt: niet genoeg schijfruimte"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Bijwerken van %s mislukt: authenticatie vereist"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Installeren van updates mislukt: authenticatie vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Bijwerken van %s mislukt: authenticatie ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Installeren van updates mislukt: authenticatie ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Bijwerken van %s mislukt: u heeft niet de rechten om software te installeren"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Installeren van updates mislukt: u heeft niet de rechten om software te "
+"installeren"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Bijwerken van %s mislukt: wisselstroomvermogen vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Installeren van updates mislukt: wisselstroomvermogen vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Bijwerken van %s mislukt: accuniveau is te laag"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Installeren van updates mislukt: accuniveau is te laag"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Bijwerken van %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Installeren van updates mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%s opwaarderen van %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Opwaarderen naar %s niet mogelijk omdat het downloaden is mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Opwaarderen naar %s mislukt: internettoegang vereist, maar niet beschikbaar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Opwaarderen naar %s mislukt: niet genoeg schijfruimte"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Opwaarderen naar %s mislukt: authenticatie vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Opwaarderen naar %s mislukt: authenticatie ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Opwaarderen naar %s mislukt: u heeft niet de rechten om software te "
+"installeren"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Opwaarderen naar %s mislukt: wisselstroomvermogen vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Opwaarderen naar %s mislukt: accuniveau is te laag"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Opwaarderen naar %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Verwijderen van %s mislukt: authenticatie vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Verwijderen van %s mislukt: authenticatie ongeldig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Verwijderen van %s mislukt: u heeft niet de rechten om software te "
+"installeren"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Verwijderen van %s mislukt: wisselstroomvermogen vereist"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Verwijderen van %s mislukt: accuniveau is te laag"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Verwijderen van %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Starten van %s mislukt: %s is niet geïnstalleerd"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Er is niet genoeg opslagruimte — maak wat ruimte vrij en probeer het opnieuw"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Helaas, er ging iets mis"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Installeren van bestand mislukt: niet ondersteund"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Installeren van bestand mislukt: authenticatie mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Installeren mislukt: niet ondersteund"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Installeren mislukt: authenticatie mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Contact opnemen met %s mislukt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s moet opnieuw opgestart worden om nieuwe plug-ins te gebruiken."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Deze toepassing moet opnieuw opgestart worden om nieuwe plug-ins te "
+"gebruiken."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Wisselstroomvermogen vereist"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Het accuniveau is te laag"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Bron: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (wordt geïnstalleerd)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (wordt verwijderd)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Alle _verwijderen"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Geen updatebeschrijving beschikbaar."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Geïnstalleerd op %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Geïnstalleerde updates"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Aanvullingen"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Verwijderingen"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Updates"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Neerwaarderingen"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Er zijn geen updates geïnstalleerd op dit systeem."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Veiligheidsupdates staan klaar"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Het wordt aanbevolen om belangrijke updates nu te installeren"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Herstarten & installeren"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Software-updates beschikbaar"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Belangrijke updates voor OS en toepassingen staan klaar om geïnstalleerd te "
+"worden"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Bekijken"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u toepassing bijgewerkt — Herstarten vereist"
+msgstr[1] "%u toepassingen bijgewerkt — Herstarten vereist"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u toepassing bijgewerkt"
+msgstr[1] "%u toepassingen bijgewerkt"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s is bijgewerkt."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Herstart de toepassing."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s en %s zijn bijgewerkt."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u toepassing vereist een herstart."
+msgstr[1] "%u toepassingen vereisen een herstart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Bevat %s, %s en %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Updates voor besturingssysteem niet beschikbaar"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Opwaardeer uw systeem om beveiligingsupdates te ontvangen."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Er is een nieuwe versie van %s beschikbaar om te installeren"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Software-upgrade beschikbaar"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Software-updates mislukt"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Installatie van een belangrijke OS-update is mislukt."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Gegevens tonen"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Systeemupgrade voltooid"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Welkom bij %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Software-update geïnstalleerd"
+msgstr[1] "Software-updates geïnstalleerd"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Een belangrijke OS-update is geïnstalleerd."
+msgstr[1] "Belangrijke OS-updates zijn geïnstalleerd."
+
+# in de zin van: Bekijk updates (die zijn geïnstalleerd)
+# Ik maak er "Bekijken" van als knoptitel - Hannie
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Bekijken"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Bijwerken mislukt"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Het systeem was al bijgewerkt."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "De update is geannuleerd."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internettoegang is vereist maar was niet beschikbaar. Zorg ervoor dat u "
+"internettoegang heeft en probeer het opnieuw."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Er zijn veiligheidsproblemen met de update. Gelieve uw softwareleverancier "
+"te raadplegen voor meer details."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Er is niet genoeg opslagruimte. Maak wat ruimte vrij en probeer het opnieuw."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Het spijt ons: de update kon niet geïnstalleerd worden. Wacht op een andere "
+"update en probeer het dan opnieuw. Als het probleem zich blijft voordoen, "
+"neem dan contact op met uw softwareleverancier."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Gisteren, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Gisteren, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Twee dagen geleden"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Drie dagen geleden"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Vier dagen geleden"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Vijf dagen geleden"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Zes dagen geleden"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Een week geleden"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Twee weken geleden"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Zoeken naar nieuwe updates…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Instellen van nieuwe updates…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Dit kan even duren)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Laatst gecontroleerd: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s wordt niet meer ondersteund."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Uw besturingssysteem wordt niet meer ondersteund."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Dit betekent dat het geen beveiligingsupdates meer ontvangt."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr ""
+"Het wordt aanbevolen om uw besturingssysteem bij te werken naar een meer "
+"recente versie."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Er kunnen kosten aan verbonden zijn"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Er zijn mogelijk kosten aan verbonden wanneer u via mobiele breedband "
+"controleert op updates."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Toch controleren"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Geen netwerk"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Internettoegang is vereist voor het controleren op updates."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Controleren…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Controleren op updates"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Updates-pagina"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Software is up-to-date"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Er zijn mogelijk kosten aan verbonden wanneer u via mobiele breedband "
+"controleert op updates"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Toch _controleren"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Ga online om te controleren op updates"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Netwerkinstellingen"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Updates worden automatisch beheerd"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Herstarten & bijwerken"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Alles bijwerken"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Geïntegreerde firmware"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Herstart vereist"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Toepassingsupdates"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Apparaatfirmware"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Downloaden"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Het wordt aanbevolen een reservekopie te maken van uw gegevens en bestanden "
+"voordat u opwaardeert."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Nu herstarten"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Updates worden toegepast wanneer de computer opnieuw wordt gestart."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s is nu beschikbaar"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Wachten op het downloaden van %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s wordt gedownload"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s klaar om te worden geïnstalleerd"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Een belangrijke upgrade, met nieuwe functies en toegevoegde extra’s."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Meer informatie"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Software op deze computer toevoegen, verwijderen of bijwerken"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Bronnen;Repositories;Preferences;Voorkeuren;Install;"
+"Installeren;Uninstall;Verwijderen;Program;Programma;Software;App;Toepassing;"
+"Applicatie;Store;Winkel;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Audiocreatie en -bewerking"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Muziekspelers"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Foutopsporingsprogramma’s"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE’s"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Kunstmatige intelligentie"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomie"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Scheikunde"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Talen"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Wiskunde"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Actie"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Avontuur"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokken"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Bordspellen"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kaartspellen"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulators"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Kinderen"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rollenspellen"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategische spellen"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografie"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scannen"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vectorafbeeldingen"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Viewers"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Agenda"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Database"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Financiën"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Tekstverwerker"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Lettertypes"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Invoerbronnen"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Taalpakketten"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisatie"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardware-stuurprogramma’s"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nieuws"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webbrowsers"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Tekstverwerkers"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Alles"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Aanbevolen"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Kunst"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografie"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Strips"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fictie"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Gezondheid"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Geschiedenis"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Levensstijl"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politiek"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio & video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Ontwikkelhulpmiddelen"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Onderwijs & wetenschap"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Spelletjes"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafisch & fotografie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Productiviteit"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Communicatie & nieuws"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referentie"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Hulpprogramma’s"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "OS-updates"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclusief verbeteringen voor prestatie, stabiliteit en veiligheid."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Afbeeldingen worden gedownload…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Een Endless OS-update, met nieuwe functies en verbeteringen."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS-updateservice kan de update niet ophalen en toepassen."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Gnome Software AppStream systeembrede installer"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Opdrachtregelargumenten ontleden mislukt"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "U dient exact één bestandsnaam op te geven"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Dit programma kan alleen worden gebruikt door de root-gebruiker"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Content-type valideren mislukt"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kopiëren mislukt"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Extra metadatabestanden worden gedownload…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Opwaarderingsinformatie wordt gedownload…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Upgrade voor de nieuwste functies en verbeteringen in prestaties en "
+"stabiliteit."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak-ondersteuning"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak is een raamwerk voor bureaubladtoepassingen op Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Flatpak-metadata voor %s worden opgehaald…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+#| msgid "%s Device"
+msgid "%s Device Update"
+msgstr "Update apparaat %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+#| msgid "%s System"
+msgid "%s System Update"
+msgstr "Systeem-update %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+#| msgid "%s Embedded Controller"
+msgid "%s Embedded Controller Update"
+msgstr "Update embedded Controller %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+#| msgid "Update"
+msgid "%s ME Update"
+msgstr "Update ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+#| msgid "%s Corporate ME"
+msgid "%s Corporate ME Update"
+msgstr "Update corporate ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+#| msgid "%s Consumer ME"
+msgid "%s Consumer ME Update"
+msgstr "Update consumer ME %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+#| msgid "%s Controller"
+msgid "%s Controller Update"
+msgstr "Update controller %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+#| msgid "%s Thunderbolt Controller"
+msgid "%s Thunderbolt Controller Update"
+msgstr "Update Thunderbolt Controller %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Update CPU Microcode %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%u Application Updated"
+#| msgid_plural "%u Applications Updated"
+msgid "%s Configuration Update"
+msgstr "Update configuratie %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Ondertekening van firmware-update wordt gedownload…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Metadata van firmware-update worden gedownload…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Ondersteuning voor opwaarderen van firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Biedt ondersteuning voor het opwaarderen van firmware"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Toepassingswaarderingen worden gedownload…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings-ondersteuning"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS is een dienst die gebruikersrecensies van toepassingen aanbiedt"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap-winkel"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap-ondersteuning"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Een snap is een universeel Linux-pakket"
+
+#~ msgid "About %s"
+#~ msgstr "Over %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Mapbeheer-interface tonen"
+
+#~ msgid "Folder Name"
+#~ msgstr "Mapnaam"
+
+#~ msgid "_Add"
+#~ msgstr "_Toevoegen"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Toevoegen aan Toepassingenmap"
+
+#~ msgid "Top Rated"
+#~ msgstr "Hoogst gewaardeerd"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Instellingen voor uitbreidingen"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Het gebruiken van uitbreidingen is voor eigen risico. Als u "
+#~ "systeemproblemen heeft, wordt het aanbevolen deze uit te schakelen."
+
+#~| msgid "Failed to load image"
+#~ msgid "Failed to load components"
+#~ msgstr "Laden van onderdelen mislukt"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS-validatie: in orde!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Laden van bestand mislukt"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Niet opgeslagen wijzigingen"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "De toepassingslijst is al geladen."
+
+#~ msgid "Merge documents"
+#~ msgstr "Documenten samenvoegen"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Wijzigingen verwerpen"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "AppStream-bestand openen"
+
+#~ msgid "_Open"
+#~ msgstr "_Openen"
+
+#~| msgid "Open AppStream File"
+#~ msgid "Save AppStream File"
+#~ msgstr "AppStream-bestand opslaan"
+
+#~ msgid "_Save"
+#~ msgstr "Op_slaan"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Opslaan van bestand mislukt"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s-bannerontwerp verwijderd."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Bannerontwerp verwijderd."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "De toepassingslijst heeft niet opgeslagen wijzigingen."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Gedetailleerd logboek gebruiken"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Gnome Software-bannerontwerper"
+
+#~ msgid "No Designs"
+#~ msgstr "Geen ontwerpen"
+
+#~ msgid "Error message here"
+#~ msgstr "Foutbericht hier"
+
+#~ msgid "App ID"
+#~ msgstr "App-ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Keuze van de redactie"
+
+#~ msgid "Category Featured"
+#~ msgstr "Aanbevolen in categorie"
+
+#~ msgid "Undo"
+#~ msgstr "Ongedaan maken"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Banner-ontwerper"
+
+#~ msgid "New Banner"
+#~ msgstr "Nieuwe banner"
+
+#~ msgid "Import from file"
+#~ msgstr "Importeren uit bestand"
+
+#~ msgid "Export to file"
+#~ msgstr "Exporteren naar bestand"
+
+#~ msgid "Delete Design"
+#~ msgstr "Ontwerp verwijderen"
+
+#~ msgid "Featured App"
+#~ msgstr "Aanbevolen toepassing"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "OS-opwaardering"
+
+#~ msgid "Spacing"
+#~ msgstr "Spatiëring"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "De hoeveelheid ruimte tussen kinderen"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Klik op items om ze te selecteren"
+
+#~ msgid "Select"
+#~ msgstr "Selecteren"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Toevoegen aan map…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "Ver_plaatsen naar map…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Verwijderen uit map"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aanbevolen toepassingen"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Ontwerp de banners te zien in Gnome Software"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;Toepassing;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell-uitbreidingen"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Webapps-ondersteuning"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Voer populaire webtoepassingen uit in een browser"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Pakketbron met Gnome Shell-uitbreidingen"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Metadata van shell-uitbreiding worden gedownload…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Gnome Shell-uitbreiding"
+
+#~ msgid "_All"
+#~ msgstr "_Alles"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Aanmelden / registreren…"
+
+#~ msgid "Continue"
+#~ msgstr "Doorgaan"
+
+#~ msgid "Use"
+#~ msgstr "Gebruiken"
+
+#~ msgid "Add another…"
+#~ msgstr "Nog één toevoegen…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Weet u zeker dat u %s wilt kopen?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s zal geïnstalleerd worden, en u zal %s aangerekend worden."
+
+#~ msgid "Purchase"
+#~ msgstr "Kopen"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Aangemeld als %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Aanmelden…"
+
+#~ msgid "Sign out"
+#~ msgstr "Afmelden"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "%s kopen mislukt: authenticatie vereist"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "%s kopen mislukt: authenticatie ongeldig"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "%s kopen mislukt: geen betaalwijze ingesteld"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "%s kopen mislukt: betaling is geweigerd"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "%s kopen mislukt"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Om door te gaan heeft u een Ubuntu One-account nodig."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Om door te gaan dient u uw Ubuntu One-account te gebruiken."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "De softwarecatalogus wordt geladen"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Profielinformatie voor de dienst tonen"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Om door te gaan dient u zich aan te melden bij %s."
+
+#~ msgid "Email address"
+#~ msgstr "E-mailadres"
+
+#~ msgid "I have an account already"
+#~ msgstr "Ik heb al een account"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Ik wil nu een account aanmaken"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Ik ben mijn wachtwoord vergeten"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "De volgende keer automatisch aanmelden"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Uw eenmalige pincode invoeren voor twee-factor authenticatie."
+
+#~ msgid "PIN"
+#~ msgstr "Pincode"
+
+#~ msgid "Authenticate"
+#~ msgstr "Aanmelden"
+
+#~ msgid "_About"
+#~ msgstr "_Info"
+
+#~ msgid "_Quit"
+#~ msgstr "_Afsluiten"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informatie over %s, evenals opties voor het verkrijgen van een codec die "
+#~ "dit formaat kan afspelen, is te vinden op de website."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Het aanmaken van uw %s-account is nog niet rond."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Het installeren van software is niet mogelijk totdat dit is opgelost."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Voor meer informatie, ga naar %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "%s bijwerken van %s mislukt"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Toepassingen bijgewerkt"
+
+#~ msgid "Includes: ."
+#~ msgstr "Bevat: ."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Nieuwe updates worden gedownload…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Toepassingspagina wordt gedownload…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam-ondersteuning"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Het ultieme amusementsplatform van Valve"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Herstarten & bijwerken"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Alles _bijwerken"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Herstarten & i_nstalleren"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Ophalen van runtimebron…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Firmware-update wordt gedownload…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba-ondersteuning"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba biedt ontwikkelaars een eenvoudige manier om softwarepakketten te "
+#~ "maken"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Gesorteerd op naam"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Gesorteerd op waardering"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "De lijst van extra bronnen die eerder zijn ingeschakeld"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "De lijst van bronnen die zijn ingeschakeld toen toepassingen van derden "
+#~ "werden geïnstalleerd."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Niet-vrije software tonen in zoekresultaten"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Een lijst met niet-vrije bronnen die eventueel ingeschakeld kunnen worden"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Geeft toegang tot extra software, waaronder webbrowsers en spelletjes."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Bronnen met niet-vrije software inschakelen?"
+
+# Geen toepassingen of add-ons vanuit deze softwarebron geïnstelleerd, echter misschien is er andere geïnstalleerde software wel uit deze bron afkomstig (https://bugzilla.gnome.org/show_bug.cgi?id=726819)
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Geen toepassingen of add-ons geïnstalleerd; andere software misschien nog "
+#~ "wel"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Heeft doorgaans beperkingen met betrekking tot gebruik en toegang tot de "
+#~ "broncode."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Bronnen met niet-vrije software"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Softwarebronnen kunnen gedownload worden van het internet. Ze geven u "
+#~ "toegang tot extra software die niet door %s meegeleverd is."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Het verwijderen van een bron zal ook alle software verwijderen die u "
+#~ "ervan geïnstalleerd heeft."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Geen software geïnstalleerd van deze bron"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Geïnstalleerd van deze bron"
+
+#~ msgid "Source Details"
+#~ msgstr "Brongegevens"
+
+#~ msgid "Last Checked"
+#~ msgstr "Laatst gecontroleerd"
+
+#~ msgid "Added"
+#~ msgstr "Toegevoegd"
+
+#~ msgid "Website"
+#~ msgstr "Website"
+
+#~ msgid "Remove Source"
+#~ msgstr "Bron verwijderen"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Vooraf ingestelde interactie tussen spelers zonder gespreksfunctionaliteit"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Deelt gebruikersinformatie met derden"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "‘%s’ [%s]"
+
+#~ msgid "Other Updates"
+#~ msgstr "Overige updates"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgid "Total"
+#~ msgstr "Totaal"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Alles"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Aanbevolen"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomie"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chemie"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Wiskunde"
+
+#~ msgid "Science"
+#~ msgstr "Wetenschap"
+
+#~| msgid "_Install"
+#~ msgid "_Install All"
+#~ msgstr "Alles i_nstalleren"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr " Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~ msgid " or "
+#~ msgstr " of "
+
+#~ msgid "3rd party"
+#~ msgstr "Van derden"
+
+#~ msgid "web app"
+#~ msgstr "webapp"
+
+#~ msgid "nonfree"
+#~ msgstr "niet-vrij"
+
+#~ msgid "_Installing"
+#~ msgstr "Wordt ge_ïnstalleerd"
+
+#~ msgid "_Removing"
+#~ msgstr "_Wordt verwijderd"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Onbekend"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Onbekend"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Deze software is van derden."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr "Deze software is van derden en kan niet-vrije onderdelen bevatten."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Deze software kan niet-vrije onderdelen bevatten."
+
+#~ msgid "_History"
+#~ msgstr "Gesc_hiedenis"
+
+#~ msgid "Size"
+#~ msgstr "Grootte"
+
+#~ msgid "non-free"
+#~ msgstr "niet-vrij"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aanbevolen kantoortoepassingen"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Softwarebronnen geven u toegang tot extra software."
+
+#~ msgid "One Star"
+#~ msgstr "Een ster"
+
+#~ msgid "Two Stars"
+#~ msgstr "Twee sterren"
+
+#~ msgid "Three Stars"
+#~ msgstr "Drie sterren"
+
+#~ msgid "Four Stars"
+#~ msgstr "Vier sterren"
+
+#~ msgid "Five Stars"
+#~ msgstr "Vijf sterren"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Installatie van %s is mislukt."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Verwijderen van %s is mislukt."
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Geen AppStream-data gevonden"
+
+#~ msgid "Audio"
+#~ msgstr "Audio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Bewerken"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Databases"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Schijf branden"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amateurradio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Muziek"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Recorders"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sequencers"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Tuners"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Builden"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Databases"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profielanalyse"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Vertaling"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Webontwikkeling"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Computerwetenschappen"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Bouw"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Gegevensvisualisatie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektriciteit"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Techniek"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geowetenschappen"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Geschiedenis"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Geesteswetenschappen"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Beeldverwerking"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatuur"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Kaarten"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Muziek"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerieke analyse"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallel computing"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Natuurkunde"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualiteit"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Schietspellen"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulatie"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafisch"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publiceren"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rasterafbeeldingen"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Inbelverbinding"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Feed"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Bestandsoverdracht"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amateurradio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Chatten"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC-cliënten"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Externe toegang"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonie"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Webontwikkeling"
+
+#~ msgid "Office"
+#~ msgstr "Kantoor"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Contactbeheer"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Woordenboek"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Stroomdiagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentatie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projectbeheer"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publiceren"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Spreadsheet"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Viewer"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Kunst"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Kunstmatige intelligentie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chemie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Computerwetenschappen"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Bouw"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Gegevensvisualisatie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektriciteit"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Techniek"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geowetenschappen"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Geschiedenis"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Geesteswetenschappen"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Beeldverwerking"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Talen"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatuur"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Kaarten"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Wiskunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Geneeskunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerieke analyse"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallel computing"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Natuurkunde"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualiteit"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Bestandsbeheer"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Bestandshulpmiddelen"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Beveiliging"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Terminal emulator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Toegankelijkheid"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Archivering"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Rekenmachine"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Klok"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compressie"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Bestandshulpmiddelen"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Kaarten"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualiteit"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefoniehulpmiddelen"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Videobewerking"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Database"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Schijf branden"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Spelers"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Recorders"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
diff --git a/po/oc.po b/po/oc.po
new file mode 100644
index 0000000..76b11a4
--- /dev/null
+++ b/po/oc.po
@@ -0,0 +1,5765 @@
+# Occitan translation for gnome-calendar.
+# Copyright (C) 2013 gnome-calendar's COPYRIGHT HOLDER
+# This file is distributed under the same license as the GNOME Calendar package.
+# Cédric Valmary (Tot en òc) <cvalmary@yahoo.fr>, 2015.
+# Cédric Valmary (totenoc.eu) <cvalmary@yahoo.fr>, 2016, 2017, 2018.
+# Cedric <cvalmary@yahoo.fr>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-calendar master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2019-11-08 17:19+0000\n"
+"PO-Revision-Date: 2019-11-19 18:40+0200\n"
+"Last-Translator: Cedric <cvalmary@yahoo.fr>\n"
+"Language-Team: Tot en òc\n"
+"Language: oc\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Logicials de GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestionari d'aplicacions per GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Logicials servís a recercar e installar de novèlas aplicacions e extensions "
+"del sistèma, e tanben a suprimir las que son installadas sus vòstre "
+"ordenador."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Logicials de GNOME presenta una veirina d'aplicacions conegudas amb l'ajuda "
+"de descripcions utilas e de mantuna captura d'ecran per caduna d'elas. "
+"Podètz recercar de logicials siá en consultant la lista de las categorias, "
+"siá en interrogant lo motor de recèrca. Logicials permet tanben de metre a "
+"jorn vòstre sistèma fòra linha."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panèl de vista d'ensemble"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panèl de las descripcions"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panèl de las installacions"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panèl de las mesas a jorn"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detalhs de la mesa a jorn"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1411
+msgid "The GNOME Project"
+msgstr "Lo projècte GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installar un fichièr d'aplicacion dins lo sistèma"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installacion d'un fichièr d'aplicacion dins lo sistèma"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Una lista de projèctes compatibles"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Aquò es un lista de projèctes compatibles a afichar, tals coma GNOME, KDE e "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Indica la façon de gerir las mesas a jorn e las mesas al nivèl de Logicials "
+"de GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Se desactivat, Logicials de GNOME amaga lo panèl de las mesas a jorn, "
+"efectua pas cap de mesa a jorn automatica e demanda pas cap de mesa al nivèl."
+
+#: data/org.gnome.software.gschema.xml:15
+#| msgid "Whether to automatically download updates"
+msgid "Automatically download and install updates"
+msgstr "Telecargar e installar automaticament las mesas a jorn"
+
+#: data/org.gnome.software.gschema.xml:16
+#| msgid ""
+#| "If enabled, GNOME Software automatically downloads updates in the "
+#| "background and prompts the user to install them when ready."
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Se activat, Logicials de GNOME telecarga automaticament las mesas a jorn "
+"logicialas en rèireplan, puèi installa las que necessitan pas de reaviada."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Senhalar a l’utilizaire las mesas a jorn de logicials en rèireplan"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Se activat, Logicials de GNOME senhala a l’utilizaire las mesas a jorn que "
+"se son fachas pendent qu’èra inactiu."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Indica se cal reactualizar automaticament sus las connexions pagantas"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Se activat, GNOME Logicials réactualiza automaticament en rèireplan "
+"quitament sus las connexions pagantas (amb coma consequéncia lo "
+"telecargament de metadonadas, de mesas a jorn o autres amb un còst potencial "
+"per l'utilizaire)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Indica se s'agís de la primièra aviada de GNOME Logicials"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Afichar las nòtas al costat de las aplicacions"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrar las aplicacions en foncion de la branca definida per defaut per los "
+"distants"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Las aplicacion non-liuras afichant un avertiment abans installacion"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quand las aplicacions non-liuras son installadas, un avertiment pòt èsser "
+"afichat. Aquò contraròtla aqueste afichatge."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Recercar d'aplicacions"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Una lista d'aplicacion a utilizar, passant otra la qu'es definida pel "
+"sistèma."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "L'orodatatge de la darrièra verificacion de las mesas a jorn"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "L'orodatatge de la darrièra notificacion de mesa a jorn"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"L'orodatatge de la primièra mesa a jorn de seguretat, escafat aprèp mesa a "
+"jorn"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "L'orodatatge de la darrièra mesa a jorn"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"L’orodatatge del darrièr moment quand lo sistèma èra en linha e qu'a "
+"obtengut de mesas a jorn"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"La durada, en segondas, per verificar que la captura d'ecran en amont es "
+"encara valid"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"La causida d'una valor mai granda dona mens d'anar-tornar cap al servidor "
+"distant, mas las mesas a jorn de las capturas d'ecran son mai lentas a "
+"arribar. Una valor de 0 mena a interrogar jamai lo servidor se i a ja un "
+"imatge dins lo cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Lo servidor a utilizar per las apreciacions d'aplicacions"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "La marca minimum per las apreciacions"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+"Las apreciacions que lo karma n'es inferior a aquesta valor seràn amagadas."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Una lista de depauses oficials que devon pas èsser considerats coma tèrças "
+"partidas"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Una lista de depauses oficials que devon èsser considerats coma contenent de "
+"logicials liures"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"L'URL de la licéncia d'utilizar quand una aplicacion deu èsser considerada "
+"coma un logicial liure"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Installa se possible las aplicacions envelopadas sul sistèma per totes los "
+"utilizaires"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Autoriza l’accès a la bóstia de dialòg dels depauses del logicial"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Prepausa de mesas a jorn per las versions en tèst"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Aficha qualques elements d'interfàcia que mòstran a l'utilizaire qu'una "
+"aplicacion es non-liura"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Aficha lo convit de comandas per installar los depauses de logicials non-"
+"liures"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Afichar lor talha d'installacion dins la lista de las aplicacions installadas"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://fr.wikipedia.org/wiki/Logicial_propri%C3%A9taire'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+"L'URI que provesís una explicacion suls logicials proprietaris e non-liures"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Una lista d'URLs que puntan cap als fichièrs del flux de l'aplicacion que "
+"seràn telecargats dins un dorsièr d'informacions"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Installa los fichièrs AppStream sus un emplaçament de l’ensemble del sistèma "
+"per totes los utilizaires"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Activar lo depaus d’extensions GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Una cadena que conten l’identificant « Comptes en linha » utilizat per se "
+"connectar"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Installacion de l'aplicacion"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installar l'aplicacion seleccionada sul sistèma"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Seleccionar tot"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Seleccionar pas res"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "_Depauses de Logicials"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "Preferéncias de _mesa a jorn"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Logicials"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Tornar en arrièr"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_Explore"
+msgstr "_Explorar"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "_Installadas"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "Me_sas a jorn"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Recercar"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:287 src/gs-details-page.ui:877
+msgid "Source"
+msgstr "Font"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Depauses de Logicials"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "Examinar lo disc"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "Paramètres ret"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "Reaviar ara"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "Mai d'informacions"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4459
+msgid "Local file"
+msgstr "Fichièr local"
+
+#: lib/gs-app.c:4511
+msgid "Package"
+msgstr "Paquet"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:412
+msgid "Pending"
+msgstr "En espèra"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:175 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:68
+msgid "Installed"
+msgstr "Installada"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:165 src/gs-details-page.c:327
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "Installacion en cors"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:171 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "Supression en cors"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mòde d'aviada : pòt èsser « updates » (mesas a jorn), « updated » (a jorn), «"
+" installed » (installadas) o « overview » (vista d'ensemble)."
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "MÒDE"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr "Recercar d'aplicacions"
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "RECERCAR"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr "Afichar los detalhs de l'aplicacion (en utilizant l'ID de l'aplicacion)"
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr "Afichar los detalhs de l'aplicacion (en utilizant lo nom del paquet)"
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr "NOMDEPAQUET"
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr "Installar l'aplicacion (à partir de son identificant)"
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr "Dobrir lo fichièr d'un paquet local"
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "NOMDEFICHIÈR"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Lo tipe d'interaccion esperada aicí : siá « none » (aucune), « notify » "
+"(notifier), o « full » (toutes)"
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr "Afichar las informacions detalhadas de desbugatge"
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr "Installar las mesas a jorn en espèra en rèireplan"
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr "Afichar las preferéncias de mesa a jorn"
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr "Quitar la session en cors"
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferir las fonts dels fichièrs locals a AppStream"
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "Mostrar lo numèro de version"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Cédric Valmary (totenoc.eu) <cvalmary@yahoo.fr>, 2015-2017."
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:1885
+#, c-format
+msgid "About %s"
+msgstr "A prepaus de %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr "Una faiçon eleganta de gerir las aplicacions de vòstre sistèma."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:567
+msgid "Sorry! There are no details for that application."
+msgstr "O planhèm, i a pas cap d'informacion sus aquesta aplicacion."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:120
+msgid "Visit website"
+msgstr "Visitar lo site Web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:125
+msgid "Install…"
+msgstr "Installar…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:132 src/gs-updates-section.c:472
+msgid "Cancel"
+msgstr "Anullar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:139 src/gs-common.c:287 src/gs-page.c:273
+msgid "Install"
+msgstr "Installar"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:146
+msgid "Update"
+msgstr "Metre a jorn"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:150 src/gs-app-row.c:159 src/gs-page.c:432
+#: src/gs-repos-dialog.c:323
+msgid "Remove"
+msgstr "Suprimir"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:277
+msgid "Device cannot be used during update."
+msgstr "L'aparelh pòt pas èsser utilizat pendent la mesa a jorn."
+
+#: src/gs-app-row.c:470 src/gs-update-dialog.ui:182
+#| msgid "%s is requesting additional fonts."
+msgid "Requires additional permissions"
+msgstr "Demanda mai de permissions"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:180
+msgid "Other"
+msgstr "Autres"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:185
+msgid "All"
+msgstr "_Tot"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:189
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:480
+#, c-format
+msgid "Featured %s"
+msgstr "%s mesas en avant"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:75
+msgid "Rating"
+msgstr "Avaloracion"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-editor.ui:225
+#: src/gs-origin-popover-row.c:58
+msgid "Name"
+msgstr "Nom"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:926
+msgid "Extension Settings"
+msgstr "Paramètres ret"
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Las extensions son a utilizar a vòstres pròpris risques. Se avètz de "
+"problèmas, es recomandat de las desactivar."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "Afichar"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "Menú del filtre de las soscategorias"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "Triar"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "Menú de triada de las soscategorias"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Picatz una chifra de 1 a %u : "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr "Causissètz una aplicacion :"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr "Las mesas a jorn del sistèma operatiu son ara installadas"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr "Las mesas a jorn installadas recentament son ara consultablas"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr "%s es ara installada"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for the changes to take effect."
+msgstr "Una reaviada es necessària per acabar l’installacion."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr "L'aplicacion es ara operacionala."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-common.c:633
+msgid "Restart"
+msgstr "Reaviar"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "Aviar"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr "Installar lo logicial tèrç ?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:234
+msgid "Enable Third-Party Software Repository?"
+msgstr "Activar los depauses logicials tèrces ?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s es pas un <a href=\"https://fr.wikipedia.org/wiki/Free/"
+"Libre_Open_Font_Software\">logicial liure e dobèrt</a> e es distribuit per « "
+"%s »."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s es distribuit per « %s »."
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Aqueste depaus de logicials deu èsser activat per contunhar l’installacion."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Pòt èsser contrari a la lei d'installar e d'utilizar %s dins certans païses."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Pòt èsser contrari a la lei d'installar e d'utilizar aqueste codec dins "
+"certans païses."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr "M'avertir pas mai"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr "Activar e installar"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:435
+msgid "Detailed errors from the package manager follow:"
+msgstr "Aquí los detalhs de las errors del gestionari de paquets :"
+
+#: src/gs-common.c:454 src/gs-details-page.ui:438
+msgid "Details"
+msgstr "Detalhs"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:619
+#| msgid "Updates have been installed"
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Una mesa a jorn es estada installada sus aqueste sistèma"
+msgstr[1] "De mesas a jorn son estadas installadas sus aqueste sistèma"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:624
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Una reaviada es necessària per acabar l’installacion."
+msgstr[1] "Una reaviada es necessària per acabar l’installacion."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:631 src/gs-update-monitor.c:119
+msgid "Not Now"
+msgstr "Pas ara"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:62
+msgid "No cartoon violence"
+msgstr "Pas cap de violéncia de dessenhs animats"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personatges de dessenh animat en situacion de dangièr"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:68
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personatges de dessenh animat en conflicte agressiu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:71
+msgid "Graphic violence involving cartoon characters"
+msgstr ""
+"Illustracion de violéncias implicant los personatges del dessenh animat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "No fantasy violence"
+msgstr "Pas de violéncias fantasticas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:77
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Personatges en situacions dangierosas francament irrealas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:80
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Personatges en situacion de conflicte agressiu francament irreal"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Illustracion violenta francament irreala"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:86
+msgid "No realistic violence"
+msgstr "Pas cap de violéncia realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personatges mejanament realistas en situacion dangierosa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Illustracions de personatges realistas en conflicte agressiu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:95
+msgid "Graphic violence involving realistic characters"
+msgstr "Illustracions de violéncias implicant de personatges realistas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "No bloodshed"
+msgstr "Pas cap de massacre"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:101
+msgid "Unrealistic bloodshed"
+msgstr "Chaple irrealista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:104
+msgid "Realistic bloodshed"
+msgstr "Chaple realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Illustracions d'un chaple e de mutilacions corporalas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:110
+msgid "No sexual violence"
+msgstr "Pas cap de violéncia sexuala"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:113
+msgid "Rape or other violent sexual behavior"
+msgstr "Viòl e autre compòrtament sexual violent"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "No references to alcohol"
+msgstr "Pas cap d'allusion a de bevendas alcoolizadas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:119
+msgid "References to alcoholic beverages"
+msgstr "Allusions a de bevendas alcoolizadas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "Use of alcoholic beverages"
+msgstr "Usatge de bevendas alcoolicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:125
+msgid "No references to illicit drugs"
+msgstr "Pas cap d'allusion a de drògas illicitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "References to illicit drugs"
+msgstr "Allusions a de drògas illicitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:131
+msgid "Use of illicit drugs"
+msgstr "Usatge de drògas illicitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr "Allusions a de produits derivats del tabat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:137
+msgid "Use of tobacco products"
+msgstr "Referéncia al tabat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:140
+msgid "No nudity of any sort"
+msgstr "Pas cap de nud, de cap de mena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:143
+msgid "Brief artistic nudity"
+msgstr "Nud artistic de corta durada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr "Nuditat perlongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:149
+#| msgid "No references or depictions of sexual nature"
+msgid "No references to or depictions of sexual nature"
+msgstr "Pas cap d'allusion o d'imatge amb caractèr sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "Provocative references or depictions"
+msgstr "Allusions e imatges provocators"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:155
+msgid "Sexual references or depictions"
+msgstr "Recercar d'aplicacions"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr "Illustracions de compòrtaments sexuals"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:161
+msgid "No profanity of any kind"
+msgstr "Pas cap de profanacion, de cap de mena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:164
+msgid "Mild or infrequent use of profanity"
+msgstr "Utilizacion moderada e ocasionnala d'injúrias"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr "Utilizacion moderada d'injúrias"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:170
+msgid "Strong or frequent use of profanity"
+msgstr "Utilizacion fòrta e frequenta d'injúrias"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:173
+msgid "No inappropriate humor"
+msgstr "Pas cap d'umor desplaçat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr "Umor burlèsc"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:179
+msgid "Vulgar or bathroom humor"
+msgstr "Umor vulgar e de regòla"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Umor per adultes e sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr "Pas cap d'allusion discriminatòria, de cap de mena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:188
+msgid "Negativity towards a specific group of people"
+msgstr "Actituds negativas de cap a de gropes especifics de gents"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminacions destinadas a nafrar emocionalament"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:194
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminacions explicitas basadas sul genre, lo sèxe, la raça e la religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:197
+msgid "No advertising of any kind"
+msgstr "Pas cap de publicitat, de cap de mena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Gestion de projècte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:203
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Allusions explicitas a de produits de marca especifica e depausada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:206
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Los utilizaires son encoratjats a crompar d'elements especifics del monde "
+"real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Pas cap de pariatge, de cap de mena"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:212
+msgid "Gambling on random events using tokens or credits"
+msgstr "Pariatges sus d'eveniments aleatòris amb l'ajuda de getons e a crèdit"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using “play” money"
+msgstr "Pariatges amb de moneda « fictiva »"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "Gambling using real money"
+msgstr "Pariatges amb d'argent vertadièr"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:221
+msgid "No ability to spend money"
+msgstr "Pas cap de possibilitat de despensar d'argent"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:224
+msgid "Users are encouraged to donate real money"
+msgstr "Los utilizaires son encoratjats a donar d’argent real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:227
+#| msgid "Ability to spend real money in-game"
+msgid "Ability to spend real money in-app"
+msgstr "Possibilitat de despensar d'argent vertadièr dins l’aplicacion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Pas cap de possibilitat de discutir amb los autres utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:233
+#| msgid "User-to-user game interactions without chat functionality"
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interaccions entre utilizaires sens possibilitat de discussion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Moderated chat functionality between users"
+msgstr "Possibilitat moderada de discutir entre utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "Uncontrolled chat functionality between users"
+msgstr "Possibilitat de discutir sens contròtle entre utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:242
+msgid "No way to talk with other users"
+msgstr "Pas cap de mejan de parlar amb los autres utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:245
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Possibilitat de discutir o se veire sens contròtle entre utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Pas cap de partiment dels noms d'utilizaire de rets socialas o d'adreças "
+"electronicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:251
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Partiment dels noms d'utilizaire de rets socialas e de las adreças corrièr "
+"electronic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:254
+#| msgid "No sharing of user information with 3rd parties"
+msgid "No sharing of user information with third parties"
+msgstr ""
+"Pas cap de partiment dels identificants d’utilizaire amb de tèrças partidas"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "Checking for the latest application version"
+msgstr "Verificacion se s’agís de la darrièra version de l’aplicacion"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:260
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Partiment de las donadas de diagnostic que permet pas l’identification de "
+"l’utilizaire"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr "Partiment d’informacions que permet l’identificacion de l’utilizaire"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:266
+#| msgid "No sharing of physical location to other users"
+msgid "No sharing of physical location with other users"
+msgstr "Pas cap de partiment de geolocalizacion amb los autres utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:269
+#| msgid "Sharing physical location to other users"
+msgid "Sharing physical location with other users"
+msgstr "Partiment de geolocalizacion amb los autres utilizaires"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:274
+msgid "No references to homosexuality"
+msgstr "Pas cap d'allusion a l’omosexualitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:277
+msgid "Indirect references to homosexuality"
+msgstr "Allusions indirèctas a l’omosexualitat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:280
+msgid "Kissing between people of the same gender"
+msgstr "Estrentas entre personas d’un meteis sèxe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Imatges de comportaments sexuals entre personas d’un meteis sèxe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:286
+msgid "No references to prostitution"
+msgstr "Pas cap d'allusion a la prostitucion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:289
+msgid "Indirect references to prostitution"
+msgstr "Allusions indirèctas a la prostitucion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+#| msgid "Direct references of prostitution"
+msgid "Direct references to prostitution"
+msgstr "Allusions dirèctas a la prostitucion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:295
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Imatges d’actes de prostitucion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "No references to adultery"
+msgstr "Pas cap d'allusion a l’adultèri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "Indirect references to adultery"
+msgstr "Allusions indirèctas a l’adultèri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:304
+#| msgid "Direct references of adultery"
+msgid "Direct references to adultery"
+msgstr "Allusions dirèctas a l’adultèri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr "Imatges d’actes d’adultèri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:310
+msgid "No sexualized characters"
+msgstr "Representacions umanas amb caractèr non sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:313
+msgid "Scantily clad human characters"
+msgstr "Representacions umanas leugièrament vestidas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:316
+msgid "Overtly sexualized human characters"
+msgstr "Representacions umanas amb caractèr dobèrtament sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "No references to desecration"
+msgstr "Pas cap d'allusion a de profanacion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+#| msgid "Depictions or references to historical desecration"
+msgid "Depictions of or references to historical desecration"
+msgstr "Allusions o imatges de profanacions istoricas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:325
+msgid "Depictions of modern-day human desecration"
+msgstr "Representacions d’actes de profanacion contemporanèus sus umans"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Imatges d’actes de profanacion contemporanèus sus umans"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:331
+msgid "No visible dead human remains"
+msgstr "Pas cap d'imatge de rèstas umanas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:334
+msgid "Visible dead human remains"
+msgstr "Imatges de rèstas umanas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Rèstas umanas expausadas als elements"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:340
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Imatges de profanacions sus de còsses umans"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:343
+msgid "No references to slavery"
+msgstr "Pas cap d'allusion a l’esclavagisme"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+#| msgid "Depictions or references to historical slavery"
+msgid "Depictions of or references to historical slavery"
+msgstr "Representacions o allusions a l’esclavagisme istoric"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:349
+msgid "Depictions of modern-day slavery"
+msgstr "Representacions d’esclavagisme contemporanèu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Imatges d’esclavagisme contemporanèu"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:368
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:502
+msgid "General"
+msgstr "General"
+
+#: src/gs-content-rating.c:511
+msgid "ALL"
+msgstr "TOTES"
+
+#: src/gs-content-rating.c:515
+msgid "Adults Only"
+msgstr "Adultes unicament"
+
+#: src/gs-content-rating.c:517
+#| msgid "Featured"
+msgid "Mature"
+msgstr "Matur"
+
+#: src/gs-content-rating.c:519
+msgid "Teen"
+msgstr "Adolescents"
+
+#: src/gs-content-rating.c:521
+msgid "Everyone 10+"
+msgstr "10 ans e mai"
+
+#: src/gs-content-rating.c:523
+msgid "Everyone"
+msgstr "Tot lo monde"
+
+#: src/gs-content-rating.c:525
+msgid "Early Childhood"
+msgstr "Bas atge"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr "Una aplicacion"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s demanda mai de presa en carga del format del fichièr."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr "Tipes MIME suplementaris requesits"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s demanda mai de poliças."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr "Poliças suplementàrias requesidas"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s demanda mai de codecs multimèdia."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr "Codecs multimèdia suplementaris requesits"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s demanda mai de pilòts d'imprimenta."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr "Pilòts d'imprimenta suplementaris requesits"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s demanda mai de paquets logicials."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr "Paquets logicials suplementaris requesits"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr "Aviar Logicials"
+
+#: src/gs-details-page.c:322
+msgid "Removing…"
+msgstr "Supression en cors…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:341
+msgid "Pending installation…"
+msgstr "Installacion en espèra…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:348
+msgid "Pending update…"
+msgstr "Mesa a jorn en espèra…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:706
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Aquesta aplicacion pòt pas èsser utilizada que se una connexion a Internet "
+"es activa"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:851 src/gs-details-page.c:868
+#: src/gs-details-page.ui:162 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.c:70
+msgid "_Install"
+msgstr "_Installar"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:882 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "_Installar…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:931
+msgid "_Launch"
+msgstr "A_viar"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:956 src/gs-details-page.ui:187
+msgid "_Remove"
+msgstr "_Suprimir"
+
+#: src/gs-details-page.c:987 src/gs-update-dialog.c:92
+#| msgid "No Network"
+msgid "Network"
+msgstr "Ret"
+
+#: src/gs-details-page.c:987 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr "Pòt comunicar a travèrs la ret"
+
+#: src/gs-details-page.c:988 src/gs-update-dialog.c:93
+#| msgid "System Integration"
+msgid "System Services"
+msgstr "Servicis sistèma"
+
+#: src/gs-details-page.c:988 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr "Pòt accedir a de servicis DBus sul bus sistèma"
+
+#: src/gs-details-page.c:989 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr "Servicis de session"
+
+#: src/gs-details-page.c:989 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr "Pòt accedir als servicis DBus sul bus de session"
+
+#: src/gs-details-page.c:990 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "Periferics"
+
+#: src/gs-details-page.c:990 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr "Pòt accedir als fichièrs del sistèma"
+
+#: src/gs-details-page.c:991 src/gs-details-page.c:992
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+#| msgid "_Remove from Folder"
+msgid "Home folder"
+msgstr "Dorsièr personal"
+
+#: src/gs-details-page.c:991 src/gs-details-page.c:993
+#: src/gs-details-page.c:995 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr "Pòt veire, editar e crear de fichièrs"
+
+#: src/gs-details-page.c:992 src/gs-details-page.c:994
+#: src/gs-details-page.c:996 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr "Pòt veire los fichièrs"
+
+#: src/gs-details-page.c:993 src/gs-details-page.c:994
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+#| msgctxt "Menu subcategory of System"
+#| msgid "File System"
+msgid "File system"
+msgstr "Sistèma de fichièrs"
+
+#: src/gs-details-page.c:995 src/gs-details-page.c:996
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+#| msgid "Download Size"
+msgid "Downloads folder"
+msgstr "Dorsièr de telecargament"
+
+#: src/gs-details-page.c:997 src/gs-update-dialog.c:102
+#| msgid "Network Settings"
+msgid "Settings"
+msgstr "Paramètres"
+
+#: src/gs-details-page.c:997 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr "Pòt veire e modificar quin paramètre que siá"
+
+#: src/gs-details-page.c:998 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr "Sistèma d’afichatge desuet"
+
+#: src/gs-details-page.c:998 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr "Utiliza un vièlh sistèma d’afichatge non securizat"
+
+#: src/gs-details-page.c:999 src/gs-update-dialog.c:104
+#| msgid "Sandboxed"
+msgid "Sandbox escape"
+msgstr "Fugida del nauc de sabla"
+
+#: src/gs-details-page.c:999 src/gs-update-dialog.c:104
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Se pòt escapar del nauc de sabla e contornar d’autras restriccions"
+
+#: src/gs-details-page.c:1014
+#| msgid "The application list is already loaded."
+msgid "This application is fully sandboxed."
+msgstr "L’aplicacion s’executa dins un nauc de sabla."
+
+#: src/gs-details-page.c:1022
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Impossible de determinar a quina partida del sistèma aquesta aplicacion a "
+"accès. Es tipic de las aplicacions ancianas."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1181
+msgctxt "version"
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1194
+msgctxt "updated"
+msgid "Never"
+msgstr "Pas jamai"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1247
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#: src/gs-details-page.c:1300
+msgid "Low"
+msgstr "Bassas"
+
+#: src/gs-details-page.c:1302
+#| msgctxt "Menu subcategory of Education"
+#| msgid "Medical"
+msgid "Medium"
+msgstr "Intermediàrias"
+
+#: src/gs-details-page.c:1304
+msgid "High"
+msgstr "Elevadas"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1306 src/gs-details-page.ui:997 src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1642
+msgid "You need internet access to write a review"
+msgstr "Un accès a Internet es indispensable per redigir una evaluacion"
+
+#: src/gs-details-page.c:1828 src/gs-details-page.c:1844
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Impossible de trobar « %s »"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2407
+msgid "Public domain"
+msgstr "Domeni public"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2410
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://oc.wikipedia.org/wiki/Domeni_public"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2417
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2427 src/gs-details-page.ui:1241
+msgid "Free Software"
+msgstr "Logicials"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2484
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Los utilizaires son tenguts al respècte d'aquesta licéncia :"
+msgstr[1] "Los utilizaires son tenguts al respècte d'aquestas licéncias :"
+
+#: src/gs-details-page.c:2511 src/gs-details-page.ui:1313
+msgid "More information"
+msgstr "Mai d'informacions"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pagina de las descripcions"
+
+#: src/gs-details-page.ui:214
+#| msgid "_Download"
+msgid "Downloading"
+msgstr "Telecargament"
+
+#: src/gs-details-page.ui:243 src/gs-editor.c:729 src/gs-editor.c:762
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "A_nullar"
+
+#: src/gs-details-page.ui:253
+msgid "_Update"
+msgstr "Me_sas a jorn"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:269
+msgid "_Add shortcut"
+msgstr "_Apondre un acorchi"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:283
+msgid "Re_move shortcut"
+msgstr "Suprimir la font"
+
+#: src/gs-details-page.ui:357
+msgid "No screenshot provided"
+msgstr "Cap de captura d'ecran pas provesida"
+
+#: src/gs-details-page.ui:377
+msgid "Software Repository Included"
+msgstr "Depaus de logicials inclús"
+
+#: src/gs-details-page.ui:378
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Aquesta aplicacion inclutz un depaus de logicials que provesís las mesas a "
+"jorn e tanben l’accès a d’autres programas."
+
+#: src/gs-details-page.ui:385
+msgid "No Software Repository Included"
+msgstr "Pas cap de depaus de logicials inclús"
+
+#: src/gs-details-page.ui:386
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Aquesta aplicacion inclutz pas cap de depaus de logicials. Serà pas mesa a "
+"jorn cap a de novèlas versions."
+
+#: src/gs-details-page.ui:394
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Aquesta aplicacion fa ja partida de vòstra distribucion e deuriá pas èsser "
+"remplaçada."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:401
+msgid "Software Repository Identified"
+msgstr "Depaus de logicials identificat"
+
+#: src/gs-details-page.ui:402
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Apondre aqueste depaus de logicials vos dona accès a de logicials "
+"suplementaris e tanben las mesas al nivèl."
+
+#: src/gs-details-page.ui:403
+msgid "Only use software repositories that you trust."
+msgstr "Utilizetz sonque los depauses de logicials que vos i fisatz."
+
+#: src/gs-details-page.ui:413
+msgid "_Website"
+msgstr "Site _Web"
+
+#: src/gs-details-page.ui:422
+msgid "_Donate"
+msgstr "Far un _don"
+
+#: src/gs-details-page.ui:532
+msgid "Localized in your Language"
+msgstr "Localizat dins vòstra lenga"
+
+#: src/gs-details-page.ui:543
+msgid "Documentation"
+msgstr "Documentacion"
+
+#: src/gs-details-page.ui:554
+msgid "Release Activity"
+msgstr "Activitat de publicacion"
+
+#: src/gs-details-page.ui:565
+msgid "System Integration"
+msgstr "Integracion sistèma"
+
+#: src/gs-details-page.ui:576
+msgid "Sandboxed"
+msgstr "Dins un nauc de sabla"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:596 src/gs-origin-popover-row.c:102
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:632 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:668
+msgid "Age Rating"
+msgstr "Evaluacion per edat"
+
+#: src/gs-details-page.ui:706 src/gs-details-page.ui:1399
+#| msgid "Version"
+msgid "Permissions"
+msgstr "Permissions"
+
+#: src/gs-details-page.ui:744
+msgid "Updated"
+msgstr "Mes a jorn"
+
+#: src/gs-details-page.ui:778
+msgid "Category"
+msgstr "Categoria"
+
+#: src/gs-details-page.ui:815
+msgid "Installed Size"
+msgstr "Pagina installada"
+
+#: src/gs-details-page.ui:846
+msgid "Download Size"
+msgstr "_Telecargar"
+
+#: src/gs-details-page.ui:908
+msgid "Developer"
+msgstr "Desvolopaire"
+
+#: src/gs-details-page.ui:954
+msgid "License"
+msgstr "Licéncia"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:973
+msgid "Free"
+msgstr "Liure"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:985
+msgid "Proprietary"
+msgstr "Proprietari"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1035 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:317
+msgid "Add-ons"
+msgstr "Extensions"
+
+#: src/gs-details-page.ui:1047
+msgid "Selected add-ons will be installed with the application."
+msgstr "Las extensions seleccionadas seràn installadas amb l'aplicacion."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1085
+msgid "Reviews"
+msgstr "Avaloracions"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1103
+msgid "_Write a Review"
+msgstr "_Redigir una avaloracion"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1124
+msgid "_Show More"
+msgstr "A_fichar mai"
+
+#: src/gs-details-page.ui:1252
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Aquò significa que lo logicial pòt èsser liurament utilizat, copiat, "
+"distribuit, estudiat e modificat."
+
+#: src/gs-details-page.ui:1292
+msgid "Proprietary Software"
+msgstr "Logicial proprietari"
+
+#: src/gs-details-page.ui:1303
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Aquò significa que lo logicial es la proprietat d'una persona fisica e "
+"morala. Son utilizacion es lo mai sovent restrenta e son còdi font de "
+"costuma inaccessible."
+
+#: src/gs-details-page.ui:1335
+msgid "Unknown Software License"
+msgstr "Licéncia del logicial desconeguda"
+
+#: src/gs-details-page.ui:1346
+msgid "The license terms of this software are unknown."
+msgstr "Los tèrmes de la licéncia d'aqueste logicial son desconeguts."
+
+#: src/gs-details-page.ui:1366
+msgid "The application was rated this way because it features:"
+msgstr "L'aplicacion es estada avalorada atal perque representa :"
+
+#: src/gs-details-page.ui:1380
+msgid "No details were available for this rating."
+msgstr "Cap d'informacion es pas disponibla per aquesta avaloracion"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:152
+#| msgid "Failed to load image"
+msgid "Failed to load components"
+msgstr "Fracàs de cargament de components"
+
+#: src/gs-editor.c:378
+msgid "CSS validated OK!"
+msgstr "Lo CSS es estat validat confòrme !"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:645 src/gs-editor.c:660
+msgid "Failed to load file"
+msgstr "Fracàs de cargament del fichièr"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:704 src/gs-editor.c:1052
+msgid "Unsaved changes"
+msgstr "Modificacions non enregistradas"
+
+#: src/gs-editor.c:706
+msgid "The application list is already loaded."
+msgstr "La lista d’aplicacions es ja cargada."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:710
+msgid "Merge documents"
+msgstr "Fusionar los documents"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:714 src/gs-editor.c:1057
+msgid "Throw away changes"
+msgstr "Abandonar las modificacions"
+
+#. import the new file
+#: src/gs-editor.c:726
+msgid "Open AppStream File"
+msgstr "Dobrir lo fichièr AppStream"
+
+#: src/gs-editor.c:730
+msgid "_Open"
+msgstr "_Dobrir"
+
+#: src/gs-editor.c:759
+#| msgid "Open AppStream File"
+msgid "Save AppStream File"
+msgstr "Enregistrar lo fichièr AppStream"
+
+#: src/gs-editor.c:763
+msgid "_Save"
+msgstr "_Enregistrar"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:784
+msgid "Failed to save file"
+msgstr "Fracàs d’enregistrament del fichièr"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:854
+#, c-format
+msgid "%s banner design deleted."
+msgstr "Lo dessenh de la bandièra de %s es suprimit."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:857
+msgid "Banner design deleted."
+msgstr "Lo dessenh de la bandièra es suprimit."
+
+#: src/gs-editor.c:1054
+msgid "The application list has unsaved changes."
+msgstr "La lista d’aplicacions compòrta de modificacions non enregistradas."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1285
+msgid "Use verbose logging"
+msgstr "Afichar las informacions detalhadas de desbugatge"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1293
+msgid "GNOME Software Banner Designer"
+msgstr "Conceptor de la bandièra « Logicials de GNOME »"
+
+#: src/gs-editor.ui:53 src/gs-editor.ui:62
+msgid "No Designs"
+msgstr "Pas cap de dessenh"
+
+#: src/gs-editor.ui:137
+msgid "Error message here"
+msgstr "Messatge d’error aicí"
+
+#: src/gs-editor.ui:196
+msgid "App ID"
+msgstr "Identificant de l’aplicacion"
+
+#: src/gs-editor.ui:253 src/gs-review-dialog.ui:109
+msgid "Summary"
+msgstr "Resumit"
+
+#: src/gs-editor.ui:278
+msgid "Editor’s Pick"
+msgstr "Seleccion de la distribucion"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:287
+msgid "Category Featured"
+msgstr "Mesa en avant de la categoria"
+
+#. button in the info bar
+#: src/gs-editor.ui:336
+msgid "Undo"
+msgstr "Anullar"
+
+#: src/gs-editor.ui:371 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Conceptor de la bandièra"
+
+#: src/gs-editor.ui:392
+msgid "New Banner"
+msgstr "Novèla bandièra"
+
+#: src/gs-editor.ui:452
+msgid "Import from file"
+msgstr "Importar dempuèi lo fichièr"
+
+#: src/gs-editor.ui:461
+msgid "Export to file"
+msgstr "Exportar cap al fichièr"
+
+#: src/gs-editor.ui:470
+msgid "Delete Design"
+msgstr "Suprimir lo dessenh"
+
+#: src/gs-editor.ui:491
+msgid "Featured App"
+msgstr "Aplicacion mesa en avant"
+
+#: src/gs-editor.ui:500
+msgid "OS Upgrade"
+msgstr "Mesas al nivèl del sistèma operatiu"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:133
+msgid " and "
+msgstr " e "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:136
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:162
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Poliça disponibla per l'escript en %s"
+msgstr[1] "Poliças disponiblas per l'escript en %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:170
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Logicial disponible per %s"
+msgstr[1] "Logicials disponibles per %s"
+
+#: src/gs-extras-page.c:212
+msgid "Unable to Find Requested Software"
+msgstr "Impossible de trobar lo logicial demandat"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:317
+#, c-format
+msgid "%s not found"
+msgstr "%s son introbables"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:321
+msgid "on the website"
+msgstr "sul site Web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Cap d'aplicacion pas disponibla per provesir lo fichièr %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:332 src/gs-extras-page.c:343 src/gs-extras-page.c:354
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"D'informacions sus %s, e tanben d'opcions sul biais d'obténer las "
+"aplicacions mancantas son disponiblas sus %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339 src/gs-extras-page.c:361
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Cap d'aplicacion pas disponibla per prene en carga %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350
+#, c-format
+msgid "%s is not available."
+msgstr "%s es indisponible."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"D'informacions sus %s, e tanben d'opcions sul biais d'obténer una aplicacion "
+"susceptibla de prene en carga aqueste format son disponiblas sus %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:372
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Cap de poliça d'extension es pas disponibla per prene en carga %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"D'informacions sus %s, e tanben d'opcions sul biais d'obténer de poliças "
+"suplementàrias son disponiblas sus %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Cap de codec al format %s es pas disponible per l'extension."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"D'informacions sus %s, e tanben d'opcions sul biais d'obténer un codec "
+"susceptible de legir aqueste format son disponiblas sus %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Cap de ressorsa per plasma es pas disponibla per prene en carga %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"D'informacions sus %s, e tanben d'opcions sul biais d'obténer de ressorsas "
+"suplementàrias per plasma son disponiblas sus %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Cap de pilòt d'imprimenta es pas disponible per %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"D'informacions sus %s, e tanben d'opcions sul biais d'obténer un pilòt "
+"susceptible de prene en carga aquesta imprimenta son disponiblas sus %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:453
+msgid "this website"
+msgstr "aqueste site Web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:457
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Malurosament, lo %s que recercatz es introbable. Consultatz %s per mai "
+"d'informacions."
+msgstr[1] ""
+"Malurosament, los %s que recercatz son introbables. Consultatz %s per mai "
+"d'informacions."
+
+#: src/gs-extras-page.c:525 src/gs-extras-page.c:581 src/gs-extras-page.c:620
+msgid "Failed to find any search results"
+msgstr "Fracàs de la recèrca, pas cap de resultat"
+
+#: src/gs-extras-page.c:808
+#, c-format
+msgid "%s file format"
+msgstr "Format de fichièr %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Pagina de Codecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Benvenguda"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Benvenguda dins Logicials"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Logicials vos permet d'installar totas las aplicacions que n'avètz besonh a "
+"partir d'un sol endreit. Consultatz nòstras recomandacions, las categorias, "
+"e recercatz las aplicacions que vos interèssan."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Anam far las crompas"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:367
+msgid "Spacing"
+msgstr "Espaçament"
+
+#: src/gs-hiding-box.c:368
+msgid "The amount of space between children"
+msgstr "L'espaçament entre elements enfants"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr "Suprimida"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "Mesa a jorn"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Desconeguda"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Istoric"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicacions sistèma"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Pagina installada"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr "Telecargament del catalòg de logicials en cors"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Pagina de Codecs"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Mesa en plaça de las mesas a jorn en cors…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderar la pagina"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "I a pas d'avaloracion a moderar"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:83
+#| msgid "System"
+msgid "system"
+msgstr "sistèma"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:86
+msgid "user"
+msgstr "utilizaire"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:107 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Branca"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+#| msgid "Installing"
+msgid "Installation"
+msgstr "Installacion"
+
+#. add button
+#: src/gs-overview-page.c:312
+msgid "More…"
+msgstr "Mai…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:562
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicacions àudio e vidèo recomandadas"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:567
+msgid "Recommended Games"
+msgstr "Jòcs recomandats"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:572
+msgid "Recommended Graphics Applications"
+msgstr "Aplicacions de dessenh recomandadas"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:577
+msgid "Recommended Productivity Applications"
+msgstr "Aplicacions de burotica recomandadas"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:925 src/gs-repos-dialog.c:822
+msgid "Access additional software from selected third party sources."
+msgstr "Accedir a mai de logicials a partir de fonts tèrças."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:929 src/gs-repos-dialog.c:826
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Certans d'aqueles logicials son proprietaris e compòrtan de restriccions a "
+"prepaus de l’utilizacion, lo partiment e l’accès al còdi font."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:934 src/gs-repos-dialog.c:831
+msgid "Find out more…"
+msgstr "Ne saber mai…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:942 src/gs-repos-dialog.c:239
+msgid "Enable"
+msgstr "Activar"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Apercebut de la pagina"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Activar los depauses logicials tèrces ?"
+
+#: src/gs-overview-page.ui:83
+#| msgid "Featured Application"
+msgid "Featured Applications"
+msgstr "Aplicacions mesas en avant"
+
+#: src/gs-overview-page.ui:116
+msgid "Previous"
+msgstr "Precedent"
+
+#: src/gs-overview-page.ui:141
+msgid "Next"
+msgstr "Seguent"
+
+#: src/gs-overview-page.ui:163
+msgid "Categories"
+msgstr "Categorias"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:193
+msgid "Editor’s Picks"
+msgstr "Seleccion de la distribucion"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:219
+msgid "Recent Releases"
+msgstr "Versions recentas"
+
+#: src/gs-overview-page.ui:289
+msgid "No Application Data Found"
+msgstr "Cap de donada d'aplicacion pas trobada"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:264
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparar %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:401
+#, c-format, c-format
+#| msgid "Are you sure you want to remove the %s source?"
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Sètz segur que volètz suprimir lo depaus %s ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:405
+#, c-format, c-format
+#| msgid ""
+#| "All applications from %s will be removed, and you will have to re-install "
+#| "the source to use them again."
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Totas las aplicacions de %s seràn suprimidas e la vos caldrà reïnstallar per "
+"poder utilizar aquestes logicials tornamai."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:413
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Sètz segur que volètz suprimir %s ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:416
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s va èsser suprimida e la vos caldrà reïnstallar per la poder utilizar "
+"tornamai."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:52 src/gs-summary-tile.c:96
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (installada)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferéncias de mesa a jorn"
+
+#: src/gs-prefs-dialog.ui:43
+#| msgid "Application Updates"
+msgid "Automatic Updates"
+msgstr "Mesas a jorn automaticas"
+
+#: src/gs-prefs-dialog.ui:70
+#| msgid "Whether to automatically refresh when on a metered connection"
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Las mesas a jorn automaticas son desactivadas sus las connexions mobilas o "
+"amb quòtas."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificacions de mesa a jorn automatica"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Afichar de notificacions quand de mesas a jorn son estadas installadas "
+"automaticament."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:113
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Certans logicials actualament installats son incompatibles amb %s. Se "
+"contunhatz, los que son listats çaijós seràn automaticament suprimits "
+"pendent la mesa al nivèl :"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Logicial incompatible"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Contunhar"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:96
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicacion installada"
+msgstr[1] "%u aplicacions installadas"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:103
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u extension installada"
+msgstr[1] "%u extensions installadas"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:111
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicacion"
+msgstr[1] "%u aplicacions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u extension"
+msgstr[1] "%u extensions"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:124
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s e %s installada"
+msgstr[1] "%s e %s installadas"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:299
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Suprimir « %s » ?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:304
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Desactivar « %s » ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:308
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Lo logicial installat dempuèi aqueste depaus aurà pas pus cap de mesa a jorn "
+"inclusa de seguretat."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:326
+msgid "Disable"
+msgstr "Desactivar"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:735
+msgid "the operating system"
+msgstr "lo sistèma operatiu"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:801 src/gs-repos-dialog.c:837
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Aquestes depauses complètan lo logicial per defaut provesit per %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:819
+msgid "Third Party Repositories"
+msgstr "Depauses tèrces"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Pas cap de depaus suplementari"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Activar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Suprimir…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Desactivar…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Activacion"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Desactivacion"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Activat"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Desactivat"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "Detèsti"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "Passable"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "Acceptable"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "M'agrada"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "Adòri"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr "Consacratz mai de temps a la redaccion de l'apreciacion"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr "Causissètz una apreciacion"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr "Lo resumit es tròp cort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr "Lo resumit es tròp long"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr "La descripcion es tròp corta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr "La descripcion es tròp longa"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Mandar l'apreciacion"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Mandar"
+
+#: src/gs-review-dialog.ui:119
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Donatz un brèu resumit de vòstra apreciacion, coma : « Aplicacion geniala, "
+"recomandi »."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:144
+msgctxt "app review"
+msgid "Review"
+msgstr "Repassar"
+
+#: src/gs-review-dialog.ui:154
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Qué pensatz de l'aplicacion ? Argumentatz vòstres motius."
+
+#: src/gs-review-dialog.ui:186
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Trobaretz la lista de las donadas transmesas dins nòstra <a href=\""
+"https://odrs.gnome.org/privacy\">politica de confidencialitat</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "total de las evaluacions"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:220
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Podètz senhalar las apreciacions abusivas, insultantas, e discriminantas."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:225
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Un còp mandada, l'apreciacion serà amagada fins al moment qu'aquela serà "
+"estada verificada per un administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:239
+msgid "Report Review?"
+msgstr "Senhalar un abús ?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:243
+msgid "Report"
+msgstr "Senhalar"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Aquesta apreciacion vos es estada utila ?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Òc"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Non"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Bòf"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Senhalar…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Suprimir"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr "Captura d'ecran introbabla"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr "Fracàs de cargament de l'imatge"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:381
+msgid "Screenshot size not found"
+msgstr "Talha de captura d'ecran introbabla"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:411
+msgid "Could not create cache"
+msgstr "Impossible de crear lo cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:471
+msgid "Screenshot not valid"
+msgstr "Captura d'ecran invalida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:486
+msgid "Screenshot not available"
+msgstr "Captura d'ecran indisponibla"
+
+#: src/gs-screenshot-image.c:544
+msgid "Screenshot"
+msgstr "Captura d'ecran"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:142
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "mai %u correspondéncia"
+msgstr[1] "mai %u correspondéncias"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Pagina de recèrca"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Cap d'aplicacion pas trobada"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:871 src/gs-shell.c:876 src/gs-shell.c:891 src/gs-shell.c:895
+#, c-format
+msgid "“%s”"
+msgstr "« %s »"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:942
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Impossible de telecargar las mesas a jorn del micrologicial dempuèi %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:948
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Impossible de telecargar las mesas a jorn dempuèi %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955 src/gs-shell.c:1000
+msgid "Unable to download updates"
+msgstr "Impossible de telecargar las mesas a jorn"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:961
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Impossible de telecargar las mesas a jorn : l'accès a Internet èra necessari "
+"mas indisponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:970
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Impossible de telecargar las mesas a jorn dempuèi %s : espaci de disc "
+"insufisent"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:975
+msgid "Unable to download updates: not enough disk space"
+msgstr "Impossible de telecargar las mesas a jorn : espaci de disc insufisent"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:982
+msgid "Unable to download updates: authentication was required"
+msgstr "Impossible de telecargar las mesas a jorn : autentificacion requesida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:987
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Impossible de telecargar las mesas a jorn : autentificacion invalida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:992
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Impossible de telecargar las mesas a jorn : avètz pas la permission "
+"d'installar de logicials"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1003
+msgid "Unable to get list of updates"
+msgstr "Impossible d'obténer la lista de las mesas a jorn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1046
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Impossible d'installar %s : lo telecargament dempuèi %s a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1052
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Impossible d'installar %s : lo telecargament a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1065
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Impossible d'installar %s : l'environament d'execucion %s es pas disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1071
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Impossible d'installar %s : es pas pres en carga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1078
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Installacion impossibla : l'accès a Internet es necessari mas indisponible"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1084
+msgid "Unable to install: the application has an invalid format"
+msgstr "Installacion impossibla : lo format de l'aplicacion es pas valid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1089
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Impossible d'installar %s : i a pas pro d'espaci de disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1096
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Impossible d'installar %s : autentificacion requesida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1103
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Impossible d'installar %s : autentificacion invalida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1110
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Impossible d'installar %s : avètz pas la permission d'installar de logicials"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1118
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Impossible d'installar %s : brancatz lo sector"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1125
+#, c-format, c-format
+#| msgid "Unable to install %s: AC power is required"
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Impossible d’installar %s : la batariá es pas pro cargada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1134
+#, c-format
+msgid "Unable to install %s"
+msgstr "Impossible d'installar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1181
+#, c-format, c-format
+#| msgid "Unable to update %s as download failed"
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Impossible de metre a jorn %s dempuèi %s, perque lo telecargament a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Impossible de metre a jorn %s : lo telecargament a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1195
+#, c-format, c-format
+#| msgid "Unable to install %s as download failed"
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Impossible d’installar las mesas a jorn dempuèi %s, perque lo telecargament "
+"a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1199
+#, c-format, c-format
+#| msgid "Unable to install %s as download failed"
+msgid "Unable to install updates as download failed"
+msgstr ""
+"Impossible d’installar las mesas a jorn, perque lo telecargament a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1205
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Impossible de metre a jorn : l'accès a Internet es necessari mas indisponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1215
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Impossible de metre a jorn %s : i a pas pro d'espaci de disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1220
+#, c-format, c-format
+#| msgid "Unable to install %s: not enough disk space"
+msgid "Unable to install updates: not enough disk space"
+msgstr "Impossible d’installar las mesas a jorn : espaci de disc insufisent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1230
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Impossible de metre a jorn %s : autentificacion requesida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1235
+#, c-format, c-format
+#| msgid "Unable to install %s: authentication was required"
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+"Impossible d’installar las mesas a jorn : una autentificacion èra requesida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1244
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Impossible de metre a jorn %s : autentificacion invalida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1249
+#, c-format, c-format
+#| msgid "Unable to install %s: authentication was invalid"
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Impossible d’installar las mesas a jorn : l’autentificacion èra pas valida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1258
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Impossible de metre a jorn %s : avètz pas la permission de metre a jorn los "
+"logicials"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1264
+#, c-format, c-format
+#| msgid "Unable to update %s: you do not have permission to update software"
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Impossible d’installar las mesas a jorn : avètz pas la permission de metre a "
+"jorn los logicials"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1274
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Impossible de metre a jorn %s : brancatz lo sector"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1280
+#, c-format, c-format
+#| msgid "Unable to install %s: AC power is required"
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Impossible d’installar las mesas a jorn : brancatz l’alimentacion sector"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1289
+#, c-format, c-format
+#| msgid "Unable to update %s: AC power is required"
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Impossible de metre a jorn %s : la batariá es pas pro cargada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1295
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Impossible d’installar las mesas a jorn : la batariá es pas pro cargada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1306
+#, c-format
+msgid "Unable to update %s"
+msgstr "Impossible de metre a jorn %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1309
+#, c-format, c-format
+#| msgid "Unable to install %s"
+msgid "Unable to install updates"
+msgstr "Impossible d’installar las mesas a jorn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1352
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Impossible de metre a nivèl cap a %s dempuèi %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1357
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Impossible de metre a nivèl cap a %s : lo telecargament a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1366
+#, c-format, c-format
+#| msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Impossible de metre a nivèl cap a %s : l’accès a Internet èra necessari mas "
+"èra pas disponible"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1375
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Impossible de metre a nivèl cap a %s : espaci de disc insufisent"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1383
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Impossible de metre a nivèl cap a %s : autentificacion requesida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1390
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Impossible de metre a nivèl cap a %s : autentificacion invalida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1397
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Impossible de metre a nivèl cap a %s : avètz pas la permission d'efectuar la "
+"mesa a nivèl"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1404
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Impossible de metre a nivèl cap a %s : brancatz lo sector"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1411
+#, c-format, c-format
+#| msgid "Unable to upgrade to %s: AC power is required"
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Impossible de metre a nivèl cap a %s : la batariá es pas pro cargada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1420
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Impossible de metre a nivèl cap a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1458
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Impossible de desinstallar %s : autentificacion requesida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1464
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Impossible de desinstallar %s : autentificacion invalida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Impossible de desinstallar %s : avètz pas la permission de desinstallar lo "
+"logicial"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1477
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Impossible de desinstallar %s : brancatz lo sector"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format, c-format
+#| msgid "Unable to remove %s: you do not have permission to remove software"
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Impossible de desinstallar %s : la batariá es pas pro cargada"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1496
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Impossible de desinstallar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1539
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Impossible de lancer %s : %s es pas installat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1546 src/gs-shell.c:1597 src/gs-shell.c:1638
+#: src/gs-shell.c:1686
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Espaci de disc insufisent — liberatz-ne e ensajatz tornarmai"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1557 src/gs-shell.c:1608 src/gs-shell.c:1649
+#: src/gs-shell.c:1720
+msgid "Sorry, something went wrong"
+msgstr "O planhèm, quicòm a pas foncionat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1589
+#| msgid "Unable to install %s as not supported"
+msgid "Failed to install file: not supported"
+msgstr "Impossible d’installar lo fichièr : es pas pres en carga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1593
+msgid "Failed to install file: authentication failed"
+msgstr "Impossible d'installar lo fichièr : l'autentificacion a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1630
+#| msgid "Unable to install %s as not supported"
+msgid "Failed to install: not supported"
+msgstr "Impossible d’installar : pas pres en carga"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1634
+#| msgid "Failed to install file: authentication failed"
+msgid "Failed to install: authentication failed"
+msgstr "Impossible d’installar : l’autentificacion a fracassat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1680
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Impossible de contactar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1695
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s deu èsser reaviat per utilizar los novèls empeutons."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1700
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Aquesta aplicacion deu èsser raviada per utilizar los novèls empeutons."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1707
+msgid "AC power is required"
+msgstr "Brancatz lo sector"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1711
+#| msgid "The summary is too long"
+msgid "The battery level is too low"
+msgstr "La batariá es pas pro cargada"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "Font : %s"
+
+#: src/gs-summary-tile.c:101
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (installacion en cors)"
+
+#: src/gs-summary-tile.c:106
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (supression en cors)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr "Suprimir _tot"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:187
+msgid "No update description available."
+msgstr "Cap de descripcion de la mesa a jorn es pas estada provesida."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:291
+#, c-format
+msgid "Installed on %s"
+msgstr "Installadas sus %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:311
+msgid "Installed Updates"
+msgstr "Mesas a jorn installadas"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:527
+msgid "Additions"
+msgstr "Apondons"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:531
+msgid "Removals"
+msgstr "Supressions"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:535
+msgid "Updates"
+msgstr "Mesas a jorn"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:539
+msgid "Downgrades"
+msgstr "Degradacions"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Cap de logicial pas installat dempuèi aquesta font"
+
+#: src/gs-update-monitor.c:107
+msgid "Security Updates Pending"
+msgstr "Mesas a jorn de seguretat en espèra"
+
+#: src/gs-update-monitor.c:108
+msgid "It is recommended that you install important updates now"
+msgstr "Es recomandat d'installar las mesas a jorn importantas ara"
+
+#: src/gs-update-monitor.c:111
+msgid "Restart & Install"
+msgstr "Reaviar e _installar"
+
+#: src/gs-update-monitor.c:115
+msgid "Software Updates Available"
+msgstr "De mesas a jorn logicialas son disponiblas"
+
+#: src/gs-update-monitor.c:116
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"D'importantas mesas a jorn del sistèma operatiu e d'aplicacions son prèstas "
+"a èsser installadas."
+
+#: src/gs-update-monitor.c:120
+msgid "View"
+msgstr "Afichar"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:228
+#, c-format, c-format
+#| msgid "Application Updates"
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicacion mesa a jorn — Reaviada requesida"
+msgstr[1] "%u aplicacions mesas a jorn — Reaviada requesida"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:234
+#, c-format, c-format
+#| msgid "Application Updates"
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicacion mesa a jorn"
+msgstr[1] "%u aplicacions mesas a jorn"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:245
+#, c-format, c-format
+#| msgid "Your %s account has been suspended."
+msgid "%s has been updated."
+msgstr "%s es estada mesa a jorn."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:248
+#| msgid "Featured Application"
+msgid "Please restart the application."
+msgstr "Reaviatz l’aplicacion."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:256
+#, c-format, c-format
+#| msgid "Your %s account has been suspended."
+msgid "%s and %s have been updated."
+msgstr "%s e %s son estadas mesas a jorn."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:262 src/gs-update-monitor.c:281
+#, c-format, c-format
+#| msgid "%u application installed"
+#| msgid_plural "%u applications installed"
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicacion necessita una reaviada."
+msgstr[1] "%u aplicacions necessitan una reaviada."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:274
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inclutz %s, %s e %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:515 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Las mesas a jorn del sistèma operatiu son indisponiblas"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:517
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Metètz al nivèl per contunhar de beneficiar de las mesas a jorn de seguretat."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:572
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Una novèla version de %s es disponibla a l'installacion"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:576
+msgid "Software Upgrade Available"
+msgstr "De mesas a jorn logicialas son disponiblas"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:965
+msgid "Software Updates Failed"
+msgstr "Fracàs de las mesas a jorn logicialas"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:967
+msgid "An important OS update failed to be installed."
+msgstr ""
+"Fracàs d'installacion d'una importanta mesa a jorn del sistèma operatiu."
+
+#: src/gs-update-monitor.c:968
+msgid "Show Details"
+msgstr "Afichar los detalhs"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:991
+msgid "System Upgrade Complete"
+msgstr "Mesa al nivèl sistèma acabada"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:996
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Benvenguda dins %s %s !"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1002
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Mesa a jorn logiciala installada"
+msgstr[1] "Mesas a jorn logicialas installadas"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Una importanta mesa a jorn del sistèma operatiu es estada installada."
+msgstr[1] ""
+"D'importantas mesas a jorn del sistèma operatiu son estadas installadas."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1017
+msgctxt "updates"
+msgid "Review"
+msgstr "Passar en revista"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1065
+msgid "Failed To Update"
+msgstr "Fracàs de mesa a jorn"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1071
+msgid "The system was already up to date."
+msgstr "Lo sistèma èra ja a jorn."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1076
+msgid "The update was cancelled."
+msgstr "La mesa a jorn es estada anullada."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1082
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"L'accès a Internet es necessari mas es pas disponible. Asseguratz-vos "
+"qu'avètz un accès a Internet puèi ensajatz tornarmai."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1088
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"I a agut un problèma de seguretat amb la mesa a jorn. Consultatz vòstre "
+"provesidor de logicial per mai d'informacions."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1094
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "I aviá pas pro d'espaci de disc. Liberatz-ne e ensajatz tornarmai."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1099
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"O planhèm : l'installacion de la mesa a jorn a fracassat. Esperatz la mesa a "
+"jorn que ven e ensajatz tornarmai. Se lo problèma contunha, contactatz "
+"vòstre provesidor de logicials."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "Ièr, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "Ièr, %l:%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "I a dos jorns"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "I a tres jorns"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "I a quatre jorns"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "I a cinc jorns"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "I a sièis jorns"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "I a una setmana"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "I a doas setmanas"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr "Recèrca de novèlas mesas a jorn…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr "Mesa en plaça de las mesas a jorn en cors…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr "(Aquò pòt prene de temps)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr "Darrièra verificacion : %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s es pas mai pres en carga."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr "Vòstre sistèma operatiu es pas mai pres en carga."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr "Aquò significa que recep pas mai de mesas a jorn de seguretat."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Es recomandat de metre al nivèl cap a una version mai recenta."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+#| msgid "Charges may apply"
+msgid "Charges May Apply"
+msgstr "I pòt aver facturacion"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Recercar de mesas a jorn amb vòstra connexion mobila pòt far l'objècte d'una "
+"facturacion."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+#| msgid "Check Anyway"
+msgid "Check _Anyway"
+msgstr "Recercar malgrat tot"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "Pas cap de ret"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr "L'accès a Internet es necessari per recercar de mesas a jorn."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1340
+#| msgid "Checking for updates…"
+msgid "Checking…"
+msgstr "Verificacion…"
+
+#: src/gs-updates-page.c:1353
+msgid "Check for updates"
+msgstr "Recercar de mesas a jorn"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Pagina de las mesas a jorn"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Los logicials son a jorn"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Recercar de mesas a jorn amb vòstre telefòn portable vos pòt èsser facturat."
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Recercar malgrat tot"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Se connectar per recercar de mesas a jorn"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Paramètres de la _ret"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Las mesas a jorn son geridas automaticament"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:274
+msgid "Restart & Update"
+msgstr "Reaviar e metre a jorn"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:280
+msgid "Update All"
+msgstr "Tot metre a jorn"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:411
+msgid "Integrated Firmware"
+msgstr "Micrologicial integrat"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:415
+msgid "Requires Restart"
+msgstr "Reaviada necessària"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:419
+msgid "Application Updates"
+msgstr "Mesas a jorn de l'aplicacion"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:423
+msgid "Device Firmware"
+msgstr "Micrologicial del periferic"
+
+#: src/gs-updates-section.c:451 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Telecargar"
+
+#: src/gs-upgrade-banner.c:64
+#| msgid "Restart Now"
+msgid "_Restart Now"
+msgstr "_Reaviar ara"
+
+#: src/gs-upgrade-banner.c:66
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Las mesas a jorn seràn aplicadas un còp l’ordenador reaviat."
+
+#: src/gs-upgrade-banner.c:72
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Es recomandat de salvar vòstras donadas e fichièrs abans la mesa al nivèl."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:87
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s es ara disponible"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:97
+#, c-format, c-format
+#| msgid "Downloading %s %s"
+msgid "Waiting to Download %s %s"
+msgstr "En espèra del telecargament de %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:107
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Telecargament de %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:118
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s e %s prèstes a èsser installadas"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Una mesa al nivèl màger, amb de novèlas foncionalitats e mai polida."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Ne saber mai"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Apondre, suprimir o metre a jorn d'aplicacions sus aqueste ordenador"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"mesas a jorn;mesa a nivèl;fonts;depauses;preferéncias;installar;desinstallar;"
+"programa;aplicacion;logicial;magazin;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "Concebre las melhoras bandièras per Logicials de GNOME"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "AppStream;Logicials;Aplicacions;"
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Creacions e modificacions àudio"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Lectors de musica"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Desbugadors"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "EDI"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Intelligéncia artificiala"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Quimia"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Lengas"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematicas"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotica"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Accion"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventura"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcada"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blòts"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Platèu"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartas"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulators"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Enfants"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logica"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Jòcs de ròtle"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Espòrts"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estrategia"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafisme en 3 dimensions"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scan"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Dessenh vectorial"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visionadors"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Agenda"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Basa de donadas"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finança"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Tractament de tèxte"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Poliças"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Fonts de picada"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Presa en carga lingüistica"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Extensions Shell"
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Regionalizacion"
+
+#: plugins/core/gs-desktop-common.c:212
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Pilòts material"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Discussion"
+
+#: plugins/core/gs-desktop-common.c:233
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nòvas"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navigadors Web"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editors de tèxte"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tot"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Mesas en avant"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Bendas dessenhadas"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficcion"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Santat"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Istòria"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estil de vida"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politica"
+
+#: plugins/core/gs-desktop-common.c:289
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Espòrts"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:299
+msgid "Audio & Video"
+msgstr "Àudio e vidèo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:302
+msgid "Developer Tools"
+msgstr "Aisinas de desvolopament"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:305
+msgid "Education & Science"
+msgstr "Educacion e sciéncias"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:308
+msgid "Games"
+msgstr "Jòcs"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:311
+msgid "Graphics & Photography"
+msgstr "Grafismes e fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:314
+msgid "Productivity"
+msgstr "Burotica"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:320
+msgid "Communication & News"
+msgstr "Comunicacion e nòvas"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:323
+msgid "Reference"
+msgstr "Referéncia"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:326
+msgid "Utilities"
+msgstr "Utilitaris"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "Mesas a jorn del sistèma operatiu"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclutz de melhoraments de performàncias, d'estabilitat e de seguretat."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr "Telecargament dels imatges meses en avant…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:561
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:564
+#| msgid "A major upgrade, with new features and added polish."
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Una mesa a jorn d’Endless OS, amb de novèlas foncionalitats e correccions."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:825
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"Lo servici de mesa a jorn d’Endless OS a pas pogut recuperar e aplicar la "
+"mesa a nivèl."
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Presa en carga de las aplicacions web"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Aviar d'aplicacions web dins un navigador"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:139
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+"Aisina d'installacion AppStream sus l'ensemble del sistèma de GNOME Logicials"
+
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "Failed to parse command line arguments"
+msgstr "Impossible d'analisar los arguments en linha de comanda"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:148
+msgid "You need to specify exactly one filename"
+msgstr "Vos cal especificar exactament un nom de fichièr"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:155
+msgid "This program can only be used by the root user"
+msgstr "Aqueste logicial pòt pas èsser utilizat que per l'utilizaire root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:163
+msgid "Failed to validate content type"
+msgstr "Impossible de validar lo tipe del contengut"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:173
+msgid "Failed to copy"
+msgstr "Impossible de copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:235
+msgid "Downloading extra metadata files…"
+msgstr "Telecargament de novèls fichièrs de metadonadas…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "Telecargament de las informacions de mesa al nivèl…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+#| msgid "Upgrade your Fedora system to the latest features and improvements."
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Mesa a nivèl per las darrièras foncionalitats e melhoraments d'estabilitat e "
+"de performàncias."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Presa en carga de Flatpak"
+
+# Je n'ai trouvé aucune traduction ja existante de Framework dans les modules ja traduits.
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak es un component logicial per las aplicacions de burèus Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:858
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Telecargament de las metadonadas de Flatpak per %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:134
+#, c-format
+msgid "%s Device"
+msgstr "Periferic « %s »"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:139
+#, c-format, c-format
+#| msgid "System"
+msgid "%s System"
+msgstr "Sistèma « %s »"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:144
+#, c-format
+msgid "%s Embedded Controller"
+msgstr "Controlador embarcat « %s »"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:149
+#, c-format
+msgid "%s ME"
+msgstr "Sistèma de gestion « %s »"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:154
+#, c-format
+msgid "%s Corporate ME"
+msgstr "Sistèma de gestion per entrepresas « %s »"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:159
+#, c-format
+msgid "%s Consumer ME"
+msgstr "Sistèma de gestion pel grand public « %s »"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:165
+#, c-format, c-format
+#| msgctxt "Menu subcategory of Development Tools"
+#| msgid "Revision Control"
+msgid "%s Controller"
+msgstr "Controlador « %s »"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:171
+#, c-format
+msgid "%s Thunderbolt Controller"
+msgstr "Controlador Thunderbolt « %s »"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:669
+msgid "Downloading firmware update signature…"
+msgstr "Telecargament de la signatura de la mesa a jorn del micrologicial…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:710
+msgid "Downloading firmware update metadata…"
+msgstr "Telecargament de las metadonadas de mesa a jorn del micrologicial…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Presa en carga de la mesa a jorn del micrologicial"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Provesís una presa en carga de las mesas a jorn del micrologicial"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:195
+msgid "Downloading application ratings…"
+msgstr "Telecargament de las apreciacions sus l’aplicacion…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Presa en carga d'Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ORDS es un servici que permet als utilizaires d'evaluar las aplicacions"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:74
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:150
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:910
+msgid "GNOME"
+msgstr "GNOME"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:406
+msgid "GNOME Shell Extensions Repository"
+msgstr "Depaus d’extensions GNOME Shell"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:806
+msgid "Downloading shell extension metadata…"
+msgstr "Telecargament de las metadonadas de l’extension shell…"
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:914
+#| msgctxt "Menu of Add-ons"
+#| msgid "Shell Extensions"
+msgid "GNOME Shell Extension"
+msgstr "Extensions GNOME Shell"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:190
+msgid "Snap Store"
+msgstr "Botiga dels snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+#| msgid "Snappy Support"
+msgid "Snap Support"
+msgstr "Presa en carga de Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un snap es un paquet logicial Linux universal"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Aficha l'interfàcia d'utilizaire de gestion dels dorsièrs"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Tot"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nom del dorsièr"
+
+#~ msgid "_Add"
+#~ msgstr "_Apondre"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Apondre al dorsièr Aplicacions"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Afichar las informacions de perfilatge del servici"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "Vos cal vos autentificar per contunhar."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Vos cal vos autentificar alprèp de %s per contunhar."
+
+#~ msgid "Email address"
+#~ msgstr "Adreça de corrièr electronic"
+
+#~ msgid "I have an account already"
+#~ msgstr "Ai ja un compte"
+
+#~ msgid "Password"
+#~ msgstr "Senhal"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Vòli enregistrar un compte ara"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Ai doblidat mon senhal"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "M'autentificar automaticament lo còp que ven"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Sasir vòstre còdi personal d'autentificacion d'usatge unic."
+
+#~ msgid "PIN"
+#~ msgstr "Còdi personal"
+
+#~ msgid "Authenticate"
+#~ msgstr "M’autentificar"
+
+#~ msgid "Continue"
+#~ msgstr "Contunhar"
+
+#~| msgid "Updated"
+#~ msgid "Top Rated"
+#~ msgstr "Las melhor notadas"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Clicatz suls elements per los seleccionar"
+
+#~ msgid "Select"
+#~ msgstr "Seleccionar"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Apondre al dorsièr…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Desplaçar cap a lo dorsièr…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Fracàs de las mesas a jorn logicialas"
+
+#~ msgid "_About"
+#~ msgstr "A _prepaus"
+
+#~ msgid "_Quit"
+#~ msgstr "_Quitar"
+
+#~| msgid "Are you sure you want to remove %s?"
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Sètz segur que volètz crompar %s ?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s va èsser installat e seretz facturat %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Crompar"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "D'informacions sus %s, e tanben de possibilitats d'obtencion d'un codec "
+#~ "capable de difusar aqueste format son disponiblas sul site Web."
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~| msgid "Unable to update %s: authentication was required"
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Impossible de metre a jorn %s : autentificacion requesida"
+
+#~| msgid "Unable to update %s: authentication was invalid"
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Impossible de metre a jorn %s : autentificacion invalida"
+
+#~| msgid "Unable to update %s: not enough disk space"
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Impossible de metre a jorn %s : i a pas pro d’espaci de disc"
+
+#~| msgid "Unable to update %s: authentication was required"
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Impossible de metre a jorn %s : autentificacion requesida"
+
+#~| msgid "Unable to update %s"
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Impossible de metre a jorn %s"
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Es impossible d'installar de logicials tant qu'aquò es pas resolgut."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "I a mai d'informacions aicí : %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Impossible de metre a jorn %s dempuèi %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Telecargament de novèlas mesas a jorn…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Reaviar e metre a jorn"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Tot metre a j_orn"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Reaviar e _installar"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~| msgid "Setting up updates…"
+#~ msgid "Getting runtime source…"
+#~ msgstr "Telecargament de las fonts dels environaments d’execucion…"
+
+#~| msgid "Downloading new updates…"
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Telecargament de la mesa a jorn del micrologicial…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Presa en carga de Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba permet als desvolopaires de crear aisidament d'aplicacions autonòmas"
+
+#~| msgid "Downloading new updates…"
+#~ msgid "Downloading application page…"
+#~ msgstr "Telecargament de la pagina de l’aplicacion…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Presa en carga de Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "L'ultima plataforma de divertiment de Valve"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr ""
+#~ "La lista de las fonts suplementàrias que son estadas activadas "
+#~ "precedentament"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "La lista de fonts que son estatdas activadas precedentament al moment de "
+#~ "l'installacion d'aplicacions tierces."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Afichar las logicials non-liures dins las résultats de recèrca"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Una lista de las fonts non-liuras que pòdon èsser activadas opcionalament"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "« %s » [%s]"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Provesís l'accès a de logicials suplementaris, dont de navigadors Web e "
+#~ "de jòcs."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Activar las fonts logicialas proprietàrias ?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Pas cap d'aplicacion e d'extension installada ; d'autres logicials o "
+#~ "poirián èsser"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "A generalament de restriccions a prepaus de l'utilizacion e l'accès al "
+#~ "còdi font."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Fonts logicialas proprietàrias"
+
+#~ msgid "Remove Source"
+#~ msgstr "Suprimir la font"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Las fonts de logicials pòdon èsser telecargadas dempuèi Internet. Vos "
+#~ "dònan accès a de logicials que son pas provesits per %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Suprimir una font suprimís tanben totes los logicials installats dempuèi "
+#~ "aquesta."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Cap de logicial pas installat dempuèi aquesta font"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Installats dempuèi aquesta font"
+
+#~ msgid "Source Details"
+#~ msgstr "Detalhs de la font"
+
+#~ msgid "Last Checked"
+#~ msgstr "Darrièra verificacion"
+
+#~ msgid "Added"
+#~ msgstr "Aponduda"
+
+#~ msgid "Website"
+#~ msgstr "Site Web"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Accions de jòc pré-définies entre jogaires sens possibilitat de discussion"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~| msgid "All"
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~ msgid "About Software"
+#~ msgstr "A prepaus de Logicials"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "« %s » es introuvable"
+
+#~ msgid "_Install All"
+#~ msgstr "_Installar"
+
+#~ msgid "Other Updates"
+#~ msgstr "Mesas a jorn del sistèma operatiu"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "L'installacion de %s a fracassat."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "La desinstallacion de %s a fracassat."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Asseguratz-vos d'avoir un accès a Internet puèi réessayez."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Liberatz-ne e ensajatz tornamai."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr ""
+#~ "Se lo problèma persistís, contactatz lo provesidor de vòstre logicial."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~| msgid "All"
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~| msgid "All"
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Tot"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Mesas en avant"
+
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Astronomy"
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Chemistry"
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Quimia"
+
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Math"
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematicas"
+
+#~ msgid "Science"
+#~ msgstr "Sciéncia"
+
+#~ msgid "3rd party"
+#~ msgstr "3ena part"
+
+#~ msgid "web app"
+#~ msgstr "Aplicacion Web"
+
+#~ msgid "nonfree"
+#~ msgstr "pas liure"
+
+#~ msgid "shell extension"
+#~ msgstr "extension shell"
+
+#~ msgid "_Installing"
+#~ msgstr "_Installacion en cors"
+
+#~ msgid "_Removing"
+#~ msgstr "_Supression en cors"
+
+#~ msgid " or "
+#~ msgstr " o "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Desconeguda"
+
+#~ msgid "non-free"
+#~ msgstr "pas liure"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicacions de burèu recomandadas"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr ""
+#~ "Las fonts de logicials vos donan accès a de logicials suplementaris."
+
+#~ msgid "One Star"
+#~ msgstr "Una estela"
+
+#~ msgid "Two Stars"
+#~ msgstr "Doas estelas"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tres estelas"
+
+#~ msgid "Four Stars"
+#~ msgstr "Quatre estelas"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinc estelas"
+
+#~ msgid "Audio"
+#~ msgstr "Àudio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Edicion"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Basa de donadas"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Gravadura"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Ràdio amator"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixatge"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Musica"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Enregistradors"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sequenciadors"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Receptors"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Construccion"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Bancas de donadas"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "EDI (Environaments de desvolopament integrats)"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Perfilatge"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Gestion de projècte"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traduccion"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Desvolopament Web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Informatica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Construccion"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Afichatge de donadas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Electricitat"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Electronica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Ingenhariá"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geosciéncia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Istòria"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Sciéncias umanas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Tractament d'imatges"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Musica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analisi numerica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Informatica en ret"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fisica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Tir"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulator"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Espòrts"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafisme"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Grafisme en 2 dimensions"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Reconeissença optica"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Edicion"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Dessenh matricial"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Accès telefonic"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Corrièr electronic"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Flux"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Transferiment de fichièrs"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ràdio amator"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Messatjariá instantanèa"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Clients de discussion per Internet (IRC)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Susvelhança"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "Par a per (P2P)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Accès a distància"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonia"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Desvolopament Web"
+
+#~ msgid "Office"
+#~ msgstr "Burèu"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafic"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Gestion dels contactes"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Diccionari"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Corrièr electronic"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Organigrama"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Assistent numeric personal (PDA)"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografia"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentacion"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Gestion de projècte"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Edicion"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Tablador"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visionador"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Art"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Intelligéncia artificiala"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Quimia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Informatica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Construccion"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Afichatge de donadas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Electricitat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Electronica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Ingenhariá"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geosciéncia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Istòria"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Sciéncias umanas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Tractament d'imatges"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Lengas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematicas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medecina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analisi numerica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Calcul parallèl"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fisica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Espòrts"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Gestionari de fichièrs"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Aisinas fichièrs"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Susvelhança"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Seguretat"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulator de terminal"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Accessibilitat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Archivatge"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calculadoiras"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Relòtges"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compression"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Aisinas fichièrs"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualitat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefonia"
+
+#~ msgid "Video"
+#~ msgstr "Vidèo"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Edicion"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Basa de donadas"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Gravadura"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Lectors"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Enregistradors"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Televisor"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Pas cap"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Calcul en cors…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Desconeguda"
+
+#~ msgid "_History"
+#~ msgstr "_Istoric"
+
+#~ msgid "Size"
+#~ msgstr "Talha"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Cap de donada AppStream pas trobada"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Passar en mòde servici GApplication"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Una mesa a jorn anteriora s'es pas acabada."
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "La signatura d'una mesa a jorn es incorrècta."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "La mesa a jorn a fracassat."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Una mesa a jorn fòra linha es estada demandada mas cap de paquet "
+#~ "necessita de mesa a jorn."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Mai de plaça disponibla sul disc."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Fracàs a l'installacion d'una mesa a jorn."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "La mesa a jorn fòra linha a fracassat d'un biais inesperat."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Aplicacion sus Internet unicament"
+
+#~ msgid "No sources found."
+#~ msgstr "Aucune source trobada."
+
+#~ msgid "OK"
+#~ msgstr "Valider"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i aplicacion e %i extension installada"
+#~ msgstr[1] "%i aplicacions e %i extensions installadas"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Definir lo nivèl de desbugatge especificat"
+
+#~ msgctxt "license"
+#~ msgid "Complicated!"
+#~ msgstr "Complicada !"
+
+#~ msgid "Picks"
+#~ msgstr "Recomandadas"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Mesas a jorn recentas d'aplicacions"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Supprimer du dossier"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "S’identifier / S’enregistrer"
+
+#~ msgid "Use"
+#~ msgstr "Utiliser"
+
+#~ msgid "Add another…"
+#~ msgstr "Ajouter un autre…"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Connecté en tant que %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Connexion…"
+
+#~ msgid "Sign out"
+#~ msgstr "Se déconnecter"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Vous devez vous utiliser un compte Ubuntu One pour continuer."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Vous devez utiliser votre compte Ubuntu One pour continuer."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Votre compte %s est suspendu."
+
+#~ msgid "Applications Updated"
+#~ msgstr "Applications mises à jour"
+
+#~ msgid "Includes: ."
+#~ msgstr "Cela inclut : ."
+
+#~ msgid "Restart Required"
+#~ msgstr "Redémarrage nécessaire"
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 0000000..cacc9c6
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,5760 @@
+# Punjabi translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# A S Alam <aalam@users.sf.net>, 2013, 2014, 2016, 2017, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2019-08-06 15:36+0000\n"
+"PO-Revision-Date: 2019-09-02 07:06-0700\n"
+"Last-Translator: A S Alam <alam.yellow@gmail.com>\n"
+"Language-Team: Punjabi <kde-i18n-doc@kde.org>\n"
+"Language: pa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 19.04.2\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "ਗਨੋਮ ਸਾਫਟਵੇਅਰ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "ਗਨੋਮ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਮੈਨੇਜਰ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"ਸਾਫਟਵੇਅਰ ਤੁਹਾਨੂੰ ਨਵੇਂ ਐਪਲੀਕੇਸ਼ਨ ਤੇ ਸਿਸਟਮ ਇਕਸਟੈਂਸ਼ਨ ਲੱਭਣ ਤੇ ਇੰਸਟਾਲ ਕਰਨ ਅਤੇ"
+" ਮੌਜੂਦਾ ਇੰਸਟਾਲ ਹੋਈਆਂ "
+"ਐਪਲੀਕੇਸ਼ਨ ਹਟਾਉਣ ਲਈ ਸਹਾਇਕ ਹੈ।"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਖਾਸ ਅਤੇ ਹਰਮਨਪਿਆਰੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਹਰੇਕ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਫਾਇਦੇਮੰਦ"
+" ਵੇਰਵੇ ਅਤੇ ਕਈ "
+"ਤਸਵੀਰਾਂ ਨਾਲ ਵੇਖਾਉਂਦਾ ਹੈ। ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਵਰਗਾਂ ਦੀ ਸੂਚੀ ਵਿਚੋਂ ਚੁਣਿਆ ਜਾਂ ਖੋਜ"
+" ਕਰਕੇ ਲੱਭਿਆ ਜਾ ਸਕਦਾ "
+"ਹੈ। ਇਹ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਸਿਸਟਮ ਨੂੰ ਆਫਲਾਈਨ ਅੱਪਡੇਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਵੀ"
+" ਸਹਾਇਕ ਹੈ।"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "ਸਾਰ ਪੈਨਲ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "ਵੇਰਵਾ ਪੈਨਲ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "ਇੰਸਟਾਲ ਹੋਏ ਪੈਨਲ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "ਅੱਪਡੇਟ ਪੈਨਲ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "ਅੱਪਡੇਟ ਦੇ ਵੇਰਵੇ"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1386
+msgid "The GNOME Project"
+msgstr "ਗਨੋਮ ਪਰੋਜੈੱਕਟ"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "ਐਪ-ਸਟਰੀਮ ਫਾਇਲ ਨੂੰ ਸਿਸਟਮ ਟਿਕਾਣੇ 'ਤੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "ਐਪ-ਸਟਰੀਮ ਫਾਇਲ ਨੂੰ ਸਿਸਟਮ ਟਿਕਾਣੇ 'ਤੇ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "ਮਾਫ਼ਕ ਪਰੋਜੈਕਟਾਂ ਦੀ ਸੂਚੀ"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"ਇਹ ਮਾਫ਼ਕ ਪਰੋਜੈਕਟਾਂ ਦੀ ਸੂਚੀ ਹੈ, ਜਿਹਨਾਂ ਨੂੰ ਸਾਨੂੰ ਦਿਖਾਉਣਾ ਚਾਹੀਦਾ ਹੈ ਜਿਵੇਂ ਕਿ"
+" ਗਨੋਮ, ਕੇਡੀਈ ਅਤੇ "
+"XFCE ਆਦਿ।"
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "ਕੀ ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਵਿੱਚ ਅੱਪਡੇਟ ਅਤੇ ਅੱਪਗਰੇਡਾਂ ਦਾ ਬੰਦੋਬਸਤ ਕਰਨਾ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"ਜੇ ਅਸਮਰੱਥ ਹੁੰਦਾ ਹੈ ਤਾਂ ਗਨੋਮ ਸਾਫ਼ਟਵੇਅਰ ਅੱਪਡੇਟ ਪੈਨਲ ਨੂੰ ਲੁਕਾਉਂਦਾ ਹੈ ਅਤੇ ਕੋਈ ਵੀ"
+" ਆਪਣੇ-ਆਪ ਅੱਪਡੇਟ ਕਾਰਵਾਈ "
+"ਨਹੀਂ ਕਰੇਗਾ ਜਾਂ ਅੱਪਗਰੇਡ ਲਈ ਨਹੀਂ ਪੁੱਛੇਗਾ।"
+
+#: data/org.gnome.software.gschema.xml:15
+#| msgid "Whether to automatically download updates"
+msgid "Automatically download and install updates"
+msgstr "ਅੱਪਡੇਟ ਆਪਣੇ-ਆਪ ਡਾਊਨਲੋਡ ਅਤੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: data/org.gnome.software.gschema.xml:16
+#| msgid ""
+#| "If enabled, GNOME Software automatically downloads updates in the "
+#| "background and prompts the user to install them when ready."
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"ਜੇ ਸਮਰੱਥ ਕੀਤਾ ਤਾਂ ਗਨੋਮ ਸਾਫ਼ਟਵੇਅਰ ਬੈਕਗਰਾਊਂਡ 'ਚ ਆਪਣੇ-ਆਪ ਡਾਊਨਲੋਡ ਕਰਦਾ ਹੈ, ਅਤੇ"
+" ਉਹਨਾਂ ਨੂੰ ਇੰਸਟਾਲ ਵੀ "
+"ਕਰਦਾ ਹੈ, ਜਿਹਨਾਂ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ ਹੈ।"
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"ਜਦੋਂ ਬੈਕਗਰਾਊਂਡ ਵਿੱਚ ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਹੁੰਦੇ ਹਨ ਤਾਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸੂਚਨਾ ਦਿਓ"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"ਜੇ ਸਮਰੱਥ ਕੀਤਾ ਤਾਂ ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਵਰਤੋਂਕਾਰ ਨੂੰ ਵੇਹਲੇ ਹੋਣ ਦੇ ਦੌਰਾਨ ਵਾਪਰੇ"
+" ਅੱਪਡੇਟਾਂ ਬਾਰੇ ਸੂਚਨਾ ਦੇਵੇਗਾ।"
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "ਜਦੋਂ ਮੀਟਰ ਵਾਲਾ ਕਨੈਕਸ਼ਨ ਹੋਵੇ ਤਾਂ ਕੀ ਆਪਣੇ-ਆਪ ਤਾਜ਼ਾ ਕਰਨਾ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"ਜੇ ਸਮਰੱਥ ਕੀਤਾ ਤਾਂ ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਮੀਟਰ ਵਾਲੇ ਕਨੈਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਦੌਰਾਨ ਵੀ ਪਿਛੋਕੜ"
+" ਵਿੱਚ ਆਪਣੇ-ਆਪ "
+"ਤਾਜ਼ਾ ਹੁੰਦਾ ਰਹੇਗਾ (ਜਿਸ ਨਾਲ ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਕਰਨ ਵਾਸਤੇ ਕੁਝ ਮੇਟਾਡਾਟਾ ਡਾਊਨਲੋਡ ਕੀਤਾ"
+" ਜਾਵੇਗਾ, "
+"ਜਿਸ ਨਾਲ ਵਰਤੋਂਕਾਰ ਨੂੰ ਲਾਗਤ ਸਹਿਣੀ ਪੈ ਸਕਦੀ ਹੈ)।"
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "ਕੀ ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਪਹਿਲੀ ਵਾਰ ਚਲਾਇਆ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "ਐਪਲੀਕੇਸ਼ਨਾਂ ਦੇ ਅੱਗੇ ਤਾਰਾਬੱਧ ਦਰਜੇ ਦਿਖਾਉਣੇ ਹਨ"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "ਰਿਮੋਟ ਲਈ ਮੂਲ ਬਰਾਂਚ ਦੇ ਮੁਤਾਬਕ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਛਾਣੋ"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"ਗ਼ੈਰ-ਮੁਕਤ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਚੇਤਾਵਨੀ ਜਾਣਕਾਰੀ ਦਿਖਾਈ ਦਿਖਾਈ"
+" ਜਾਵੇਗੀ"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"ਜਦੋਂ ਗ਼ੈਰ-ਮੁਕਤ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾਵੇਗਾ ਤਾਂ ਚੇਤਾਵਨੀ ਜਾਣਕਾਰੀ ਦਿਖਾਈ"
+" ਜਾਵੇਗੀ। ਇਸ ਨਾਲ "
+"ਜਾਣਕਾਰੀ ਦਿਖਾਉਣ ਨੂੰ ਦਬਾਉਣ ਨੂੰ ਕਾਬੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "ਹਰਮਨਪਿਆਰੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਦੀ ਸੂਚੀ"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"ਸਿਸਟਮ ਵਲੋਂ ਨਿਰਧਾਰਿਤ ਕੀਤੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਅਣਡਿੱਠ ਕਰਨ ਵਾਲੀਆਂ ਦੀ ਸੂਚੀ ਹੈ।"
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "ਆਖਰੀ ਅੱਪਡੇਟ ਜਾਂਚ ਸਮਾਂ"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "ਆਖਰੀ ਅੱਪਗਰੇਡ ਸੂਚਨਾ ਸਮਾਂ"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "ਪਹਿਲੇ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਦਾ ਸਮਾਂ, ਅੱਪਡੇਟ ਦੇ ਬਾਅਦ ਸਾਫ਼ ਕੀਤਾ"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "ਆਖਰੀ ਅੱਪਡੇਟ ਦਾ ਸਮਾਂ"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "ਆਖਰੀ ਵਾਰ ਸਿਸਟਮ ਦੇ ਆਨਲਾਈਨ ਹੋਣ ਅਤੇ ਕਿਸੇ ਵੀ ਅੱਪਡੇਟ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਦਾ ਸਮਾਂ"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "ਤਸਦੀਕ ਕਰਨ ਲਈ ਸਕਿੰਟਾਂ ਵਿੱਚ ਸਮਾਂ, ਜਿਸ ਲਈ ਅਪਸਟਰੀਨ ਸਕਰੀਨਸ਼ਾਟ ਦੇ ਵਾਜਬ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"ਵੱਡੀ ਗਿਣਤੀ ਦਾ ਅਰਥ ਹੈ ਕਿ ਰਿਮੋਟ ਸਰਵਰ ਲਈ ਘੱਟ ਫੇਰੇ ਲਾਉਣੇ ਪੈਣਗੇ, ਪਰ ਵਰਤੋਂਕਾਰ ਨੂੰ"
+" ਸਕਰੀਨਸ਼ਾਟ ਲਈ "
+"ਅੱਪਡੇਟ ਵਿਖਾਉਣ ਲਈ ਵੱਧ ਵੇਲਾ ਲੱਗੇਗਾ। 0 ਦਾ ਅਰਥ ਹੋਵੇਗਾ ਕਿ ਜੇ ਚਿੱਤਰ ਪਹਿਲਾਂ ਹੀ ਕੈਸ਼"
+" 'ਚ ਮੌਜੂਦ ਹੋਵੇਗਾ "
+"ਤਾਂ ਸਰਵਰ ਦੀ ਕਦੇ ਜਾਂਚ ਨਹੀਂ ਕੀਤੀ ਜਾਵੇਗੀ।"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਪੜਤਾਲਾਂ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਸਰਵਰ"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "ਪੜਤਾਲਾਂ ਲਈ ਘੱਟ ਤੋਂ ਘੱਟ ਕਰਮਾ ਗਿਣਤੀ"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "ਇਸ ਅੰਕ ਤੋਂ ਘੱਟ ਕਰਮਿਆਂ ਵਾਲੀਆਂ ਪੜਤਾਲਾਂ ਨੂੰ ਦਿਖਾਇਆ ਨਹੀਂ ਜਾਵੇਗਾ।"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"ਅਧਿਕਾਰਿਤ ਰਿਪੋਜ਼ਟਰੀਆਂ ਦੀ ਸੂਚੀ, ਜਿਹਨਾਂ ਨੂੰ 3ਜੀ ਧਿਰ ਨਹੀਂ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"ਅਧਿਕਾਰਿਤ ਰਿਪੋਜ਼ਟਰੀਆਂ ਦੀ ਸੂਚੀ, ਜਿਹਨਾਂ ਨੂੰ ਮੁਕਤ ਸਾਫ਼ਟਵੇਅਰ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "ਜਦੋਂ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਮੁਕਤ ਸਾਫਟਵੇਅਰ ਮੰਨਿਆ ਜਾਵੇ ਤਾਂ ਵਰਤਣ ਲਈ ਲਸੰਸ URL"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"ਜਦੋਂ ਵੀ ਸੰਭਵ ਹੋਵੇ ਤਾਂ ਸਿਸਟਮ 'ਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਬੰਡਲ ਕੀਤੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ"
+" ਨੂੰ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Show the folder management UI"
+msgstr "ਫੋਲਡਰ ਪਰਬੰਧ UI ਦਿਖਾਓ"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Allow access to the Software Repositories dialog"
+msgstr "ਸਾਫ਼ਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਡਾਈਲਾਗ ਲਈ ਪਹੁੰਚ ਦੀ ਇਜਾਜ਼ਤ"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Offer upgrades for pre-releases"
+msgstr "ਰੀਲਿਜ਼ ਤੋਂ ਪਹਿਲਾਂ ਲਈ ਅੱਪਗਰੇਡ ਵਾਸਤੇ ਪੇਸ਼ਕਸ਼ ਦਿਓ"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"ਵਰਤੋਂਕਾਰ ਨੂੰ ਜਾਣਕਾਰੀ ਦੇਣ ਲਈ ਕੁਝ UI ਭਾਗ ਵੇਖਾਓ, ਜਦੋਂ ਕਿ ਐਪ ਦੀ ਗ਼ੈਰ-ਮੁਕਤ ਹੋਵੇ"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "ਗ਼ੈਰ-ਆਜ਼ਾਦ ਸਾਫ਼ਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀਆਂ ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਪੁੱਛੋ"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"ਇੰਸਟਾਲ ਹੋਈਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਦੀ ਸੂਚੀ ਵਿੱਚ ਐਪਾਂ ਲਈ ਇੰਸਟਾਲ ਹੋਏ ਆਕਾਰ ਨੂੰ ਦਿਖਾਓ"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:131
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI, ਜੋ ਕਿ ਗ਼ੈਰ-ਆਜ਼ਾਦ ਅਤੇ ਪਰੋਪਰੈਟਰੀ ਸਾਫ਼ਟਵੇਅਰਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦਿੰਦਾ ਹੈ"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"ਐਪਸਟਰੀਮ ਫਾਇਲਾਂ ਨੂੰ ਦਰਸਾਉਂਦੇ URL ਦੀ ਸੂਚੀ, ਜਿਸ ਤੋਂ ਇਸ ਨੂੰ ਐਪ-ਜਾਣਕਾਰੀ ਫੋਲਡਰ 'ਚ"
+" ਡਾਊਨਲੋਡ ਕੀਤਾ "
+"ਜਾ ਸਕਦਾ ਹੈ।"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "ਐਪ-ਸਟਰੀਮ ਫਾਇਲਾਂ ਨੂੰ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਸਿਸਟਮ ਰੂਪੀ ਟਿਕਾਣੇ ਲਈ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: data/org.gnome.software.gschema.xml:144
+msgid "Enable GNOME Shell extensions repository"
+msgstr "ਗਨੋਮ ਸ਼ੈੱਲ ਇਕਸਟੈਨਸ਼ਨਾਂ ਰਿਪੋਜ਼ਟਰੀ ਸਮਰੱਥ ਕਰੋ"
+
+#: data/org.gnome.software.gschema.xml:151
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "ਲਾਗਇਨ ਕਰਨ ਲਈ gnome-online-account ਪਛਾਣ ਨੂੰ ਸੰਭਾਲਣ ਵਾਲੀ ਸਤਰ"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "ਚੁਣੇ ਸਾਫਟਵੇਅਰ ਸਿਸਟਮ ਉੱਤੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "ਸਭ ਚੁਣੋ"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "ਕੋਈ ਨਾ ਚੁਣੋ"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀਆਂ(_S)"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "ਅੱਪਡੇਟ ਪਸੰਦਾਂ(_U)"
+
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "ਸਾਫਟਵੇਅਰ"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "ਪਿੱਛੇ ਜਾਓ"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_Explore"
+msgstr "ਛਾਣਬੀਨ ਕਰੋ(_E)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "ਇੰਸਟਾਲ ਕੀਤੇ(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "ਅੱਪਡੇਟ(_U)"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "ਖੋਜ"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:293 src/gs-details-page.ui:841
+msgid "Source"
+msgstr "ਸਰੋਤ"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀਆਂ"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "ਡਿਸਕ ਦੀ ਜਾਂਚ ਕਰੋ"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "ਨੈੱਟਵਰਕ ਸੈਟਿੰਗ"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "ਹੁਣੇ ਮੁੜ-ਚਾਲੂ ਕਰੋ"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "ਹੋਰ ਜਾਣਕਾਰੀ"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4459
+msgid "Local file"
+msgstr "ਲੋਕਲ ਫ਼ਾਇਲ"
+
+#: lib/gs-app.c:4511
+msgid "Package"
+msgstr "ਪੈਕੇਜ"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:418
+msgid "Pending"
+msgstr "ਬਾਕੀ"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:182 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:68
+msgid "Installed"
+msgstr "ਇੰਸਟਾਲ ਹੋਏ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:172 src/gs-details-page.c:320
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "ਹਟਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: src/gs-app-folder-dialog.c:296
+msgid "Folder Name"
+msgstr "ਫੋਲਡਰ ਨਾਂ"
+
+#: src/gs-app-folder-dialog.c:307 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:243 src/gs-editor.c:729 src/gs-editor.c:762
+#: src/gs-installed-page.c:598 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "ਰੱਦ ਕਰੋ(_C)"
+
+#: src/gs-app-folder-dialog.c:312 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "ਸ਼ਾਮਲ(_A)"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਫੋਲਡਰ ਵਿੱਚ ਜੋੜੋ"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "ਸ਼ੁਰੂ ਢੰਗ: ‘updates’, ‘updated’, ‘installed’ ਜਾਂ ‘overview’"
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "ਮੋਡ"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਖੋਜ"
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "ਖੋਜ"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵੇਰਵੇ ਵੇਖਾਓ (ਐਪਲੀਕੇਸ਼ਨ ID ਦੀ ਵਰਤੋਂ ਕਰਕੇ)"
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵੇਰਵੇ ਵੇਖਾਓ (ਪੈਕੇਜ ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ)"
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr "ਪੈਕੇਜ-ਨਾਂ"
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਇੰਸਟਾਲ ਕਰੋ (ਐਪਲੀਕੇਸ਼ਨ ID ਦੀ ਵਰਤੋਂ ਕਰਕੇ)"
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr "ਲੋਕਲ ਪੈਕੇਜ ਫਾਇਲ ਨੂੰ ਖੋਲ੍ਹੋ"
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "ਫਾਇਲ-ਨਾਂ"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "ਇਸ ਕਾਰਵਾਈ ਲਈ ਉਮੀਦ ਕੀਤੇ ਤਾਲਮੇਲ ਦੀ ਕਿਸਮ: ‘ਕੋਈ ਨਹੀਂ‘, ‘ਸੂਚਨਾ‘, ਜਾਂ ‘ਪੂਰਾ‘"
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr "ਵੇਰਵੇ ਸਮੇਤ ਡੀਬੱਗ ਜਾਣਕਾਰੀ ਵੇਖਾਓ"
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr "ਕਿਸੇ ਵੀ ਬਾਕੀ ਰਹਿੰਦੇ ਅੱਪਡੇਟਾਂ ਨੂੰ ਬੈਕਗਰਾਊਂਡ ਵਿੱਚ ਇੰਸਟਾਲ ਕਰਦਾ ਹੈ"
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr "ਅੱਪਡੇਟ ਪਸੰਦਾਂ ਵੇਖਾਓ"
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr "ਚੱਲਦੇ ਮੌਕੇ ਨੂੰ ਬੰਦ ਕਰੋ"
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream ਲਈ ਲੋਕਲ ਫਾਇਲ ਸਰੋਤ ਨੂੰ ਪਹਿਲ"
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "ਵਰਜ਼ਨ ਨੰਬਰ ਨੂੰ ਵੇਖਾਓ"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"ਅਮਨਪਰੀਤ ਸਿੰਘ ਆਲਮ\n"
+"ਪੰਜਾਬੀ ਓਪਨਸੋਰਸ ਟੀਮ (POST)"
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:1858
+#, c-format
+msgid "About %s"
+msgstr "%s ਬਾਰੇ"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr "ਤੁਹਾਡੇ ਸਿਸਟਮ ਉੱਤੇ ਸਾਫਟਵੇਅਰ ਦੇ ਪ੍ਰਬੰਧ ਲਈ ਵਧੀਆ ਢੰਗ ਹੈ।"
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:567
+msgid "Sorry! There are no details for that application."
+msgstr "ਅਫ਼ਸੋਸ! ਉਸ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਕੋਈ ਵੇਰਵੇ ਨਹੀਂ ਹਨ।"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "ਵੈੱਬਸਾਈਟ ਨੂੰ ਵੇਖੋ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "..ਇੰਸਟਾਲ ਕਰੋ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:472
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:287 src/gs-page.c:273
+msgid "Install"
+msgstr "ਇੰਸਟਾਲ ਕਰੋ"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "ਅੱਪਡੇਟ ਕਰੋ"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:432
+#: src/gs-repos-dialog.c:323
+msgid "Remove"
+msgstr "ਹਟਾਓ"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:283
+msgid "Device cannot be used during update."
+msgstr "ਡਿਵਾਈਸ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਦੌਰਾਨ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"
+
+#: src/gs-app-row.c:486 src/gs-update-dialog.ui:182
+#| msgid "%s is requesting additional fonts."
+msgid "Requires additional permissions"
+msgstr "ਹੋਰ ਮਨਜ਼ੂਰੀਆਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:180
+msgid "Other"
+msgstr "ਹੋਰ"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:185
+msgid "All"
+msgstr "ਸਭ"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:189
+msgid "Featured"
+msgstr "ਫੀਚਰ"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:480
+#, c-format
+msgid "Featured %s"
+msgstr "%s ਫ਼ੀਚਰ"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26
+msgid "Top Rated"
+msgstr "ਚੋਟੀ ਦਾ ਦਰਜਾ"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-editor.ui:225
+#: src/gs-origin-popover-row.c:55
+msgid "Name"
+msgstr "ਨਾਂ"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:885
+msgid "Extension Settings"
+msgstr "ਇਕਸਟੈਨਸ਼ਨ ਦੀਆਂ ਸੈਟਿੰਗਾਂ"
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"ਇਕਸਟੈਨਸ਼ਨਾਂ ਨੂੰ ਆਪਣੀ ਜ਼ੁੰਮੇਵਾਰੀ 'ਤੇ ਵਰਤੋਂ। ਜੇ ਤੁਹਾਨੂੰ ਕੋਈ ਸਿਸਟਮ ਸਮੱਸਿਆਵਾਂ"
+" ਆਈਆਂ ਹਨ ਤਾਂ ਉਹਨਾਂ ਨੂੰ "
+"ਅਸਮਰੱਥ ਕਰਨ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "ਵੇਖਾਓ"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "ਅਧੀਨ-ਵਰਗ ਫਿਲਟਰ ਮੇਨੂ"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "ਲੜੀਬੱਧ"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "ਅਧੀਨ-ਵਰਗ ਲੜੀਬੱਧ ਮੇਨੂ"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "1 ਤੋਂ %u ਲਈ ਕੋਈ ਨੰਬਰ ਦਿਓ: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਚੁਣੋ:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr "ਓ.ਸਿ. ਅੱਪਡੇਟ ਹੁਣ ਇੰਸਟਾਲ ਕੀਤਾ ਗਿਆ"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr "ਹੁਣੇ ਇੰਸਟਾਲ ਕੀਤੇ ਅੱਪਡੇਟ ਪੜਤਾਲ ਲਈ ਉਪਲਬਧ ਹਨ"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr "%s ਹੁਣ ਇੰਸਟਾਲ ਹੈ"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for the changes to take effect."
+msgstr "ਤਬਦੀਲੀਆਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵਰਤਣ ਲਈ ਤਿਆਰ ਹੈ।"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-common.c:633
+msgid "Restart"
+msgstr "ਮੁੜ-ਚਾਲੂ ਕਰੋ"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "ਚਲਾਓ"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr "ਸੁਤੰਤਰ-ਧਿਰ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਕਰਨਾ ਹੈ?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:234
+msgid "Enable Third-Party Software Repository?"
+msgstr "ਸੁਤੰਤਰ-ਧਿਰ ਸਾਫ਼ਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਸਮਰੱਥ ਕਰਨੀ ਹੈ?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">ਮੁਫ਼ਤ ਅਤੇ ਆਜ਼ਾਦ ਸਰੋਤ ਸਾਫ਼ਟਵੇਅਰ</a> ਨਹੀਂ ਹੈ ਅਤੇ “%s” ਵਲੋਂ ਦਿੱਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s ਨੂੰ “%s” ਵਲੋਂ ਦਿੱਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"ਇੰਸਟਾਲੇਸ਼ਨ ਨੂੰ ਜਾਰੀ ਰੱਖਣ ਲਈ ਇਸ ਸਾਫ਼ਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਨੂੰ ਸਮਰੱਥ ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ।"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "ਕੁਝ ਦੇਸ਼ਾਂ 'ਚ %s ਨੂੰ ਇੰਸਟਾਲ ਕਰਨਾ ਜਾਂ ਵਰਤਣਾ ਗ਼ੈਰਕਨੂੰਨੀ ਹੋ ਸਕਦਾ ਹੈ।"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"ਕੁਝ ਦੇਸ਼ਾਂ 'ਚ ਇਸ ਕੋਡਕਸ ਨੂੰ ਇੰਸਟਾਲ ਕਰਨਾ ਜਾਂ ਵਰਤਣਾ ਗ਼ੈਰਕਨੂੰਨੀ ਹੋ ਸਕਦਾ ਹੈ।"
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr "ਮੁੜ ਚੇਤਾਵਨੀ ਨਾ ਦਿਓ"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr "ਸਮਰੱਥ ਕਰਕੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:435
+msgid "Detailed errors from the package manager follow:"
+msgstr "ਪੈਕੇਜ ਮੈਨੇਜਰ ਤੋਂ ਵੇਰਵੇ ਸਮੇਤ ਗਲਤੀਆਂ ਅੱਗੇ ਹਨ:"
+
+#: src/gs-common.c:454 src/gs-details-page.ui:438
+msgid "Details"
+msgstr "ਵੇਰਵੇ"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:619
+#| msgid "Updates have been installed"
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ"
+msgstr[1] "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕੀਤੇ ਜਾ ਚੁੱਕੇ ਹਨ"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:624
+#| msgid "A restart is required for them to take effect."
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "ਉਸ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+msgstr[1] "ਉਹਨਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:631 src/gs-update-monitor.c:119
+msgid "Not Now"
+msgstr "ਹੁਣ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:62
+msgid "No cartoon violence"
+msgstr "ਕੋਈ ਕਾਰਟੂਨ ਤਸ਼ਦੱਦ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in unsafe situations"
+msgstr "ਅਸੁਰੱਖਿਅਤ ਹਾਲਤਾਂ 'ਚ ਕਾਰਟੂਨ ਕਰੈਟਰ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:68
+msgid "Cartoon characters in aggressive conflict"
+msgstr "ਲੜਾਕੇ ਟਾਕਰਿਆਂ ਵਿੱਚ ਕਾਰਟੂਨ ਕਰੈਟਰ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:71
+msgid "Graphic violence involving cartoon characters"
+msgstr "ਕਾਰਟੂਨ ਕਰੈਟਰ ਦੇ ਨਾਲ ਗਰਾਫਿਕ ਤਸ਼ਦੱਦ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "No fantasy violence"
+msgstr "ਕਲਪਨਿਕ ਤਸ਼ਦੱਦ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:77
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "ਅਸੁਰੱਖਿਅਤ ਹਾਲਤਾਂ ਵਿੱਚ ਅਸਲੀਅਤ ਤੋਂ ਸੌਖੀ ਤਰ੍ਹਾਂ ਪਛਾਣੇ ਜਾਣ ਵਾਲੇ ਚਿੰਨ੍ਹ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:80
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "ਹਮਲਾਵਰ ਟਕਰਾ ਵਿੱਚ ਅਸਲੀਅਤ ਤੋਂ ਸੌਖੀ ਤਰ੍ਹਾਂ ਪਛਾਣੇ ਜਾਣ ਵਾਲੇ ਚਿੰਨ੍ਹ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "ਅਸਲੀਅਤ ਤੋਂ ਸੌਖੀ ਤਰ੍ਹਾਂ ਪਛਾਣੇ ਜਾਣ ਵਾਲਾ ਚਿੱਤਰਨ ਕੀਤਾ ਤਸ਼ਦੱਦ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:86
+msgid "No realistic violence"
+msgstr "ਕੋਈ ਅਸਲੀ ਤਸ਼ਦੱਦ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "ਅਸੁਰੱਖਿਅਤ ਹਾਲਤਾਂ 'ਚ ਨਰਮ ਰੁਖ ਵਾਲਾ ਯਥਾਰਥਿਕ ਚਿੰਨ੍ਹ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "ਲੜਾਕੇ ਟਾਕਰਿਆਂ ਵਿੱਚ ਅਸਲੀ ਚਿੰਨ੍ਹਾਂ ਦਾ ਚਿੱਤਰਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:95
+msgid "Graphic violence involving realistic characters"
+msgstr "ਯਥਾਰਥਿਕ ਕਰੈਟਰ ਦੇ ਨਾਲ ਗਰਾਫਿਕ ਤਸ਼ਦੱਦ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "No bloodshed"
+msgstr "ਕੋਈ ਖ਼ੂਨ-ਖ਼ਰਾਬਾ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:101
+msgid "Unrealistic bloodshed"
+msgstr "ਕਾਲਪਨਿਕ ਖ਼ੂਨ-ਖ਼ਰਾਬਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:104
+msgid "Realistic bloodshed"
+msgstr "ਅਸਲੀ ਖ਼ੂਨ-ਖ਼ਰਾਬਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "ਖ਼ੂਨ-ਖ਼ਰਾਬੇ ਦਾ ਵਰਣਨ ਅਤੇ ਸਰੀਰਿਕ ਅੰਗਾਂ ਦੀ ਕੱਟ-ਵੱਢ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:110
+msgid "No sexual violence"
+msgstr "ਕੋਈ ਜਿਨਸੀ ਧੱਕਾ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:113
+msgid "Rape or other violent sexual behavior"
+msgstr "ਜਬਰ-ਜ਼ਿਨਾਹ ਜਾਂ ਹੋਰ ਧੱਕੇ ਵਾਲਾ ਜਿਨਸੀ ਰਵੱਈਆ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "No references to alcohol"
+msgstr "ਕੋਈ ਸ਼ਰਾਬੀ ਖਾਣ-ਪੀਣ ਲਈ ਹਵਾਲੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:119
+msgid "References to alcoholic beverages"
+msgstr "ਸ਼ਰਾਬੀ ਖਾਣ-ਪੀਣ ਲਈ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "Use of alcoholic beverages"
+msgstr "ਸ਼ਰਾਬੀ ਖਾਣ-ਪੀਣ ਦੀ ਵਰਤੋਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:125
+msgid "No references to illicit drugs"
+msgstr "ਵਰਜਿਤ ਦਵਾਈਆਂ (ਨਸ਼ਿਆਂ) ਲਈ ਕੋਈ ਹਵਾਲਾ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "References to illicit drugs"
+msgstr "ਵਰਜਿਤ ਦਵਾਈਆਂ (ਨਸ਼ਿਆਂ) ਲਈ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:131
+msgid "Use of illicit drugs"
+msgstr "ਵਰਜਿਤ ਦਵਾਈਆਂ (ਨਸ਼ਿਆਂ) ਦੀ ਵਰਤੋਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr "ਤਮਾਕੂ ਉਤਪਾਦਾਂ ਲਈ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:137
+msgid "Use of tobacco products"
+msgstr "ਤਮਾਕੂ ਉਤਪਾਦਾਂ ਦੀ ਵਰਤੋਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:140
+msgid "No nudity of any sort"
+msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦਾ ਨੰਗੇਜ਼ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:143
+msgid "Brief artistic nudity"
+msgstr "ਸੰਖੇਪ ਕਲਕਾਰੀ ਨੰਗੇਜ਼"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr "ਲੰਮੇ ਸਮੇਂ ਲਈ ਨੰਗੇਜ਼"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:149
+#| msgid "No references or depictions of sexual nature"
+msgid "No references to or depictions of sexual nature"
+msgstr "ਜਿਨਸੀ ਕਿਸਮ ਦੇ ਕੋਈ ਹਵਾਲੇ ਜਾਂ ਵਰਣਨ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "Provocative references or depictions"
+msgstr "ਭੜਕਾਊ ਹਵਾਲੇ ਜਾਂ ਵਰਣਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:155
+msgid "Sexual references or depictions"
+msgstr "ਜਿਨਸੀ ਹਵਾਲੇ ਜਾਂ ਵਰਣਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr "ਗਰਾਫ਼ਿਕ ਜਿਨਸੀ ਰਵੱਈਆ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:161
+msgid "No profanity of any kind"
+msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੀ ਕੋਈ ਵੀ ਬੇਅਦਬੀ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:164
+msgid "Mild or infrequent use of profanity"
+msgstr "ਹਲਕੀ ਜਾਂ ਕਦੇ ਕਦਾਈ ਬੇਅਦਬੀ ਦੀ ਵਰਤੋਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr "ਬੇਅਦਬੀ ਦੀ ਠੀਕ-ਠਾਕ ਵਰਤੋਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:170
+msgid "Strong or frequent use of profanity"
+msgstr "ਬੇਅਦਬੀ ਦੀ ਜ਼ੋਰਦਾਰ ਜਾਂ ਅਕਸਰ ਵਰਤੋਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:173
+msgid "No inappropriate humor"
+msgstr "ਕੋਈ ਅਢੁੱਕਵਾਂ ਮਜ਼ਾਕ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr "ਮਸ਼ਕਰੀਆ ਮਜ਼ਾਕ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:179
+msgid "Vulgar or bathroom humor"
+msgstr "ਘਟੀਆ ਜਾਂ ਬਾਥਰੂਮ ਮਜ਼ਾਕ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "ਪ੍ਰੋੜ੍ਹ ਜਾਂ ਜਿਨਸੀ ਮਜ਼ਾਕ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੀ ਪੱਖਪਾਤੀ ਭਾਸ਼ਾ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:188
+msgid "Negativity towards a specific group of people"
+msgstr "ਖਾਸ ਕਿਸਮ ਦੇ ਲੋਕਾਂ ਦੇ ਖਿਲਾਫ਼ ਨਿਖੇਧੀ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "ਜ਼ਜ਼ਬਾਤੀ ਨੁਕਸਾਨ ਕਰਨ ਲਈ ਤਿਆਰ ਕੀਤਾ ਪੱਖਪਾਤ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:194
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "ਲਿੰਗ, ਜਿਨਸ, ਨਸਲ ਜਾਂ ਧਰਮ 'ਤੇ ਅਧਾਰਿਤ ਸਾਫ਼ ਸਾਫ਼ ਪੱਖਪਾਤ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:197
+msgid "No advertising of any kind"
+msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੇ ਕੋਈ ਇਸ਼ਤਿਹਾਰ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "ਉਤਪਾਦ ਸਥਾਪਨਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:203
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "ਖਾਸ ਬਰੈਂਡਾਂ ਜਾਂ ਟਰੇਡਮਾਰਕ ਉਤਪਾਦਾਂ ਲਈ ਅਲਹਿਦਾ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:206
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਖਾਸ ਅਸਲ ਸੰਸਾਰ ਦੀਆਂ ਚੀਜ਼ਾਂ ਖਰੀਦਣ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦਾ ਜੂਆ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:212
+msgid "Gambling on random events using tokens or credits"
+msgstr "ਟੋਕਨ ਜਾਂ ਕਰੈਡਿਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰਲਵੇਂ ਈਵੈਂਟਾਂ ਲਈ ਜੂਆ ਖੇਡਣਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using “play” money"
+msgstr "\"ਪਲੇਅ\" ਧਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜੂਆ ਖੇਡਣਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "Gambling using real money"
+msgstr "ਅਸਲੀ ਧਨ ਦੀ ਵਰਤੋਂਂ ਨਾਲ ਜੂਆ ਖੇਡਣਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:221
+msgid "No ability to spend money"
+msgstr "ਧਨ ਖ਼ਰਚਣ ਦੀ ਸਮਰੱਥ ਨਹੀਂ"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:224
+msgid "Users are encouraged to donate real money"
+msgstr "ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਅਸਲ ਧਨ ਦਾਨ ਕਰਨ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:227
+#| msgid "Ability to spend real money in-game"
+msgid "Ability to spend real money in-app"
+msgstr "ਐਪ ਵਿੱਚ ਅਸਲ ਧਨ ਖ਼ਰਚ ਕਰਨ ਦੀ ਸਮਰੱਥਾ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਗੱਲਾਂ ਕਰਨ ਦਾ ਕੋਈ ਢੰਗ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:233
+#| msgid "User-to-user game interactions without chat functionality"
+msgid "User-to-user interactions without chat functionality"
+msgstr "ਗੱਲਬਾਤ ਸਹੂਲਤ ਦੇ ਬਿਨਾਂ ਵਰਤੋਂਕਾਰਾਂ ਦਾ ਆਪਸ 'ਚ ਤਾਲਮੇਲ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Moderated chat functionality between users"
+msgstr "ਵਰਤੋਂਕਾਰਾਂ ਵਿਚਾਲੇ ਸੰਜਮੀ ਗੱਲਬਾਤ ਸਹੂਲਤ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "Uncontrolled chat functionality between users"
+msgstr "ਵਰਤੋਂਕਾਰਾਂ 'ਚ ਬਿਨਾਂ-ਕੰਟਰੋਲ ਗੱਲਬਾਤ ਸਹੂਲਤ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:242
+msgid "No way to talk with other users"
+msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਗੱਲਾਂ (ਬੋਲ ਕੇ) ਕਰਨ ਦਾ ਕੋਈ ਢੰਗ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:245
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "ਵਰਤੋਂਕਾਰਾਂ 'ਚ ਬਿਨਾਂ-ਕੰਟਰੋਲ ਆਡੀਓ ਜਾਂ ਵੀਡੀਓ ਗੱਲਬਾਤ ਸਹੂਲਤ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr "ਸਮਾਜਿਕ ਨੈੱਟਵਰਕ ਵਰਤੋਂਕਾਰ ਜਾਂ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਸਾਂਝੇ ਨਹੀਂ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:251
+msgid "Sharing social network usernames or email addresses"
+msgstr "ਸਮਾਜਿਕ ਨੈੱਟਵਰਕ ਵਰਤੋਂਕਾਰ ਜਾਂ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਸਾਂਝੇ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:254
+#| msgid "No sharing of user information with 3rd parties"
+msgid "No sharing of user information with third parties"
+msgstr "ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਵਰਤੋਂਕਾਰ ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "Checking for the latest application version"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਨਵੇਂ ਵਰਜ਼ਨ ਲਈ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:260
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"ਜਾਂਚ-ਪੜਤਾਲ ਡਾਟਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ, ਜੋ ਕਿ ਹੋਰਾਂ ਨੂੰ ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ ਨਹੀਂ"
+" ਕਰਨ ਦਿੰਦਾ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr "ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਕਰਨੀ, ਜਿਸ ਨਾਲ ਹੋਰ ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ ਕਰਦੇ ਹਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:266
+#| msgid "No sharing of physical location to other users"
+msgid "No sharing of physical location with other users"
+msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਭੂਗੋਲਿਕ ਟਿਕਾਣਾ ਨਹੀਂ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:269
+#| msgid "Sharing physical location to other users"
+msgid "Sharing physical location with other users"
+msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਭੂਗੋਲਿਕ ਟਿਕਾਣਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:274
+msgid "No references to homosexuality"
+msgstr "ਕੋਈ ਸਮਲਿੰਗ ਕਾਮੁਕਤਾ ਲਈ ਹਵਾਲੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:277
+msgid "Indirect references to homosexuality"
+msgstr "ਸਮਲਿੰਗ ਕਾਮੁਕਤਾ ਲਈ ਅਸਿੱਧੇ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:280
+msgid "Kissing between people of the same gender"
+msgstr "ਇੱਕੋ ਲਿੰਗ ਦੇ ਲੋਕਾਂ ਵਿਚਾਲੇ ਚੁੰਮਣ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "ਇੱਕੋ ਲਿੰਗ ਦੇ ਲੋਕਾਂ ਵਿਚਾਲੇ ਜਿਨਸੀ ਸੰਬੰਧਾਂ ਦਾ ਚਿੱਤਰਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:286
+msgid "No references to prostitution"
+msgstr "ਕੋਈ ਕੰਜਰਪੁਣੇ ਲਈ ਹਵਾਲੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:289
+msgid "Indirect references to prostitution"
+msgstr "ਕੰਜਰਪੁਣੇ ਲਈ ਅਸਿੱਧੇ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+#| msgid "Direct references of prostitution"
+msgid "Direct references to prostitution"
+msgstr "ਕੰਜਰਪੁਣੇ ਲਈ ਸਿੱਧੇ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:295
+msgid "Graphic depictions of the act of prostitution"
+msgstr "ਕੰਜਰਪੁਣੇ ਦੇ ਕੰਮ ਲਈ ਚਿੱਤਰਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "No references to adultery"
+msgstr "ਕੋਈ ਬਦਕਾਰੀ ਲਈ ਹਵਾਲੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "Indirect references to adultery"
+msgstr "ਬਦਕਾਰੀ ਲਈ ਅਸਿੱਧੇ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:304
+#| msgid "Direct references of adultery"
+msgid "Direct references to adultery"
+msgstr "ਬਦਕਾਰੀ ਲਈ ਸਿੱਧੇ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr "ਬਦਕਾਰੀ ਦੇ ਕੰਮ ਲਈ ਚਿੱਤਰਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:310
+msgid "No sexualized characters"
+msgstr "ਕੋਈ ਕਾਮਕਤਾ ਪਾਤਰ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:313
+msgid "Scantily clad human characters"
+msgstr "ਟਾਵੇਂ-ਟਾਵੇਂ ਕੱਪੜੇ ਪਾਏ ਹੋਏ ਮਨੁੱਖੀ ਪਾਤਰ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:316
+msgid "Overtly sexualized human characters"
+msgstr "ਪ੍ਰਤੱਖ ਜਿਨਸੀ ਸੰਬੰਧਾਂ ਵਿੱਚ ਰੁਝੇ ਮਨੁੱਖੀ ਪਾਤਰ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "No references to desecration"
+msgstr "ਕੋਈ ਬੇਹੁਰਮਤੀ ਦੇ ਹਵਾਲੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+#| msgid "Depictions or references to historical desecration"
+msgid "Depictions of or references to historical desecration"
+msgstr "ਇਤਿਹਾਸਿਕ ਬੇਹੁਰਮਤੀ ਲਈ ਚਿੱਤਰਨ ਜਾਂ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:325
+msgid "Depictions of modern-day human desecration"
+msgstr "ਅੱਜ ਦੀ ਮਨੁੱਖੀ ਬੇਅਦਬੀ ਦਾ ਚਿੱਤਰਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr "ਅੱਜ ਦੀ ਬੇਅਦਬੀ ਦਾ ਚਿੱਤਰ ਰੂਪੀ ਵਰਣਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:331
+msgid "No visible dead human remains"
+msgstr "ਕੋਈ ਮਰੇ ਹੋਏ ਮਨੁੱਖੀ ਬਚੇ ਹੋਏ ਸਰੀਰਿਕ ਹਿੱਸੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:334
+msgid "Visible dead human remains"
+msgstr "ਮਰੇ ਹੋਏ ਮਨੁੱਖੀ ਬਚੇ ਹੋਏ ਸਰੀਰਿਕ ਹਿੱਸੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr "ਮਰੇ ਹੋਏ ਮਨੁੱਖ ਦੇ ਸਰੀਰਿਕ ਹਿੱਸੇ, ਜੋ ਕਿ ਤੱਤਾਂ ਦੇ ਸਾਹਮਣੇ ਨੰਗੇ ਸਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:340
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "ਮਨੁੱਖੀ ਸਰੀਰ ਦੇ ਹਿੱਸਿਆਂ ਦੀ ਬੇਅਦਬੀ ਦਾ ਚਿੱਤਰਾਂ ਦੇ ਰੂਪ ਵਿੱਚ ਵਰਣਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:343
+msgid "No references to slavery"
+msgstr "ਕੋਈ ਗ਼ੁਲਾਮੀ ਦੇ ਹਵਾਲੇ ਨਹੀਂ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+#| msgid "Depictions or references to historical slavery"
+msgid "Depictions of or references to historical slavery"
+msgstr "ਇਤਿਹਾਸਕ ਗ਼ੁਲਾਮੀ ਲਈ ਚਿੱਤਰਨ ਜਾਂ ਹਵਾਲੇ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:349
+msgid "Depictions of modern-day slavery"
+msgstr "ਅੱਜ ਦੀ ਗ਼ੁਲਾਮੀ ਲਈ ਚਿੱਤਰਨ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "ਅੱਜ ਦੀ ਗ਼ੁਲਾਮੀ ਲਈ ਚਿੱਤਰਾਂ ਦੇ ਰੂਪ ਵਿੱਚ ਵਰਣਨ"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:368
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:502
+msgid "General"
+msgstr "ਆਮ"
+
+#: src/gs-content-rating.c:511
+msgid "ALL"
+msgstr "ਸਭ"
+
+#: src/gs-content-rating.c:515
+msgid "Adults Only"
+msgstr "ਕੇਵਲ ਬਾਲਗ"
+
+#: src/gs-content-rating.c:517
+#| msgid "Featured"
+msgid "Mature"
+msgstr "ਪ੍ਰੋੜ੍ਹ"
+
+#: src/gs-content-rating.c:519
+msgid "Teen"
+msgstr "ਅੱਲੜ੍ਹ"
+
+#: src/gs-content-rating.c:521
+msgid "Everyone 10+"
+msgstr "ਹਰੇਕ 10+"
+
+#: src/gs-content-rating.c:523
+msgid "Everyone"
+msgstr "ਹਰੇਕ"
+
+#: src/gs-content-rating.c:525
+msgid "Early Childhood"
+msgstr "ਮੁੱਢਲਾ ਬਚਪਨ"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s ਨੇ ਹੋਰ ਫਾਇਲ ਫਾਰਮੈਟ ਸਹਿਯੋਗ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr "ਹੋਰ MIME ਕਿਸਮਾਂ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s ਹੋਰ ਫ਼ੋਂਟਾਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr "ਹੋਰ ਫ਼ੋਂਟਾਂ ਦੀ ਲੋੜ ਹੈ"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s ਹੋਰ ਮਲਟੀਮੀਡੀਆ ਕੋਡਕਸ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr "ਹੋਰ ਮਲਟੀਮੀਡੀਆ ਕੋਡਕਸ ਚਾਹੀਦੇ ਹਨ"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s ਹੋਰ ਪਰਿੰਟਰ ਡਰਾਇਵਰਾਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr "ਹੋਰ ਪਰਿੰਟਰ ਡਰਾਇਵਰਾਂ ਦੀ ਲੋੜ ਹੈ"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s ਹੋਰ ਪੈਕੇਜਾਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr "ਹੋਰ ਪੈਕੇਜਾਂ ਦੀ ਲੋੜ ਹੈ"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr "ਸਾਫਟਵੇਅਰ ਵਿੱਚੋਂ ਲੱਭੋ"
+
+#: src/gs-details-page.c:315
+msgid "Removing…"
+msgstr "...ਹਟਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:334
+msgid "Pending installation…"
+msgstr "…ਇੰਸਟਾਲੇਸ਼ਨ ਬਾਕੀ ਪਈ ਹੈ"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:341
+msgid "Pending update…"
+msgstr "…ਅੱਪਡੇਟ ਬਾਕੀ ਪਏ ਹਨ"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:665
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਕੇਵਲ ਤਾਂ ਹੀ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਜਦੋਂ ਇੰਟਰਨੈੱਟ ਕੁਨੈਕਸ਼ਨ ਚਾਲੂ ਹੈ"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:810 src/gs-details-page.c:827
+#: src/gs-details-page.ui:162 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.c:70
+msgid "_Install"
+msgstr "ਇੰਸਟਾਲ ਕਰੋ(_I)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:841 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "ਇੰਸਟਾਲ ਕਰੋ(_I)"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:890
+msgid "_Launch"
+msgstr "ਚਲਾਓ(_L)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:915 src/gs-details-page.ui:187
+msgid "_Remove"
+msgstr "ਹਟਾਓ(_R)"
+
+#: src/gs-details-page.c:946 src/gs-update-dialog.c:92
+#| msgid "No Network"
+msgid "Network"
+msgstr "ਨੈੱਟਵਰਕ"
+
+#: src/gs-details-page.c:946 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr "ਨੈੱਟਵਰਕ ਉੱਤੇ ਸੰਚਾਰ ਕਰ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:947 src/gs-update-dialog.c:93
+#| msgid "System Integration"
+msgid "System Services"
+msgstr "ਸਿਸਟਮ ਸੇਵਾਵਾਂ"
+
+#: src/gs-details-page.c:947 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr "ਸਿਸਟਮ ਬਸ ਨਾਲ ਡੀ-ਬੱਸ ਸੇਵਾਵਾਂ ਲਈ ਪਹੁੰਚ ਕਰ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:948 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr "ਸ਼ੈਸ਼ਨ ਸੇਵਾਵਾਂ"
+
+#: src/gs-details-page.c:948 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr "ਸ਼ੈਸ਼ਨ ਬਸ ਨਾਲ ਡੀ-ਬੱਸ ਸੇਵਾਵਾਂ ਲਈ ਪਹੁੰਚ ਕਰ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:949 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "ਡਿਵਾਈਸ"
+
+#: src/gs-details-page.c:949 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr "ਸਿਸਟਮ ਡਿਵਾਈਸ ਫਾਇਲਾਂ ਲਈ ਪਹੁੰਚ ਕਰ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:950 src/gs-details-page.c:951
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+#| msgid "_Remove from Folder"
+msgid "Home folder"
+msgstr "ਘਰ ਫੋਲਡਰ"
+
+#: src/gs-details-page.c:950 src/gs-details-page.c:952
+#: src/gs-details-page.c:954 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr "ਫ਼ਾਇਲਾਂ ਵੇਖ, ਸੋਧ ਅਤੇ ਬਣਾ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:951 src/gs-details-page.c:953
+#: src/gs-details-page.c:955 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr "ਫ਼ਾਇਲਾਂ ਵੇਖ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:952 src/gs-details-page.c:953
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+#| msgctxt "Menu subcategory of System"
+#| msgid "File System"
+msgid "File system"
+msgstr "ਫਾਇਲ ਸਿਸਟਮ"
+
+#: src/gs-details-page.c:954 src/gs-details-page.c:955
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+#| msgid "Download Size"
+msgid "Downloads folder"
+msgstr "ਡਾਊਨਲੋਡ ਫੋਲਡਰ"
+
+#: src/gs-details-page.c:956 src/gs-update-dialog.c:102
+#| msgid "Network Settings"
+msgid "Settings"
+msgstr "ਸੈਟਿੰਗਾਂ"
+
+#: src/gs-details-page.c:956 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr "ਕੋਈ ਵੀ ਸੈਟਿੰਗਾਂ ਵੇਖਣ ਅਤੇ ਬਦਲ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:957 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr "ਪੁਰਾਣਾ ਡਿਸਪਲੇਅ ਸਿਸਟਮ"
+
+#: src/gs-details-page.c:957 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr "ਪੁਰਾਣੇ, ਅਸੁਰੱਖਿਅਤ ਡਿਸਪਲੇਅ ਸਿਸਟਮ ਨੂੰ ਵਰਤ ਸਕਦਾ ਹੈ"
+
+#: src/gs-details-page.c:958 src/gs-update-dialog.c:104
+#| msgid "Sandboxed"
+msgid "Sandbox escape"
+msgstr "ਸੈਂਡਬਾਕਸ ਛੁਟਕਾਰਾ"
+
+#: src/gs-details-page.c:958 src/gs-update-dialog.c:104
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "ਸੈਂਡਬਾਕਸ ਤੋਂ ਛੁਟਕਾਰਾ ਪਾ ਸਕਦੀ ਹੈ ਅਤੇ ਹੋਰ ਰੋਕਾਂ ਨੂੰ ਝਾਂਸਾ ਦੇ ਸਕਦੀ ਹੈ"
+
+#: src/gs-details-page.c:973
+#| msgid "The application list is already loaded."
+msgid "This application is fully sandboxed."
+msgstr "ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸੈਂਡਬਾਕਸ ਕੀਤੀ ਹੈ।"
+
+#: src/gs-details-page.c:981
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"ਪਤਾ ਲਗਾਉਣ ਲਈ ਅਸਫ਼ਲ ਕਿ ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਸਿਸਟਮ ਦੇ ਕਿਹੜਾ ਹਿੱਸਿਆਂ ਲਈ ਪਹੁੰਚ ਕਰੇਗੀ। "
+"ਇਹ ਅਕਸਰ ਪੁਰਾਣੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨਾਲ ਹੁੰਦਾ ਹੈ।"
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1130
+msgctxt "version"
+msgid "Unknown"
+msgstr "ਅਣਜਾਣ"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1143
+msgctxt "updated"
+msgid "Never"
+msgstr "ਕਦੇ ਨਹੀਂ"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1196
+msgctxt "origin"
+msgid "Unknown"
+msgstr "ਅਣਜਾਣ"
+
+#: src/gs-details-page.c:1249
+msgid "Low"
+msgstr "ਘੱਟ"
+
+#: src/gs-details-page.c:1251
+#| msgctxt "Menu subcategory of Education"
+#| msgid "Medical"
+msgid "Medium"
+msgstr "ਮੱਧਮ"
+
+#: src/gs-details-page.c:1253
+msgid "High"
+msgstr "ਵੱਧ"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1255 src/gs-details-page.ui:961 src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "ਅਣਪਛਾਤਾ"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1591
+msgid "You need internet access to write a review"
+msgstr "ਸਮੀਖਿਆ ਲਿਖਣ ਲਈ ਤੁਹਾਨੂੰ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਚਾਹੀਦੀ ਹੈ"
+
+#: src/gs-details-page.c:1777 src/gs-details-page.c:1793
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "“%s” ਲੱਭਣ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2356
+msgid "Public domain"
+msgstr "ਪਬਲਿਕ ਡੋਮੇਨ"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2359
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2366
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2376 src/gs-details-page.ui:1205
+msgid "Free Software"
+msgstr "ਮੁਕਤ ਸਾਫਟਵੇਅਰ"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2433
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "ਵਰਤੋਂਕਾਰ ਲਈ ਅੱਗੇ ਦਿੱਤੇ ਲਸੰਸ ਦੀ ਬੰਦਿਸ਼ ਹੈ:"
+msgstr[1] "ਵਰਤੋਂਕਾਰ ਲਈ ਅੱਗੇ ਦਿੱਤੇ ਲਸੰਸਾਂ ਦੀ ਬੰਦਿਸ਼ ਹੈ:"
+
+#: src/gs-details-page.c:2460 src/gs-details-page.ui:1277
+msgid "More information"
+msgstr "ਹੋਰ ਜਾਣਕਾਰੀ"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "ਵੇਰਵਾ ਸਫ਼ਾ"
+
+#: src/gs-details-page.ui:214
+#| msgid "_Download"
+msgid "Downloading"
+msgstr "ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: src/gs-details-page.ui:253
+msgid "_Update"
+msgstr "ਅੱਪਡੇਟ ਕਰੋ(_U)"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:269
+msgid "_Add shortcut"
+msgstr "ਸ਼ਾਰਟਕੱਟ ਜੋੜੋ(_A)"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:283
+msgid "Re_move shortcut"
+msgstr "ਸ਼ਾਰਟਕੱਟ ਨੂੰ ਹਟਾਓ(_m)"
+
+#: src/gs-details-page.ui:357
+msgid "No screenshot provided"
+msgstr "ਕੋਈ ਸਕਰੀਨਸ਼ਾਟ ਨਹੀਂ ਗਿਆ"
+
+#: src/gs-details-page.ui:377
+msgid "Software Repository Included"
+msgstr "ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਸਮੇਤ"
+
+#: src/gs-details-page.ui:378
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਸ਼ਾਮਿਲ ਹੈ, ਜੋ ਕਿ ਅੱਪਡੇਟ ਦੇ ਨਾਲ ਨਾਲ ਹੋਰ"
+" ਸਾਫਟਵੇਅਰ ਵੀ "
+"ਦਿੰਦੀ ਹੈ।"
+
+#: src/gs-details-page.ui:385
+msgid "No Software Repository Included"
+msgstr "ਕੋਈ ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਸ਼ਾਮਿਲ ਨਹੀਂ ਹੈ"
+
+#: src/gs-details-page.ui:386
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ। ਇਸ ਨੂੰ ਨਵੇਂ ਵਰਜ਼ਨ ਲਈ ਅੱਪਡੇਟ"
+" ਨਹੀਂ ਕੀਤਾ "
+"ਜਾਵੇਗਾ।"
+
+#: src/gs-details-page.ui:394
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"ਇਹ ਸਾਫਟਵੇਅਰ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੀ ਡਿਸਟ੍ਰਿਬਿਊਸ਼ਨ ਵਲੋਂ ਦਿੱਤਾ ਜਾ ਰਿਹਾ ਹੈ ਅਤੇ ਬਦਲਣਾ"
+" ਨਹੀਂ ਚਾਹੀਦਾ "
+"ਹੈ।"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:401
+msgid "Software Repository Identified"
+msgstr "ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਦੀ ਪਛਾਣ ਕੀਤੀ ਗਈ"
+
+#: src/gs-details-page.ui:402
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"ਇਹ ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਨੂੰ ਜੋੜਨ ਨਾਲ ਤੁਹਾਨੂੰ ਵਾਧੂ ਸਾਫਟਵੇਅਰ ਅਤੇ ਅੱਪਗਰੇਡ ਮਿਲਣਗੇ।"
+
+#: src/gs-details-page.ui:403
+msgid "Only use software repositories that you trust."
+msgstr "ਕੇਵਲ ਉਹੀ ਸਾਫਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀ ਵਰਤੋਂ, ਜਿਸ ਉੱਤੇ ਤੁਹਾਨੂੰ ਭਰੋਸਾ ਹੈ।"
+
+#: src/gs-details-page.ui:413
+msgid "_Website"
+msgstr "ਵੈੱਬਸਾਈਟ(_W)"
+
+#: src/gs-details-page.ui:422
+msgid "_Donate"
+msgstr "ਦਾਨ ਦਿਓ(_D)"
+
+#: src/gs-details-page.ui:532
+msgid "Localized in your Language"
+msgstr "ਤੁਹਾਡੀ ਭਾਸ਼ਾ ਵਿੱਚ ਉਲੱਥਾ ਕੀਤਾ"
+
+#: src/gs-details-page.ui:543
+msgid "Documentation"
+msgstr "ਡੌਕੂਮੈਂਟੇਸ਼ਨ"
+
+#: src/gs-details-page.ui:554
+msgid "Release Activity"
+msgstr "ਰੀਲਿਜ਼ ਸਰਗਰਮੀ"
+
+#: src/gs-details-page.ui:565
+msgid "System Integration"
+msgstr "ਸਿਸਟਮ ਐਂਟੀਗਰੇਸ਼ਨ"
+
+#: src/gs-details-page.ui:576
+msgid "Sandboxed"
+msgstr "ਸੈਂਡਬਾਕਸ"
+
+#: src/gs-details-page.ui:596
+msgid "Version"
+msgstr "ਵਰਜ਼ਨ"
+
+#: src/gs-details-page.ui:632
+msgid "Age Rating"
+msgstr "ਉਮਰ ਰੇਟਿੰਗ"
+
+#: src/gs-details-page.ui:670 src/gs-details-page.ui:1363
+#| msgid "Version"
+msgid "Permissions"
+msgstr "ਮਨਜ਼ੂਰੀਆਂ"
+
+#: src/gs-details-page.ui:708
+msgid "Updated"
+msgstr "ਅੱਪਡੇਟ ਕੀਤੇ"
+
+#: src/gs-details-page.ui:742
+msgid "Category"
+msgstr "ਕੈਟਾਗਰੀ"
+
+#: src/gs-details-page.ui:779
+msgid "Installed Size"
+msgstr "ਇੰਸਟਾਲ ਹੋਇਆ ਸਾਈਜ਼"
+
+#: src/gs-details-page.ui:810
+msgid "Download Size"
+msgstr "ਡਾਊਨਲੋਡ ਸਾਈਜ਼"
+
+#: src/gs-details-page.ui:872
+msgid "Developer"
+msgstr "ਡਿਵੈਲਪਰ"
+
+#: src/gs-details-page.ui:918
+msgid "License"
+msgstr "ਲਸੰਸ"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:937
+msgid "Free"
+msgstr "ਮੁਕਤ"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:949
+msgid "Proprietary"
+msgstr "ਪਰੋਪ੍ਰੈਟਰੀ"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:999 src/gs-installed-page.c:478
+#: plugins/core/gs-desktop-common.c:317
+msgid "Add-ons"
+msgstr "ਐਡ-ਆਨ"
+
+#: src/gs-details-page.ui:1011
+msgid "Selected add-ons will be installed with the application."
+msgstr "ਚੁਣੇ ਐਡ-ਆਨ ਨੂੰ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਨਾਲ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1049
+msgid "Reviews"
+msgstr "ਪੜਤਾਲਾਂ"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1067
+msgid "_Write a Review"
+msgstr "ਪੜਤਾਲ ਲਿਖੋ(_W)"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1088
+msgid "_Show More"
+msgstr "ਹੋਰ ਵੇਖੋ(_S)"
+
+#: src/gs-details-page.ui:1216
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"ਇਸ ਦਾ ਭਾਵ ਹੈ ਕਿ ਮੁਕਤ ਸਾਫਟਵੇਅਰ ਨੂੰ ਖੁੱਲ੍ਹੇ ਤੌਰ ਉੱਤੇ ਚਲਾਇਆ, ਕਾਪੀ ਕੀਤਾ, ਵੰਡਿਆ,"
+" ਸਮਝਿਆ ਅਤੇ ਸੋਧਿਆ "
+"ਜਾ ਸਕਦਾ ਹੈ।"
+
+#: src/gs-details-page.ui:1256
+msgid "Proprietary Software"
+msgstr "ਪਰੋਪ੍ਰੈਟਰੀ ਸਾਫਟਵੇਅਰ"
+
+#: src/gs-details-page.ui:1267
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"ਇਸ ਦਾ ਭਾਵ ਹੈ ਕਿ ਸਾਫਟਵੇਅਰ ਦੀ ਮਲਕੀਅਤ ਕਿਸੇ ਵਿਅਕਤੀ ਜਾਂ ਕੰਪਨੀ ਕੋਲ ਹੈ। ਅਕਸਰ ਇਸ ਦੀ"
+" ਵਰਤੋਂ ਲਈ "
+"ਪਾਬੰਦੀਆਂ ਹੁੰਦੀਆਂ ਹਨ ਅਤੇ ਇਸ ਦੇ ਸਰੋਤ ਕੋਡ ਲਈ ਆਮ ਤੌਰ 'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਹੁੰਦੀ ਹੈ।"
+
+#: src/gs-details-page.ui:1299
+msgid "Unknown Software License"
+msgstr "ਅਣਪਛਾਤਾ ਸਾਫਟਵੇਅਰ ਲਸੰਸ"
+
+#: src/gs-details-page.ui:1310
+msgid "The license terms of this software are unknown."
+msgstr "ਇਸ ਸਾਫਟਵੇਅਰ ਦੀਆਂ ਲਸੰਸ ਸ਼ਰਤਾਂ ਅਣਪਛਾਤੀਆਂ ਹਨ।"
+
+#: src/gs-details-page.ui:1330
+msgid "The application was rated this way because it features:"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਇਸ ਢੰਗ ਨਾਲ ਰੇਟ ਕੀਤਾ ਗਿਆ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਦੇ ਫ਼ੀਚਰ ਹਨ:"
+
+#: src/gs-details-page.ui:1344
+msgid "No details were available for this rating."
+msgstr "ਇਸ ਰੇਟਿੰਗ ਲਈ ਕੋਈ ਵੇਰਵੇ ਨਹੀਂ ਉਪਲਬਧ ਹਨ।"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:152
+#| msgid "Failed to load image"
+msgid "Failed to load components"
+msgstr "ਭਾਗ ਲੋਡ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ"
+
+#: src/gs-editor.c:378
+msgid "CSS validated OK!"
+msgstr "CSS ਵੈਧਤਾ ਠੀਕ ਹੈ!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:645 src/gs-editor.c:660
+msgid "Failed to load file"
+msgstr "ਫਾਇਲ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:704 src/gs-editor.c:1052
+msgid "Unsaved changes"
+msgstr "ਨਾ-ਸੰਭਾਲੀਆਂ ਤਬਦੀਲੀਆਂ"
+
+#: src/gs-editor.c:706
+msgid "The application list is already loaded."
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਸੂਚੀ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਕੀਤੀ ਹੈ।"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:710
+msgid "Merge documents"
+msgstr "ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਮਿਲਾਓ"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:714 src/gs-editor.c:1057
+msgid "Throw away changes"
+msgstr "ਤਬਦੀਲੀਆਂ ਨੂੰ ਛੱਡੋ"
+
+#. import the new file
+#: src/gs-editor.c:726
+msgid "Open AppStream File"
+msgstr "ਐਪਸਟਰੀਮ ਫਾਇਲ ਨੂੰ ਖੋਲ੍ਹੋ"
+
+#: src/gs-editor.c:730
+msgid "_Open"
+msgstr "ਖੋਲ੍ਹੋ(_O)"
+
+#: src/gs-editor.c:759
+#| msgid "Open AppStream File"
+msgid "Save AppStream File"
+msgstr "ਐਪਸਟਰੀਮ ਫਾਇਲ ਨੂੰ ਸੰਭਾਲੋ"
+
+#: src/gs-editor.c:763
+msgid "_Save"
+msgstr "ਸੰਭਾਲੋ(_S)"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:784
+msgid "Failed to save file"
+msgstr "ਫਾਇਲ ਸੰਭਾਲਣ ਲਈ ਅਸਫ਼ਲ ਹੈ"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:854
+#, c-format
+msgid "%s banner design deleted."
+msgstr "%s ਬੈਨਰ ਡਿਜ਼ਾਇਨ ਹਟਾਇਆ।"
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:857
+msgid "Banner design deleted."
+msgstr "ਬੈਨਰ ਡਿਜ਼ਾਇਨ ਹਟਾਇਆ।"
+
+#: src/gs-editor.c:1054
+msgid "The application list has unsaved changes."
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਸੂਚੀ ਵਿੱਚ ਨਾ-ਸੰਭਾਲੀਆਂ ਤਬਦੀਲੀਆਂ ਹਨ।"
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1285
+msgid "Use verbose logging"
+msgstr "ਵੇਰਵੇ ਸਮੇਤ ਲਾਗ ਵਰਤੋਂ"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1293
+msgid "GNOME Software Banner Designer"
+msgstr "ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਬੈਨਰ ਡਿਜ਼ਾਇਨਰ"
+
+#: src/gs-editor.ui:53 src/gs-editor.ui:62
+msgid "No Designs"
+msgstr "ਕੋਈ ਡਿਜਾਇਨ ਨਹੀਂ"
+
+#: src/gs-editor.ui:137
+msgid "Error message here"
+msgstr "ਇੱਥੇ ਗਲਤੀ ਸੁਨੇਹੇ"
+
+#: src/gs-editor.ui:196
+msgid "App ID"
+msgstr "ਐਪ ID"
+
+#: src/gs-editor.ui:253 src/gs-review-dialog.ui:109
+msgid "Summary"
+msgstr "ਸੰਖੇਪ ਜਾਣਕਾਰੀ"
+
+#: src/gs-editor.ui:278
+msgid "Editor’s Pick"
+msgstr "ਐਡੀਟਰ ਦੀ ਚੋਣ"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:287
+msgid "Category Featured"
+msgstr "ਕੈਟਾਗਰੀ ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#. button in the info bar
+#: src/gs-editor.ui:336
+msgid "Undo"
+msgstr "ਵਾਪਸ"
+
+#: src/gs-editor.ui:371 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "ਬੈਨਰ ਡਿਜ਼ਾਇਨਰ"
+
+#: src/gs-editor.ui:392
+msgid "New Banner"
+msgstr "ਨਵਾਂ ਬੈਨਰ"
+
+#: src/gs-editor.ui:452
+msgid "Import from file"
+msgstr "ਫਾਇਲ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ"
+
+#: src/gs-editor.ui:461
+msgid "Export to file"
+msgstr "ਫਾਇਲ ਲਈ ਐਕਸਪੋਰਟ ਕਰੋ"
+
+#: src/gs-editor.ui:470
+msgid "Delete Design"
+msgstr "ਡਿਜ਼ਾਇਨ ਨੂੰ ਹਟਾਓ"
+
+#: src/gs-editor.ui:491
+msgid "Featured App"
+msgstr "ਖਾਸ ਐਪ"
+
+#: src/gs-editor.ui:500
+msgid "OS Upgrade"
+msgstr "ਓ.ਸਿ. ਅੱਪਗਰੇਡ"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:133
+msgid " and "
+msgstr " ਅਤੇ "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:136
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:162
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s ਸਕ੍ਰਿਫਤ ਲਈ ਮੌਜੂਦ ਫ਼ੋਂਟ"
+msgstr[1] "%s ਸਕ੍ਰਿਪਟਾਂ ਲਈ ਮੌਜੂਦ ਫ਼ੋਂਟ"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:170
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s ਲਈ ਮੌਜੂਦ ਸਾਫਟਵੇਅਰ"
+msgstr[1] "%s ਲਈ ਮੌਜੂਦ ਸਾਫਟਵੇਅਰ"
+
+#: src/gs-extras-page.c:212
+msgid "Unable to Find Requested Software"
+msgstr "ਮੰਗ ਕੀਤੇ ਸਾਫਟਵੇਅਰ ਨੂੰ ਲੱਭਣ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:317
+#, c-format
+msgid "%s not found"
+msgstr "%s ਨਹੀਂ ਲੱਭਿਆ"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:321
+msgid "on the website"
+msgstr "ਵੈੱਬਸਾਈਟ ਉੱਤੇ"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "%s ਫਾਇਲ ਦੇਣ ਵਾਲੀ ਕੋਈ ਵੀ ਐਪਲੀਕੇਸ਼ਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:332 src/gs-extras-page.c:343 src/gs-extras-page.c:354
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"%s ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਾਂ ਦਿਓ ਕਿ ਕਿਵੇਂ ਗੁੰਮ ਹੋਈਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਲੱਭਿਆ"
+" ਜਾ ਸਕਦਾ ਹੈ %s।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339 src/gs-extras-page.c:361
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s ਸਹਿਯੋਗ ਲਈ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਮੌਜੂਦ ਹੈ।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350
+#, c-format
+msgid "%s is not available."
+msgstr "%s ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"%s ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਾਂ ਦਿਓ ਕਿ ਕਿਵੇਂ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਜਾ ਸਕਦੀ ਹੈ, ਜੋ ਕਿ"
+" ਇਸ ਫਾਰਮੈਟ "
+"ਲਈ ਸਹਾਇਕ ਹੋ ਸਕਦੀ ਹੈ %s।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:372
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s ਸਕ੍ਰਿਪਟ ਸਹਿਵੋਗ ਲਈ ਕੋਈ ਫ਼ੋਂਟ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"%s ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਾਂ ਦਿਓ ਕਿ ਕਿਵੇਂ ਹੋਰ ਫ਼ੋਂਟ ਲੱਭੇ ਜਾ ਸਕਦੇ ਹਨ %s।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s ਫਾਰਮੈਟ ਲਈ ਕੋਈ ਐਡ-ਆਨ ਕੋਡਕ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"%s ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਵਾਂ ਦਿਓ ਕਿ ਇਸ ਫਾਰਮੈਟ ਨੂੰ ਚਲਾਉਣ ਵਾਲੇ ਕੋਡਕ ਨੂੰ"
+" ਲੱਭਿਆ ਜਾ ਸਕਦਾ "
+"ਹੈ %s।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s ਸਹਿਯੋਗ ਲਈ ਕੋਈ ਪਲਾਜ਼ਮਾ ਸਰੋਤ ਮੌਜੂਦ ਨਹੀਂ ਹਨ।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"%s ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਾਂ ਦਿਓ ਕਿ ਕਿਵੇਂ ਹੋਰ ਪਲਾਜ਼ਮਾ ਸਰੋਤ ਲੱਭੇ ਜਾ ਸਕਦੇ ਹਨ"
+" %s।"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s ਲਈ ਕੋਈ ਪਰਿੰਟਰ ਡਰਾਇਵਰ ਮੌਜੂਦ ਨਹੀਂ ਹਨ।"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"%s ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਾਂ ਕਿ ਇਸ ਪਰਿੰਟਰ ਲਈ ਸਹਾਇਕ ਡਰਾਇਵਰ ਕਿਵੇਂ ਲਿਆ ਜਾ"
+" ਸਕਦਾ ਹੈ, "
+"ਬਾਰੇ %s ਲੱਭਿਆ ਜਾ ਸਕਦਾ ਹੈ।"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:453
+msgid "this website"
+msgstr "ਇਹ ਵੈੱਬਸਾਈਟ"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:457
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"ਅਫ਼ਸੋਸ, ਜਿਸ %s ਨੂੰ ਤੁਸੀਂ ਲੱਭਦੇ ਸੀ, ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ %s ਨੂੰ"
+" ਵੇਖੋ।"
+msgstr[1] ""
+"ਅਫ਼ਸੋਸ, ਜਿਸ %s ਨੂੰ ਤੁਸੀਂ ਲੱਭਦੇ ਸੀ, ਨਹੀਂ ਲੱਭੇ ਜਾ ਸਕੇ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ %s ਨੂੰ"
+" ਵੇਖੋ।"
+
+#: src/gs-extras-page.c:525 src/gs-extras-page.c:581 src/gs-extras-page.c:620
+msgid "Failed to find any search results"
+msgstr "ਕੋਈ ਵੀ ਖੋਜ ਨਤੀਜੇ ਲੱਭਣ ਲਈ ਫੇਲ੍ਹ"
+
+#: src/gs-extras-page.c:808
+#, c-format
+msgid "%s file format"
+msgstr "%s ਫਾਇਲ ਫਾਰਮੈਟ"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "ਕੋਡਕਸ ਸਫ਼ਾ"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "ਜੀ ਆਇਆਂ ਨੂੰ"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "ਸਾਫਟਵੇਅਰ ਉੱਤੇ ਜੀ ਆਇਆਂ ਨੂੰ"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"ਸਾਫਟਵੇਅਰ ਤੁਹਾਨੂੰ ਤੁਹਾਡੀ ਲੋੜ ਮੁਤਾਬਕ ਸਭ ਸਾਫਟਵੇਅਰ ਇੱਕ ਹੀ ਥਾਂ ਤੋਂ ਇੰਸਟਾਲ ਕਰਨ"
+" ਦਿੰਦਾ ਹੈ। ਸਾਡੀਆਂ "
+"ਸਿਫਾਰਸ਼ਾਂ ਵੇਖੋ, ਕੈਟਾਗਰੀਆਂ ਦੀ ਝਲਕ ਵੇਖੋ ਜਾਂ ਤੁਹਾਡੇ ਵਲੋਂ ਚਾਹੀਦੀਆਂ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਖੋਜ"
+" ਕਰੋ।"
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "ਆਓ ਖਰੀਦਦਾਰੀ ਕਰੀਏ(_L)"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:367
+msgid "Spacing"
+msgstr "ਫਾਸਲਾ"
+
+#: src/gs-hiding-box.c:368
+msgid "The amount of space between children"
+msgstr "ਚੈਲਡਰਨ ਵਿਚਾਲੇ ਕਿੰਨਾ ਫਾਸਲਾ ਹੈ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr "ਹਟਾਇਆ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "ਇੰਸਟਾਲ ਹੈ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "ਅੱਪਡੇਟ ਕੀਤਾ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "ਅਣਜਾਣ"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "ਅਤੀਤ"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:474
+msgid "System Applications"
+msgstr "ਸਿਸਟਮ ਐਪਲੀਕੇਸ਼ਨ"
+
+#: src/gs-installed-page.c:608
+msgid "Click on items to select them"
+msgstr "ਆਈਟਮਾਂ ਨੂੰ ਚੁਣਨ ਲਈ ਉਹਨਾਂ ਉੱਤੇ ਕਲਿੱਕ ਕਰੋ"
+
+#: src/gs-installed-page.c:812
+msgid "Select"
+msgstr "ਚੁਣੋ"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "ਇੰਸਟਾਲ ਸਫ਼ਾ"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "...ਫੋਲਡਰ ਵਿੱਚ ਜੋੜੋ(_A)"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "...ਫੋਲਡਰ ਵਿੱਚ ਭੇਜੋ(_M)"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "ਫੋਲਡਰ ਤੋਂ ਹਟਾਓ(_R)"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61 src/gs-loading-page.c:65
+msgid "Software catalog is being downloaded"
+msgstr "ਸਾਫਟਵੇਅਰ ਕੈਟਾਲਾਗ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "ਸਫ਼ਾ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "ਸ਼ੁਰੂਆਤ ਸਮੇਂ…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "ਨਿਯਮਿਤ ਸਫ਼ਾ"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "ਨਿਯਮਿਤ ਕਰਨ ਲਈ ਕੋਈ ਸਮੀਖਿਆ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:80
+#| msgid "System"
+msgid "system"
+msgstr "ਸਿਸਟਮ"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:83
+msgid "user"
+msgstr "ਵਰਤੋਂਕਾਰ"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "ਫਾਰਮੈਟ"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+#| msgid "Installing"
+msgid "Installation"
+msgstr "ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "ਬਰਾਂਚ"
+
+#. add button
+#: src/gs-overview-page.c:312
+msgid "More…"
+msgstr "…ਹੋਰ"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:562
+msgid "Recommended Audio & Video Applications"
+msgstr "ਸਿਫਾਰਸ਼ ਕੀਤੀਆਂ ਆਡੀਓ ਤੇ ਵੀਡੀਓ ਐਪਲੀਕੇਸ਼ਨਾਂ"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:567
+msgid "Recommended Games"
+msgstr "ਸਿਫਾਰਸ਼ੀ ਖੇਡਾਂ"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:572
+msgid "Recommended Graphics Applications"
+msgstr "ਸਿਫਾਰਸ਼ੀ ਗਰਾਫਿਕਸ ਐਪਲੀਕੇਸ਼ਨ"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:577
+msgid "Recommended Productivity Applications"
+msgstr "ਸਿਫਾਰਸ਼ ਕੀਤੀਆਂ ਉਤਪਾਦਨ ਐਪਲੀਕੇਸ਼ਨ"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:925 src/gs-repos-dialog.c:822
+msgid "Access additional software from selected third party sources."
+msgstr "ਚੁਣੇ ਗਏ ਤੀਜੀ ਧਿਰ ਸਰੋਤਾਂ ਤੋਂ ਵਧੀਕ ਸਾਫਟਵੇਅਰਾਂ ਲਈ ਪਹੁੰਚ।"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:929 src/gs-repos-dialog.c:826
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"ਇਹ ਸਾਫਟਵੇਅਰਾਂ ਵਿੱਚੋਂ ਕੁਝ ਨਿੱਜੀ ਮਲਕੀਅਤ ਵਾਲੇ ਹਨ ਅਤੇ ਇਸਕਰਕੇ ਵਰਤਣ, ਸਾਂਝਾ ਕਰਨਾ ਅਤੇ"
+" ਸਰੋਤ ਕੋਡ ਲਈ "
+"ਪਹੁੰਚ ਉੇੱਤੇ ਪਾਬੰਦੀਆਂ ਲੱਗੀਆਂ ਹਨ।"
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:934 src/gs-repos-dialog.c:831
+msgid "Find out more…"
+msgstr "…ਹੋਰ ਲੱਭੋ"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:942 src/gs-repos-dialog.c:239
+msgid "Enable"
+msgstr "ਸਮਰੱਥ ਕਰੋ"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "ਸਾਰ ਸਫ਼ਾ"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "ਸੁਤੰਤਰ-ਧਿਰ ਸਾਫ਼ਟਵੇਅਰ ਰਿਪੋਜ਼ਟਰੀਆਂ ਸਮਰੱਥ ਕਰਨੀਆਂ ਹਨ?"
+
+#: src/gs-overview-page.ui:83
+#| msgid "Featured Application"
+msgid "Featured Applications"
+msgstr "ਖਾਸ ਐਪਲੀਕੇਸ਼ਨ"
+
+#: src/gs-overview-page.ui:116
+msgid "Previous"
+msgstr "ਪਿੱਛੇ"
+
+#: src/gs-overview-page.ui:141
+msgid "Next"
+msgstr "ਅੱਗੇ"
+
+#: src/gs-overview-page.ui:163
+msgid "Categories"
+msgstr "ਕੈਟਾਗਰੀਆਂ"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:193
+msgid "Editor’s Picks"
+msgstr "ਐਡੀਟਰ ਦੀ ਚੋਣ"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:219
+msgid "Recent Releases"
+msgstr "ਤਾਜ਼ਾ ਰੀਲਿਜ਼"
+
+#: src/gs-overview-page.ui:289
+msgid "No Application Data Found"
+msgstr "ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਡਾਟਾ ਨਹੀਂ ਲੱਭਿਆ"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:264
+#, c-format
+msgid "Prepare %s"
+msgstr "%s ਲਈ ਤਿਆਰੀ"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:401
+#, c-format
+#| msgid "Are you sure you want to remove the %s source?"
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "ਕੀ ਤੁਸੀਂ %s ਰਿਪੋਜ਼ਟਰੀ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:405
+#, c-format
+#| msgid ""
+#| "All applications from %s will be removed, and you will have to re-install "
+#| "the source to use them again."
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"%s ਤੋਂ ਸਭ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਹਟਾਇਆ ਜਾਵੇਗਾ ਅਤੇ ਤੁਹਾਨੂੰ ਇਹਨਾਂ ਨੂੰ ਵਰਤਣ ਲਈ ਰਿਪੋਜ਼ਟਰੀ"
+" ਤੋਂ ਮੁੜ ਇੰਸਟਾਲ ਕਰਨਾ "
+"ਪਵੇਗਾ।"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:413
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "ਕੀ ਤੁਸੀਂ %s ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:416
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s ਨੂੰ ਹਟਾਇਆ ਜਾਵੇਗਾ ਅਤੇ ਤੁਹਾਨੂੰ ਇਸ ਨੂੰ ਵਰਤਣ ਲਈ ਫੇਰ ਇੰਸਟਾਲ ਕਰਨਾ ਪਵੇਗਾ।"
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:52 src/gs-summary-tile.c:96
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (ਇੰਸਟਾਲ ਹੈ)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "ਅੱਪਡੇਟ ਪਸੰਦਾਂ"
+
+#: src/gs-prefs-dialog.ui:43
+#| msgid "Application Updates"
+msgid "Automatic Updates"
+msgstr "ਆਪਣੇ-ਆਪ ਅੱਪਡੇਟ ਕਰੋ"
+
+#: src/gs-prefs-dialog.ui:70
+#| msgid "Whether to automatically refresh when on a metered connection"
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "ਜਦੋਂ ਮੋਬਾਈਲ ਮੀਟਰ ਵਾਲਾ ਕਨੈਕਸ਼ਨ ਹੋਵੇ ਤਾਂ ਆਪਣੇ-ਆਪ ਅੱਪਡੇਟ ਕਰਨਾ ਅਸਮਰੱਥ ਹੈ।"
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "ਆਪਣੇ-ਆਪ ਅੱਪਡੇਟ ਸੂਚਨਾਵਾਂ"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "ਜਦੋਂ ਅੱਪਡੇਟਾਂ ਨੂੰ ਆਪਣੇ-ਆਪ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੋਵੇ ਤਾਂ ਸੂਚਨਾ ਵੇਖਾਓ।"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:113
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"ਇਸ ਵੇਲੇ ਇੰਸਟਾਲ ਹੋਏ ਕੁਝ ਸਾਫ਼ਟਵੇਅਰ %s ਨਾਲ ਮਾਫ਼ਕ ਨਹੀਂ ਹਨ। ਜੇ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਿਆ"
+" ਤਾਂ ਅੱਪਗਰੇਡ ਕਰਨ ਦੇ "
+"ਦੌਰਾਨ ਅੱਗੇ ਦਿੱਤੇ ਆਪਣੇ-ਆਪ ਹਟਾਏ ਜਾਣਗੇ:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "ਨਾ-ਮਾਫ਼ਕ ਸਾਫਟਵੇਅਰ"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "ਜਾਰੀ ਰੱਖੋ(_C)"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:96
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u ਐਪਲੀਕੇਸ਼ਨ ਇੰਸਟਾਲ ਹੈ"
+msgstr[1] "%u ਐਪਲੀਕੇਸ਼ਨ ਇੰਸਟਾਲ ਹਨ"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:103
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u ਐਡ-ਆਨ ਇੰਸਟਾਲ ਹੈ"
+msgstr[1] "%u ਐਡ-ਆਨ ਇੰਸਟਾਲ ਹਨ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:111
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u ਐਪਲੀਕੇਸ਼ਨ"
+msgstr[1] "%u ਐਪਲੀਕੇਸ਼ਨਾਂ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u ਐਡ-ਆਨ"
+msgstr[1] "%u ਐਡ-ਆਨ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:124
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s ਅਤੇ %s ਇੰਸਟਾਲ ਹੈ"
+msgstr[1] "%s ਅਤੇ %s ਇੰਸਟਾਲ ਹਨ"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:299
+#, c-format
+msgid "Remove “%s”?"
+msgstr "“%s” ਨੂੰ ਹਟਾਉਣਾ ਹੈ?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:304
+#, c-format
+msgid "Disable “%s”?"
+msgstr "“%s” ਨੂੰ ਅਸਮਰੱਥ ਕਰਨਾ ਹੈ?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:308
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"ਇਸ ਰਿਪੋਜ਼ਟਰੀ ਤੋਂ ਇੰਸਟਾਲ ਕੀਤੇ ਸਾਫ਼ਟਵੇਅਰ ਅੱਪਡੇਟ, ਸੁਰੱਖਿਆ ਸੁਧਾਰਾਂ ਸਮੇਤ, ਪ੍ਰਾਪਤ"
+" ਨਹੀਂ ਕਰ ਸਕਣਗੇ।"
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:326
+msgid "Disable"
+msgstr "ਅਸਮਰੱਥ ਕਰੋ"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:735
+msgid "the operating system"
+msgstr "ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:801 src/gs-repos-dialog.c:837
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "ਇਹ ਰਿਪੋਜ਼ਟਰੀਆਂ %s ਵਲੋਂ ਦਿੱਤੇ ਮੂਲ ਸਾਫਟਵੇਅਰਾਂ ਦਾ ਸਹਾਇਕ ਹਿੱਸਾ ਹਨ।"
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:819
+msgid "Third Party Repositories"
+msgstr "ਤੀਜੀ ਧਿਰ ਰਿਪੋਜ਼ਟਰੀਆਂ"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "ਕੋਈ ਹੋਰ ਰਿਪੋਜ਼ਟਰੀਆਂ ਨਹੀਂ"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "ਸਮਰੱਥ ਕਰੋ(_E)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "…ਹਟਾਓ(_R)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "ਅਸਮਰੱਥ ਕਰੋ(_D)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "ਸਮਰੱਥ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "ਅਸਮਰੱਥ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "ਸਮਰੱਥ ਹੈ"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "ਅਸਮਰੱਥ ਹੈ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "ਇਸ ਨਾਲ ਨਫ਼ਰਤ ਹੈ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "ਇਹ ਪਸੰਦ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "ਇਹ ਠੀਕ ਹੈ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "ਇਹ ਪਸੰਦ ਹੈ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "ਇਸ ਨਾਲ ਪਿਆਰ ਹੈ"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr "ਪੜਤਾਲ ਲਿਖਣ ਲਈ ਕੁਝ ਹੋਰ ਸਮਾਂ ਲਗਾਓ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr "ਤਾਰਾ ਲਗਾ ਕੇ ਦਰਜਾ ਦਿਓ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr "ਸਾਰ ਬਹੁਤ ਛੋਟਾ ਹੈ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr "ਸਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr "ਵਰਣਨ ਬਹੁਤ ਛੋਟਾ ਹੈ"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr "ਵਰਣਨ ਬਹੁਤ ਲੰਮਾ ਹੈ"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "ਪੜਤਾਲ ਨੂੰ ਭੇਜੋ"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "ਭੇਜੋ(_P)"
+
+#: src/gs-review-dialog.ui:75
+msgid "Rating"
+msgstr "ਰੇਟਿੰਗ"
+
+#: src/gs-review-dialog.ui:119
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"ਆਪਣੀ ਪੜਤਾਲ ਬਾਰੇ ਸੰਖੇਪ ਜਾਣਕਾਰੀ ਦਿਓ, ਜਿਵੇਂ ਕਿ: “ਵਧੀਆ ਐਪ, ਸਿਫ਼ਾਰਸ਼ ਕਰਦੇ ਹਾਂ“।"
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:144
+msgctxt "app review"
+msgid "Review"
+msgstr "ਪੜਤਾਲ"
+
+#: src/gs-review-dialog.ui:154
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "ਐਪ ਬਾਰੇ ਤੁਸੀਂ ਕੀ ਸੋਚਦੇ ਹੋ? ਆਪਣੇ ਪੱਖ ਬਾਰੇ ਕੁਝ ਕਾਰਨ ਦਿਉ।"
+
+#: src/gs-review-dialog.ui:186
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"<a href=\"https://odrs.gnome.org/privacy\">ਪਰਦੇਦਾਰੀ ਨੀਤੀ</a> ਵਿੱਚ ਵੇਖੋ ਕਿ "
+"ਕਿਹੜਾ ਡਾਟਾ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ।"
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "ਕੁੱਲ ਰੇਟਿੰਗਾਂ 'ਚ"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:220
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"ਤੁਸੀਂ ਪੜਤਾਲਾਂ ਦੇ ਨਿੰਦਾਪੂਰਨ, ਉਜੱਡ, ਅਸ਼ਲੀਲ ਜਾਂ ਪੱਖਪਾਤੀ ਰਵੱਈਏ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇ"
+" ਸਕਦੇ ਹੋ।"
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:225
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"ਇੱਕ ਵਾਰ ਜਾਣਕਾਰ ਦੇਣ ਉੱਤੇ, ਪੜਤਾਲ ਨੂੰ ਪਰਸ਼ਾਸ਼ਕ ਵਲੋਂ ਜਾਂਚੇ ਜਾਣ ਤੱਕ ਓਹਲੇ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:239
+msgid "Report Review?"
+msgstr "ਪੜਤਾਲ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇਣੀ ਹੈ?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:243
+msgid "Report"
+msgstr "ਜਾਣਕਾਰੀ ਦਿਓ"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "ਕੀ ਇਹ ਪੜਤਾਲ ਤੁਹਾਡੇ ਲਈ ਫਾਇਦੇਮੰਦ ਸੀ?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "ਹਾਂ"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "ਨਹੀਂ"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "ਮੀਹ"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "…ਜਾਣਕਾਰੀ ਦਿਓ"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "... ਨੂੰ ਹਟਾਓ"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:235
+msgid "Screenshot not found"
+msgstr "ਸਕਰੀਨਸ਼ਾਟ ਨਹੀਂ ਲੱਭਿਆ"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:250
+msgid "Failed to load image"
+msgstr "ਚਿੱਤਰ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:375
+msgid "Screenshot size not found"
+msgstr "ਸਕਰੀਨਸ਼ਾਟ ਆਕਾਰ ਨਹੀਂ ਲੱਭਿਆ"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:405
+msgid "Could not create cache"
+msgstr "ਕੈਸ਼ ਨਹੀਂ ਬਣਾਈ ਜਾ ਸਕਦੀ ਹੈ"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:465
+msgid "Screenshot not valid"
+msgstr "ਸਕਰੀਨਸ਼ਾਟ ਠੀਕ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:480
+msgid "Screenshot not available"
+msgstr "ਸਕਰੀਨਸ਼ਾਟ ਨਹੀਂ ਹੈ"
+
+#: src/gs-screenshot-image.c:532
+msgid "Screenshot"
+msgstr "ਸਕਰੀਨਸ਼ਾਟ"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:142
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u ਹੋਰ ਮੇਲ"
+msgstr[1] "%u ਹੋਰ ਮੇਲ"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "ਖੋਜ ਸਫ਼ਾ"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਲੱਭੀ"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:847 src/gs-shell.c:852 src/gs-shell.c:867 src/gs-shell.c:871
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:918
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "%s ਤੋਂ ਫਿਰਮਵੇਅਰ ਅੱਪਡੇਟ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:924
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s ਤੋਂ ਅੱਪਡੇਟਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:931 src/gs-shell.c:976
+msgid "Unable to download updates"
+msgstr "ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:937
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਦੀ ਲੋੜ ਸੀ, ਪਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:946
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "%s ਤੋਂ ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਲੋੜ ਮੁਤਾਬਕ ਡਿਸਕ ਥਾਂ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:951
+msgid "Unable to download updates: not enough disk space"
+msgstr "ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਲੋੜ ਮੁਤਾਬਕ ਡਿਸਕ ਥਾਂ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:958
+msgid "Unable to download updates: authentication was required"
+msgstr "ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:963
+msgid "Unable to download updates: authentication was invalid"
+msgstr "ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਅਢੁੱਕਵੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:968
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਤੁਹਾਨੂੰ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:979
+msgid "Unable to get list of updates"
+msgstr "ਅੱਪਡੇਟਾਂ ਦੀ ਸੂਚੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1022
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "%2$s ਤੋਂ ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ %1$s ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1028
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ %1$s ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1041
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "ਰਨਟਾਈਨ %2$s ਮੌਜੂਦ ਨਾ ਹੋਣ ਕਰਕੇ %1$s ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1047
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "ਸਹਾਇਕ ਨਾ ਹੋਣ ਕਰਕੇ %s ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1054
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਦੀ ਲੋੜ ਸੀ, ਪਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1060
+msgid "Unable to install: the application has an invalid format"
+msgstr "ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਐਪਲੀਕੇਸ਼ਣ ਦਾ ਫਾਰਮੈਟ ਅਢੁੱਕਵਾਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1065
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਲੋੜ ਮੁਤਾਬਕ ਡਿਸਕ ਥਾਂ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1072
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1079
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਗ਼ਲਤ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1086
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"%s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਤੁਹਾਨੂੰ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1094
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "%s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: AC ਪਾਵਰ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1101
+#, c-format
+#| msgid "Unable to install %s: AC power is required"
+msgid "Unable to install %s: The battery level is too low"
+msgstr "%s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਬੈਟਰੀ ਪੱਧਰ ਬਹੁਤ ਘੱਟ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1110
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1157
+#, c-format
+#| msgid "Unable to update %s as download failed"
+msgid "Unable to update %s from %s as download failed"
+msgstr "ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ %2$s ਤੋਂ %1$s ਅੱਪਡੇਟ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1164
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ %1$s ਅੱਪਡੇਟ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1171
+#, c-format
+#| msgid "Unable to install %s as download failed"
+msgid "Unable to install updates from %s as download failed"
+msgstr "ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ %1$s ਤੋਂ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1175
+#, c-format
+#| msgid "Unable to install %s as download failed"
+msgid "Unable to install updates as download failed"
+msgstr "ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1181
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਦੀ ਲੋੜ ਸੀ, ਪਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1191
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਲੋੜੀਂਦੀ ਡਿਸਕ ਥਾਂ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1196
+#, c-format
+#| msgid "Unable to install %s: not enough disk space"
+msgid "Unable to install updates: not enough disk space"
+msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਲੋੜ ਮੁਤਾਬਕ ਡਿਸਕ ਥਾਂ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1206
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "%s ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1211
+#, c-format
+#| msgid "Unable to install %s: authentication was required"
+msgid "Unable to install updates: authentication was required"
+msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1220
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਅਯੋਗ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1225
+#, c-format
+#| msgid "Unable to install %s: authentication was invalid"
+msgid "Unable to install updates: authentication was invalid"
+msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਅਯੋਗ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1234
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"%s ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਤੁਹਾਨੂੰ ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1240
+#, c-format
+#| msgid "Unable to update %s: you do not have permission to update software"
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+" ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਤੁਹਾਨੂੰ ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1250
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "%s ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: AC ਪਾਵਰ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1256
+#, c-format
+#| msgid "Unable to install %s: AC power is required"
+msgid "Unable to install updates: AC power is required"
+msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: AC ਪਾਵਰ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1265
+#, c-format
+#| msgid "Unable to update %s: AC power is required"
+msgid "Unable to update %s: The battery level is too low"
+msgstr "%s ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਬੈਟਰੀ ਪੱਧਰ ਬਹੁਤ ਘੱਟ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1271
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਬੈਟਰੀ ਪੱਧਰ ਬਹੁਤ ਘੱਟ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1282
+#, c-format
+msgid "Unable to update %s"
+msgstr "%s ਅੱਪਡੇਟ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1285
+#, c-format
+#| msgid "Unable to install %s"
+msgid "Unable to install updates"
+msgstr "ਅੱਪਡੇਟਾਂ ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1328
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%2$s ਤੋਂ %1$s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1333
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਹਿਣ ਕਰਕੇ %s ਅੱਪਗਰੇਡ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1342
+#, c-format
+#| msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"%s ਲਈ ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਦੀ ਲੋੜ ਸੀ, ਪਰ ਉਪਲਬਧ ਨਹੀਂ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1351
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਲੋੜੀਂਦੀ ਡਿਸਕ ਥਾਂ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1359
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1366
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਗ਼ਲਤ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1373
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਤੁਹਾਨੂੰ ਅੱਪਗਰੇਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1380
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: AC ਪਾਵਰ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1387
+#, c-format
+#| msgid "Unable to upgrade to %s: AC power is required"
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "%s ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਬੈਟਰੀ ਪੱਧਰ ਬਹੁਤ ਘੱਟ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1396
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "%s ਲਈ ਅੱਪਗਰੇਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1434
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1440
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਪਰਮਾਣਕਿਤਾ ਗ਼ਲਤ ਸੀ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1446
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਤੁਹਾਨੂੰ ਸਾਫਟਵੇਅਰ ਹਟਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1453
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ: AC ਪਾਵਰ ਚਾਹੀਦੀ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1460
+#, c-format
+#| msgid "Unable to remove %s: you do not have permission to remove software"
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "%s ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ: ਬੈਟਰੀ ਪੱਧਰ ਬਹੁਤ ਘੱਟ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1472
+#, c-format
+msgid "Unable to remove %s"
+msgstr "%s ਹਟਾਉਣ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1515
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s ਚਲਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1522 src/gs-shell.c:1573 src/gs-shell.c:1614
+#: src/gs-shell.c:1662
+msgid "Not enough disk space — free up some space and try again"
+msgstr "ਲੋੜ ਮੁਤਾਬਕ ਡਿਸਕ ਥਾਂ ਨਹੀਂ ਹੈ — ਕੁਝ ਹੋਰ ਥਾਂ ਖਾਲੀ ਕਰਕੇ ਕੋਸ਼ਿਸ਼ ਕਰੋ"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1533 src/gs-shell.c:1584 src/gs-shell.c:1625
+#: src/gs-shell.c:1696
+msgid "Sorry, something went wrong"
+msgstr "ਅਫਸੋਸ, ਕੁਝ ਗ਼ਲਤ ਵਾਪਰਿਆ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1565
+#| msgid "Unable to install %s as not supported"
+msgid "Failed to install file: not supported"
+msgstr "ਫਾਇਲ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਫ਼ਲ: ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1569
+msgid "Failed to install file: authentication failed"
+msgstr "ਫਾਇਲ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਫ਼ਲ: ਪਰਮਾਣਕਿਤਾ ਅਸਫ਼ਲ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1606
+#| msgid "Unable to install %s as not supported"
+msgid "Failed to install: not supported"
+msgstr "ਫਾਇਲ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਫ਼ਲ: ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1610
+#| msgid "Failed to install file: authentication failed"
+msgid "Failed to install: authentication failed"
+msgstr "ਫਾਇਲ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਫ਼ਲ: ਪਰਮਾਣਕਿਤਾ ਅਸਫ਼ਲ ਹੈ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1656
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s ਨਾਲ ਸੰਪਰਕ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1671
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "ਨਵੀਆਂ ਪਲੱਗਇਨਾਂ ਵਰਤਣ ਵਾਸਤੇ %s ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1676
+msgid "This application needs to be restarted to use new plugins."
+msgstr "ਨਵੀਆਂ ਪਲੱਗਇਨਾਂ ਵਰਤਣ ਲਈ ਇਸ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1683
+msgid "AC power is required"
+msgstr "AC ਊਰਜਾ ਦੀ ਲੋੜ ਹੈ"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1687
+#| msgid "The summary is too long"
+msgid "The battery level is too low"
+msgstr "ਬੈਟਰੀ ਪੱਧਰ ਬਹੁਤ ਘੱਟ ਹੈ"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "ਸਰੋਤ: %s"
+
+#: src/gs-summary-tile.c:101
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ)"
+
+#: src/gs-summary-tile.c:106
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (ਹਟਾਇਆ ਜਾ ਰਿਹਾ ਹੈ)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr "ਸਭ ਹਟਾਓ(_R)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:187
+msgid "No update description available."
+msgstr "ਕੋਈ ਅੱਪਡੇਟ ਵੇਰਵਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:291
+#, c-format
+msgid "Installed on %s"
+msgstr "%s ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:311
+msgid "Installed Updates"
+msgstr "ਇੰਸਟਾਲ ਹੋਏ ਅੱਪਡੇਟ"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:527
+msgid "Additions"
+msgstr "ਹੋਰ"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:531
+msgid "Removals"
+msgstr "ਹਟਾਓ"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:535
+msgid "Updates"
+msgstr "ਅੱਪਡੇਟ"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:539
+msgid "Downgrades"
+msgstr "ਅੱਪਗਰੇਡ"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "ਇਸ ਸਿਸਟਮ ਉੱਤੇ ਕੋਈ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਨਹੀਂ ਹਨ।"
+
+#: src/gs-update-monitor.c:107
+msgid "Security Updates Pending"
+msgstr "ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਬਾਕੀ ਹਨ"
+
+#: src/gs-update-monitor.c:108
+msgid "It is recommended that you install important updates now"
+msgstr "ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਕਿ ਤੁਸੀਂ ਖਾਸ ਅੱਪਡੇਟਾਂ ਨੂੰ ਹੁਣੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: src/gs-update-monitor.c:111
+msgid "Restart & Install"
+msgstr "ਮੁੜ-ਚਾਲੂ ਤੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#: src/gs-update-monitor.c:115
+msgid "Software Updates Available"
+msgstr "ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਉਪਲਬਧ ਹਨ"
+
+#: src/gs-update-monitor.c:116
+msgid "Important OS and application updates are ready to be installed"
+msgstr "ਖਾਸ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਉਪਲਬਧ ਹਨ"
+
+#: src/gs-update-monitor.c:120
+msgid "View"
+msgstr "ਵੇਖੋ"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:228
+#, c-format
+#| msgid "Application Updates"
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%uਐਪਲੀਕੇਸ਼ਨ ਅੱਪਡੇਟ ਕੀਤੀ — ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ"
+msgstr[1] "%u ਐਪਲੀਕੇਸ਼ਨਾਂ ਅੱਪਡੇਟ ਕੀਤੀਆਂ — ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:234
+#, c-format
+#| msgid "Application Updates"
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u ਐਪਲੀਕੇਸ਼ਨ ਅੱਪਡੇਟ ਕੀਤੀ"
+msgstr[1] "%u ਐਪਲੀਕੇਸ਼ਨਾਂ ਅੱਪਡੇਟ ਕੀਤੀਆਂ"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:245
+#, c-format
+#| msgid "Your %s account has been suspended."
+msgid "%s has been updated."
+msgstr "%s ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ।"
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:248
+#| msgid "Featured Application"
+msgid "Please restart the application."
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ।"
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:256
+#, c-format
+#| msgid "Your %s account has been suspended."
+msgid "%s and %s have been updated."
+msgstr "%s ਅਤੇ %s ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ।"
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:262 src/gs-update-monitor.c:281
+#, c-format
+#| msgid "%u application installed"
+#| msgid_plural "%u applications installed"
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+msgstr[1] "%u ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:274
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "%s, %s ਅਤੇ %s ਸ਼ਾਮਲ ਹਨ।"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:515 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਅੱਪਡੇਟ ਮੌਜੂਦ ਨਹੀਂ ਹਨ"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:517
+msgid "Upgrade to continue receiving security updates."
+msgstr "ਸੁਰੱਖਿਆ ਅੱਪਗਰੇਡ ਪ੍ਰਾਪਤ ਕਰਨਾ ਜਾਰੀ ਰੱਖਣ ਲਈ ਅੱਪਗਰੇਡ ਕਰੋ।"
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:572
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s ਦਾ ਨਵਾਂ ਵਰਜ਼ਨ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਮੌਜੂਦ ਹੈ"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:576
+msgid "Software Upgrade Available"
+msgstr "ਸਾਫਟਵੇਅਰ ਅੱਪਗਰੇਡ ਮੌਜੂਦ ਹੈ"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:965
+msgid "Software Updates Failed"
+msgstr "ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਫੇਲ੍ਹ ਹੈ"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:967
+msgid "An important OS update failed to be installed."
+msgstr "ਖਾਸ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
+
+#: src/gs-update-monitor.c:968
+msgid "Show Details"
+msgstr "ਵੇਰਵਾ ਵੇਖੋ"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:991
+msgid "System Upgrade Complete"
+msgstr "ਸਿਸਟਮ ਅੱਪਗਰੇਡ ਪੂਰਾ"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:996
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "%s %s ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1002
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਹੈ"
+msgstr[1] "ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਹਨ"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "ਖਾਸ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕੀਤਾ ਗਿਆ ਹੈ।"
+msgstr[1] "ਖਾਸ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕੀਤੇ ਗਏ ਹਨ।"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1017
+msgctxt "updates"
+msgid "Review"
+msgstr "ਪੜਤਾਲ"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1065
+msgid "Failed To Update"
+msgstr "ਅੱਪਡੇਟ ਲਈ ਫੇਲ੍ਹ"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1071
+msgid "The system was already up to date."
+msgstr "ਸਿਸਟਮ ਪਹਿਲਾਂ ਹੀ ਅੱਪ ਟੂ ਡੇਟ ਹੈ।"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1076
+msgid "The update was cancelled."
+msgstr "ਅੱਪਡੇਟ ਰੱਦ ਕੀਤਾ ਗਿਆ ਸੀ।"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1082
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਦੀ ਲੋੜ ਸੀ, ਪਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਇੰਟਰਨੈੱਟ"
+" ਦੀ ਪਹੁੰਚ ਹੈ ਅਤੇ ਮੁੜ "
+"ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1088
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"ਅੱਪਡੇਟ ਨਾਲ ਸੁਰੱਖਿਆ ਮਸਲੇ ਸਨ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਆਪਣੇ ਸਾਫਟਵੇਅਰ ਪਰੋਵਾਇਡਰ ਨਾਲ ਸੰਪਰਕ"
+" ਕਰੋ।"
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1094
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "ਲੋੜ ਮੁਤਾਬਕ ਡਿਸਕ ਥਾਂ ਨਹੀਂ ਸੀ। ਕੁਝ ਥਾਂ ਖਾਲੀ ਕਰਕੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1099
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"ਸਾਨੂੰ ਅਫ਼ਸੋਸ ਹੈ: ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ। ਹੋਰ ਅੱਪਡੇਟ ਦੀ ਉਡੀਕ ਕਰੋ ਤੇ ਮੁੜ"
+" ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਜੇ "
+"ਸਮੱਸਿਆ ਬਣੀ ਰਹਿੰਦੀ ਹੈ ਤਾਂ ਆਪਣੇ ਸਾਫਟਵੇਅਰ ਪਰੋਵਾਇਡਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "ਕੱਲ੍ਹ, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "ਕੱਲ੍ਹ, :%l∶%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "ਦੋ ਦਿਨ ਪਹਿਲਾਂ"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "ਤਿੰਨ ਦਿਨ ਪਹਿਲਾਂ"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "ਚਾਰ ਦਿਨ ਪਹਿਲਾਂ"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "ਪੰਜ ਦਿਨ ਪਹਿਲਾਂ"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "ਛੇ ਦਿਨ ਪਹਿਲਾਂ"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "1 ਹਫ਼ਤਾ ਪਹਿਲਾਂ"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "ਦੋ ਹਫ਼ਤੇ ਪਹਿਲਾਂ"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr "...ਨਵੇਂ ਅੱਪਡੇਟ ਲਈ ਚੈੱਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr "...ਅੱਪਡੇਟ ਸੈੱਟ ਅੱਪ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr "(ਇਸ ਨੂੰ ਕੁਝ ਸਮਾਂ ਲੱਗ ਸਕਦਾ ਹੈ)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr "ਆਖਰੀ ਜਾਂਚ ਕੀਤੀ: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s ਹੁਣ ਸਹਾਇਕ ਨਹੀਂ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr "ਤੁਹਾਡਾ ਓ.ਸਿ. ਹੁਣ ਸਹਾਇਕ ਨਹੀਂ ਰਿਹਾ ਹੈ।"
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr "ਇਸ ਦਾ ਅਰਥ ਹੈ ਕਿ ਇਹ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਨਹੀਂ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ।"
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਕਿ ਤੁਸੀਂ ਹੋਰ ਨਵੇਂ ਵਰਜ਼ਨ ਲਈ ਅੱਪਗਰੇਡ ਕਰੋ।"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+#| msgid "Charges may apply"
+msgid "Charges May Apply"
+msgstr "ਖ਼ਰਚਾ ਹੋ ਸਕਦਾ ਹੈ"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"ਮੋਬਾਇਲ ਬਰਾਂਡਬੈਂਡ ਦੀ ਵਰਤੋਂ ਹੋਵੇ ਤਾਂ ਅੱਪਡੇਟ ਲਈ ਚੈੱਕ ਕਰਨ ਦੌਰਾਨ ਤੁਹਾਨੂੰ ਵਾਧੂ ਖਰਚਾ"
+" ਹੋ ਸਕਦਾ ਹੈ।"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+#| msgid "Check Anyway"
+msgid "Check _Anyway"
+msgstr "ਕਿਵੇਂ ਵੀ ਚੈੱਕ ਕਰੋ(_A)"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "ਨੈੱਟਵਰਕ ਨਹੀਂ"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr "ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਇੰਟਰਨੈੱਟ ਦੀ ਲੋੜ ਹੈ।"
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1340
+#| msgid "Checking for updates…"
+msgid "Checking…"
+msgstr "…ਚੈੱਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: src/gs-updates-page.c:1353
+msgid "Check for updates"
+msgstr "ਅੱਪਡੇਟ ਲਈ ਚੈੱਕ ਕਰੋ"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "ਅੱਪਡੇਟ ਸਫ਼ਾ"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "ਸਭ ਸਾਫਟਵੇਅਰ ਅੱਪ ਟੂ ਡੇਟ ਹਨ"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"ਮੋਬਾਇਲ ਬਰਾਂਡਬੈਂਡ ਦੀ ਵਰਤੋਂ ਹੋਵੇ ਤਾਂ ਅੱਪਡੇਟ ਲਈ ਚੈੱਕ ਕਰਨ ਦੌਰਾਨ ਤੁਹਾਨੂੰ ਵਾਧੂ ਖਰਚਾ"
+" ਹੋ ਸਕਦਾ ਹੈ।"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "ਕਿਵੇਂ ਵੀ ਚੈੱਕ ਕਰੋ(_C)"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਆਨਲਾਈਨ ਜਾਓ"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "ਨੈੱਟਵਰਕ ਸੈਟਿੰਗ(_N)"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "ਅੱਪਡੇਟ ਦਾ ਪਰਬੰਧ ਆਪਣੇ-ਆਪ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:274
+msgid "Restart & Update"
+msgstr "ਮੁੜ-ਚਾਲੂ ਤੇ ਇੰਸਟਾਲ ਕਰੋ"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:280
+msgid "Update All"
+msgstr "ਸਾਰੇ ਅੱਪਡੇਟ"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:411
+msgid "Integrated Firmware"
+msgstr "ਐਂਟੀਗਰੇਟਡ ਫਿਰਮਵੇਅਰ"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:415
+msgid "Requires Restart"
+msgstr "ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:419
+msgid "Application Updates"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਅੱਪਡੇਟ"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:423
+msgid "Device Firmware"
+msgstr "ਡਿਵਾਈਸ ਫਿਰਮਵੇਅਰ"
+
+#: src/gs-updates-section.c:451 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "ਡਾਊਨਲੋਡ ਕਰੋ(_D)"
+
+#: src/gs-upgrade-banner.c:64
+#| msgid "Restart Now"
+msgid "_Restart Now"
+msgstr "ਹੁਣੇ ਮੁੜ-ਚਾਲੂ ਕਰੋ(_R)"
+
+#: src/gs-upgrade-banner.c:66
+msgid "Updates will be applied when the computer is restarted."
+msgstr "ਕੰਪਿਊਟਰ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ ਸਮੇਂ ਅੱਪਡੇਟਾਂ ਨੂੰ ਲਾਗੂ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#: src/gs-upgrade-banner.c:72
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"ਅੱਪਗਰੇਡ ਕਰਨ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਆਪਣੇ ਡਾਟੇ ਤੇ ਫਾਇਲਾਂ ਦਾ ਬੈਕਅੱਪ ਲੈਣ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ"
+" ਜਾਂਦੀ ਹੈ।"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:87
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s ਹੁਣ ਮੌਜੂਦ ਹੈ"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:97
+#, c-format
+#| msgid "Downloading %s %s"
+msgid "Waiting to Download %s %s"
+msgstr "%s %s ਡਾਊਨਲੋਡ ਹੋਣ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:107
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:118
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਤਿਆਰ ਹੈ"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "ਵੱਡਾ ਅੱਪਗਰੇਡ, ਨਵੇਂ ਫ਼ੀਚਰਾਂ ਅਤੇ ਕੀਤੇ ਸੁਧਾਰਾਂ ਨਾਲ।"
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "ਹੋਰ ਜਾਣੋ(_L)"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "ਇਹ ਕੰਪਿਊਟਰ ਉੱਤੇ ਸਾਫਟਵੇਅਰ ਸ਼ਾਮਿਲ ਕਰੋ, ਹਟਾਉ ਜਾਂ ਅੱਪਡੇਟ ਕਰੋ"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"ਅੱਪਡੇਟ;ਸਰੋਤ;ਰਿਪੋਜ਼ਟਰੀ;ਪਸੰਦ,ਇੰਸਟਾਲ;ਸਟੋਰ;ਅੱਪਗਰੇਡ;Updates;Upgrade;Sources;Reposito"
+"ries;"
+"Preferences;Install;Store;ਅਣਇੰਸਟਾਲ;ਅਣ-ਇੰਸਟਾਲ;ਪ੍ਰੋਗਰਾਮ;ਸਾਫਟਵੇਅਰ;ਐਪ;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਲਈ ਖਾਸ ਬੈਨਰਾਂ ਲਈ ਡਿਜ਼ਾਇਨ"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "ਐਪਸਟਰੀਮ;ਸਾਫਟਵੇਅਰ;ਐਪ;"
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "ਆਡੀਓ ਬਣਾਉਣਾ ਤੇ ਸੋਧਣਾ"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "ਸੰਗੀਤ ਪਲੇਅਰ"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "ਡੀਬੱਗਰ"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "ਨਕਲੀ ਮੁਹਾਰਤ"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "ਤਾਰਾ-ਵਿਗਿਆਨ"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "ਰਸਾਇਣ-ਵਿਗਿਆਨ"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "ਭਾਸ਼ਾਵਾਂ"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "ਗਣਿਤ"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "ਰੋਬੋਟ"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "ਫੀਚਰ"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "ਕਾਰਵਾਈ"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "ਜਾਂਬਾਜ਼ੀ"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "ਆਰਕੇਡ"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "ਬਲਾਕ"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "ਬੋਰਡ"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "ਤਾਸ਼"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "ਈਮੂਲੇਟਰ"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "ਬੱਚੇ"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "ਲਾਜਿਕ"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "ਭੂਮਿਕਾ ਨਿਭਾਉਣਾ"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "ਖੇਡਾਂ"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "ਕਾਰਜਨੀਤੀ"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D ਗਰਾਫਿਕਸ"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "ਫੋਟੋਗਰਾਫ਼ੀ"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "ਸਕੈਨ ਕਰਨਾ"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "ਵੈਕਟਰ ਗਰਾਫਿਕਸ"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "ਵਿਊਅਰ"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "ਕੈਲੰਡਰ"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "ਡਾਟਾਬੇਸ"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "ਵਿੱਤੀ"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "ਵਰਡ ਪਰੋਸੈਸ"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "ਫ਼ੋਂਟ"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "ਕੋਡਕਸ"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "ਇੰਪੁੱਟ ਸਰੋਤ"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "ਭਾਸ਼ਾ ਪੈਕ"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "ਸ਼ੈੱਲ ਇਕਸਟੈਨਸ਼ਨਾਂ"
+
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "ਉਲੱਥਾ"
+
+#: plugins/core/gs-desktop-common.c:212
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "ਹਾਰਡਵੇਅਰ ਡਰਾਇਵਰ"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "ਗੱਲਬਾਤ"
+
+#: plugins/core/gs-desktop-common.c:233
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "ਖ਼ਬਰਾਂ"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "ਵੈੱਬ ਬਰਾਊਜ਼ਰ"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "ਲਿਖਤ ਐਡੀਟਰ"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "ਸਭ"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "ਕਲਾ"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "ਆਤਮ-ਕਥਾ"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "ਕਾਮਿਕ"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "ਗਲਪ"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "ਸਿਹਤ"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "ਅਤੀਤ"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "ਜੀਵਨ-ਜਾਚ"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "ਰਾਜਨੀਤੀ"
+
+#: plugins/core/gs-desktop-common.c:289
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "ਖੇਡਾਂ"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:299
+msgid "Audio & Video"
+msgstr "ਆਡੀਓ ਤੇ ਵੀਡੀਓ"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:302
+msgid "Developer Tools"
+msgstr "ਡਿਵੈਲਪਰ ਟੂਲ"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:305
+msgid "Education & Science"
+msgstr "ਸਿੱਖਿਆ ਤੇ ਵਿਗਿਆਨ"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:308
+msgid "Games"
+msgstr "ਗੇਮਾਂ"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:311
+msgid "Graphics & Photography"
+msgstr "ਗਰਾਫਿਕਸ ਤੇ ਫੋਟੋਗਰਾਫ਼ੀ"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:314
+msgid "Productivity"
+msgstr "ਉਤਪਾਦਨ"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:320
+msgid "Communication & News"
+msgstr "ਸੰਚਾਰ ਤੇ ਖ਼ਬਰਾਂ"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:323
+msgid "Reference"
+msgstr "ਰੈਫਰੈਂਸ"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:326
+msgid "Utilities"
+msgstr "ਸਹੂਲਤਾਂ"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "ਓ.ਸਿ. ਅੱਪਡੇਟ"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr "ਕਾਰਗੁਜ਼ਾਰੀ, ਸਥਿਰਤਾ ਅਤੇ ਸੁਰੱਖਿਆ ਸੁਧਾਰ ਸ਼ਾਮਲ ਹਨ।"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr "…ਫੀਚਰ ਈਮੇਜ਼ ਡਾਊਨਲੋਡ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:561
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:564
+#| msgid "A major upgrade, with new features and added polish."
+msgid "An Endless OS update with new features and fixes."
+msgstr "ਵੱਡਾ ਅੱਪਗਰੇਡ, ਨਵੇਂ ਫ਼ੀਚਰਾਂ ਅਤੇ ਕੀਤੇ ਸੁਧਾਰਾਂ ਨਾਲ Endless OS ਅੱਪਡੇਟ ਹੈ।"
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:825
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS ਅੱਪਡੇਟ ਸੇਵਾ ਅੱਪਡੇਟ ਲੱਭ ਅਤੇ ਲਾਗੂ ਨਹੀਂ ਕਰ ਸਕੀ ਹੈ।"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "ਵੈੱਬ ਐਪ ਸਹਿਯੋਗ"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "ਬਰਾਊਜ਼ਰ ਵਿੱਚ ਹਰਮਨਪਿਆਰੇ ਵੈੱਬ ਐਪਲੀਕੇਸ਼ਨ ਚਲਾਓ"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:138
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "ਗਨੋਮ ਸਾਫਟਵੇਅਰ ਐਪਸਟਰੀਮ ਸਿਸਟਮ ਲਈ ਇੰਸਟਾਲਰ"
+
+#: plugins/external-appstream/gs-install-appstream.c:140
+msgid "Failed to parse command line arguments"
+msgstr "ਕਮਾਂਡ ਲਾਈਨ ਆਰਗੂਮੈਂਟ ਪਾਰਸ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:147
+msgid "You need to specify exactly one filename"
+msgstr "ਤੁਹਾਨੂੰ ਪੂਰਾ ਠੀਕ ਫਾਇਲ-ਨਾਂ ਦੇਣਾ ਪਵੇਗਾ"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:154
+msgid "This program can only be used by the root user"
+msgstr "ਇਹ ਪਰੋਗਰਾਮ ਕੇਵਲ ਰੂਟ (root) ਵਰਤੋਂਕਾਰਾਂ ਵਲੋਂ ਹੀ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:162
+msgid "Failed to validate content type"
+msgstr "ਸਮੱਗਰੀ ਕਿਸਮ ਵੈਧ ਲਈ ਅਸਫ਼ਲ ਹੈ"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:169
+msgid "Failed to copy"
+msgstr "ਕਾਪੀ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:229
+msgid "Downloading extra metadata files…"
+msgstr "…ਵਾਧੂ ਮੇਟਾਡਾਟਾ ਫਾਇਲਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "…ਅੱਪਗਰੇਡ ਜਾਣਕਾਰੀ ਡਾਊਨਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+#| msgid "Upgrade your Fedora system to the latest features and improvements."
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "ਨਵੇਂ ਨਕੋਰ ਫੀਚਰ, ਕਾਰਗੁਜ਼ਾਰੀ ਅਤੇ ਸਥਿਰਤਾ ਸੁਧਾਰਾਂ ਲਈ ਅੱਪਗਰੇਡ ਕਰੋ।"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "ਫਲੈਟਪਕ ਸਹਿਯੋਗ"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "ਫਲੈਟਪਕ (Flatpak) ਲੀਨਕਸ 'ਤੇ ਡੈਸਕਟਾਪ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਢਾਂਚਾ ਹੈ।"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:832
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "…%s ਲਈ ਫਲੈਟਪਕ ਮੇਟਾਡਾਟਾ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:134
+#, c-format
+msgid "%s Device"
+msgstr "%s ਡਿਵਾਈਸ"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:139
+#, c-format
+#| msgid "System"
+msgid "%s System"
+msgstr "%s ਸਿਸਟਮ"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:144
+#, c-format
+msgid "%s Embedded Controller"
+msgstr "%s ਇੰਬੈੱਡਡ ਕੰਟਰੋਲਰ"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:149
+#, c-format
+msgid "%s ME"
+msgstr "%s ME"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:154
+#, c-format
+msgid "%s Corporate ME"
+msgstr "%s ਕਾਰਪੋਰੇਟ ME"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:159
+#, c-format
+msgid "%s Consumer ME"
+msgstr "%s ਗਾਹਕ ME"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:165
+#, c-format
+#| msgctxt "Menu subcategory of Development Tools"
+#| msgid "Revision Control"
+msgid "%s Controller"
+msgstr "%s ਕੰਟਰੋਲਰ"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:171
+#, c-format
+msgid "%s Thunderbolt Controller"
+msgstr "%s ਥੰਡਰਬੋਲਟ ਕੰਟਰੋਲਰ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:669
+msgid "Downloading firmware update signature…"
+msgstr "…ਫਿਰਮਵੇਅਰ ਅੱਪਡੇਟ ਦਸਤਖ਼ਤ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:710
+msgid "Downloading firmware update metadata…"
+msgstr "…ਫਿਰਮਵੇਅਰ ਅੱਪਡੇਟ ਮੇਟਾਡਾਟਾ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "ਫਿਰਮਵੇਅਰ ਅੱਪਗਰੇਡ ਸਹਿਯੋਗ"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "ਫਿਰਮਵੇਅਰ ਅੱਪਗਰੇਡ ਲਈ ਸਹਿਯੋਗ ਦਿੰਦਾ ਹੈ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:195
+msgid "Downloading application ratings…"
+msgstr "…ਐਪਲੀਕੇਸ਼ਨ ਰੇਟਿੰਗ ਡਾਊਨਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "ਓਪਨ ਡੈਸਕਟਾਪ ਰੇਟਿੰਗ ਸਹਿਯੋਗ"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS ਐਪਲੀਕੇਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂਕਾਰ ਪੜਤਾਲਾਂ ਦੇਣ ਵਾਲੀ ਸੇਵਾ ਹੈ"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:403
+msgid "GNOME Shell Extensions Repository"
+msgstr "ਗਨੋਮ ਸ਼ੈੱਲ ਇਕਸਟੈਨਸ਼ਨਾਂ ਰਿਪੋਜ਼ਟਰੀ"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:803
+msgid "Downloading shell extension metadata…"
+msgstr "…ਸ਼ੈਲ ਇਕਸਟੈਨਸ਼ਨ ਮੇਟਾਡਾਟਾ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:909
+#| msgctxt "Menu of Add-ons"
+#| msgid "Shell Extensions"
+msgid "GNOME Shell Extension"
+msgstr "ਗਨੋਮ ਸ਼ੈੱਲ ਇਕਸਟੈਨਸ਼ਨਾਂ"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:169
+msgid "Snap Store"
+msgstr "ਸਨੈਪ ਸਟੋਰ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+#| msgid "Snappy Support"
+msgid "Snap Support"
+msgstr "ਸਨੈਪ ਸਹਿਯੋਗ"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "ਸਨੈਪ ਯੂਨੀਵਰਸਲ ਲੀਨਕਸ ਪੈਕੇਜ ਹੈ"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "ਸਭ(_A)"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "ਸੇਵਾ ਲਈ ਪ੍ਰੋਫਾਇਲ ਜਾਣਕਾਰੀ ਵੇਖਾਓ"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "ਜਾਰੀ ਰੱਖਣ ਲਈ ਤੁਹਾਨੂੰ ਸਾਇਨ ਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "ਜਾਰੀ ਰੱਖਣ ਲਈ ਤੁਹਾਨੂੰ %s ਵਿੱਚ ਸਾਇਨ ਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"
+
+#~ msgid "Email address"
+#~ msgstr "ਈਮੇਲ ਪਤਾ"
+
+#~ msgid "I have an account already"
+#~ msgstr "ਮੇਰੇ ਕੋਲ ਪਹਿਲਾਂ ਹੀ ਖਾਤਾ ਹੈ"
+
+#~ msgid "Password"
+#~ msgstr "ਪਾਸਵਰਡ"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "ਮੈਂ ਹੁਣੇ ਖਾਤੇ ਲਈ ਰਜਿਸਟਰ ਕਰਨਾ ਚਾਹੁੰਦਾ/ਚਾਹੁੰਦੀ ਹਾਂ"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "ਮੈਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਚੁੱਕਾ/ਚੁੱਕੀ ਹਾਂ"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "ਅਗਲੀ ਵਾਰ ਮੈਨੂੰ ਆਪਣੇ-ਆਪ ਸਾਇਨ ਇਨ ਕਰੋ"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "ਦੋ-ਪੜ੍ਹਾਵੀਂ ਪਰਮਾਣਕਿਤਾ ਲਈ ਆਪਣਾ ਇੱਕ ਵਾਰ ਵਾਲਾ ਪਿੰਨ ਦਿਓ।"
+
+#~ msgid "PIN"
+#~ msgstr "ਪਿੰਨ"
+
+#~ msgid "Authenticate"
+#~ msgstr "ਪਰਮਾਣਿਤ"
+
+#~ msgid "Continue"
+#~ msgstr "ਜਾਰੀ ਰੱਖੋ"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "ਸਾਫਟਵੇਅਰ ਕੈਟਾਲਾਗ ਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#~ msgid "_About"
+#~ msgstr "ਇਸ ਬਾਰੇ(_A)"
+
+#~ msgid "_Quit"
+#~ msgstr "ਬੰਦ ਕਰੋ(_Q)"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "ਕੀ ਤੁਸੀਂ %s ਨੂੰ ਖਰੀਦਣਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ ਤੁਹਾਡੇ ਕੋਲੋ %s ਵਸੂਲੇ ਜਾਣਗੇ।"
+
+#~ msgid "Purchase"
+#~ msgstr "ਖਰੀਦੋ"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "%s ਦੇ ਨਾਲ ਨਾਲ ਚੋਣਵਾਂ ਬਾਰੇ ਵੀ ਜਾਣਕਾਰੀ ਦਿਓ, ਜਿਸ ਨਾਲ ਇਹ ਫਾਰਮੈਟ ਨੂੰ ਚਲਾਉਣ ਵਾਲੇ ਕੋਡਕ "
+#~ "ਵੈੱਬਸਾਈਟ ਉੱਤੇ ਲੱਭਿਆ ਜਾ ਸਕਦਾ ਹੈ।"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "ਇਹ ਹੱਲ਼ ਹੋਣ ਤੱਕ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਕਰਨਾ ਸੰਭਵ ਨਹੀਂ ਹੈ।"
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ %s ਨੂੰ ਖੋਲ੍ਹੋ।"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "%2$s ਤੋਂ %1$s ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "…ਨਵੇਂ ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "ਮੁੜ-ਚਾਲੂ ਤੇ ਇੰਸਟਾਲ ਕਰੋ(_R)"
+
+#~ msgid "U_pdate All"
+#~ msgstr "ਸਾਰੇ ਅੱਪਡੇਟ ਕਰੋ(_A)"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "ਮੁੜ-ਚਾਲੂ ਤੇ ਇੰਸਟਾਲ ਕਰੋ(_I)"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "…ਰਨਟਾਈਮ ਸਰੋਤ ਲਏ ਜਾ ਰਹੇ ਹਨ"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "…ਫਿਰਮਵੇਅਰ ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#~ msgid "Limba Support"
+#~ msgstr "ਲੀਮਬਾ ਸਹਿਯੋਗ"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "ਲੀਮਬਾ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਸੌਖੀ ਤਰ੍ਹਾਂ ਸਾਫਟਵੇਅਰ ਬੰਡਲ ਬਣਾਉਣ ਦਾ ਢੰਗ ਦਿੰਦਾ ਹੈ"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "…ਐਪਲੀਕੇਸ਼ਨ ਸਫ਼ੇ ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#~ msgid "Steam Support"
+#~ msgstr "ਸਟੀਮ ਸਹਿਯੋਗ"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "ਵਾਲਵ ਲਈ ਸਿਰੇ ਦਾ ਮਨੋਰੰਜਨ ਪਲੇਟਫਾਰਮ ਹੈ"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "ਵਾਧੂ ਸਰੋਤਾਂ ਦੀ ਸੂਚੀ, ਜਿਹਨਾਂ ਨੂੰ ਪਹਿਲਾਂ ਸਮਰੱਥ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ"
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "ਖੋਜ ਨਤੀਜਿਆਂ 'ਚ ਗ਼ੈਰ-ਆਜ਼ਾਦ ਸਾਫ਼ਟਵੇਅਰ ਵੇਖੋ"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "ਗ਼ੈਰ-ਆਜ਼ਾਦ ਸਰੋਤਾਂ ਦੀ ਸੂਿਚੀ, ਜਿਸ ਨੂੰ ਚੋਣਵੇਂ ਰੂਪ 'ਚ ਸਮਰੱਥ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "ਵੈੱਬ ਬਰਾਊਜ਼ਰਾਂ ਅਤੇ ਖੇਡਾਂ ਆਦਿ ਲਈ ਹੋਰ ਸਾਫ਼ਟਵੇਅਰ ਵਾਸਤੇ ਪਹੁੰਚ ਦਿੰਦਾ ਹੈ।"
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "ਪਰੋਪਰੈਟਰੀ ਸਾਫਟਵੇਅਰ ਸਰੋਤ ਸਮਰੱਥ ਕਰਨੇ ਹਨ?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "ਕੋਈ ਐਪਲੀਕੇਸ਼ਨਾਂ ਜਾਂ ਐਡ-ਆਨ ਇੰਸਟਾਲ ਨਹੀਂ ਹਨ; ਹੋਰ ਸਾਫਟਵੇਅਰ ਹਾਲੇ ਵੀ"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "ਅਕਸਰ ਵਰਤਣ ਅਤੇ ਸਰੋਤ ਕੋਡ ਲਈ ਪਹੁੰਚ ਵਾਸਤੇ ਪਾਬੰਦੀਆਂ ਹੁੰਦੀਆਂ ਹਨ।"
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "ਪਰੋਪਰੈਟਰੀ ਸਾਫਟਵੇਅਰ ਸਰੋਤ"
+
+#~ msgid "Remove Source"
+#~ msgstr "ਸਰੋਤ ਹਟਾਓ"
+
+#~| msgid ""
+#~| "Adding this software source will give you access to additional software "
+#~| "and upgrades."
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "ਸਾਫ਼ਟਵੇਅਰ ਸਰੋਤਾਂ ਨੂੰ ਇੰਟਰਨੈੱਟ ਤੋਂ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਇਸ ਨਾਲ ਤੁਹਾਨੂੰ ਹੋਰ ਸਾਫ਼ਟਵੇਅਰਾਂ ਲਈ "
+#~ "ਪਹੁੰਚ ਮਿਲਦੀ ਹੈ, ਜਿਹਨਾਂ ਨੂੰ %s ਵਲੋਂ ਨਹੀਂ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ।"
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "ਸਰੋਤ ਨੂੰ ਹਟਾਉਣ ਨਾਲ ਤੁਹਾਡੇ ਵਲੋਂ ਉਸ ਸਰੋਤ ਕੋਂ ਇੰਸਟਾਲ ਕੀਤੇ ਕਿਸੇ ਵੀ ਸਾਫਟਵੇਅਰ ਨੂੰ ਵੀ ਹਟਾਇਆ "
+#~ "ਜਾਵੇਗਾ।"
+
+#~ msgid "No software installed from this source"
+#~ msgstr "ਇਸ ਸਰੋਤ ਤੋਂ ਕੋਈ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "ਇਹ ਸਰੋਤ ਤੋਂ ਇੰਸਟਾਲ ਹੈ"
+
+#~ msgid "Source Details"
+#~ msgstr "ਸਰੋਤ ਵੇਰਵਾ"
+
+#~ msgid "Last Checked"
+#~ msgstr "ਆਖਰੀ ਵਾਰ ਕੀਤੀ ਜਾਂਚ"
+
+#~ msgid "Added"
+#~ msgstr "ਸ਼ਾਮਲ ਕੀਤੇ"
+
+#~ msgid "Website"
+#~ msgstr "ਵੈੱਬਸਾਈਟ"
+
+#~ msgid "page1"
+#~ msgstr "ਸਫ਼ਾ1"
+
+#~ msgid "page2"
+#~ msgstr "ਸਫ਼ਾ2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "ਖਾਸ"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#~| msgid "All"
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#~| msgid "_All"
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#~| msgid "Featured"
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#~ msgid "About Software"
+#~ msgstr "ਸਾਫਟਵੇਅਰ ਬਾਰੇ"
+
+#~ msgid "3rd party"
+#~ msgstr "3ਜੀ ਧਿਰ"
+
+#~| msgid "Web app"
+#~ msgid "web app"
+#~ msgstr "ਵੈੱਬ ਐਪ"
+
+#~ msgid "nonfree"
+#~ msgstr "ਗ਼ੈਰ-ਮੁਕਤ"
+
+#~ msgid "shell extension"
+#~ msgstr "ਸ਼ੈੱਲ ਦੀ ਇਕਸਟੈਨਸ਼ਨ"
+
+#~ msgid "Total"
+#~ msgstr "ਕੁੱਲ"
+
+#~ msgid "_Installing"
+#~ msgstr "ਇੰਸਟਾਲ ਕਰਨਾ ਜਾਰੀ(_I)"
+
+#~ msgid "_Removing"
+#~ msgstr "ਹਟਾਉਣਾ ਜਾਰੀ(_R)"
+
+#~ msgid " or "
+#~ msgstr " ਜਾਂ "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "ਅਣਜਾਣ"
+
+#~ msgid "non-free"
+#~ msgstr "ਗ਼ੈਰ-ਮੁਕਤ"
+
+#~| msgid "_Install"
+#~ msgid "_Install All"
+#~ msgstr "ਸਭ ਨੂੰ ਇੰਸਟਾਲ ਕਰੋ(_I)"
+
+#~| msgid "OS Updates"
+#~ msgid "Other Updates"
+#~ msgstr "ਹੋਰ ਅੱਪਡੇਟ"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "ਸਾਫਟਵੇਅਰ ਸਰੋਤ ਤੁਹਾਨੂੰ ਵਾਧੂ ਸਾਫਟਵੇਅਰ ਦਿੰਦਾ ਹੈ।"
+
+#~ msgid "One Star"
+#~ msgstr "ਇੱਕ ਤਾਰਾ"
+
+#~ msgid "Two Stars"
+#~ msgstr "ਦੋ ਤਾਰੇ"
+
+#~ msgid "Three Stars"
+#~ msgstr "ਤਿੰਨ ਤਾਰੇ"
+
+#~ msgid "Four Stars"
+#~ msgstr "ਚਾਰ ਤਾਰੇ"
+
+#~ msgid "Five Stars"
+#~ msgstr "ਪੰਜ ਤਾਰੇ"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "%s ਦੀ ਇੰਸਟਾਲੇਸ਼ਨ ਫੇਲ੍ਹ ਹੈ।"
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "%s ਹਟਾਉਣ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "ਕੋਈ ਨਹੀਂ"
+
+#, fuzzy
+#~| msgid "_All"
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#, fuzzy
+#~| msgid "_All"
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "ਸਭ"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "ਫੀਚਰ"
+
+#, fuzzy
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Astronomy"
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "ਭਵਿੱਖਬਾਣੀ"
+
+#, fuzzy
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Chemistry"
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "ਰਸਾਇਣ-ਵਿਗਿਆਨ"
+
+#, fuzzy
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Math"
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "ਗਣਿਤ"
+
+#~ msgid "Science"
+#~ msgstr "ਵਿਗਿਆਨ"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "ਜੀ-ਐਪਲੀਕੇਸ਼ਨ ਸੇਵਾ ਮੋਡ ਦਿਓ"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "ਪਿਛਲਾ ਅੱਪਡੇਟ ਅਧੂਰਾ ਪਿਆ ਹੈ।"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "ਅੱਪਡੇਟ ਠੀਕ ਤਰ੍ਹਾਂ ਸਾਇਨ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।"
+
+#~ msgid "The update could not be completed."
+#~ msgstr "ਅੱਪਡੇਟ ਪੂਰਾ ਨਹੀਂ ਕੀਤਾ ਸਕਿਆ।"
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "ਆਫਲਾਈਨ ਅੱਪਡੇਟ ਦੀ ਮੰਗ ਕੀਤੀ ਗਈ ਸੀ, ਪਰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਕੋਈ ਪੈਕੇਜ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ।"
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "ਜੰਤਰ ਉੱਤੇ ਕੋਈ ਥਾਂ ਨਹੀਂ ਬਾਕੀ ਬਚੀ।"
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "ਅੱਪਡੇਟ ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "ਆਫਲਾਈਨ ਅੱਪਡੇਟ ਅਣਜਾਣੇ ਢੰਗ ਨਾਲ ਫੇਲ੍ਹ ਹੋਇਆ।"
+
+#~| msgid "Calculating…"
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "...ਗਿਣਤੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#~| msgid "Unknown"
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "ਅਣਜਾਣ"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "ਕੇਵਲ ਇੰਟਰਨੈੱਟ ਐਪਲੀਕੇਸ਼ਨ ਹੀ"
+
+#~ msgid "_History"
+#~ msgstr "ਅਤੀਤ(_H)"
+
+#~ msgid "Size"
+#~ msgstr "ਸਾਈਜ਼"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "ਸਿਫਾਰਸ਼ੀ ਦਫ਼ਤਰੀ ਐਪਲੀਕੇਸ਼ਨ"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i ਐਪਲੀਕੇਸ਼ਨ ਤੇ %i ਐਡ-ਆਨ ਇੰਸਟਾਲ ਹਨ"
+#~ msgstr[1] "%i ਐਪਲੀਕੇਸ਼ਨ ਤੇ %i ਐਡ-ਆਨ ਇੰਸਟਾਲ ਹਨ"
+
+#~ msgid "No sources found."
+#~ msgstr "ਕੋਈ ਸਰੋਤ ਨਹੀਂ ਲੱਭਿਆ।"
+
+#~ msgid "OK"
+#~ msgstr "ਠੀਕ ਹੈ"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "ਕੋਈ ਐਪਸਟਰੀਮ ਡਾਟਾ ਨਹੀਂ ਲੱਭਿਆ"
+
+#~ msgid "Audio"
+#~ msgstr "ਆਡੀਓ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "ਡਾਟਾਬੇਸ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "ਡਿਸਕ ਲਿਖਣੀ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "ਹਮ ਰੇਡੀਓ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "ਮਿਕਸਰ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "ਸੰਗੀਤ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "ਰਿਕਾਰਡਰ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "ਸੀਕਵਅੰਸਰ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "ਟਿਊਨਰ"
+
+#~| msgctxt "Menu subcategory of Development"
+#~| msgid "Building"
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "ਬਿਲਡਿੰਗ"
+
+#~| msgctxt "Menu subcategory of Audio"
+#~| msgid "Databases"
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "ਡਾਟਾਬੇਸ"
+
+#~| msgctxt "Menu subcategory of Development"
+#~| msgid "IDE"
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~| msgctxt "Menu subcategory of Development"
+#~| msgid "Profiling"
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "ਪਰੋਫਾਇਲਿੰਗ"
+
+#~| msgctxt "Menu subcategory of Development"
+#~| msgid "Web Development"
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "ਵੈੱਬ ਡਿਵੈਲਪਮੈਂਟ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "ਬਾਇਓਲੋਜੀ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "ਕੰਪਿਊਟਰ ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "ਨਿਰਮਾਣ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "ਡਾਟਾ ਚਿਤਰਨ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "ਅਰਥਚਾਰਾ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "ਬਿਜਲੀ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "ਇਲੈਕਟਰੋਨਿਕਸ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "ਇੰਜਨੀਅਰਗ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "ਭੂ-ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "ਜਿਓਸਾਇੰਸ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "ਅਤੀਤ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "ਹਿਊਮੈਨਾਟਿਸ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "ਚਿੱਤਰ ਕਾਰਵਾਈ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "ਫੀਚਰ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "ਨਕਸ਼ੇ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "ਸੰਗੀਤ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "ਅੰਕੜੇ ਪੜਤਾਲ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "ਸਮਾਂਤਰ ਕੰਪਿਊਟਿੰਗ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "ਭੌਤਿਕ-ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "ਰੂਹਾਨੀਅਤ"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "ਸ਼ੂਟਰ"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "ਸਿਮੂਲੇਸ਼ਨ"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "ਖੇਡਾਂ"
+
+#~ msgid "Graphics"
+#~ msgstr "ਗਰਾਫਿਕਸ"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D ਗ੍ਰਾਫਿਕਸ"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "ਗਰਾਫਿਕਸ"
+
+#~ msgid "Internet"
+#~ msgstr "ਇੰਟਰਨੈੱਟ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Dialup"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "ਡਾਇਲਅੱਪ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Email"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "ਈ-ਮੇਲ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Feed"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "ਫੀਡ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "File Transfer"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ"
+
+#~| msgctxt "Menu subcategory of Audio"
+#~| msgid "Ham Radio"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "ਹਮ ਰੇਡੀਓ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Instant Messaging"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "ਝੱਟਪਟ ਸੁਨੇਹੇ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "IRC Clients"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC ਕਲਾਂਇਟ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Monitor"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "ਮਾਨੀਟਰ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "P2P"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Remote Access"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "ਰਿਮੋਟ ਅਸੈੱਸ"
+
+#~| msgctxt "Menu subcategory of Network"
+#~| msgid "Telephony"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "ਟੈਲੀਫੋਨੀ"
+
+#~| msgctxt "Menu subcategory of Development"
+#~| msgid "Web Development"
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "ਵੈੱਬ ਡਿਵੈਲਪਮੈਂਟ"
+
+#~ msgid "Office"
+#~ msgstr "ਆਫਿਸ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "ਚਾਰਟ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "ਸੰਪਰਕ ਪ੍ਰਬੰਧ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "ਡਿਕਸ਼ਨਰੀ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "ਈ-ਮੇਲ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "ਫਲੋਅ ਚਾਰਟ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "ਫੋਟੋਗਰਾਫ਼ੀ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "ਪ੍ਰੋਜੈਕਟ ਪ੍ਰਬੰਧ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "ਪਰਕਾਸ਼ਨ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "ਸਪਰੈਡਸ਼ੀਟ"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "ਦਰਸ਼ਕ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "ਕਲਾ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "ਨਕਲੀ ਮੁਹਾਰਤ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "ਭਵਿੱਖਬਾਣੀ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "ਜੀਵ-ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "ਰਸਾਇਣ-ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "ਕੰਪਿਊਟਰ ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "ਨਿਰਮਾਣ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "ਡਾਟਾ ਚਿਤਰਨ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "ਅਰਥਚਾਰਾ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "ਬਿਜਲੀ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "ਇਲੈਕਟਰੋਨਿਕਸ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "ਇੰਜਨੀਅਰਗ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "ਭੂਗੋਲ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "ਭੂ-ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "ਜਿਓਸਾਇੰਸ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "ਇਤਿਹਾਸ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "ਹਿਊਮੈਨਾਟਿਸ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "ਚਿੱਤਰ ਕਾਰਵਾਈ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "ਭਾਸ਼ਾਵਾਂ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "ਸਾਹਿਤ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "ਨਕਸ਼ੇ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "ਗਣਿਤ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "ਮੈਡੀਕਲ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "ਅੰਕੜੇ ਪੜਤਾਲ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "ਸਮਾਂਤਰ ਕੰਪਿਊਟਿੰਗ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "ਭੌਤਿਕ-ਵਿਗਿਆਨ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "ਰੋਬੋਟ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "ਰੂਹਾਨੀਅਤ"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "ਖੇਡਾਂ"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "ਈਮੂਲੇਟਰ"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "ਫਾਇਲ ਮੈਨੇਜਰ"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "ਫਾਇਲ ਟੂਲ"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "ਮਾਨੀਟਰ"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "ਸੁਰੱਖਿਆ"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "ਟਰਮੀਨਲ ਸਮਰੂਪ"
+
+#~| msgctxt "Menu subcategory of Utility"
+#~| msgid "Accessibility"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "ਅਸੈੱਸਬਿਲਟੀ"
+
+#~| msgctxt "Menu subcategory of Utility"
+#~| msgid "Archiving"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "ਅਕਾਇਵ"
+
+#~| msgctxt "Menu subcategory of Utility"
+#~| msgid "Calculator"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "ਕੈਲਕੂਲੇਟਰ"
+
+#~| msgctxt "Menu subcategory of Utility"
+#~| msgid "Clock"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "ਘੜੀ"
+
+#~| msgctxt "Menu subcategory of Utility"
+#~| msgid "Compression"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "ਨਪੀੜਨ"
+
+#~| msgctxt "Menu subcategory of System"
+#~| msgid "File Tools"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "ਫਾਇਲ ਟੂਲ"
+
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Maps"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "ਨਕਸ਼ੇ"
+
+#~| msgctxt "Menu subcategory of Education"
+#~| msgid "Spirituality"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "ਰੂਹਾਨੀਅਤ"
+
+#~| msgctxt "Menu subcategory of Utility"
+#~| msgid "Telephony Tools"
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "ਟੈਲੀਫੋਨੀ ਟੂਲ"
+
+#~ msgid "Video"
+#~ msgstr "ਵਿਡੀਓ"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "ਸੰਪਾਦਨ"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "ਡਾਟਾਬੇਸ"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "ਡਿਸਕ ਲਿਖਣੀ"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "ਪਲੇਅਰ"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "ਰਿਕਾਰਡਰ"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "ਟੀਵੀ"
+
+#~ msgid "Picks"
+#~ msgstr "ਚੁਣੋ"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "ਜਨਵਰੀ 30, 2014"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "ਤਹਿ-ਸ਼ੁਦਾ ਡੀਬੱਗ ਲੈਵਲ ਦਿਓ"
+
+#~ msgid "_Pending"
+#~ msgstr "ਬਾਕੀ ਹੈ(_P)"
+
+#~ msgid "Complicated!"
+#~ msgstr "ਗੁੰਝਲਦਾਰ!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "ਤਾਜ਼ਾ ਸਾਫਟਵੇਅਰ ਅੱਪਡੇਟ"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "ਡਾਟਾਬੇਸ"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "ਹਮ ਰੇਡੀਓ"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "ਵੈੱਬ ਡਿਵੈਲਪਮੈਂਟ"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "ਫਾਇਲ ਟੂਲ"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "ਨਕਸ਼ੇ"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "ਰੂਹਾਨੀਅਤ"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "ਫੋਂਟ"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "ਕੋਡਕ"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "ਇੰਪੁੱਟ ਸਰੋਤ"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "ਭਾਸ਼ਾ ਪੈਕ"
+
+#~ msgid "New"
+#~ msgstr "ਨਵਾਂ"
+
+#~ msgid "Popular"
+#~ msgstr "ਹਰਮਨਪਿਆਰੇ"
+
+#~ msgid "Waiting for package manager..."
+#~ msgstr "...ਪੈਕੇਜ ਮੈਨੇਜਰ ਲਈ ਉਡੀਕ ਜਾਰੀ"
+
+#~ msgid "Querying..."
+#~ msgstr "...ਜਾਣਕਾਰੀ ਲਈ ਜਾ ਰਹੀ ਹੈ"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..d75473f
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,4438 @@
+# Polish translation for gnome-software.
+# Copyright © 2012-2020 the gnome-software authors.
+# This file is distributed under the same license as the gnome-software package.
+# Piotr Drąg <piotrdrag@gmail.com>, 2012-2020.
+# Aviary.pl <community-poland@mozilla.org>, 2012-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-22 20:17+0200\n"
+"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
+"Language-Team: Polish <community-poland@mozilla.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Menedżer oprogramowania GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Menedżer programów dla środowiska GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Menedżer oprogramowania umożliwia wyszukiwanie i instalowanie nowych "
+"programów i rozszerzeń systemu oraz usuwanie już zainstalowanych programów."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Menedżer oprogramowania dla środowiska GNOME prezentuje polecane i popularne "
+"programy z przydatnymi opisami i wieloma zrzutami ekranu. Programy mogą być "
+"wyszukiwane lub przeglądane według kategorii. Możliwe jest także "
+"aktualizowanie systemu za pomocą funkcji aktualizacji w trybie offline."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel przeglądu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel informacji o programie"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel zainstalowanych programów"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel aktualizacji"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Informacje o aktualizacji"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Projekt GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalacja pliku AppStream w położeniu systemowym"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalowanie pliku AppStream w położeniu systemowym"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Lista zgodnych projektów"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"To jest lista zgodnych projektów, które powinny być wyświetlane, takie jak "
+"GNOME, KDE i Xfce."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Czy zarządzać aktualizacjami i aktualizacjami systemu w Menedżerze "
+"oprogramowania GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Jeśli jest wyłączone, to Menedżer oprogramowania GNOME ukryje panel "
+"aktualizacji, nie będzie wykonywał aktualizacji automatycznych ani pytał "
+"o aktualizacje systemu."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automatyczne pobieranie i instalowanie aktualizacji"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Jeśli jest włączone, to Menedżer oprogramowania GNOME automatycznie pobiera "
+"aktualizacje oprogramowania w tle, instalując te niewymagające ponownego "
+"uruchomienia."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Powiadamianie użytkownika o oprogramowaniu zaktualizowanym w tle"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Jeśli jest włączone, to Menedżer oprogramowania GNOME powiadamia użytkownika "
+"o aktualizacjach wykonanych, kiedy nie używał komputera."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Czy automatycznie odświeżać na mierzonych połączeniach"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Jeśli jest włączone, to Menedżer oprogramowania GNOME automatycznie odświeża "
+"w tle, nawet podczas używania mierzonego połączenia (pobieranie metadanych, "
+"wyszukiwanie aktualizacji itp., co może oznaczać koszty dla użytkownika)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Czy to pierwsze uruchomienie Menedżera oprogramowania GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Wyświetlanie ocen obok programów"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtrowanie programów na podstawie domyślnie ustawionej gałęzi dla "
+"repozytorium"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Wyświetlanie ostrzeżenia przed instalowaniem własnościowych programów"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Można wyświetlać ostrzeżenie przed instalowaniem własnościowych programów. "
+"To ustawienie kontroluje, czy to ostrzeżenie jest wstrzymywane."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Lista popularnych programów"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Lista używanych programów, zastępująca programy określone przez system."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Czas ostatniego sprawdzenia aktualizacji"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Czas ostatniego powiadomienia o aktualizacji"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Czas pierwszej aktualizacji bezpieczeństwa, czyszczony po aktualizacji"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Czas ostatniej aktualizacji"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Ostatnia data, kiedy system był w trybie online i otrzymał jakieś "
+"aktualizacje"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Czas w sekundach do sprawdzania, czy zrzut ekranu jest nadal prawidłowy"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Wybranie większej wartości oznacza mniej wycieczek do zdalnego serwera, ale "
+"wyświetlenie aktualizacji zrzutów ekranu mogą zająć więcej czasu. Wartość 0 "
+"oznacza, że serwer nigdy nie zostanie sprawdzony, jeśli obraz już istnieje "
+"w pamięci podręcznej."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Serwer używany do wyświetlania recenzji programów"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Minimalna karma recenzji"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Recenzje o niższej karmie nie będą wyświetlane."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Lista oficjalnych repozytoriów, które nie powinny być traktowane jako "
+"dostarczane przez stronę trzecią"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Lista oficjalnych repozytoriów, które powinny być traktowane jako wolne "
+"oprogramowanie"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Adres URL licencji używanej, kiedy program powinien być traktowany jako "
+"wolne oprogramowanie"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instalowanie pakietów dla wszystkich użytkowników systemu tam, gdzie to "
+"możliwe"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Zezwolenie na używanie okna repozytoriów oprogramowania"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Oferowanie aktualizacji do wydań testowych"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Wyświetlanie elementu interfejsu informującego użytkownika, że program jest "
+"własnościowy"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Wyświetlanie zapytania o instalowanie repozytoriów oprogramowania "
+"własnościowego"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Wyświetlanie rozmiaru programów po zainstalowaniu na liście zainstalowanych "
+"programów"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://pl.wikipedia.org/wiki/Zamknięte_oprogramowanie'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Adres URI wyjaśniający własnościowe oprogramowanie"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Lista adresów URL wskazujących na pliki AppStream, które będą pobierane do "
+"katalogu „app-info”"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalowanie plików AppStream w położeniu systemowym dla wszystkich "
+"użytkowników"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Włączenie repozytorium rozszerzeń powłoki GNOME"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Ciąg przechowujący identyfikator usługi gnome-online-accounts używany do "
+"logowania"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalacja oprogramowania"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalowanie wybranego oprogramowania na komputerze"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Zaznacz wszystko"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Odznacz wszystko"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Repozytoria oprogramowania"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Preferencje _aktualizacji"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Oprogramowanie"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Wstecz"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Odkrywaj"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Zainstalowane"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Aktualizacje"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Wyszukaj"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Źródło"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repozytoria oprogramowania"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Sprawdź dysk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Ustawienia sieci"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Uruchom ponownie"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Więcej informacji"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Wstrzymano automatyczne aktualizacje"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "_Więcej informacji"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokalny plik"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pakiet"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Oczekujące"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Zainstalowane"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalowanie"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Usuwanie"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "Tryb startowy: „updates”, „updated”, „installed” lub „overview”"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "TRYB"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Wyszukuje programy"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "WYSZUKIWANIE"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Wyświetla informacje o programie (za pomocą jego identyfikatora)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "IDENTYFIKATOR"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Wyświetla informacje o programie (za pomocą jego nazwy pakietu)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NAZWA-PAKIETU"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instaluje program (za pomocą jego identyfikatora)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Otwiera lokalny plik pakietu"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NAZWA-PLIKU"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Rodzaj interakcji oczekiwanej dla tego działania: „none”, „notify” lub „full”"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Wyświetla więcej informacji o debugowaniu"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instaluje wszystkie oczekujące aktualizacje w tle"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Wyświetla preferencje aktualizacji"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Kończy działanie uruchomionego wystąpienia"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferuje lokalne źródła plików nad danymi AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Wyświetla numer wersji"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Piotr Drąg <piotrdrag@gmail.com>, 2012-2020\n"
+"Aviary.pl <community-poland@mozilla.org>, 2012-2020"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "O programie"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Łatwy sposób na zarządzanie oprogramowaniem na komputerze."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Nie ma informacji o tym programie."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Witryna"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Zainstaluj…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Anuluj"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Zainstaluj"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Zaktualizuj"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Usuń"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Nie można używać urządzenia podczas aktualizacji."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Wymaga dodatkowych uprawnień."
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Repozytorium %s wymaga zalogowania (obszar %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Wymagane jest zalogowanie"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Anuluj"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Zaloguj się"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Użytkownik"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Hasło"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Inne"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Wszystkie"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Polecane"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s — polecane"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Ocena"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nazwa"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Wyświetlanie"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menu filtrowania podkategorii"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Porządkowanie"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menu porządkowania podkategorii"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Proszę wpisać liczbę od 1 do %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Proszę wybrać program:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Zainstalowano aktualizacje systemu operacyjnego"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Można przejrzeć ostatnio zainstalowane aktualizacje"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "Zainstalowano program %s"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Wymagane jest ponowne uruchomienie, aby zastosować zmiany."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Program jest gotowy do użytku."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Uruchom ponownie"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Uruchom"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Zainstalować oprogramowanie dostarczane przez stronę trzecią?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Włączyć repozytorium oprogramowania dostarczane przez stronę trzecią?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"Program %s nie jest <a href=\"https://pl.wikipedia.org/wiki/"
+"Wolne_i_Otwarte_Oprogramowanie\">wolnym i otwartym oprogramowaniem</a>, "
+"a jest dostarczany przez źródło „%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "Program %s jest dostarczany przez źródło „%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"To repozytorium oprogramowania musi zostać włączone, aby kontynuować "
+"instalację."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Zainstalowanie lub używanie programu %s może być nielegalne w niektórych "
+"krajach."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Zainstalowanie lub używanie tego kodeku może być nielegalne w niektórych "
+"krajach."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Bez ostrzegania ponownie"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Włącz i zainstaluj"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Szczegółowe błędy z menedżera pakietów:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Informacje"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Zainstalowano aktualizację"
+msgstr[1] "Zainstalowano aktualizacje"
+msgstr[2] "Zainstalowano aktualizacje"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Wymagane jest ponowne uruchomienie, aby zastosować zmiany."
+msgstr[1] "Wymagane jest ponowne uruchomienie, aby zastosować zmiany."
+msgstr[2] "Wymagane jest ponowne uruchomienie, aby zastosować zmiany."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Nie teraz"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Brak rysunkowej przemocy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Rysunkowe postacie w niebezpiecznych sytuacjach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Rysunkowe postacie w agresywnym konflikcie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Obrazowa przemoc dotycząca rysunkowych postaci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Brak nierzeczywistej przemocy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Postacie w niebezpiecznych sytuacjach, łatwo odróżnialnych od rzeczywistości"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Postacie w agresywnym konflikcie, łatwo odróżnialnym od rzeczywistości"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Obrazowa przemoc, łatwo odróżnialna od rzeczywistości"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Brak realistycznej przemocy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Średnio realistyczne postacie w niebezpiecznych sytuacjach"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Przedstawienia realistycznych postaci w agresywnym konflikcie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Obrazowa przemoc dotycząca realistycznych postaci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Brak rozlewu krwi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Nierealistyczny rozlew krwi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistyczny rozlew krwi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Przedstawienia rozlewu krwi i okaleczeń części ciała"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Brak przemocy seksualnej"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Gwałt lub inne brutalne zachowanie seksualne"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Brak odniesień do alkoholu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Odniesienia do napojów alkoholowych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Spożycie napojów alkoholowych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Brak odniesień do narkotyków"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Odniesienia do narkotyków"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Spożycie narkotyków"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Brak odniesień do wyrobów tytoniowych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Odniesienia do wyrobów tytoniowych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Spożycie wyrobów tytoniowych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Brak wszelkiego rodzaju nagości"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Krótkotrwała nagość artystyczna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Długotrwała nagość"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Brak odniesień lub przedstawień o naturze seksualnej"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Wyzywające odniesienia lub przedstawienia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Seksualne odniesienia lub przedstawienia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Obrazowe zachowania seksualne"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Brak wszelkiego rodzaju przekleństw"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Lekkie lub nieczęste użycie przekleństw"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Umiarkowane użycie przekleństw"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Silne lub częste użycie przekleństw"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Brak nieodpowiedniego humoru"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Komedia slapstikowa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Komedia wulgarna lub toaletowa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Komedia dla dorosłych lub seksualna"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Brak wszelkiego rodzaju języka dyskryminacyjnego"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Niechęć wobec konkretnej grupy ludzi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Dyskryminacja mająca na celu krzywdę emocjonalną"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Jawna dyskryminacja ze względu na płeć, orientację seksualną, rasę lub "
+"religię"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Brak wszelkiego rodzaju reklam"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Lokowanie produktu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Jawne odniesienia do konkretnych marek lub zastrzeżonych produktów"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Użytkownicy są zachęcani do zakupu fizycznych przedmiotów"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Brak wszelkiego rodzaju hazardu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Zakłady o losowe wydarzenia używające żetonów lub punktów"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Zakłady używające zabawkowych pieniędzy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Zakłady używające prawdziwych pieniędzy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Brak możliwości wydawania pieniędzy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Użytkownicy są zachęcani do przekazywania datków pieniężnych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Możliwość wydawania prawdziwych pieniędzy w programie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Brak możliwości rozmów tekstowych z innymi użytkownikami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interakcje między użytkownikami bez funkcji rozmów tekstowych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderowana funkcja rozmów tekstowych między użytkownikami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Niekontrolowana funkcja rozmów tekstowych między użytkownikami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Brak możliwości rozmów głosowych z innymi użytkownikami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+"Niekontrolowana funkcja rozmów głosowych lub wideo między użytkownikami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Brak udostępniania nazw użytkowników serwisów społecznościowych lub adresów "
+"e-mail"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Udostępnianie nazw użytkowników serwisów społecznościowych lub adresów e-mail"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Brak udostępniania informacji o użytkownikach stronom trzecim"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Wyszukiwanie najnowszej wersji programu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Udostępnianie danych diagnostycznych nieumożliwiających identyfikację "
+"użytkownika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Udostępnianie informacji umożliwiających identyfikację użytkownika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Brak udostępniania rzeczywistego adresu innym użytkownikom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Udostępnianie rzeczywistego adresu innym użytkownikom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Brak odniesień do homoseksualizmu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Niebezpośrednie odniesienia do homoseksualizmu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Całowanie między osobami tej samej płci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Obrazowe zachowania seksualne między osobami tej samej płci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Brak odniesień do prostytucji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Niebezpośrednie odniesienia do prostytucji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Bezpośrednie odniesienia do prostytucji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Obrazowe przedstawienia czynności związanych z prostytucją"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Brak odniesień do cudzołóstwa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Niebezpośrednie odniesienia do cudzołóstwa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Bezpośrednie odniesienia do cudzołóstwa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Obrazowe przedstawienia czynności związanych z cudzołóstwem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Brak seksualizowanych postaci"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Skąpo odziane postacie ludzkie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Jawnie seksualizowane postacie ludzkie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Brak odniesień do profanacji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Przedstawienia lub odniesienia do historycznej profanacji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Przedstawienia współczesnej profanacji ludzi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Obrazowe przedstawienia współczesnej profanacji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Brak widocznych zwłok ludzkich"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Widoczne zwłoki ludzkie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Zwłoki ludzkie wystawione na działanie warunków atmosferycznych"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Obrazowe przedstawienia profanacji ludzkich ciał"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Brak odniesień do niewolnictwa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Przedstawienia lub odniesienia do historycznego niewolnictwa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Przedstawienia współczesnego niewolnictwa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Obrazowe przedstawienia współczesnego niewolnictwa"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Dla wszystkich"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Dla wszystkich"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Tylko dla dorosłych"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Dla dorosłych"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Dla nastolatków"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Dla wszystkich 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Dla wszystkich"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Dla małych dzieci"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Program"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "Program %s wymaga dodatkowej obsługi formatu pliku."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Wymagany jest dodatkowy typ MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "Program %s wymaga dodatkowych czcionek."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Wymagane są dodatkowe czcionki"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "Program %s wymaga dodatkowych kodeków multimedialnych."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Wymagane są dodatkowe kodeki multimedialne"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "Program %s wymaga dodatkowych sterowników drukarki."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Wymagane są dodatkowe sterowniki drukarki"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "Program %s wymaga dodatkowych pakietów."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Wymagane są dodatkowe pakiety"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Znajdź w menedżerze oprogramowania"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Usuwanie…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Oczekująca instalacja…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Oczekująca aktualizacja…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Przygotowywanie…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Ten program może być używany tylko, kiedy dostępne jest aktywne połączenie "
+"internetowe."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Zainstaluj"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Zainstaluj…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Uruchom"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Usuń"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Sieć"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Może komunikować się przez sieć"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Usługi systemowe"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Ma dostęp do usług D-Bus na magistrali systemowej"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Usługi sesji"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Ma dostęp do usług D-Bus na magistrali sesji"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Urządzenia"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Ma dostęp do plików na urządzeniach systemowych"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Katalog domowy"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Może wyświetlać, modyfikować i tworzyć pliki"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Może wyświetlać pliki"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "System plików"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Katalog pobierania"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Ustawienia"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Może wyświetlać i zmieniać dowolne ustawienia"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Przestarzały system wyświetlania"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Używa starego, niezabezpieczonego systemu wyświetlania"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Wyjście z zabezpieczenia"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Może opuszczać zabezpieczenie i omijać inne ograniczenia"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Ten program jest w pełni zabezpieczony."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nie można ustalić, do których części systemu ten program ma dostęp. Jest to "
+"typowe dla starszych programów."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nieznana"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nigdy"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nieznane"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Niskie"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Średnie"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Wysokie"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Nieznana"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Wymagany jest dostęp do Internetu, aby napisać recenzję"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nie można odnaleźć „%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domena publiczna"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://pl.wikipedia.org/wiki/Domena_publiczna"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.pl.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Wolne oprogramowanie"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Użytkowników obowiązuje ta licencja:"
+msgstr[1] "Użytkowników obowiązują te licencje:"
+msgstr[2] "Użytkowników obowiązują te licencje:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Więcej informacji"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Strona informacji"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Pobieranie"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Z_aktualizuj"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Dodaj skrót"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Usuń skrót"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Brak zrzutów ekranu"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Dołączono repozytorium oprogramowania"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ten program zawiera repozytorium oprogramowania, dostarczające aktualizacje "
+"i dostęp do innego oprogramowania."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Nie dołączono repozytorium oprogramowania"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ten program nie zawiera repozytorium oprogramowania. Nie będzie on "
+"aktualizowany do nowszych wersji."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"To oprogramowanie jest już dostarczane przez dystrybucję i nie powinno być "
+"zastępowane."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Rozpoznano repozytorium oprogramowania"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Dodanie tego repozytorium oprogramowania umożliwi dostęp do dodatkowego "
+"oprogramowania i aktualizacji."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Należy używać tylko zaufanych repozytoriów oprogramowania."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Witryna"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "W_spomóż"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Tłumaczenie"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentacja"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Często aktualizowane"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integracja z systemem"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Zabezpieczone"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanał"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Wersja"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Klasyfikacja wiekowa"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Uprawnienia"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Zaktualizowane"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategoria"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Rozmiar po zainstalowaniu"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Rozmiar pobierania"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Programista"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licencja"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Wolna"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Własnościowa"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Dodatki"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Zaznaczone dodatki zostaną zainstalowane wraz z programem."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recenzje"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Napisz recenzję"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Wyświetl więcej"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Oznacza to, że oprogramowanie może być swobodnie używane, kopiowane, "
+"rozpowszechniane, badane i modyfikowane."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Oprogramowanie własnościowe"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Oznacza to, że oprogramowanie jest własnością osoby fizycznej lub firmy. "
+"Jego używanie jest często ograniczone, a kod źródłowy zwykle nie jest "
+"dostępny."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Nieznana licencja oprogramowania"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Licencja tego oprogramowania jest nieznana."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Program został sklasyfikowany w ten sposób, ponieważ zawiera:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Brak dodatkowych informacji dla tej klasyfikacji."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " i "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Dostępne czcionki dla pisma „%s”"
+msgstr[1] "Dostępne czcionki dla pism: %s"
+msgstr[2] "Dostępne czcionki dla pism: %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Dostępne oprogramowanie dla „%s”"
+msgstr[1] "Dostępne oprogramowanie dla: %s"
+msgstr[2] "Dostępne oprogramowanie dla: %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nie można odnaleźć wymaganego oprogramowania"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Nie odnaleziono „%s”"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "na stronie WWW"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Brak programów dostarczających plik %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informacje o „%s”, a także o możliwościach uzyskania brakujących programów "
+"można znaleźć %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Brak programów do obsługi „%s”."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "Program %s jest niedostępny."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informacje o „%s”, a także o możliwościach uzyskania programu obsługującego "
+"ten format można znaleźć %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Brak czcionek do obsługi pisma „%s”."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informacje o „%s”, a także o możliwościach uzyskania dodatkowych czcionek "
+"można znaleźć %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Brak dodatkowych kodeków dla formatu „%s”."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informacje o „%s”, a także o możliwościach uzyskania kodeku odtwarzającego "
+"ten format można znaleźć %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Brak zasobów Plasmy do obsługi „%s”."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informacje o „%s”, a także o możliwościach uzyskania dodatkowych zasobów "
+"Plasmy można znaleźć %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Brak sterowników drukarki dla „%s”."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informacje o „%s”, a także o możliwościach uzyskania sterownika "
+"obsługującego tę drukarkę można znaleźć %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "tej stronie WWW"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "Nie można odnaleźć „%s”. Więcej informacji można znaleźć na %s."
+msgstr[1] "Nie można odnaleźć „%s”. Więcej informacji można znaleźć na %s."
+msgstr[2] "Nie można odnaleźć „%s”. Więcej informacji można znaleźć na %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Wyszukanie się nie powiodło"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Format plików %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Strona kodeków"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Witamy"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Witamy w menedżerze oprogramowania"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Menedżer oprogramowania umożliwia instalowanie wszystkich potrzebnych "
+"programów w jednym miejscu. Można zobaczyć polecane programy, przejrzeć "
+"kategorie lub wyszukać konkretny program."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Rozpocznij"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Usunięto"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Zainstalowano"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Zaktualizowano"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nieznane"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%-d %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Programy systemowe"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Strona zainstalowanych"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Pobieranie katalogu oprogramowania"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Wczytywanie strony"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Uruchamianie…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Obecna sieć jest mierzona. Mierzone połączenia mają ograniczenia danych lub "
+"związane z nimi koszty. Aby zaoszczędzić dane, automatyczne aktualizacje "
+"zostały wstrzymane.\n"
+"\n"
+"Automatyczne aktualizacje zostaną wznowione po przejściu na sieć "
+"niemierzoną. Do tego czasu nadal można ręcznie instalować aktualizacje.\n"
+"\n"
+"Można też zmienić to ustawienie, jeśli obecna sieć została niepoprawnie "
+"zidentyfikowana jako mierzona."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Otwórz _ustawienia sieci"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Strona moderacji"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Brak recenzji do moderacji"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "systemowa"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "użytkownika"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Gałąź"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Adres URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalacja"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Więcej…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Polecane programy dźwiękowe i wideo"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Polecane gry"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Polecane programy graficzne"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Polecane programy biurowe"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Dostęp do dodatkowego oprogramowania z wybranych źródeł dostarczanych przez "
+"stronę trzecią."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Część tego oprogramowania jest własnościowa, więc ma ograniczenia użytku, "
+"udostępniania i dostępu do kodu źródłowego."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Więcej informacji…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Włącz"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Strona przeglądu"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Włączyć repozytoria oprogramowania dostarczane przez stronę trzecią?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Wstecz"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Dalej"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Nasz wybór"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Ostatnio wydane"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorie"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nie odnaleziono danych programu"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Przygotuj program %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Na pewno usunąć repozytorium „%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Wszystkie programy z „%s” zostaną usunięte. Należy ponownie zainstalować "
+"repozytorium, aby móc używać ich ponownie."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Na pewno usunąć program %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Program %s zostanie usunięty. Należy go zainstalować, aby móc używać go "
+"ponownie."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (zainstalowane)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferencje aktualizacji"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatyczne aktualizacje"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatyczne aktualizacje są wyłączone na połączeniach komórkowych "
+"i mierzonych."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Powiadomienia o automatycznej aktualizacji"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Wyświetlanie powiadomień po automatycznej instalacji aktualizacji."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Część obecnie zainstalowanego oprogramowania jest niezgodna z systemem %s. "
+"Kontynuacja aktualizacji spowoduje automatyczne usunięcie poniższych "
+"programów:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Niezgodne oprogramowanie"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Kontynuuj"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Zainstalowano %u program"
+msgstr[1] "Zainstalowano %u programy"
+msgstr[2] "Zainstalowano %u programów"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Zainstalowano %u dodatek"
+msgstr[1] "Zainstalowano %u dodatki"
+msgstr[2] "Zainstalowano %u dodatków"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u program"
+msgstr[1] "%u programy"
+msgstr[2] "%u programów"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u dodatek"
+msgstr[1] "%u dodatki"
+msgstr[2] "%u dodatków"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "Zainstalowano %s i %s"
+msgstr[1] "Zainstalowano %s i %s"
+msgstr[2] "Zainstalowano %s i %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Usunąć repozytorium „%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Wyłączyć repozytorium „%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Oprogramowanie zainstalowane z tego repozytorium nie będzie już "
+"aktualizowane (co obejmuje poprawki bezpieczeństwa)."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Wyłącz"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operacyjny"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Te repozytoria uzupełniają domyślne oprogramowanie dostarczane przez system "
+"%s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repozytoria dostarczane przez stronę trzecią"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Brak dodatkowych repozytoriów"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Włącz"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Usuń…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "Wyłą_cz…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Włączanie"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Wyłączanie"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Włączone"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Wyłączone"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Zły"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Słaby"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "W porządku"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Dobry"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Wspaniały"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Proszę poświęcić więcej czasu na napisanie recenzji"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Proszę wybrać ocenę"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Podsumowanie jest za krótkie"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Podsumowanie jest za długie"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Opis jest za krótki"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Opis jest za długi"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publikacja recenzji"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Opublikuj"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Podsumowanie"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Proszę wpisać krótkie podsumowanie recenzji, na przykład: „Świetny program, "
+"polecam”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recenzja"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Co sądzisz o tym programie? Proszę uzasadnić swoje zdanie."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"<a href=\"https://odrs.gnome.org/privacy\">Zasady ochrony prywatności</a> "
+"zawierają informacje o tym, jakie dane są przesyłane."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "ocen razem"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Można zgłosić recenzję za znieważające, nieprzyzwoite lub dyskryminujące "
+"zachowanie."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Recenzja zostanie ukryta po jej zgłoszeniu aż do jej sprawdzenia przez "
+"administratora."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Zgłosić recenzję?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Zgłoś"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Czy ta recenzja jest przydatna?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Tak"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nie"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Średnio"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Zgłoś…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Usuń…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Nie odnaleziono zrzutu ekranu"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Wczytanie obrazu się nie powiodło"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Nie odnaleziono wymiarów zrzutu ekranu"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nie można utworzyć pamięci podręcznej"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Nieprawidłowy zrzut ekranu"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Zrzut ekranu jest niedostępny"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Zrzut ekranu"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u więcej"
+msgstr[1] "%u więcej"
+msgstr[2] "%u więcej"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Strona wyszukiwania"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nie odnaleziono żadnego programu"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Nie można pobrać aktualizacji oprogramowania sprzętowego z „%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nie można pobrać aktualizacji z „%s”"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nie można pobrać aktualizacji"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nie można pobrać aktualizacji: wymagany jest dostęp do Internetu, ale nie "
+"jest on dostępny"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Nie można pobrać aktualizacji z „%s”: za mało miejsca na dysku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Nie można pobrać aktualizacji: za mało miejsca na dysku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Nie można pobrać aktualizacji: wymagane jest uwierzytelnienie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nie można pobrać aktualizacji: uwierzytelnienie jest nieprawidłowe"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Nie można pobrać aktualizacji: brak uprawnień do instalacji oprogramowania"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nie można pobrać listy aktualizacji"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Nie można zainstalować programu %s, ponieważ pobieranie z „%s” się nie "
+"powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr ""
+"Nie można zainstalować programu %s, ponieważ pobieranie się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Nie można zainstalować programu %s, ponieważ środowisko wykonawcze „%s” jest "
+"niedostępne"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nie można zainstalować programu %s, ponieważ nie jest on obsługiwany"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Nie można zainstalować: wymagany jest dostęp do Internetu, ale nie jest on "
+"dostępny"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nie można zainstalować: program ma nieprawidłowy format"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nie można zainstalować programu %s: za mało miejsca na dysku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Nie można zainstalować programu %s: wymagane jest uwierzytelnienie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+"Nie można zainstalować programu %s: uwierzytelnienie jest nieprawidłowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Nie można zainstalować programu %s: brak uprawnień do instalacji "
+"oprogramowania"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nie można zainstalować programu %s: wymagane jest zasilanie sieciowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+"Nie można zainstalować programu %s: poziom naładowania akumulatora jest za "
+"niski"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nie można zainstalować programu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Nie można zaktualizować programu %s z „%s”, ponieważ pobieranie się nie "
+"powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr ""
+"Nie można zaktualizować programu %s, ponieważ pobieranie się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Nie można zainstalować aktualizacji z „%s”, ponieważ pobieranie się nie "
+"powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr ""
+"Nie można zainstalować aktualizacji, ponieważ pobieranie się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Nie można zaktualizować: wymagany jest dostęp do Internetu, ale nie jest on "
+"dostępny"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nie można zaktualizować programu %s: za mało miejsca na dysku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nie można zainstalować aktualizacji: za mało miejsca na dysku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Nie można zaktualizować programu %s: wymagane jest uwierzytelnienie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nie można zainstalować aktualizacji: wymagane jest uwierzytelnienie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+"Nie można zaktualizować programu %s: uwierzytelnienie jest nieprawidłowe"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Nie można zainstalować aktualizacji: uwierzytelnienie jest nieprawidłowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Nie można zaktualizować programu %s: brak uprawnień do aktualizacji "
+"oprogramowania"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nie można zainstalować aktualizacji: brak uprawnień do aktualizacji "
+"oprogramowania"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Nie można zaktualizować programu %s: wymagane jest zasilanie sieciowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nie można zainstalować aktualizacji: wymagane jest zasilanie sieciowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr ""
+"Nie można zaktualizować programu %s: poziom naładowania akumulatora jest za "
+"niski"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Nie można zainstalować aktualizacji: poziom naładowania akumulatora jest za "
+"niski"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nie można zaktualizować programu %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nie można zainstalować aktualizacji"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nie można zaktualizować do systemu %s z „%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr ""
+"Nie można zaktualizować do systemu %s, ponieważ pobieranie się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nie można zaktualizować do systemu %s: wymagany jest dostęp do Internetu, "
+"ale nie jest on dostępny"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nie można zaktualizować do systemu %s: za mało miejsca na dysku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nie można zaktualizować do systemu %s: wymagane jest uwierzytelnienie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+"Nie można zaktualizować do systemu %s: uwierzytelnienie jest nieprawidłowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nie można zaktualizować do systemu %s: brak uprawnień do aktualizacji"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Nie można zaktualizować do systemu %s: wymagane jest zasilanie sieciowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Nie można zaktualizować do systemu %s: poziom naładowania akumulatora jest "
+"za niski"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nie można zaktualizować do systemu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Nie można usunąć programu %s: wymagane jest uwierzytelnienie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nie można usunąć programu %s: uwierzytelnienie jest nieprawidłowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Nie można usunąć programu %s: brak uprawnień do usuwania oprogramowania"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nie można usunąć programu %s: wymagane jest zasilanie sieciowe"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr ""
+"Nie można usunąć programu %s: poziom naładowania akumulatora jest za niski"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nie można usunąć programu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nie można uruchomić programu %s: „%s” nie jest zainstalowane"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Za mało miejsca na dysku — proszę zwolnić trochę miejsca i spróbować ponownie"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Coś się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Instalacja pliku się nie powiodła: nieobsługiwane"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Instalacja pliku się nie powiodła: uwierzytelnienie się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Instalacja się nie powiodła: nieobsługiwane"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Instalacja się nie powiodła: uwierzytelnienie się nie powiodło"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nie można skontaktować się z „%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+"Program %s musi zostać ponownie uruchomiony, aby móc używać nowych wtyczek."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Ten program musi zostać ponownie uruchomiony, aby móc używać nowych wtyczek."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Wymagane jest zasilanie sieciowe"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Poziom naładowania akumulatora jest za niski"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Źródło: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (instalowanie)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (usuwanie)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Usuń wszystkie"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Brak opisu aktualizacji."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Zainstalowano w dniu %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Zainstalowane aktualizacje"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Dodawane"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Usuwane"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Aktualizowane"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Instalowanie poprzedniej wersji"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Żadne aktualizacje nie zostały zainstalowane na tym komputerze."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Oczekujące aktualizacje bezpieczeństwa"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Zalecane jest natychmiastowe zainstalowanie ważnych aktualizacji"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Uruchom ponownie i zainstaluj"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Dostępne są aktualizacje oprogramowania"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Ważne aktualizacje systemu operacyjnego i programów są gotowe do "
+"zainstalowania"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Wyświetl"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "Zaktualizowano %u program — wymagane jest ponowne uruchomienie"
+msgstr[1] "Zaktualizowano %u programy — wymagane jest ponowne uruchomienie"
+msgstr[2] "Zaktualizowano %u programów — wymagane jest ponowne uruchomienie"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "Zaktualizowano %u program"
+msgstr[1] "Zaktualizowano %u programy"
+msgstr[2] "Zaktualizowano %u programów"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "Program %s został zaktualizowany."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Proszę uruchomić go ponownie."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "Programy %s i %s zostały zaktualizowane."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u program wymaga ponownego uruchomienia."
+msgstr[1] "%u programy wymagają ponownego uruchomienia."
+msgstr[2] "%u programów wymaga ponownego uruchomienia."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "W tym: %s, %s i %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Dostępne są aktualizacje systemu operacyjnego"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Należy zaktualizować, aby nadal otrzymywać aktualizacje bezpieczeństwa."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Nowa wersja systemu %s jest gotowa do zainstalowania"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Dostępna jest aktualizacja oprogramowania"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Aktualizacje oprogramowania się nie powiodły"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr ""
+"Zainstalowanie ważnej aktualizacji systemu operacyjnego się nie powiodło."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Wyświetl informacje"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Ukończono aktualizację systemu"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Witamy w systemie %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Zainstalowano aktualizację oprogramowania"
+msgstr[1] "Zainstalowano aktualizacje oprogramowania"
+msgstr[2] "Zainstalowano aktualizacje oprogramowania"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Zainstalowano ważną aktualizację systemu operacyjnego."
+msgstr[1] "Zainstalowano ważne aktualizacje systemu operacyjnego."
+msgstr[2] "Zainstalowano ważne aktualizacje systemu operacyjnego."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Przejrzyj"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Aktualizacja się nie powiodła"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Komputer jest już aktualny."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Anulowano aktualizację."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Wymagany jest dostęp do Internetu, ale nie jest on dostępny. Proszę się "
+"upewnić, że można połączyć się z Internetem i spróbować ponownie."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Aktualizacja zawiera błędy bezpieczeństwa. Proszę skontaktować się "
+"z dostawcą oprogramowania, aby dowiedzieć się więcej."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Za mało miejsca na dysku. Proszę zwolnić trochę miejsca i spróbować ponownie."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Zainstalowanie aktualizacji się nie powiodło. Proszę poczekać na następną "
+"aktualizację i spróbować ponownie. Jeśli problem nie zniknie, to proszę "
+"skontaktować się z dostawcą oprogramowania."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%H∶%M"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%-l∶%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Wczoraj o %H∶%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Wczoraj o %-l∶%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Dwa dni temu"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Trzy dni temu"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Cztery dni temu"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Pięć dni temu"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Sześć dni temu"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Tydzień temu"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Dwa tygodnie temu"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Wyszukiwanie nowych aktualizacji…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Ustawianie aktualizacji…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Może to chwilę zająć)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Ostatnio wyszukano: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "System %s %s nie jest już wspierany."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Używany system operacyjny nie jest już wspierany."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Oznacza to, że nie będzie otrzymywał aktualizacji bezpieczeństwa."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Zalecane jest zaktualizowanie do nowszej wersji."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Możliwe koszty"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Wyszukiwanie aktualizacji na połączeniu komórkowym może spowodować "
+"poniesienie kosztów."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Wyszukaj _mimo to"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Brak sieci"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Wymagany jest dostęp do Internetu, aby wyszukać aktualizacje."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Wyszukiwanie…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Wyszukaj aktualizacje"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Strona aktualizacji"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Oprogramowanie jest aktualne"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Wyszukiwanie aktualizacji na połączeniu komórkowym może spowodować "
+"poniesienie kosztów"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Wyszukaj mimo to"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Przejdź do trybu online, aby wyszukać aktualizacje"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Ustawienia _sieci"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Aktualizacje są automatycznie zarządzane"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Uruchom ponownie i zaktualizuj"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Zaktualizuj wszystko"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Zintegrowane oprogramowanie sprzętowe"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Wymaga ponownego uruchomienia"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Aktualizacje programów"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Oprogramowanie sprzętowe urządzenia"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Pobierz"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Zalecane jest utworzenie kopii zapasowej danych i plików przed aktualizacją."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Uruchom ponownie"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr ""
+"Aktualizacje zostaną zastosowane w czasie ponownego uruchomienia komputera."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "System %s %s jest dostępny"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Oczekiwanie na pobranie systemu %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Pobieranie systemu %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "System %s %s jest gotowy do zainstalowania"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Duża aktualizacja, dodająca nowe funkcje i naprawiająca błędy."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Więcej informacji"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Dodawanie, usuwanie i aktualizowanie oprogramowania na komputerze"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Aktualizacje;Aktualizuj;Zaktualizuj;Uaktualnienia;Uaktualnij;Update;Upgrade;"
+"Źródła;Źródło;Repozytoria;Repozytorium,Preferencje;Opcje;Ustawienia;"
+"Instalacja;Zainstaluj;Odinstaluj;Deinstalacja;Deinstaluj;Program;"
+"Oprogramowanie;Software;Aplikacja;Aplikacje;App;Apps;Sklep;Store;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Tworzenie i edycja dźwięku"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Odtwarzacze muzyki"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Debugery"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Środowiska programistyczne"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Sztuczna inteligencja"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chemia"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Języki"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematyka"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotyka"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Gry akcji"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Gry przygodowe"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Gry platformowe"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Gry w klocki"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Gry planszowe"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Gry karciane"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatory"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Gry dla dzieci"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Gry logiczne"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Gry fabularne"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Gry sportowe"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Gry strategiczne"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafika 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skanowanie"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafika wektorowa"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Przeglądarki"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendarze"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Bazy danych"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanse"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Procesory tekstu"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Czcionki"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeki"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Źródła wprowadzania"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pakiety językowe"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Tłumaczenia"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Sterowniki sprzętowe"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Komunikatory"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Aktualności"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Przeglądarki WWW"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Edytory tekstu"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Wszystkie"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Polecane"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Sztuka"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografie"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komiksy"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Beletrystyka"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Zdrowotne"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historyczne"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Luksusowe"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Polityczne"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sportowe"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Dźwięk i obraz"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Narzędzia programistyczne"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Edukacja i nauka"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Gry"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika i fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Biurowe"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikacja i aktualności"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Źródła"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Narzędzia"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Aktualizacje systemu"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Zawierają ulepszenia wydajności, stabilności i bezpieczeństwa."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Pobieranie obrazów polecanych programów…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr ""
+"Aktualizacja systemu Endless OS, dodająca nowe funkcje i naprawiająca błędy."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Usługa aktualizacji EOS nie może pobrać i zastosować aktualizacji."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instalator plików AppStream w systemie"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Przetworzenie wiersza poleceń się nie powiodło"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Należy podać dokładnie jedną nazwę pliku"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Ten program może być używany tylko przez roota"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Sprawdzenie poprawności typu treści się nie powiodło"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Skopiowanie się nie powiodła"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Pobieranie dodatkowych plików metadanych…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Pobieranie informacji o aktualizacji…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Aktualizacja zapewnia najnowsze funkcje oraz ulepszenia wydajności "
+"i stabilności."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Obsługa pakietów Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak to system dla programów w systemie Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Pobieranie metadanych Flatpak dla %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Aktualizacja urządzenia %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Aktualizacja komputera %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Aktualizacja wbudowanego kontrolera %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Aktualizacja podsystemu ME urządzenia %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Aktualizacja firmowego podsystemu ME urządzenia %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Aktualizacja podsystemu ME użytkownika końcowego urządzenia %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Aktualizacja kontrolera %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Aktualizacja kontrolera Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Aktualizacja mikrokodu procesora %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Aktualizacja konfiguracji urządzenia %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Pobieranie podpisu aktualizacji oprogramowania sprzętowego…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Pobieranie metadanych aktualizacji oprogramowania sprzętowego…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Obsługa aktualizacji oprogramowania sprzętowego"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Dostarcza obsługę aktualizacji oprogramowania sprzętowego"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Pobieranie ocen programów…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Obsługa ODRS"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS to serwis dostarczający recenzje programów pisane przez użytkowników"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Sklep Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Obsługa pakietów Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap to uniwersalny pakiet dla systemu Linux"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..c42fd3e
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,4856 @@
+# Portuguese translation for gnome-software.
+# Copyright © 2014 gnome-software
+# This file is distributed under the same license as the gnome-software package.
+# Tiago Santos <tiagofsantos81@sapo.pt>, 2014 - 2016.
+# Pedro Albuquerque <palbuquerque73@gmail.com>, 2015.
+# Sérgio Cardeira <scardeira.sergio@gmail.com>, 2016.
+# João Nuno Matos <joaonmatos@gmail.com>, 2020.
+# Juliano Camargo <julianosc@pm.me>, 2020.
+# Juliano de Souza Camargo <julianosc@pm.me>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-21 17:48+0100\n"
+"Last-Translator: Juliano de Souza Camargo <julianosc@pm.me>\n"
+"Language-Team: Portuguese <>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Gtranslator 3.38.0\n"
+"X-DamnedLies-Scope: partial\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Aplicações GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gestor de aplicações para o GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"O Aplicações permite encontrar e instalar novas aplicações e extensões do "
+"sistema, além de remover aplicações já instaladas."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"O Aplicações GNOME apresenta aplicações populares em destaque com descrições "
+"úteis e múltiplas capturas de ecrã por aplicação. Aplicações podem ser "
+"encontradas tanto navegando a lista de categorias como procurando. Também "
+"permite que atualize o seu sistema utilizando uma atualização sem estar "
+"ligado à Internet."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Página inicial (visão geral)"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Detalhes sobre uma aplicação"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Painel das aplicações instaladas"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Painel das atualizações"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detalhes sobre as atualizações"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "O Projeto GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalar um ficheiro <i>appstream</i> numa localização do sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "A instalar um ficheiro <i>appstream</i> numa localização do sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Lista de projetos compatíveis"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Esta é uma lista de projetos compatíveis que deverão aparecer como GNOME, "
+"KDE e XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Se o Aplicações GNOME deve ser usado para gerir atualizações"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Caso desativado, o Aplicações Gnome esconderá o painel de atualizações, "
+"deixará de executá-las e notificá-las automaticamente."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Transferir e instalar atualizações automaticamente"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Se ligado, o Aplicações GNOME transfere automaticamente atualizações em "
+"segundo plano, e instala aquelas que não necessitam de um reinício do "
+"sistema."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notificar utilizador acerca de atualização pendente em segundo plano"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Caso ativada, o Aplicações GNOME notificará o utilizador acerca de "
+"atualizações que ocorreram quando o mesmo estava inactivo."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Se recarrega automaticamente quando a ligação é limitada"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Caso ativada, o Aplicações GNOME verificará por actualizações em segundo "
+"plano quando a utilizar uma conexão medida (eventualmente transfere alguns "
+"metadados, verifica atualizações etc... que podem implicar em gastos ao "
+"utilizador)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Se é a primeira vez que o Aplicações GNOME é iniciado"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostrar a classificação por estrelas à frente das aplicações"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtra aplicações baseado na ramificação predefinida especificada como remota"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Aplicações não livres mostram um aviso antes de serem instaladas"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quando aplicações não livres são instaladas um aviso é mostrado. Isto "
+"controla se o aviso é suprimido."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Lista de aplicações populares"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Uma lista de aplicações a serem utilizadas. Substituí as predefinidas pelo "
+"sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "A última verificação de data e hora"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "A data e hora da última notificação de atualização"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"A data e hora da primeira atualização de segurança, limpo depois da "
+"atualização"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "O data e hora da última atualização"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"O último registro de data/hora quando o sistema actualizou pela última vez"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"O tempo (em segundos) para verificar se a imagem de versão mais recente "
+"ainda é válida"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Escolher um número maior implicará em menos viagens de ida e volta ao "
+"servidor remoto, mas atualizações de imagens podem demorar a chegar ao "
+"utilizador. Um valor 0 significa nunca verificar junto ao servidor se a "
+"imagem já existe em memória."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "O servidor a utilizar para análises de aplicações"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "O valor mínimo de karma para as análises"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Análises com karma menor que este número não serão mostradas."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Uma lista oficial de fontes que não deverão ser consideradas como de "
+"terceiros"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Uma lista oficial de fontes que deverão ser consideradas como contendo "
+"apenas software livre"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"O URL da licença a ser utilizado quando uma aplicação deve ser considerada "
+"como software livre"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instalar aplicações associadas em todos os utilizadores do sistema sempre "
+"que possível"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permitir acesso ao diálogo Fontes de Software"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Oferecer atualizações para pré-lançamentos"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostrar alguns elementos do IU a informar o utilizador que a aplicação não é "
+"livre"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Ver linha de comando para instalar repositórios 'nonfree' de aplicações"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Ver o tamanho ocupado pelas aplicações instalada na lista de aplicações "
+"instaladas"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://pt.wikipedia.org/wiki/Domínio_público'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "O URI que introduz as aplicações proprietárias e 'nonfree'"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"A lista de URLs a apontar aos ficheiros 'appstream' que serão transferidos "
+"numa pasta de informações de aplicações"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalar um ficheiro <i>AppStream</i> numa localização do sistema para todos "
+"utilizadores"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Ativa o repositório de extensões do GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Um texto a gravar o id utilizado no início de sessão da conta online Gnome"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalação de aplicações"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalar as aplicações selecionadas no seu sistema"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Selecionar tudo"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Não selecionar nenhuma"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Fontes de software"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Definições de atualização"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Aplicações"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Recuar"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explorar"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instaladas"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Atualizações"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Pesquisa"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Fonte"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Fontes de Software"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examinar Disco"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Definições de rede"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Reiniciar"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Mais informação"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Atualizações automáticas interrompidas"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Saber _Mais"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Ficheiro local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pacote"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Pendente"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalada"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "A instalar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "A remover"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Modo de inicialização: pode ser \"updates\" (para atualizações), \"updated"
+"\" (para atualizados), \"installed\" (para instalados) ou \"overview\" (para "
+"visão geral)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODO"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Procurar aplicações"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "PROCURA"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostrar detalhes da aplicação (utilizando o ID da aplicação)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostrar detalhes da aplicação (utilizando o nome do pacote)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NOMEPACOTE"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instalar aplicação (utilizando o seu ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Abrir um ficheiro de pacote local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NOMEFICHEIRO"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"O tipo de interação esperada para esta ação: 'none', 'notify', ou 'full'"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostrar informação de depuração verbosa"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instala qualquer atualização pendente em segundo plano"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostrar definições de atualização"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Sair da instância atual"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferir ficheiros locais de origens à AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostrar número da versão"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Tiago S. ,2014\n"
+"Pedro Albuquerque <palbuquerque73@gmail.com>\n"
+"João Nuno Matos <joaonmatos@gmail.com>\n"
+"Juliano de Souza Camargo <julianosc@pm.me>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Sobre o Aplicações"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Um modo agradável de gerir as aplicações no seu sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Ups! Não foram encontrados detalhes sobre a aplicação."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visitar a página web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalar…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalar"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Atualizar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Remover"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "O dispositivo não pode ser usado durante a atualização."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Requer permissões adicionais"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Autenticação remota necessária %s (domínio %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Autenticação Necessária"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Início de sessão"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Utilizador"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Palavra passe"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Outros"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Todas"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Destaques"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Destaques - %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Pontuação"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nome"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostrar"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menu de filtração de subcategorias"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordenar por"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menu de ordenação de subcategorias"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Por favor escreva um número de 1 a %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Escolha uma aplicação:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Foram instalados updates ao SO"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Há atualizações recentes que podem ser revistas"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s está agora instalada"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr ""
+"É necessário reiniciar o dispositivo para que as mudanças tenham efeito."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "A aplicação está pronta a ser usada."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Reiniciar"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Iniciar"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalar aplicações de terceiros?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Ativar fontes de software de terceiros?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s não é um <a href=\"https://pt.wikipedia.org/wiki/"
+"Software_livre_e_de_código_aberto\">programa livre e de código aberto</a>, e "
+"é fornecido por “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s é fornecido por “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Esta fonte de software tem de ser ativada para continuar a instalação."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Poderá ser ilegal instalar ou usar %s nalguns países."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Poderá ser ilegal instalar ou usar este codec nalguns países."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Não avisar novamente"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Ativar e instalar"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Seguem os erros detalhados do gestor de pacotes:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detalhes"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Foi instalada uma atualização"
+msgstr[1] "Foram instaladas aplicações"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] ""
+"É necessário reiniciar o dispositivo para que a mudança tenha efeito."
+msgstr[1] ""
+"É necessário reiniciar o dispositivo para que as mudanças tenham efeito."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Agora não"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Sem violência involvendo desenhos animados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personagem de desenhos animados em situações inseguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personagem de desenhos animados em conflito agressivo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violência gráfica envolvendo personagem de desenhos animados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Sem violência em contexto de fantasia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personagens em situações inseguras facilmente distinguíveis da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Personagem em conflito agressivo facilmente distinguíveis da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violência gráfica facilmente distinguível da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Sem violência realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personagens moderadamente realistas em situações inseguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Personagens moderadamente realistas em conflito agressivo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Violência gráfica envolvendo personagens realistas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Sem derrame de sangue"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Derrame de sangue não realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Derrame de sangue realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Representações de derrame de sangue e mutilações de partes do corpo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Sem violência sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Violação ou outro comportamento sexual violento"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Sem referência a bebidas alcoólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referência a bebidas alcoólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Uso de bebidas alcoólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Sem referência a drogas ilícitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referência a drogas ilícitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uso de drogas ilícitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Sem referências a produtos com tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referências a produtos com tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uso de produtos com tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Sem qualquer nudez"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Nudez artística breve"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Nudez prolongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Sem referências ou representações sexuais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Referências ou representações provocatórias"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Referências ou representações sexuais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Comportamento sexual gráfico"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Sem qualquer profanidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Uso ligeiro ou infrequente de profanidades"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Uso moderado de profanidades"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Uso constante ou frequente de profanidades"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Sem humor impróprio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Humor brejeiro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Humor vulgar ou visceral"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor maduro ou sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Sem qualquer tipo de linguagem discriminatória"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatividade em relação a um grupo específico de pessoas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminação destinada a causar dano emocional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminação explícita baseada em género, sexualidade, raça ou religião"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Sem qualquer publicidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Colocação de produtos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Referências explícitas a determinadas marcas ou produtos registados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Os jogadores são encorajados a comprar itens específicos do mundo real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Sem qualquer jogo de apostas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Jogo de apostas com eventos aleatórios utilizando tokens ou créditos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Jogo de apostas com dinheiro fictício"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Jogo de apostas com dinheiro real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Sem possibilidade de gastar dinheiro real dentro do jogo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Os utilizadores são encorajados a doar dinheiro real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Possibilidade de gastar dinheiro real dentro do programa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Sem maneira de conversar com outros utilizadores por texto"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interações entre jogadores sem funcionalidade de conversação"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Conversa controlada entre utilizadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Conversa entre utilizadores não controlada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Sem maneira de falar com outros utilizadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Conversa em áudio e vídeo entre utilizadores não controlada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Sem partilha de nomes de utilizadores de redes sociais e endereços de email"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Partilha de nomes de utilizadores de redes sociais e endereços de email"
+
+# Profiling já foi traduzido como perfilamento, porém a tradução também pode ser a de criação de perfil --Enrico
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Sem partilha informação do utilizador com terceiros"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Procura uma versão mais recente do programa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Partilha dados de diagnósticos que não possiblitam identificar o utilizador"
+
+# Profiling já foi traduzido como perfilamento, porém a tradução também pode ser a de criação de perfil --Enrico
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Partilha dados que possiblitam indentificar o utilizador"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Sem partilha da localização com outros utilizadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Partilha de localização com outros utilizadores"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Sem referências à homossexualidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Referências indiretas à homossexualidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Beijos entre pessoas do mesmo género"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportamento sexualmente explícito entre pessoas do mesmo género"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Sem referências à prostitição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referências indiretas à prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referências diretas à prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Representações gráficas de prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Sem referências ao adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referências indiretas ao adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referências diretas ao adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Representações gráficas de adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Sem personagens sexualizadas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Personagens humanas semi-nuas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Personagens humanas explicitamente sexualizadas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Sem referências a profanação de cadáveres"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Representações ou referências a profanações históricas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Representações de profanações contemporâneas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Representações graficamente explícitas de profanações contemporâneas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Sem cadáveres humanos visíveis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Cadáveres humanos visíveis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Cadáveres humanos sujeitos às intempéries"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Representações explícitas de profanação de cadáveres"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Sem referências à escravatura"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Representações ou referências históricas a escravatura"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Representações de escravatura contemporânea"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Representações graficamente explícitas de escravatura contemporânea"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Todas as audiências"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Todas as audiências"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Maiores de 18"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Maiores de 17"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Maiores de 13"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Maiores de 10"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Maiores de 6"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Até 3 anos"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Uma aplicação"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s está a pedir suporte adicional a formato de ficheiro."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Tipos MIME adicionais necessários"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s está a pedir tipos de letra adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Tipos de letra adicionais necessários"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s está a pedir codecs multimédia adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Codecs multimédia adicionais necessários"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s está a pedir controladores de impressora adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Controladores de impressora adicionais necessários"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s está a pedir pacotes adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Pacotes adicionais requeridos"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Localizar no Aplicações"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "A remover…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Instalação pendente…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Atualização pendente…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "A preparar…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Esta aplicação só pode ser usada se tiver uma ligação à Internet ativa."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalar"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalar…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Iniciar"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Remover"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Rede"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Pode conectar-se à rede"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Serviços do Sistema"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Pode aceder a serviços D-Bus através do barramento do sistema"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Serviços da Sessão"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Pode aceder a serviços D-Bus através do barramento da sessão"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Pode aceder diretamente aos dispositivos do sistema"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Pasta pessoal"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Pode ver, editar, e criar ficheiros"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Pode ver ficheiros"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistema de ficheiros"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Pasta das transferências"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Definições"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Pode ver e modificar quaisquer definições"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistema de visualização legado"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Usa um sistema de visualização antigo e inseguro"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Evasão da sandbox"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Pode sair da sandbox e evitar quaisquer outras restrições à execução"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Esta aplicação está completamente contida numa sandbox."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Não foi possível determinar quais partes do sistema são acedidas por esta "
+"aplicação. Isto é normal em aplicações mais antigas."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nunca"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Baixas"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Médias"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Altas"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Desconhecidas"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "É necessário conexão à Internet para escrever uma avaliação"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Impossível encontrar «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domínio público"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://pt.wikipedia.org/wiki/Domínio_público"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.pt-br.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Software Livre"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Os utilizadores são regidos pela seguinte licença:"
+msgstr[1] "Os utilizadores são regidos pelas seguintes licenças:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mais informação"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Página de detalhes"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "A transferir"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Atualizar"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Adicionar atalho"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Re_mover atalho"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Sem capturas de ecrã"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Fonte de software incluída"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Esta aplicação inclui uma fonte de software que fornece atualizações, assim "
+"como acesso a outras aplicações."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Sem fontes de software incluídas"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Esta aplicação não inclui uma fonte de software. Não será atualizada com "
+"novas versões."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Esta aplicação já é fornecida pela sua distribuição e não deve ser "
+"substituída."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Fonte de software identificada"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Adicionar esta fonte de software dar-lhe-á acesso a aplicações e "
+"atualizações adicionais."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Utilize apenas fontes de software em que confie."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Página _Web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Doar"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Traduzida para o seu idioma"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentação"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Atividade de lançamentos"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integração de sistema"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Numa sandbox"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versão"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Classificação Etária"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permissões"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Atualizada"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categoria"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Tamanho instalado"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Tamanho da transferência"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Programador"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licença"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Livre"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietário"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Complementos"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Os complementos selecionados serão instalados com a aplicação."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Análises"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Escrever uma análise"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Mostrar mai_s"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Isto significa que o software pode ser livremente executado, copiado, "
+"distribuído, estudado e modificado."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Aplicação Proprietária"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Isto significa que este software pertence a um indivíduo ou companhia. "
+"Existem frequentemente restrições ao seu uso e o seu código-fonte, por "
+"norma, não é acessível."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licença da aplicações desconhecida"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Os termos da licença deste software são desconhecidos."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "A aplicação tem esta classificação pelas seguintes razões:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Não há detalhes disponíveis para esta classificação."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " e "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tipos de letras disponíveis para a escrita %s"
+msgstr[1] "Tipos de letra disponíveis para as escritas %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Software disponível para o codec %s"
+msgstr[1] "Software disponível para os codecs %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Impossível encontrar a aplicação pedida"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s não encontrado"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "na página web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Não há aplicações disponíveis que forneçam o ficheiro %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter aplicações em falta "
+"podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Não há aplicações disponíveis para suporte a %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s indisponível."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter uma aplicação que "
+"suporte este formato podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Sem letras disponíveis para suporte ao script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter letras adicionais "
+"podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Não há complementos de codecs disponíveis para o formato %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter um codec que possa "
+"reproduzir este formato podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Não há recursos de Plasma disponíveis para suporte a %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter recursos Plasma "
+"adicionais podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Não há controladores de impressora disponíveis para %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter um controlador que "
+"suporte esta impressora podem ser encontradas %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "esta página web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Infelizmente o %s que procura não foi encontrado. Por favor, veja %s para "
+"mais informação."
+msgstr[1] ""
+"Infelizmente o %s que procura não foi encontrado. Por favor, veja %s para "
+"mais informação."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Falha ao localizar resultados da procura"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Formato de ficheiro %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Página de codecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Boas vindas"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Boas vindas ao Aplicações"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"O Aplicações permite-lhe instalar os programas que necessita num único "
+"local. Veja as nossas recomendações, navegue pelas categorias ou procure as "
+"aplicações que quiser."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Vamos às compras!"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Removida"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Atualizada"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Desconhecida"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Histórico"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicações de sistema"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Página de instaladas"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "O catálogo de aplicações está a ser tranferido"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "A abrir página"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "A iniciar…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"A ligação atual é limitada. Ligações limitadas têm limites de dados ou "
+"custos associados com estes. Para poupar dados, as atualizações automáticas "
+"estão desligadas.\n"
+"\n"
+"As atualizações automáticas serão retomadas quando uma ligação sem limites "
+"fique disponível. Até lá, ainda pode instalar atualizações manualmente.\n"
+"\n"
+"Alternativamente, se a ligação atual foi identificada como limitada "
+"incorretamente, pode mudar essa classificação manualmente."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Abrir as _Definições de Rede"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderar página"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Não existem análises para moderar"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistema"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "utilizador"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ramo"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formato"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalação"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Mais..."
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicações áudio e vídeo recomendadas"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Jogos recomendados"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicações de gráficos recomendadas"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicações de produtividade recomendadas"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Aceder a mais aplicações, de fontes terceiras selecionadas."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Algumas destas aplicações são proprietárias, e portanto têm restrições sobre "
+"o seu uso, partilha, e acesso ao código fonte."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Saber mais…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Ativar"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Página de visão geral"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Ativar fontes de software de terceiros?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Próximo"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Escolhas do Editor"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Lançamentos Recentes"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorias"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nenhuns dados de aplicação encontrados"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparar %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Tem certeza que quer remover %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Todas as aplicações de %s serão removidas e, para utilizá-las novamente, "
+"terá de reinstalar a fonte."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Tem certeza que quer remover %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s será removida e para utilizá-la novamente, terá de o instalar."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalada)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Definições de Atualização"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Atualizações automáticas"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"As atualizações automáticas são desligadas em ligações móveis ou limitadas."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificações de atualizações automáticas"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Mostrar notificações quando atualizações forem instaladas automaticamente."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Parte do software atualmente instalado não é compatível com %s. Se "
+"continuar, os programas seguintes serão automaticamente removidos durante a "
+"atualização:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Aplicações incompatíveis"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continuar"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicação instalada"
+msgstr[1] "%u aplicações instaladas"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u complemento instalado"
+msgstr[1] "%u complementos instalados"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicação"
+msgstr[1] "%u aplicações"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u complemento"
+msgstr[1] "%u complementos"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s e %s instaladas"
+msgstr[1] "%s e %s instaladas"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Remover «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Desativar «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"As aplicações que foram instaladas a partir desta fonte não irão receber "
+"mais atualizações, incluindo de segurança."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Desativar"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "o sistema operativo"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Estas fontes de aplicações suplementam as fontes predefinidas do %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Fontes de aplicações de terceiros"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Sem fontes adicionais"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Ativar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Remover..."
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Desativar..."
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "A ativar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "A desativar"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Ativa"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Inativa"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Odeio"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Não gosto"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "É OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Gosto"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Muito boa"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Por favor, tire mais tempo para escrever a sua análise"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Por favor, escolha uma avaliação em estrelas"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "O resumo é demasiado curto"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "O resumo é demasiado longo"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "A descrição é demasiado curta"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "A descrição é demasiado longa"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publicar análise"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Postar"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Resumo"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Dar um breve resumo da sua avaliação, por exemplo: \"Grande aplicação, "
+"recomendo\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Análise"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"O que pensa desta aplicação? Tente dar argumentos para os seus pontos de "
+"vista."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Saiba que dados são enviadas na nossa <a href=\"https://odrs.gnome.org/"
+"privacy\">política de privacidade</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "avaliações publicadas"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Pode denunciar análises por comportamento abusivo, rude ou discriminatório."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Assim que denuncie, a análise será escondida até que seja verificada por um "
+"administrador."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Denunciar Análise?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Denunciar"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Esta análise foi-lhe útil?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sim"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Não"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Mehh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Denuncie…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Remover…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Impossível encontrar captura de ecrã"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Falha ao carregar imagem"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Impossível encontrar tamanho da captura de ecrã"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Impossível criar cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Captura de ecrã inválida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Captura de ecrã indisponível"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Captura de ecrã"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "Mais %u correspondência"
+msgstr[1] "Mais %u correspondências"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Página de procura"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nenhuma aplicação encontrada"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Não foi possível descarregar atualizações de firmware de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Não foi possível descarregar atualizações de %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Não foi possível descarregar atualizações"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível descarregar atualizações: acesso à Internet é necessário, "
+"mas não está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Não foi possível descarregar atualizações de %s: sem espaço suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Não foi possível descarregar atualizações: sem espaço suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Não foi possível descarregar atualizações: autenticação necessária"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Não foi possível descarregar atualizações: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Não foi possível descarregar atualizações: não tem permissões para instalar "
+"aplicações"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Não foi possível obter a lista de atualizações"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Não foi possível instalar %s porque a transferência de %s falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Não foi possível instalar %s porque a transferência falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Não foi possível instalar %s porque o runtime %s não está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Não foi possível instalar %s porque a aplicação não é suportada"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível instalar: acesso à Internet é necessário mas não está "
+"disponível"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Não foi possível instalar: a aplicação tem um formato inválido"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Não foi possível instalar %s: sem espaço em disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Não foi possível instalar %s: autenticação é necessária"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Não foi possível instalar %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Não foi possível instalar %s: não tem permissão para instalar software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Não foi possível instalar %s: necessària a ligação à corrente elétrica"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Não foi possível instalar %s: a bateria não tem carga suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Não foi possível instalar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Não foi possível atualizar %s a partir da fonte %s porque a transferência "
+"falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Não foi possível atualizar %s porque a transferência falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Não foi possível instalar aplicações a partir da fonte %s porque a "
+"transferência falhou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Não foi possível instalar atualizações porque a transferência falhou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível atualizar: acesso à Internet é necessário mas não está "
+"disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Não foi possível atualizar %s: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Não foi possível instalar atualizações: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Não foi possível atualizar %s: autenticação obrigatória"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Não foi possível instalar atualizações: autenticação obrigatória"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Não foi possível atualizar %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Não foi possível instalar atualizações: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Não foi possível atualizar %s: não tem permissão para atualizar software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Não foi possível instalar atualizações: não tem permissão para atualizar "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Não foi possível atualizar %s: necessária ligação à corrente elétrica"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Não foi possível instalar atualizações: necessária ligação à corrente "
+"elétrica"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Não foi possível atualizar %s: a bateria não tem carga suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Não foi possível instalar atualizações: a bateria não tem carga suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Não foi possível atualizar %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Não foi possível instalar atualizações"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Não foi possível atualizar do %s para o %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Não foi possível atualizar para o %s porque a transferência falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "Não foi possível atualizar para o %s: a transferência falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+"Não foi possível atualizar para o %s: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Não foi possível atualizar para o %s: autenticação obrigatória"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Não foi possível atualizar para o %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Não foi possível atualizar para o %s: não tem permissão para atualizar a "
+"distribuição"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Não foi possível atualizar para o %s: necessária ligação à corrente elétrica"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Não foi possível atualizar para o %s: a bateria não tem carga suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Não foi possível atualizar para o %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Não foi possível remover %s: autenticação obrigatória"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Não foi possível remover %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Não foi possível remover %s: não tem permissão para remover software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Não foi possível remover %s: necessária ligação à corrente elétrica"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Não foi possível remover %s: a bateria não tem carga suficiente"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Não foi possível remover %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Não foi possível abrir %s: %s não está instalado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Não há espaço suficiente em disco. Por favor, liberte algum e tente de novo"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Desculpe, alguma coisa correu mal"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Falha ao instalar o ficheiro: não é suportado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Falha ao instalar o ficheiro: a autenticação falhou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Falha ao instalar: não suportado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Falha ao instalar: a autenticação falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Não foi possível ligar-se a %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s precisa de ser reiniciada para usar os novos plugins."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Esta aplicação precisa de ser reiniciada para usar os novos plugins."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Necessária ligação à corrente elétrica"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "A bateria não tem carga suficiente"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Fonte: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (A instalar)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (A remover)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Remover Todas"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nenhuma descrição de atualização foi fornecida."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalada em %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Atualizações instaladas"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Pacotes novos"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Pacotes a remover"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Pacotes a atualizar"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Pacotes a reverter"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nenhumas atualizações instaladas neste sistema."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Instalações de segurança pendentes"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "É recomendável que instale atualizações importantes agora"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Reiniciar & _Instalar"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Atualizações de aplicações disponíveis"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Atualizações importantes do sistema operativo e de aplicações estão prontas "
+"para serem instaladas"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Ver"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicação foi atualizada — é necessário reiniciar o sistema"
+msgstr[1] "%u aplicações foram atualizadas — é necessário reiniciar o sistema"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicação atualizada"
+msgstr[1] "%u aplicações atualizadas"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s foi atualizada."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Por favor reinicie a aplicação."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s e %s foram atualizadas."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "É necessário reiniciar %u aplicação."
+msgstr[1] "É necessário reiniciar %u aplicações."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inclui %s, %s e %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Atualizações do sistema operativo disponíveis"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Atualize para continuar a receber atualizações de segurança."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Está disponível uma nova versão de %s para instalar"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Atualizações de aplicações disponíveis"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Falha na atualização de aplicações"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Uma atualização importante do sistema operativo falhou ao instalar."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostrar detalhes"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Atualização do Sistema Completa"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Bem-vindo(a) ao %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Atualização de aplicação instalada"
+msgstr[1] "Atualizações de aplicações instaladas"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Foi instalada uma atualização importante do sistema operativo."
+msgstr[1] "Foram instaladas atualizações importantes do sistema operativo."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Análise"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Falha ao atualizar"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "O sistema já estava atualizado."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "A atualização foi cancelada."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Foi pedido acesso à Internet mas não estava disponível. Por favor, assegure-"
+"se que tem acesso à Internet e tente novamente."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Houve problemas de segurança com a atualização. Por favor, consulte o seu "
+"fornecedor de programas para mais detalhes."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Não houve espaço suficiente em disco. Por favor, liberte algum e tente "
+"novamente."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Lamentamos: a atualização falhou a instalação. Por favor, espere por outra "
+"atualização e tente novamente. Se o problema persistir, contacte o seu "
+"fornecedor de programas."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Ontem, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Ontem, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Há dois dias atrás"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Há três dias atrás"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Há quatro dias atrás"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Há cinco dias atrás"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Há sies dias atrás"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Há uma semana atrás"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Há duas semanas atrás"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "A procurar novas atualizações…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "A configurar as atualizações…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(isto pode levar algum tempo)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Última verificação: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "O %s %s não é mais suportado."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "O seu SO não é mais suportado."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Isto significa que não recebe atualizações de segurança."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "É recomendável que atualize para uma versão mais recente."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Podem ser aplicados custos adicionais"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Procurar atualizações em redes móveis de banda larga pode incorrer em custos."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Ainda assim procurar"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Sem rede"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "É necessário acesso à Internet para procurar atualizações."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "A procurar…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Procurar atualizações"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Página das atualizações"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "As aplicações estão atualizadas"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Procurar atualizações em redes móveis de banda larga pode incorrer em custos"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Ainda assim Pro_curar"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Procurar atualizações online"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Defi_nições de rede"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "As atualizações são geridas automaticamente"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Reiniciar & Atualizar"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Atualizar Todas"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Firmware Integrado"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "É necessário reiniciar o sistema"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Atualizações de Aplicações"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware do Dispositivo"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Transferir"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "É recomendável que faça cópias de segurança antes de atualizar."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Reiniciar Agora"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "As atualizações serão aplicadas quando o sistema for reiniciado."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Já está disponível"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "À espera para transferir o %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "A transferir o %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s pronto para ser instalado"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Uma atualização significativa, com novas funções e mais polimento."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Saiba mais"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Adiciona, remove ou atualiza aplicações neste computador"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Atualizações;Fontes;Origens;Repositórios;Preferências;Instalar;Desinstalar;"
+"Programa;Software;App;Loja;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Criação e edição de áudio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Reprodutores de música"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depuradores"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Ambientes de desenvolvimento"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Inteligência artificial"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Química"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Idiomas"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemática"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robótica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Ação"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocos"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tabuleiro"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartas"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladores"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Infantil"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lógica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "RPG"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Desporto"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estratégia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Gráficos em 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Digitalização"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Gráficos vetoriais"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visualizadores"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendários"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Base de dados"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanças"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Processadores de texto"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Tipos de letra"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Descodificadores"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Fontes de entrada"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pacotes de idiomas"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Tradução"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Controladores de Dispositivos"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chat"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Notícias"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navegadores Web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editores de texto"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Todas"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Art"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Bandas Desenhadas"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficção"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Saúde"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "História"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estilo de vida"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Política"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Desporto"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Áudio e Vídeo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Ferramentas de desenvolvimento"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educação & Ciência"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Jogos"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Gráficos e fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produtividade"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicação e Notícias"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referência"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilitários"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Atualizações do SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclui melhorias de desempenho, estabilidade e segurança."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "A transferir imagens destacadas…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Uma atualização do Endless OS, com novas funções e mais polimento."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"O serviço de atualizações EOS não conseguiu obter e aplicar a atualização."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instalador AppStream de sistema das Aplicações GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Falha ao processar os argumentos da linha de comando"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "É necessário especificar um, e só um, nome de ficheiro"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Este programa pode apenas ser usado pelo utilizador root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Falha ao verificar o tipo de conteúdo"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Falha ao copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "A transferir ficheiros de metadados adicionais…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "A transferir informação sobre a atualização…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Atualize para obter as últimas funcionalidades e melhorias de desempenho e "
+"estabilidade."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Suporte para Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak é uma framework para aplicações desktop no Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "A obter metadados flatpak para %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Atualização de Dispositivo do %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Atualização de Sistema do %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Atualização de Controlador Integrado do %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Atualização ME do %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Atualização Empresarial ME do %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Atualização de Consumo ME do %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Atualização de Controlador do %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Atualização de Controlador Thunderbolt do %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Atualização de Microcódigo da CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Atualização de Configurações do %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "A transferir assinaturas criptográficas da atualização de firmware…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "A transferir metadados da atualização de firmware…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Suporte para Atualizações de Firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Permite realizar atualizações de firmware"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "A transferir avaliações das aplicações…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Suporte para Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"O ODR é um serviço que permite obter avaliações das aplicações dadas pelos "
+"seus utilizadores"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Suporte para Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Um snap é um pacote universal para Linux"
+
+#~| msgid "_About"
+#~ msgid "About %s"
+#~ msgstr "_Sobre o %s"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Listas de fontes que foram ativadas anteriormente"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Lista de fontes que tenham sido ativadas quando são instaladas aplicações "
+#~ "de terceiros."
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Mostrar a pasta de gestão de IU"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Adicionar à pasta da aplicação"
+
+#~ msgid "_Add"
+#~ msgstr "_Adicionar"
+
+#~ msgid "_All"
+#~ msgstr "_Todas"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nome da pasta"
+
+# Profiling já foi traduzido como perfilamento, porém a tradução também pode ser a de criação de perfil --Enrico
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Mostrar informações de criação de perfil para este serviço"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "Para continuar tem de autenticar-se"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Para continuar tem de autenticar-se em %s."
+
+#~ msgid "Email address"
+#~ msgstr "Endereço de e-mail"
+
+#~ msgid "I have an account already"
+#~ msgstr "Eu já tenho uma conta"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Pretendo criar agora uma conta"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Esqueci-me da palavra passe"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Autentique-se automaticamente da próxima vez"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Introduza o seu PIN único para a autenticação com dois fatores"
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Continue"
+#~ msgstr "Continuar"
+
+#~ msgid "Spacing"
+#~ msgstr "Espaçamento"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "O espaço entre filhos"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informações sobre %s, bem como as opções de como obter um codec que pode "
+#~ "reproduzir este formato podem ser encontradas na paǵina web."
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Definições da extensão"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Use extensões por sua conta e risco. Se o seu sistema tiver problemas, é "
+#~ "recomendado que as desative."
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Impossível encontrar \"%s\""
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Clique nos itens para os selecionar"
+
+#~ msgid "Select"
+#~ msgstr "Selecionar"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Adicionar à pasta…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Mover para a pasta…"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instalar todas"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Reiniciar & _Instalar"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Sem aplicações ou extensões instaladas; outro programa pode ainda estar"
+
+#~ msgid "Remove Source"
+#~ msgstr "Remover fonte"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Fontes de aplicações podem ser transferidas da Internet. Dão-lhe acesso a "
+#~ "programas adicionais que não são fornecidos por %s."
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Fontes de aplicações dão-lhe acesso a programas adicionais."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Remover a fonte também removerá qualquer aplicação instalada a partir "
+#~ "dela."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nenhuma aplicação instalada desta fonte"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalada desta fonte"
+
+#~ msgid "Source Details"
+#~ msgstr "Detalhes da fonte"
+
+#~ msgid "Last Checked"
+#~ msgstr "Última verificação"
+
+#~ msgid "Added"
+#~ msgstr "Adicionada"
+
+#~ msgid "Website"
+#~ msgstr "Página Web"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Falha ao instalar %s."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Falha ao remover %s."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Certifique-se que tem acesso à Internet e tente novamente."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Por favor, liberte algum e tente novamente."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Se o problema persistir, contacte o seu fornecedor de software."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Interações entre jogadores com mensagens predefinidas sem funcionalidade "
+#~ "de conversação."
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgid "_Quit"
+#~ msgstr "_Sair"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "O catálogo de aplicações está a ser carregado"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Addons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensões da interface"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matemática"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Todas"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgid "Science"
+#~ msgstr "Ciência"
+
+#~ msgid "One Star"
+#~ msgstr "Uma estrela"
+
+#~ msgid "Two Stars"
+#~ msgstr "Duas estrelas"
+
+#~ msgid "Three Stars"
+#~ msgstr "Três estrelas"
+
+#~ msgid "Four Stars"
+#~ msgstr "Quatro estrelas"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinco estrelas"
+
+#~ msgid "3rd party"
+#~ msgstr "Terceiros"
+
+#~ msgid "web app"
+#~ msgstr "aplicação web"
+
+#~ msgid "nonfree"
+#~ msgstr "não grátis"
+
+#~ msgid "shell extension"
+#~ msgstr "extensões da interface"
+
+#~ msgid "page0"
+#~ msgstr "página0"
+
+#~ msgid "page1"
+#~ msgstr "página1"
+
+#~ msgid "_Installing"
+#~ msgstr "A _instalar"
+
+#~ msgid "_Removing"
+#~ msgstr "A _remover"
+
+#~ msgid " or "
+#~ msgstr " ou "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Desconhecido"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Este programa vem de terceiros."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr "Este programa vem de terceiros e pode conter componente não livres."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Este programa pode conter componentes não livres."
+
+#~ msgid "non-free"
+#~ msgstr "não livre"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicações de escritório recomendadas"
+
+#~ msgid "Audio"
+#~ msgstr "Áudio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Edição"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Base de dados"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Gravação de discos"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radio amador"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Misturadores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Gravadores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sequenciadores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Sintonizadores"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Compilação"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Base de dados"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..677b00b
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,5866 @@
+# Brazilian Portuguese translation for gnome-software.
+# Copyright (C) 2020 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013.
+# Georges Basile Stavracas Neto <georges.stavracas@gmail.com>, 2013, 2014.
+# Felipe Braga <fbobraga@gmail.com>, 2015.
+# Artur de Aquino Morais <artur.morais93@outlook.com>, 2016.
+# Fábio Nogueira <fnogueira@gnome.org>, 2015, 2016.
+# Gustavo Marques <gutodisse@gmail.com>, 2016.
+# Enrico Nicoletto <liverig@gmail.com>, 2013-2016, 2018.
+# Bruno Lopes da Silva <brunolopesbldsb@gmail.com>, 2018.
+# Ricardo Silva Veloso <ricvelozo@gmail.com>, 2018.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2013-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-23 14:31-0300\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Generator: Gtranslator 3.36.0\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Programas"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gerenciador de aplicativos para o GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"O aplicativo Programas permite que você encontre e instale novos aplicativos "
+"e extensões do sistema, além de remover aplicativos já instalados."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Programas mostra aplicativos populares em destaque com descrições "
+"úteis e múltiplas capturas de tela per aplicativo. Aplicativos podem ser "
+"encontradas tanto navegando a lista de categorias quanto pesquisando. Ele "
+"também permite que você atualize seu sistema usando uma atualização sem "
+"estar conectado a internet."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Painel de visão geral"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Painel de detalhes"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Painel de instalados"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Painel de atualizações"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Os detalhes da atualização"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "O projeto GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalar um arquivo appstream em um local do sistema"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instalando um arquivo appstream em um local do sistema"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Uma lista de projetos compatíveis"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Esta é uma lista de projetos compatíveis que devemos mostrar como GNOME, KDE "
+"e XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Se atualizações devem ser gerenciadas no GNOME Programas"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Se desativado, o GNOME Programas ocultará o painel de atualizações, não "
+"executará quaisquer ações de atualizações automáticas nem perguntará sobre "
+"atualizações."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Baixar e instalar automaticamente as atualizações"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Se habilitado, o GNOME Programas baixa automaticamente as atualizações em "
+"segundo plano, também instalando as que não requerem reinicialização."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notificar o usuário sobre aplicativos atualizados em segundo plano"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Se habilitado, o GNOME Programas notificará o usuário sobre atualizações que "
+"aconteceram enquanto o usuário estava ocioso."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Se deve atualizar automaticamente ao usar uma conexão limitada"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Se habilitado, o GNOME Programas atualiza automaticamente em segundo plano "
+"mesmo quando estiver sendo executado em uma conexão limitada (eventualmente, "
+"baixar alguns metadados, verificar atualizações, etc., o que pode resultar "
+"em custos para o usuário)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Se é a primeira execução do GNOME Programas"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Mostrar estrela de classificações ao lado de aplicativos"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtra aplicativos baseado no ramo padrão definido para o remoto"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Aplicações não livres mostram um diálogo de aviso antes de instalar"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Quando as aplicações não livres estão instaladas um diálogo de aviso pode "
+"ser mostrado. Isto controla se esse diálogo é suprimido."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Uma lista de aplicações populares"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Uma lista de aplicativos para usar, substituindo aqueles definidos pelo "
+"sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Marca de tempo de verificação da última atualização"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "A marca de tempo da notificação da última atualização"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"A marca de tempo da primeira atualização de segurança, apagada após "
+"atualização"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "A marca de tempo da última atualização"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"A última marca de tempo quando o sistema esteve online e obteve alguma "
+"atualização"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"A idade em segundos para verificar se a captura de tela ainda está válida"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Escolher um valor maior significará menos conexões com o servidor remoto, "
+"mas atualizações para as capturas de tela podem levar mais tempo para serem "
+"mostradas ao usuário. Um valor igual a 0 significa nunca verificar no "
+"servidor se a imagem já existir no cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "O servidor a ser usado para avaliações de aplicativos"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "A pontuação carma mínima para ser avaliada"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Avaliações com carma menor do que este número não serão mostradas."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Uma lista de repositórios oficiais que não devem ser considerados como de "
+"terceiros"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Uma lista de repositórios oficiais que devem ser considerados como de "
+"programa livre"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"A URL da licença a ser usada quando um aplicativo deve ser considerado como "
+"um programa livre"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instalar aplicativos empacotados para os todos usuários no sistema, se "
+"possível"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permitir acesso ao diálogo de repositórios de programas"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Oferecer atualizações para pré-lançamentos"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Mostrar alguns elementos de interface gráfica informando ao usuário que um "
+"aplicativo é não livre"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Mostrar pergunta quanto a instalação de repositórios de programas não livres"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Mostrar o tamanho instalado para aplicativos na lista de aplicativos "
+"instalados"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://pt.wikipedia.org/wiki/Software_propriet%C3%A1rio'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "A URI que explica programas não livres e proprietários"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Uma lista de URLs apontando para os arquivos appstream que serão baixados "
+"para uma pasta de app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalar os arquivos AppStream em uma localização global do sistema para "
+"todos os usuários"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Habilitar o repositório de extensões de Shell do GNOME"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Uma string armazenando o id da gnome-online-account usada para iniciar a "
+"sessão"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalação de programa"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instale programas selecionados no sistema"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Selecionar tudo"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Selecionar nenhum"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Repositório_s de programas"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Preferências de _atualização"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programas"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Voltar"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explorar"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalados"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Atualizações"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Pesquisar"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Fonte"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Repositórios de programas"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examine o disco"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Configurações de rede"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Reiniciar agora"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Mais informações"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Atualizações automáticas pausadas"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Saiba _mais"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Arquivo local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pacote"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Pendente"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Instalando"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Removendo"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Modo de inicialização, podendo ser “updates” (para atualizações), "
+"“updated” (para atualizados), “installed” (para instalados) ou "
+"“overview” (para visão geral)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MODO"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Pesquisa por aplicativos"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "PESQUISA"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Mostra detalhes do aplicativo (usando o ID do aplicativo)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Mostra detalhes do aplicativo (usando o nome do pacote)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NOMEPACOTE"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instala o aplicativo (usando o ID do aplicativo)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Abre um arquivo de pacote local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NOMEDOARQUIVO"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"O tipo de interação para essa ação: pode ser ‘none’, ‘notify’ ou ‘full’"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Mostra informações detalhadas de depuração"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instala quaisquer atualizações pendentes em segundo plano"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Mostrar preferências de atualização"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Sair da instância atual"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferência a fontes locais de arquivos ao AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Mostra o número da versão"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Enrico Nicoletto <liverig@gmail.com>\n"
+"Georges Basile Stavracas Neto <georges.stavracas@gmail.com>\n"
+"Gustavo Marques <gutodisse@gmail.com>\n"
+"Bruno Lopes da Silva <brunolopesbldsb@gmail.com>\n"
+"Ricardo Silva Veloso <ricvelozo@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Sobre o aplicativo Software"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Um modo agradável de gerenciar programas no seu sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Sinto muito! Não há detalhes para esse aplicativo."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Visitar site da web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalar…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalar"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Atualizar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Remover"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "O dispositivo não pode ser utilizado durante a atualização."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Requer permissões adicionais"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Autenticação necessária para remoto %s (reino %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Autenticação necessária"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Autenticação"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Usuário"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Senha"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Outros"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Todos"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Destaques"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s em destaque"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Classificação"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nome"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Mostrar"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Menu de filtro de subcategorias"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Ordenar por"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Menu de ordem de subcategorias"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Por favor, insira um nível de 1 a %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Escolha um aplicativo:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Atualizações do SO estão agora instaladas"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr ""
+"As atualizações recentemente instaladas estão disponíveis para avaliação"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s está agora instalado"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Um reinício é necessário para que as alterações tenham efeito."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplicativo pronto para ser usado."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Reiniciar"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Executar"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalar programa de terceiros?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Habilitar repositório de programas de terceiros?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s não é um <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">programa de código aberto e livre</a>, e é fornecido por "
+"“%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s é fornecido por “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Esta repositório de programas deve estar habilitado para continuar a "
+"instalação."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Pode ser ilegal instalar ou usar %s em alguns países."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "Pode ser ilegal instalar ou usar este codec em alguns países."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Não avisar novamente"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Habilitar e instalar"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Seguem os erros detalhados do gerenciador de pacotes:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detalhes"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Uma atualização foi instalada"
+msgstr[1] "Atualizações foram instaladas"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Um reinício é necessário para que ele tenha efeito."
+msgstr[1] "Um reinício é necessário para que eles tenham efeito."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Agora não"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Sem violência de desenho animado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Personagens de desenho animado em situações inseguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Personagens de desenho animado em conflito agressivo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Cenas fortes com violência envolvendo personagens de desenho animado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Sem violência de fantasia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Personagens em situações inseguras facilmente distinguíveis da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Personagens em conflito agressivo facilmente distinguíveis da realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr ""
+"Cenas fortes com violência envolvendo situações facilmente distinguíveis da "
+"realidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Sem violência realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Personagens levemente realísticos em situações inseguras"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Representações de personagens realísticos em conflito agressivo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Cenas fortes de violência envolvendo personagens realísticos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Sem derramamento de sangue"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Derramamento de sangue não realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Derramamento de sangue realista"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr ""
+"Representações de derramamento de sangue e mutilação de partes do corpo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Sem violência sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Estupro ou outro comportamento sexual violento"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Sem referência a bebidas alcoólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referências a bebidas alcoólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Uso de bebidas alcoólicas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Sem referência a drogas ilícitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referências a drogas ilícitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Use de drogas ilícitas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Sem referência a produtos de tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referências a produtos de tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uso de produtos de tabaco"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Sem nudez de qualquer tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Nudez artística breve"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Nudez prolongada"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Sem referência a ou representação de natureza sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Referências ou representações provocativas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Referências ou representações sexuais"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Cenas fortes de comportamento sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Sem profanação de qualquer tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Uso leve ou infrequente de profanação"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Uso moderado de profanação"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Uso forte e frequente de profanação"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Sem humor impróprio"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Comédia pastelão"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Comédia vulgar ou de banheiro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Comédia para adultos ou sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Sem linguagem discriminatória de qualquer tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negatividade direcionada a um grupo específico de pessoas"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminação projetada a causa ofensa emocional"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Discriminação explícita baseada em gênero, sexualidade, raça ou religião"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Sem publicidade de qualquer tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Colocação de produtos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Referências explícitas a marcas ou produtos comerciais específicos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Usuários são encorajados a comprar itens específicos do mundo real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Sem jogo de azar de qualquer tipo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Aposta em eventos aleatórios usando tokens ou créditos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Aposta usando dinheiro do jogo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Aposta usando dinheiro de verdade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Sem habilidade de gastar dinheiro"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Usuários são encorajados a doar dinheiro real"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Habilidade de gastar dinheiro real no aplicativo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Impossível conversar com outros usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interações usuário com usuário sem funcionalidade de bate-papo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funcionalidade de bate-papo moderado entre usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funcionalidade de bate-papo sem controle entre usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Impossível falar com outros usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+"Funcionalidade de chamada de vídeo ou de áudio sem controle entre usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Sem compartilhamento de nomes de usuários ou endereços de e-mail de rede "
+"social"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Compartilhamento de nomes de usuários ou endereços de e-mail de rede social"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Sem compartilhamento de informações de usuário com terceiros"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Verificação pela versão mais recente do aplicativo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Compartilhamento de dados de diagnóstico que não permitem que identifiquem o "
+"usuário"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Compartilhamento de informações que permitem que identifiquem o usuário"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Sem compartilhamento de localização física com outros usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Compartilhamento de localização física com outros usuários"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Sem referência a homossexualidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Referências indiretas a homossexualidade"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Beijo entre pessoas do mesmo gênero"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportamento sexual gráfico entre pessoas do mesmo gênero"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Sem referência a prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referências indiretas a prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referências diretas a prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Representações gráficas do ato de prostituição"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Sem referência a adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referências indiretas a adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referências diretas a adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Representações gráficas do ato de adultério"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Sem caracteres sexualizados"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Personagens humanos semi-nus"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Personagens humanos notoriamente sexualizado"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Sem referência a profanação"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Representações de ou referências a profanação histórica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Representações de profanação humana em dias modernos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Representações gráficas de profanação em dias modernos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Sem restos de humanos mortos visíveis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Restos de humanos mortos visíveis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Restos de humanos mortos que são expostos aos elementos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Representações gráficas de profanação de corpos humanos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Sem referência a escravidão"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Representações de ou referências a escravidão histórica"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Representações de escravidão em dias modernos"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Representações gráficas de escravidão em dias modernos"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Geral"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "TODAS"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Adultos apenas"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Maduro"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescente"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Todo mundo 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Todo mundo"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Primeira infância"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Um aplicativo"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s está requisitando suporte a formato do arquivo adicional."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Tipos MIME adicionais necessárias"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s está requisitando fontes adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Fontes adicionais necessárias"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s está requisitando codecs de multimídia adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Codecs multimídia adicionais necessários"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s está requisitando drivers de impressora adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Drivers de impressora adicionais necessários"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s está requisitando pacotes adicionais."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Pacotes adicionais necessários"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Localizar em Programas"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Removendo…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Instalação pendente…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Atualização pendente…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Preparando…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Este aplicativo só pode ser usado quando há uma conexão ativa com a Internet."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalar"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalar…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Executar"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Remover"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Rede"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Pode se comunicar pela rede"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Serviços de sistema"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Pode acessar serviços D-Bus no barramento de sistema"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Serviços de seção"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Pode acessar serviços D-Bus no barramento de sessão"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Pode acessar arquivos de dispositivo de sistema"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Pasta pessoal (home)"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Pode ver, editar e criar arquivos"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Pode ver arquivos"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistema de arquivos"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Pasta de downloads"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Configurações"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Pode ver ou alterar quaisquer configurações"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistema de exibição legado"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Usa um sistema de exibição antigo e inseguro"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Escape sandbox"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Pode escapar da sandbox e contornar quaisquer outras restrições"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Esse aplicativo é totalmente executado em sandbox."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Não foi possível determinar quais partes do sistema esse aplicativo acessa. "
+"Isso é típico para aplicativos antigos."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nunca"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Baixo"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Médio"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Alto"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Você precisa de acesso à Internet para escrever uma avaliação"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Não foi possível localizar “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domínio público"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://pt.wikipedia.org/wiki/Dom%C3%ADnio_p%C3%BAblico"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.pt-br"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Programa livre"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Usuários estão vinculados pela seguinte licença:"
+msgstr[1] "Usuários estão vinculados pelas seguintes licenças:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mais informações"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Página de detalhes"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Baixando"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Atualizar"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Adicionar atalho"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Re_mover atalho"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nenhuma captura de tela fornecida"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Repositório de programas incluído"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Esse aplicativo inclui um repositório de programas que fornece atualizações, "
+"assim como acesso a outros programas."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Nenhum repositório de programas incluído"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Esse aplicativo não inclui um repositório de programas. Ele não será "
+"atualizado com novas versões."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Esse programa já é fornecido por sua distribuição e não deve ser substituído."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Repositório de programas identificado"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Adicionar esse repositório de programas lhe fornecerá acesso a programas e "
+"atualizações adicionais."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Use apenas repositórios de programas que você confia."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Site da _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Doar"
+
+# Traduzi Localized como Traduzido, para não confundir o usuário final com o termo que se refere a local. A ideia deste termo é de que esta localização se trata da adaptação do software as culturas regionais de idioma --Enrico
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Traduzido em seu idioma"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentação"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Atividade de lançamento"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integração de sistema"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Sandbox"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versão"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Classificação por idade"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permissões"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Atualizado"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categoria"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Tamanho instalado"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Tamanho para baixar"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Desenvolvedor"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licença"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Livre"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietária"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Complementos"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Os complementos selecionados serão instalados com o aplicativo."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Avaliações"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Escrever uma avaliação"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Mostrar mais"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Isso significa que o programa pode ser livremente executado, copiado, "
+"distribuído, estudado e modificado."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Programa proprietário"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Isso significa que o programa é propriedade de um indivíduo ou uma empresa. "
+"Com frequência há restrições a seu uso e seu código fonte geralmente não "
+"pode ser acessado."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licença do programa desconhecida"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Os termos da licença deste programa são desconhecidos."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "O aplicativo foi classificado desta maneira porque possui:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Não há detalhes disponíveis para essa classificação."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " e "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Fontes disponíveis para o script %s"
+msgstr[1] "Fontes disponíveis para os scripts %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Programa disponível para %s"
+msgstr[1] "Programas disponíveis para %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Não foi possível localizar o programa requisitado"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s não foi encontrado"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "no site"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Não há aplicativos disponíveis que forneçam o arquivo %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter aplicativos que "
+"estejam faltando podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Não há aplicativos disponíveis para suporte a %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s não está disponível."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter um aplicativo que "
+"pode oferecer suporte a este formato pode ser encontrado %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Não há fontes disponíveis com suporte ao script %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter fontes adicionais "
+"podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Não há complementos de codecs disponíveis para o formato %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter um codec que possa "
+"reproduzir este formato podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Não há recursos Plasma disponíveis para suporte a %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter recursos Plasma "
+"adicionais podem ser encontradas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Não há drivers de impressora disponíveis para %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informações sobre %s, bem como as opções de como obter um driver que ofereça "
+"suporte a esta impressora podem ser encontradas %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "este site"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Infelizmente, o %s que você estava procurando não pôde ser encontrado. Por "
+"favor veja %s para mais informações."
+msgstr[1] ""
+"Infelizmente, os %s que você estava procurando não puderam ser encontrados. "
+"Por favor veja %s para mais informações."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Falha em localizar qualquer resultado de pesquisa"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Formato de arquivo %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Página de codecs"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Bem-vindo"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Bem-vindo ao Software"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"O aplicativo Software permite a você instalar todos os programas que você "
+"precisa, tudo de um só lugar. Consulte nossas recomendações, navegue pelas "
+"categorias ou pesquise pelos aplicativos que desejar."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Vamos às compras"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Removido"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Atualizado"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e de %B de %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Histórico"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicativos de sistema"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Página de instalados"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "O catálogo de programas está sendo baixado"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Carregando página"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Iniciando…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"A rede atual é limitada. As conexões limitadas têm limites de dados ou "
+"cobranças associadas a elas. Para economizar dados, as atualizações "
+"automáticas foram pausadas.\n"
+"\n"
+"As atualizações automáticas serão retomadas quando uma rede não limitada "
+"estiver disponível. Até lá, ainda é possível instalar atualizações "
+"manualmente.\n"
+"\n"
+"Como alternativa, se a rede atual tiver sido incorretamente identificada "
+"como sendo limitada, essa configuração poderá ser alterada."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Abrir configuraçõe_s de rede"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Página moderada"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Não há avaliações para moderar"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistema"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "usuário"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ramo"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formato"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Instalação"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Mais…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicativos de áudio e vídeo recomendados"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Jogos recomendados"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicativos gráficos recomendados"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicativos de produtividade recomendados"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Acesse programas adicionais a partir de fontes de terceiros selecionadas."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Alguns destes programas são proprietários e, portanto, possuem restrições de "
+"uso, compartilhamento e acesso ao código fonte."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Saiba mais…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Habilitar"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Página de visão geral"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Habilitar repositórios de programas de terceiros?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Próxima"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Escolha do editor"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Lançamentos recentes"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorias"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nenhum dado de aplicativo encontrado"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Preparar %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Você tem certeza de que deseja remover o repositório %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Todos os aplicativos de %s serão removidos e você precisará reinstalar o "
+"repositório para usá-los novamente."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Você tem certeza de que deseja remover %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s será removido e para usá-lo novamente, você precisará instalá-lo."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalado)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferências de atualização"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Atualizações automáticas"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Atualizações automáticas desativadas ao usar conexões móveis ou limitadas."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificações de atualização automática"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Mostrar notificações ao instalar atualizações automaticamente."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Alguns dos programas atualmente instalados não são compatíveis com %s. Se "
+"você continuar, o seguinte será automaticamente removido durante a "
+"atualização:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Programa incompatível"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continuar"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicativo instalado"
+msgstr[1] "%u aplicativos instalados"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u complemento instalado"
+msgstr[1] "%u complementos instalados"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicativo"
+msgstr[1] "%u aplicativos"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u complemento"
+msgstr[1] "%u complementos"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s e %s instalado"
+msgstr[1] "%s e %s instalados"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Remover “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Desabilitar “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programas que foram instalados deste repositório não vão mais receber "
+"atualizações, incluindo correções de segurança."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Desabilitar"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "o sistema operacional"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Esses repositórios complementam o software padrão fornecido por %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repositórios de terceiros"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Nenhum repositório adicional"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Habilitar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Remover…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Desabilitar…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Habilitando"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Desabilitando"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Habilitado"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Desabilitado"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Odiei"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Não gostei"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "É bom"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Gostei"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Adorei"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Por favor, leve mais tempo escrevendo a avaliação"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Por favor, escolha uma estrela de classificação"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "A resenha está curta demais"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "A resenha está grande demais"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "A descrição está curta demais"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "A descrição está grande demais"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publicar avaliação"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Publicar"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Resenha"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Forneça uma breve resenha da sua avaliação, por exemplo: “Ótimo aplicativo, "
+"eu recomendo”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Avaliação"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "O que você acha deste aplicativo? Tente justificar seu ponto de vista."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Encontre quais dados são enviados em nossa <a href=\"https://odrs.gnome.org/"
+"privacy\">política de privacidade</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "classificações no total"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Você pode relatar avaliações para comportamento abusivo, rude ou "
+"discriminatório."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Uma vez relatada, uma avaliação será ocultada até que seja verificada por um "
+"administrador."
+
+# Semelhante a denunciar um abuso do usuário que escreveu a avaliação
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Relatar avaliação?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Relatar"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "A avaliação foi útil para você?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Sim"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Não"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Meh"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Relatar…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Remover…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "A captura de tela não foi localizada"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Ocorreu falha ao carregar imagem"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "O tamanho da captura de tela não foi localizada"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Não foi possível criar o cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "A captura de tela não é válida"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "A captura de tela não está disponível"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Captura de tela"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "mais %u correspondência"
+msgstr[1] "mais %u correspondências"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Página de pesquisa"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nenhum aplicativo encontrado"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Não foi possível baixar atualizações de firmware de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Não foi possível baixar atualizações de %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Não foi possível baixar as atualizações"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível baixar as atualizações: foi solicitado acesso à Internet, "
+"mas a mesma não está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Não foi possível baixar as atualizações de %s: não há espaço suficiente em "
+"disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Não foi possível baixar as atualizações: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Não foi possível baixar atualizações: requer autenticação"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Não foi possível baixar atualizações: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Não foi possível baixar atualizações: você não tem permissão para instalar "
+"esse software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Não foi possível obter a lista de atualizações"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Não foi possível instalar %s, pois o download de %s falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Não foi possível instalar %s, pois o download falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Não foi possível instalar %s, pois o runtime %s não está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Não foi possível instalar %s, pois não há suporte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível instalar: foi solicitado acesso à Internet, mas o mesmo não "
+"está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Não foi possível instalar: o aplicativo tem um formato inválido"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Não foi possível instalar %s: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Não foi possível instalar %s: requer autenticação"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Não foi possível instalar %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Não foi possível instalar %s: você não tem permissão para instalar esse "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Não foi possível instalar %s: requer energia AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Não foi possível instalar %s: o nível da bateria está baixo demais"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Não foi possível instalar %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Não foi possível atualizar %s de %s, pois o download falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Não foi possível atualizar %s, pois o download falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Não foi possível instalar atualizações de %s, pois o download falhou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Não foi possível instalar atualizações, pois o download falhou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível atualizar: foi solicitado acesso à Internet, mas a mesma "
+"não está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Não foi possível atualizar %s: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr ""
+"Não foi possível instalar atualizações: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Não foi possível atualizar %s: requer autenticação"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Não foi possível instalar atualizações: requer autenticação"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Não foi possível atualizar %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Não foi possível instalar atualizações: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Não foi possível atualizar %s: você não tem permissão para atualizar esse "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Não foi possível instalação atualizações: você não tem permissão para "
+"atualizar esse software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Não foi possível atualizar %s: requer energia AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Não foi possível instalar atualizações: requer energia AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Não foi possível atualizar %s: o nível da bateria está baixo demais"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Não foi possível instalar atualizações: o nível da bateria está baixo demais"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Não foi possível atualizar %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Não foi possível instalar atualizações"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Não foi possível atualizar para %s de %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Não foi possível atualizar %s pois o download falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Não foi possível atualizar para %s: foi solicitado acesso à Internet, mas "
+"não está disponível"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Não foi possível atualizar para %s: não há espaço suficiente em disco"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Não foi possível atualizar para %s: requer autenticação"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Não foi possível atualizar para %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Não foi possível atualizar para %s: você não tem permissão para atualizar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Não foi possível atualizar para %s: requer energia AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Não foi possível atualizar para %s: o nível da bateria está baixo demais"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Não foi possível atualizar para %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Não foi possível remover %s: requer autenticação"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Não foi possível remover %s: autenticação inválida"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Não foi possível remover %s: você não tem permissão para remover esse "
+"software"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Não foi possível remover %s: requer energia AC"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Não foi possível remover %s: o nível da bateria está baixo demais"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Não foi possível remover %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Não é possível iniciar %s: %s não está instalado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Não há espaço suficiente em disco — libere algum espaço e tente novamente"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Desculpe, alguma coisa deu errado"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Falha ao instalar o arquivo: não há suporte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Falha ao instalar o arquivo: a autenticação falhou"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Falha ao instalar: não há suporte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Falha ao instalar: a autenticação falhou"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Não foi possível entrar em contato com %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s precisa ser reiniciado para usar novos plug-ins."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Esse aplicativo precisa ser reiniciado para usar novos plug-ins."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Energia AC é necessária"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "O nível da bateria está baixo demais"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Fonte: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instalando)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Removendo)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Remover todos"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Não foi disponibilizada a descrição da atualização."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalado em %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Atualizações instaladas"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Adições"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Remoções"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Atualizações"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Downgrades"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nenhuma atualização foi instalada neste sistema."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Atualizações de segurança pendentes"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "É recomendável que você instale atualizações importantes agora"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Reiniciar & instalar"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Atualizações de softwares disponíveis"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Atualizações importantes do sistema operacional e de aplicativos estão "
+"prontas para serem instaladas"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Ver"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicativo atualizado — é necessário reiniciar"
+msgstr[1] "%u aplicativos atualizados — é necessário reiniciar"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicativo atualizado"
+msgstr[1] "%u aplicativos atualizados"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s foi atualizado."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Por favor, reinicie o aplicativo."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s e %s foram atualizados."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicativo requer reinicialização."
+msgstr[1] "%u aplicativos requerem reinicialização."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inclui %s, %s e %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Atualizações de sistema operacional indisponíveis"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Atualize para continuar a receber atualizações de segurança."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Uma nova versão de %s está disponível para instalação"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Atualizações de programas disponíveis"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Ocorreu falha em atualizações de programas"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Uma atualização importante do sistema operacional falhou ao instalar."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Mostrar detalhes"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Atualização do sistema concluída"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Bem-vindo ao %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Atualização de programa instalada"
+msgstr[1] "Atualizações de programas instaladas"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Foi instalada uma atualização importante do sistema operacional."
+msgstr[1] "Foram instaladas atualizações importantes do sistema operacional."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Verificar"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Ocorreu falha ao atualizar"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "O sistema já está atualizado."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "A atualização foi cancelada."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Era necessário acesso à internet, mas que não estava disponível. Por favor, "
+"certifique-se de que você possui acesso à internet e tente novamente."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Ocorreram problemas de segurança com a atualização. Por favor consulte o seu "
+"fornecedor de software para mais detalhes."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Não há espaço suficiente em disco. Por favor libere algum espaço e tente "
+"novamente."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Desculpe-nos: ocorreu falha na instalação da atualização. Por favor aguarde "
+"por outra atualização e tente novamente. Se o problema continuar, entre em "
+"contato com seu fornecedor de software."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Ontem, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Ontem, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Dois dias atrás"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Três dias atrás"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Quatro dias atrás"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Cinco dias atrás"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Seis dias atrás"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Uma semana atrás"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Duas semanas atrás"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Procurando por novas atualizações…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Configurando atualizações…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Isso pode levar um tempo)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Última verificação: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s não possui mais suporte."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Seu SO não possui mais suporte."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Isso significa que ele não recebe atualizações de segurança."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "É recomendável que você atualize para uma versão mais recente."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Podem ser feitas cobranças"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Verificar atualizações quando se está usando conexão móvel pode resultar em "
+"cobranças extras."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Verificar mesmo _assim"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nenhuma rede"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Acesso à internet é necessário para verificar atualizações."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Verificando…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Verificação de atualizações"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Página de atualizações"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Os programas estão atualizados"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Verificar atualizações quando se está usando conexão móvel pode resultar em "
+"cobranças extras"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Verifi_car mesmo assim"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Ficar online para verificar atualizações"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Co_nfigurações de rede"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "As atualizações são automaticamente gerenciadas"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Reiniciar & atualizar"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Atualizar tudo"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Firmware integrado"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Requer reinício"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Atualizações de aplicativos"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmware de dispositivo"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Baixar"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"É recomendável que faça uma cópia de segurança dos seus dados e arquivos "
+"antes de atualizar."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Reiniciar agora"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Atualizações serão aplicadas quando o computador for reiniciado."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s já disponível"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Aguardando para baixar %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Baixando %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s pronto para ser instalado"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Uma atualização importante, com novos recursos e polimento adicionado."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "A_prenda mais"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Adicione, remova ou atualize programas neste computador"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Atualizações;Upgrade;Atualização;Fontes;Repositórios;Preferências;Instalação;"
+"Instalar;Desinstalar;Programa;Software;Aplicativo;App;Loja;Store;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Criação & edição de áudio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Reprodutores de músicas"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depuradores"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDEs"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Inteligência artificial"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Química"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Idiomas"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matemática"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robótica"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Ação"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventura"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocos"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tabuleiro"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cartas"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emuladores"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Infantil"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lógica"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "RPG"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Esportes"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Estratégia"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Gráficos em 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Digitalização"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Gráficos vetoriais"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visualizadores"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Agenda"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Banco de dados"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanças"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Processador de texto"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fontes"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecs"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Fontes de entrada"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pacotes de idiomas"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localização"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Drivers de hardware"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Bate-papo"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Notícias"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navegadores web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editores de texto"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Todos"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Destaques"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Artes"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "História em quadrinhos"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficção"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Saúde"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "História"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Estilo de vida"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Política"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Esportes"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Áudio & vídeo"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Ferramentas para desenvolvedores"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educação & ciência"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Jogos"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Gráficos & fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produtividade"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicação & notícias"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referência"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilitários"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Atualizações do SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Inclui melhorias de desempenho, estabilidade e segurança."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Baixando imagens de destaques…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Uma atualização do Endless OS com com novos recursos e correções."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+"O serviço de atualização do EOS não conseguiu obter e aplicar a atualização."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instalador geral de AppStream do GNOME Programas"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Falha ao analisar os argumentos da linha de comando"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Você precisa especificar exatamente um nome de arquivo"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Este programa somente pode ser usado pelo usuário root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Falha ao validar o tipo de conteúdo"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Falha ao copiar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Baixando arquivos extras de metadados…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Baixando informação de atualização…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Atualize para os últimos recursos, melhorias de desempenho e estabilidade."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Suporte a flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak é um framework para aplicativos no Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Obtendo metadados de flatpak para %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Atualização do dispositivo %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Atualização do sistema %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Atualização do controlador embarcado %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Atualização do ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Atualização corporativa de ME para %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Atualização consumidor-final de ME para %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Atualização do controlador %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Atualização de Controlador Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Atualização de microcódigo de CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%s Controller Update"
+msgid "%s Configuration Update"
+msgstr "Atualização do configuração %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Baixando assinatura de atualização de firmware…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Baixando metadados de atualização de firmware…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Suporte a atualização de firmware"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Fornece suporte para atualizações de firmwares"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Baixando classificações de aplicativo…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings Support"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS é um serviço que fornece ao usuário avaliações de aplicativos"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Suporte a Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Um snap é um pacote universal de Linux"
+
+#~ msgid "About %s"
+#~ msgstr "Sobre o %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME de %s"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Configurações de extensão"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Extensões são usadas em seu próprio risco. Se você tiver quaisquer "
+#~ "problemas, é recomendado desativá-las."
+
+#~ msgid "Spacing"
+#~ msgstr "Espaçamento"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "A quantidade de espaço entre itens filhos"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplicativos em destaque"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensões de shell"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Repositório de extensões de Shell do GNOME"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Baixando metadados de extensão de shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Extensões do GNOME Shell"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Mostrar a interface gráfica de gerenciamento de pasta"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nome da pasta"
+
+#~ msgid "_Add"
+#~ msgstr "_Adicionar"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Adicionar à pasta de aplicativo"
+
+#~ msgid "Top Rated"
+#~ msgstr "Melhor classificação"
+
+#~ msgid "Failed to load components"
+#~ msgstr "Falha ao carregar componentes"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validado com sucesso!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Falha ao carregar arquivo"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Alterações não salvas"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "A lista de aplicativos já foi carregada."
+
+#~ msgid "Merge documents"
+#~ msgstr "Mesclar documentos"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Descartar alterações"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Abrir arquivo AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Abrir"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Salvar arquivo AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Salvar"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Falha ao salvar arquivo"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Design de banner de %s excluído."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Design de banner excluído."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "A lista de aplicativos possui alterações não salvas."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Usa registro verboso"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Designer de banner do GNOME Programas"
+
+# "Construtor de interface gráfica" é usado para "GUI designer" na tradução do Glade --Enrico
+#~ msgid "No Designs"
+#~ msgstr "Nenhum design"
+
+#~ msgid "Error message here"
+#~ msgstr "Mensagem de erro aqui"
+
+#~ msgid "App ID"
+#~ msgstr "ID do app"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Escolha do editor"
+
+#~ msgid "Category Featured"
+#~ msgstr "Categoria em destaque"
+
+#~ msgid "Undo"
+#~ msgstr "Desfazer"
+
+# "Construtor de interface gráfica" é usado para "GUI designer" na tradução do Glade --Enrico
+#~ msgid "Banner Designer"
+#~ msgstr "Designer de banner"
+
+#~ msgid "New Banner"
+#~ msgstr "Novo banner"
+
+#~ msgid "Import from file"
+#~ msgstr "Importar do arquivo"
+
+#~ msgid "Export to file"
+#~ msgstr "Exportar para arquivo"
+
+#~ msgid "Delete Design"
+#~ msgstr "Excluir design"
+
+#~ msgid "Featured App"
+#~ msgstr "Aplicativo em destaque"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Atualização do SO"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Clique nos itens para selecioná-los"
+
+#~ msgid "Select"
+#~ msgstr "Selecionar"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Adicionar à pasta…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Mover para pasta…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Remover da pasta"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Crie seus banners de destaque para o GNOME Programas"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;Aplicativo;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Suporte a aplicativos web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Execute aplicativos web populares em um navegador"
+
+#~ msgid "_All"
+#~ msgstr "_Todos"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Iniciar sessão / Registrar…"
+
+#~ msgid "Continue"
+#~ msgstr "Continuar"
+
+#~ msgid "Use"
+#~ msgstr "Usar"
+
+#~ msgid "Add another…"
+#~ msgstr "Adicionar outra…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Você tem certeza de que deseja comprar %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s será instalado e será cobrado de você %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Comprar"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Autenticado como %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Iniciar sessão…"
+
+#~ msgid "Sign out"
+#~ msgstr "Encerrar sessão"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Não foi possível comprar %s: requer autenticação"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Não foi possível comprar %s: autenticação inválida"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr ""
+#~ "Não foi possível comprar %s: nenhuma configuração de método de pagamento"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Não foi possível comprar %s: pagamento recusado"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Não foi possível comprar %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Para continuar, você precisa usar uma conta do Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Para continuar, você precisa usar sua conta do Ubuntu One."
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "O catálogo de programas está sendo carregado"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Para continuar, você precisa se autenticar em %s."
+
+#~ msgid "Email address"
+#~ msgstr "Endereço de e-mail"
+
+#~ msgid "I have an account already"
+#~ msgstr "Eu já tenho uma conta"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Eu desejo registrar para ter uma conta agora"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Eu esqueci a minha senha"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Autenticar automaticamente na próxima vez"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Insira seu pin para autenticação de dois fatores."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autenticar"
+
+#~ msgid "_About"
+#~ msgstr "S_obre"
+
+#~ msgid "_Quit"
+#~ msgstr "_Sair"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informações sobre %s, bem como as opções de como obter um codec que pode "
+#~ "reproduzir este formato podem ser encontradas no site da web."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Sua conta %s foi suspensa."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Não é possível instalar o software até que isso tenha sido resolvido."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Para mais informações, visite %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Não foi possível atualizar %s de %s"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Baixando página de aplicativo…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Suporte a steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "A plataforma definida de entretenimento da Valve"
+
+# Profiling já foi traduzido como perfilamento, porém a tradução também pode ser a de criação de perfil --Enrico
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Mostra informações de criação de perfil para este serviço"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Baixando novas atualizações…"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Aplicativos atualizados"
+
+#~ msgid "Includes: ."
+#~ msgstr "Inclui: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Reiniciar & atualizar"
+
+#~ msgid "U_pdate All"
+#~ msgstr "A_tualizar tudo"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Reiniciar & _instalar"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Obtendo fontes de runtime…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Baixando atualização de firmware…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Suporte limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba permite aos desenvolvedores uma forma fácil de criar pacotes de "
+#~ "softwares"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Ordenado por nome"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Ordenado por classificação"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr ""
+#~ "A lista de fontes adicionais que tenham sido previamente habilitadas"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "A lista de fontes que foram habilitadas anteriormente ao instalar "
+#~ "aplicativos de terceiros."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Mostrar programas não livres nos resultados de pesquisa"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Uma lista de fontes não livres que tenham sido opcionalmente habilitadas"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Fornece acesso a programas adicionais, incluindo navegadores web e jogos."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Habilitar fontes de programas proprietários?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Sem aplicativos ou complementos instalados; também pode ser o caso de "
+#~ "outro software"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Geralmente possui restrições no uso e acesso ao código fonte."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Fontes de programas proprietários"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Fontes de programas podem ser carregadas da internet. Elas lhe dão acesso "
+#~ "a programas e atualizações adicionais que não são providos por %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Remover uma fonte também vai remover qualquer programa que você tenha "
+#~ "instalado dela."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nenhum programa instalado desta fonte"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalado desta fonte"
+
+#~ msgid "Source Details"
+#~ msgstr "Destalhes da fonte"
+
+#~ msgid "Last Checked"
+#~ msgstr "Última verificação"
+
+#~ msgid "Added"
+#~ msgstr "Adicionado"
+
+#~ msgid "Website"
+#~ msgstr "Site da web"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Interações predefinidas entre jogadores sem funcionalidade de bate-papo"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Compartilhamento de informação do usuário com terceiros"
+
+#~ msgid "Remove Source"
+#~ msgstr "Remover fonte"
+
+#~ msgid "page1"
+#~ msgstr "página1"
+
+#~ msgid "page2"
+#~ msgstr "página2"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgid "Other Updates"
+#~ msgstr "Outras atualizações"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Todos"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Destaques"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matemática"
+
+#~ msgid "Science"
+#~ msgstr "Ciência"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instalar todos"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "A instalação de %s falhou."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "A remoção de %s falhou."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr ""
+#~ "Por favor, certifique-se de que você possui acesso à internet e tente "
+#~ "novamente."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Por favor, libere algum espaço e tente novamente."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Se o problema persistir, contate seu provedor de programa."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~| msgid "Software Sources"
+#~ msgid "Additional Software Sources"
+#~ msgstr "Fontes de programas adicionais"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Fontes de programas lhe fornecem acesso a programas adicionais."
+
+#~ msgid "3rd party"
+#~ msgstr "terceiros"
+
+#~ msgid "web app"
+#~ msgstr "aplicativo web"
+
+#~ msgid "nonfree"
+#~ msgstr "não livre"
+
+#~ msgid "shell extension"
+#~ msgstr "extensões shell"
+
+#~ msgid "_Installing"
+#~ msgstr "_Instalando"
+
+#~ msgid "_Removing"
+#~ msgstr "_Removendo"
+
+#~ msgid " or "
+#~ msgstr " ou "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Desconhecido"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Este programa veio de terceiros."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Este programa veio de terceiros e pode conter componentes não livres."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Este programa pode conter componentes não livres."
+
+#~ msgid "non-free"
+#~ msgstr "não livre"
+
+#~ msgid "One Star"
+#~ msgstr "Uma estrela"
+
+#~ msgid "Two Stars"
+#~ msgstr "Duas estrelas"
+
+#~ msgid "Three Stars"
+#~ msgstr "Três estrelas"
+
+#~ msgid "Four Stars"
+#~ msgstr "Quatro estrelas"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinco estrelas"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Nenhuma"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicativos de escritório recomendados"
+
+#~ msgid "Audio"
+#~ msgstr "Áudio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Edição"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Bancos de dados"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Gravação de disco"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamador"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixador"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Gravadores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sequenciadores"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Sintonizadores"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Compilação"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Bancos de dados"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Ambiente integrado de desenvolvimento"
+
+# Perfilagem significa "Ação ou resultado de traçar o perfil, de aferir o desempenho de qualquer conjunto organizado de informações (perfilagem de produção/de usuários)" Read more: http://aulete.uol.com.br/perfilagem#ixzz2dsTU1uuv --Enrico
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Perfilagem"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Gerenciamento de projetos"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Tradução"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolvimento web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Ciência da computação"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Construção"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualização de dados"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Eletricidade"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Eletrônica"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Engenharia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geociência"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "História"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanidades"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Processamento de imagens"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Música"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Análises numéricas"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computação paralela"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidade"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Tiro"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulação"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Esportes"
+
+#~ msgid "Graphics"
+#~ msgstr "Gráficos"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Gráficos em 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publicação"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Gráfico de varredura (raster)"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Discagem"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Fontes de notícias"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Transferência de arquivos"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamador"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Mensageiro instantâneo"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Clientes de IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitoramento"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Acesso remoto"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonia"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolvimento web"
+
+#~ msgid "Office"
+#~ msgstr "Escritório"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Gráfico"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Gerenciamento de contatos"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Dicionário"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Fluxograma"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografia"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Apresentação"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Gerenciamento de projetos"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publicação"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Planilha"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visualizador"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Artes"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Inteligência artificial"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Química"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Ciência da computação"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Construção"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Visualização de dados"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Eletricidade"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Eletrônica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Engenharia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geociência"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "História"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanidades"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Processamento de imagens"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Idiomas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matemática"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Análise numérica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Computação paralela"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Física"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robótica"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidade"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Esportes"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulador"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Gerenciador de arquivos"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Ferramentas de arquivos"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitoração"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Segurança"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulador de terminal"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Acessibilidade"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arquivamento"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calculadora"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Relógio"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Compressão"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Ferramentas de arquivos"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidade"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Ferramentas de telefonia"
+
+#~ msgid "Video"
+#~ msgstr "Vídeo"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Edição"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Banco de dados"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Gravação de disco"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Reprodutores"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Gravadores"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Calculando…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Desconhecido"
+
+#~ msgid "Size"
+#~ msgstr "Tamanho"
+
+#~ msgid "_History"
+#~ msgstr "_Histórico"
+
+#~ msgid "Depictions of or dialog including slapstick humor"
+#~ msgstr "Representações ou diálogos incluindo comédia pastelão"
+
+#~ msgid "Depictions of or dialog including vulgar humor; bathroom humor"
+#~ msgstr ""
+#~ "Representações ou diálogos incluindo comédia vulgar; comédia de banheiro"
+
+#~ msgid "Depictions of or dialog including mature humor; sexual humor"
+#~ msgstr ""
+#~ "Representações ou diálogos incluindo comédia para adultos; comédia sexual"
+
+#~ msgid ""
+#~ "Player-to-player scripted interactions (e.g. giving an axe for a quest) "
+#~ "without chat functionality"
+#~ msgstr ""
+#~ "Interações em script entre jogadores (ex. dar um machado para uma missão) "
+#~ "sem funcionalidade de bate-papo"
+
+#~ msgid ""
+#~ "Ability to share Twitter, Facebook or email addresses to other players"
+#~ msgstr ""
+#~ "Habilidade de compartilhar Twitter, Facebook ou endereços de e-mail com "
+#~ "outros jogadores"
+
+# http://www.freedesktop.org/wiki/Distributions/AppStream/
+#~ msgid "No AppStream data found"
+#~ msgstr "Nenhum dado do AppStream encontrado"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Uma atualização anterior não foi concluída."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Não foi possível instalar a atualização; geralmente isto é, em "
+#~ "particular, um problema com a atualização. Por favor aguarde por outra "
+#~ "atualização e tente novamente."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Aplicativo exclusivamente de internet"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Entrar no modo de serviço GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Uma atualização não foi sinalizada da forma correta."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Não foi possível completar a atualização."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Foi solicitado uma atualização que não necessita de internet, porém "
+#~ "nenhum pacote solicitou a atualização."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Não restou nenhum espaço em disco."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Uma atualização falhou ao tentar instalar corretamente."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr ""
+#~ "A atualização que não necessita de internet falhou de forma inesperada."
+
+#~ msgid "No sources found."
+#~ msgstr "Nenhuma fonte encontrada."
+
+#~ msgid "OK"
+#~ msgstr "OK"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i aplicativo e %i complemento instalados"
+#~ msgstr[1] "%i aplicativos e %i complementos instalados"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr ""
+#~ "Dependendo de seu país de residência, instalá-lo pode tornar você "
+#~ "passível de responder por ação judicial."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr ""
+#~ "Se você não tem certeza disso, você deveria obter um consultoria jurídica."
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "Você tem certeza de que deseja habilitar isso?"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Define o nível de depuração especificado"
+
+#~ msgid "Picks"
+#~ msgstr "Escolhas"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "30 de janeiro de 2014"
+
+#~ msgid "_Pending"
+#~ msgstr "_Pendente"
+
+#~ msgid "Complicated!"
+#~ msgstr "Complicado!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Atualizações recentes de programas"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "Bancos de dados"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamador"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "Desenvolvimento web"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "Ferramentas de arquivos"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "Mapas"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "Espiritualidade"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "Fontes"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "Codecs"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "Fontes de entrada"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "Pacotes de idiomas"
+
+#~ msgid "Done"
+#~ msgstr "Concluído"
+
+#~ msgid ""
+#~ "Add or remove folders. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr ""
+#~ "Adicione ou remove pastas. Suas pastas de aplicativos podem ser "
+#~ "encontradas no Panorama de Atividades."
+
+#~ msgid ""
+#~ "Choose a folder for %s. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr ""
+#~ "Escolha uma pasta para %s. Suas pastas de aplicativo podem ser "
+#~ "encontradas no Panorama de Atividades."
+
+#~ msgid ""
+#~ "Choose a folder for %s and %s. Your application folders can be found in "
+#~ "the Activities Overview."
+#~ msgstr ""
+#~ "Escolha uma pasta para %s e %s. Suas pastas de aplicativo podem ser "
+#~ "encontrados no Panorama de Atividades."
+
+#~ msgid ""
+#~ "Choose a folder for %s, %s and %s. Your application folders can be found "
+#~ "in the Activities Overview."
+#~ msgstr ""
+#~ "Escolha uma pasta de %s, %s e %s. Suas pastas de aplicativo podem ser "
+#~ "encontrados no Panorama de Atividades."
+
+#~ msgid ""
+#~ "Choose a folder for the selected applications. Your application folders "
+#~ "can be found in the Activities Overview."
+#~ msgstr ""
+#~ "Escolha uma pasta para os aplicativos selecionados. Suas pastas de "
+#~ "aplicativo podem ser encontradas no Panorama de Atividades."
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "_Instalados (%d)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "_Atualizações (%d)"
+
+#~ msgid "Description"
+#~ msgstr "Descrição"
+
+#~ msgid "The search term to use when starting the UI"
+#~ msgstr "O termo de pesquisa a ser usado ao iniciar a interface gráfica"
+
+#~ msgid "Software has the following goals:"
+#~ msgstr "O Softwares tem os seguintes objetivos:"
+
+#~ msgid "View installed applications"
+#~ msgstr "Ver aplicativos instalados"
+
+#~ msgid "View available application updates"
+#~ msgstr "Ver atualizações disponíveis de aplicativos"
+
+#~ msgid "Install available updates"
+#~ msgstr "Instalar as atualizações disponíveis"
+
+#~ msgid "Find an application to handle a specific type of file"
+#~ msgstr ""
+#~ "Encontrar um aplicativo para manipular tipos específicos de arquivos"
+
+#~ msgid "Installed apps and updates should be available when offline"
+#~ msgstr ""
+#~ "Atualizações e aplicativos instalados devem estar disponíveis quando "
+#~ "desconectado da Internet"
+
+#~ msgid "Goals:"
+#~ msgstr "Objetivos:"
+
+#~ msgid "Printing"
+#~ msgstr "Impressão"
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..1fe60f3
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,5699 @@
+# Romanian translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Bogdan Mințoi <mintoi.bogdan@gmail.com>, 2014.
+# Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>, 2014-2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-11-20 10:43+0100\n"
+"Last-Translator: Florentina Mușat <florentina [dot] musat [dot] 28 [at] "
+"gmail [dot] com>\n"
+"Language-Team: Gnome Romanian Translation Team <gnomero-list@lists."
+"sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);\n"
+"X-Generator: Poedit 2.4.1\n"
+"X-Project-Style: gnome\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Aplicații GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Administrator de aplicații pentru GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Aplicații vă permite să gasiți și să instalați aplicații noi și extensii de "
+"sistem sau să eliminați aplicații deja instalate."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Aplicații GNOME prezintă aplicații recomandate și populare care conțin "
+"descrieri folositoare și capturi de ecran multiple pentru fiecare aplicație. "
+"Acestea pot fi găsite fie prin răsfoirea listei categoriilor fie printr-o "
+"simplă căutare. Vă permite, de asemenea, să actualizați sistemul prin "
+"intermediul unei actualizări în modul deconectat."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panoul de ansamblu"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panoul cu detalii"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panoul cu instalate"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panoul cu actualizări"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detaliile actualizărilor"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "Proiectul GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instalează un fișier appstream într-o locație din sistem"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Se instalează un fișier appstream într-o locație din sistem"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "O listă de proiecte compatibile"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Aceasta este o listă de proiecte compatibile pe care trebuie să le prezentăm "
+"cum ar fi GNOME, KDE și XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Dacă se administrează actualizări și înnoiri în Aplicații GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Dacă dezactivat, Aplicații GNOME va ascunde panoul de actualizări și nu va "
+"exectua nicio acțiune de actualizare automată sau întreba de înnoiri."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Descarcă și instalează actualizări automat"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Dacă este activat, Aplicații GNOME va descărca actualizările în fundal "
+"automat, instalând de asemenea pe acelea ce nu necesită o repornire."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Notifică utilizatorul despre aplicațiile actualizate în fundal"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Dacă este activat, Aplicații GNOME va notifica utilizatorul despre "
+"actualizări care s-au petrecut în timp ce utilizatorul era inactiv."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Dacă să se reîmprospăteze automat când sunteți pe o conexiune contorizată"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Dacă este activată, Aplicații GNOME va reîmprospăta automat în fundal chiar "
+"și atunci când o conexiune contorizată este în uz (într-un final descărcând "
+"unele metadate, verificând după actualizări, etc., fapt ce poate produce "
+"costuri pentru utilizator)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Dacă este prima rulare a lui Aplicații GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Arată steluțe de evaluare lângă aplicații"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtrează aplicații pe baza unui set de ramuri de la distanță"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Aplicațiile nelibere vor arăta un dialog de avertizare înainte de instalare"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Când aplicații nelibere sunt instalate un dialog de avertizare poate fi "
+"arătat. Aceasta controloează dacă acel dialog este suprimat."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "O listă de aplicații populare"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "O listă de aplicații de folosit, înlocuind pe cele definite de sistem."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Marcaj de timp pentru ultima verificare după actualizări"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Marcaj de timp pentru ultima notificare de actualizare"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Marcajul de timp al primei actualizări de securitate, restabilit după "
+"actualizare"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Marcaj de timp pentru ultima actualizare"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "Ultima datare la care sistemul a fost conectat și a primit actualizări"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Timpul în secunde la care să se verifice dacă captura de ecran de la "
+"distanță încă este validă"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Alegând o valoare mai mare înseamnă mai puține conexiuni către server dar "
+"actualizări ale capturilor de ecran pot dura mai mult până ajung la "
+"utilizator. O valoare de 0 înseamnă că nu se va contacta serverul niciodată "
+"dacă imaginea există în memoria cache."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Serverul de folosit pentru recenzii pentru aplicații"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Scorul minim karma pentru recenzii"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Recenzii cu karma mai mic decât acest număr nu vor fi afișate."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "O listă de depozite oficiale care nu ar trebui considerate terțe"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"O listă de depozite oficiale care ar trebui considerate aplicații libere"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"URL-ul licenței de folosit când o aplicație trebuie considerată aplicație "
+"liberă"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Instalează aplicații împachetate pentru toți utilizatorii sistemului când "
+"este posibil"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Permite accesul la dialogul Depozite de aplicații"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Oferă înnoiri pentru pre-lansate"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Arată unele elemente UI informând utilizatorul că aplicația este neliberă"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Arată dialogul de instalare al depzoitelor de aplicații nelibere"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Arată dimensiunea instalării pentru aplicațiile din lista de aplicații "
+"instalate"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://ro.wikipedia.org/wiki/Software_proprietar'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI-ul care explică programele nelibere și proprietare"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"O listă de URL-uri indicând către fișiere appstream care vor fi descărcate "
+"înt-un dosar app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Instalează fișierele AppStream într-o locație generală de sistem pentru toți "
+"utilizatorii"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Activează depozitul de extensii GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Un șir de caractere ce stochează id-ul pentru contul google folosit la "
+"autentificare"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalare aplicații"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalează aplicațiile selectate pe calculator"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Selectează tot"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Deselectează tot"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Depozite de aplicații"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Preferințe act_ualizare"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Aplicații"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Înapoi"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Explorează"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Instalat"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Act_ualizări"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Caută"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Sursă"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Depozite aplicații"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Examinează discul"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Configurări de rețea"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Repornește acum"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Mai multe informații"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Actualizări automate puse pe pauză"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Aflați mai _multe"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Fișier local"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Pachet"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "În așteptare"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instalat"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Se instalează"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Se elimină"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Mod de pornire: fie „updates” (actualizări), „updated” (actualizat), "
+"„installed” (instalat) sau „overview” (prezentare generală)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "MOD"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Căutați aplicații"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "CAUTĂ"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Arată detaliile aplicației (folosind ID-ul aplicației)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Arată detaliile aplicației (folosind numele pachetului)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NUME PACHET"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Instalează aplicația (folosind ID-ul aplicației)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Deschide un pachet local"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NUME FIȘIER"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Tipul de interacție așteptat de la această acțiune: fie „none”, „notifiy”, "
+"sau „full”"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Arată informații detaliate de depanare"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Instalează orice actualizări apărute în fundal"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Arată preferințele de actualizare"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Ieși din instanța în curs de rulare"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Preferă surse de fișiere locale pentru AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Arată numărul de versiune"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Bogdan Mințoi <mintoi [dot ] bogdan [at] gmail [dot] com> 2014\n"
+"Adrian Gabor <raziel_theripper [at] yahoo [dot] com> 2015\n"
+"Daniel Șerbănescu <daniel [at] serbanescu [dot] dk> 2016-2020\n"
+"Florentina Mușat <florentina [dot] musat [dot] 28 [at] gmail [dot] com>, 2020"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Despre Aplicații"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Un mod plăcut de a administra aplicații pentru sistemul dumneavoastră."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Nu există detalii pentru aplicația aceea."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Vizitați situl web"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Instalează…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Anulează"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Instalează"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Actualizează"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Elimină"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Dispozitivul nu poate fi folosit în timpul actualizării."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Necesită permisiuni adiționale"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Autentificare la distanță necesară %s (realm %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Autentificare necesară"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Anulează"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Autentificare"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Utilizator"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Parolă"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Altele"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Toate"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Recomandate"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Recomandate din %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Evaluare"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Nume"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Arată"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Meniul de filtrare al subcategoriilor"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sortează"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Meniul de sortare al subcategoriilor"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Introduceți un număr de la 1 la %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Alegeți o aplicație:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Actualizări de OS sunt instalate"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Actualizări instalate recent sunt disponibile pentru recenzie"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s este acum instalată"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "O repornire este necesară pentru ca modificările să aibă efect."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplicația este gata de utilizare."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Repornește"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Lansează"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Instalați aplicații din sursă terță?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Activați depozitul terț de aplicații?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nu este <a href=\"https://ro.wikipedia.org/wiki/Software_liber"
+"\">aplicație liberă cu sursa deschisă</a>, și este furnizat de către „%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s este furnizat de către „%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Aceast depozit de aplicații trebuie activat petru a putea continua "
+"instalarea."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Ar putea fi ilegală instalarea sau folosirea lui %s în anumite țări."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Ar putea fi ilegală instalarea sau folosirea acestui codec în anumite țări."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Nu atenționa din nou"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Activează și instalează"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Erorile detaliate ale administratorului de pachete:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detalii"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "O actualizare a fost instalată"
+msgstr[1] "Actualizările au fost instalate"
+msgstr[2] "Actualizările au fost instalate"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "O repornire este necesară pentru ca ea să aibă efect."
+msgstr[1] "O repornire este necesară pentru ca ele să aibă efect."
+msgstr[2] "O repornire este necesară pentru ca ele să aibă efect."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Nu acum"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Fără violență animată"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Caractere animate în siutații nesigure"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Caractere animate în conflict agresiv"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Violență grafică incluzând caractere animate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Fără violență fantastică"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Caractere în situații nesigure recunoscute ușor din realitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Caractere în conflict agresiv recunoscute ușor din realitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Violență grafică recunoscută ușor din realitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Fără violență reală"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Caractere realistice moderate în situații nesigure"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Descrieri ale unor caractere realistice în conflict agresiv"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Violență grafică incluzând caractere realistice"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Fără vărsare de sânge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Vărsare de sânge nerealistică"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Vărsare de sânge realistică"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Descrieri de vărsare de sânge și mutilarea părților de corp"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Fără violență sexuală"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Viol sau alt comportament sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Fără referințe la băuturi alcoolice"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referințe la băuturi alcoolice"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Uz de băuturi alcoolice"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Fără referințe la droguri ilegale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referințe la droguri ilegale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uz de droguri ilegale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Fără referințe la produse cu tutun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referințe la produse de tutun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uz de produse de tutun"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Fără nuditate de orice tip"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Scurtă nuditate artistică"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Nuditate prelungită"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Fără referințe la sau descrieri de natură sexuală"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Referințe sau descrieri provocative"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Referințe sexuale sau descrieri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Comportament sexual grafic"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Fără profanitate de orice tip"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Uz moderat sau nefrecvent de obscenitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Uz moderat de obscenitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Uz puternic sau frecvent de obscenitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Fără umor inapropriat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Umor ieftin"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Umor vulgar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Umor pentru adulți sau sexual"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Fără limbaj discriminator de orice tip"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativitate referitor la un grup specific de oameni"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Discriminare destinată să cauzeze ofensă emoțională"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Discriminare explicită bazată pe sex, sexualitate, rasă sau religie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Fără reclame de orice tip"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Plasarea de produse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Referințe explicite la mărci specifice sau produse de mărci înregistrate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Utilizatorii sunt încurajați să cumpere obiecte specifice din lumea reală"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Fără jocuri de noroc de orice tip"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Jocuri de noroc la evenimente aleatorii folosind jetoane sau credite"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Jocuri de noroc folosind bani virtuali"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Jocuri de noroc folosind bani adevărați"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Fără abilitatea de a cheltui bani"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Utilizatorii sunt încurajați să doneze bani adevărați"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Abilitatea de a cheltui bani reali în aplicație"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Fără abilitatea de a discuta cu alți utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interacțiuni utilizator-la-utilizator fără funcționalitate de chat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Funcționalitate de chat moderat între utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Funcționalitate de chat necontrolat între utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Fără abilitatea de a vorbi cu alți utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Funcționalitate de chat necontrolat audio sau video între utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Fără partajare de nume de utilizatori de rețele sociale sau adrese de email"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Partajare de nume de utilizatori de rețele sociale sau adrese de email"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Fără partajarea informațiilor despre utilizatori cu părți terțe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Verificare după ultima versiune de aplicație"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Partajare de date diagnostice care nu permit altora identificarea "
+"utilizatorului"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Partajare de informații care permit altora identificarea utilizatorului"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Fără partajarea locației fizice cu alți utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Partajarea locației fizice cu alți utilizatori"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Fără referințe la homosexualitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Referințe indirecte la homosexualitate"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Sărutarea între oameni de același sex"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Comportament sexual grafic între oameni de același sex"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Fără referințe la prostituție"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Referințe indirecte la prostituție"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Referințe directe la prostituție"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Descrieri grafice ale actului de prostituție"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Fără referințe la adulter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Referințe indirecte la adulter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Referințe directe de adulter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Descrieri grafice ale actului de adulter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Fără caractere sexuale"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Caractere umane îmbrăcate sumar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Caractere umane sexualizate deschis"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Fără referințe la profanare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Descrieri de sau referințe la profanare istorică"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Descrieri de profanare umană modernă"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Descrieri grafice de profanare modernă"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Fără rămășițe umane vizibile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Rămășițe umane vizibile"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Rămășițe umane are expuse elementelor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Descrieri grafice ale profanării corpurilor umane"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Fără referințe la sclavagism"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Descrieri de sau referințe la sclavagismul istoric"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Descrieri ale sclavagismului modern"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Descrieri grafice ale sclavagismului modern"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Generale"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "TOATE"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Doar pentru adulți"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Maturi"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Adolescenți"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Toată lumea 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Toată lumea"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Copilărie timpurie"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "O aplicație"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s cere suport adițional pentru formatul de fișier."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Sunt necesare tipuri MIME adiționale"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s cere fonturi adiționale."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Sunt necesare fonturi adiționale"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s cere codecuri multimedia adiționale."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Sunt necesare codecuri multimedia adiționale"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s cere drivere adiționale pentru imprimantă."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Sunt necesare drivere adiționale pentru imprimantă"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s cere pachete adiționale."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Sunt necesare pachete adiționale"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Caută în Aplicații"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Se elimină…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Instalare în așteptare…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Actualizare în așteptare…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Se pregătește…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Această aplicație poate fi utilizată doar când este prezentă o conexiune "
+"activă de internet."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Instalează"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Instalează…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Lansează"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Elimină"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Rețea"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Pot comunica prin rețea"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Servicii ale sistemului"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Poate accesa serviciile D-Bus pe magistrala sistemului"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Servicii de sesiune"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Poate accesa serviciile D-Bus pe magistrala sesiunilor"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Dispozitive"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Pot accesa fișierele de sistem ale dispozitivelor"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Dosar personal"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Poate vedea, edita și crea fișiere"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Poate vedea fișiere"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Sistem de fișiere"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Dosar descărcări"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Configurări"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Poate vedea și modifica orice configurare"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Sistem moștenit de afișare"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Folosește un sistem de afișare vechi și nesigur"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Evadare din modul sandbox"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Poate evada din modul sandbox și împiedica orice alte restricții"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Această aplicație este izolată complet."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nu s-a putut determina care părți ale sistemului sunt accesate de această "
+"aplicație. Aceasta este tipic aplicațiilor mai vechi."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Necunoscută"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Niciodată"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Necunoscută"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Redus"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Mediu"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Ridicat"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Necunoscut"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Aveți nevoie de acces la internet pentru a scrie o recenzie"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nu s-a putut găsi „%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Domeniul public"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://ro.wikipedia.org/wiki/Domeniul_public"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.ro"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Aplicații libere"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Utilizatorii sunt limitați de următoarea licență:"
+msgstr[1] "Utilizatorii sunt limitați de următoarele licențe:"
+msgstr[2] "Utilizatorii sunt limitați de următoarele licențe:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mai multe informații"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Pagina de detalii"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Descărcare"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Act_ualizează"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Adaugă scurtătură"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Eli_mină scurtătură"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Nicio captură de ecran pusă la dispoziție"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Depozit de aplicații inclus"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Aplicația include un depozit de aplicații care furnizează atât actualizări "
+"cât și acces la alte aplicații."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Niciun depozit de aplicații inclus"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Această aplicație nu include un depozit de aplicații. Ca urmare, nu va fi "
+"actualizată la versiuni noi."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Această aplicație este deja furnizată de distribuția instalată și nu ar "
+"trebui înlocuită."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Depozit de aplicații identificat"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Adăugarea acestui depozit de aplicații vă va oferi acces la actualizări și "
+"aplicații adiționale."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Utilizați doar depozite de aplicații de încredere."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Pagină _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donează"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Localizat în limba dumneavoastră"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Documentație"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Activitate de lansare"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integrarea cu sistemul"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Izolată"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Canal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Versiune"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Categorie de vârstă"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Permisiuni"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Actualizat"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Categorie"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Dimensiunea instalării"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Dimensiunea descărcării"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Dezvoltator"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licență"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Liberă"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietară"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Suplimente"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Suplimentele alese vor fi instalate împreună cu aplicația."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recenzii"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Scrieți o recenzie"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Arată mai multe"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Acesta înseamnă că programul poate fi rulat, copiat, distribuit, studiat și "
+"modificat liber."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Programe proprietare"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Aceasta înseamnă că programul este deținut de un individ sau o companie. De "
+"multe ori sunt restricții la folosirea lui și de obicei codul sursă nu poate "
+"fi accesat."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Licență software necunoscută"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Termenii licenței acestei aplicații sunt necunoscuți."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Această aplicație a fost evaluată astfel pentru că pune în prim plan:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Niciun detaliu disponibil pentru această evaluare."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " și "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Fonturi disponibile pentru scriptul %s"
+msgstr[1] "Fonturi disponibile pentru scripturile %s"
+msgstr[2] "Fonturi disponibile pentru scripturile %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Aplicații disponibile pentru %s"
+msgstr[1] "Aplicații disponibile pentru %s"
+msgstr[2] "Aplicații disponibile pentru %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Aplicația căutată nu a putut fi găsită"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s nu a fost găsit"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "pe situl web"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nu sunt disponibile aplicații care să furnizeze fișierul %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informații despre %s, precum și opțiuni despre cum să obțineți aplicațiile "
+"lipsă pot fi găsite %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nu sunt disponibile aplicații cu suport pentru %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s nu este disponibilă."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informații despre %s, precum și opțiuni despre cum să obțineți o aplicație "
+"necesară redării acestui format pot fi găsite %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Nu sunt disponibile fonturi pentru suportul scriptului %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informații despre %s, precum și opțiuni despre cum să obțineți fonturi "
+"adiționale pot fi găsite %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Niciun codec suplimentar disponibil pentru formatul %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informații despre %s, precum și opțiuni despre cum să obțineți un codec care "
+"să poată reda acest format pot fi găsite %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nu sunt disponibile resurse Plasma pentru suportul lui %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informații despre %s, precum și opțiuni despre cum să obțineți resurse "
+"Plasma adiționale pot fi găsite %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nu sunt disponibile drivere pentru %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informații despre %s, precum și opțiuni despre cum să obțineți un driver cu "
+"suport pentru această imprimantă pot fi găsite %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "pe acest sit web"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Din păcate, %s pe care îl căutați nu a putut fi găsit. Consultați %s pentru "
+"mai multe informații."
+msgstr[1] ""
+"Din păcate, %s pe care le căutați nu au putut fi găsite. Consultați %s "
+"pentru mai multe informații."
+msgstr[2] ""
+"Din păcate, %s pe care le căutați nu au putut fi găsite. Consultați %s "
+"pentru mai multe informații."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Căutarea nu a dat niciun rezultat"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "format fișier %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Pagină de codecuri"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Bun venit"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Bun venit la Aplicații"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Aplicații vă permite să instalați toate aplicațiile de care aveți nevoie, "
+"dintr-un singur loc. Vedeți recomandările noastre, aruncați o privire în "
+"categorii, sau pur și simplu căutați aplicația pe care o doriți."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "Să pornim _la cumpărături"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Eliminat"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instalat"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Actualizat"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Necunoscut"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Istoric"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Aplicații de sistem"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Pagină instalată"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Catalogul de aplicații este descărcat"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Pagina de încărcate"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Se pornește…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Rețeaua curentă este contorizată. Conexiunile contorizate au limite de date "
+"sau taxe asociate lor. Pentru a salva date, actualizările automate au fost "
+"puse pe pauză.\n"
+"\n"
+"Actualizările automate vor fi restaurate când o rețea necontorizată devine "
+"disponibilă. Până atunci încă este posibil să instalați actualizări manual.\n"
+"\n"
+"Alternativ, dacă rețeaua curentă a fost incorect identificată ca fiind "
+"contorizată, această configurare poate fi modificată."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Deschide _Configurări de rețea"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Moderează pagina"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Nu există recenzii de moderat"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistem"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "utilizator"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Ramură"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Loc de instalare"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Mai mult…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Aplicații audio și video recomandate"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Jocuri recomandate"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Aplicații grafice recomandate"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Aplicații de productivitate recomandate"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Accesați aplicații adiționale din surse de părți terțe selecte."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Unele dintre aceste aplicații sunt proprietare și de aceea au restricții de "
+"utilizare și de acces la codul sursă."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Aflați mai multe…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Activează"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Pagina cu prezentarea de ansamblu"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Activați depozitele terțe de aplicații?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Anteriorul"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Următorul"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Sugerate"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Lansări recente"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Categorii"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nu s-au găsit datele aplicației"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Pregătește %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Sigur doriți să eliminați depozitul %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Toate aplicațiile din %s vor fi eliminate și va fi necesar să reinstalați "
+"depozitul pentru a-l folosi din nou."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Sigur doriți să eliminați %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Aplicația %s va fi eliminată și va fi necesar să o reinstalați pentru a o "
+"utiliza din nou."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instalat)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Preferințe actualizare"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Actualizări automate"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Actualizările automate sunt dezactivate când sunteți pe o conexiune mobilă "
+"sau contorizată."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Notificări pentru actualizări automate"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Arată notificări când au fost instalate automat actualizări."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Unele dintre programele instalate curent nu sunt compatibile cu %s. Dacă "
+"continuați, următoarele vor fi eliminate automat în timpul înnoirii:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Aplicații necompatibile"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Continuă"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u aplicație instalată"
+msgstr[1] "%u aplicații instalate"
+msgstr[2] "%u de aplicații instalate"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u supliment adițional instalat"
+msgstr[1] "%u suplimente adiționale instalate"
+msgstr[2] "%u de suplimente adiționale instalate"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplicație"
+msgstr[1] "%u aplicații"
+msgstr[2] "%u de aplicații"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u supliment"
+msgstr[1] "%u suplimente"
+msgstr[2] "%u de suplimente"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s și %s instalată"
+msgstr[1] "%s și %s instalate"
+msgstr[2] "%s și %s instalate"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Eliminați „%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Dezactivați „%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Aplicațiile instalate din acest depozit nu vor mai primi actualizări, "
+"incluzând actualizări de securitate."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Dezactivează"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "sistemul de operare"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Aceste depozite suplimentează aplicațiile implicite oferite de %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Depozite terțe"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Fără depozite adiționale"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "Activ_ează"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Elimină…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Dezactivează…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Se activează"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Se dezactivează"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Activat"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Dezactivat"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "O urăsc"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Nu îmi place"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Este OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Îmi place"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "O iubesc"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Folosiți mai mult timp pentru a scrie recenzia"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Alegeți o stea de evaluare"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Rezumatul este prea scurt"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Rezumatul este prea lung"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Descrierea este prea scurtă"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Descrierea este prea lungă"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Publicarea recenziei"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Publică"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Rezumat"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Scrieți un scurt rezumat al recenziei dumneavoastră, de exemplu: „Aplicație "
+"extraordinară, o recomand”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recenzie"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Ce credeți despre această aplicație? Încercați să dați motive pentru "
+"punctele de vedere ale dumneavoastră."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Aflați care sunt datele trimise în <a href=\"https://odrs.gnome.org/privacy"
+"\">politica de confidențialitate</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "evaluări în total"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Puteți raporta recenzii ca fiind abuzive, nepoliticoase sau discriminatoare."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Odată raportat, recenzia va fi ascunsă până când va fi verificată de un "
+"administrator."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Raportați recenzia?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Raportează"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "A fost această recenzie utilă?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Da"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nu"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Indiferent"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Raportează…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Elimină…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Nu s-a găsit captura de ecran"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Imaginea nu a putut fi încărcată"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Mărimea capturii de ecarn nu a fost găsită"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nu s-a putut creea cache"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Captură de ecran nevalidă"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Captură de ecran indisponibilă"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Captură de ecran"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "încă %u potrivire"
+msgstr[1] "încă %u potriviri"
+msgstr[2] "încă %u de potriviri"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Caută în pagină"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nu a fost găsită nicio aplicație"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Nu s-au putut descărca actualizări de firmware de la %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nu s-au putut descărca actualizări de la %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nu s-au putut descărca actualizări"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nu s-au putut descărca actualizări: accesul la internet a fost necesar dar "
+"nu a fost disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Nu s-au putut descărca actualizări de la %s: spațiu insuficient pe disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Nu s-au putut descărca actualizări: spațiu insuficient pe disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Nu s-au putut descărca actualizări: autentificarea a fost necesară"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nu s-au putut descărca actualizări: autentificarea a fost nevalidă"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Nu s-au putut descărca actualizări: nu aveți permisiunea să instalați "
+"aplicații"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nu s-a putut obține lista de actualizări"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Nu s-a putut instala %s pentru că descărcarea de la %s a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Nu s-a putut instala %s pentru că descărcarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Nu s-a putut instala %s pentru că executantul %s nu este disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nu s-a putut instala %s pentru că nu este suportat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Nu s-a putut instala: accesul la internet a fost necesar dar nu a fost "
+"disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nu s-a putut instala: aplicația are un format nevalid"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nu s-a putut instala %s: spațiu insuficient pe disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Nu s-a putut instala %s: autentificarea a fost necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Nu s-a putut instala %s: autentificarea a fost nevalidă"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Nu s-a putut instal %s: nu aveți permisiunea de a instala aplicații"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nu s-a putut instala %s: energie electrică necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Nu s-a putut instala %s: nivelul bateriei este prea scăzut"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nu s-a putut instala %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Nu s-a putut actualiza %s din %s pentru că descărcarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Nu s-a putut actualiza %s pentru că descărcarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Nu s-a putut instala actualizări din %s pentru că descărcarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nu s-au putut instala actualizările pentru că descărcarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Nu s-a putut actualiza: accesul la internet a fost necesar dar nu a fost "
+"disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nu s-a putut actualiza %s: spațiu insuficient pe disc"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nu s-au putut instala actualizările: spațiu insuficient pe disc"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Nu s-a putut actualiza: %s autentificarea a fost necesară"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Nu s-au putut instala actualizările: autentificarea a fost necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Nu s-a putut actualiza %s: autentificarea a fost nevalidă"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Nu s-au putut instala actualizările: autentificarea a fost nevalidă"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Nu s-a putut actualiza %s: nu aveți pemisiunea de a actualiza aplicații"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nu s-a putut actualiza actualizările: nu aveți permisiunea de a actualiza "
+"aplicații"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Nu s-a putut actualiza %s: energie electrică este necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nu s-au putut instala actualizările: energie electrică necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Nu s-a putut actualiza %s: nivelul bateriei este prea scăzut"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Nu s-au putut instala actualizările: nivelul bateriei este prea scăzut"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nu s-a putut actualiza %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nu s-au putut instala actualizări"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nu s-a putut înnoi la %s de la %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nu s-a putut înnoi la %s pentru că descărcarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nu s-a putut înnoi la %s: accesul la internet a fost necesar dar nu a fost "
+"disponibil"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nu s-a putut înnoi la %s: spațiu pe disc insuficient"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Nu s-a putut înnoi la %s: autentificarea a fost necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Nu s-a putut înnoi la %s: autentificarea a fost nevalidă"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Nu s-a putut înnoi la %s: nu aveți permisiunea de a înnoi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nu s-a putut înnoi la %s: energie electrică necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Nu s-a putut înnoi la %s: nivelul bateriei este prea scăzut"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nu s-a putut înnoi la %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Nu s-a putut elimina %s: autentificarea a fost necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nu s-a putut elimina %s: autentificarea a fost nevalidă"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Nu s-a putut elimina %s: nu aveți pemisiunea de a elimina aplicații"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nu s-a putut elimina %s: energie electrică este necesară"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Nu s-a putut elimina %s: nivelul bateriei este prea scăzut"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nu s-a putut elimina %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nu s-a putut lansa %s: %s nu este instalat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Insuficient spațiu disponibil pe disc — eliberați spațiu și încercați din nou"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Ne pare rău, ceva nu a funcționat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Nu s-a putut instala fișierul: nu este suportat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Eșec la instalarea fișierului: autentificare necesară"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Nu s-a putut instala: nu este suportat"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Nu s-a putut instala: autentificarea a eșuat"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nu s-a putut contacta %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s trebuie să fie repornit pentru a utiliza noile module."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Această aplicație trebuie să fie repornită pentru a utiliza noile module."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Energia electrică este necesară"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Nivelul bateriei este prea scăzut"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Sursă: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Se instalează)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Se elimină)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Elimină toate"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nu este disponibilă nicio descriere a actualizării."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Instalate la data de %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Actualizări instalate"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Adiții"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Eliminări"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Actualizări"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Retrogradări"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Nu a fost instalată nicio actualizare pe acest sistem."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Există actualizări de securitate în așteptare"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Se recomandă să instalați actualizările importante acum"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Repornește și instalează"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Sunt disponibile actualizări"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Actualizări importante pentru SO și aplicații sunt gata de instalare"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Vizualizare"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aplicație actualizată — Necesită repornirea"
+msgstr[1] "%u aplicații actualizate — Necesită repornirea"
+msgstr[2] "%u de aplicații actualizate — Necesită repornirea"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aplicație actualizată"
+msgstr[1] "%u aplicații actualizate"
+msgstr[2] "%u de aplicații actualizate"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s a fost actualizată."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Reporniți aplicația."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s și %s au fost actualizate."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplicație necesită repornirea."
+msgstr[1] "%u aplicații necesită repornirea."
+msgstr[2] "%u de aplicații necesită repornirea."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Include %s, %s și %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Sunt disponibile actualizări de sistem"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Înnoiți sistemul pentru a continua să primiți actualizări."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "O nouă versiune a %s este disponibilă pentru instalat"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Înnoire de aplicații dispobilă"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Actualizarea aplicațiilor a eșuat"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Instalarea unei actualizări importante a SO e eșuat."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Arată detalii"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Înnoirea sistemului completă"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Bun venit la %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Actualizarea aplicației a fost instalată"
+msgstr[1] "Actualizări de aplicații instalate"
+msgstr[2] "Actualizări de aplicații instalate"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "O actualizare importantă a SO a fost instalată."
+msgstr[1] "Actualizări importante ale SO au fost instalate."
+msgstr[2] "Actualizări importante ale SO au fost instalate."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Recenzează"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Actualizarea a eșuat"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistemul a fost deja actualizat."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Actualizarea a fost anulată."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Accesul la internet era necesar dar a fost indisponibil. Asigurați-vă că "
+"aveți acces la internet și încercați din nou."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Au apărut probleme de securitate la această actualizare. Consultați "
+"furnizorul dumneavoastră de aplicații pentru mai multe detalii."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Insuficient spațiu disponibil pe disc. Eliberați spațiu și încercați din nou."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Ne pare rău: instalarea actualizării a eșuat. Așteptați o altă actualizare "
+"și încercați din nou. Dacă problema persistă, contactați furnizorul "
+"dumneavoastră de aplicații."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Ieri, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Ieri, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Acum două zile"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Acum trei zile"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Acum patru zile"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Acum cinci zile"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Acum șase zile"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Acum o săptămână"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Acum două săptămâni"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Se verifică dacă sunt actualizări noi…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Se configurează actualizările…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Acțiunea ar putea dura ceva timp)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Ultima verificare: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s nu mai este suportat."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "SO-ul dumneavoastră nu mai este suportat."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Aceasta înseamnă că nu mai primește actualizări de securitate."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Este recomandat să înnoiți la o versiune mai recentă."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Se pot aplica taxe"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Verificarea actualizărilor când folosiți o conexiune mobilă de bandă largă "
+"poate să conducă la suportarea unor taxe."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Verifică _oricum"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Nicio rețea"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr ""
+"Este necesară o conexiune la internet pentru a putea verifica dacă există "
+"actualizări."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Se verifică…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Caută actualizări"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Pagina cu actualizări"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Aplicațiile sunt actualizate"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Verificarea de actualizări când folosiți o conexiune mobilă de bandă largă "
+"poate să conducă la suportarea unor taxe"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Verifi_că oricum"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Navigați online pentru a verifica actualizările"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Preferi_nțe de rețea"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Actualizările sunt administrate în mod automat"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Repornește și actualizează"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Actualizează toate"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Microcod integrat"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Necesită repornirea"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Actualizări pentru aplicații"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Microcod pentru dispozitive"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Descarcă"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Se recomandă să faceți o copie de siguranță a datelor și fișierelor înaintea "
+"înnoirii."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Repornește acum"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Actualizările vor fi aplicate când calculatorul este repornit."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s este acum disponibilă"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Se așteaptă să se descarce %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Se descarcă %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s gata de instalare"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "O înnoire majoră cu funcționalități noi și revizuiri."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Află mai mu_lte"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Adaugă, elimină sau actualizează aplicații pe acest calculator"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;Surse;Instalează;Aplicații;Depozite,Preferințe;Instalare;"
+"Dezinstalare;Actualizare;Actualizări;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Creare și editare audio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Playere de muzică"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Depanatoare"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Medii de dezvoltare integrate"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Inteligență artificială"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomie"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chimie"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Limbi"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematică"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotică"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Acțiune"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Aventură"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcadă"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blocuri"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "De masă"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Cărți"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatoare"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Copii"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logică"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Pe roluri"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategie"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Grafică 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografie"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Scanare"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Grafică vectorială"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Vizualizatoare"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Calendar"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Baze de date"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finanțe"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Procesoare de text"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Fonturi"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Codecuri"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Surse de intrare"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Pachete de limbă"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Localizare"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Drivere pentru hardware"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Conversație"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Știri"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Navigatoare web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Editoare de text"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Toate"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Recomandate"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Artă"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografie"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Benzi desenate"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Ficțiune"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Sănătate"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Istorie"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Stil de viață"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politică"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Audio și video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Instrumente pentru dezvoltatori"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Educație și știință"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Jocuri"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafică și fotografie"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Productivitate"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Comunicare și știri"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referințe"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Utilități"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Actualizări SO"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Include îmbunătățiri de performanță, stabilitate și securitate."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Se descarcă imaginile recomandărilor…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "OS Endless"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "O înnoire OS Endless cu funcționalități noi și revizuiri."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Serviciul de actualizare EOS nu a putut aduce și aplica actualizarea."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Instalator AppStream pentru Aplicații GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Eroare la parsarea argumentelor din linia de comandă"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Trebuie să specificați exact un nume de fișier"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Acest program poate fi utilizat numai de utilizatorul root"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Eșec la validarea tipului de conținut"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Eșec la copiere"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Se descarcă fișierele cu metadate…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Se descarcă informațiile de înnoire…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Înnoiți pentru ultimele funcționalități și îmbunătățiri de performanță și "
+"stabilitate."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Suport pentru flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak este o platformă pentru aplicații desktop în Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Se obține metadatele pentru flatpak pentru %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Actualizare dispozitiv %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Actualizare sistem %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Actualizare controler încorporat %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Actualizare ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Actualizare ME corporatist %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Actualizare ME consumator %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Actualizare controler %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Actualizarea controler Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Actualizare microcod CPU %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Actualizare configurație %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Se descarcă semnătura pentru actualizarea de microcod…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Se descarcă metadate pentru actualizarea de microcod…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Suport de înnoire microcod"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Oferă suport pentru înnoiri de microcod"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Se descarcă evaluările aplicațiiei…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Suport pentru evaluări Open Desktop"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS este un serviciu ce oferă recenzii de aplicații pentru utilizatori"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Magazinul Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Suport Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Un snap este un pachet Linux universal"
+
+#~ msgid "About %s"
+#~ msgstr "Despre %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Arată UI pentru administratorul de dosare"
+
+#~ msgid "Folder Name"
+#~ msgstr "Nume dosar"
+
+#~ msgid "_Add"
+#~ msgstr "_Adaugă"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Adaugă la dosarul de aplicații"
+
+#~ msgid "Top Rated"
+#~ msgstr "Evaluări de top"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Configurări extensie"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Extensiile sunt folosite pe propriul risc. Dacă aveți probleme de sitem, "
+#~ "este recomandat să le dezactivați."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Nu s-au putut încărca componentele"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS a fost validat OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Eșec la încărcarea fișierului"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Schimbări nesalvate"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Lista de aplicații este deja încărcată."
+
+#~ msgid "Merge documents"
+#~ msgstr "Îmbină documente"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Aruncă schimbările"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Deschide fișierul AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Deschide"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Salvează fișierul AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Salvează"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Eșec la salvarea fișierului"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Designul bannerului pentru %s a fost șters."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Designul bannerului a fost șters."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Lista de aplicații are modificări nesalvate."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Folosește înregistrarea detaliată"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Designer de bannere GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Fără designuri"
+
+#~ msgid "Error message here"
+#~ msgstr "Mesaj de eroare aici"
+
+#~ msgid "App ID"
+#~ msgstr "ID App"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Sugerate"
+
+#~ msgid "Category Featured"
+#~ msgstr "Categoria recomandate"
+
+#~ msgid "Undo"
+#~ msgstr "Anulează"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Designer de bannere"
+
+#~ msgid "New Banner"
+#~ msgstr "Banner nou"
+
+#~ msgid "Import from file"
+#~ msgstr "Importă din fișier"
+
+#~ msgid "Export to file"
+#~ msgstr "Exportă în fișier"
+
+#~ msgid "Delete Design"
+#~ msgstr "Șterge designul"
+
+#~ msgid "Featured App"
+#~ msgstr "App recomandat"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Actualizare SO"
+
+#~ msgid "Spacing"
+#~ msgstr "Spațiere"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Cantitatea de spațiu între copii"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Clic pe elemente pentru a le selecta"
+
+#~ msgid "Select"
+#~ msgstr "Selectează"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Adaugă la dosar…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Mută în dosarul…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Șter_ge din dosar"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Aplicații recomandate"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Concepe bannerele recomandate pentru Aplicații GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;Program;Programe;Aplicații;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Extensii pentru Shell"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Suport pentru miniaplicații web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Rulează aplicații web populare într-un navigator"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Depozitul de extensii pentru GNOME Shell"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Se descarcă metadate pentru extensiile de shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Extensie pentru Shell-ul GNOME"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Tot"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Autentificare / Înregistrare…"
+
+#~ msgid "Continue"
+#~ msgstr "Continuă"
+
+#~ msgid "Use"
+#~ msgstr "Utilizează"
+
+#~ msgid "Add another…"
+#~ msgstr "Adaugă încă unul…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Catalogul de aplicații este încărcat"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Sigur doriți să cumpărați %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s va fi instalat, și dumneavoastră veți fi taxat cu %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Cumpără"
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2fA$"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2fC$"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2fCN¥"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f€"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f£"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2fNZ$"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2fUS$"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Autentificat ca %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Autentificare…"
+
+#~ msgid "Sign out"
+#~ msgstr "Deautentificare"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Nu s-a putut cumpăra %s: autentificarea a fost necesară"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Nu s-a putut cumpăra %s: autentificarea a fost nevalidă"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Nu s-a putut cumpăra %s: nicio metodă de plată stabilită"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Nu s-a putut cumpăra: %s plata a fost respinsă"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Nu s-a putut cumpăra %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Pentru a continua, trebuie să folosiți un cont Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Pentru a continua trebuie folosiți contul dumneavoastră Ubuntu One."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Arată informații de profil pentru acest serviciu"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Pentru a continua trebuie să vă autentificați la %s."
+
+#~ msgid "Email address"
+#~ msgstr "Adresă email"
+
+#~ msgid "I have an account already"
+#~ msgstr "Am deja un cont"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Vreau să mă înregistrez pentru un cont acum"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Am uitat parola"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Autentifică-mă automat data viitoare"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Introduceți pin-ul pentru autentificarea în doi pași."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autentificare"
+
+#~ msgid "_About"
+#~ msgstr "_Despre"
+
+#~ msgid "_Quit"
+#~ msgstr "_Ieșire"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informații despre %s, precum și opțiuni despre cum să obțineți codecul "
+#~ "necesar redării acestui format pot fi găsite pe pagina web."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Contul dumneavoastră %s a fost suspendat."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Nu este posibil să instalați aplicații până când se rezolvă situația "
+#~ "curentă."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Pentru mai multe informații, vizitați %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Nu s-a putut instal %s din %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Se descarcă noile actualizări…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Se descarcă pagina aplicației…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Suport Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Platforma de divertisment supremă de la Valve"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Aplicații actualizate"
+
+#~ msgid "Includes: ."
+#~ msgstr "Include:"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Repornește și actualizează"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Act_ualizează toate"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Repornește și _instalează"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Se obține sursa de executare…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Se descarcă actualizările de microcod…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Support pentru Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba oferă dezvotatorilor un mod de a creea ușor pachete de programe"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "O listă de surse extra care au fost activate anterior"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Lista de surse care a fost activată anterior când s-au instalat aplicații "
+#~ "terțe."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Arată programe nelibere în rezultatele căutării"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "O listă de surse nelibere care pot fi activate opțional"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Interacțiuni prestabilite jucător-la-jucător fără funcționalitate de chat"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Oferă accesul la programe adiționale, incluzând navigatoare web și jocuri."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Activați surse de programe proprietare?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Nicio aplicație sau supliment adițional instalate; alte aplicații ar "
+#~ "putea fi totuși"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "De obicei au restricții de utiliare și de acces la codul sursă."
+
+#~| msgid "Software Sources"
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Surse proprietare de programe"
+
+#~ msgid "Remove Source"
+#~ msgstr "Elimină sursa"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Pot fi descărcate surse de aplicații de pe internet. Acestea vă oferă "
+#~ "acces la aplicații adiționale ce nu sunt furnizate de %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Eliminarea unei surse conduce implicit la eliminarea aplicațiilor "
+#~ "instalate prin intermediul acesteia."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nicio aplicație instalată prin intermediul acestei surse"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalate prin intermediul acestei surse"
+
+#~ msgid "Source Details"
+#~ msgstr "Detalii despre sursă"
+
+#~ msgid "Last Checked"
+#~ msgstr "Ultima verificare"
+
+#~ msgid "Added"
+#~ msgstr "Adăugat"
+
+#~ msgid "Website"
+#~ msgstr "Sit web"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "„%s” [%s]"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#, fuzzy
+#~| msgid "All"
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Toate"
+
+#, fuzzy
+#~| msgid "Featured"
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Recomandate"
+
+#~ msgid " or "
+#~ msgstr " sau "
+
+#~ msgid "3rd party"
+#~ msgstr "terțe"
+
+#~| msgid "Web app"
+#~ msgid "web app"
+#~ msgstr "aplicații web"
+
+#~ msgid "nonfree"
+#~ msgstr "nelibere"
+
+#~ msgid "shell extension"
+#~ msgstr "extensie shell"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "_Installing"
+#~ msgstr "Se _instalează"
+
+#~ msgid "_Removing"
+#~ msgstr "Se _elimină"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Necunoscută"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Nespecificat"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Această aplicație provine dintr-o parte terță."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Această aplicație provine dintr-o parte terță și poate conține componente "
+#~ "nelibere."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Această aplicație poate conține componente nelibere."
+
+#~ msgid "non-free"
+#~ msgstr "neliberă"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Aplicații de birou recomandate"
+
+#~| msgid "_Install"
+#~ msgid "_Install All"
+#~ msgstr "_Instalează toate"
+
+#~| msgid "OS Updates"
+#~ msgid "Other Updates"
+#~ msgstr "Alte actualizări"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Sursele de aplicații vă oferă acces la aplicații suplimentare."
+
+#~ msgid "One Star"
+#~ msgstr "O stea"
+
+#~ msgid "Two Stars"
+#~ msgstr "Două stele"
+
+#~ msgid "Three Stars"
+#~ msgstr "Trei stele"
+
+#~ msgid "Four Stars"
+#~ msgstr "Patru stele"
+
+#~ msgid "Five Stars"
+#~ msgstr "Cinci stele"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Instalarea %s a eșuat."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Eliminarea %s a eșuat."
+
+#~| msgid ""
+#~| "Internet access was required but wasn’t available. Please make sure that "
+#~| "you have internet access and try again."
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Asigurați-vă că aveți acces la internet și încercați din nou."
+
+#~| msgid ""
+#~| "There wasn’t enough disk space. Please free up some space and try again."
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Eliberați spațiu și încercați din nou."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr ""
+#~ "Dacă problema persistă, contactați furnizorul dumneavoastră de aplicații."
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~| msgctxt "menu category"
+#~| msgid "None"
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Nespecificată"
+
+#~ msgid "Audio"
+#~ msgstr "Audio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Editare"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Baze de date"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Creeare de discuri"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamatorism"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Muzică"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Instrumente de înregistrare"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Instrumente de secvențiere"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Tunere"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Constructoare"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Baze de date"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Medii de dezvoltare integrate"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilare"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Administrare de proiecte"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Traducere"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Dezvoltare web"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Informatică"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Construcții"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Vizualizare de date"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Economie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Electricitate"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Electronică"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inginerie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geoștiință"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Istorie"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Umanitate"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Procesare de imagini"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatură"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Hărți"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Muzică"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analiză numerică"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Calcul paralel"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fizică"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitate"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Împușcături"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulare"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafică"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "Grafică 2D"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publicare"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Grafică raster"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Dialup"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Poștă electronică"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Fluxuri"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Transfer de fișiere"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamatorism"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Mesagerie instantă"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Clienți de IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Acces la distanță"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonie"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Dezvoltare web"
+
+#~ msgid "Office"
+#~ msgstr "Birou"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafic"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Administrare de contacte"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Dicționar"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Poștă electronică"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Diagramă"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Prezentare"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Administrare de proiecte"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publicare"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Calcul tabelar"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Vizualizator"
+
+#~ msgid "Science"
+#~ msgstr "Știință"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Artă"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Inteligență artificială"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chimie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Informatică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Construcții"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Vizualizare de date"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Economie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Electrică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Electronică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inginerie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geoștiință"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Istorie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Umanitate"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Procesare de imagini"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Limbi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatură"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Hărți"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medical"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analiză numerică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Calcul paralel"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fizică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotică"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitate"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Administrator de fișiere"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Instrumente de fișiere"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Securitate"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulatoare de terminal"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Accesibilitate"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arhivare"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Calculator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Ceas"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Comprimare"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Instrumente pentru fișiere"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Hărți"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualitate"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Instrumente de telefonie"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Editare"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Bază de date"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Creeare de discuri"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Instrumente de redare"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Instrumente de înregistrare"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Televiziune"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "O actualizare precedentă nu a fost completată."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Actualizarea nu a putut fi instalată; adesea este vorba de o problemă cu "
+#~ "atualizarea în sine. Așteptați o altă actualizare și încercați din nou."
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Se calculează…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Necunoscută"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Aplicație doar pentru internet"
+
+#~ msgid "_History"
+#~ msgstr "_Istoric"
+
+#~ msgid "Size"
+#~ msgstr "Dimensiune"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Datele AppStream nu au fost găsite"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "O actualizare nu a fost semnată corespunzător."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Actualizarea nu a putut fi completată."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "O actualizare în modul deconectat a fost cerută dar niciun pachet nu "
+#~ "necesită a fi actualizat."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Nu mai este spațiu liber pe disc."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "O actualizare nu a fost instalată corect."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Actualizarea în modul deconectat a eșuat într-un mod neașteptat."
+
+#~ msgid "No sources found."
+#~ msgstr "Nicio sursă găsită."
+
+#~ msgid "OK"
+#~ msgstr "OK"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Alege nivelul de depanare specificat"
+
+#~ msgid "Picks"
+#~ msgstr "Selecții"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..95d05b3
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,4740 @@
+# Russian translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Yuri Myasoedov <ymyasoedov@yandex.ru>, 2014, 2015.
+# Ivan Komaritsyn <vantu5z@mail.ru>, 2015.
+# Pavel Elizaryev <gonleef@tuta.io>, 2016.
+# Stas Solovey <whats_up@tut.by>, 2013-2018, 2019.
+# Maxim Taranov <png2378@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2019-03-01 19:56+0000\n"
+"PO-Revision-Date: 2019-03-03 23:46+0300\n"
+"Last-Translator: Stas Solovey <whats_up@tut.by>\n"
+"Language-Team: Русский <gnome-cyr@gnome.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 2.2.1\n"
+
+# перевод по аналогии с ubuntu software - центр приложений ubuntu
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Центр приложений GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Менеджер приложений для GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Менеджер приложений позволяет находить и устанавливать новые приложения и "
+"системные расширения, а также удалять уже установленные приложения."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Центр приложений GNOME предоставляет рекомендуемые и популярные приложения с "
+"описанием и несколькими картинками к ним. Приложения можно находить, "
+"просматривая по категориям, либо с помощью функции поиска. Также центр "
+"приложений позволяет обновлять систему с помощью отложенных обновлений."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Панель обзора"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Панель подробностей"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Панель установленного"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Панель обновлений"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Подробности об обновлении"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1277
+msgid "The GNOME Project"
+msgstr "Проект GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Установить appstream-файл в систему"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Установка appstream-файла в систему"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Список совместимых проектов"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Это список совместимых проектов, которые мы должны показывать как GNOME, KDE "
+"и XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Управлять обновлениями в центре приложений GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Если отключено, то центр приложений GNOME будет скрывать панель обновлений, "
+"не будет выполнять автоматические обновления или предлагать их."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Автоматически загружать и устанавливать обновления"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Если включено, то центр приложений GNOME будет автоматически загружать "
+"обновления в фоновом режиме, а также устанавливать те, которые не требуют "
+"перезагрузки."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"Уведомлять пользователя о программном обеспечении, обновлённом в фоновом "
+"режиме"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Если включено, GNOME Software уведомляет пользователя об обновлениях, "
+"которые произошли, пока пользователь отсутствовал."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Автоматически загружать обновления при лимитном соединении"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Если включено, то центр приложений GNOME будет выполнять обновления в "
+"фоновом режиме даже при использовании лимитного соединения (впоследствии "
+"загрузки некоторых метаданных, проверки обновлений и других действий, может "
+"взиматься плата с пользователя)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Первый запуск центра приложений GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Показывать оценки приложений"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Фильтровать приложения на основе ветки, установленной по умолчанию для "
+"удалённого источника"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Предупреждать при установке несвободных приложений"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Показывать диалог с предупреждением при установке несвободных приложений."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Список популярных приложений"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Список используемых приложений, переопределяющих системные."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Метка времени последней проверки обновлений"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Метка времени последнего обновления"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Метка времени первого обновления безопасности, очищенная после обновления"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Метка времени последнего обновления"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Время в секундах для проверки корректности исходного скриншота"
+
+#: data/org.gnome.software.gschema.xml:69
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Чем больше значение, тем меньше обращений к удалённому серверу, но "
+"обновление снимков экрана занимает более продолжительное время. «0» — "
+"никогда не обращаться к серверу, если изображение уже есть в кэше."
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "The server to use for application reviews"
+msgstr "Сервер, используемый для отзывов на приложения"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The minimum karma score for reviews"
+msgstr "Минимальное значение кармы для отзывов"
+
+#: data/org.gnome.software.gschema.xml:83
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Рецензии с кармой, меньше этого числа, будут скрываться."
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Список официальных репозиториев, которые не будут считаться сторонними"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should be considered free software"
+msgstr "Список официальных репозиториев, которые будут считаться свободными"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "Используемый URL лицензии, когда приложение считается свободным"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Установить пакет программ для всех пользователей в системе, когда это "
+"возможно"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Show the folder management UI"
+msgstr "Показать пользовательский интерфейс управления папками"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr ""
+"Разрешить доступ к диалоговому окну репозиториев программного обеспечения"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Предлагать обновления для предварительных релизов"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Показывать элементы интерфейса, информирующие пользователя о том, что "
+"приложение несвободное"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Показывать подсказку при установке репозиториев несвободного программного "
+"обеспечения"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Показывать в списке установленных приложений размер приложения в "
+"установленном виде"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://ru.wikipedia.org/wiki/Проприетарное_программное_обеспечение'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI, описывающий несвободное и проприетарное программное обеспечение"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Список URL, указывающих на appstream-файлы, которые будут загружены в папку "
+"app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Установить appstream-файлы в общесистемную папку для всех пользователей"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Включить репозиторий расширений GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Строка, в которой хранится идентификатор gnome-online-account, используемый "
+"для входа"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Установка приложений"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Установить выбранное программное обеспечение"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Выделить всё"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Снять выделение"
+
+#: src/gnome-software.ui:38
+msgid "_Software Repositories"
+msgstr "_Репозитории ПО"
+
+#: src/gnome-software.ui:43
+msgid "_Update Preferences"
+msgstr "_Параметры обновлений"
+
+# перевод по аналогии с ubuntu software - центр приложений ubuntu
+#: src/gnome-software.ui:52 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Центр приложений"
+
+#: src/gnome-software.ui:68 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Назад"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:100
+msgid "_All"
+msgstr "_Все"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:123
+msgid "_Installed"
+msgstr "_Установлено"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:163
+msgid "_Updates"
+msgstr "_Обновления"
+
+#: src/gnome-software.ui:232
+msgid "Search"
+msgstr "Поиск"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:276 src/gs-app-row.c:292 src/gs-details-page.ui:834
+msgid "Source"
+msgstr "Источник"
+
+#. button in the info bar
+#: src/gnome-software.ui:383 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Источники ПО"
+
+#. button in the info bar
+#: src/gnome-software.ui:391
+msgid "Examine Disk"
+msgstr "Изучить диск"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:399 src/gs-updates-page.c:921
+msgid "Network Settings"
+msgstr "Параметры сети"
+
+#. button in the info bar
+#: src/gnome-software.ui:407
+msgid "Restart Now"
+msgstr "Перезапустить сейчас"
+
+#. button in the info bar
+#: src/gnome-software.ui:415
+msgid "More Information"
+msgstr "Подробная информация"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4461
+msgid "Local file"
+msgstr "Локальный файл"
+
+#: lib/gs-app.c:4510
+msgid "Package"
+msgstr "Пакет"
+
+#: src/gs-app-addon-row.c:82 src/gs-app-row.c:407
+msgid "Pending"
+msgstr "Ожидают"
+
+#: src/gs-app-addon-row.c:88 src/gs-app-row.ui:182 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:72
+msgid "Installed"
+msgstr "Установлено"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:92 src/gs-app-row.c:171 src/gs-details-page.c:317
+#: src/gs-third-party-repo-row.c:99
+msgid "Installing"
+msgstr "Устанавливается"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:177 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:106
+msgid "Removing"
+msgstr "Удаляется"
+
+#: src/gs-app-folder-dialog.c:296
+msgid "Folder Name"
+msgstr "Имя папки"
+
+#: src/gs-app-folder-dialog.c:307 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:240 src/gs-editor.c:609 src/gs-editor.c:641
+#: src/gs-installed-page.c:598 src/gs-removal-dialog.ui:32
+#: src/gs-review-dialog.ui:22 src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "О_тменить"
+
+#: src/gs-app-folder-dialog.c:312 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Добавить"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Добавить в папку приложения"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:109
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Режим при запуске: «updates» (обновления), «updated» (обновлённые), "
+"«installed» (установленные) или «overview» (обзор)"
+
+#: src/gs-application.c:109
+msgid "MODE"
+msgstr "РЕЖИМ"
+
+#: src/gs-application.c:111
+msgid "Search for applications"
+msgstr "Поиск приложений"
+
+#: src/gs-application.c:111
+msgid "SEARCH"
+msgstr "ПОИСК"
+
+#: src/gs-application.c:113
+msgid "Show application details (using application ID)"
+msgstr "Показать информацию о приложении (используя ID приложения)"
+
+#: src/gs-application.c:113 src/gs-application.c:117
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:115
+msgid "Show application details (using package name)"
+msgstr "Показать информацию о приложении (используя имя пакета)"
+
+#: src/gs-application.c:115
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:117
+msgid "Install the application (using application ID)"
+msgstr "Установить приложение (используя ID приложения)"
+
+#: src/gs-application.c:119
+msgid "Open a local package file"
+msgstr "Открыть локальный файл пакета"
+
+#: src/gs-application.c:119
+msgid "FILENAME"
+msgstr "ИМЯ_ФАЙЛА"
+
+#: src/gs-application.c:121
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Какое взаимодействие ожидается для этого действия: «none» (отсутствует), "
+"«notify» (уведомление), «full» (полное)"
+
+#: src/gs-application.c:124
+msgid "Show verbose debugging information"
+msgstr "Показывать подробную отладочную информацию"
+
+#: src/gs-application.c:126
+msgid "Installs any pending updates in the background"
+msgstr "Устанавливать любые ожидающие обновления в фоновом режиме"
+
+#: src/gs-application.c:128
+msgid "Show update preferences"
+msgstr "Показывать параметры обновлений"
+
+#: src/gs-application.c:130
+msgid "Quit the running instance"
+msgstr "Закрыть запущенную копию"
+
+#: src/gs-application.c:132
+msgid "Prefer local file sources to AppStream"
+msgstr "Предпочитать локальные источники вместо AppStream"
+
+#: src/gs-application.c:134
+msgid "Show version number"
+msgstr "Показать номер версии"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Станислав Соловей <whats_up@tut.by>, 2013-2019.\n"
+"Юрий Мясоедов <ymyasoedov@yandex.ru>, 2014."
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#. TRANSLATORS: this is the menu item that opens the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:335 src/gs-shell.c:1942
+#, c-format
+msgid "About %s"
+msgstr "О приложении %s"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:339
+msgid "A nice way to manage the software on your system."
+msgstr "Удобная программа управления программным обеспечением в системе."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:126
+msgid "Visit website"
+msgstr "Посетить веб-сайт"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:131
+msgid "Install…"
+msgstr "Установить…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:138 src/gs-auth-dialog.ui:44 src/gs-updates-section.c:484
+msgid "Cancel"
+msgstr "Отменить"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:145 src/gs-common.c:287 src/gs-page.c:582
+msgid "Install"
+msgstr "Установить"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:152
+msgid "Update"
+msgstr "Обновить"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:156 src/gs-app-row.c:165 src/gs-page.c:741
+#: src/gs-repos-dialog.c:322
+msgid "Remove"
+msgstr "Удалить"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:282
+msgid "Device cannot be used during update."
+msgstr "Устройство не может быть использовано во время обновления."
+
+#: src/gs-app-row.c:475 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Требуются дополнительные разрешения"
+
+#: src/gs-auth-dialog.c:127
+msgid "Sign In / Register…"
+msgstr "Войти / Зарегистрироваться…"
+
+#: src/gs-auth-dialog.c:134
+msgid "Continue"
+msgstr "Продолжить"
+
+#: src/gs-auth-dialog.c:141
+msgid "Use"
+msgstr "Использовать"
+
+#: src/gs-auth-dialog.ui:30
+msgid "Add another…"
+msgstr "Добавить другой…"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:180
+msgid "Other"
+msgstr "Другое"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:185
+msgid "All"
+msgstr "Все"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:189
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:480
+#, c-format
+msgid "Featured %s"
+msgstr "Рекомендуемые %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26
+msgid "Top Rated"
+msgstr "Самые популярные"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-editor.ui:225
+#: src/gs-origin-popover-row.c:52
+msgid "Name"
+msgstr "Название"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:118 src/gs-details-page.c:893
+msgid "Extension Settings"
+msgstr "Параметры расширения"
+
+#: src/gs-category-page.ui:136
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Расширения используются на свой страх и риск. Если появились какие-либо "
+"проблемы с системой, рекомендуется их отключить."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:156
+msgid "Show"
+msgstr "Показывать"
+
+#: src/gs-category-page.ui:173
+msgid "Subcategories filter menu"
+msgstr "Меню фильтра субкатегорий"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:204
+msgid "Sort"
+msgstr "Сортировать"
+
+#: src/gs-category-page.ui:220
+msgid "Subcategories sorting menu"
+msgstr "Меню сортировки субкатегорий"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:190
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Введите число от 1 до %u: "
+
+# Приложению требуется …
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:253
+msgid "Choose an application:"
+msgstr "Выберите приложение:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:123
+msgid "OS updates are now installed"
+msgstr "Обновления ОС установлены"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:126
+msgid "Recently installed updates are available to review"
+msgstr "Недавно установленные обновления доступны для просмотра"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:131 src/gs-common.c:145
+#, c-format
+msgid "%s is now installed"
+msgstr "Приложение %s установлено"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:135 src/gs-common.c:149
+msgid "A restart is required for the changes to take effect."
+msgstr "Необходима перезагрузка, чтобы изменения вступили в силу."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:139
+msgid "Application is ready to be used."
+msgstr "Приложение готово к использованию."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:159 src/gs-updates-section.c:325
+msgid "Restart"
+msgstr "Перезапустить"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:163
+msgid "Launch"
+msgstr "Запустить"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:221
+msgid "Install Third-Party Software?"
+msgstr "Установить стороннее приложение?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:225 src/gs-repos-dialog.c:233
+msgid "Enable Third-Party Software Repository?"
+msgstr "Включить репозиторий стороннего ПО?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:241
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s не является <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">свободным и открытым приложением</a> и предоставляется "
+"«%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:251
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s предоставляется «%s»."
+
+#: src/gs-common.c:260
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Для продолжения установки необходимо включить этот репозиторий программного "
+"обеспечения."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:270
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"В некоторых странах установка или использование %s могут быть незаконны."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:276
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"В некоторых странах установка или использование этого кодека могут быть "
+"незаконны."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:283
+msgid "Don’t Warn Again"
+msgstr "Больше не предупреждать"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:292
+msgid "Enable and Install"
+msgstr "Включить и установить"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:435
+msgid "Detailed errors from the package manager follow:"
+msgstr "Подробные сообщения об ошибках от менеджера пакетов:"
+
+#: src/gs-common.c:454 src/gs-details-page.ui:432
+msgid "Details"
+msgstr "Подробности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:62
+msgid "No cartoon violence"
+msgstr "Отсутствуют сцены мультипликационного насилия"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in unsafe situations"
+msgstr "Мультипликационные персонажи в опасных ситуациях"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:68
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Мультипликационные персонажи в агрессивных конфликтах"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:71
+msgid "Graphic violence involving cartoon characters"
+msgstr "Насилие в отношении мультипликационных персонажей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "No fantasy violence"
+msgstr "Отсутствуют сцены фэнтезийного насилия"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:77
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Персонажи в опасных ситуациях легко отличимых от реальности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:80
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Персонажи в агрессивных конфликтах легко отличимых от реальности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Насилие легко отличимое от реальности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:86
+msgid "No realistic violence"
+msgstr "Нереалистичное насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Умеренно-реалистичные персонажи в опасных ситуациях"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:92
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Изображения реалистичных персонажей в агрессивных конфликтах"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:95
+msgid "Graphic violence involving realistic characters"
+msgstr "Насилие в отношении реалистичных персонажей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "No bloodshed"
+msgstr "Отсутствует кровопролитие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:101
+msgid "Unrealistic bloodshed"
+msgstr "Нереалистичное кровопролитие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:104
+msgid "Realistic bloodshed"
+msgstr "Реалистичное кровопролитие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Изображения крови и увечий"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:110
+msgid "No sexual violence"
+msgstr "Отсутствует сексуальное насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:113
+msgid "Rape or other violent sexual behavior"
+msgstr "Изнасилование или другое сексуальное насилие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "No references to alcohol"
+msgstr "Отсутствие упоминания алкоголя"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:119
+msgid "References to alcoholic beverages"
+msgstr "Упоминание алкогольных напитков"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:122
+msgid "Use of alcoholic beverages"
+msgstr "Употребление алкогольных напитков"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:125
+msgid "No references to illicit drugs"
+msgstr "Отсутствуют упоминания запрещенных наркотиков"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "References to illicit drugs"
+msgstr "Упоминание запрещенных наркотиков"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:131
+msgid "Use of illicit drugs"
+msgstr "Употребление запрещенных наркотиков"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "References to tobacco products"
+msgstr "Упоминание табачных изделий"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:137
+msgid "Use of tobacco products"
+msgstr "Использование табачных изделий"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:140
+msgid "No nudity of any sort"
+msgstr "Отсутствует обнажение в любом виде"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:143
+msgid "Brief artistic nudity"
+msgstr "Короткие или неоткровенные сцены обнажения в художественных целях"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Prolonged nudity"
+msgstr "Продолжительные сцены обнажения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:149
+msgid "No references to or depictions of sexual nature"
+msgstr "Отсутствуют отсылки или описания сексуального характера"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:152
+msgid "Provocative references or depictions"
+msgstr "Содержание или упоминание провокационного характера"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:155
+msgid "Sexual references or depictions"
+msgstr "Содержание или упоминание сексуального характера"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Graphic sexual behavior"
+msgstr "Изображения сексуального поведения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:161
+msgid "No profanity of any kind"
+msgstr "Отсутствует ненормативная лексика в любом виде"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:164
+msgid "Mild or infrequent use of profanity"
+msgstr "Незначительное или нечастое сквернословие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Moderate use of profanity"
+msgstr "Умеренное сквернословие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:170
+msgid "Strong or frequent use of profanity"
+msgstr "Очень грубое и частое сквернословие"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:173
+msgid "No inappropriate humor"
+msgstr "Отсутствует неприемлемый юмор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "Slapstick humor"
+msgstr "Грубый юмор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:179
+msgid "Vulgar or bathroom humor"
+msgstr "Вульгарный или непристойный юмор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Юмор для взрослых или сексуального характера"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:185
+msgid "No discriminatory language of any kind"
+msgstr "Отсутствуют фразы с дискриминацией любого типа"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:188
+msgid "Negativity towards a specific group of people"
+msgstr "Негативное отношение к определенной группе людей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Дискриминация с целью причинить моральный вред"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:194
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Явная дискриминация по признаку пола, сексуальной ориентации, расы или "
+"религии"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:197
+msgid "No advertising of any kind"
+msgstr "Отсутствует реклама в любом виде"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Неявная реклама"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:203
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Явные упоминания конкретных брендов или торговых марок"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:206
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Пользователям предлагается приобрести определенные предметы реального мира"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Отсутствуют азартные игры в любом виде"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:212
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+"Азартные игры с использованием жетонов, основанные на случайных событиях"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using “play” money"
+msgstr "Азартные игры с использованием «игровой» валюты"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:218
+msgid "Gambling using real money"
+msgstr "Азартные игры с использованием реальных денег"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:221
+msgid "No ability to spend money"
+msgstr "Отсутствует возможность тратить деньги"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:224
+msgid "Users are encouraged to donate real money"
+msgstr "Пользователям предлагается платить реальные деньги"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:227
+msgid "Ability to spend real money in-app"
+msgstr "Присутствует возможность тратить реальные деньги в приложении"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Отсутствует возможность общаться с другими игроками"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:233
+msgid "User-to-user interactions without chat functionality"
+msgstr "Взаимодействие между игроками без использования чата"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Moderated chat functionality between users"
+msgstr "Модерируемые функции чата между пользователями"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:239
+msgid "Uncontrolled chat functionality between users"
+msgstr "Неконтролируемые функции чата между пользователями"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:242
+msgid "No way to talk with other users"
+msgstr "Отсутствует возможность общаться с другими игроками"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:245
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Неконтролируемые функции аудио или видеочата между пользователями"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:248
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Не распространяет имена пользователей или адреса электронной почты"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:251
+msgid "Sharing social network usernames or email addresses"
+msgstr "Распространяет имена пользователей или адреса электронной почты"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:254
+msgid "No sharing of user information with third parties"
+msgstr "Не передает информацию о пользователе третьим лицам"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:257
+msgid "Checking for the latest application version"
+msgstr "Проверка последней версии приложения"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:260
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Совместное использование диагностических данных, которые не позволяют другим "
+"идентифицировать пользователя"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing information that lets others identify the user"
+msgstr "Обмен информацией, позволяющей другим идентифицировать пользователя"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:266
+msgid "No sharing of physical location with other users"
+msgstr "Нет общего физического местоположения с другими пользователями"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:269
+msgid "Sharing physical location with other users"
+msgstr ""
+"Совместное использование физического местоположения с другими пользователями"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:274
+msgid "No references to homosexuality"
+msgstr "Нет ссылок на гомосексуализм"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:277
+msgid "Indirect references to homosexuality"
+msgstr "Косвенные ссылки на гомосексуализм"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:280
+msgid "Kissing between people of the same gender"
+msgstr "Поцелуи между людьми одного пола"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Графическое сексуальное поведение между людьми одного пола"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:286
+msgid "No references to prostitution"
+msgstr "Нет ссылок на проституцию"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:289
+msgid "Indirect references to prostitution"
+msgstr "Косвенные ссылки на проституцию"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "Direct references to prostitution"
+msgstr "Прямые ссылки на проституцию"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:295
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Графические изображения акта проституции"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "No references to adultery"
+msgstr "Нет ссылок на прелюбодеяние"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:301
+msgid "Indirect references to adultery"
+msgstr "Косвенные ссылки на прелюбодеяние"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:304
+msgid "Direct references to adultery"
+msgstr "Прямые ссылки на прелюбодеяние"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Graphic depictions of the act of adultery"
+msgstr "Графические изображения акта прелюбодеяния"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:310
+msgid "No sexualized characters"
+msgstr "Нет сексуализированных персонажей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:313
+msgid "Scantily clad human characters"
+msgstr "Необычно одетые человеческие персонажи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:316
+msgid "Overtly sexualized human characters"
+msgstr "Чрезмерно сексуализированные человеческие персонажи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "No references to desecration"
+msgstr "Нет упоминания осквернения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:322
+msgid "Depictions of or references to historical desecration"
+msgstr "Изображения или ссылки на историческое осквернение"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:325
+msgid "Depictions of modern-day human desecration"
+msgstr "Изображения современного человеческого осквернения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Графические изображения современного осквернения"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:331
+msgid "No visible dead human remains"
+msgstr "Нет видимых мертвых человеческих останков"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:334
+msgid "Visible dead human remains"
+msgstr "Видимые мертвые человеческие останки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Мертвые человеческие останки, которые имеют неприкрытые части"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:340
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Графические изображения осквернения человеческих тел"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:343
+msgid "No references to slavery"
+msgstr "Отсутствие упоминания рабства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "Depictions of or references to historical slavery"
+msgstr "Изображения или упоминания исторического рабства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:349
+msgid "Depictions of modern-day slavery"
+msgstr "Изображения современного рабства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Графические изображения современного рабства"
+
+# Приложению требуется …
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:281
+msgid "An application"
+msgstr "Приложению"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:287
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s требуется дополнительная поддержка файловых форматов."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:289
+msgid "Additional MIME Types Required"
+msgstr "Требуются дополнительные типы MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:293
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s требуются дополнительные шрифты."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:295
+msgid "Additional Fonts Required"
+msgstr "Требуются дополнительные шрифты"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:299
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s требуются дополнительные мультимедиа-кодеки."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:301
+msgid "Additional Multimedia Codecs Required"
+msgstr "Требуются дополнительные мультимедиа-кодеки"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:305
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s требуются дополнительные драйверы для принтера."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:307
+msgid "Additional Printer Drivers Required"
+msgstr "Требуются дополнительные драйверы для принтера"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:311
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s требуются дополнительные пакеты."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:313
+msgid "Additional Packages Required"
+msgstr "Требуются дополнительные пакеты"
+
+# перевод по аналогии с ubuntu software - центр приложений ubuntu
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:322
+msgid "Find in Software"
+msgstr "Найти в приложениях"
+
+#: src/gs-details-page.c:312
+msgid "Removing…"
+msgstr "Удаление…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:331
+msgid "Pending installation…"
+msgstr "В ожидании установки…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:338
+msgid "Pending update…"
+msgstr "В ожидании обновления…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:663
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Этим приложением можно пользоваться только при наличии активного Интернет-"
+"подключения."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:809 src/gs-details-page.c:835
+#: src/gs-details-page.ui:159 src/gs-third-party-repo-row.c:83
+#: src/gs-upgrade-banner.ui:122
+msgid "_Install"
+msgstr "_Установить"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:849 src/gs-third-party-repo-row.c:75
+msgid "_Install…"
+msgstr "Ус_тановить…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:898
+msgid "_Launch"
+msgstr "_Запустить"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:923 src/gs-details-page.ui:184
+msgid "_Remove"
+msgstr "У_далить"
+
+#: src/gs-details-page.c:956 src/gs-update-dialog.c:92
+msgid "Network"
+msgstr "Сеть"
+
+#: src/gs-details-page.c:956 src/gs-update-dialog.c:92
+msgid "Can communicate over the network"
+msgstr "Может общаться по сети"
+
+#: src/gs-details-page.c:957 src/gs-update-dialog.c:93
+msgid "System Services"
+msgstr "Системные сервисы"
+
+#: src/gs-details-page.c:957 src/gs-update-dialog.c:93
+msgid "Can access D-Bus services on the system bus"
+msgstr "Имеет доступ к сервисам D-Bus на системной шине"
+
+#: src/gs-details-page.c:958 src/gs-update-dialog.c:94
+msgid "Session Services"
+msgstr "Сервисы сеанса"
+
+#: src/gs-details-page.c:958 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the session bus"
+msgstr "Имеет доступ к сервисам D-Bus на шине сеанса"
+
+#: src/gs-details-page.c:959 src/gs-update-dialog.c:95
+msgid "Devices"
+msgstr "Устройства"
+
+#: src/gs-details-page.c:959 src/gs-update-dialog.c:95
+msgid "Can access system device files"
+msgstr "Имеет доступ к файлам системного устройства"
+
+#: src/gs-details-page.c:960 src/gs-details-page.c:961
+#: src/gs-update-dialog.c:96 src/gs-update-dialog.c:97
+msgid "Home folder"
+msgstr "Домашняя папка"
+
+#: src/gs-details-page.c:960 src/gs-details-page.c:962
+#: src/gs-details-page.c:964 src/gs-update-dialog.c:96
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:100
+msgid "Can view, edit and create files"
+msgstr "Может просматривать, редактировать и создавать файлы"
+
+#: src/gs-details-page.c:961 src/gs-details-page.c:963
+#: src/gs-details-page.c:965 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view files"
+msgstr "Может просматривать файлы"
+
+#: src/gs-details-page.c:962 src/gs-details-page.c:963
+#: src/gs-update-dialog.c:98 src/gs-update-dialog.c:99
+msgid "File system"
+msgstr "Файловая система"
+
+#: src/gs-details-page.c:964 src/gs-details-page.c:965
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:101
+msgid "Downloads folder"
+msgstr "Папка для загрузок"
+
+#: src/gs-details-page.c:966 src/gs-update-dialog.c:102
+msgid "Settings"
+msgstr "Настройки"
+
+#: src/gs-details-page.c:966 src/gs-update-dialog.c:102
+msgid "Can view and change any settings"
+msgstr "Можно просматривать и изменять любые настройки"
+
+#: src/gs-details-page.c:967 src/gs-update-dialog.c:103
+msgid "Legacy display system"
+msgstr "Устаревшая система отображения"
+
+#: src/gs-details-page.c:967 src/gs-update-dialog.c:103
+msgid "Uses an old, insecure display system"
+msgstr "Использует старую, небезопасную систему отображения"
+
+#: src/gs-details-page.c:982
+msgid "This application is fully sandboxed."
+msgstr "Это приложение полностью изолировано."
+
+#: src/gs-details-page.c:990
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Невозможно определить, к каким частям системы это приложение получает "
+"доступ. Это типично для старых приложений."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1138
+msgctxt "version"
+msgid "Unknown"
+msgstr "Неизвестная"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1151
+msgctxt "updated"
+msgid "Never"
+msgstr "Не обновлялось"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1204
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: src/gs-details-page.c:1254
+msgid "Low"
+msgstr "Низкая"
+
+#: src/gs-details-page.c:1256
+msgid "Medium"
+msgstr "Средняя"
+
+#: src/gs-details-page.c:1258
+msgid "High"
+msgstr "Высокая"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1262 src/gs-details-page.ui:953 src/gs-review-row.c:57
+msgid "Unknown"
+msgstr "Неизвестная"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1614
+msgid "You need internet access to write a review"
+msgstr "Для написания отзыва необходимо подключение к Интернету"
+
+#: src/gs-details-page.c:1797 src/gs-details-page.c:1813
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Не удалось найти «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2363
+msgid "Public domain"
+msgstr "Общественное достояние"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2366
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Общественное_достояние"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2373
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.ru"
+
+# перевод по аналогии с ubuntu software - центр приложений ubuntu
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2383 src/gs-details-page.ui:1197
+msgid "Free Software"
+msgstr "Свободное ПО"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2440
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Пользователи ограничены следующей лицензией:"
+msgstr[1] "Пользователи ограничены следующими лицензиями:"
+msgstr[2] "Пользователи ограничены следующими лицензиями:"
+
+#: src/gs-details-page.c:2467 src/gs-details-page.ui:1269
+msgid "More information"
+msgstr "Больше информации"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Страница подробностей"
+
+#: src/gs-details-page.ui:211
+msgid "Downloading"
+msgstr "Загружается"
+
+#: src/gs-details-page.ui:250
+msgid "_Update"
+msgstr "_Обновить"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:266
+msgid "_Add shortcut"
+msgstr "_Добавить ярлык"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:277
+msgid "Re_move shortcut"
+msgstr "_Удалить ярлык"
+
+#: src/gs-details-page.ui:351
+msgid "No screenshot provided"
+msgstr "Картинка недоступна"
+
+#: src/gs-details-page.ui:371
+msgid "Software Repository Included"
+msgstr "Содержит репозиторий программного обеспечения"
+
+#: src/gs-details-page.ui:372
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Это приложение содержит репозиторий программного обеспечения, который "
+"предоставляет обновления приложения, а также доступ к другому программному "
+"обеспечению."
+
+#: src/gs-details-page.ui:379
+msgid "No Software Repository Included"
+msgstr "Не содержит репозиторий программного обеспечения"
+
+#: src/gs-details-page.ui:380
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Приложение не содержит репозиторий программного обеспечения. Оно не будет "
+"обновляться при выходе новых версий."
+
+#: src/gs-details-page.ui:388
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Данное программное обеспечение уже предоставлено вашим дистрибутивом и не "
+"может быть заменено."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:395
+msgid "Software Repository Identified"
+msgstr "Идентифицирован репозиторий программного обеспечения"
+
+#: src/gs-details-page.ui:396
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Добавление этого репозитоия программного обеспечения предоставит доступ к "
+"дополнительным приложениям и обновлениям."
+
+#: src/gs-details-page.ui:397
+msgid "Only use software repositories that you trust."
+msgstr ""
+"Используйте только те репозитории программного обеспечения, которым "
+"доверяете."
+
+#: src/gs-details-page.ui:407
+msgid "_Website"
+msgstr "_Веб-сайт"
+
+#: src/gs-details-page.ui:416
+msgid "_Donate"
+msgstr "_Пожертвовать"
+
+#: src/gs-details-page.ui:526
+msgid "Localized in your Language"
+msgstr "Переведено на ваш язык"
+
+#: src/gs-details-page.ui:537
+msgid "Documentation"
+msgstr "Документация"
+
+#: src/gs-details-page.ui:548
+msgid "Release Activity"
+msgstr "Выпуск обновлений"
+
+#: src/gs-details-page.ui:559
+msgid "System Integration"
+msgstr "Интеграция с системой"
+
+#: src/gs-details-page.ui:570
+msgid "Sandboxed"
+msgstr "Изолировано в «песочнице»"
+
+#: src/gs-details-page.ui:589
+msgid "Version"
+msgstr "Версия"
+
+#: src/gs-details-page.ui:625
+msgid "Age Rating"
+msgstr "Возрастной рейтинг"
+
+#: src/gs-details-page.ui:663 src/gs-details-page.ui:1355
+msgid "Permissions"
+msgstr "Разрешения"
+
+#: src/gs-details-page.ui:701
+msgid "Updated"
+msgstr "Обновлено"
+
+#: src/gs-details-page.ui:735
+msgid "Category"
+msgstr "Категория"
+
+#: src/gs-details-page.ui:772
+msgid "Installed Size"
+msgstr "Итоговый размер"
+
+#: src/gs-details-page.ui:803
+msgid "Download Size"
+msgstr "Объём загрузки"
+
+#: src/gs-details-page.ui:865
+msgid "Developer"
+msgstr "Разработчик"
+
+#: src/gs-details-page.ui:910
+msgid "License"
+msgstr "Лицензия"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:929
+msgid "Free"
+msgstr "Свободная"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:941
+msgid "Proprietary"
+msgstr "Несвободная"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:991 src/gs-installed-page.c:478
+#: plugins/core/gs-desktop-common.c:317
+msgid "Add-ons"
+msgstr "Дополнения"
+
+#: src/gs-details-page.ui:1003
+msgid "Selected add-ons will be installed with the application."
+msgstr "Выбранные дополнения будут установлены вместе с приложением."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1041
+msgid "Reviews"
+msgstr "Отзывы"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1059
+msgid "_Write a Review"
+msgstr "_Написать отзыв"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1080
+msgid "_Show More"
+msgstr "_Показать ещё"
+
+#: src/gs-details-page.ui:1208
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Это означает, что это программное обеспечение можно свободно запускать, "
+"копировать, распространять, изучать и изменять."
+
+#: src/gs-details-page.ui:1248
+msgid "Proprietary Software"
+msgstr "Несвободное ПО"
+
+#: src/gs-details-page.ui:1259
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Это означает, что это программное обеспечение является собственностью "
+"физического лица или компании. Также возможны ограничения на его "
+"использование и его исходный код обычно не доступен."
+
+#: src/gs-details-page.ui:1291
+msgid "Unknown Software License"
+msgstr "Неизвестная лицензия"
+
+#: src/gs-details-page.ui:1302
+msgid "The license terms of this software are unknown."
+msgstr "Условия лицензии этого программного обеспечения неизвестны."
+
+#: src/gs-details-page.ui:1322
+msgid "The application was rated this way because it features:"
+msgstr "Это приложение имеет этот рейтинг, потому что:"
+
+#: src/gs-details-page.ui:1336
+msgid "No details were available for this rating."
+msgstr "Для этого рейтинга нет подробностей."
+
+#: src/gs-editor.c:347
+msgid "CSS validated OK!"
+msgstr "CSS успешно проверен!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:550
+msgid "Failed to load file"
+msgstr "Не удалось загрузить файл"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:584 src/gs-editor.c:860
+msgid "Unsaved changes"
+msgstr "Несохранённые изменения"
+
+#: src/gs-editor.c:586
+msgid "The application list is already loaded."
+msgstr "Список приложений уже загружен."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:590
+msgid "Merge documents"
+msgstr "Объединить документы"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:594 src/gs-editor.c:865
+msgid "Throw away changes"
+msgstr "Отбросить изменения"
+
+#. import the new file
+#: src/gs-editor.c:606 src/gs-editor.c:638
+msgid "Open AppStream File"
+msgstr "Открыть AppStream-файл"
+
+#: src/gs-editor.c:610
+msgid "_Open"
+msgstr "_Открыть"
+
+#: src/gs-editor.c:642
+msgid "_Save"
+msgstr "_Сохранить"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:662
+msgid "Failed to save file"
+msgstr "Не удалось сохранить файл"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:737
+#, c-format
+msgid "%s banner design deleted."
+msgstr "Макет баннера %s удалён."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:740
+msgid "Banner design deleted."
+msgstr "Макет баннера удалён."
+
+#: src/gs-editor.c:862
+msgid "The application list has unsaved changes."
+msgstr "Список приложений содержит несохранённые изменения."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1096
+msgid "Use verbose logging"
+msgstr "Использовать отладочное журналирование"
+
+# перевод по аналогии с ubuntu software - центр приложений ubuntu
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1104
+msgid "GNOME Software Banner Designer"
+msgstr "Конструктор баннеров центра приложений GNOME"
+
+#: src/gs-editor.ui:53 src/gs-editor.ui:62
+msgid "No Designs"
+msgstr "Нет макетов"
+
+#: src/gs-editor.ui:137
+msgid "Error message here"
+msgstr "Сообщение об ошибке здесь"
+
+#: src/gs-editor.ui:196
+msgid "App ID"
+msgstr "ID приложения"
+
+#: src/gs-editor.ui:253 src/gs-review-dialog.ui:109
+msgid "Summary"
+msgstr "Сводка"
+
+#: src/gs-editor.ui:278
+msgid "Editor’s Pick"
+msgstr "Выбор редакции"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:287
+msgid "Category Featured"
+msgstr "Категория «Рекомендуемое»"
+
+#. button in the info bar
+#: src/gs-editor.ui:336
+msgid "Undo"
+msgstr "Отменить"
+
+#: src/gs-editor.ui:371 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Конструктор баннеров"
+
+#: src/gs-editor.ui:392
+msgid "New Banner"
+msgstr "Новый макет"
+
+#: src/gs-editor.ui:452
+msgid "Import from file"
+msgstr "Импортировать из файла"
+
+#: src/gs-editor.ui:461
+msgid "Export to file"
+msgstr "Экспортировать в файл"
+
+#: src/gs-editor.ui:470
+msgid "Delete Design"
+msgstr "Удалить макет"
+
+#: src/gs-editor.ui:491
+msgid "Featured App"
+msgstr "Рекомендуемое приложение"
+
+#: src/gs-editor.ui:500
+msgid "OS Upgrade"
+msgstr "Обновление ОС"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:133
+msgid " and "
+msgstr " и "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:136
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:162
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Доступный шрифт для написания %s"
+msgstr[1] "Доступные шрифты для написания %s"
+msgstr[2] "Доступные шрифты для написания %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:170
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Доступное ПО для %s"
+msgstr[1] "Доступное ПО для %s"
+msgstr[2] "Доступное ПО для %s"
+
+#: src/gs-extras-page.c:212
+msgid "Unable to Find Requested Software"
+msgstr "Не удалось найти заданное приложение"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:317
+#, c-format
+msgid "%s not found"
+msgstr "%s не найден"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:321
+msgid "on the website"
+msgstr "на веб-сайте"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Не найдено ни одного приложения, которое предоставляло бы файл %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:332 src/gs-extras-page.c:343 src/gs-extras-page.c:354
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Сведения о %s, а также параметры для получения отсутствующих приложений, "
+"можно найти на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339 src/gs-extras-page.c:361
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Не найдено ни одного приложения для поддержки %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350
+#, c-format
+msgid "%s is not available."
+msgstr "%s недоступен."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Сведения о %s, а также параметры для получения приложения, которое "
+"поддерживает этот формат, можно найти на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:372
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Отсутствуют доступные рукописные шрифты %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Сведения о %s, а также параметры для получения дополнительных шрифтов можно "
+"найти на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Нет доступных кодеков для формата %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Сведения о %s, а также параметры для получения кодека, который может "
+"воспроизводить этот формат, можно найти на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Не найдено ни одного ресурса Plasma для поддержки %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Сведения о %s, а также параметры для получения дополнительных ресурсов "
+"Plasma можно найти на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Не найдено ни одного драйвера принтера для %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Сведения о %s, а также параметры для получения драйвера, который "
+"поддерживает этот принтер можно найти на %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:453
+msgid "this website"
+msgstr "этот веб-сайт"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:457
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"К сожалению, кодек %s не найден. Для получения подробной информации посетите "
+"%s."
+msgstr[1] ""
+"К сожалению, кодеки %s не найдены. Для получения подробной информации "
+"посетите %s."
+msgstr[2] ""
+"К сожалению, кодеки %s не найдены. Для получения подробной информации "
+"посетите %s."
+
+#: src/gs-extras-page.c:525 src/gs-extras-page.c:581 src/gs-extras-page.c:620
+msgid "Failed to find any search results"
+msgstr "Не удалось получить результаты поиска"
+
+#: src/gs-extras-page.c:808
+#, c-format
+msgid "%s file format"
+msgstr "Формат файла %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Страница кодеков"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Добро пожаловать"
+
+#: src/gs-first-run-dialog.ui:40
+msgid "Welcome to Software"
+msgstr "Добро пожаловать в менеджер приложений"
+
+#: src/gs-first-run-dialog.ui:50
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Менеджер приложений — это программа для централизованного управления "
+"программным обеспечением. Смотрите категории и рекомендации или найдите "
+"интересующие вас приложения."
+
+#: src/gs-first-run-dialog.ui:59
+msgid "_Let’s Go Shopping"
+msgstr "_Отправляемся за покупками"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:367
+msgid "Spacing"
+msgstr "Отступы"
+
+#: src/gs-hiding-box.c:368
+msgid "The amount of space between children"
+msgstr "Объем пространства между дочерними элементами"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:69
+msgctxt "app status"
+msgid "Removed"
+msgstr "Удалено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:75
+msgctxt "app status"
+msgid "Installed"
+msgstr "Установлено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:81
+msgctxt "app status"
+msgid "Updated"
+msgstr "Обновлено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:87
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Журнал"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:474
+msgid "System Applications"
+msgstr "Системные приложения"
+
+#: src/gs-installed-page.c:608
+msgid "Click on items to select them"
+msgstr "Нажмите, чтобы выделить"
+
+#: src/gs-installed-page.c:812
+msgid "Select"
+msgstr "Выбрать"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Страница установленного"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_Добавить в папку…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "_Переместить в папку…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "_Удалить из папки"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:61
+msgid "Software catalog is being downloaded"
+msgstr "Загрузка списка приложений"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:65
+msgid "Software catalog is being loaded"
+msgstr "Загрузка списка приложений"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Загрузка страницы"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Запуск…"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Страница модерирования"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Нет отзывов для модерирования"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:77
+msgid "system"
+msgstr "система"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:80
+msgid "user"
+msgstr "пользователь"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Формат"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Установка"
+
+#. add button
+#: src/gs-overview-page.c:318
+msgid "More…"
+msgstr "Ещё…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:596
+msgid "Recommended Audio & Video Applications"
+msgstr "Рекомендуемые приложения для аудио и видео"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:601
+msgid "Recommended Games"
+msgstr "Рекомендуемые игры"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:606
+msgid "Recommended Graphics Applications"
+msgstr "Рекомендуемые графические приложения"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:611
+msgid "Recommended Productivity Applications"
+msgstr "Рекомендуемые приложения для работы"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:993 src/gs-repos-dialog.c:821
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Доступ к дополнительному программному обеспечению из выбранных сторонних "
+"источников."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:997 src/gs-repos-dialog.c:825
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Некоторые из этих программ являются проприетарными и поэтому имеют "
+"ограничения на использование, распространение и доступ к исходному коду."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:1002 src/gs-repos-dialog.c:830
+msgid "Find out more…"
+msgstr "Узнать больше…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:1010 src/gs-repos-dialog.c:238
+msgid "Enable"
+msgstr "Включить"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Главная страница"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Включить репозитории стороннего ПО?"
+
+#: src/gs-overview-page.ui:83
+msgid "Featured Applications"
+msgstr "Рекомендуемые приложения"
+
+#: src/gs-overview-page.ui:116
+msgid "Categories"
+msgstr "Категории"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:232
+msgid "Editor’s Picks"
+msgstr "Выбор редакции"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:258
+msgid "Recent Releases"
+msgstr "Недавние релизы"
+
+#: src/gs-overview-page.ui:328
+msgid "No Application Data Found"
+msgstr "Файлы приложения не найдены"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:482
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "Уверены, что хотите купить %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:486
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "Будет установлено приложение %s, с вашего счёта будет снято %s."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:499
+msgid "Purchase"
+msgstr "Купить"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:573
+#, c-format
+msgid "Prepare %s"
+msgstr "Подготовка %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:710
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Уверены, что хотите удалить репозиторий %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:714
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Все приложения из %s будут удалены, и вам придется переустановить "
+"репозиторий, чтобы использовать их снова."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:722
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Уверены, что хотите удалить %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:725
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Приложение %s будет удалено, для повторного использования приложения "
+"потребуется его установка."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:57 src/gs-summary-tile.c:59
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Установлено)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Параметры обновлений"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Автоматические обновления"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Автоматические обновления отключены, при мобильных или лимитных соединениях."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Автоматические уведомления об обновлениях"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr ""
+"Показывать уведомления, когда обновления были автоматически установлены."
+
+#: lib/gs-price.c:97
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:99
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:101
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:103
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:105
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:107
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:109
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:117
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:113
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Некоторые из установленных приложений несовместимы с %s. Если вы продолжите, "
+"следующие приложения будут автоматически удалены во время обновления:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Несовместимое приложение"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Продолжить"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:96
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u приложение установлено"
+msgstr[1] "%u приложения установлено"
+msgstr[2] "%u приложений установлено"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:103
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u дополнение установлено"
+msgstr[1] "%u дополнения установлено"
+msgstr[2] "%u дополнений установлено"
+
+# Приложению требуется …
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:111
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u приложение"
+msgstr[1] "%u приложения"
+msgstr[2] "%u приложений"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u дополнение"
+msgstr[1] "%u дополнения"
+msgstr[2] "%u дополнений"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:124
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s и %s установлено"
+msgstr[1] "%s и %s установлено"
+msgstr[2] "%s и %s установлено"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:298
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Удалить «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:303
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Отключить «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:307
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Программное обеспечение, установленное из этого репозитория, больше не будет "
+"получать обновления, включая исправления безопасности."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:325
+msgid "Disable"
+msgstr "Отключить"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:734
+msgid "the operating system"
+msgstr "операционная система"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:800 src/gs-repos-dialog.c:836
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Эти репозитории дополняют программное обеспечение по умолчанию, "
+"предоставленное %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:818
+msgid "Third Party Repositories"
+msgstr "Репозитории стороннего ПО"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Нет дополнительных репозиториев"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Включить"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Удалить…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Отключить…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Включается"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Отключается"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Включено"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Отключено"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:81
+msgid "Hate it"
+msgstr "Ненавижу"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:85
+msgid "Don’t like it"
+msgstr "Не понравилось"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:89
+msgid "It’s OK"
+msgstr "Нормально"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:93
+msgid "Like it"
+msgstr "Понравилось"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:97
+msgid "Love it"
+msgstr "Обожаю"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:119
+msgid "Please take more time writing the review"
+msgstr "Уделите рецензированию больше времени"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:123
+msgid "Please choose a star rating"
+msgstr "Выберите оценку"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:127
+msgid "The summary is too short"
+msgstr "Краткое описание должно быть длиннее"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:131
+msgid "The summary is too long"
+msgstr "Краткое описание слишком длинное"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:135
+msgid "The description is too short"
+msgstr "Описание слишком короткое"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:139
+msgid "The description is too long"
+msgstr "Описание слишком длинное"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Разместить отзыв"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Разместить"
+
+#: src/gs-review-dialog.ui:75
+msgid "Rating"
+msgstr "Рейтинг"
+
+#: src/gs-review-dialog.ui:119
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Напишите краткое описание отзыва, например: «Замечательное приложение, "
+"рекомендую»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:144
+msgctxt "app review"
+msgid "Review"
+msgstr "Отзыв"
+
+#: src/gs-review-dialog.ui:154
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Что вы думаете о приложении? Постарайтесь аргументировать ваше мнение."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "оценок всего"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:220
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Вы не можете публиковать отзывы из-за оскорбительного и грубого поведения."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:225
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "Ваш отзыв будет скрыт до тех пор, пока его не проверит администратор."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:239
+msgid "Report Review?"
+msgstr "Отправить отзыв?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:243
+msgid "Report"
+msgstr "Отправить"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Был ли этот отзыв полезен для вас?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Да"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Нет"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Незначительно"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Сообщить…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Удалить…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:299
+msgid "Screenshot not found"
+msgstr "Картинка не найдена"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:314
+msgid "Failed to load image"
+msgstr "Не удалось загрузить изображение"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:447
+msgid "Screenshot size not found"
+msgstr "Размер картинки не найден"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:477
+msgid "Could not create cache"
+msgstr "Не удалось создать кэш"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:537
+msgid "Screenshot not valid"
+msgstr "Картинка некорректна"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:552
+msgid "Screenshot not available"
+msgstr "Картинка недоступна"
+
+#: src/gs-screenshot-image.c:605
+msgid "Screenshot"
+msgstr "Картинка"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:141
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "ещё %u совпадение"
+msgstr[1] "ещё %u совпадения"
+msgstr[2] "ещё %u совпадений"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Страница поиска"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Приложение не найдено"
+
+#. TRANSLATORS: menu item that signs into the named account with a particular username
+#: src/gs-shell.c:726
+#, c-format
+msgid "Signed in as %s"
+msgstr "Авторизован как %s"
+
+#. TRANSLATORS: menu item that signs into the named account
+#: src/gs-shell.c:730
+#, c-format
+msgid "Sign in…"
+msgstr "Войти…"
+
+#. TRANSLATORS: menu item for signing out from the named account
+#: src/gs-shell.c:738
+#, c-format
+msgid "Sign out"
+msgstr "Выйти"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:921 src/gs-shell.c:926 src/gs-shell.c:941 src/gs-shell.c:945
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:988
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Не удалось загрузить обновления прошивки из %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:994
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Не удалось загрузить обновления из %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1001 src/gs-shell.c:1049
+msgid "Unable to download updates"
+msgstr "Не удалось загрузить обновления"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1007
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "Не удалось загрузить обновления: требуется подключение к Интернету"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1016
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Не удалось загрузить обновления из %s: недостаточно места на диске"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1021
+msgid "Unable to download updates: not enough disk space"
+msgstr "Не удалось загрузить обновления: недостаточно места на диске"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1028
+msgid "Unable to download updates: authentication was required"
+msgstr "Не удалось загрузить обновления: требуется аутентификация"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1033
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Не удалось загрузить обновления: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1038
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Не удалось загрузить обновления: недостаточно прав для установки"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1052
+msgid "Unable to get list of updates"
+msgstr "Не удалось получить список обновлений"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1088
+#, c-format
+msgid "Unable to purchase %s: authentication was required"
+msgstr "Не удалось купить %s: требовалась аутентификация"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1095
+#, c-format
+msgid "Unable to purchase %s: authentication was invalid"
+msgstr "Не удалось купить %s: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1102
+#, c-format
+msgid "Unable to purchase %s: no payment method setup"
+msgstr "Не удалось купить %s: не настроен способ оплаты"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1109
+#, c-format
+msgid "Unable to purchase %s: payment was declined"
+msgstr "Не удалось купить %s: оплата отклонена"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1116
+#, c-format
+msgid "Unable to purchase %s"
+msgstr "Не удалось купить %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1148
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Не удалось установить %s из-за сбоя загрузки из %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1154
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Не удалось установить %s из-за сбоя загрузки"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1167
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Не удалось установить %s, %s не доступен"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1173
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Не удалось установить %s (не поддерживается)"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1180
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Не удалось установить: необходимо подключение к Интернету, но оно недоступно"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1186
+msgid "Unable to install: the application has an invalid format"
+msgstr "Не удалось установить: приложение имеет недопустимый формат"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1191
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Не удалось установить %s: недостаточно места на диске"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1198
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Не удалось установить %s: аутентификация обязательна"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1205
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Не удалось установить %s: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1212
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Не удалось установить %s: недостаточно прав для установки"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1220
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Не удалось установить %s: требуется подключение к электросети"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1229
+#, c-format
+msgid "Unable to install %s"
+msgstr "Не удалось установить %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1272
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Не удалось обновить %s из %s из-за сбоя загрузки"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1279
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Не удалось обновить %s из-за сбоя загрузки"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Не удалось установить обновления из %s из-за сбоя загрузки"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1290
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Не удалось установить обновления из-за сбоя загрузки"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1296
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Не удалось обновить: необходимо подключение к Интернету, но оно недоступно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1306
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Не удалось обновить %s: недостаточно места на диске"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Не удалось установить обновления: недостаточно места на диске"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1321
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Не удалось обновить %s: требуется аутентификация"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1326
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Не удалось установить обновления: аутентификация обязательна"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1335
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Не удалось обновить %s: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1340
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Не удалось установить обновления: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1349
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Не удалось обновить %s: недостаточно прав для обновления"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1355
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Не удалось установить обновления: недостаточно прав для обновления "
+"программного обеспечения"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Не удалось обновить %s: требуется подключение к электросети"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1371
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Не удалось установить обновления: требуется подключение к электросети"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1382
+#, c-format
+msgid "Unable to update %s"
+msgstr "Не удалось обновить %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1385
+#, c-format
+msgid "Unable to install updates"
+msgstr "Не удалось установить обновления"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Не удалось обновить до %s из %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1433
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Не удалось обновить до %s из-за сбоя загрузки"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1442
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Не удалось обновиться на %s: необходимо подключение к Интернету, но оно "
+"недоступно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1451
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Не удалось обновить до %s: недостаточно места на диске"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1459
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Не удалось обновить до %s: требуется аутентификация"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1466
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Не удалось обновить до %s: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1473
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Не удалось обновить до %s: недостаточно прав для обновления"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1480
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Не удалось обновить до %s: требуется подключение к электросети"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Не удалось обновить до %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1527
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Не удалось удалить %s: требуется аутентификация"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1533
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Не удалось удалить %s: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1539
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Не удалось удалить %s: недостаточно прав для удаления"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Не удалось удалить %s: требуется подключение к электросети"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1558
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Не удалось удалить %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1601
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Не удалось запустить %s: приложение %s не установлено"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1608 src/gs-shell.c:1659 src/gs-shell.c:1700
+#: src/gs-shell.c:1748
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Недостаточно места на диске — освободите место и повторите попытку"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1619 src/gs-shell.c:1670 src/gs-shell.c:1711
+#: src/gs-shell.c:1778
+msgid "Sorry, something went wrong"
+msgstr "Извините, что-то пошло не так"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1651
+msgid "Failed to install file: not supported"
+msgstr "Не удалось установить файл: не поддерживается"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1655
+msgid "Failed to install file: authentication failed"
+msgstr "Сбой при установке файла: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1692
+msgid "Failed to install: not supported"
+msgstr "Не удалось установить: не поддерживается"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1696
+msgid "Failed to install: authentication failed"
+msgstr "Сбой при установке: ошибка аутентификации"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1742
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Не удалось связаться с %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1757
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Необходимо перезапустить %s, чтобы использовать новые плагины."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1762
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Необходимо перезапустить приложение, чтобы использовать новые плагины."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1769
+msgid "AC power is required"
+msgstr "Требуется подключение к электросети"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:256
+#, c-format
+msgid "Source: %s"
+msgstr "Источник: %s"
+
+#: src/gs-summary-tile.c:64
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Устанавливается)"
+
+#: src/gs-summary-tile.c:69
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Удаляется)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:92
+msgid "_Remove All"
+msgstr "У_далить все"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:186
+msgid "No update description available."
+msgstr "Описание обновления отсутствует."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:288
+#, c-format
+msgid "Installed on %s"
+msgstr "Установлено %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:308
+msgid "Installed Updates"
+msgstr "Установленные обновления"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:524
+msgid "Additions"
+msgstr "Дополнения"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Removals"
+msgstr "Удаления"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Updates"
+msgstr "Обновления"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Downgrades"
+msgstr "Понижение версий"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Обновления не были установлены на этой системе."
+
+#: src/gs-update-monitor.c:92
+msgid "Security Updates Pending"
+msgstr "Ожидается установка обновлений безопасности"
+
+#: src/gs-update-monitor.c:93
+msgid "It is recommended that you install important updates now"
+msgstr "Рекомендуется установить важные обновления прямо сейчас"
+
+#: src/gs-update-monitor.c:96
+msgid "Restart & Install"
+msgstr "Перезапустить и установить"
+
+#: src/gs-update-monitor.c:100
+msgid "Software Updates Available"
+msgstr "Доступны обновления программного обеспечения"
+
+#: src/gs-update-monitor.c:101
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Важные обновления ОС и приложений готовы к установке"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:104 src/gs-updates-section.c:323
+msgid "Not Now"
+msgstr "Не сейчас"
+
+#: src/gs-update-monitor.c:105
+msgid "View"
+msgstr "Просмотреть"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:203
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u приложение обновлено — требуется перезагрузка"
+msgstr[1] "%u приложения обновлено — требуется перезагрузка"
+msgstr[2] "%u приложений обновлено — требуется перезагрузка"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:209
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u приложение обновлено"
+msgstr[1] "%u приложения обновлено"
+msgstr[2] "%u приложений обновлено"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:220
+#, c-format
+msgid "%s has been updated."
+msgstr "%s был обновлён."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:223
+msgid "Please restart the application."
+msgstr "Перезапустите приложение."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:231
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s и %s были обновлены."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:237 src/gs-update-monitor.c:256
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u приложение требует перезапуска."
+msgstr[1] "%u приложения требует перезапуска."
+msgstr[2] "%u приложений требуют перезапуска."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Включая %s, %s и %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:479 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Обновления операционной системы недоступны"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:481
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Выполните обновление, чтобы продолжить получать обновления безопасности."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:536
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Для установки доступна новая версия %s"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:540
+msgid "Software Upgrade Available"
+msgstr "Доступно обновление на новую версию ОС"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:842
+msgid "Software Updates Failed"
+msgstr "Не удалось обновить программное обеспечение"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:844
+msgid "An important OS update failed to be installed."
+msgstr "Не удалось установить важное обновление ОС."
+
+#: src/gs-update-monitor.c:845
+msgid "Show Details"
+msgstr "Показать подробности"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:868
+msgid "System Upgrade Complete"
+msgstr "Обновление системы завершено"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:873
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Добро пожаловать в %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:879
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Установлено обновление программного обеспечения"
+msgstr[1] "Установлены обновления программного обеспечения"
+msgstr[2] "Установлены обновления программного обеспечения"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:883
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Установлено важное обновление ОС."
+msgstr[1] "Установлены важные обновления ОС."
+msgstr[2] "Установлены важные обновления ОС."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:894
+msgctxt "updates"
+msgid "Review"
+msgstr "Просмотреть"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:942
+msgid "Failed To Update"
+msgstr "Сбой обновления"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:948
+msgid "The system was already up to date."
+msgstr "Система уже обновлена."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:953
+msgid "The update was cancelled."
+msgstr "Обновление отменено."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:959
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Доступ в Интернет требуется, но не был доступен. Убедитесь, что у вас есть "
+"доступ в Интернет и попробуйте ещё раз."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:965
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Возникли проблемы безопасности с обновлением. Обратитесь к поставщику "
+"программного обеспечения для получения более подробной информации."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:971
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Недостаточно места на диске. Освободите место и повторите попытку."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:976
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"К сожалению обновление не удалось установить. Подождите других обновлений и "
+"повторите попытку. Если проблема не устраняется, обратитесь к поставщику "
+"программного обеспечения."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:225
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:228
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:234
+msgid "Yesterday, %R"
+msgstr "Вчера, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:238
+msgid "Yesterday, %l:%M %p"
+msgstr "Вчера, %l:%M %p"
+
+#: src/gs-updates-page.c:241
+msgid "Two days ago"
+msgstr "Два дня назад"
+
+#: src/gs-updates-page.c:243
+msgid "Three days ago"
+msgstr "Три дня назад"
+
+#: src/gs-updates-page.c:245
+msgid "Four days ago"
+msgstr "Четыре дня назад"
+
+#: src/gs-updates-page.c:247
+msgid "Five days ago"
+msgstr "Пять дней назад"
+
+#: src/gs-updates-page.c:249
+msgid "Six days ago"
+msgstr "Шесть дней назад"
+
+#: src/gs-updates-page.c:251
+msgid "One week ago"
+msgstr "Неделю назад"
+
+#: src/gs-updates-page.c:253
+msgid "Two weeks ago"
+msgstr "Две недели назад"
+
+# fix даты
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:257
+msgid "%e %B %Y"
+msgstr "%e %b., %Y"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:269
+msgid "Looking for new updates…"
+msgstr "Поиск обновлений…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:338
+msgid "Setting up updates…"
+msgstr "Подготовка обновлений…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339 src/gs-updates-page.c:346
+msgid "(This could take a while)"
+msgstr "(Это может занять некоторое время)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:453
+#, c-format
+msgid "Last checked: %s"
+msgstr "Последняя проверка: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:617
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s больше не поддерживается."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:622
+msgid "Your OS is no longer supported."
+msgstr "Ваша ОС больше не поддерживается."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:627
+msgid "This means that it does not receive security updates."
+msgstr ""
+"Это означает, что система больше не будет получать обновления безопасности."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:631
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Рекомендуется выполнить обновление до более новой версии."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:889
+msgid "Charges may apply"
+msgstr "Возможны дополнительные расходы"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:893
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Проверка обновлений при использовании мобильного широкополосного доступа "
+"может привести к перерасходу мобильного трафика и взиманию оператором "
+"дополнительной платы."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:897
+msgid "Check Anyway"
+msgstr "Всё равно проверить"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:913
+msgid "No Network"
+msgstr "Нет сети"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:917
+msgid "Internet access is required to check for updates."
+msgstr "Для проверки обновлений требуется подключение к Интернету."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1339
+msgid "Checking…"
+msgstr "Проверка…"
+
+#: src/gs-updates-page.c:1352
+msgid "Check for updates"
+msgstr "Проверить наличие обновлений"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Страница обновлений"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Программное обеспечение в актуальном состоянии"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Проверка обновлений при использовании мобильного широкополосного доступа "
+"может привести к перерасходу мобильного трафика и взиманию оператором "
+"дополнительной платы"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "В_се равно проверить"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Чтобы проверить обновления, подключитесь к Интернету"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Параметры с_ети"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Обновления выполняются автоматически"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:273
+msgid "Restart & Update"
+msgstr "Перезапустить и обновить"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:279
+msgid "Update All"
+msgstr "Обновить всё"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-section.c:319
+msgid "Updates have been installed"
+msgstr "Обновления были установлены"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-section.c:321
+msgid "A restart is required for them to take effect."
+msgstr "Необходима перезагрузка, чтобы изменения вступили в силу."
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:421
+msgid "Integrated Firmware"
+msgstr "Встроенная прошивка"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:425
+msgid "Requires Restart"
+msgstr "Требуется перезапуск"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:429
+msgid "Application Updates"
+msgstr "Обновления приложения"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:433
+msgid "Device Firmware"
+msgstr "Прошивка устройства"
+
+#: src/gs-updates-section.c:461 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Загрузить"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:71
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s уже доступна"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:81
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Загрузка %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:92
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s готова к установке"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Крупное обновление, с новыми возможностями и улучшенным дизайном."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Подробнее"
+
+#: src/gs-upgrade-banner.ui:85
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Рекомендуется создать резервную копию данных и файлов перед обновлением."
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr ""
+"Установка, удаление и обновление программного обеспечения на компьютере"
+
+# перевод по аналогии с ubuntu software - центр приложений ubuntu
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Обновления;Источники;Репозитории;Параметры;Установить;Удалить;Программа;"
+"Приложение;Магазин;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "Проектировка баннеров для центра приложений GNOME"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr "AppStream;Программа;Приложение;"
+
+#: plugins/core/gs-desktop-common.c:16
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:19
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:22
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Звуковые редакторы и рекордеры"
+
+#: plugins/core/gs-desktop-common.c:28
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Музыкальные проигрыватели"
+
+#: plugins/core/gs-desktop-common.c:37
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:40
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:43
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Отладчики"
+
+#: plugins/core/gs-desktop-common.c:46
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Среды разработки"
+
+#: plugins/core/gs-desktop-common.c:55
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:59
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:63
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Искусственный интеллект"
+
+#: plugins/core/gs-desktop-common.c:66
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Астрономия"
+
+#: plugins/core/gs-desktop-common.c:70
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Химия"
+
+#: plugins/core/gs-desktop-common.c:74
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Языки"
+
+#: plugins/core/gs-desktop-common.c:78
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Математика"
+
+#: plugins/core/gs-desktop-common.c:85
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Робототехника"
+
+#: plugins/core/gs-desktop-common.c:94
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:97
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:100
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Экшен"
+
+#: plugins/core/gs-desktop-common.c:103
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Приключения"
+
+#: plugins/core/gs-desktop-common.c:106
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Аркады"
+
+#: plugins/core/gs-desktop-common.c:109
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Блоки"
+
+#: plugins/core/gs-desktop-common.c:112
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Настольные"
+
+#: plugins/core/gs-desktop-common.c:115
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Карточные"
+
+#: plugins/core/gs-desktop-common.c:118
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Эмуляторы"
+
+#: plugins/core/gs-desktop-common.c:121
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Детские"
+
+#: plugins/core/gs-desktop-common.c:124
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Логические"
+
+#: plugins/core/gs-desktop-common.c:127
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Ролевые"
+
+#: plugins/core/gs-desktop-common.c:130
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Спортивные"
+
+#: plugins/core/gs-desktop-common.c:134
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Стратегии"
+
+#: plugins/core/gs-desktop-common.c:142
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:145
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Трёхмерная графика"
+
+#: plugins/core/gs-desktop-common.c:151
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Фотография"
+
+#: plugins/core/gs-desktop-common.c:154
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Сканирование"
+
+#: plugins/core/gs-desktop-common.c:157
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Векторная графика"
+
+#: plugins/core/gs-desktop-common.c:160
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Программы просмотра"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Календарь"
+
+#: plugins/core/gs-desktop-common.c:178
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Базы данных"
+
+#: plugins/core/gs-desktop-common.c:181
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Финансы"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Текстовые процессоры"
+
+#: plugins/core/gs-desktop-common.c:194
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Шрифты"
+
+#: plugins/core/gs-desktop-common.c:197
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Кодеки"
+
+#: plugins/core/gs-desktop-common.c:200
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Источники ввода"
+
+#: plugins/core/gs-desktop-common.c:203
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Языковые пакеты"
+
+#: plugins/core/gs-desktop-common.c:206
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Расширения GNOME Shell"
+
+# Приложению требуется …
+#: plugins/core/gs-desktop-common.c:209
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Локализация"
+
+#: plugins/core/gs-desktop-common.c:212
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Драйверы"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Обмен сообщениями"
+
+#: plugins/core/gs-desktop-common.c:233
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Новости"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Веб-браузеры"
+
+#: plugins/core/gs-desktop-common.c:245
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:248
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Текстовые редакторы"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Все"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Рекомендуемые"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Искусство"
+
+#: plugins/core/gs-desktop-common.c:268
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Биография"
+
+#: plugins/core/gs-desktop-common.c:271
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Комиксы"
+
+#: plugins/core/gs-desktop-common.c:274
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Фантастика"
+
+#: plugins/core/gs-desktop-common.c:277
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Здоровье"
+
+#: plugins/core/gs-desktop-common.c:280
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "История"
+
+#: plugins/core/gs-desktop-common.c:283
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Стиль жизни"
+
+#: plugins/core/gs-desktop-common.c:286
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Политика"
+
+#: plugins/core/gs-desktop-common.c:289
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Спорт"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:299
+msgid "Audio & Video"
+msgstr "Аудио и видео"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:302
+msgid "Developer Tools"
+msgstr "Инструменты разработки"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:305
+msgid "Education & Science"
+msgstr "Образование и наука"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:308
+msgid "Games"
+msgstr "Игры"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:311
+msgid "Graphics & Photography"
+msgstr "Графика и фотография"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:314
+msgid "Productivity"
+msgstr "Работа"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:320
+msgid "Communication & News"
+msgstr "Общение и новости"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:323
+msgid "Reference"
+msgstr "Справка"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:326
+msgid "Utilities"
+msgstr "Утилиты"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:55
+msgid "OS Updates"
+msgstr "Обновления ОС"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:60
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"Включает в себя улучшения производительности, стабильности и безопасности."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:41
+msgid "Downloading featured images…"
+msgstr "Загрузка изображений рекомендуемых приложений…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Поддержка веб-приложений"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Запуск популярных веб-приложений в браузере"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:138
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Общесистемный установщик AppStream центра приложений GNOME"
+
+#: plugins/external-appstream/gs-install-appstream.c:140
+msgid "Failed to parse command line arguments"
+msgstr "Не удалось разобрать аргументы командной строки"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:147
+msgid "You need to specify exactly one filename"
+msgstr "Необходимо указать только одно имя файла"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:154
+msgid "This program can only be used by the root user"
+msgstr "Эта программа может быть использована только администратором"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:162
+msgid "Failed to validate content type"
+msgstr "Не удалось проверить тип содержимого"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:169
+msgid "Failed to copy"
+msgstr "Сбой копирования"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:229
+msgid "Downloading extra metadata files…"
+msgstr "Загрузка дополнительных файлов с метаданными…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:192
+msgid "Downloading upgrade information…"
+msgstr "Загрузка сведений об обновлениях…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Обновите для получения последних возможностей и исправлений стабильности и "
+"производительности."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Поддержка Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak — это платформа для настольных приложений, запускаемых в Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:822
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Получение метаданных flatpak для %s…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:663
+msgid "Downloading firmware update signature…"
+msgstr "Загрузка подписей обновлений прошивок…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:704
+msgid "Downloading firmware update metadata…"
+msgstr "Загрузка метаданных обновлений прошивок…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Поддержка обновления прошивок"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Предоставляет поддержку обновления прошивок"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:195
+msgid "Downloading application ratings…"
+msgstr "Загрузка рейтинга приложений…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Поддержка оценок Open Desktop"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "Служба, предоставляющая отзывы пользователей о приложениях"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:391
+msgid "GNOME Shell Extensions Repository"
+msgstr "Репозиторий расширений GNOME Shell"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:777
+msgid "Downloading shell extension metadata…"
+msgstr "Загрузка метаданных расширений GNOME Shell…"
+
+#. TRANSLATORS: the one-line summary
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:871
+msgid "GNOME Shell Extension"
+msgstr "Расширение GNOME Shell"
+
+#: plugins/snap/gs-plugin-snap.c:67 plugins/snap/gs-plugin-snap.c:69
+msgid "To continue, you need to use an Ubuntu One account."
+msgstr "Для продолжения необходимо использование учётной записи Ubuntu One."
+
+#: plugins/snap/gs-plugin-snap.c:68
+msgid "To continue, you need to use your Ubuntu One account."
+msgstr ""
+"Для продолжения необходимо использование вашей учётной записи Ubuntu One."
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:224
+msgid "Snap Store"
+msgstr "Магазин Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Поддержка Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap — универсальный формат пакетов для Linux"
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Показывать профилировочную информацию для службы"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Для продолжения необходима авторизация в %s."
+
+#~ msgid "Email address"
+#~ msgstr "Электронная почта"
+
+#~ msgid "I have an account already"
+#~ msgstr "Учётная запись уже есть"
+
+#~ msgid "Password"
+#~ msgstr "Пароль"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Зарегистрировать новую учётную запись"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Я не помню свой пароль"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Входить автоматически"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Введите одноразовый PIN для двухфакторной аутентификации."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Авторизоваться"
+
+#~ msgid "_About"
+#~ msgstr "_О приложении"
+
+#~ msgid "_Quit"
+#~ msgstr "_Завершить"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Сведения о %s, а также параметры для получения кодеков, которые могут "
+#~ "воспроизводить этот формат, можно найти на веб-сайте."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Работа вашей учетной записи %s была приостановлена."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Установка программ недоступна, пока это не будет решено."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Для получения дополнительной информации посетите %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Не удалось обновить %s из %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Загрузка обновлений…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Загрузка страницы приложения…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Поддержка Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Мощная развлекательная платформа от Valve"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Перезапустить и установить"
+
+#~ msgid "U_pdate All"
+#~ msgstr "_Обновить всё"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Перезапустить и _установить"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Получение источника исполняемой библиотеки…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Загрузка обновлений прошивок…"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Список включённых ранее дополнительных источников"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Список источников, включённых ранее при установке сторонних приложений."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Показывать несвободное программное обеспечение в результатах поиска"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Список несвободных источников, которые могут быть включены"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Встроенные взаимодействия между игроками без использования чата"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Предоставляет доступ к дополнительному программному обеспечению, включая "
+#~ "веб-браузеры и игры."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Включить источник с несвободным ПО?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Приложения или модули не установлены; другое программное обеспечение все "
+#~ "же может быть установлено"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Как правило, имеет ограничения на использование и доступ к исходному коду."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Источники несвободного ПО"
+
+#~ msgid "Remove Source"
+#~ msgstr "Удалить источник"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Источники программного обеспечения могут быть загружены из Интернета. Они "
+#~ "дают вам доступ к дополнительному программному обеспечению, которое не "
+#~ "предусмотрено %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "При удалении источника будут удалены все приложения, установленные из "
+#~ "этого источника."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Нет установленных приложений из этого источника"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Установлено из этого источника"
+
+#~ msgid "Source Details"
+#~ msgstr "Информация об источнике"
+
+#~ msgid "Last Checked"
+#~ msgstr "Последняя проверка"
+
+#~ msgid "Added"
+#~ msgstr "Добавлено"
+
+#~ msgid "Website"
+#~ msgstr "Веб-сайт"
+
+#~ msgid "Limba Support"
+#~ msgstr "Поддержка Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba предоставляет разработчикам простой способ создания пакетов с "
+#~ "программным обеспечением"
+
+#~ msgid "page1"
+#~ msgstr "page1"
+
+#~ msgid "page2"
+#~ msgstr "page2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Все"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Рекомендуемые"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..040ce45
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,5730 @@
+# Slovak translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Dušan Kazik <prescott66@gmail.com>, 2013, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-17 12:08+0000\n"
+"PO-Revision-Date: 2020-10-01 09:22+0200\n"
+"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
+"Language-Team: slovenčina <>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Softvér prostredia GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Správca aplikácií prostredia GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Aplikácia Softvér vám umožňuje nájsť a nainštalovať nové aplikácie a "
+"systémové rozšírenia a odstrániť existujúce nainštalované aplikácie."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Softvér prostredia GNOME predstavuje obľúbené aplikácie a aplikácie "
+"základnej výbavy s užitočnými popismi a snímkami obrazovky danej aplikácie. "
+"Aplikácie sa dajú nájsť buď prezeraním zoznamu kategórií alebo pomocou "
+"vyhľadávača. Tiež umožňuje aktualizovať váš systém za pomoci aktualizácií "
+"nevyužívajúcich pripojenie k sieti."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel s náhľadom"
+
+# GtkLabel
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel s podrobnosťami"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel s nainštalovaným softvérom"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel s aktualizáciami"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Podrobnosti o aktualizácii"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1524
+msgid "The GNOME Project"
+msgstr "Projekt GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Inštalovať súbor appstream do systémového umiestnenia"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Inštalovanie súboru appstream do systémového umiestnenia"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Zoznam kompatibilných projektov"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Toto je zoznam kompatibilných projektov, ktoré by sa mali zobraziť ako "
+"GNOME, KDE a XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Či sa majú spravovať aktualizácie a inovácie v aplikácii Softvér prostredia "
+"GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Automaticky prevziať a inštalovať aktualizácie"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Ak je táto voľba povolená, aplikácia Softvér prostredia GNOME automaticky "
+"prevezme aktualizácie softvéru na pozadí a nainštaluje tie, ktoré nevyžadujú "
+"reštart."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Či sa má automaticky vykonávať obnova s obmedzeným pripojením"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Či je úplne prvé spustenie aplikácie Softvér prostredia GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Zobraziť hodnotenia reprezentované hviezdami pri aplikáciách"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Neslobodné aplikácie zobrazia pred inštaláciou dialógové okno s upozornením"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Pri inštalácii neslobodných aplikácií, môže byť zobrazené dialógové okno s "
+"upozornením. Táto voľba ovláda potlačenie tohto dialógového okna."
+
+# cmdline description
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Zoznam obľúbených aplikácií"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Zoznam aplikácií, ktoré sa majú použiť, nahrádzajúc aplikácie určené "
+"systémom."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Časová značka poslednej kontroly aktualizácií"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Časová značka posledného oznámenia o aktualizácii"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Časová značka prvej bezpečnostnej aktualizácie, zmazanej po aktualizácii"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Časová značka poslednej aktualizácie"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Server, ktorý sa použije pre recenzie aplikácií"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Minimálne body karmy recenzií"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Recenzie s karmou nižšou ako toto číslo nebudú zobrazené."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr ""
+"Zoznam oficiálnych repozitárov, ktoré by nemali byť považované za repozitáre "
+"od tretích strán"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Zoznam oficiálnych repozitárov, ktoré by mali byť považované za slobodný "
+"softvér"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "URL licencie, ktorá sa použije, keď je softvér považovaný za slobodný"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Inštalovať sady aplikácií pre všetkých používateľov v systéme, kde je to "
+"možné"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Umožniť prístup k dialógovému oknu repozitárov softvéru"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ponúknuť aktualizácie predčasných vydaní"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Zobraziť niektoré prvky používateľského rozhrania, ktoré informujú "
+"používateľa o tom, že aplikácia nie je slobodná"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Zobraziť otázku pri inštalácii repozitárov neslobodného softvéru"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://sk.wikipedia.org/wiki/Propriet%C3%A1rny_softv%C3%A9r'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI, ktorý objasňuje neslobodný a uzavretý softvér"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+
+#: data/org.gnome.software.gschema.xml:136
+#, fuzzy
+#| msgid "Install an appstream file into a system location"
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Inštalovať súbor appstream do systémového umiestnenia"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Povoliť repozitár s rozšíreniami Shellu prostredia GNOME"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Inštalácia softvéru"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Inštaluje vybraný softvér do systému"
+
+# GtkButton
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Vybrať všetko"
+
+# GtkMenuItem
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Zrušiť výber"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Softvérové repozitáre"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Predvoľby aktualizácií"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Softvér"
+
+# GtkButton
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Prejsť späť"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Prehliadať"
+
+# GtkToggleButton
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "Na_inštalovaný"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Aktualizácie"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Vyhľadať"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Zdroj"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Softvérové repozitáre"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Preskúmať disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Nastavenia siete"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Reštartovať teraz"
+
+# DK:cmd desc
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Viac informácií"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatické aktualizácie pozastavené"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Z_istiť viac"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Miestny súbor"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Balík"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Čaká na inštaláciu"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Nainštalovaný"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Inštaluje sa"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Odstraňuje sa"
+
+# cmdline description
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Režim spustenia: buď „updates“ (aktualizácie), „updated“ (aktualizované), "
+"„installed“ (nainštalované) alebo „overview“ (prehľad)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "REŽIM"
+
+# cmdline description
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Vyhľadá aplikácie"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "HĽADANIE"
+
+# cmdline description
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Zobrazí podrobnosti o aplikácii (použitím identifikátora aplikácie)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "IDENTIFIKÁTOR"
+
+# cmdline description
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Zobrazí podrobnosti o aplikácii (použitím názvu balíka)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "NÁZOV_BALÍKU"
+
+# cmdline description
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Nainštaluje aplikáciu (použitím identifikátora aplikácie)"
+
+# DK:cmd desc
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Otvorí miestny súbor balíka"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "NÁZOV_SÚBORU"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Očakávaný druh interakcie pre túto akciu: buď „none“ (žiadna), "
+"„notify“ (oznámiť), alebo „full“ (úplná)"
+
+# DK:cmd desc
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Vypíše podrobné ladiace informácie"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Nainštaluje akékoľvek čakajúce aktualizácie na pozadí"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Zobrazí predvoľby aktualizácií"
+
+# cmd line desc
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Ukončí spustenú inštanciu"
+
+# DK:cmd desc
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Budú sa preferovať miestne zdroje súborov pre AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Zobrazí číslo verzie"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Dušan Kazik <prescott66@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "O aplikácii Softvér"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Pohodlný spôsob správy softvéru vo vašom systéme."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Prepáčte, pre túto aplikáciu nie sú žiadne podrobnosti."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Navštíviť webovú stránku"
+
+# GtkButton
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Inštalovať…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Zrušiť"
+
+# GtkButton
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Inštalovať"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Aktualizovať"
+
+# GtkButton
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Odstrániť"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Zariadenie nie je možné používať počas aktualizácie."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Požaduje dodatočné oprávnenia"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr ""
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Vyžaduje sa prihlásenie"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Zrušiť"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Prihlásenie"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Po_užívateľ"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Heslo"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Ostatné"
+
+# GtkToggleButton
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+# GtkLabel
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Softvér základnej výbavy kategórie %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Hodnotenie"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Názov"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Zobraziť"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Ponuka filtra podkategórií"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Usporiadať"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Ponuka usporiadania podkategórií"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Prosím, zadajte číslo v rozsahu od 1 do %u: "
+
+# cmdline description
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Zvoľte aplikáciu:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Aktualizácie operačného systému boli nainštalované"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nedávno nainštalované aktualizácie sú dostupné na kontrolu"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "Softvér %s je teraz nainštalovaný"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Je potrebný reštart na uplatnenie zmien aplikácií."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Aplikácia je pripravená na používanie."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Reštartovať"
+
+# DK: akcia po nainstalovani softveru
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Spustiť"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Inštalovať softvér tretích strán?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Povoliť softvérový repozitár tretích strán?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s nie je <a href=\"https://sk.wikipedia.org/wiki/"
+"Free_and_Open_Source_Software\">slobodný softvér s otvoreným zdrojom</a> a "
+"je poskytovaný zdrojom „%s“."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s je poskytovaný zdrojom „%s“."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Pre pokračovanie v inštalácii musí byť tento repozitár so softvérom povolený."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Inštalácia alebo používanie softvéru %s môže byť v niektorých krajinách "
+"protizákonná."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Inštalácia alebo používanie tohto kodeku môže byť v niektorých krajinách "
+"protizákonná."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Neupozorňovať ma znovu"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Povoliť a inštalovať"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Podrobné chybové správy od správcu balíkov:"
+
+# GtkLabel
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Podrobnosti"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Aktualizácie boli nainštalované"
+msgstr[1] "Aktualizácia bola nainštalovaná"
+msgstr[2] "Aktualizácie boli nainštalované"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Je potrebný reštart na uplatnenie zmien aplikácií."
+msgstr[1] "Je potrebný reštart na uplatnenie zmien aplikácie."
+msgstr[2] "Je potrebný reštart na uplatnenie zmien aplikácií."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Teraz nie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Žiadne kreslené násilie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Kreslené postavy v nebezpečných situáciách"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Kreslené postavy v agresívnom konflikte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Vyobrazené násilie zahŕňajúce kreslené postavy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Žiadne fiktívne násilie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Postavy v nebezpečných situáciach ľahko odlíšiteľných od reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Postavy v agresívnom konflikte ľahko odlíšiteľnom od reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Vyobrazené násilie ľahko odlíšiteľné od reality"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Žiadne realistické násilie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Mierne skutočné postavy v nebezpečných situáciách"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Vyobrazenia skutočných postáv v agresívnom konflikte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Vyobrazené násilie zahŕňajúce skutočné postavy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Žiadne krviprelievanie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Neskutočné krviprelievanie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Skutočné krviprelievanie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Vyobrazenia krviprelievania a zohavených častí tiel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Žiadne sexuálne násilie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Znásilnenie alebo iné násilné sexuálne správanie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Žiadne odkazy na alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Odkazy na alkoholické nápoje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Požívanie alkoholických nápojov"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Žiadne odkazy na zakázané drogy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Odkazy na zakázané drogy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Požívanie zakázaných drog"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Bez odkazov na tabakové výrobky"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Odkazy na tabakové výrobky"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Požívanie tabakových výrobkov"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Žiadna nahota akéhokoľvek druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Občasná umelecká nahota"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Dlhotrvajúca nahota"
+
+# cmdline description
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Bez sexuálnych odkazov alebo vyobrazení"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokačné odkazy alebo vyobrazenia"
+
+# cmdline description
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Sexuálne odkazy alebo vyobrazenia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Vyobrazené sexuálne správanie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Žiadne zneuctenie akéhokoľvek druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Mierne alebo časte zneuctenie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Stredne silné zneuctenie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Silné alebo časté zneuctenie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Žiadny nevhodný humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Drsný humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgárny alebo kúpeľňový humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Sexuálny humor alebo humor pre dospelých"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Žiadny diskriminačný jazyk akéhokoľvek druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Odpor voči špecifickej skupine ľudí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminácia s následkami emočnej ujmy"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Jednoznačná diskriminácia založená na pohlaví, sexuálnej orientácii, rase "
+"alebo náboženstve"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Žiadne reklamy akéhokoľvek druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Umiestnenie výrobku"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Jednoznačné odkazy na produkty špecifických značiek alebo označené obchodnou "
+"známkou"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr ""
+"Používatelia sú vyzývaní na nákup špecifických položiek v skutočnom svete"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Žiadne hazardovanie akéhokoľvek druhu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Hazardovanie na náhodných podujatiach použitím žetónov alebo kreditov"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Hazardovanie s fiktívnymi peniazmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Hazardovanie so skutočnými peniazmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Žiadne možnosti míňania peňazí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Používatelia sú vyzývaní na darovanie skutočných peňazí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Možnosť míňania skutočných peňazí v aplikácii"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Žiadne možnosti textovej komunikácie s ostatnými používateľmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interakcie medzi používateľmi bez možnosti rozhovoru"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Moderované rozhovory medzi používateľmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nekontrolovateľné rozhovory medzi používateľmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Žiadne možnosti hovoriť s ostatnými používateľmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nekontrolovateľné zvukové alebo video rozhovory medzi používateľmi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Žiadne zdieľanie používateľských mien alebo emailových adries zo sociálnych "
+"sietí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Zdieľanie používateľských mien alebo emailových adries zo sociálnych sietí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Žiadne zdieľanie informácií o používateľoch s tretími stranami"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Kontroluje sa najnovšia verzia aplikácie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Sprístupnenie diagnostických údajov, ktoré neumožnia ostatným identifikovať "
+"používateľa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Zdieľanie informácií, ktoré umožňujú ostatným identifikovať používateľa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Žiadne zdieľanie fyzickej lokality ostatným používateľom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Zdieľanie fyzickej lokality ostatným používateľom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Žiadne odkazy na homosexualitu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Nepriame odkazy na homosexualitu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Bozkávanie ľudí rovnakého pohlavia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Žiadne odkazy na prostitúciu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Nepriame odkazy na prostitúciu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Priame odkazy na prostitúciu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafické vyobrazenia aktu prostitúcie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Žiadne odkazy na cudzoložstvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Nepriame odkazy na cudzoložstvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Priame odkazy na cudzoložstvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafické vyobrazenia aktu cudzoložstva"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+#, fuzzy
+#| msgid "No sexual violence"
+msgid "No sexualized characters"
+msgstr "Žiadne sexuálne násilie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Žiadne odkazy na znesvätenie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Vyobrazenia alebo odkazy na historické znesvätenie"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Vyobrazenia ľudského znesvätenia modernej doby"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafické vyobrazenia znesvätenia modernej doby"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Bez viditeľných pozostatkov mŕtvych ľudí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Viditeľné pozostatky mŕtvych ľudí"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr ""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafické vyobrazenia znesvätenia ľudských tiel"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Žiadne odkazy na otroctvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Vyobrazenia alebo odkazy na historické otroctvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Vyobrazenia otroctva modernej doby"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafické vyobrazenie otroctva modernej doby"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Všeobecné"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "VŠETCI"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Iba dospelí"
+
+# GtkLabel
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Dospievajúci"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Mladiství"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Každý s vekom nad 10 rokov"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Každý"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Skoré detstvo"
+
+# cmdline description
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Aplikácia"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "Softvér %s požaduje dodatočnú podporu formátu súborov."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Požadujú sa dodatočné typy MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "Softvér %s požaduje dodatočné písma."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Požadujú sa dodatočné písma"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "Softvér %s požaduje dodatočné multimediálne kodeky."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Požadujú sa dodatočné multimediálne kodeky"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "Softvér %s požaduje dodatočné ovládače tlačiarne."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Požadujú sa dodatočné ovládače tlačiarne"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "Softvér %s požaduje dodatočné balíky."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Požadujú sa dodatočné balíky"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Nájsť softvér"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Odstraňuje sa…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Čakajúca inštalácia…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Čakajúca aktualizácia…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Pripravuje sa…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Táto aplikácia sa môže používať iba ak je aktívne internetové pripojenie."
+
+# GtkButton
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Inštalovať"
+
+# GtkButton
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Inštalovať…"
+
+# GtkButton
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Spustiť"
+
+# GtkButton
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "O_dstrániť"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Sieť"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Môže komunikovať prostredníctvom siete"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Systémové služby"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Môže pristupovať k službám zbernice D-Bus na systémovej zbernici"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Služby relácie"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Môže pristupovať k službám zbernice D-Bus na relačnej zbernici"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Zariadenia"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Môže pristupovať k súborom systémových zariadení"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Domovský priečinok"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Môže zobrazovať, upravovať a vytvárať súbory"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Môže zobrazovať súbory"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Súborový systém"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Priečinok Stiahnuté"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Nastavenia"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Môže zobrazovať a meniť akékoľvek nastavenia"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Pôvodný zobrazovací systém"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Používa starý, nezabezpečený zobrazovací systém"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+#, fuzzy
+#| msgid "Sandboxed"
+msgid "Sandbox escape"
+msgstr "V izolovanom priestore"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Môže uniknúť z izolovaného priestoru a obísť akékoľvek iné obmedzenia"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Aplikácia je úplne izolovaná."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Nie je možné zistiť, ku ktorým častiam systému môže táto aplikácia "
+"pristupovať. Je to obvyklé pri starších aplikáciách."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Neznáma"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nikdy"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Neznámy"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Nízke"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Stredné"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Vysoké"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Neznáma"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Ak chcete napísať recenziu, musíte byť pripojený k internetu"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Nie je možné nájsť „%s“"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Verejná doména"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://sk.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Slobodný softvér"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Používatelia sú viazaní týmito licenciami:"
+msgstr[1] "Používatelia sú viazaní touto licenciou:"
+msgstr[2] "Používatelia sú viazaní týmito licenciami:"
+
+# DK:cmd desc
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Viac informácií"
+
+# GtkLabel
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Stránka s podrobnosťami"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Preberá sa"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Aktualizovať"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Pridať odkaz"
+
+# GtkButton
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "O_dstrániť odkaz"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Snímka obrazovky nebola poskytnutá"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Zahrnutý softvérový repozitár"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"V tejto aplikácii je zahrnutý repozitár so softvérom, ktorý poskytuje "
+"aktualizácie spolu s prístupom k ďalšiemu softvéru."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Žiadny zahrnutý softvérový repozitár"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"V tejto aplikácii nie je zahrnutý repozitár so softvérom. Preto nebude "
+"aktualizovaná na nové verzie."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "Softvér je už poskytovaný vašou distribúciou a nemal by byť nahradený."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Softvérový repozitár identifikovaný"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Pridaním tohto softvérového repozitára získate prístup k dodatočnému "
+"softvéru a aktualizáciám."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Používajte iba softvérové repozitáre, ktorým dôverujete."
+
+# GtkButton
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Webová stránka"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Prispieť"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Lokalizovaný vo vašom jazyku"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentácia"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Aktivita vydaní"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Integrácia do systému"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "V izolovanom priestore"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanál"
+
+# GtkLabel
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Verzia"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Hodnotenie veku"
+
+# GtkLabel
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Oprávnenia"
+
+# GtkLabel
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Aktualizované"
+
+# GtkLabel
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategória"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Veľkosť po nainštalovaní"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Veľkosť preberania"
+
+# GtkLabel
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Vývojár"
+
+# GtkLabel
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licencia"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Slobodná"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Uzavretá"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Doplnky"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Vybraté doplnky budú nainštalované spolu s aplikáciou."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Recenzie"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Napísať recenziu"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Zo_braziť viac"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"To znamená, že softvér sa môže slobodne používať, kopírovať, šíriť, študovať "
+"a upravovať."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Softvér s uzavretým zdrojom"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"To znamená, že softvér vlastní jednotlivec alebo spoločnosť. Často sú s jeho "
+"používaním spojené obmedzenia a jeho zdrojový kód nebýva obvykle "
+"sprístupnený."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Neznáma licencia softvéru"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Licenčné podmienky používania tohto softvéru nie sú známe."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Aplikácia bola takto ohodnotená, pretože obsahuje:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Pre toto hodnotenie neboli dostupné žiadne podrobnosti."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " a "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Dostupné písma pre skripty jazyka %s"
+msgstr[1] "Dostupné písma pre skript jazyka %s"
+msgstr[2] "Dostupné písma pre skripty jazyka %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Dostupný softvér pre kodeky %s"
+msgstr[1] "Dostupný softvér pre kodek %s"
+msgstr[2] "Dostupný softvér pre kodeky %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Nepodarilo sa nájsť požadovaný softvér"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Kodek %s sa nenašiel"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "na webovej stránke"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nie sú dostupné žiadne aplikácie, ktoré poskytujú súbor %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Informácie o kodeku %s, ako aj o možnostiach získania chýbajúcich aplikácií "
+"môžete nájsť %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nie sú dostupné žiadne aplikácie s podporou pre %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "Doplnok %s nie je dostupný."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Informácie o kodeku %s, ako aj o možnostiach získania aplikácie s podporou "
+"tohto formátu môžete nájsť %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Nie sú dostupné žiadne písma s podporou skriptov v jazyku %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Informácie o kodeku %s, ako aj o možnostiach získania dodatočných písiem "
+"môžete nájsť %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Nie sú dostupné žiadne doplnky s kodekmi pre formát %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Informácie o kodeku %s, ako aj o možnostiach získania kodeku na prehranie "
+"tohto formátu môžete nájsť %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nie sú dostupné žiadne zdroje prostredia Plasma s podporou %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Informácie o kodeku %s, ako aj o možnostiach získania dodatočných zdrojov "
+"prostredia Plasma môžete nájsť %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nie sú dostupné žiadne ovládače tlačiarne pre %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Informácie o kodeku %s, ako aj o možnostiach získania ovládača s podporou "
+"tejto tlačiarne môžete nájsť %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "túto webovú stránku"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Bohužiaľ, nepodarilo sa nájsť kodeky %s, ktoré ste hľadali. Prosím, pre viac "
+"informácií navštívte %s."
+msgstr[1] ""
+"Bohužiaľ, nepodarilo sa nájsť kodek %s, ktorý ste hľadali. Prosím, pre viac "
+"informácií navštívte %s."
+msgstr[2] ""
+"Bohužiaľ, nepodarilo sa nájsť kodeky %s, ktoré ste hľadali. Prosím, pre viac "
+"informácií navštívte %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Zlyhalo nájdenie akýchkoľvek výsledkov hľadania"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Formát súboru %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Stránka s kodekmi"
+
+# DK:window title
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Vitajte"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Vitajte v programe Softvér"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Program Softvér vám umožní z jedného miesta nainštalovať všetok softvér, "
+"ktorý potrebujete. Prezrite si naše odporúčania, prehliadajte kategórie, "
+"alebo vyhľadajte aplikácie, ktoré chcete."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Poďme nakupovať"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Odstránený"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Nainštalovaný"
+
+# GtkLabel
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Aktualizovaný"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Neznáma"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %B %Y"
+
+# GtkDialog title
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "História"
+
+# cmdline description
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systémové aplikácie"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Nainštalovaný balík"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Prebieha preberanie katalógu so softvérom"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Načítava sa stránka"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Spúšťa sa…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Aktuálna sieť je obmedzená. Obmedzené pripojenia majú obmedzené dáta a s tým "
+"sú spojené poplatky. Kvôli úspore dát boli preto automatické aktualizácie "
+"pozastavené.\n"
+"\n"
+"Automatické aktualizácie budú pokračovať, keď bude dostupná neobmedzená "
+"sieť. Dovtedy je možné inštalovať aktualizácie ručne.\n"
+"\n"
+"Alebo ak bolo obmedzenie aktuálnej siete nesprávne identifikované, môže byť "
+"toto nastavenie zmenené."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Otvoriť nastavenia _siete"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Strana s moderovaním"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Neexistujú žiadne recenzie na moderovanie"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "systém"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "používateľ"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Vetva"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Formát"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Inštalácia"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Viac…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Odporúčané aplikácie na prácu so zvukom a videom"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Odporúčané hry"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Odporúčané grafické aplikácie"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Odporúčané aplikácie na zvýšenie produktivity"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Prístup k dodatočnému softvéru z vybraných zdrojov tretích strán."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Niektoré z týchto softvérov sú uzavreté, a preto majú obmedzenia v "
+"používaní, zdieľaní a prístupe k zdrojovému kódu."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Zistiť viac…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Povoliť"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Strana s náhľadom"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Povoliť softvérové repozitáre tretích strán?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Predchádzajúca"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Ďalšia"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Výber tvorcov"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nedávne vydania"
+
+# GtkLabel
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategórie"
+
+# GtkLabel
+# PM: čo sú údaje aplikácie? nemá tu byť údaje o aplikácií?
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Nenašli sa žiadne údaje aplikácie"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Pripravuje sa aplikácia %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Naozaj chcete odstrániť repozitár %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Všetky aplikácia z repozitára %s budú odstránené a pre ich opätovné použitie "
+"budete musieť repozitár znova nainštalovať."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Naozaj chcete odstrániť %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Softvér %s bude odstránený a pre opätovné použitie ho budete musieť znova "
+"nainštalovať."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Nainštalovaný)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Aktualizácia predvolieb"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatické aktualizácie"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatické aktualizácie sú zakázané, keď ste pripojený na mobilné alebo "
+"obmedzené pripojenia."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Oznámenia o automatickej aktualizácii"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Zobraziť oznámenia, po automatickej inštalácii aktualizácií."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Niektorý z nainštalovaného softvéru nie je kompatibilný so systémom %s. Ak "
+"budete pokračovať, nasledovný softvér bude automaticky odstránený počas "
+"aktualizácie:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Nekompatibilný softvér"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Pokračovať"
+
+# * https://bugzilla.gnome.org/show_bug.cgi?id=726990
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Bolo nainštalovaných %u aplikácií"
+msgstr[1] "Bola nainštalovaná %u aplikácia"
+msgstr[2] "Boli nainštalované %u aplikácie"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Bolo nainštalovaných %u doplnkov"
+msgstr[1] "Bol nainštalovaný %u doplnok"
+msgstr[2] "Boli nainštalované %u doplnky"
+
+# cmdline description
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u aplikácií"
+msgstr[1] "%u aplikácia"
+msgstr[2] "%u aplikácie"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u doplnkov"
+msgstr[1] "%u doplnok"
+msgstr[2] "%u doplnky"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s a %s nainštalovaných"
+msgstr[1] "%s a %s nainštalovaný"
+msgstr[2] "%s a %s nainštalované"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Odstrániť repozitár „%s“?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Zakázať repozitár „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Softvér nainštalovaný z tohto repozitára už nebude dostávať aktualizácie, "
+"vrátane bezpečnostných opráv."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Zakázať"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operačný systém"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Tieto repozitáre dodávajú predvolený softvér poskytovaný distribúciou %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Repozitáre tretích strán"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Žiadne dodatočné repozitáre"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Povoliť"
+
+# GtkButton
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "O_dstrániť…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Zakázať…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Povoľuje sa"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Zakazuje sa"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Povolený"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Zakázaný"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Nemám ho rád"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Nepáči sa mi"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Je v poriadku"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Páči sa mi"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Zbožňujem ho"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Prosím, venujte viac času napísaniu recenzie"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Prosím, zvoľte hodnotenie pomocou hviezdičiek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Súhrn je príliš krátky"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Súhrn je príliš dlhý"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Popis je príliš krátky"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Popis je príliš dlhý"
+
+# dialog title
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Odoslanie recenzie"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "O_doslať"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Súhrn"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Napíšte krátky súhrn vašej recenzie, napríklad: „Výborná aplikácia, môžem "
+"odporučiť“."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Recenzia"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Čo si myslíte o aplikácii? Skúste napísať dôvody vašej recenzie."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Zistite aké údaje sú odosielané v našich <a href=\"https://odrs.gnome.org/"
+"privacy\">zásadách o súkromí</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "hodnotení celkom"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "Môžete nahlásiť nevhodné, nemravné, alebo diskriminujúce správanie."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Po nahlásení bude recenzia skrytá, až kým nebude skontrolovaná "
+"administrátorom."
+
+# dialog title
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Nahlásiť recenziu?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Nahlásiť"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Bola táto recenzia pre vás užitočná?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Áno"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nie"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Nestojí to za reč"
+
+# GtkButton
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Nahlásiť…"
+
+# GtkButton
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Odstrániť…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Snímka obrazovky sa nenašla"
+
+# title
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Zlyhalo načítanie obrázka"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Veľkosť snímky obrazovky sa nenašla"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Nepodarilo sa vytvoriť vyrovnávacia pamäť"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Snímka obrazovky nie je platná"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Snímka obrazovky nie je dostupná"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Snímka obrazovky"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u ďalších výsledkov"
+msgstr[1] "%u ďalší výsledok"
+msgstr[2] "%u ďalšie výsledky"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Strana s vyhľadávaním"
+
+# GtkLabel
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nenašla sa žiadna aplikácia"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Nie je možné prevziať aktualizácie firmvéru z %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Nie je možné prevziať aktualizácie z %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Nie je možné prevziať aktualizácie"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Nie je možné prevziať aktualizácie: bolo potrebné internetové pripojenie, "
+"ale nebolo dostupné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Nie je možné prevziať aktualizácie z %s: nedostatok miesta na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Nie je možné prevziať aktualizácie: nedostatok miesta na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr ""
+"Nie je možné prevziať aktualizácie: bolo požadované overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Nie je možné prevziať aktualizácie: overenie totožnosti nebolo platné"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Nie je možné prevziať aktualizácie: nemáte dostatočné práva na inštaláciu "
+"softvéru"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Nie je možné získať zoznam aktualizácií"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Nie je možné nainštalovať aplikáciu %s, pretože preberanie z lokality %s "
+"zlyhalo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Nie je možné nainštalovať aplikáciu %s, pretože preberanie zlyhalo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Nie je možné nainštalovať aplikáciu %s, pretože rozhranie %s nie je dostupné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Nie je možné nainštalovať aplikáciu %s, pretože nie je podporovaná"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Nie je možné vykonať inštaláciu: bolo potrebné internetové pripojenie, ale "
+"nebolo dostupné"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Nie je možné vykonať inštaláciu: aplikácia je v neplatnom formáte"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Nie je možné nainštalovať aplikáciu %s: nedostatok miesta na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr ""
+"Nie je možné nainštalovať aplikáciu %s: bolo požadované overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr ""
+"Nie je možné nainštalovať aplikáciu %s: overenie totožnosti nebolo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Nie je možné nainštalovať aplikáciu %s: nemáte dostatočné práva na "
+"inštaláciu softvéru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Nie je možné nainštalovať aplikáciu %s: vyžaduje sa napájanie zo siete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr ""
+"Nie je možné nainštalovať aplikáciu %s: Úroveň nabitia batérie je príliš "
+"nízka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Nie je možné nainštalovať aplikáciu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Nie je možné aktualizovať aplikáciu %s zo zdroja %s, pretože zlyhalo "
+"preberanie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Nie je možné aktualizovať aplikáciu %s, pretože zlyhalo preberanie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Nie je možné nainštalovať aktualizácie zo zdroja %s, pretože preberanie "
+"zlyhalo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Nie je možné nainštalovať aktualizácie, pretože preberanie zlyhalo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Nie je možné vykonať aktualizáciu: bolo potrebné internetové pripojenie, ale "
+"nebolo dostupné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Nie je možné aktualizovať aplikáciu %s: nedostatok miesta na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Nie je možné nainštalovať aktualizácie: nedostatok miesta na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr ""
+"Nie je možné aktualizovať aplikáciu %s: bolo požadované overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr ""
+"Nie je možné nainštalovať aktualizácie: bolo požadované overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr ""
+"Nie je možné aktualizovať aplikáciu %s: overenie totožnosti nebolo platné"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr ""
+"Nie je možné nainštalovať aktualizácie: overenie totožnosti nebolo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Nie je možné aktualizovať aplikáciu %s: nemáte dostatočné práva na "
+"aktualizáciu softvéru"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Nie je možné nainštalovať aktualizácie: nemáte dostatočné práva na "
+"aktualizáciu softvéru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Nie je možné aktualizovať aplikáciu %s: vyžaduje sa napájanie zo siete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Nie je možné nainštalovať aktualizácie: vyžaduje sa napájanie zo siete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr ""
+"Nie je možné aktualizovať aplikáciu %s: Úroveň nabitia batérie je príliš "
+"nízka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Nie je možné nainštalovať aktualizácie: Úroveň nabitia batérie je príliš "
+"nízka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Nie je možné aktualizovať aplikáciu %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Nie je možné nainštalovať aktualizácie"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Nie je možné aktualizovať na systém %s z lokality %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nie je možné aktualizovať na %s, pretože preberanie zlyhalo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nie je možné vykonať aktualizáciu na systém %s: bolo potrebné internetové "
+"pripojenie, ale nebolo dostupné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Nie je aktualizovať na systém %s: nedostatok miesta na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+"Nie je možné aktualizovať na systém %s: bolo požadované overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+"Nie je možné aktualizovať na systém %s: overenie totožnosti nebolo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Nie je možné aktualizovať na systém %s: nemáte dostatočné práva na "
+"aktualizáciu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Nie je možné aktualizovať na systém %s: vyžaduje sa napájanie zo siete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Nie je možné vykonať aktualizáciu na systém %s: Úroveň nabitia batérie je "
+"príliš nízka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Nie je možné aktualizovať na systém %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+"Nie je možné odstrániť aplikáciu %s: bolo požadované overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Nie je možné odstrániť aplikáciu %s: overenie totožnosti nebolo platné"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Nie je možné odstrániť aplikáciu %s: nemáte dostatočné práva na odstránenie "
+"softvéru"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Nie je možné odstrániť aplikáciu %s: vyžaduje sa napájanie zo siete"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr ""
+"Nie je možné odstrániť aplikáciu %s: Úroveň nabitia batérie je príliš nízka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Nie je možné odstrániť aplikáciu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Nie je možné spustiť aplikáciu %s: rozhranie %s nie je nainštalované"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Nedostatok miesta na disku — uvoľnite nejaké miesto a skúste to znovu"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Prepáčte, niekde nastala chyba"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Zlyhala inštalácia súboru: bez podpory"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Zlyhala inštalácia súboru: zlyhalo overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Zlyhala inštalácia: bez podpory"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Zlyhala inštalácia: zlyhalo overenie totožnosti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Nie je možné kontaktovať lokalitu %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr ""
+"Pre používanie nových zásuvných modulov musí byť aplikácia %s reštartovaná."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Pre používanie nových zásuvných modulov musí byť aplikácia reštartovaná."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Požaduje sa napájanie zo siete"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Úroveň nabitia batérie je príliš nízka"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Zdroj: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Inštaluje sa)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Odstraňuje sa)"
+
+# GtkButton
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "O_dstrániť všetky"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Nie je poskytnutý žiadny popis aktualizácie."
+
+# DK: %s=dátum
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Nainštalované dňa %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Nainštalované aktualizácie"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Doplnky"
+
+# GtkButton
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Na odstránenie"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Aktualizácie"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Zníženia verzií"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "V tomto počítači neboli nainštalované žiadne aktualizácie."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Čakajúce bezpečnostné aktualizácie"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Odporúča sa, aby ste bezpečnostné aktualizácie nainštalovali ihneď"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Reštartovať a inštalovať"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Sú dostupné aktualizácie softvéru"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Dôležité aktualizácie operačného systému a aplikácií sú pripravené na "
+"inštaláciu"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Zobraziť"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u aktualizovaných aplikácií — Potrebný reštart"
+msgstr[1] "%u aktualizovaná aplikácia — Potrebný reštart"
+msgstr[2] "%u aktualizované aplikácie — Potrebný reštart"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u aktualizovaných aplikácií"
+msgstr[1] "%u aktualizovaná aplikácia"
+msgstr[2] "%u aktualizované aplikácie"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "Aplikácia %s bola aktualizovaná."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Prosím, reštartujte aplikáciu."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "Aplikácie %s a %s boli aktualizované."
+
+# * https://bugzilla.gnome.org/show_bug.cgi?id=726990
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u aplikácií vyžaduje reštart."
+msgstr[1] "%u aplikácia vyžaduje reštart."
+msgstr[2] "%u aplikácie vyžadujú reštart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Zahŕňa %s, %s a %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Aktualizácie operačného systému nie sú dostupné"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr ""
+"Vykonaním aktualizácie budete naďalej prijímať bezpečnostné aktualizácie."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Nová verzia systému %s je dostupná na inštaláciu"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Je dostupná aktualizácia softvéru"
+
+# title
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Zlyhanie aktualizácií softvéru"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Zlyhala inštalácia dôležitej aktualizácie operačného systému."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Zobraziť podrobnosti"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Aktualizácia systému dokončená"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Vitajte v distribúcii %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Aktualizácie softvéru boli nainštalované"
+msgstr[1] "Aktualizácia softvéru bola nainštalovaná"
+msgstr[2] "Aktualizácie softvéru boli nainštalované"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Dôležité aktualizácie operačného systému boli nainštalované."
+msgstr[1] "Dôležitá aktualizácia operačného systému bola nainštalovaná."
+msgstr[2] "Dôležité aktualizácie operačného systému boli nainštalované."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Prezrieť"
+
+# title
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Zlyhanie aktualizácie"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Systém bol už aktuálny."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Aktualizácia bola zrušená."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Bolo požadované internetové pripojenie, ale nebolo dostupné. Prosím, uistite "
+"sa, že máte prístup na internet a skúste to znovu."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Vyskytla sa bezpečnostná chyba s aktualizáciou. Prosím, pre viac informácií "
+"sa poraďte s vaším poskytovateľom softvéru."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Nebol dostupný dostatok priestoru na disku. Prosím, uvoľnite nejaký priestor "
+"a skúste to znovu."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Ľutujeme: zlyhala inštalácia aktualizácie. Prosím, počkajte na ďalšiu "
+"aktualizáciu a skúste to znovu. Ak problém pretrváva, kontaktujte vášho "
+"poskytovateľa softvéru."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Včera o %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Včera o %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Pred dvoma dňami"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Pred troma dňami"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Pred štyrmi dňami"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Pred piatimi dňami"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Pred šiestimi dňami"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Pred týždňom"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Pred dvoma týždňami"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Vyhľadávajú sa nové aktualizácie…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Nastavujú sa aktualizácie…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Môže to chvíľu trvať)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Posledná kontrola: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Systém %s %s už viac nie je podporovaný."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Váš operačný systém už viac nie je podporovaný."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "To znamená, že už neprijíma bezpečnostné aktualizácie."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Odporúča sa, aby ste vykonali aktualizáciu na novšiu verziu."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Možné zvýšenie poplatkov"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Zisťovanie dostupných aktualizácií pomocou mobilného širokopásmového "
+"pripojenia vám môže zvýšiť poplatky."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Napriek _tomu skontrolovať"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Žiadne pripojenie k sieti"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Na zistenie dostupnosti aktualizácií je potrebný prístup k internetu."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Kontroluje sa…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Zistiť dostupnosť aktualizácií"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Strana s aktualizáciami"
+
+# GtkLabel
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Softvér je aktuálny"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Zisťovanie dostupných aktualizácií pomocou mobilného širokopásmového "
+"pripojenia vám môže zvýšiť poplatky"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Napriek tomu _zistiť"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Zistenie dostupných aplikácií vyžaduje funkčné pripojenie"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Nastavenia siete"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Aktualizácie sú spravované automaticky"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Reštartovať a aktualizovať"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Aktualizovať všetko"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrovaný firmvér"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Vyžaduje sa reštart"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Aktualizácie aplikácií"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Firmvér zariadenia"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Prevziať"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Odporúča sa zálohovať vaše údaje a súbory pred aktualizáciou."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Reštartovať teraz"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Aktualizácie budú použité po reštarte počítača."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Systém %s %s je dostupný"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Čaká sa na prevzatie distribúcie %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Preberá sa systém %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "Systém %s %s je pripravený na inštaláciu"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Dôležitá aktualizácia s novými funkciami a vylepšeniami."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Zistiť viac"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Pridáva, odstraňuje alebo aktualizuje softvér vo vašom počítači"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Aktualizácie;Inovácia;Zdroje;Repozitáre;Nastavenia;Inštalácia;Inštalovanie;"
+"Odinštalovanie;Program;Softvér;Aplikácia;Obchod;"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Tvorba a úprava zvuku"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Prehrávače hudby"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Nástroje na ladenie"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Integrované vývojové prostredia (IDE)"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Umelá inteligencia"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronómia"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Chémia"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Jazyky"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Akčné"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Dobrodružné"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkádové"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokové"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Stolové"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kartové"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulátory"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Detské"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logické"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rolové"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Šport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategické"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografia"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skenovanie"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorová grafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Prehliadače"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendár"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Databáza"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Financie"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Textový procesor"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Písma"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeky"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Zdroje vstupu"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Jazykové balíky"
+
+# cmdline description
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalizácia"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Ovládače hardvéru"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Rozhovor"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Novinky"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webové prehliadače"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Textové editory"
+
+# GtkToggleButton
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Všetko"
+
+# GtkLabel
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Softvér základnej výbavy"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Umenie"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografia"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Komiks"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fikcia"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Zdravie"
+
+# GtkDialog title
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "História"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Životný štýl"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Šport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Zvuk a video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Nástroje pre vývojárov"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Vzdelávanie a veda"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Hry"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika a fotografia"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivita"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Komunikácia a novinky"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referencia"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Pomôcky"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Aktualizácie operačného systému"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Zahŕňa vylepšenia výkonu, stability a zvýšenia bezpečnosti."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Preberajú sa obrázky kategórie základnej výbavy…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Systém Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Aktualizácia systému Endless OS prinášajúca nové funkcie a opravy."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr ""
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr ""
+
+# title
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Zlyhalo analyzovanie parametrov príkazového riadku"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Musíte určiť presne jeden názov súboru"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Tento program môže byť použitý iba správcom"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Zlyhalo schválenie typu obsahu"
+
+# title
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kopírovanie zlyhalo"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Preberajú sa súbory metaúdajov navyše…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Preberajú sa informácie o aktualizácii…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Aktualizácia prinášajúca najnovšie funkcie, vylepšenia výkonu a stability."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Podpora nástroja Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak je architektúra počítačových aplikácií pre systém Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Získavajú sa metaúdaje nástroja flatpak pre repozitár %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Aktualizácia zariadenia %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Aktualizácia systému %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Aktualizácia vstavaného ovládača %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Aktualizácia ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr ""
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr ""
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Aktualizácia ovládača %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Aktualizácia ovládača zariadenia Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Aktualizácia mikrokódu procesora %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Aktualizácia konfigurácie %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Preberá sa podpis aktualizácie firmvéru…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Preberajú sa metaúdaje aktualizácie firmvéru…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Podpora aktualizácie firmvéru"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Poskytuje podporu aktualizácií firmvéru"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Preberajú sa hodnotenia aplikácií…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Podpora služby Open Desktop Ratings"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS je služba poskytujúca používateľské recenzie aplikácií"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Obchod Snap Store"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Podpora balíkov Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap je univerzálnym balíkom pre systém Linux"
+
+#~ msgid "About %s"
+#~ msgstr "O aplikácii %s"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Nastavenia rozšírenia"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Rozšírenia sú použité na vlastné riziko. Ak pozorujete akékoľvek problémy "
+#~ "so systémom, odporúča sa zakázať ich."
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Rozšírenia pre Shell"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Repozitár s rozšíreniami pre Shell prostredia GNOME"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Preberajú sa metaúdaje rozšírenia pre Shell…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Rozšírenie pre Shell prostredia GNOME"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Zobraziť používateľské rozhranie správy priečinkov"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+# GtkToggleButton
+#~ msgid "_All"
+#~ msgstr "_Všetko"
+
+#~ msgid "Folder Name"
+#~ msgstr "Názov priečinka"
+
+#~ msgid "_Add"
+#~ msgstr "_Pridať"
+
+# GsAppFolderDialog title, GtkLabel
+#~ msgid "Add to Application Folder"
+#~ msgstr "Pridanie do priečinka s aplikáciami"
+
+# cmdline description
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Zobrazí profilovacie informácie pre službu"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "Pre pokračovanie sa musíte prihlásiť."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Pre pokračovanie sa musíte prihlásiť do služby %s."
+
+#~ msgid "Email address"
+#~ msgstr "Emailová adresa"
+
+#~ msgid "I have an account already"
+#~ msgstr "Už mám účet"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Chcem si teraz zaregistrovať účet"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Zabudol som heslo"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Prihlásiť ma automaticky nabudúce"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Zadajte váš jednorázový pin pre dvojfaktorové overenie totožnosti."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+# headerbar title
+#~ msgid "Authenticate"
+#~ msgstr "Overenie totožnosti"
+
+#~ msgid "Continue"
+#~ msgstr "Pokračovať"
+
+# GtkLabel
+#~ msgid "Top Rated"
+#~ msgstr "Najlepšie hodnotené"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "Overovanie CSS prebehlo v poriadku!"
+
+# title
+#~ msgid "Failed to load file"
+#~ msgstr "Zlyhalo načítanie súboru"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Neuložené zmeny"
+
+#~ msgid "Merge documents"
+#~ msgstr "Zlúčiť dokumenty"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Zahodiť zmeny"
+
+# dialog title
+#~ msgid "Open AppStream File"
+#~ msgstr "Otvorenie súboru AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Otvoriť"
+
+#~ msgid "_Save"
+#~ msgstr "_Uložiť"
+
+# title
+#~ msgid "Failed to save file"
+#~ msgstr "Zlyhalo uloženie súboru"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Návrh pútača aplikácie %s bol odstránený."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Návrh pútača bol odstránený."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Zoznam aplikácií obsahuje neuložené zmeny."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Použije rozsiahle zaznamenávanie"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Nástroj na návrh pútačov aplikácie Softvér prostredia GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Žiadne návrhy"
+
+#~ msgid "Error message here"
+#~ msgstr "Sem patrí chybová hláška"
+
+#~ msgid "App ID"
+#~ msgstr "ID aplikácie"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Výber tvorcov"
+
+# GtkLabel
+#~ msgid "Category Featured"
+#~ msgstr "Kategória Softvér základnej výbavy"
+
+#~ msgid "Undo"
+#~ msgstr "Vrátiť späť"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Nástroj na návrh pútačov"
+
+#~ msgid "New Banner"
+#~ msgstr "Nový pútač"
+
+#~ msgid "Import from file"
+#~ msgstr "Importovať so súboru"
+
+#~ msgid "Export to file"
+#~ msgstr "Exportovať do súboru"
+
+#~ msgid "Delete Design"
+#~ msgstr "Odstrániť návrh"
+
+# GtkLabel
+#~ msgid "Featured App"
+#~ msgstr "Aplikácia základnej výbavy"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Aktualizácia operačného systému"
+
+#~ msgid "Spacing"
+#~ msgstr "Rozostupy"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Veľkosť priestoru medzi potomkami"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Kliknutím na položky ich vyberiete"
+
+# GtkButton
+#~ msgid "Select"
+#~ msgstr "Vybrať"
+
+# GsAppFolderDialog title, GtkLabel
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Pridať do priečinka…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "P_resunuť do priečinka…"
+
+# title
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Prebieha načítavanie katalógu softvéru"
+
+#~ msgid "_About"
+#~ msgstr "_O programe"
+
+#~ msgid "_Quit"
+#~ msgstr "_Ukončiť"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Naozaj chcete kúpiť aplikáciu %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr ""
+#~ "Aplikácia %s bude nainštalovaná a bude vám účtovaný poplatok vo výške %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Kúpiť"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Informácie o formáte %s, ako aj o možnostiach získania kodeku na "
+#~ "prehranie tohto formátu, môžete nájsť na webovej stránke."
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2f A$"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2f C$"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2f CN¥"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f €"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f £"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f ¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2f NZ$"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f ₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2f US$"
+
+#~ msgid "%s %f"
+#~ msgstr "%2$f %1$s"
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Kým sa nevyrieši tento problém, nebude možné inštalovať softvér."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Pre viac informácií navštívte adresu %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Nie je možné aktualizovať aplikáciu %s z lokality %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Preberajú sa nové aktualizácie…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Reštartovať a aktualizovať"
+
+#~ msgid "U_pdate All"
+#~ msgstr "A_ktualizovať všetko"
+
+# GtkButton
+#~ msgid "Restart & _Install"
+#~ msgstr "Reštartovať a _inštalovať"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr ""
+#~ "Navrhuje pútače aplikácií základnej výbavy pre Softvér prostredia GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;Softvér;App;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Podpora webových aplikácií"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Spúšťanie obľúbených webových aplikácií v prehliadači"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Získava sa zdroj prostredia…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Preberá sa aktualizácia firmvéru…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Podpora nástroja Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba umožňuje vývojárom jednoduché vytvárania softvérových balíkov"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Preberá sa stránka s aplikáciami…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Podpora služby Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Platforma špičkovej zábavy od spoločnosti Valve"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Zoznam zdrojov navyše, ktoré boli predošle povolené"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Zoznam zdrojov, ktoré boli predošle povolené pri inštalovaní aplikácií "
+#~ "tretích strán."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Zobraziť neslobodný softvér vo výsledkoch vyhľadávaní"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Zoznam neslobodných zdrojov, ktoré môžu byť voliteľne povolené"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Prednastavené herné interakcie medzi hráčmi bez možnosti rozhovoru"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Poskytuje prístup k dodatočnému softvéru, vrátane webových prehliadačov a "
+#~ "hier."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Povoliť zdroje uzavretého softvéru?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Nie sú nainštalované žiadne aplikácie alebo doplnky. Ostatný softvér ale "
+#~ "stále môže byť nainštalovaný."
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Obvykle obsahuje obmedzenia spojené s používaním a prístupom k zdrojovému "
+#~ "kódu."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Zdroje uzavretého softvéru"
+
+# GtkButton
+#~ msgid "Remove Source"
+#~ msgstr "Odstrániť zdroj"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Zdroje softvéru môžu byť prevzaté z internetu. Umožnia vám pristupovať k "
+#~ "dodatočnému softvéru, ktorý nie je poskytovaný operačným systémom %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Odstránením zdroja bude tiež odstránený všetok softvér, ktorý ste z neho "
+#~ "nainštalovali."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "\"Z tohto zdroja nie je nainštalovaný žiadny softvér"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Nainštalovaný z tohto zdroja"
+
+#~ msgid "Source Details"
+#~ msgstr "Podrobnosti o zdroji"
+
+#~ msgid "Last Checked"
+#~ msgstr "Posledná kontrola"
+
+#~ msgid "Added"
+#~ msgstr "Pridaný"
+
+# GtkButton
+#~ msgid "Website"
+#~ msgstr "Webová stránka"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "„%s“ [%s]"
+
+# GtkToggleButton
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+#~ msgid "Total"
+#~ msgstr "Celkom"
+
+# GtkButton
+#~ msgid "_Install All"
+#~ msgstr "_Inštalovať všetky"
+
+#~ msgid "Other Updates"
+#~ msgstr "Ostatné aktualizácie"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Inštalácia softvéru %s zlyhala."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Odstránenie softvéru %s zlyhalo."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Prosím, uistite sa, že máte prístup na internet a skúste to znovu."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Prosím, uvoľnite nejaký priestor a skúste to znovu."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Ak problém pretrváva, kontaktuje vášho poskytovateľa softvéru."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Žiadne"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+# GtkToggleButton
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Všetko"
+
+# GtkLabel
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Softvér základnej výbavy"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronómia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chémia"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgid "Science"
+#~ msgstr "Veda"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Zdroje softvéru vám umožňujú získať dodatočný softvér."
+
+#~ msgid "unknown"
+#~ msgstr "neznámy"
+
+#~ msgid "3rd party"
+#~ msgstr "od tretej strany"
+
+#~ msgid "web app"
+#~ msgstr "webová aplikácia"
+
+#~ msgid "nonfree"
+#~ msgstr "neslobodný"
+
+#~ msgid "shell extension"
+#~ msgstr "rozšírenie pre shell"
+
+#~ msgid "_Installing"
+#~ msgstr "_Inštaluje sa"
+
+#~ msgid "_Removing"
+#~ msgstr "O_dstraňuje sa"
+
+#~ msgid " or "
+#~ msgstr " alebo "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Neznáma"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Tento softvér pochádza od tretích strán."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Tento softvér pochádza od tretích strán a môže obsahovať neslobodné "
+#~ "súčasti."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Tento softvér môže obsahovať neslobodné súčasti."
+
+#~ msgid "non-free"
+#~ msgstr "neslobodný"
+
+#~ msgid "One Star"
+#~ msgstr "Jedna hviezdička"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dve hviezdičky"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tri hviezdičky"
+
+#~ msgid "Four Stars"
+#~ msgstr "Štyri hviezdičky"
+
+#~ msgid "Five Stars"
+#~ msgstr "Päť hviezdičiek"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Vypočítava sa…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Neznáma"
+
+# GtkButton
+#~ msgid "_History"
+#~ msgstr "_História"
+
+# GtkLabel
+#~ msgid "Size"
+#~ msgstr "Veľkosť"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Odporúčané kancelárske aplikácie"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Nenašli sa žiadne údaje toku AppStream"
+
+#~ msgid "Audio"
+#~ msgstr "Audio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Upravovanie"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Databázy"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Napaľovanie diskov"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatérske rádio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Zmiešavače"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Hudba"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Nahrávače"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sekvencéry"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Rádiá"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Zostavovanie"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Databázy"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "Integrované prostredia IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilovanie"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Preklad"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Vývoj webu"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biológia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Počítačová veda"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Konštrukcia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Vizualizácia údajov"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektrina"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Strojníctvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geológia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geoveda"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "História"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanita"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Spracovanie obrázkov"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatúra"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Mapy"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Hudba"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerická analýza"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Súbežné spracovanie údajov"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fyzika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualita"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Strieľacie"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulačné"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Športové"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Rozpoznávanie znakov OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publikovanie"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rastrová grafika"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Spojenie vytáčaním"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Email"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Informačný kanál"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Prenos súborov"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatérske rádio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Priama komunikácia"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Klienti IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Monitorovanie"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Vzdialený prístup"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonovanie"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Vývoj webu"
+
+#~ msgid "Office"
+#~ msgstr "Kancelária"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Graf"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Správa kontaktov"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Slovník"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Email"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Plávajúci graf"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografia"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Prezentácia"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Správa projektov"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publikovanie"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Tabuľkový zošit"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Prehliadač"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Umenie"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Umelá inteligencia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronómia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biológia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Chémia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Počítačová veda"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Konštrukcia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Vizualizácia údajov"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektrina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Strojníctvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geológia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geoveda"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "História"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanita"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Spracovanie obrázkov"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Jazyky"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatúra"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Mapy"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Zdravotníctvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerická analýza"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Súbežné spracovanie údajov"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fyzika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualita"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Šport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulátor"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Správca súborov"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Súborové nástroje"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Monitorovanie"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Zabezpečenie"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulátor terminálu"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Uľahčenie prístupu"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Archivácia"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Kalkulačka"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Hodiny"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Komprimácia"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Súborové nástroje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Mapy"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Spiritualita"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Nástroje na telefonovanie"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Upravovanie"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Databáza"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Napaľovanie diskov"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Prehrávače"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Nahrávače"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "Televízia"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Predchádzajúca aktualizácia nebola dokončená."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Aktualizáciu sa nepodarilo nainštalovať. Toto často býva spôsobené "
+#~ "samotnou aktualizáciou. Prosím, počkajte na ďalšiu aktualizáciu a skúste "
+#~ "to znovu."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Iba internetové aplikácie"
+
+# GsAppFolderDialog title, GtkLabel
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Vstúpi do servisného režimu GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Aktualizácia nebola správnym spôsobom podpísaná."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Aktualizáciu sa nepodarilo dokončiť."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Bola vyžiadaná aktualizácia bez prístupu k sieti, no žiadne balíky "
+#~ "nevyžadujú aktualizáciu."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Na jednotke nebol dostatok miesta."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Zlyhala správna inštalácia aktualizácie."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Aktualizácia bez prístupu k sieti zlyhala neočakávaným spôsobom."
+
+#~ msgid "No sources found."
+#~ msgstr "Nenašli sa žiadne zdroje"
+
+#~ msgid "OK"
+#~ msgstr "OK"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr ""
+#~ "V závislosti od krajiny kde žijete, inštalácia tohto softvéru môže viesť "
+#~ "k možnému trestnému stíhaniu."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr ""
+#~ "Ak nie ste si o tomto istý, mali by ste vyhľadať právne poradenstvo."
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "Chcete ho povoliť?"
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..9d36aa4
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,5819 @@
+# Slovenian translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Matej Urbančič <mateju@svn.gnome.org>, 2013–2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-20 11:46+0000\n"
+"PO-Revision-Date: 2020-09-01 17:49+0200\n"
+"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
+"Language-Team: Slovenščina <gnome-si@googlegroups.com>\n"
+"Language: sl_SI\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 2.3\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Programska oprema GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Upravljalnik programov za GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Program omogoča iskanje, nameščanje in odstranjevanje novih programov in "
+"sistemskih razširitev."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Program za nameščanje programske opreme namizja GNOME omogoča ogled in "
+"iskanje paketov preko kratkih opisov, zaslonskih posnetkov vmesnika in "
+"drugih možnosti. Pakete je mogoče iskati tudi z brskanjem po seznamu "
+"kategorij. Obenem omogoča tudi posodabljanje sistema s posodobitvami brez "
+"povezave."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Okno predogleda"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Okno podrobnosti"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Okno nameščenih programov"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Okno posodobitev"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Podrobnosti posodobitve"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Projekt GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Namesti pretočno datoteko na sistemsko mesto"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Poteka nameščanje pretočne datoteke na sistemsko mesto"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Seznam skladnih projektov"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"To je seznam skladnih projektov, ki so na voljo, kot so GNOME, KDE in XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Ali naj bodo posodobitve upravljane s privzetim programom GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Če možnost ni omogočena, program skrije okno posodobitev in ne izvaja "
+"samodejnih posodobitev, niti ne obvešča o novostih."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Samodejno prejmi in namesti posodobitve"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Izbrana možnost omogoča, da bodo programske posodobitve v ozadju samodejno "
+"prejete in nato nameščene, če posodobitev ne zahteva ponovnega zagona "
+"sistema."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Obvesti uporabnika o posodobitvah programske opreme"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Izbrana možnost omogoča, da program obvesti uporabnika o posodobitvah, ko ta "
+"na napravi ni bil dejaven."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Ali naj bodo posodobitve samodejno osvežene tudi na plačljivih povezavah"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Če je možnost omogočena, program v ozadju samodejno osveži seznam "
+"programskih paketov, neglede na vrsto vzpostavljene povezave (prejemanje "
+"metapodatkov, posodobitev in drugih virov lahko vpliva na stroške "
+"uporabnika)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Ali je to prvi zagon programa za upravljanje programske opreme GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Ob programu pokaži tudi oceno z zvedzicami"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtrira programe na osnovi razvojne veje na oddaljenem gostitelju"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Pred namestitvijo se pri lastniški programski opremi pokaže opozorilo"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Pred namestitvijo lastniške programske opreme se pokaže opozorilo. "
+"Nastavitev določa način prikazovanja sporočila."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Seznam priljubljene programske opreme"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Seznam programov za uporabo, ki prepišejo privzeta določila sistema."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Časovni žig zadnjega preverjanja za posodobitve"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Časovni žig zadnjega preverjanja za posodobitve"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Časovni žig prve varnostne posodobitve, ki je bila rešena po namestitvi"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Časovni žig zadnje posodobitve"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "Zadnji časovni žig, ko je bil sistem povezan v omrežje in posodobljen"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Čas za overjanje v sekundah, po katerem program preveri veljavnost prikazane "
+"zaslonske slike"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Izbor večje vrednosti pomeni manjše število preverjanj podatkov na "
+"oddaljenih strežnikih, hkrati pa pomeni tudi odzivnost zaslonskih posnetkov, "
+"ki jih vidi uporabnik. Vrednost 0 pomeni, da program nikoli ne preveri, ali "
+"je slika že v predpomnilniku na strežniku."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Strežnik za objavo mnenj o programski opremi"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Najmanjša ocena karme za objavljanje mnenj"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr ""
+"Mnenja uporabnikov, s karmo, manjšo od te vrednosti, ne bodo uporabljena."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Seznam uradnih virov, opredeljenih kot programska oprema tretjih oseb"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Seznam uradnih virov, opredeljenih kot prosta programska oprema"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Naslov URL dovoljenja, ki mora biti navedeno, da se program opredeli kot "
+"prosto programsko opremo"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Namesti programe za vse uporabnike v sistemu, kjer je to mogoče"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Dovoli dostop do nastavitev programskih virov"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Ponudi tudi posodobitve za predobjave"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Pokaži vidne oznake, ki kažejo, da programska oprema ni brezplačna"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Pokaži potrditveno okno pred nameščanjem plačljive programske opreme"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Pokaže nameščeno velikost programa na seznamu nameščenih programov"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://en.wikipedia.org/wiki/Proprietary_software'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr ""
+"Naslov URI, prek katerega je dostop do opredelitev plačljive in lastniške "
+"programske opreme"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Seznam naslovov URL, ki kažejo na datoteke programov, ki bodo prejete v mapo "
+"app-info"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Namesti datoteke AppStream na sistemsko mesto za vse uporabnike"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Omogoči skladišče razširitev za lupino GNOME"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Niz, ki shranjuje podatke ID programa gnome-online-account za prijavo"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Nameščanje programske opreme"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Namesti izbrano programsko opremo v sistem"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Izberi vse"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Odstrani izbor"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Viri programske opreme"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Nastavitve posodabljanja"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programska oprema"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Pojdi nazaj"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "Razišči"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Nameščeno"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Posodobitve"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Iskanje"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Vir"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Viri programske opreme"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Preuči nosilec"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Omrežne nastavitve"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Ponovno zaženi"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Več podrobnosti"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Samodejno posodabljanje je v premoru"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "_Več o tem"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Krajevna datoteka"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Na čakanju"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Nameščeno"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Nameščanje"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Odstranjevanje"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Začetni zagon je lahko prikaz »posodobitev«, »posodobljenih«, »nameščenih« "
+"ali »pregleda«."
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "NAČIN"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Poišči program"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "POIŠČI"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Pokaži podrobnosti programa (prek številke ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Pokaži podrobnosti programa (prek imena paketa)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "IME PAKETA"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Namesti programa (prek številke ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Odpri krajevno namestitveno datoteko"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "IMEDATOTEKE"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Vrsta odziva, ki je pričakovan za to dejanje: možnost iso »brez«, »obvesti« "
+"in »polno«"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Pokaži podroben izpis razhroščevanja"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Namesti vse posodobitve v ozadju"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Pokaži nastavitve posodabljanja"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Končaj izvajanje zagnanega primerka"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Prednostno išči krajevne datotečne vire"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Pokaži podatke različice"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Matej Urbančič <mateju@svn.gnome.org>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "O programu Programska oprema"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Enostaven način upravljanja s programsko opremo sistema."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Za ta program podrobnosti niso na voljo."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Obišči spletišče"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Namesti …"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Prekliči"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Namesti"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Posodobi"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Odstrani"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Naprave med posodabljanjem ni mogoče uporabljati."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Zahteva dodatna dovoljenja"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Prijavno ime in geslo za %s (območje %s)."
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Zahtevana je prijava"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Prekliči"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Prijava"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Uporabnik"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Geslo"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Drugo"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Vse"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Novosti v ospredju"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Novosti %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Ocena"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Ime"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Pokaži"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Meni filtrov podkategorij"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Razvrsti"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Meni razvrščanja podkategorij"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Vpišite število med 1 in %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Izbor programa:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Posodobitve sistema so nameščene"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nedavno nameščene posodobitve so pripravljene za pregled."
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s je zdaj nameščen"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Za uveljavitev sprememb je treba sejo ponovno zagnati"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Program je pripravljen za uporabo."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Ponoven zagon"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Zaženi"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Ali naj bo nameščena programska oprema tretjih virov?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Ali naj bodo omogočeni tudi programski viri tretjih oseb?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s ni <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">prosta programska oprema</a>, ponuja pa jo ponudnik “%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "Program %s ponuja ponudnik “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Ta programski vir mora biti omogočen za nadaljevanje namestitve."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Lahko ni dovoljeno nameščanje ali uporaba %s v nekaterih državah."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Lahko ni dovoljeno nameščanje ali uporaba teh kodekov v nekaterih državah."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Ne opozori več"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Omogoči in namesti"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Podrobne napake upravljalnika paketov so:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Podrobnosti"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Posodobitve so nameščene"
+msgstr[1] "Posodobitev je nameščena"
+msgstr[2] "Posodobitvi sta nameščeni"
+msgstr[3] "Posodobitve so nameščene"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Spremembe ne bodo uveljavljene do ponovnega zagona"
+msgstr[1] "Spremembe ne bodo uveljavljene do ponovnega zagona"
+msgstr[2] "Spremembe ne bodo uveljavljene do ponovnega zagona"
+msgstr[3] "Spremembe ne bodo uveljavljene do ponovnega zagona"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Ne zdaj"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Brez nasilja v risani seriji"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Risani liki v nevarnih situacijah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Risani liki v nasilnih konfliktih"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Nazorno nasilje med risanimi liki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Brez fantazijskega nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Liki v nevarnih situacijah, ki jih je mogoče zlahka razlikovati od realnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Liki v nasilnem konfliktu, ki ga je mogoče zlahka razlikovati od realnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Nazorno nasilje, ki ga je mogoče zlahka razlikovati od realnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Brez realističnega nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Napol realistični liki v nevarnih situacijah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Prikazovanje realističnih likov v nasilnih konfliktih"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Nazorno nasilje, ki vključuje realistične like"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Brez prelivanja krvi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Nerealistično prelivanje krvi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistično prelivanje krvi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Prikazi prelivanja krvi in pohabljanje delov telesa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Brez spolnega nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Posilstvo ali drugo nasilno vedenje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Brez omenjanja alkoholnih pijač"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Omenjanje alkoholnih pijač"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Uporaba alkoholnih pijač"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Ni omenjanja prepovedanih drog"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Omenjanje prepovedanih drog"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Uporaba prepovedanih drog"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Ni sklicevanja na tobačne izdelke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Sklici na tobačne izdelke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Uporaba tobačnih izdelkov"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Brez vsakršne golote"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Krajše umetniško ponazorjena spolnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Daljši prikazi golote"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Ni omenjanja in prikazov spolne narave"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Izzivalno obnašanje ali upodobljanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Prikrit spolni akt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Nazorno seksualno vedenje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Brez kakršnegakoli preklinjanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Nežno ali redko preklinjanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Zmerno preklinjanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Izrazito ali pogosto preklinjanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Brez neustreznega humorja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Situacijski humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgaren humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Humor za odrasle"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Brez vsakršnega diskriminatornega namigovanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativen odnos do specifične skupine ljudi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminatorno delovanje, ki lahko sproži močan čustven odziv"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Izrecna diskriminacija na podlagi spola, spolnosti, rase ali vere"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Brez kakršnegakoli oglaševanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Opredelitev izdelka"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Izrecna sklicevanja na določene blagovne znamke ali izdelke"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Uporabnike spodbuja k nakupu določenih fizičnih predmetov"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Brez kakršnegakoli igranja na srečo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+"Igranje na srečo na naključnih dogodkih z uporabo žetonov ali kreditnih točk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Igranje na srečo s namišljenim denarjem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Igranje na srečo s pravim denarjem"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Možnost uporabe pravega denarja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Uporabnike spodbuja k donaciji uradnih denarnih valut"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Možnost uporabe pravega denarja v programu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Ni možnosti klepeta z drugimi uporabniki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interakcije med uporabniki brez funkcije za klepet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Nadzorovana možnost klepeta med uporabniki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nenadzorovana možnost klepeta med uporabniki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Ni možnosti klepeta ali pogovora z drugimi uporabniki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nenadzorovana možnost zvočnega ali video klepeta med uporabniki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Ni objavljanja uporabniških imen ali elektronskih naslovov"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Objavljanje uporabniškega imena ali elektronskega naslova socialnega omrežja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Podrobnosti o uporabniku se ne objavljajo tretjim osebam"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Poteka preverjanje najnovejše različice programa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Objavljanje podatkov diagnostike, ki ne vključuje podatkov o istovetnosti "
+"uporabnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Objavljanje podrobnosti o uporabniku"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Trenutno mesto se ne objavlja drugim uporabnikom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Omogočeno je objavljanje trenutnega mesta drugim uporabnikom"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Brez sklicevanja na homoseksualnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Posredno namigovanje na homoseksualnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Poljubljanje med osebami istega spola"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Nazorno spolno obnašanje med osebami istega spola"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Brez sklicevanja na prostitucijo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Posredno namigovanje na prostitucijo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Neposredno omenjanje prostitucije"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Nazoren prikaz prostitucije"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Brez sklicevanja na nezvestobo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Posredno namigovanje na nezvestobo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Neposredno omenjanje nezvestobe"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Nazoren prikaz prešuštva"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Brez izrazitega spolnega izražanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Pomanjkljivo oblečeni človeški liki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Prekomerno spolno izraženi človeški liki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Brez sklicevanja na skrunjenje človeškega telesa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Prikazovanje ali sklicevanja na zgodovinsko skrunitev"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Prikazovanje sodobnega skrunjenja človeškega telesa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Nazorno prikazovanje sodobnega skrunjenja človeškega telesa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Brez vidnih ostankov mrtvih ljudi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Vidni deli mrtvih ljudi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Izpostavljanje ostankov človeških teles"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Nazorno prikazovanje oskrunjenja človeškega telesa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Brez sklicevanja na suženjstvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Prikazovanje suženjstva v preteklosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Prikazovanje sodobnega suženjstva"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Nazorno prikazovanje sodobnega suženjstva"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Splošno"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Vse"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Le za odrasle"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Preizkušeno"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Najstniki"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Kdorkoli nad 10"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Vsi"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Zgodnje otroštvo"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Program"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "Program %s zahteva dodatno podporo za zapise datotek."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Zahtevane so dodatne vrste MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "Program %s zahteva dodatne pisave."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Zahtevane so dodatne pisave"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "Program %s zahteva dodatne predstavne kodeke."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Zahtevani so dodatni kodeki za predstavne vsebine"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "Program %s zahteva dodatne gonilnike za tiskalnik."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Zahtevani so dodatni gonilniki za tiskalnik"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "Program %s zahteva namestitev dodatnih paketov."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Zahtevani so dodatni paketi"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Najdi v programski opremi"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Poteka odstranjevanje …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Namestitev na čakanju …"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Poteka nastavljanje posodobitev …"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Poteka priprava …"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Program je mogoče uporabljati le z dejavno internetno povezavo."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Namesti"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Namesti …"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Zaženi"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Odstrani"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Omrežje"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Dovoljeno je sporočanje prek omrežja"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Sistemske storitve"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Dovoljen je dostop do storitev D-Bus sistemskega vodila"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Storitve seje"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Dovoljen je dostop do storitev D-Bus vodila seje"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Naprave"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Omogočen je dostop do sistemskih datotek naprave"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Osebna mapa"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Omogočeno je pregledovanje, urejanje in ustvarjanje datotek"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Omogočeno je pregledovanje datotek"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Datotečni sistem"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Mapa prejemanja"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Nastavitve"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Dovoljeno pregledovati in spreminjati nastavitve"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Opuščen zaslonski sistem"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Uporablja star, ne-varen zaslonski sistem"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Izvajanje v peskovniku mimo varnega okolja"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr ""
+"Omogoča izvajanje v peskovniku mimo varnega okolja kot obvod vseh vrst "
+"omejitev"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Program se v celoti izvaja v peskovniku."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Ni mogoče določiti, do katerih delov sistema program dostopa. Napaka je "
+"običajno zaznana pri starejših programih."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Neznano"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Nikoli"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Neznano"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Nizko"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Srednje"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Visoko"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Neznan položaj"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Za objavo poročila je zahtevana internetna povezava."
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Ni mogoče najti »%s«"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Javna domena"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://sl.wikipedia.org/wiki/Javna_last"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.sl"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Prosta programska oprema"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Uporabniki so zavezani k upoštevanju določil naslednjih dovoljenj:"
+msgstr[1] "Uporabniki so zavezani k upoštevanju določil naslednega dovoljenja:"
+msgstr[2] "Uporabniki so zavezani k upoštevanju določil naslednjih dovoljenj:"
+msgstr[3] "Uporabniki so zavezani k upoštevanju določil naslednjih dovoljenj:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Več podrobnosti"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Stran podrobnosti"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Prejemanje"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Posodobi"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Dodaj tipkovno bližnjico"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Od_strani tipkovno bližnjico"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ni pripadajoče zaslonske slike"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Programski vir je vključen"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Program vključuje tudi programski vir s posodobitvami in dostopom do dodatne "
+"programske opreme."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Ni vključenega programskega vira"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Program ne vključuje dodatnih programskih virov in ne bo posodobljen na "
+"novejšo različico."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Paket je že na voljo v osnovnem programskem viru in ga ni priporočljivo "
+"zamenjati."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Programski vir je določen"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Z dodajanjem programskega vira bo omogočen dostop do dodatne programske "
+"opreme in posodobitev."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Uporabi le programske vire, ki so vredni zaupanja."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Spletišče"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Doniraj"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Na voljo je jezikovna prilagoditev"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentacija"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Objava"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Sistemska povezljivost"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Izvedeno v peskovniku"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Različica"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Ocena starosti"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Dovoljenja"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Posodobljeno"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategorija"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Velikost namestitve"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Velikost prejema"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Razvijalec"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Dovoljenje"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Prosto"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Lastniško"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Vstavki"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Izbrani vstavki bodo nameščeni skupaj s programom."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Mnenja"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Napišite mnenje"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Pokaži več _podrobnosti"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"To pomeni, da je programska oprema brez omejitev uporabe, kopiranja, "
+"razširjanja in tudi spreminjanja izvorne kode."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Lastniški programski viri"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"To pomeni, da je programska oprema v lasti posameznika ali podjetja. "
+"Obstajajo pogosto omejitve uporabe in dostopa do izvorne kode."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Neznano dovoljenje programske opreme"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Pogoji dovoljenja te programske opreme niso znani."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Program je tako ocenjen zaradi:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Ni podrobnosti o tej oceni."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " in "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Razpoložljive pisave za %s skriptov"
+msgstr[1] "Razpoložljive pisave za %s skript"
+msgstr[2] "Razpoložljive pisave za %s skripta"
+msgstr[3] "Razpoložljive pisave za %s skripte"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Programska oprema za %s"
+msgstr[1] "Programska oprema za %s"
+msgstr[2] "Programska oprema za %s"
+msgstr[3] "Programska oprema za %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Ni mogoče najti zahtevane programske opreme"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s ni mogoče najti"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "na spletni strani"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Ni programa s podporo za datoteko %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Podrobnosti o %s in o možnostih za nameščanje manjkajočih programov je "
+"mogoče najti na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Za podporo %s ni na voljo programa."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s ni na voljo."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Podrobnosti o %s in o možnostih za nameščanje programov za podporo tej vrsti "
+"datotek je mogoče najti na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Za podporo %s ni na voljo dodatnih pisav."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Podrobnosti o %s in o možnostih za nameščanje dodatnih pisav je mogoče najti "
+"na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Za zapis %s ni na voljo dodatnih kodekov."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Podrobnosti o %s in o možnostih nameščanja kodekov za predvajanje tega "
+"zapisa je mogoče najti na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Za %s ni na voljo virov Plazma."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Podrobnosti o %s in o možnostih za nameščanje virov Plazma je mogoče najti "
+"na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Za %s ni na voljo gonilnikov za tiskalnik."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Podrobnosti o %s in o možnostih za nameščanje gonilnikov za podporo "
+"tiskalniku je mogoče najti na %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "ta spletna stran"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Kodekov %s ni mogoče najti. Več podrobnosti je zapisanih na spletni strani "
+"%s."
+msgstr[1] ""
+"Kodeka %s ni mogoče najti. Več podrobnosti je zapisanih na spletni strani %s."
+msgstr[2] ""
+"Kodekov %s ni mogoče najti. Več podrobnosti je zapisanih na spletni strani "
+"%s."
+msgstr[3] ""
+"Kodekov %s ni mogoče najti. Več podrobnosti je zapisanih na spletni strani "
+"%s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Ni zadetkov"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Zapis %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Stran kodekov"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Dobrodošli"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Dobrodošli med programi"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Program omogoča nameščanje programske opreme. Oglejte si priporočene "
+"programe, prebrskajte med kategorijami in poiščite programe po vaših željah."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Začnimo z nakupi"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Odstranjeno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Nameščeno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Posodobljeno"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Neznano"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Zgodovina"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Sistemski programi"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Stran nameščenih"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Katalog programske opreme se posodablja"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Nalaganje strani"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Zaganjanje sistema …"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Trenutno uporabljeno omrežje je plačljivo. Tovrstne povezave imajo omejitve "
+"dostopa do podatkov, ali pa so z dostopom povezani stroški. Samodejne "
+"posodobitve so zato zadržane.\n"
+"\n"
+"Samodejne posodobitve bodo omogočene, ko bo na voljo druga povezava, do "
+"takrat pa je posodobitve mogoče začeti ročno.\n"
+"\n"
+"V primeru, da je vrsta omrežja zaznana napačno in uporaba ni povezana z "
+"dodatnimi stroški, je nastavitev mogoče tudi spremeniti."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Odpri _omrežne nastavitve"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Overi objave"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Ni novih mnenj za overitev"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistem"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "uporabnik"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Veja"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Naslov URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Zapis"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Namestitev"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Več …"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Priporočeni zvočni in video programi"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Priporočene igre"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Priporočeni grafični programi"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Priporočeni pisarniški programi"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Dostop do dodatne programske opreme prek izbranih virov tretjih oseb."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Nekateri programski viri so lastniški in omejujejo dovoljenja za uporabo, "
+"izmenjavo oziroma dostop do izvorne programske kode."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Več o tem …"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Omogoči"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Stran pregleda"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Ali naj bodo omogočeni tudi programski viri tretje roke?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Predhodni"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Naslednji"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Izbor urednikov"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Nedavne objave"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorije"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Podatkov o programu ni mogoče najti"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Pripravi %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Ali res želite odstraniti shrambo %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Vsi programi iz %s bodo odstranjeni. Za ponovno uporabo jih bo treba znova "
+"namestiti."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Ali ste prepričani, da želite odstraniti %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Program %s bo odstranjen. Za ponovno uporabo ga bo treba znova namestiti."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (nameščeno)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Nastavitve posodabljanja"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Samodejno posodabljanje"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "Samodejne posodobitve so na plačljivih povezavah onemogočene."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Obvestila samodejnega posodabljanja"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Pokaži obvestilo, ko so posodobitve samodejno nameščene."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Nekatera trenutno nameščena programska oprema ni združljiva z %s. Če "
+"nadaljujete, bodo med nadgradnjo samodejno odstranjeni naslednji paketi:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Neskladna programska oprema"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "N_adaljuj"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u nameščenih programov"
+msgstr[1] "%u nameščen program"
+msgstr[2] "%u nameščena programa"
+msgstr[3] "%u nameščeni programi"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u nameščenih vstavkov"
+msgstr[1] "%u nameščen vstavek"
+msgstr[2] "%u nameščena vstavka"
+msgstr[3] "%u nameščeni vstavki"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u programov"
+msgstr[1] "%u program"
+msgstr[2] "%u programa"
+msgstr[3] "%u programi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u vstavkov"
+msgstr[1] "%u vstavek"
+msgstr[2] "%u vstavka"
+msgstr[3] "%u vstavki"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "Nameščeno: %s in %s"
+msgstr[1] "Nameščeno: %s in %s"
+msgstr[2] "Nameščeno: %s in %s"
+msgstr[3] "Nameščeno: %s in %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Ali želite odstraniti »%s«?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Ali želite onemogočiti »%s«?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programska oprema, nameščene prek tega vira, ne bo več deležna posodobitev, "
+"niti nujnih varnostnih popravkov."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Onemogoči"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operacijski sistem"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Ta skladišča so dodatek v privzeti programski opremi sistema %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Skladišča tretjih virov"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Ni dodatnih programskih virov"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Omogoči"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Odstrani …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "O_nemogoči …"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Omogočeno"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Onemogočeno"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Omogočeno"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Onemogočeno"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Bedast je"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Ni mi všeč"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "V redu je"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Všeč mi je"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Noro dober je"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Priporočljivo je nameniti več časa pisanju mnenja"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Izberite tudi oceno z zvedzicami"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Povzetek je prekratek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Povzetek je predolg"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Opis je prekratek"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Opis je predolg"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Objavi mnenje"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Objavi"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Povzetek"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Podajte kratek povzetek mnenja, na primer »Odličen program, ki ga toplo "
+"priporočam!«"
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Ocena"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Kakšno je vaše mnenje o programu. Podajte razloge za opis programa."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Preglejte, kateri podatki so poslani, med <a href=\"https://odrs.gnome.org/"
+"privacy\">pravili zasebnosti</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "skupno število ocen"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Objava mnenj je dovoljena tudi za nesramno, diskriminatorno ali napadalno "
+"vedenje."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Po objavi mnenje preveri skrbnik, preden se to pokaže tudi drugim "
+"uporabnikom."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Ali želite objaviti mnenje in oceno?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Poročilo"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Je bil ta opis ocene uporaben?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Da"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ne"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Ah"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Poročilo …"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Odstrani …"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Zaslonske slike ni mogoče najti"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Nalaganje slike je spodletelo"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Velikosti zaslonske slike ni mogoče najti"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Ni mogoče ustvariti predpomnilnika"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Zaslonska slika ni veljavna"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Zaslonska slika ni na voljo"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Zaslonska slika"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "+ %u dodatnih"
+msgstr[1] "+ %u dodaten"
+msgstr[2] "+ %u dodatna"
+msgstr[3] "+ %u dodatni"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Iskalna stran"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Ni najdenih programov"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Ni mogoče prejeti strojne programske opreme prek spletišča %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Ni mogoče prejeti posodobitev prek spletišča %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Prejemanje datotek posodobitev je spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Prejemanje datotek posodobitev je spodletelo: zahtevana je omrežna povezava, "
+"ki pa ni na voljo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Ni mogoče prejeti posodobitev prek spletišča %s: ni dovolj prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr ""
+"Prejemanje datotek posodobitev je spodletelo: ni dovolj prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Ni mogoče prejeti posodobitev: zahtevana je overitev"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Ni mogoče prejeti posodobitev: overitev je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Ni mogoče prejeti posodobitev: ni ustreznih dovoljenj za nameščanje "
+"programske opreme"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Pridobivanje seznama posodobitev je spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Paketa %s ni mogoče namestiti, ker je prejemanje prek spletišča %s "
+"spodletelo."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Ni mogoče namestiti paketa %s, ker je prejemanje spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Nameščanje %s je spodletelo, ker zagonsko okolje %s ni na voljo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Namestitev %s ni mogoča, ker paket ni podprt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Namestitev ni mogoča: zahtevana je omrežna povezava, ki pa ni na voljo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Paketa ni mogoče namestiti: program je shranjen v napačnem zapisu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Namestitev %s ni mogoča: ni dovolj prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Paketa %s ni mogoče namestiti: zahtevana je overitev"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Paketa %s ni mogoče namestiti: overitev je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Paketa %s ni mogoče namestiti: ni ustreznih dovoljenj za nameščanje "
+"programske opreme"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr ""
+"Paketa %s ni mogoče namestiti: zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Paketa %s ni mogoče namestiti: napetost baterije je prenizka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Namestitev %s ni mogoča"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Ni mogoče posodobiti programa %s projekta %s, ker je prejemanje spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Paketa %s ni mogoče posodobiti., ker je prejemanje spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Ni mogoče namestiti posodobitev %s, ker je prejemanje spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Ni mogoče namestiti posodobitev, ker je prejemanje spodletelo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Posodobitev je spodletela: zahtevana je omrežna povezava, ki pa ni na voljo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Posodobitev %s je spodletela: ni dovolj prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Ni mogoče namestiti posodobitev: ni dovolj prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Paketa %s ni mogoče posodobiti: zahtevana je overitev"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Ni mogoče namestiti posodobitev: zahtevana je overitev"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Paketa %s ni mogoče posodobiti: overitev je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Ni mogoče namestiti posodobitev: overitev je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Paketa %s ni mogoče posodobiti: ni ustreznih dovoljenj za nameščanje "
+"programske opreme"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Ni mogoče namestiti posodobitev: ni ustreznih dovoljenj za nameščanje "
+"programske opreme"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr ""
+"Paketa %s ni mogoče posodobiti: zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Ni mogoče namestiti posodobitev: zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Paketa %s ni mogoče posodobiti: napetost baterije je prenizka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Ni mogoče namestiti posodobitev: napetost baterije je prenizka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Posodobitev %s je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Ni mogoče namestiti posodobitev"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Okolja ni mogoče nadgraditi na različico %s prek spletišča %s."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Nadgradnja na %s ni mogoče, ker je prejemanje datotek spodletelo."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Nadgradnja na %s ni mogoča: zahtevana je omrežna povezava, ki pa ni na voljo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "ni mogoče posodobiti na različico %s: ni dovolj prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Okolja ni mogoče nadgraditi na različico %s: zahtevana je overitev"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Okolja ni mogoče nadgraditi na različico %s: overitev je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Okolja ni mogoče nadgraditi na različico %s: ni ustreznih dovoljenj za "
+"nameščanje programske opreme"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Okolja ni mogoče nadgraditi na različico %s: zahtevan je priklop napajanja "
+"iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Okolja ni mogoče nadgraditi na različico %s: napetost baterije je prenizka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr ""
+"Paketa %s ni mogoče posodobiti: zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr ""
+"Paketa %s ni mogoče odstraniti: zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Paketa %s ni mogoče odstraniti: zahtevana je overitev"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr ""
+"Paketa %s ni mogoče odstraniti: ni ustreznih dovoljenj za odstranjevanje "
+"programske opreme"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr ""
+"Paketa %s ni mogoče posodobiti: zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Paketa %s ni mogoče odstraniti: napetost baterije je prenizka"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Paketa %s ni mogoče odstraniti"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Ni mogoče zagnati %s: %s ni nameščen"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Ni dovolj prostora na disku. Sprostite ga in poskusite znova."
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Opravila ni bilo mogoče izvesti!"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Namestitev datoteke je spodletela: vrsta ni podprta"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Namestitev paketa je prekinjena: overitev je spodletela"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Namestitev je spodletela: opravilo ni podprto"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Namestitev je spodletela: ni mogoče izvesti overitve"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Povezava s spletiščem %s ni mogoča."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Program %s je treba pred uporabo novih vstavkov ponovno zagnati"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Program je treba pred uporabo novih vstavkov ponovno zagnati."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Zahtevan je priklop napajanja iz omrežja"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Napetost baterije je prenizka"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Vir: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (poteka nameščanje)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (poteka odstranjevanje)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Odstrani vse"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Opis posodobitve ni na voljo"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Nameščeno na %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Nameščene posodobitve"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Dodatni paketi"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Paketi, pripravljeni za odstranitev"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Posodobitve"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Povrnjeni paketi"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Sistem ni bil posodobljen."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Pripravljene so varnostne posodobitve programov"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Priporočljivo je takoj namestiti pomembne posodobitve"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Ponovno zaženi in namesti"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Na voljo so posodobitve programske opreme"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Na voljo so pomembne sistemske posodobitve in posodobitve programov"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Pogled"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u posodobljenih programov – sistem zahteva ponovni zagon"
+msgstr[1] "%u posodobljen program – sistem zahteva ponovni zagon"
+msgstr[2] "%u posodobljena programa – sistem zahteva ponovni zagon"
+msgstr[3] "%u posodobljeni programi – sistem zahteva ponovni zagon"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u posodobljenih programov"
+msgstr[1] "%u posodobljen program"
+msgstr[2] "%u posodobljena programa"
+msgstr[3] "%u posodobljeni programi"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "Program %s je posodobljen."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Program je treba ponovno zagnati."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "Programa %s in %s sta posodobljena."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u programov zahteva ponovni zagon."
+msgstr[1] "%u program zahteva ponovni zagon"
+msgstr[2] "%u programa zahtevata ponovni zagon"
+msgstr[3] "%u programi zahtevajo ponovni zagon"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Vključuje %s, %s in %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Posodobitve operacijskega sistema niso na voljo."
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Posodobite sistem za nadaljnje prejemanje varnostnih posodobitev."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Za namestitev je na voljo je nova različica %s"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Na voljo so posodobitve programske opreme"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Posodabljanje programske opreme je spodletelo"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Namestitev pomembne posodobitve sistema je spodletela."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Pokaži podrobnosti"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Sistemska posodobitev je končana"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Dobrodošli v namestitvi %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Paketi za posodobitev so nameščeni"
+msgstr[1] "Paket za posodobitev so nameščen"
+msgstr[2] "Paketa za posodobitev sta nameščena"
+msgstr[3] "Paketi za posodobitev so nameščeni"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Nameščene so bile pomembne sistemske posodobitve."
+msgstr[1] "Nameščena je bila pomembna sistemska posodobitev."
+msgstr[2] "Nameščeni sta bili pomembni sistemski posodobitvi."
+msgstr[3] "Nameščene so bile pomembne sistemske posodobitve."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Ocena"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Posodobitev je spodletela"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistem je že posodobljen"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Posodobitev je bila preklicana."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Zahtevana je omrežna povezava, ki pa ni na voljo. Vzpostavite povezavo z "
+"internetom in poskusite znova."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Pri posodobitvi je prišlo do varnostnih težav. Za več podrobnosti stopite v "
+"stik s ponudnikom programske opreme."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Ni dovolj prostora na disku. Naredite ga in poskusite znova."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Namestitev posodobitve je spodletela. Počakajte na naslednjo posodobitev in "
+"poskusite znova. Če bo težava ostala, stopite v stik s ponudnikom programske "
+"opreme."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%H:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Včeraj, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Včeraj, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Pred dvema dnevoma"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Pred tremi dnevi"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Pred štirimi dnevi"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Pred petimi dnevi"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Pred šestimi dnevi"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Pred enim tednom"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Pred dvema tednoma"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Preverjanje za nove posodobitve …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Poteka nastavljanje posodobitev …"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Dejanje je lahko dolgotrajno)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Nazadnje preverjeno: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Distribucija %s %s ni več podprta."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Nameščen operacijski sistem ni več podprt."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "To pomeni, da ne bo več mogoče prejemati varnostnih posodobitev."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Priporočljivo je nadgraditi sistem na novejšo različico."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Uporaba lahko vpliva na višino računa"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Preverjanje za posodobitve z uporabo širokopasovnega mobilnega omrežja lahko "
+"vpliva na višino račna za telefon."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Vseeno preveri"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Ni omrežne povezave"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr ""
+"Za preverjanje za posodobitve mora biti vzpostavljena povezava v splet."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Poteka preverjanje …"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Preveri za posodobitve"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Stran posodobitev"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Programska oprema je posodobljena"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Preverjanje za posodobitve z uporabo dostopa preko mobilne širokopasovne "
+"povezave lahko povzroči nepričakovane stroške."
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Vseeno preveri"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Preveri za posodobitve preko interneta"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Omrežne nastavitve"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Posodobitve se upravljalo samodejno"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Ponovni zagon in namestitev"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Posodobi vse"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Vključena strojna programska oprema"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Zahteva ponoven zagon"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Posodobitve programov"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Strojna programska oprema naprave"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Prejmi"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Pred posodabljanjem je priporočljivo je ustvariti varnostno kopijo podatkov "
+"in datotek."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Ponovno zaženi"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Posodobitve bodo uveljavljene ob naslednjem zagonu naprave."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Posodobitev %s %s je na voljo"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Poteka prejemanje paketov %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Prejemanje posodobitve %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Pripravljeno za namestitev"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Večja posodobitev z novimi zmožnostmi."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Več podrobnosti"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Dodajanje, odstranjevanje in posodabljanje programske opreme."
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Posodobitve;Posodobitev;Viri;Skladišča;Programi;Namestitev;Lastnosti;"
+"Odnamestitev;App;Trgovina;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Ustvarjanje in urejanje glasbe"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Predvajalniki glasbe"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Razhroščevalniki"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "Naprave IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Umetna inteligenca"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kemija"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Jeziki"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Vse"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Novosti v ospredju"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Akcijske igre"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Pustolovščine"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkadne igre"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Bloki"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tabla"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Karte"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Posnemovalniki"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Za otroke"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Igra vlog"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Šport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strateške igre"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafika"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografija"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Preiskovanje"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorska grafika"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Pregledovalniki"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Koledar"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Podatkovna zbirka"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finance"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Urejanje besedila"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Pisave"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeki"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Vhodni viri"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Jezikovni paketi"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Jezikovno prilagajanje"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Gonilniki strojne opreme"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Klepet"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Novice"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Spletni brskalniki"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Vsi"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Novosti"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Urejevalniki besedila"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Vse"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Novosti v ospredju"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Umetnost"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografije"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Stripi"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fikcija"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Zdravje"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Zgodovina"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Življenjski slog"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Šport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Zvok in slika"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Razvojna orodja"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Izobraževanje in Znanost"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Igre"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafika in fotografija"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivnost"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Sporočanje in novičarstvo"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Sklici"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Pripomočki"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Posodobitve sistema"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"Vključuje izboljšave delovanja, stabilnosti in varnosti za vse uporabnike."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Poteka prejemanje zaslonskih slik programov …"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Posodobitev Endles OS z novimi zmožnostmi."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "S storitvijo EOS ni mogoče pridobiti in uveljaviti posodobitve."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Sistemski namestilnik programske opreme za GNOME prek AppStream"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Razčlenjevanje argumentov ukazne vrstice je spodletelo"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Določiti je treba natanko eno ime datoteke"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Za zagon programa so zahtevana skrbniška dovoljenja"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Poizvedba o vrsti vsebine za je spodletela"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kopiranje je spodletelo"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Poteka prejemanje dodatnih datotek metapodatkov …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Poteka prejemanje podrobnosti posodobitev …"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Posodobite sistem za najnovejše zmožnosti, izboljšano delovanje in večjo "
+"stabilnost."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Podpora Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak je okolje za podporo namiznim programom sistema Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Pridobi metapodatke flatpak za %s …"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Posodobitev naprave %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Posodobitev sistema %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Posodobitev vgrajenega nadzornika %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Posodobtev ME %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Posodobitev poslovnega upravljalnika %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Posodobitev uporabniškega upravljalnika %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Posodobitev upravljalnika krmilnika %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Posodobitev upravljalnika krmilnika Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Posodobitev mikrokode CPE %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Posodobitev nastavitev %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Prejemanje podpisov posodobitev strojne programske opreme …"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Prejemanje metapodatkov posodobitev strojne programske opreme …"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Podpora nadgradnji strojne programske opreme"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Omogoča dostop do podpore posodobitvam strojne programske opreme."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Poteka prejemanje ocen programske preme …"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Odpri okno za podporo ocenjevanja"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"Storitev ODRS omogoča objavljanje in prebiranje uporabniških mnenj o "
+"programski opremi."
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Trgovina Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Podpora Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "»Snap« je univerzalni paket operacijskega sistema Linux"
+
+#~ msgid "About %s"
+#~ msgstr "O programu %s"
+
+#~ msgid "%s ME"
+#~ msgstr "Upravljalnik %s"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Pokaži vmesnik upravljanja map"
+
+#~ msgid "Folder Name"
+#~ msgstr "Ime mape"
+
+#~ msgid "_Add"
+#~ msgstr "_Dodaj"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Dodaj v programsko mapo"
+
+#~ msgid "Top Rated"
+#~ msgstr "Najbolje ocenjeno"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Nastavitev pripone"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Razširitve uporabljate na lastno odgovornost. Če imate kakšne sistemske "
+#~ "težave, je priporočljito te onemogočiti."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Nalaganje paketov je spodletelo"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "Slogovna predloga CSS je uspešno overjena!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Nalaganje datoteke je spodletelo"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Neshranjene spremembe"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Seznam programov je že naložen"
+
+#~ msgid "Merge documents"
+#~ msgstr "Združi dokumente"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Zavrzi spremembe"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Odpri datoteko AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Odpri"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Shrani datoteko AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Shrani"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Shranjevanje datoteke je spodletelo"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Zasnova oblikovanja pasice %s je izbrisana."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Zasnova oblikovanja pasice je izbrisana."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Seznam programov vključuje še ne shranjene spremembe."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Shranjuj podroben izpis"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Oblikovalnik vmesnikov za okolje GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Ni zasnov"
+
+#~ msgid "Error message here"
+#~ msgstr "Sporočilo o napaki"
+
+#~ msgid "App ID"
+#~ msgstr "ID programa"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Izbor urednikov"
+
+#~ msgid "Category Featured"
+#~ msgstr "Kategorija novosti"
+
+#~ msgid "Undo"
+#~ msgstr "Razveljavi"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Snovalnik pasic"
+
+#~ msgid "New Banner"
+#~ msgstr "Nova pasica"
+
+#~ msgid "Import from file"
+#~ msgstr "Uvozi iz datoteke"
+
+#~ msgid "Export to file"
+#~ msgstr "Izvozi v datoteko"
+
+#~ msgid "Delete Design"
+#~ msgstr "Izbriši zasnovo"
+
+#~ msgid "Featured App"
+#~ msgstr "Novosti programske opreme"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Posodobitev sistema"
+
+#~ msgid "Spacing"
+#~ msgstr "Razmik"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Velikost prostora med podrejenimi predmeti"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "S klikom se predmeti izberejo"
+
+#~ msgid "Select"
+#~ msgstr "Izberi"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Dodaj v mapo …"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Premakni v mapo …"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Odstrani iz mape"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Izbrani programi"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Oblikovanje pasic za programsko opremo GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Programi;Programska oprema;Oprema;Aplikacije;App;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Razširitve lupine"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Podpora Web Apps"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Zaganjanje spletnih programov v oknu brskalnika"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Skladišče razširitev Lupine GNOME"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Prejemanje metapodatkov razširitev ukazne lupine …"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Razširitve lupine GNOME"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Vse"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Prijava / Vpis"
+
+#~ msgid "Continue"
+#~ msgstr "Nadaljuj"
+
+#~ msgid "Use"
+#~ msgstr "Uporabi"
+
+#~ msgid "Add another…"
+#~ msgstr "Dodaj drugo …"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Ali ste prepričani, da želite opraviti nakup %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "Program %s bo nameščen, prejem pa bo obračunan z %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Izvedi nakup"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Prijava kot %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Prijava …"
+
+#~ msgid "Sign out"
+#~ msgstr "Odjava"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Nakup paketa %s je spodletel: zahtevana je overitev"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Nakup paketa %s je spodletel: overitev ni veljavna"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Nakup paketa %s je spodletel: ni določenega načina plačila"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Nakup paketa %s je spodletel: nakup je zavrnjen"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Nakup paketa %s je spodletel"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Za nadaljevanje se je treba uporabiti račun Ubuntu One."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Za nadaljevanje se je treba prijaviti v račun Ubuntu One."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Katalog programske opreme se posodablja"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Za nadaljevanje se je treba prijaviti v %s."
+
+#~ msgid "Email address"
+#~ msgstr "Elektronski naslov"
+
+#~ msgid "I have an account already"
+#~ msgstr "Račun že imam"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Želim se vpisati za račun"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Ne spomnim se gesla"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Naslednjič se samodejno prijavi"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Vpišite enkratno kodo PIN za dvofaktorsko overjanje."
+
+#~ msgid "PIN"
+#~ msgstr "Koda PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Overi"
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Račun %s je onemogočen."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Programske opreme ni mogoče namestiti, dokler težava ni odpravljena."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Več podrobnosti je zabeleženih na %s"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Paketa %s prek spletišča %s ni mogoče posodobiti."
+
+#~ msgid "_About"
+#~ msgstr "_O programu"
+
+#~ msgid "_Quit"
+#~ msgstr "_Končaj"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Podrobnosti o %s in o možnostih za nameščenje kodekov za predvajanje "
+#~ "predstavnega zapisa, so na voljo na spletišču programa."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Prejemanje novih posodobitev ..."
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Poteka prejemanje strani programske opreme ..."
+
+#~ msgid "Steam Support"
+#~ msgstr "Podpora Steam"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Ultimativno zabavno okolje Valve"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Pokaži podrobnosti profila za storitev"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Ponovni zagon in posodobitev"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Posodobi _vse"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Ponovno zaženi in _namesti"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Pridobivanje virov zagonskih programov ..."
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Prejemanje posodobitev strojne programske opreme ..."
+
+#~ msgid "Limba Support"
+#~ msgstr "Podpora Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Sistem Limba omogoča razvijalcem enostavno ustvarjanje paketov programske "
+#~ "opreme"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Seznam dodatnih virov, ki so v preteklosti že bili omogočeni"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Seznam virov, ki so v preteklosti med nameščanjem programske opreme "
+#~ "tretjih oseb že bili omogočeni ."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Pokaži tudi ne-prosto programsko opremo v zadetkih iskanja"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Seznam dodatnih lastniških virov, ki jih je mogoče izbirno omogočiti"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Predložene interakcije med igralci znotraj igre brez funkcije za klepet"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Omogoča dostop do dodatne programske opreme, vključno s spletnimi "
+#~ "brskalniki in igrami."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Ali želite omogočiti lastniške vire programske opreme?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "Ni nameščenih programov; druga programska oprema še vedno je lahko"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Običajne so omejitve uporabe in dostopa do programske kode."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Lastniški programski viri"
+
+#~ msgid "Remove Source"
+#~ msgstr "Odstrani vir"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Programske vire je mogoče prejeti prek interneta. Omogočajo dostop do "
+#~ "dodatne programske opreme, ki ni podprta s strani %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Z odstranjevanjem vira bodo odstranjeni tudi programski paketi, ki so "
+#~ "bili preko vira nameščeni."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Iz tega vira ni nameščenih programskih paketov"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Nameščeno iz podanega vira"
+
+#~ msgid "Source Details"
+#~ msgstr "Podrobnosti vira"
+
+#~ msgid "Last Checked"
+#~ msgstr "Nazadnje preverjeno"
+
+#~ msgid "Added"
+#~ msgstr "Dodano"
+
+#~ msgid "Website"
+#~ msgstr "Spletišče"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Novosti"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgid "Total"
+#~ msgstr "Skupno"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Ni mogoče najti »%s«"
+
+#~ msgid "_Install All"
+#~ msgstr "_Namesti vse"
+
+#~ msgid "Other Updates"
+#~ msgstr "Druge posodobitve"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Namestitev %s je spodletela."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Odstranjevanje %s je spodletelo."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr ""
+#~ "Prepričajte se, da je vzpostavljena spletna povezava in nato poskusite "
+#~ "znova."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Sprostite prostor in poskusite znova."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr ""
+#~ "Če se težava ponavlja, stopite v stik s ponudnikom programske opreme."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Vse"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Novosti v ospredju"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgid "Science"
+#~ msgstr "Znanost"
+
+#~ msgid " or "
+#~ msgstr " ali "
+
+#~ msgid "3rd party"
+#~ msgstr "program tretje osebe"
+
+#~ msgid "web app"
+#~ msgstr "spletni program"
+
+#~ msgid "nonfree"
+#~ msgstr "lastniški program"
+
+#~ msgid "_Installing"
+#~ msgstr "_Nameščanje"
+
+#~ msgid "_Removing"
+#~ msgstr "_Odstranjevanje"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Neznano"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Poteka preračunavanje ..."
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Neznano"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "Brez"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Programska oprema je iz tretje roke."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Programsko opremo razvijajo tretje osebe in lahko vključuje tudi "
+#~ "lastniško kodo."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Programska oprema lahko vključuje tudi lastniško kodo."
+
+#~ msgid "_History"
+#~ msgstr "_Zgodovina"
+
+#~ msgid "Size"
+#~ msgstr "Velikost"
+
+#~ msgid "non-free"
+#~ msgstr "Lastniški program"
+
+#~ msgid "Recommended Audio Applications"
+#~ msgstr "Priporočeni zvočni programi"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Priporočeni pisarniški programi"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Programski viri omogočajo dostop do dodatne programske opreme."
+
+#~ msgid "One Star"
+#~ msgstr "Ena zvezdica"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dve zvezdici"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tri zvezdice"
+
+#~ msgid "Four Stars"
+#~ msgstr "Štiri zvezdice"
+
+#~ msgid "Five Stars"
+#~ msgstr "Pet zvezdic"
+
+#~ msgid "Audio"
+#~ msgstr "Zvok"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Montaža"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Podatkovne zbirke"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Zapisovanje diska"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Radioamaterstvo"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mešanje"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Glasba"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Players"
+#~ msgstr "Predvajalniki"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Snemalniki"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Zaporejevalniki"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Uravnalniki"
+
+#~ msgid "Development Tools"
+#~ msgstr "Razvojna orodja"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Izgradnja paketov"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Podatkovne zbirke"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Debuggers"
+#~ msgstr "Razhroščevalniki"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profiliranje"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "Upravljanje projektov"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Prevajanje"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Spletni razvoj"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Art"
+#~ msgstr "Umetnost"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Umetna inteligenca"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Chemistry"
+#~ msgstr "Kemija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Računalniške znanosti"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Gradnja"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Predočenje podatkov"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektrika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inženirstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geoznanost"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Zgodovina"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanistika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Obdelava slik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Languages"
+#~ msgstr "Jeziki"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Zemljevidi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Glasba"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Številska analiza"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Vzporedno računanje"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost in vera"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Sports"
+#~ msgstr "Šport"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Action"
+#~ msgstr "Akcijske igre"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Adventure"
+#~ msgstr "Pustolovščine"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Arcade"
+#~ msgstr "Arkadne igre"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Blocks"
+#~ msgstr "Bloki"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Board"
+#~ msgstr "Tabla"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Card"
+#~ msgstr "Karte"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Emulators"
+#~ msgstr "Posnemovalniki"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Kids"
+#~ msgstr "Za otroke"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Logic"
+#~ msgstr "Logika"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Role Playing"
+#~ msgstr "Igra vlog"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Strelske igre"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulacija"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Šport"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Strategy"
+#~ msgstr "Strateške igre"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D-grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "3D Graphics"
+#~ msgstr "3D-grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "Optično prepoznavanje znakov"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Photography"
+#~ msgstr "Fotografija"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Založništvo"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rastrska grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Scanning"
+#~ msgstr "Optično branje"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Vector Graphics"
+#~ msgstr "Vektorska grafika"
+
+#~ msgid "Internet"
+#~ msgstr "Splet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Chat"
+#~ msgstr "Klepetanje"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Klicanje"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Elektronska pošta"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Viri"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Prenos datotek"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham radio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Hipno sporočanje"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "Odjemalci IRC"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Zaslon"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "News"
+#~ msgstr "Novice"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "Protokol P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Oddaljeni dostop"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonija"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Video Conference"
+#~ msgstr "Video konferenca"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Browser"
+#~ msgstr "Spletni brskalnik"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Spletni razvoj"
+
+#~ msgid "Office"
+#~ msgstr "Pisarna"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Calendar"
+#~ msgstr "Koledar"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafikon"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Upravljanje s stiki"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Database"
+#~ msgstr "Podatkovna zbirka"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Slovar"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Elektronska pošta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Finance"
+#~ msgstr "Finance"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Diagram poteka"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "Dlančnik"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografija"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Predstavitev"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Upravljanje projektov"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Založništvo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Preglednica"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Pregledovalnik"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Word Processor"
+#~ msgstr "Urejanje besedila"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Umetnost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Umetna inteligenca"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Računalniške znanosti"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Gradnja"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Predočenje podatkov"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektrika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inženirstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geoznanost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Zgodovina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanistika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Obdelava slik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Jeziki"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Zemljevidi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Zdravstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Številska analiza"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Vzporedno računanje"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost in vera"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Šport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Posnemovalnik"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Upravljalnik datotek"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Datotečna orodja"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Zaslon"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Varnost"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Posnemovalnik terminala"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Dostopnost"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arhiviranje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Računalo"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Ura"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Stiskanje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Datotečna orodja"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Zemljevidi"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefonska orodja"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Text Editor"
+#~ msgstr "Urejevalnik besedil"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Montaža"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Podatkovna zbirka"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Zapisovanje diska"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Predvajalniki"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Snemalniki"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Fonts"
+#~ msgstr "Pisave"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Codecs"
+#~ msgstr "Kodeki"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Input Sources"
+#~ msgstr "Vhodni viri"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Language Packs"
+#~ msgstr "Jezikovni paketi"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Razširitve lupine"
+
+#~ msgctxt "Menu subcategory of Add-ons"
+#~ msgid "Localization"
+#~ msgstr "Jezikovno prilagajanje"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Predhodna posodobitev ni bila uspešno končana."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Posodobitve ni mogoče namestiti; najverjetneje je težava v sami "
+#~ "posodobitvi. Počakajte na naslednjo posodobitev in poskusite znova."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Le spletni programi"
+
+#~ msgid "Review"
+#~ msgstr "Ocena"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Ni najdenih podatkov AppStream"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Vstopi v način GApplication"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Paketi posodobitve niso podpisani na ustrezen način."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Posodobitve ni mogoče končati."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Zahtevana je posodobitev brez povezave, vendar ni paketov za posodobitev."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Ni več prostora na pogonu."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Namestitev posodobitve je spodletela."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Posodobitev brez povezave je spodletela na nepričakovan način."
+
+#~ msgid "No addon fonts are available for %s support."
+#~ msgstr "Za podporo %s ni na voljo dodatnih pisav."
+
+#~ msgid "No sources found."
+#~ msgstr "Ni najdenih virov"
+
+#~ msgid "OK"
+#~ msgstr "V redu"
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..0fd5109
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,5738 @@
+# Serbian translation of gnome-software
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2017.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Translators:
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013—2017.
+# Милош Поповић <gpopac@gmail.com>, 2015.
+# Марко М. Костић <marko.m.kostic@gmail.com>, 2016.
+# Борисав Живановић <borisavzivanovic@gmail.com>, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-30 09:14+0200\n"
+"Last-Translator: Марко М. Костић <marko.m.kostic@gmail.com>\n"
+"Language-Team: \n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Project-Style: gnome\n"
+"X-Generator: Poedit 2.4.1\n"
+"X-Poedit-Bookmarks: -1,-1,49,-1,-1,-1,-1,-1,-1,-1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Гномови програми"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Гномов управник програма"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Програми вам дозвољавају да пронађете и инсталирате нове програме и "
+"проширења система и да уклоните постојеће инсталиране програме."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Гномови програми приказују издвојене и популарне програме са корисним "
+"описима и неколико снимака екрана по програму. Програми могу бити пронађени "
+"прегледањем списка категорија или претраживањем. Такође вам омогућава "
+"одржавање ажурног система коришћењем технологије ванмрежних ажурирања."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Панел прегледа"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Панел појединости"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Панел инсталираних"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Панел ажурирања"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Појединости ажурирања"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Гномов пројекат"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Инсталирај датотеку тока у системску локацију"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Инсталирам датотеку тока у системску локацију"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Списак сагласних пројеката"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ово је списак сагласних пројеката које треба приказати као што је Гном, КДЕ "
+"и ИксФЦЕ."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Да ли Гномови програми треба да управљају ажурирањима и надоградњама"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Ако је искључено, Гномови програми ће сакрити површ за ажурирања, неће "
+"извршавати било каква самостална ажурирања или питати за надоградње."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Самостално преузимај и инсталирај ажурирања"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Ако је укључено, Гномови програми ће сам преузети ажурирања у позадини и "
+"инсталирати она која не захтевају поновно покретање уређаја."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Обавести корисника о програмима ажурираним у позадини"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Ако је омогућено, Гномови Програми ће обавестити корисника о ажурирањима "
+"која сус е догодила док је корисник био ван рачунара."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Да ли треба вршити самостално освежавање на ограниченој вези"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Ако је укључено, Гномови програми ће се самостално освежавати у позадини "
+"(преузимање метаподатака, провера нових доступних ажурирања и слично) чак и "
+"преко ограничене везе што може довести до новчаних трошкова по корисника."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Да ли је ово прво покретање Гномових програма"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Приказује звездице оцењивања поред програма"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Филтрирај програме на основу подразумеване гране подешене за удаљено место"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Неслободни програми приказују прозорче упозорења пре инсталације"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Када се инсталирају неслободни програми може бити приказано прозорче "
+"упозорења. Ово одлучује да ли је то прозорче потиснуто."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Списак популарних програма"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Списак програма за коришћење, који преписује оне које одреди систем."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Временска ознака последње провере ажурирања"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Временска ознака обавештења последње надоградње"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Временска ознака првог безбедносног ажурирања, очишћеног након ажурирања"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Временска ознака последњег ажурирања"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Последњи временски жиг када је систем био на мрежи и када је добио ажурирања"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Старост у секундама након којих је потребно потврдити да је узводни снимак "
+"екрана и даље исправан"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Бирање веће вредности ће узроковати мање обилазака ка удаљеном серверу али "
+"ће ажурирање снимака екрана и приказ кориснику трајати дуже. Вредност „0“ "
+"значи да се никада не проверава сервер уколико слика већ постоји у кешу."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Сервер који ће се користити за прегледе програма"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Најмањи резултат карме за прегледе"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Прегледи са кармом са мањим бројем од овог се неће приказивати."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Списак званичних извора који се не требају сматрати трећом страном"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Списак званичних извора који се требају сматрати слободним софтвером"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Адреса дозволе за коришћење када се програм треба сматрати слободним "
+"софтвером"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Инсталира скуп програма за све кориснике на систему где је то могуће"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Допусти приступ прозорчету извора софтвера"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Нуди надоградње за предиздања"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Приказује неке УИ елементе обавештавајући корисника да неки програм није "
+"слободан"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Прикажи упит за инсталирање извора неслободног софтвера"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Прикажи величину инсталираних програма у списку инсталираних програма"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://sr.wikipedia.org/wiki/Власнички_софтвер'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Путања која објашњава неслободан и власнички софтвер"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Списак УРЛ-ова који показују на датотеке тока које ће бити преузете у ап-"
+"инфо фасциклу"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Инсталирај датотеку тока у системску локацију"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Омогући ризницу за проширења Гномове шкољке"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Ниска која складишти gnome-online-account иб који се користи за пријаву"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Инсталација програма"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Инсталирајте изабране програме на систем"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Изабери све"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Поништи избор"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Р_изнице програма"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "Поставке аж_урирања"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Програми"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Идите назад"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Истражи"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Инсталирани"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "Аж_урирања"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Претражи"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Извор"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Ризнице програма"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Испитај диск"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Подешавања мреже"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Поново покрени"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Још података"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Самостална ажурирања су паузирана"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Саз_нај више"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Локална датотека"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Пакет"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "На чекању"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Инсталиран"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Инсталирам"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Уклањам"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Режим покретања: „updates“ (ажурирања), „updated“ (ажурно), "
+"„installed“ (инсталирано) или „overview“ (преглед)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "РЕЖИМ"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Тражи програме"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "ТРАЖИ"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Приказује појединости програма (користећи ИБ програма)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ИБ"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Приказује појединости програма (користећи назив пакета)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "НЗВПКТА"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Приказује програм (користећи ИБ програма)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Отвара локалну датотеку са пакетом"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "НАЗИВ ДАТОТЕКЕ"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Врста интеракције која се очекује за ову радњу: било \"none\", \"notify\" "
+"или \"full\""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Приказује опширне податке прочишћавања"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Инсталира било које ажурирање на чекању, у позадини"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Прикажи поставке ажурирања"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Затвара покренути примерак"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Даје предност локалним изворима датотека над током програма"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Приказује број издања"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Марко М. Костић <marko.m.kostic@gmail.com>\n"
+"Борисав Живановић <borisavzivanovic@gmail.com>\n"
+"\n"
+"http://prevod.org — превод на српски језик."
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "О Програмима"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Фин начин за управљање програмима на вашем систему."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Нажалост, нема података о датом програму."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Посети веб страницу"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Инсталирај…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Откажи"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Инсталирај"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Ажурирај"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Уклони"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Уређај не може бити коришћен за време ажурирања."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Захтева додатна овлашћења"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Удаљена пријава %s потребна (област %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Пријава је потребан"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Откажи"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Пријава"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Корисник"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Лозинка"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Друго"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Све"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Издвојено"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Издвојено у категорији „%s“"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Оцењивање"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Назив"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Прикажи"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Мени филтера поткатегорија"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Поређај по"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Мени сортирања поткатегорија"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Унеси број од 1 до %u:"
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Одаберите програм:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Ажурирања система су сада инсталирана"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Преглед скоро инсталираних ажурирања је доступан"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "„%s“ је сада инсталиран"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Потребно је поновно покретање како би измене ступиле на снагу."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Програм је спреман за употребу."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Покрени поново"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Покрени"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Инсталирати програме треће стране?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Желите ли омогућавање ризница са програмима треће стране?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"Програм „%s“ није <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">слободан софтвер и софтвер отвореног изворног кода</a>, а "
+"обезбеђује га ризница „%s“."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "Програм %s обезбеђује ризница „%s“"
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Ова ризница програма мора бити укључена да бисте наставили инсталацију."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Инсталација или коришћење „%s“ може бити противзаконито у неком државама."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Инсталација или коришћење овог кодека може бити противзаконито у неком "
+"државама."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Не упозоравај више"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Укључи и инсталирај"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Опширније грешке управника пакета следе:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Појединости"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Ажурирање је инсталирано"
+msgstr[1] "Ажурирања су инсталирана"
+msgstr[2] "Ажурирања су инсталирана"
+msgstr[3] "Ажурирање је инсталирано"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Потребно је поновно покретање како би ступила у дејство."
+msgstr[1] "Потребно је поновно покретање како би ступила у дејство."
+msgstr[2] "Потребно је поновно покретање како би ступила у дејство."
+msgstr[3] "Потребно је поновно покретање како би ступило у дејство."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Не сада"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Нема цртаног насиља"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Ликови из цртаћа у непожељним ситуацијама"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Ликови из цртаћа у агресивном сукобу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Графичко насиље које укључује ликове из цртаћа"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Нема фантазијског насиља"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Ликови у несигурним ситуацијама које се лако разликују од стварности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Ликови у агресивном сукобу који се лако разликује од стварности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Графичко насиље које се лако разликује од стварности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Нема реалистичног насиља"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Благо стварни ликови у несигурним ситуацијама"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Приказ стварних ликова у агресивном сукобу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Графичко насиље које укључује стварне ликове"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Нема крвопролића"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Нереално крвопролиће"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Реално крвопролиће"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Приказ крвопролића и сакаћење делова тела"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Нема сексуалног насиља"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Силовање или друго насилно сексуално понашање"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Нема упућивања на алкохол"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Упућивање на алкохолна пића"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Употреба алкохолних пића"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Нема упућивања на забрањене дроге"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Упућивање на забрањене дроге"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Употреба забрањених дрога"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Нема упућивањ на дуванске производе"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Упућивање на дуванске производе"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Употреба дуванских производа"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Нема било какве нагости"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Кратка уметничка голотиња"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Продужена голотиња"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Нема сексуалних приказа или упућивања"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Провокативне упуте или прикази"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Сексуалне упуте или прикази"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Графичко сексуално понашање"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Нема било какве вулгарности"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Блага или ретка употреба псовки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Умерена употреба псовки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Јака или честа употреба псовки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Нема неумесног хумора"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Урнебесна комедија"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Вулгаран или неумесни хумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Еротски и хумор за одрасле"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Нема било каквог дискриминационог говора"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Негативност према одређеној групи људи"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Дискриминација осмишљена да изазове емотивну повреду"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Експлицитна дискриминација на основу пола, сексуалности, расе или "
+"вероисповести"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Нема било каквог оглашавања"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Пласман производа"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Експлицитно упућивање на нарочите робне марке или заштићене производе"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Корисници се охрабрују да купују одређене ставке у стварном свету"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Нема било каквог коцкања"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Коцкање на насумичним догађајима који користе жетоне или кредите"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Коцкање које користи „играчки“ новац (play)"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Коцкање које користи стварни новац"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Не може се трошити стваран новац"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Корисници се охрабрују да донирају стварни новац"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Способност потрошње стварног новца у програму"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Нема начина за ћаскање са другим корисницима"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Међудејство између корисника без могућности ћаскања"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Умерена могућност ћаскања између корисника"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Неконтролисана могућност ћаскања између корисника"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Нема начина за разговор са другим корисницима"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Неконтролисана могућност звучног и видео ћаскања између корисника"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Нема дељења корисничких имена на друштвеним мрежама или адреса електронске "
+"поште"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Дељење корисничких имена на друштвеним мрежама или адреса електронске поште"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Нема дељења корисничких података са трећим странама"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Проверава последње издање програма"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Деле се дијагностички подаци преко којих други не могу препознати корисника"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Деле се дијагностички подаци преко којих други могу препознати корисника"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Нема дељења стварне локације са другим корисницима"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Дељење стварне локације са другим корисницима"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Нема упућивања на хомосексуалност"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Посредна упућивања на хомосексуалност"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Љубљење између особа истог пола"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Графичко сексуално понашање између особа истог пола"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Нема упућивања на проституцију"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Посредна упућивања на проституцију"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Непосредна упућивања на проституцију"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Графички прикази чина проституције"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Нема упућивања на прељубу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Посредна упућивања на прељубу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Непосредна упућивања на прељубу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Графички прикази чина прељубе"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Нема сексуализованих карактера"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Оскудно обучени људски карактери"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Претерано сексуализовани људски карактери"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Нема упућивања на скрнављење"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Прикази или упућивања ка историјским скрнављењима"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Прикази савременог људског скрнављења"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Графички прикази савременог скрнављења"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Без видљивих људских посмртних остатака"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Са видљивим људским посмртним остацима"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Посмртни остаци људи који су изложени временским приликама"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Графички прикази скрнављења људских тела"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Нема упућивања на робовласништво"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Прикази или упућивања ка историјском робовласништву"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Прикази савременог робовласништва"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Графички прикази савременог робовласништва"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Опште"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "СВЕ"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Само за одрасле"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "За одрасле"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Тинејџери"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Сви 10+ година"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Сви"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Рано детињство"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Програм"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "„%s“ захтева додатну подршку за коришћење ове врсте датотеке."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Потребне су додатни МИМЕ формати"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "„%s“ захтева додатне словне ликове."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Потребни су додатни словни ликови"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "„%s“ захтева додатне мултимедијалне кодеке."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Потребни су додатни мултимедијални кодеци"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "„%s“ захтева додатне управљачке програме за штампаче."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Потребни су додатни управљачки програми штампача"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "„%s“ захтева додатне пакете."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Потребни су додатни пакети"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Нађи у Програмима"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Уклањам…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Чека на инсталирање…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Чека на ажурирање…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Припремам…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Овај програм се може користити само ако постоји веза са интернетом."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Инсталирај"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Инсталирај…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Покрени"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Уклони"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Мрежа"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Може комуницирати преко мреже"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Системске услуге"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Може приступати услугама Д-сабирнице на системској сабирници"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Услуге сесије"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Може приступати услугама Д-сабирнице на сабирници сесије"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Уређаји"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Може приступати системким датотекама уређаја"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Лична фасцикла"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Може прегледати, уређивати и стварати датотеке"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Може прегледати датотеке"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Систем датотека"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Фасцикла са преузимањима"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Подешавања"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Може прегледати и мењати било које подешавање"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Застарели систем приказа"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Користи стари, небезбедни систем приказа"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Бег из изолације"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Може изаћи из изолације и може заобићи било која друга ограничења"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Овај програм је у потпуности изолован."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Не могу да утврдим којим деловима система овај програм приступа. Ово је чест "
+"случај код старијих програма."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Непознато"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Никада"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Непознато"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Низак"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Средње"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Висок"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Непознато"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Потребна вам је веза са интернетом да бисте написали преглед"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Не могу да пронађем „%s“"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Јавно власништво"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+"https://sr.wikipedia.org/sr-ec/%D0%92%D0%BB%D0%B0%D1%81%D0%BD"
+"%D0%B8%D1%87%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.sr"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Слободан софтвер"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Корисници су везани следећом дозволом:"
+msgstr[1] "Корисници су везани следећим дозволама:"
+msgstr[2] "Корисници су везани следећим дозволама:"
+msgstr[3] "Корисници су везани следећом дозволом:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Још података"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Страница појединости"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Преузимам"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "Аж_урирај"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Додај пречицу"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Уклони пречицу"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Није достављен снимак екрана"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Садржи ризницу програма"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Овај програм садржи ризницу програма из које ћете добијати ажурирања, као и "
+"приступ другим програмима."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Не садржи ризницу програма"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Овај програм не садржи ризницу програма. Он неће бити ажуриран на нова "
+"издања."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Овај програм је већ доступан у ризницама ваше дистрибуције и не би требали "
+"да га замените."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Ризница програма је препозната"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Додавање ове ризнице програма ће вам омогућити приступ додатним програмима и "
+"надоградњама."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Користите само проверене ризнице програма."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Веб страница"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "Пошаљи _донацију"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Преведен на српски"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Документација"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Одржаван програм"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Усклађеност са системом"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Изолован"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Канал"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Издање"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Оцена старосне прикладности"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Овлашћења"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Ажуриран"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Категорија"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Величина инсталираног"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Величина преузетог"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Програмер"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Дозвола"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Слободан"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Власнички"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Додаци"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Изабрани додаци биће инсталирани са програмом."
+
+# Мислим да се ова ниска односи на део Програма који је посвећен рецензијама програма.
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Прегледи"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Напиши преглед"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Прикажи још"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"То значи да софтвер може бити слободно покренут, умножен, расподељен, "
+"проучаван и измењен."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Власнички софтвер"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"То значи да је софтвер у власништву појединца или компаније. Често постоје "
+"ограничења његовог коришћења и његовом изворном кȏду обично се не може "
+"приступити."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Непозната дозвола софтвера"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Одредбе дозволе овог софтвера су непознате."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Програм је оцењен овако зато што га одликује следеће:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Нема појединости за ову оцену старосне прикладности."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " и "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Доступан је словни лик за писмо „%s“"
+msgstr[1] "Доступни су словни ликови за писмо „%s“"
+msgstr[2] "Доступни су словни ликови за писмо „%s“"
+msgstr[3] "Доступан је словни лик за писмо „%s“"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Доступан је програм за „%s“"
+msgstr[1] "Доступни су програми за „%s“"
+msgstr[2] "Доступни су програми за „%s“"
+msgstr[3] "Доступан је програм за „%s“"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Не могу да нађем потребне програме"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Нисам пронашао „%s“"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "на веб страници"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Нису доступни програми који обезбеђују датотеку „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Податке о „%s“, као и начин набављања недостајућих програма можете пронаћи "
+"на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Нису доступни програми за „%s“ подршку."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "„%s“ није доступан."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Податке о „%s“, као и начин набављања програма који може да подржи ову врсту "
+"датотека можете наћи на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Нема доступних фонтова за писмо „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Податке о „%s“, као и начин набављања додатних фонтова можете пронаћи на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Нема додатних кодека за формат датотеке „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Податке о „%s“, као и начин набављања кодека који може да пусти ову врсту "
+"записа можете наћи на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Нису доступна изворишта Плазме за „%s“ подршку."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Податке о „%s“, као и начин набављања додатних изворишта Плазме можете "
+"пронаћи на %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Нису доступни управљачки програми штампача за „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Податке о „%s“, као и начин набављања управљачког програма који може да "
+"подржи овај штампач можете наћи на %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "овом веб сајту"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "На жалост, не могу пронаћи „%s“. На „%s“ можете наћи више података."
+msgstr[1] "На жалост, не могу пронаћи „%s“. На „%s“ можете наћи више података."
+msgstr[2] "На жалост, не могу пронаћи „%s“. На „%s“ можете наћи више података."
+msgstr[3] "На жалост, не могу пронаћи „%s“. На „%s“ можете наћи више података."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Неуспех при добављању резултата претраге"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s формат датотеке"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Страница кодека"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Добро дошли"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Добро дошли у Програме"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Програми вам омогућавају да инсталирате све програме који вам требају, све "
+"са једног места. Погледајте наше препоруке, разгледајте категорије, или "
+"потражите програм који желите."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Ајмо у куповину"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Уклоњен"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Инсталиран"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Ажуриран"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Непознато"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e. %B %Y."
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Историјат"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Системски програми"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Страница инсталираног"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Каталог софтвера је преузет"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Учитавам страницу"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Покрећем…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Тренутна мрежа је ограничена. Ограничене мреже, осим самих ограничења, могу "
+"имати и додатне новчане трошкове. Да бисте уштедели податке, самостална "
+"ажурирања су паузирана.\n"
+"\n"
+"Самостална ажурирања биће настављена када се будете повезали на неограничену "
+"мрежу. До тада, могуће је ручно инсталирати ажурирања.\n"
+"\n"
+"Уколико је тренутна мрежа означена ограниченом грешком, ово подешавање се "
+"може променити."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Отвори по_дешавања мреже"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Страница уређења"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Нема прегледа за уређење"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "систем"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "корисник"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Грана"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Адреса"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Врста"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Инсталација"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Још…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Препоручени аудио и видео програми"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Препоручене игре"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Препоручени графички програми"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Препоручени стваралачки програми"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Приступите додатним програмима са извора пробраних трећих страна."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Део ових програма је власнички те је дељење, коришћење и приступање изворном "
+"коду ограничено."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Сазнај више…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Укључи"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Страница прегледа"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Укључити ризнице програма треће стране?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Претходно"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Следеће"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Избори уредника"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Недавна издања"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Категорије"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Нисам пронашао податке о програмима"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Припремам „%s“"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Да ли сигурно желите да уклоните ризницу „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Све програми из ризнице „%s“ биће уклоњени, мораћете поново да инсталирате "
+"ризницу да бисте их поново користили."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Да ли сигурно желите да уклоните „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Биће уклоњен „%s“, и мораћете да га инсталирате да бисте га поново користили."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Инсталиран)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Поставке ажурирања"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Самостална ажурирања"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Самостална ажурирања су онемогућена на мобилним или ограниченим везама."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Обавештења о самосталним ажурирањима"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Прикажи обавештења када се ажурирања самостално инсталирају."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Неки од тренутно инсталираних програма нису сагласни са дистрибуцијом „%s“. "
+"Ако наставите, следећи ће бити сами уклоњени за време надоградње:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Несагласан софтвер"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Настави"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u инсталирани програм"
+msgstr[1] "%u инсталирана програма"
+msgstr[2] "%u инсталираних програма"
+msgstr[3] "Један инсталирани програм"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u инсталирани додатак"
+msgstr[1] "%u инсталирана додатка"
+msgstr[2] "%u инсталираних додатака"
+msgstr[3] "Један инсталирани додатак"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u програм"
+msgstr[1] "%u програма"
+msgstr[2] "%u програма"
+msgstr[3] "Један програм"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u додатак"
+msgstr[1] "%u додатка"
+msgstr[2] "%u додатака"
+msgstr[3] "Један додатак"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s и %s су инсталирани"
+msgstr[1] "%s и %s су инсталирана"
+msgstr[2] "%s и %s је инсталирано"
+msgstr[3] "%s и %s су инсталирани"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Уклонити ризницу „%s“?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Онемогућити ризницу „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Програми инсталирани из ове ризнице више неће добијати ажурирања, укључујући "
+"и безбедносне исправке."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Онемогући"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "оперативни систем"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Ове ризнице допуњавају подразумеване програме које пружа дистрибуција „%s“."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Ризнице треће стране"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Нема додатних ризница"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Омогући"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Уклони…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "О_немогући…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Укључујем"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Онемогућавам"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Омогућено"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Онемогућено"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Никакав"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Не допада ми се"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "У реду је"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Добар је"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Одличан"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Утрошите мало више времена за писање прегледа"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Изаберите оцену звездицом"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Сажетак је прекратак"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Сажетак је предуг"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Опис је прекратак"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Опис је предуг"
+
+# Мислим да се ова ниска односи на део Програма који је посвећен рецензијама програма.
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Објави преглед"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Објави"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Сажетак"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Укратко опишите ваше мишљење, на пример: „Одличан програм, препоручио бих "
+"га“."
+
+# Мислим да се ова ниска односи на део Програма који је посвећен рецензијама програма.
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Преглед"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Шта мислите о програму? Покушајте да оправдате ваше виђење."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Погледајте појединости података које шаљемо у нашој <a href=\"https://odrs."
+"gnome.org/privacy\">политици приватности</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "укупно оцена"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Можете да пријавите да су прегледи увредљивог, грубог или дискриминаторског "
+"понашања."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Након подношења, преглед ће бити скривен све док га не провери неко од "
+"администратора."
+
+# Мислим да се ова ниска односи на део Програма који је посвећен рецензијама програма.
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Да објавим преглед?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Објави"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Да ли вам је овај преглед користио?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Јесте"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Није"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Онако"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Објави…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Уклони…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Нема снимака екрана"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Нисам успео да учитам слику"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Нисам пронашао величину снимка екрана"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Не могу да направим оставу"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Неисправан снимак екрана"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Снимак екрана није доступан"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Снимак екрана"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "још %u погодак"
+msgstr[1] "још %u поготка"
+msgstr[2] "још %u погодака"
+msgstr[3] "још %u погодак"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Страница претраге"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Нисам пронашао програме"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "„%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Не могу да преузмем ажурирања фирмвера са извора „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Не могу да преузмем ажурирања са извора „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Не могу да преузмем ажурирања"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "Не могу да преузмем ажурирања: нема везе са интернетом"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr ""
+"Не могу да преузмем ажурирања са извора „%s“: нема довољно простора на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Не могу да преузмем ажурирања: нема довољно простора на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Не могу да преузмем ажурирања: потребна је пријава"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Не могу да преузмем ажурирања: пријава није исправна"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Не могу да преузмем ажурирања: немате овлашћење за инсталирање програма"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Не могу да преузмем списак ажурирања"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr ""
+"Не могу да инсталирам програм „%s“ јер преузимање са извора „%s“ није успело"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Не могу да инсталирам програм „%s“ јер преузимање није успело"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Не могу да инсталирам програм „%s“ јер извршно окружење „%s“ није доступно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Не могу да инсталирам програм „%s“ јер тај програм није подржан"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Не могу да инсталирам: нема везе са интернетом"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Не могу да инсталирам: Формат програма није исправан"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Не могу да инсталирам програм „%s“: нема довољно простора на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Не могу да инсталирам програм „%s“: била је потребна пријава"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Не могу да инсталирам програм „%s“: пријава није била исправна"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Не могу да инсталирам програм „%s“: немате овлашћење за инсталирање програма"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Не могу да инсталирам „%s“: струјно напајање је потребно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Не могу да инсталирам „%s“: ниво батерије је пренизак"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Не могу да инсталирам програм „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr ""
+"Не могу да ажурирам програм „%s“ из ризнице „%s“ јер преузимање није успело"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Не могу да ажурирам програм „%s“ јер преузимање није успело"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Не могу да инсталирам ажурирања из ризнице „%s“ јер преузимање није успело"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Не могу да инсталирам ажурирања јер преузимање није успело"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Не могу да ажурирам: нема везе са интернетом"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Не могу да ажурирам програм „%s“: нема довољно простора на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Не могу да инсталирам ажурирања: нема довољно простора на диску"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Не могу да ажурирам програм „%s“: била је потребна пријава"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Не могу да инсталирам ажурирања: потребна је идентификација"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Не могу да ажурирам програм „%s“: пријава није била исправна"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Не могу да инсталирам ажурирања: неисправна идентификација"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Не могу да ажурирам програм „%s“: немате овлашћење за ажурирање програма"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Не могу да инсталирам ажурирања: немате овлашћења за ажурирање програма"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Не могу да ажурирам програм „%s“: струјно напајање је потребно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr ""
+"Не могу да инсталирам ажурирања: уређај мора бити на наизменичном струјном "
+"напајању"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Не могу да ажурирам програм „%s“: ниво батерије је пренизак"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Не могу да инсталирам ажурирања: ниво батерије је пренизак"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Не могу да ажурирам програм „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Не могу да инсталирам ажурирања"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Не могу да се надоградим са дистрибуције „%s“ на дистрибуцију „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Не могу да надоградим на „%s“ зато што преузимање није успело"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: потребан је приступ интернету "
+"а тога нема"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: нема довољно простора на диску"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: била је потребна пријава"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: пријава није била исправна"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: немате овлашћење за "
+"надограђивање"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: струјно напајање је потребно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr ""
+"Не могу да се надоградим на дистрибуцију „%s“: ниво батерије је пренизак"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Не могу да се надоградим на дистрибуцију „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Не могу да уклоним програм „%s“: била је потребна пријава"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Не могу да уклоним програм „%s“: пријава није била исправна"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Не могу да уклоним програм „%s“: немате овлашћење за уклањање програма"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Не могу да уклоним програм „%s“: струјно напајање је потребно"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Не могу да уклоним програм „%s“: ниво батерије је пренизак"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Не могу да уклоним програм „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Не могу да покренем програм „%s“: део „%s“ није инсталиран"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Нема довољно слободног простора на диску, ослободите нешто простора и "
+"пробајте поново"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Нажалост, нешто је пошло наопако"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Нисам успео да инсталирам датотеку: није подржана"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Нисам успео да инсталирам датотеку: пријава није успела"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Нисам успео да инсталирам: није подржано"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Нисам успео да инсталирам: идентификација није успела"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Не могу да контактирам извор „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Програм „%s“ се мора поново покренути да бисте користили нове додатке."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Овај програм се мора поново покренути да бисте користили нове додатке."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Струјно напајање је потребно"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Ниво батерије је пренизак"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Извор: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Инсталирам)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Уклањам)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Уклони све"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Нема доступног описа ажурирања."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Инсталиран је %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Инсталирана ажурирања"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Додато"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Уклоњено"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Освежења"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Уназађивања"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Ниједно ажурирање није инсталирано на овај систем."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Има безбедносних ажурирања"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Препоручено је што раније инсталирање ових ажурирања"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Поново покрени и инсталирај"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Доступна су ажурирања програма"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Има важних ажурирања за систем и програме која су спремна за инсталирање"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Погледај"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u програм је ажуриран, потребно је поновно покретање"
+msgstr[1] "%u програма је ажурирано, потребно је поновно покретање"
+msgstr[2] "%u програма је ажуриран, потребно је поновно покретање"
+msgstr[3] "Један програм је ажуриран, потребно је поновно покретање"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u програм је ажуриран"
+msgstr[1] "%u програма је ажурирано"
+msgstr[2] "%u програма је ажурирано"
+msgstr[3] "Један програм је ажуриран"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "Програм „%s“ је ажуриран."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Поново покрените програм."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "Програми „%s“ и „%s“ су ажурирани."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "Потребно је поново покренути %u програм."
+msgstr[1] "Потребно је поново покренути %u програма."
+msgstr[2] "Потребно је поново покренути %u програма."
+msgstr[3] "Потребно је поново покренути један програм."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Укључујући програме „%s“, „%s“ и „%s“."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Ажурирања оперативног система нису доступна"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Надоградите систем да бисте и даље добијали безбедносна ажурирања."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Нова верзија дистрибуције %s је доступна за инсталацију"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Доступна су ажурирања програма"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Ажурирање програма није успело"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Није успело инсталирање важног ажурирања система."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Прикажи појединости\t"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Наодградња система је готова"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Добро дошли у дистрибуцију %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Програм је ажуриран"
+msgstr[1] "Програми су ажурирани"
+msgstr[2] "Програми су ажурирани"
+msgstr[3] "Један програм је ажуриран"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Важно ажурирање система је инсталирано."
+msgstr[1] "Важна ажурирања система су инсталирана."
+msgstr[2] "Важна ажурирања система су инсталирана."
+msgstr[3] "Једно важно ажурирање система је инсталирано."
+
+# Мислим да се ова ниска односи на део Програма који је посвећен рецензијама програма.
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Преглед"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Неуспех при инсталирању ажурирања"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Систем је већ ажуран."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Ажурирање је отказано."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Нема излаза на интернет иако је то потребно. Постарајте се да имате приступ "
+"интернету и покушајте поново."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Програми су наишли на безбедносне проблеме са ажурирањем. Поразговарајте са "
+"добављачем ваших програма за више појединости."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Нема довољно слободног простора на диску. Ослободите простор на диску па "
+"покушајте поново."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Нажалост, догодила се грешка приликом ажурирања. Сачекајте ново ажурирање па "
+"покушајте поново. Уколико се ова грешка опет догоди, пријавите то добављачу "
+"ваших програма."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Јуче, у %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Јуче, у %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Пре два дана"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Пре три дана"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Пре четири дана"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Пре пет дана"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Пре шест дана"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Пре недељу дана"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Пре две недеље"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Тражим нова ажурирања…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Подешавам ажурирања…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Ово може да потраје)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Последња провера: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Више нема подршке за дистрибуцију %s %s."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Ваш систем више није подржан."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "То значи да више не добија безбедоносна ажурирања."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Препоручено је да надоградите систем на новије издање."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Могу настати додатни новчани трошкови"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Провера ажурности приликом коришћења мобилне широкопојасне мреже може "
+"довести до повећања трошкова на вашој картици."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Ип_ак провери"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Нема мреже"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Потребан је приступ Интернету за проверу ажурирања."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Проверавам…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Провери да ли има ажурирања"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Страница ажурирања"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Програми су ажурирани"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Провера ажурности приликом коришћења мобилне широкопојасне мреже може "
+"довести до повећања трошкова на картици"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Ипак провери"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Повежи се и потражи ажурирања"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Подешавања мреже"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Самостално управљање ажурирањима је укључено"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Поново покрени и инсталирај"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Ажурирај све"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Уграђени фирмвер"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Захтева поновно покретање"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Ажурирања програма"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Фирмвер уређаја"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Преузми"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Препоручује вам се да направите резерву ваших података и датотека пре "
+"надограђивања."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Поново покр_ени сада"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Ажурирања биће примењена након што се рачунар поново покрене."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "Дистрибуција %s %s је сада доступна"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Чекам на преузимање дистрибуције %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Преузимам дистрибуцију %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s је спреман за инсталирање"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Велика надоградња, са новим функцијама и додатим исправкама."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Сазнај више"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Додајте, уклоните или ажурирајте програме на овом рачунару"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"ажурирања;освежења;доградње;надоградње;извори;ризнице;складишта;поставке;"
+"инсталација;уклањање;програм;софтвер;апликација;радња;исправке;апдејтови;"
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;ažuriranja;osveženja;dogradnje;nadogradnje;izvori;riznice;"
+"skladišta;postavke;instalacija;uklanjanje;program;softver;aplikacija;radnja;"
+"ispravke;apdejtovi;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Стварање и уређивање звука"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Програми за музику"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Прочишћавачи"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "ИРО"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Вештачка интелигенција"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Астрономија"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Хемија"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Језици"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Математика"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Роботика"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Акција"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Авантура"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Аркадне"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Блокови"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Табла"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Карте"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Опонашавачи"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Дечје игре"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Логика"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Играње улоге"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Спортови"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Стратегије"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3Д графика"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Фотографија"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Скенирање"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Векторска графика"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Прегледачи"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Календар"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "База података"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Финансије"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Обрађивање текста"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Слова"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kодеци"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Извори улаза"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Језички пакети"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Превод"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Хардверски управљачки програми"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Ћаскање"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Вести"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Веб прегледници"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Уређивачи текста"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Све"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Издвојено"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Уметност"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Биографија"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Стрипови"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Фантастика"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Здравље"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Историја"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Начин живљења"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Политика"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Спортови"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Звук и снимци"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Развојни алати"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Образовање и наука"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Игре"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Графика и фотографија"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Продуктивност"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Саопштења и вести"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Упуте"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Алатке"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Надоградње система"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"У надоградње су укључена побољшања стабилности, безбедности и рада система."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Преузимам издвојене слике…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Ендлес ОС"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Надоградња за Ендлес ОС, са новим функцијама и додатим исправкама."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Услуга ажурирања ЕОС-а није могла добавити и применити ажурирање."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Системски инсталатер датотека тока Гномових програма"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Нисам успео да обрадим аргументе линије наредби"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Морате навести тачно једно име датотеке"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Овај програм може користити само администратор"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Нисам успео да потврдим врсту садржаја"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Нисам успео да ископирам"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Преузимам додатне датотеке са метаподацима…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Преузимам податке о надоградњи…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Надоградите ваш систем ради нових могућности, побољшања брзине и боље "
+"стабилности."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Подршка за Флетпек (Flatpak)"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Флетпек је радни оквир за стоне Линукс програме"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Добављам флетпек метаподатке за %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Ажурирање „%s“ уређаја"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Ажурирање „%s“ система"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Ажурирање „%s“ угнежђеног контролера"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Ажурирање „%s“ управљачког мотора (ME)"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Ажурирање „%s“ корпоративног управљачког мотора (ME)"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Ажурирање „%s“ потрошачког управљачког мотора (ME)"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Ажурирање „%s“ контролера"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Ажурирање „%s“ тандерболт контролера"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Ажурирање „%s“ процесорског микрокода"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "Ажурирање „%s“ подешавања хардвера"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Преузимам потпис ажурирања фирмвера…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Преузимам ажурирања метаподатака фирмвера…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Подршка за надоградњу фирмвера"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Пружа подршку за надоградње фирмвера"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Преузимам оцене програма…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Подршка за оцене отворене радне површи"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ОДРС је услуга која пружа прегледе програма од стране корисника"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Складиште снепова"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Подршка за Снеп (Snap)"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Снеп је универзални Линукс пакет"
+
+#~ msgid "About %s"
+#~ msgstr "О програму „%s“"
+
+#~ msgid "%s ME"
+#~ msgstr "%s управљачки мотор (ME)"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Приказује сучеље управљања фасциклама"
+
+#~ msgid "Folder Name"
+#~ msgstr "Назив фасцикле"
+
+#~ msgid "_Add"
+#~ msgstr "_Додај"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Додај у фасциклу програма"
+
+#~ msgid "Top Rated"
+#~ msgstr "Најбоље оцене"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Подешавања проширења"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Проширења користите на сопствену одговорност. Ако имате проблема са "
+#~ "системом, препоручује вам се да их искључите."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Нисам успео да учитам делове"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS је успешно проверен!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Нисам успео да учитам датотеку"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Несачуване измене"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Списак са програмима је већ учитан."
+
+#~ msgid "Merge documents"
+#~ msgstr "Споји документе"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Одбаци измене"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Отвори AppStream датотеку"
+
+#~ msgid "_Open"
+#~ msgstr "_Отвори"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Сачувај AppStream датотеку"
+
+#~ msgid "_Save"
+#~ msgstr "_Сачувај"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Нисам успео да сачувам датотеку"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Дизајн банера за %s је обрисан."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Дизајн банера је обрисан."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Списак програма садржи несачуване измене."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Користи детаљно записивање"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Дизајнер банера за Гномове програме"
+
+#~ msgid "No Designs"
+#~ msgstr "Нема дизајна"
+
+#~ msgid "Error message here"
+#~ msgstr "Порука о грешци"
+
+#~ msgid "App ID"
+#~ msgstr "ИБ програма"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Избор уредника"
+
+#~ msgid "Category Featured"
+#~ msgstr "Издвојено у категорији"
+
+#~ msgid "Undo"
+#~ msgstr "Опозови"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Дизајнер банера"
+
+#~ msgid "New Banner"
+#~ msgstr "Нови банер"
+
+#~ msgid "Import from file"
+#~ msgstr "Увези из датотеке"
+
+#~ msgid "Export to file"
+#~ msgstr "Извези у датотеку"
+
+#~ msgid "Delete Design"
+#~ msgstr "Обриши дизајн"
+
+#~ msgid "Featured App"
+#~ msgstr "Издвојени програм"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Надоградња система"
+
+#~ msgid "Spacing"
+#~ msgstr "Размаци"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Количина размака међу садржаним елементима"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Притисните на ставке да их изаберете"
+
+#~ msgid "Select"
+#~ msgstr "Изабери"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Додај у фасциклу…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Премести у фасциклу…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Уклони из фасцикле"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Издвојени програми"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Дизајнирај банере за Гномове прогрме"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr ""
+#~ "AppStream;Software;App;АппСтрим;Софтвер;Апликација;Програми;Апп;Programi;"
+#~ "Softver;Aplikacija;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Проширења шкољке"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Подршка за веб апликације"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Изврши популарне веб програме унутар прегледача"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Ризница са проширењима Гномове шкољке"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Преузимам метаподатке проширења шкољке…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Проширења Гномове шкољке"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Све"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Пријави се или региструј…"
+
+#~ msgid "Continue"
+#~ msgstr "Настави"
+
+#~ msgid "Use"
+#~ msgstr "Користи"
+
+#~ msgid "Add another…"
+#~ msgstr "Додај друго…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Каталог софтвера је учитан"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Да ли сигурно желите да купите „%s“?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s ће бити инсталиран и биће вам наплаћено %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Купи"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Пријављен као %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Пријави се…"
+
+#~ msgid "Sign out"
+#~ msgstr "Одјава"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Не могу да купим програм „%s“: била је потребна пријава"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Не могу да купим програм „%s“: пријава није била исправна"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Не могу да купим програм „%s“: нема подешеног начина плаћања"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Не могу да купим програм „%s“: наплата је одбијена"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Не могу да купим програм „%s“"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Да наставите, потребан вам је Убунту Један налог."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Да наставите, потребан је ваш Убунту Један налог."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Приказује податке профилисања за услугу"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Да наставите треба да се пријавите на „%s“."
+
+#~ msgid "Email address"
+#~ msgstr "Адреса е-поште"
+
+#~ msgid "I have an account already"
+#~ msgstr "Већ имам налог"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Желим сада да се региструјем за налог"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Заборавио сам лозинку"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Сам се пријави следећи пут"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr ""
+#~ "Унесите ваш једновремени пин за потврђивање идентитета са два чиниоца."
+
+#~ msgid "PIN"
+#~ msgstr "ПИН"
+
+#~ msgid "Authenticate"
+#~ msgstr "Потврди идентитет"
+
+#~ msgid "_About"
+#~ msgstr "_О програму"
+
+#~ msgid "_Quit"
+#~ msgstr "_Изађи"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Податке о „%s“, као и податке о набављању кодека који може пуштати ову "
+#~ "врсту датотеке можете пронаћи на веб страници."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Не могу се инсталирати програми док се ово не разреши."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "За више података, погледајте %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Не могу да ажурирам програм „%s“ из „%s“"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Преузимам нова ажурирања…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Поново покрени и инсталирај"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Аж_урирај све"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Поново покрени и _инсталирај"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Добављам извор извршног окружења…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Преузимам ажурирања фирмвера…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Преузимам страницу програма…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Подршка за Лимбу"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Лимба пружа програмерима једноставан начин за прављење програмских пакета"
+
+#~ msgid "Steam Support"
+#~ msgstr "Подршка за Стим (Steam)"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Крајња платформа за забаву од Валва"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Поређано по називу"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Поређано по оцени"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Списак додатних извора који су претходно били укључени"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Списак додатних извора који су претходно били укључени приликом "
+#~ "инсталације програма трећих лица."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Приказује неслободан софтвер у резултатима претраге"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Списак неслободних извора који се могу по избору укључити"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Претподешено међудејство између играча без могућности ћаскања"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Размена корисничких података са трећим странама"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Обезбеђује приступ додатном софтверу, укључујући веб прегледнике и игре."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Да укључим изворе власничког софтвера?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Нема инсталираних програма или додатака, друге врсте програма могу бити "
+#~ "инсталиране"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Обично има ограничења на коришћење и на приступ изворном коду."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Извори власничког софтвера"
+
+#~ msgid "Remove Source"
+#~ msgstr "Уклони извор"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Додатни извори програма се могу преузети са интернета. Они ће вам "
+#~ "омогућити инсталирање програма који нису доступни у оперативном систему "
+#~ "%s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Уклањањем извора уклонићете такође и све програме које сте са њега "
+#~ "инсталирали."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Нема програма инсталираних са овог извора"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Инсталирани са овог извора"
+
+#~ msgid "Source Details"
+#~ msgstr "Појединости програма"
+
+#~ msgid "Last Checked"
+#~ msgstr "Последња провера"
+
+#~ msgid "Added"
+#~ msgstr "Додат"
+
+#~ msgid "Website"
+#~ msgstr "Веб страница"
+
+#~ msgid "page1"
+#~ msgstr "страница1"
+
+#~ msgid "page2"
+#~ msgstr "страница2"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "„%s“ [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgid "Total"
+#~ msgstr "Укупно"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Не могу да нађем „%s“"
+
+#~ msgid "_Install All"
+#~ msgstr "_Инсталирај све"
+
+#~ msgid "Other Updates"
+#~ msgstr "Друга ажурирања"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Нисам успео да инсталирам „%s“."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Нисам успео да уклоним „%s“."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Уверите се да имате приступ интернету и покушајте поново."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Ослободите простор на диску па покушајте поново."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Ако се проблем понови, обратите се достављачу софтвера."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Све"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Издвојено"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Астрономија"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Хемија"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Математика"
+
+#~ msgid "Science"
+#~ msgstr "Наука"
+
+#~ msgid " or "
+#~ msgstr " или "
+
+#~ msgid "3rd party"
+#~ msgstr "трећих лица"
+
+#~ msgid "web app"
+#~ msgstr "програми веба"
+
+#~ msgid "nonfree"
+#~ msgstr "неслободни"
+
+#~ msgid "_Installing"
+#~ msgstr "_Инсталирам"
+
+#~ msgid "_Removing"
+#~ msgstr "_Уклањам"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Непозната"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Израчунавам…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Непозната"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Овај програм испоручују треће стране."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Овај програм испоручује трећа страна и можда садржи неслободне састојке."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Овај програм можда садржи неслободне састојке."
+
+#~ msgid "_History"
+#~ msgstr "_Историјат"
+
+#~ msgid "Size"
+#~ msgstr "Величина"
+
+#~ msgid "non-free"
+#~ msgstr "неслободни"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Препоручени канцеларијски програми"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Извори програма вам дају приступ додатним програмима."
+
+#~ msgid "One Star"
+#~ msgstr "Једна звездица"
+
+#~ msgid "Two Stars"
+#~ msgstr "Две звездице"
+
+#~ msgid "Three Stars"
+#~ msgstr "Три звездице"
+
+#~ msgid "Four Stars"
+#~ msgstr "Четири звездице"
+
+#~ msgid "Five Stars"
+#~ msgstr "Пет звездица"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Нисам пронашао податке тока програма"
+
+#~ msgid "Audio"
+#~ msgstr "Звук"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Уређивање"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Базе података"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Нарезивање диска"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Хам радио"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "МИДИ"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Мешачи"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Музика"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Снимачи"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Секвенцери"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Тјунери"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Изградња"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Базе података"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "ИРО"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Профилисање"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Превођење"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Веб програмирање"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Биологија"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Рачунарство"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Грађевинарство"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Приказивање података"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Економија"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Електрика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Електроника"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Инжењерство"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Геологија"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Геонаука"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Историја"
+
+# https://sr.wiktionary.org/sr/%D1%85%D1%83%D0%BC%D0%B0%D0%BD%D0%B8%D0%BE%D1%80%D0%B0
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Хуманизам"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Обрада слика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Литература"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Карте"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Музика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Анализа бројева"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Паралелно рачунарство"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Физика"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Духовност"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Пуцачине"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Опонашање (симулације)"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Спортске игре"
+
+#~ msgid "Graphics"
+#~ msgstr "Графика"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2Д графика"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "ОЦР"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Издаваштво"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Растер графика"
+
+#~ msgid "Internet"
+#~ msgstr "Интернет"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Позивање (диал-ап)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "Ел. пошта"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Довод"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Пренос датотека"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Хам радио"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Брзе поруке"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "ИРЦ клијенти"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Надзор"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "П2П"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Удаљени приступ"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Телефонија"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Веб програмирање"
+
+#~ msgid "Office"
+#~ msgstr "Канцеларија"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Графикон"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Управљање контактима"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Речник"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "Ел. пошта"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Дијаграм тока"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "ЛДП (PDA)"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Фотографија"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Излагање"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Управљање пројектима"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Издаваштво"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Табеле"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Прегледач"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Уметност"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Вештачка интелигенција"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Астрономија"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Биологија"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Хемија"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Рачунарство"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Изградња"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Приказивање података"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Економија"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Електрика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Електроника"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Инжењерство"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Географија"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Геологија"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Геонаука"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Историја"
+
+# https://sr.wiktionary.org/sr/%D1%85%D1%83%D0%BC%D0%B0%D0%BD%D0%B8%D0%BE%D1%80%D0%B0
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Хуманизам"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Обрада слика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Језици"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Литература"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Карте"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Математика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Медицина"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Анализа бројева"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Паралелно рачунарство"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Физика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Роботика"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Духовност"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Спортови"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Опонашавач (емулатор)"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Управник датотека"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Алатке за датотеке"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Праћење"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Безбедност"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Емулатор терминала"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Приступачност"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Архивирање"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Калкулатор"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Часовник"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Паковање"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Алатке датотека"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Карте"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Духовност"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Алати за телефонију"
+
+#~ msgid "Video"
+#~ msgstr "Видео"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Уређивање"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "База података"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Нарезивање диска"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Пуштачи"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Снимачи"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "ТВ"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Претходно ажурирање је остало недовршено."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Ажурирање се не може инсталирати. Ово се често дешава уколико је проблем "
+#~ "у самом ажурирању. Сачекајте ново ажурирање и онда покушајте поново."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Мрежни програм"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Унеси режим услуге ГПрограма"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Једно ажурирање није означено на прави начин."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Ажурирање не може бити довршено."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Затражено је ажурирање ван мреже али ниједан пакет није затражио "
+#~ "ажурирање."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Нема више простора на диску."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Једно ажурирање није успело да се исправно инсталира."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Ажурирање ван мреже није успело на очекивани начин."
+
+#~ msgid "No sources found."
+#~ msgstr "Нисам пронашао изворе."
+
+#~ msgid "OK"
+#~ msgstr "У реду"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i инсталирани програм и %i додатак"
+#~ msgstr[1] "%i инсталирана програма и %i додатка"
+#~ msgstr[2] "%i инсталираних програма и %i додатака"
+#~ msgstr[3] "Један инсталирани програм и један додатак"
+
+#~ msgid "Picks"
+#~ msgstr "Изабрани"
+
+#~ msgid "Done"
+#~ msgstr "Готово"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Подешава ниво наведеног прочишћавања"
+
+#~ msgid "_Pending"
+#~ msgstr "_На чекању"
+
+# timezone.
+#~ msgid "Complicated!"
+#~ msgstr "Замршено!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Скорашња освежења софтвера"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "Базе података"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "Хам радио"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "Развој веба"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "Алатке за датотеке"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "Карте"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "Духовност"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "Словни ликови"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "Kодеци"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "Извори улаза"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "Пакети језика"
+
+#~ msgid "Description"
+#~ msgstr "Опис"
+
+#~ msgid "The search term to use when starting the UI"
+#~ msgstr "Обрасци претраге за коришћење приликом покретања сучеља"
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "_Инсталираних (%d)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "_Освежења (%d)"
diff --git a/po/sr@latin.po b/po/sr@latin.po
new file mode 100644
index 0000000..1fa8fc2
--- /dev/null
+++ b/po/sr@latin.po
@@ -0,0 +1,5220 @@
+# Serbian translation of gnome-software
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2012—2017.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Translators:
+# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2013—2017.
+# Miloš Popović <gpopac@gmail.com>, 2015.
+# Marko M. Kostić <marko.m.kostic@gmail.com>, 2016.
+# Borisav Živanović <borisavzivanovic@gmail.com>, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2018-03-09 08:58+0000\n"
+"PO-Revision-Date: 2018-03-03 07:10+0100\n"
+"Last-Translator: Marko M. Kostić <marko.m.kostic@gmail.com>\n"
+"Language-Team: \n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Project-Style: gnome\n"
+"X-Generator: Poedit 2.0.6\n"
+"X-Poedit-Bookmarks: -1,-1,49,-1,-1,-1,-1,-1,-1,-1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Gnomovi programi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Gnomov upravnik programa"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Programi vam dozvoljavaju da pronađete i instalirate nove programe i "
+"proširenja sistema i da uklonite postojeće instalirane programe."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Gnomovi programi prikazuju izdvojene i popularne programe sa korisnim "
+"opisima i nekoliko snimaka ekrana po programu. Programi mogu biti pronađeni "
+"pregledanjem spiska kategorija ili pretraživanjem. Takođe vam omogućava "
+"održavanje ažurnog sistema korišćenjem tehnologije vanmrežnih ažuriranja."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Panel pregleda"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Panel pojedinosti"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Panel instaliranih"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Panel ažuriranja"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Pojedinosti ažuriranja"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1031
+msgid "The GNOME Project"
+msgstr "Gnomov projekat"
+
+#: data/org.gnome.software.external-appstream.policy.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Instaliraj datoteku toka u sistemsku lokaciju"
+
+#: data/org.gnome.software.external-appstream.policy.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Instaliram datoteku toka u sistemsku lokaciju"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Spisak saglasnih projekata"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Ovo je spisak saglasnih projekata koje treba prikazati kao što je Gnom, KDE "
+"i IksFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Da li Gnomovi programi treba da upravljaju ažuriranjima i nadogradnjama"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Ako je isključeno, Gnomovi programi će sakriti površ za ažuriranja, neće "
+"izvršavati bilo kakva samostalna ažuriranja ili pitati za nadogradnje."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Whether to automatically download updates"
+msgstr "Da li će sam preuzeti ažuriranja"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background "
+"and prompts the user to install them when ready."
+msgstr ""
+"Ako je uključeno, Gnomovi programi će sam preuzeti ažuriranja u pozadini i "
+"tražiti od korisnika da ih instalira kada bude bio spreman."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Da li treba vršiti samostalno osvežavanje na ograničenoj vezi"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Ako je uključeno, Gnomovi programi će se samostalno osvežavati u pozadini "
+"(preuzimanje metapodataka, provera novih dostupnih ažuriranja i slično) čak i "
+"preko ograničene veze što može dovesti do novčanih troškova po korisnika."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Da li je ovo prvo pokretanje Gnomovih programa"
+
+#: data/org.gnome.software.gschema.xml:29
+msgid "Show star ratings next to applications"
+msgstr "Prikazuje zvezdice ocenjivanja pored programa"
+
+#: data/org.gnome.software.gschema.xml:33
+msgid "Filter applications based on the default branch set for the remote"
+msgstr ""
+"Filtriraj programe na osnovu podrazumevane grane podešene za udaljeno mesto"
+
+#: data/org.gnome.software.gschema.xml:37
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Neslobodni programi prikazuju prozorče upozorenja pre instalacije"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Kada se instaliraju neslobodni programi može biti prikazano prozorče "
+"upozorenja. Ovo odlučuje da li je to prozorče potisnuto."
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "A list of popular applications"
+msgstr "Spisak popularnih programa"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "Spisak programa za korišćenje, koji prepisuje one koje odredi sistem."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "The last update check timestamp"
+msgstr "Vremenska oznaka poslednje provere ažuriranja"
+
+#: data/org.gnome.software.gschema.xml:51
+msgid "The last upgrade notification timestamp"
+msgstr "Vremenska oznaka obaveštenja poslednje nadogradnje"
+
+#: data/org.gnome.software.gschema.xml:55
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Vremenska oznaka prvog bezbednosnog ažuriranja, očišćenog nakon ažuriranja"
+
+#: data/org.gnome.software.gschema.xml:59
+msgid "The last update timestamp"
+msgstr "Vremenska oznaka poslednjeg ažuriranja"
+
+#: data/org.gnome.software.gschema.xml:63
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Starost u sekundama nakon kojih je potrebno potvrditi da je uzvodni snimak "
+"ekrana i dalje ispravan"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Biranje veće vrednosti će uzrokovati manje obilazaka ka udaljenom serveru ali "
+"će ažuriranje snimaka ekrana i prikaz korisniku trajati duže. Vrednost „0“ "
+"znači da se nikada ne proverava server ukoliko slika već postoji u kešu."
+
+#: data/org.gnome.software.gschema.xml:73
+msgid "The server to use for application reviews"
+msgstr "Server koji će se koristiti za preglede programa"
+
+#: data/org.gnome.software.gschema.xml:77
+msgid "The minimum karma score for reviews"
+msgstr "Najmanji rezultat karme za preglede"
+
+#: data/org.gnome.software.gschema.xml:78
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Pregledi sa karmom sa manjim brojem od ovog se neće prikazivati."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Spisak zvaničnih izvora koji se ne trebaju smatrati trećom stranom"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "A list of official repositories that should be considered free software"
+msgstr "Spisak zvaničnih izvora koji se trebaju smatrati slobodnim softverom"
+
+#: data/org.gnome.software.gschema.xml:90
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Adresa dozvole za korišćenje kada se program treba smatrati slobodnim "
+"softverom"
+
+#: data/org.gnome.software.gschema.xml:94
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "Instalira skup programa za sve korisnike na sistemu gde je to moguće"
+
+#: data/org.gnome.software.gschema.xml:98
+msgid "Show the folder management UI"
+msgstr "Prikazuje sučelje upravljanja fasciklama"
+
+#: data/org.gnome.software.gschema.xml:102
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Dopusti pristup prozorčetu izvora softvera"
+
+#: data/org.gnome.software.gschema.xml:106
+msgid "Offer upgrades for pre-releases"
+msgstr "Nudi nadogradnje za predizdanja"
+
+#: data/org.gnome.software.gschema.xml:110
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Prikazuje neke UI elemente obaveštavajući korisnika da neki program nije "
+"slobodan"
+
+#: data/org.gnome.software.gschema.xml:114
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Prikaži upit za instaliranje izvora neslobodnog softvera"
+
+#: data/org.gnome.software.gschema.xml:118
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Prikaži veličinu instaliranih programa u spisku instaliranih programa"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:122
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://sr.wikipedia.org/wiki/Vlasnički_softver'"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Putanja koja objašnjava neslobodan i vlasnički softver"
+
+#: data/org.gnome.software.gschema.xml:127
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Spisak URL-ova koji pokazuju na datoteke toka koje će biti preuzete u ap-"
+"info fasciklu"
+
+#: data/org.gnome.software.gschema.xml:131
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "Instaliraj datoteku toka u sistemsku lokaciju"
+
+#: data/org.gnome.software.gschema.xml:135
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Omogući riznicu za proširenja Gnomove školjke"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Instalacija programa"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Instalirajte izabrane programe na sistem"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/gnome-software-local-file.desktop.in:10
+msgid "system-software-install"
+msgstr "system-software-install"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Izaberi sve"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Poništi izbor"
+
+#: src/gnome-software.ui:24 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programi"
+
+#: src/gnome-software.ui:43 src/gs-update-dialog.ui:21
+msgid "Go back"
+msgstr "Idite nazad"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:77
+msgid "_All"
+msgstr "_Sve"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:104
+msgid "_Installed"
+msgstr "_Instalirani"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:155
+msgid "_Updates"
+msgstr "Až_uriranja"
+
+#: src/gnome-software.ui:251
+msgid "Search"
+msgstr "Pretraži"
+
+#. button in the info bar
+#: src/gnome-software.ui:350 src/gs-repos-dialog.ui:6 src/gs-repos-dialog.ui:20
+msgid "Software Repositories"
+msgstr "Riznice programa"
+
+#. button in the info bar
+#: src/gnome-software.ui:361
+msgid "Examine Disk"
+msgstr "Ispitaj disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:372 src/gs-updates-page.c:1435
+msgid "Network Settings"
+msgstr "Podešavanja mreže"
+
+#. button in the info bar
+#: src/gnome-software.ui:383
+msgid "Restart Now"
+msgstr "Ponovo pokreni"
+
+#. button in the info bar
+#: src/gnome-software.ui:394
+msgid "More Information"
+msgstr "Još podataka"
+
+#: src/gs-app-addon-row.c:96 src/gs-app-row.c:428
+msgid "Pending"
+msgstr "Na čekanju"
+
+#: src/gs-app-addon-row.c:102 src/gs-app-row.ui:209 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Instaliran"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:106 src/gs-app-row.c:217 src/gs-details-page.c:464
+#: src/gs-third-party-repo-row.c:113
+msgid "Installing"
+msgstr "Instaliram"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:110 src/gs-app-row.c:223 src/gs-repo-row.c:140
+#: src/gs-third-party-repo-row.c:120
+msgid "Removing"
+msgstr "Uklanjam"
+
+#: src/gs-app-folder-dialog.c:309
+msgid "Folder Name"
+msgstr "Naziv fascikle"
+
+#: src/gs-app-folder-dialog.c:320 src/gs-app-folder-dialog.ui:16
+#: src/gs-details-page.ui:329 src/gs-editor.c:623 src/gs-editor.c:655
+#: src/gs-installed-page.c:610 src/gs-removal-dialog.ui:33
+#: src/gs-review-dialog.ui:23 src/gs-upgrade-banner.ui:131
+msgid "_Cancel"
+msgstr "_Otkaži"
+
+#: src/gs-app-folder-dialog.c:325 src/gs-app-folder-dialog.ui:24
+msgid "_Add"
+msgstr "_Dodaj"
+
+#: src/gs-app-folder-dialog.ui:5
+msgid "Add to Application Folder"
+msgstr "Dodaj u fasciklu programa"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:124
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Režim pokretanja: „updates“ (ažuriranja), „updated“ (ažurno), "
+"„installed“ (instalirano) ili „overview“ (pregled)"
+
+#: src/gs-application.c:124
+msgid "MODE"
+msgstr "REŽIM"
+
+#: src/gs-application.c:126
+msgid "Search for applications"
+msgstr "Traži programe"
+
+#: src/gs-application.c:126
+msgid "SEARCH"
+msgstr "TRAŽI"
+
+#: src/gs-application.c:128
+msgid "Show application details (using application ID)"
+msgstr "Prikazuje pojedinosti programa (koristeći IB programa)"
+
+#: src/gs-application.c:128 src/gs-application.c:132
+msgid "ID"
+msgstr "IB"
+
+#: src/gs-application.c:130
+msgid "Show application details (using package name)"
+msgstr "Prikazuje pojedinosti programa (koristeći naziv paketa)"
+
+#: src/gs-application.c:130
+msgid "PKGNAME"
+msgstr "NZVPKTA"
+
+#: src/gs-application.c:132
+msgid "Install the application (using application ID)"
+msgstr "Prikazuje program (koristeći IB programa)"
+
+#: src/gs-application.c:134
+msgid "Open a local package file"
+msgstr "Otvara lokalnu datoteku sa paketom"
+
+#: src/gs-application.c:134
+msgid "FILENAME"
+msgstr "NAZIV DATOTEKE"
+
+#: src/gs-application.c:136
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Vrsta interakcije koja se očekuje za ovu radnju: bilo \"none\", \"notify\" "
+"ili \"full\""
+
+#: src/gs-application.c:139
+msgid "Show verbose debugging information"
+msgstr "Prikazuje opširne podatke pročišćavanja"
+
+#: src/gs-application.c:141
+msgid "Show profiling information for the service"
+msgstr "Prikazuje podatke profilisanja za uslugu"
+
+#: src/gs-application.c:143
+msgid "Quit the running instance"
+msgstr "Zatvara pokrenuti primerak"
+
+#: src/gs-application.c:145
+msgid "Prefer local file sources to AppStream"
+msgstr "Daje prednost lokalnim izvorima datoteka nad tokom programa"
+
+#: src/gs-application.c:147
+msgid "Show version number"
+msgstr "Prikazuje broj izdanja"
+
+#: src/gs-application.c:344
+msgid "translator-credits"
+msgstr ""
+"Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
+"Marko M. Kostić <marko.m.kostic@gmail.com>\n"
+"Borisav Živanović <borisavzivanovic@gmail.com>\n"
+"\n"
+"http://prevod.org — prevod na srpski jezik."
+
+#. TRANSLATORS: this is the title of the about window, e.g.
+#. * 'About Software' or 'About Application Installer' where the %s is
+#. * the application name chosen by the distro
+#: src/gs-application.c:351
+#, c-format
+msgid "About %s"
+msgstr "O programu „%s“"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:355
+msgid "A nice way to manage the software on your system."
+msgstr "Fin način za upravljanje programima na vašem sistemu."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:172
+msgid "Visit website"
+msgstr "Poseti veb stranicu"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:177
+msgid "Install…"
+msgstr "Instaliraj…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:184
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:191 src/gs-common.c:276 src/gs-page.c:568
+msgid "Install"
+msgstr "Instaliraj"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:198
+msgid "Update"
+msgstr "Ažuriraj"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:202 src/gs-app-row.c:211 src/gs-page.c:725
+#: src/gs-repos-dialog.c:272
+msgid "Remove"
+msgstr "Ukloni"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:328
+msgid "Device cannot be used during update."
+msgstr "Uređaj ne može biti korišćen za vreme ažuriranja."
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-app-row.c:338 src/gs-details-page.ui:988
+msgid "Source"
+msgstr "Izvor"
+
+#. TRANSLATORS: this is when the service name is not known
+#: src/gs-auth-dialog.c:69
+msgid "To continue you need to sign in."
+msgstr "Da nastavite treba da se prijavite."
+
+#. TRANSLATORS: the %s is a service name, e.g. "Ubuntu One"
+#: src/gs-auth-dialog.c:73
+#, c-format
+msgid "To continue you need to sign in to %s."
+msgstr "Da nastavite treba da se prijavite na „%s“."
+
+#: src/gs-auth-dialog.ui:70
+msgid "Email address"
+msgstr "Adresa e-pošte"
+
+#: src/gs-auth-dialog.ui:94
+msgid "I have an account already"
+msgstr "Već imam nalog"
+
+#: src/gs-auth-dialog.ui:113
+msgid "Password"
+msgstr "Lozinka"
+
+#: src/gs-auth-dialog.ui:137
+msgid "I want to register for an account now"
+msgstr "Želim sada da se registrujem za nalog"
+
+#: src/gs-auth-dialog.ui:154
+msgid "I have forgotten my password"
+msgstr "Zaboravio sam lozinku"
+
+#: src/gs-auth-dialog.ui:181
+msgid "Sign in automatically next time"
+msgstr "Sam se prijavi sledeći put"
+
+#: src/gs-auth-dialog.ui:210
+msgid "Enter your one-time pin for two-factor authentication."
+msgstr "Unesite vaš jednovremeni pin za potvrđivanje identiteta sa dva činioca."
+
+#: src/gs-auth-dialog.ui:223
+msgid "PIN"
+msgstr "PIN"
+
+#: src/gs-auth-dialog.ui:325
+msgid "Authenticate"
+msgstr "Potvrdi identitet"
+
+#: src/gs-auth-dialog.ui:337
+msgid "Continue"
+msgstr "Nastavi"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:194
+msgid "Other"
+msgstr "Drugo"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:199
+msgid "All"
+msgstr "Sve"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:203
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:501
+#, c-format
+msgid "Featured %s"
+msgstr "Izdvojeno u kategoriji „%s“"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:24
+msgid "Top Rated"
+msgstr "Najbolje ocene"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#: src/gs-category-page.ui:30 src/gs-editor.ui:296
+msgid "Name"
+msgstr "Naziv"
+
+#. TRANSLATORS: A label for a button to show the settings for
+#. the selected shell extension.
+#: src/gs-category-page.ui:137 src/gs-details-page.c:361
+msgid "Extension Settings"
+msgstr "Podešavanja proširenja"
+
+#: src/gs-category-page.ui:166
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"Proširenja koristite na sopstvenu odgovornost. Ako imate problema sa "
+"sistemom, preporučuje vam se da ih isključite."
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:197
+msgid "Show"
+msgstr "Prikaži"
+
+#: src/gs-category-page.ui:219
+msgid "Subcategories filter menu"
+msgstr "Meni filtera potkategorija"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:267
+msgid "Sort"
+msgstr "Poređaj po"
+
+#: src/gs-category-page.ui:288
+msgid "Subcategories sorting menu"
+msgstr "Meni sortiranja potkategorija"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:206
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Unesi broj od 1 do %u:"
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:269
+msgid "Choose an application:"
+msgstr "Odaberite program:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:136
+msgid "OS updates are now installed"
+msgstr "Ažuriranja sistema su sada instalirana"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:139
+msgid "Recently installed updates are available to review"
+msgstr "Pregled skoro instaliranih ažuriranja je dostupan"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:143
+#, c-format
+msgid "%s is now installed"
+msgstr "„%s“ je sada instaliran"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:146
+msgid "Application is ready to be used."
+msgstr "Program je spreman za upotrebu."
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:152
+msgid "Launch"
+msgstr "Pokreni"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:210
+msgid "Install Third-Party Software?"
+msgstr "Da instaliram programe treće strane?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:214
+msgid "Enable Third-Party Software Repository?"
+msgstr "Da uključim riznicu programa treće strane?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:230
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"„%s“ nije <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">nije slobodan softver i softver otvorenog izvornog koda</"
+"a>, a obezbeđuje ga „%s“."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:240
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s obezbeđuje „%s“"
+
+#: src/gs-common.c:249
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Ova riznica programa mora biti uključena da biste nastavili instalaciju."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:259
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"Instalacija ili korišćenje „%s“ može biti protivzakonito u nekom državama."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:265
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Instalacija ili korišćenje ovog kodeka može biti protivzakonito u nekom "
+"državama."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:272
+msgid "Don’t Warn Again"
+msgstr "Ne upozoravaj više"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:281
+msgid "Enable and Install"
+msgstr "Uključi i instaliraj"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:426
+msgid "Detailed errors from the package manager follow:"
+msgstr "Opširnije greške upravnika paketa slede:"
+
+#: src/gs-common.c:445 src/gs-details-page.ui:595
+msgid "Details"
+msgstr "Pojedinosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:75
+msgid "No cartoon violence"
+msgstr "Nema crtanog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Cartoon characters in unsafe situations"
+msgstr "Likovi iz crtaća u nepoželjnim situacijama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:81
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Likovi iz crtaća u agresivnom sukobu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:84
+msgid "Graphic violence involving cartoon characters"
+msgstr "Grafičko nasilje koje uključuje likove iz crtaća"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "No fantasy violence"
+msgstr "Nema fantazijskog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:90
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Likovi u nesigurnim situacijama koje se lako razlikuju od stvarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:93
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Likovi u agresivnom sukobu koji se lako razlikuje od stvarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Grafičko nasilje koje se lako razlikuje od stvarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:99
+msgid "No realistic violence"
+msgstr "Nema realističnog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:102
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Blago stvarni likovi u nesigurnim situacijama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Prikaz stvarnih likova u agresivnom sukobu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:108
+msgid "Graphic violence involving realistic characters"
+msgstr "Grafičko nasilje koje uključuje stvarne likove"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:111
+msgid "No bloodshed"
+msgstr "Nema krvoprolića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "Unrealistic bloodshed"
+msgstr "Nerealno krvoproliće"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:117
+msgid "Realistic bloodshed"
+msgstr "Realno krvoproliće"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:120
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Prikaz krvoprolića i sakaćenje delova tela"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:123
+msgid "No sexual violence"
+msgstr "Nema seksualnog nasilja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "Rape or other violent sexual behavior"
+msgstr "Silovanje ili drugo nasilno seksualno ponašanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:129
+msgid "No references to alcohol"
+msgstr "Nema upućivanja na alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:132
+msgid "References to alcoholic beverages"
+msgstr "Upućivanje na alkoholna pića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:135
+msgid "Use of alcoholic beverages"
+msgstr "Upotreba alkoholnih pića"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "No references to illicit drugs"
+msgstr "Nema upućivanja na zabranjene droge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:141
+msgid "References to illicit drugs"
+msgstr "Upućivanje na zabranjene droge"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "Use of illicit drugs"
+msgstr "Upotreba zabranjenih droga"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:147
+msgid "References to tobacco products"
+msgstr "Upućivanje na duvanske proizvode"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:150
+msgid "Use of tobacco products"
+msgstr "Upotreba duvanskih proizvoda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:153
+msgid "No nudity of any sort"
+msgstr "Nema bilo kakve nagosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Brief artistic nudity"
+msgstr "Kratka umetnička golotinja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:159
+msgid "Prolonged nudity"
+msgstr "Produžena golotinja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:162
+msgid "No references or depictions of sexual nature"
+msgstr "Nema seksualnih prikaza ili upućivanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "Provocative references or depictions"
+msgstr "Provokativne upute ili prikazi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:168
+msgid "Sexual references or depictions"
+msgstr "Seksualne upute ili prikazi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Graphic sexual behavior"
+msgstr "Grafičko seksualno ponašanje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:174
+msgid "No profanity of any kind"
+msgstr "Nema bilo kakve vulgarnosti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:177
+msgid "Mild or infrequent use of profanity"
+msgstr "Blaga ili retka upotreba psovki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Moderate use of profanity"
+msgstr "Umerena upotreba psovki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:183
+msgid "Strong or frequent use of profanity"
+msgstr "Jaka ili česta upotreba psovki"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:186
+msgid "No inappropriate humor"
+msgstr "Nema neumesnog humora"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Slapstick humor"
+msgstr "Urnebesna komedija"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:192
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgaran ili neumesni humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:195
+msgid "Mature or sexual humor"
+msgstr "Erotski i humor za odrasle"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No discriminatory language of any kind"
+msgstr "Nema bilo kakvog diskriminacionog govora"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:201
+msgid "Negativity towards a specific group of people"
+msgstr "Negativnost prema određenoj grupi ljudi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminacija osmišljena da izazove emotivnu povredu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:207
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Eksplicitna diskriminacija na osnovu pola, seksualnosti, rase ili "
+"veroispovesti"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:210
+msgid "No advertising of any kind"
+msgstr "Nema bilo kakvog oglašavanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Product placement"
+msgstr "Plasman proizvoda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:216
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Eksplicitno upućivanje na naročite robne marke ili zaštićene proizvode"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:219
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Korisnici se ohrabruju da kupuju određene stavke u stvarnom svetu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "No gambling of any kind"
+msgstr "Nema bilo kakvog kockanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Gambling on random events using tokens or credits"
+msgstr "Kockanje na nasumičnim događajima koji koriste žetone ili kredite"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:228
+msgid "Gambling using “play” money"
+msgstr "Kockanje koje koristi „igrački“ novac (play)"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:231
+msgid "Gambling using real money"
+msgstr "Kockanje koje koristi stvarni novac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "No ability to spend money"
+msgstr "Ne može se trošiti stvaran novac"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:237
+msgid "Users are encouraged to donate real money"
+msgstr "Korisnici se ohrabruju da doniraju stvarni novac"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:240
+msgid "Ability to spend real money in-game"
+msgstr "Sposobnost potrošnje stvarnog novca u igri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "No way to chat with other users"
+msgstr "Nema načina za ćaskanje sa drugim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:246
+msgid "User-to-user game interactions without chat functionality"
+msgstr "Međudejstvo između korisnika bez mogućnosti ćaskanja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:249
+msgid "Moderated chat functionality between users"
+msgstr "Umerena mogućnost ćaskanja između korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Uncontrolled chat functionality between users"
+msgstr "Nekontrolisana mogućnost ćaskanja između korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:255
+msgid "No way to talk with other users"
+msgstr "Nema načina za razgovor sa drugim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:258
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Nekontrolisana mogućnost zvučnog i video ćaskanja između korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Nema razmene korisničkih imena društvenih mreža ili adresa elektronske pošte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:264
+msgid "Sharing social network usernames or email addresses"
+msgstr ""
+"Razmena korisničkih imena društvenih mreža ili adresa elektronske pošte"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:267
+msgid "No sharing of user information with 3rd parties"
+msgstr "Nema razmene korisničkih podataka sa trećim stranama"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "Checking for the latest application version"
+msgstr "Proverava poslednje izdanje programa"
+
+#. v1.1
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:273
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Dele se dijagnostički podaci preko kojih drugi ne mogu prepoznati korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:276
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Dele se dijagnostički podaci preko kojih drugi mogu prepoznati korisnika"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:279
+msgid "No sharing of physical location to other users"
+msgstr "Nema razmene fizičke lokacije sa drugim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:282
+msgid "Sharing physical location to other users"
+msgstr "Razmena stvarnih lokacija sa drugim korisnicima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "No references to homosexuality"
+msgstr "Nema upućivanja na homoseksualnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:290
+msgid "Indirect references to homosexuality"
+msgstr "Posredna upućivanja na homoseksualnost"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:293
+msgid "Kissing between people of the same gender"
+msgstr "Ljubljenje između osoba istog pola"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Grafičko seksualno ponašanje između osoba istog pola"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:299
+msgid "No references to prostitution"
+msgstr "Nema upućivanja na prostituciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:302
+msgid "Indirect references to prostitution"
+msgstr "Posredna upućivanja na prostituciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Direct references of prostitution"
+msgstr "Neposredna upućivanja na prostituciju"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:308
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Grafički prikazi čina prostitucije"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:311
+msgid "No references to adultery"
+msgstr "Nema upućivanja na preljubu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "Indirect references to adultery"
+msgstr "Posredna upućivanja na preljubu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Direct references of adultery"
+msgstr "Neposredna upućivanja na preljubu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:320
+msgid "Graphic depictions of the act of adultery"
+msgstr "Grafički prikazi čina preljube"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:323
+msgid "No sexualized characters"
+msgstr "Nema seksualizovanih karaktera"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Scantily clad human characters"
+msgstr "Oskudno obučeni ljudski karakteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:329
+msgid "Overtly sexualized human characters"
+msgstr "Preterano seksualizovani ljudski karakteri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:332
+msgid "No references to desecration"
+msgstr "Nema upućivanja na skrnavljenje"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "Depictions or references to historical desecration"
+msgstr "Prikazi ili upućivanja ka istorijskim skrnavljenjima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:338
+msgid "Depictions of modern-day human desecration"
+msgstr "Prikazi savremenog ljudskog skrnavljenja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Grafički prikazi savremenog skrnavljenja"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:344
+msgid "No visible dead human remains"
+msgstr "Bez vidljivih ljudskih posmrtnih ostataka"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:347
+msgid "Visible dead human remains"
+msgstr "Sa vidljivim ljudskim posmrtnim ostacima"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Posmrtni ostaci ljudi koji su izloženi vremenskim prilikama"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:353
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Grafički prikazi skrnavljenja ljudskih tela"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:356
+msgid "No references to slavery"
+msgstr "Nema upućivanja na robovlasništvo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:359
+msgid "Depictions or references to historical slavery"
+msgstr "Prikazi ili upućivanja ka istorijskom robovlasništvu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:362
+msgid "Depictions of modern-day slavery"
+msgstr "Prikazi savremenog robovlasništva"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:365
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafički prikazi savremenog robovlasništva"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:295
+msgid "An application"
+msgstr "Program"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:301
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "„%s“ zahteva dodatnu podršku za korišćenje ove vrste datoteke."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:303
+msgid "Additional MIME Types Required"
+msgstr "Potrebne su dodatni MIME formati"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:307
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "„%s“ zahteva dodatne slovne likove."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:309
+msgid "Additional Fonts Required"
+msgstr "Potrebni su dodatni slovni likovi"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:313
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "„%s“ zahteva dodatne multimedijalne kodeke."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:315
+msgid "Additional Multimedia Codecs Required"
+msgstr "Potrebni su dodatni multimedijalni kodeci"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:319
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "„%s“ zahteva dodatne upravljačke programe za štampače."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:321
+msgid "Additional Printer Drivers Required"
+msgstr "Potrebni su dodatni upravljački programi štampača"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:325
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "„%s“ zahteva dodatne pakete."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:327
+msgid "Additional Packages Required"
+msgstr "Potrebni su dodatni paketi"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:336
+msgid "Find in Software"
+msgstr "Nađi u Programima"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:286 src/gs-details-page.c:314
+#: src/gs-details-page.ui:206 src/gs-third-party-repo-row.c:97
+#: src/gs-upgrade-banner.ui:146
+msgid "_Install"
+msgstr "_Instaliraj"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: src/gs-details-page.c:319
+msgid "_Update"
+msgstr "Až_uriraj"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:332 src/gs-third-party-repo-row.c:89
+msgid "_Install…"
+msgstr "_Instaliraj…"
+
+#. TRANSLATORS: A label for a button to execute the selected
+#. application.
+#: src/gs-details-page.c:366
+msgid "_Launch"
+msgstr "_Pokreni"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:391 src/gs-details-page.ui:241
+msgid "_Remove"
+msgstr "_Ukloni"
+
+#: src/gs-details-page.c:459
+msgid "Removing…"
+msgstr "Uklanjam…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:478
+msgid "Pending installation…"
+msgstr "Čeka na instaliranje…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:485
+msgid "Pending update…"
+msgstr "Čeka na ažuriranje…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:802
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Ovaj program se može koristiti samo ako postoji veza sa internetom."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:967
+msgctxt "version"
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:980
+msgctxt "updated"
+msgid "Never"
+msgstr "Nikada"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1028
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1425
+msgid "You need internet access to write a review"
+msgstr "Potrebna vam je veza sa internetom da biste napisali pregled"
+
+#: src/gs-details-page.c:1559
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Ne mogu da pronađem „%s“"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2162
+msgid "Public domain"
+msgstr "Javno vlasništvo"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2165
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+"https://sr.wikipedia.org/sr-ec/%D0%92%D0%BB%D0%B0%D1%81%D0%BD"
+"%D0%B8%D1%87%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2172
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.sr"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2182 src/gs-details-page.ui:1383
+msgid "Free Software"
+msgstr "Slobodan softver"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2239
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Korisnici su vezani sledećom dozvolom:"
+msgstr[1] "Korisnici su vezani sledećim dozvolama:"
+msgstr[2] "Korisnici su vezani sledećim dozvolama:"
+msgstr[3] "Korisnici su vezani sledećom dozvolom:"
+
+#: src/gs-details-page.c:2266 src/gs-details-page.ui:1492
+msgid "More information"
+msgstr "Još podataka"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Stranica pojedinosti"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:346
+msgid "_Add shortcut"
+msgstr "_Dodaj prečicu"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:361
+msgid "Re_move shortcut"
+msgstr "_Ukloni prečicu"
+
+#: src/gs-details-page.ui:456
+msgid "No screenshot provided"
+msgstr "Nije dostavljen snimak ekrana"
+
+#: src/gs-details-page.ui:492
+msgid "Software Repository Included"
+msgstr "Sadrži riznicu programa"
+
+#: src/gs-details-page.ui:493
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ovaj program sadrži riznicu programa iz koje ćete dobijati ažuriranja, kao i "
+"pristup drugim programima."
+
+#: src/gs-details-page.ui:506
+msgid "No Software Repository Included"
+msgstr "Ne sadrži riznicu programa"
+
+#: src/gs-details-page.ui:507
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ovaj program ne sadrži riznicu programa. On neće biti ažuriran na nova "
+"izdanja."
+
+#: src/gs-details-page.ui:521
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Ovaj program je već dostupan u riznicama vaše distribucije i ne bi trebali "
+"da ga zamenite."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:534
+msgid "Software Repository Identified"
+msgstr "Riznica programa je prepoznata"
+
+#: src/gs-details-page.ui:535
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Dodavanje ove riznice programa će vam omogućiti pristup dodatnim programima i "
+"nadogradnjama."
+
+#: src/gs-details-page.ui:536
+msgid "Only use software repositories that you trust."
+msgstr "Koristite samo proverene riznice programa."
+
+#: src/gs-details-page.ui:552
+msgid "_Website"
+msgstr "_Veb stranica"
+
+#: src/gs-details-page.ui:567
+msgid "_Donate"
+msgstr "Pošalji _donaciju"
+
+#: src/gs-details-page.ui:701
+msgid "Localized in your Language"
+msgstr "Preveden na srpski"
+
+#: src/gs-details-page.ui:713
+msgid "Documentation"
+msgstr "Dokumentacija"
+
+#: src/gs-details-page.ui:725
+msgid "Release Activity"
+msgstr "Održavan program"
+
+#: src/gs-details-page.ui:737
+msgid "System Integration"
+msgstr "Usklađenost sa sistemom"
+
+#: src/gs-details-page.ui:749
+msgid "Sandboxed"
+msgstr "Izolovan"
+
+#: src/gs-details-page.ui:774
+msgid "Version"
+msgstr "Izdanje"
+
+#: src/gs-details-page.ui:811
+msgid "Age Rating"
+msgstr "Ocena starosne prikladnosti"
+
+#: src/gs-details-page.ui:849
+msgid "Updated"
+msgstr "Ažuriran"
+
+#: src/gs-details-page.ui:884
+msgid "Category"
+msgstr "Kategorija"
+
+#: src/gs-details-page.ui:922
+msgid "Installed Size"
+msgstr "Veličina instaliranog"
+
+#: src/gs-details-page.ui:955
+msgid "Download Size"
+msgstr "Veličina preuzetog"
+
+#: src/gs-details-page.ui:1021
+msgid "Developer"
+msgstr "Programer"
+
+#: src/gs-details-page.ui:1055
+msgid "License"
+msgstr "Dozvola"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1075
+msgid "Free"
+msgstr "Slobodan"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:1092
+msgid "Proprietary"
+msgstr "Vlasnički"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.ui:1109 src/gs-review-row.c:71
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1163 src/gs-installed-page.c:490
+#: plugins/core/gs-desktop-common.c:331
+msgid "Add-ons"
+msgstr "Dodaci"
+
+#: src/gs-details-page.ui:1176
+msgid "Selected add-ons will be installed with the application."
+msgstr "Izabrani dodaci biće instalirani sa programom."
+
+# Mislim da se ova niska odnosi na deo Programa koji je posvećen recenzijama programa.
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1219
+msgid "Reviews"
+msgstr "Pregledi"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1235
+msgid "_Write a Review"
+msgstr "_Napiši pregled"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1257
+msgid "_Show More"
+msgstr "_Prikaži još"
+
+#: src/gs-details-page.ui:1400
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"To znači da softver može biti slobodno pokrenut, umnožen, raspodeljen, "
+"proučavan i izmenjen."
+
+#: src/gs-details-page.ui:1459
+msgid "Proprietary Software"
+msgstr "Vlasnički softver"
+
+#: src/gs-details-page.ui:1476
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"To znači da je softver u vlasništvu pojedinca ili kompanije. Često postoje "
+"ograničenja njegovog korišćenja i njegovom izvornom kȏdu obično se ne može "
+"pristupiti."
+
+#: src/gs-details-page.ui:1521
+msgid "Unknown Software License"
+msgstr "Nepoznata dozvola softvera"
+
+#: src/gs-details-page.ui:1538
+msgid "The license terms of this software are unknown."
+msgstr "Odredbe dozvole ovog softvera su nepoznate."
+
+#: src/gs-details-page.ui:1565
+msgid "The application was rated this way because it features:"
+msgstr "Program je ocenjen ovako zato što ga odlikuje sledeće:"
+
+#: src/gs-details-page.ui:1591
+msgid "No details were available for this rating."
+msgstr "Nema pojedinosti za ovu ocenu starosne prikladnosti."
+
+#: src/gs-editor.c:361
+msgid "CSS validated OK!"
+msgstr "CSS je uspešno proveren!"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:564
+msgid "Failed to load file"
+msgstr "Nisam uspeo da učitam datoteku"
+
+#. TRANSLATORS: window title
+#: src/gs-editor.c:598 src/gs-editor.c:874
+msgid "Unsaved changes"
+msgstr "Nesačuvane izmene"
+
+#: src/gs-editor.c:600
+msgid "The application list is already loaded."
+msgstr "Spisak sa programima je već učitan."
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:604
+msgid "Merge documents"
+msgstr "Spoji dokumente"
+
+#. TRANSLATORS: button text
+#: src/gs-editor.c:608 src/gs-editor.c:879
+msgid "Throw away changes"
+msgstr "Odbaci izmene"
+
+#. import the new file
+#: src/gs-editor.c:620 src/gs-editor.c:652
+msgid "Open AppStream File"
+msgstr "Otvori AppStream datoteku"
+
+#: src/gs-editor.c:624
+msgid "_Open"
+msgstr "_Otvori"
+
+#: src/gs-editor.c:656
+msgid "_Save"
+msgstr "_Sačuvaj"
+
+#. TRANSLATORS: error dialog title
+#: src/gs-editor.c:676
+msgid "Failed to save file"
+msgstr "Nisam uspeo da sačuvam datoteku"
+
+#. TRANSLATORS, the %s is the app name, e.g. 'Inkscape'
+#: src/gs-editor.c:751
+#, c-format
+msgid "%s banner design deleted."
+msgstr "Dizajn banera za %s je obrisan."
+
+#. TRANSLATORS, this is a notification
+#: src/gs-editor.c:754
+msgid "Banner design deleted."
+msgstr "Dizajn banera je obrisan."
+
+#: src/gs-editor.c:876
+msgid "The application list has unsaved changes."
+msgstr "Spisak programa sadrži nesačuvane izmene."
+
+#. TRANSLATORS: show the program version
+#: src/gs-editor.c:1111
+msgid "Use verbose logging"
+msgstr "Koristi detaljno zapisivanje"
+
+#. TRANSLATORS: program name, an application to add and remove software repositories
+#: src/gs-editor.c:1119
+msgid "GNOME Software Banner Designer"
+msgstr "Dizajner banera za Gnomove programe"
+
+#: src/gs-editor.ui:63 src/gs-editor.ui:77
+msgid "No Designs"
+msgstr "Nema dizajna"
+
+#: src/gs-editor.ui:163
+msgid "Error message here"
+msgstr "Poruka o grešci"
+
+#: src/gs-editor.ui:250
+msgid "App ID"
+msgstr "IB programa"
+
+#: src/gs-editor.ui:341 src/gs-review-dialog.ui:142
+msgid "Summary"
+msgstr "Sažetak"
+
+#: src/gs-editor.ui:382
+msgid "Editor’s Pick"
+msgstr "Izbor urednika"
+
+#. This check button controls whether the application’s banner appears in the “Featured” category
+#: src/gs-editor.ui:397
+msgid "Category Featured"
+msgstr "Izdvojeno u kategoriji"
+
+#. button in the info bar
+#: src/gs-editor.ui:471
+msgid "Undo"
+msgstr "Opozovi"
+
+#: src/gs-editor.ui:524 src/org.gnome.Software.Editor.desktop.in:3
+msgid "Banner Designer"
+msgstr "Dizajner banera"
+
+#: src/gs-editor.ui:547
+msgid "New Banner"
+msgstr "Novi baner"
+
+#: src/gs-editor.ui:615
+msgid "Import from file"
+msgstr "Uvezi iz datoteke"
+
+#: src/gs-editor.ui:629
+msgid "Export to file"
+msgstr "Izvezi u datoteku"
+
+#: src/gs-editor.ui:643
+msgid "Delete Design"
+msgstr "Obriši dizajn"
+
+#: src/gs-editor.ui:670
+msgid "Featured App"
+msgstr "Izdvojeni program"
+
+#: src/gs-editor.ui:684
+msgid "OS Upgrade"
+msgstr "Nadogradnja sistema"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:147
+msgid " and "
+msgstr " i "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:150
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:176
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Dostupan je slovni lik za pismo „%s“"
+msgstr[1] "Dostupni su slovni likovi za pismo „%s“"
+msgstr[2] "Dostupni su slovni likovi za pismo „%s“"
+msgstr[3] "Dostupan je slovni lik za pismo „%s“"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:184
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Dostupan je program za „%s“"
+msgstr[1] "Dostupni su programi za „%s“"
+msgstr[2] "Dostupni su programi za „%s“"
+msgstr[3] "Dostupan je program za „%s“"
+
+#: src/gs-extras-page.c:226
+msgid "Unable to Find Requested Software"
+msgstr "Ne mogu da nađem potrebne programe"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:328
+#, c-format
+msgid "%s not found"
+msgstr "Nisam pronašao „%s“"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:332
+msgid "on the website"
+msgstr "na veb stranici"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:339
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Nisu dostupni programi koji obezbeđuju datoteku „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:343 src/gs-extras-page.c:354 src/gs-extras-page.c:365
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Podatke o „%s“, kao i način nabavljanja nedostajućih programa možete pronaći "
+"na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:350 src/gs-extras-page.c:372
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Nisu dostupni programi za „%s“ podršku."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:361
+#, c-format
+msgid "%s is not available."
+msgstr "„%s“ nije dostupan."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:376
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Podatke o „%s“, kao i način nabavljanja programa koji može da podrži ovu vrstu "
+"datoteka možete naći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:383
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Nema dostupnih fontova za pismo „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:387
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Podatke o „%s“, kao i način nabavljanja dodatnih fontova možete pronaći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:394 lib/gs-plugin-loader.c:1474
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Nema dodatnih kodeka za format datoteke „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:398
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Podatke o „%s“, kao i način nabavljanja kodeka koji može da pusti ovu vrstu "
+"zapisa možete naći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:405
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Nisu dostupna izvorišta Plazme za „%s“ podršku."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:409
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Podatke o „%s“, kao i način nabavljanja dodatnih izvorišta Plazme možete "
+"pronaći na %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:416
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Nisu dostupni upravljački programi štampača za „%s“."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:420
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Podatke o „%s“, kao i način nabavljanja upravljačkog programa koji može da "
+"podrži ovaj štampač možete naći na %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:464
+msgid "this website"
+msgstr "ovom veb sajtu"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:468
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "Na žalost, ne mogu pronaći „%s“. Na „%s“ možete naći više podataka."
+msgstr[1] "Na žalost, ne mogu pronaći „%s“. Na „%s“ možete naći više podataka."
+msgstr[2] "Na žalost, ne mogu pronaći „%s“. Na „%s“ možete naći više podataka."
+msgstr[3] "Na žalost, ne mogu pronaći „%s“. Na „%s“ možete naći više podataka."
+
+#: src/gs-extras-page.c:539 src/gs-extras-page.c:595 src/gs-extras-page.c:634
+msgid "Failed to find any search results"
+msgstr "Neuspeh pri dobavljanju rezultata pretrage"
+
+#: src/gs-extras-page.c:828
+#, c-format
+msgid "%s file format"
+msgstr "%s format datoteke"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Stranica kodeka"
+
+#: src/gs-first-run-dialog.ui:7 src/gs-first-run-dialog.ui:16
+msgid "Welcome"
+msgstr "Dobro došli"
+
+#: src/gs-first-run-dialog.ui:50
+msgid "Welcome to Software"
+msgstr "Dobro došli u Programe"
+
+#: src/gs-first-run-dialog.ui:66
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Programi vam omogućavaju da instalirate sve programe koji vam trebaju, sve "
+"sa jednog mesta. Pogledajte naše preporuke, razgledajte kategorije, ili "
+"potražite program koji želite."
+
+#: src/gs-first-run-dialog.ui:85
+msgid "_Let’s Go Shopping"
+msgstr "_Ajmo u kupovinu"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: src/gs-hiding-box.c:381
+msgid "Spacing"
+msgstr "Razmaci"
+
+#: src/gs-hiding-box.c:382
+msgid "The amount of space between children"
+msgstr "Količina razmaka među sadržanim elementima"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "Uklonjen"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "Instaliran"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:95
+msgctxt "app status"
+msgid "Updated"
+msgstr "Ažuriran"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:101
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#: src/gs-history-dialog.ui:6
+msgid "History"
+msgstr "Istorijat"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:486
+msgid "System Applications"
+msgstr "Sistemski programi"
+
+#: src/gs-installed-page.c:618
+msgid "Click on items to select them"
+msgstr "Pritisnite na stavke da ih izaberete"
+
+#: src/gs-installed-page.c:820
+msgid "Select"
+msgstr "Izaberi"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Stranica instaliranog"
+
+#: src/gs-installed-page.ui:65
+msgid "_Add to Folder…"
+msgstr "_Dodaj u fasciklu…"
+
+#: src/gs-installed-page.ui:73
+msgid "_Move to Folder…"
+msgstr "_Premesti u fasciklu…"
+
+#: src/gs-installed-page.ui:81
+msgid "_Remove from Folder"
+msgstr "_Ukloni iz fascikle"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:75
+msgid "Software catalog is being downloaded"
+msgstr "Katalog softvera je preuzet"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:79
+msgid "Software catalog is being loaded"
+msgstr "Katalog softvera je učitan"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Učitavam stranicu"
+
+#: src/gs-loading-page.ui:53
+msgid "Starting up…"
+msgstr "Pokrećem…"
+
+#: src/gs-menus.ui:7
+msgid "_Software Repositories"
+msgstr "R_iznice programa"
+
+#: src/gs-menus.ui:14
+msgid "_About"
+msgstr "_O programu"
+
+#: src/gs-menus.ui:18
+msgid "_Quit"
+msgstr "_Izađi"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Stranica uređenja"
+
+#: src/gs-moderate-page.ui:87
+msgid "There are no reviews to moderate"
+msgstr "Nema pregleda za uređenje"
+
+#. add button
+#: src/gs-overview-page.c:330
+msgid "More…"
+msgstr "Još…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:496
+msgid "Recommended Audio & Video Applications"
+msgstr "Preporučeni audio i video programi"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:501
+msgid "Recommended Games"
+msgstr "Preporučene igre"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:506
+msgid "Recommended Graphics Applications"
+msgstr "Preporučeni grafički programi"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:511
+msgid "Recommended Productivity Applications"
+msgstr "Preporučeni stvaralački programi"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:890 src/gs-repos-dialog.c:777
+msgid "Access additional software from selected third party sources."
+msgstr "Pristupite dodatnim programima sa izvora probranih trećih strana."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:894 src/gs-repos-dialog.c:781
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Deo ovog programa je vlasnički te je deljenje, korišćenje i pristupanje izvornom "
+"kodu ograničeno."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:901 src/gs-repos-dialog.c:788
+msgid "Find out more…"
+msgstr "Saznaj više…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#: src/gs-overview-page.c:910
+msgid "Enable"
+msgstr "Uključi"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Stranica pregleda"
+
+#: src/gs-overview-page.ui:49
+msgid "Enable Third Party Software Repositories?"
+msgstr "Da uključim riznice programa treće strane?"
+
+#: src/gs-overview-page.ui:117
+msgid "Featured Application"
+msgstr "Izdvojeni programi"
+
+#: src/gs-overview-page.ui:150
+msgid "Categories"
+msgstr "Kategorije"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:310
+msgid "Editor’s Picks"
+msgstr "Izbori urednika"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:348
+msgid "Recent Releases"
+msgstr "Nedavna izdanja"
+
+#: src/gs-overview-page.ui:435
+msgid "No Application Data Found"
+msgstr "Nisam pronašao podatke o programima"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:468
+#, c-format
+msgid "Are you sure you want to purchase %s?"
+msgstr "Da li sigurno želite da kupite „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:472
+#, c-format
+msgid "%s will be installed, and you will be charged %s."
+msgstr "%s će biti instaliran i biće vam naplaćeno %s."
+
+#. TRANSLATORS: this is button text to purchase the application
+#: src/gs-page.c:485
+msgid "Purchase"
+msgstr "Kupi"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:559
+#, c-format
+msgid "Prepare %s"
+msgstr "Pripremam „%s“"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * source name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:694
+#, c-format
+msgid "Are you sure you want to remove the %s source?"
+msgstr "Da li sigurno želite da uklonite izvor „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:698
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the source to use them again."
+msgstr ""
+"Sve programi sa „%s“ biće uklonjeni, a moraćete ponovo da instalirate izvor "
+"da biste ih ponovo koristili."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:706
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Da li sigurno želite da uklonite „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:709
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"Biće uklonjen „%s“, i moraćete da ga instalirate da biste ga ponovo koristili."
+
+#: lib/gs-plugin-loader.c:1477
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"Podatke o „%s“, kao i podatke o nabavljanju kodeka koji može puštati ovu vrstu "
+"datoteke možete pronaći na veb stranici."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:70 src/gs-summary-tile.c:75
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Instaliran)"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-popular-tile.c:205
+#, c-format
+msgid "Source: %s"
+msgstr "Izvor: %s"
+
+#: lib/gs-price.c:111
+#, c-format
+msgid "A$%.2f"
+msgstr "A$%.2f"
+
+#: lib/gs-price.c:113
+#, c-format
+msgid "C$%.2f"
+msgstr "C$%.2f"
+
+#: lib/gs-price.c:115
+#, c-format
+msgid "CN¥%.2f"
+msgstr "CN¥%.2f"
+
+#: lib/gs-price.c:117
+#, c-format
+msgid "€%.2f"
+msgstr "€%.2f"
+
+#: lib/gs-price.c:119
+#, c-format
+msgid "£%.2f"
+msgstr "£%.2f"
+
+#: lib/gs-price.c:121
+#, c-format
+msgid "¥%.2f"
+msgstr "¥%.2f"
+
+#: lib/gs-price.c:123
+#, c-format
+msgid "NZ$%.2f"
+msgstr "NZ$%.2f"
+
+#: lib/gs-price.c:125
+#, c-format
+msgid "₽%.2f"
+msgstr "₽%.2f"
+
+#: lib/gs-price.c:127
+#, c-format
+msgid "US$%.2f"
+msgstr "US$%.2f"
+
+#. Translators: %s is the currency, and %f is the amount.
+#. * You can switch the order by using “%2$f %1$s” instead.
+#: lib/gs-price.c:131
+#, c-format
+msgid "%s %f"
+msgstr "%s %f"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:128
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Neki od trenutno instaliranih programa nisu saglasni sa „%s“. Ako nastavite, "
+"sledeći će biti sami uklonjeni za vreme nadogradnje:"
+
+#: src/gs-removal-dialog.ui:27
+msgid "Incompatible Software"
+msgstr "Nesaglasan softver"
+
+#: src/gs-removal-dialog.ui:40
+msgid "_Continue"
+msgstr "_Nastavi"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:110
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u instalirani program"
+msgstr[1] "%u instalirana programa"
+msgstr[2] "%u instaliranih programa"
+msgstr[3] "Jedan instalirani program"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:117
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u instalirani dodatak"
+msgstr[1] "%u instalirana dodatka"
+msgstr[2] "%u instaliranih dodataka"
+msgstr[3] "Jedan instalirani dodatak"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:125
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u program"
+msgstr[1] "%u programa"
+msgstr[2] "%u programa"
+msgstr[3] "Jedan program"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:131
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u dodatak"
+msgstr[1] "%u dodatka"
+msgstr[2] "%u dodataka"
+msgstr[3] "Jedan dodatak"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:138
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s i %s su instalirani"
+msgstr[1] "%s i %s su instalirana"
+msgstr[2] "%s i %s je instalirano"
+msgstr[3] "%s i %s su instalirani"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:248
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Ukloniti riznicu „%s“?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:253
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Onemogućiti riznicu „%s“?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:257
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programi instalirani iz ove riznice više neće dobijati ažuriranja, uključujući "
+"i bezbednosne ispravke."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:275
+msgid "Disable"
+msgstr "Onemogući"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:686
+msgid "the operating system"
+msgstr "operativni sistem"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:756 src/gs-repos-dialog.c:795
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Ove riznice dopunjavaju podrazumevane programe koje pruža distribucija „%s“."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:774
+msgid "Third Party Repositories"
+msgstr "Riznice treće strane"
+
+#: src/gs-repos-dialog.ui:82
+msgid "No Additional Repositories"
+msgstr "Nema dodatnih riznica"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:110
+msgid "_Enable"
+msgstr "_Omogući"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:119
+msgid "_Remove…"
+msgstr "_Ukloni…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:124
+msgid "_Disable…"
+msgstr "O_nemogući…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:132
+msgid "Enabling"
+msgstr "Uključujem"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:144
+msgid "Disabling"
+msgstr "Onemogućavam"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:158
+msgid "Enabled"
+msgstr "Omogućeno"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:164
+msgid "Disabled"
+msgstr "Onemogućeno"
+
+#: src/gs-repo-row.ui:89
+msgid "URL"
+msgstr "Adresa"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:95
+msgid "Hate it"
+msgstr "Nikakav"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:99
+msgid "Don’t like it"
+msgstr "Ne dopada mi se"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:103
+msgid "It’s OK"
+msgstr "U redu je"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:107
+msgid "Like it"
+msgstr "Dobar je"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:111
+msgid "Love it"
+msgstr "Odličan"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:133
+msgid "Please take more time writing the review"
+msgstr "Utrošite malo više vremena za pisanje pregleda"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:137
+msgid "Please choose a star rating"
+msgstr "Izaberite ocenu zvezdicom"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:141
+msgid "The summary is too short"
+msgstr "Sažetak je prekratak"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:145
+msgid "The summary is too long"
+msgstr "Sažetak je predug"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:149
+msgid "The description is too short"
+msgstr "Opis je prekratak"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:153
+msgid "The description is too long"
+msgstr "Opis je predug"
+
+# Mislim da se ova niska odnosi na deo Programa koji je posvećen recenzijama programa.
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:11
+msgid "Post Review"
+msgstr "Objavi pregled"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:35
+msgid "_Post"
+msgstr "_Objavi"
+
+#: src/gs-review-dialog.ui:85
+msgid "Rating"
+msgstr "Ocenjivanje"
+
+#: src/gs-review-dialog.ui:158
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Ukratko opišite vaše mišljenje, na primer: „Odličan program, preporučio bih "
+"ga“."
+
+# Mislim da se ova niska odnosi na deo Programa koji je posvećen recenzijama programa.
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:199
+msgctxt "app review"
+msgid "Review"
+msgstr "Pregled"
+
+#: src/gs-review-dialog.ui:215
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Šta mislite o programu? Pokušajte da opravdate vaše viđenje."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:413
+msgid "ratings in total"
+msgstr "ukupno ocena"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:234
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Možete da prijavite da su pregledi uvredljivog, grubog ili diskriminatorskog "
+"ponašanja."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:239
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Nakon podnošenja, pregled će biti skriven sve dok ga ne proveri neko od "
+"administratora."
+
+# Mislim da se ova niska odnosi na deo Programa koji je posvećen recenzijama programa.
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:253
+msgid "Report Review?"
+msgstr "Da objavim pregled?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:257
+msgid "Report"
+msgstr "Objavi"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:112
+msgid "Was this review useful to you?"
+msgstr "Da li vam je ovaj pregled koristio?"
+
+#: src/gs-review-row.ui:134
+msgid "Yes"
+msgstr "Jeste"
+
+#: src/gs-review-row.ui:148
+msgid "No"
+msgstr "Nije"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:162
+msgid "Meh"
+msgstr "Onako"
+
+#: src/gs-review-row.ui:196
+msgid "Report…"
+msgstr "Objavi…"
+
+#: src/gs-review-row.ui:211
+msgid "Remove…"
+msgstr "Ukloni…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:314
+msgid "Screenshot not found"
+msgstr "Nema snimaka ekrana"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:329
+msgid "Failed to load image"
+msgstr "Nisam uspeo da učitam sliku"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:462
+msgid "Screenshot size not found"
+msgstr "Nisam pronašao veličinu snimka ekrana"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:492
+msgid "Could not create cache"
+msgstr "Ne mogu da napravim ostavu"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:553
+msgid "Screenshot not valid"
+msgstr "Neispravan snimak ekrana"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:568
+msgid "Screenshot not available"
+msgstr "Snimak ekrana nije dostupan"
+
+#: src/gs-screenshot-image.c:621
+msgid "Screenshot"
+msgstr "Snimak ekrana"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:158
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "još %u pogodak"
+msgstr[1] "još %u pogotka"
+msgstr[2] "još %u pogodaka"
+msgstr[3] "još %u pogodak"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Stranica pretrage"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Nisam pronašao programe"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:834 src/gs-shell.c:839 src/gs-shell.c:854 src/gs-shell.c:858
+#, c-format
+msgid "“%s”"
+msgstr "„%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:898
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Ne mogu da preuzmem ažuriranja firmvera sa „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:904
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Ne mogu da preuzmem ažuriranja sa „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:911
+msgid "Unable to download updates"
+msgstr "Ne mogu da preuzmem ažuriranja"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:916
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "Ne mogu da preuzmem ažuriranja: nema veze sa internetom"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:925
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Ne mogu da preuzmem ažuriranja sa „%s“: nema dovoljno prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:930
+msgid "Unable to download updates: not enough disk space"
+msgstr "Ne mogu da preuzmem ažuriranja: nema dovoljno prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:938
+msgid "Unable to download updates: authentication was required"
+msgstr "Ne mogu da preuzmem ažuriranja: potrebna je prijava"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:943
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Ne mogu da preuzmem ažuriranja: prijava nije ispravna"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:948
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Ne mogu da preuzmem ažuriranja: nemate ovlašćenje za instaliranje programa"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:955
+msgid "Unable to get list of updates"
+msgstr "Ne mogu da preuzmem spisak ažuriranja"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1004
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Ne mogu da instaliram program „%s“ jer preuzimanje sa „%s“ nije uspelo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1010
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Ne mogu da instaliram program „%s“ jer preuzimanje nije uspelo"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1022
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Ne mogu da instaliram program „%s“ jer izvršno okruženje „%s“ nije dostupno"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1028
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Ne mogu da instaliram program „%s“ jer taj program nije podržan"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1035
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Ne mogu da instaliram: nema veze sa internetom"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1041
+msgid "Unable to install: the application has an invalid format"
+msgstr "Ne mogu da instaliram: Format programa nije ispravan"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1046
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Ne mogu da instaliram program „%s“: nema dovoljno prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1054
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Ne mogu da instaliram program „%s“: bila je potrebna prijava"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1061
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Ne mogu da instaliram program „%s“: prijava nije bila ispravna"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1068
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Ne mogu da instaliram program „%s“: nemate ovlašćenje za instaliranje programa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the name of the authentication service,
+#. * e.g. "Ubuntu One"
+#: src/gs-shell.c:1081
+#, c-format
+msgid "Your %s account has been suspended."
+msgstr "Vaš nalog „%s“ je obustavljen."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1085
+msgid "It is not possible to install software until this has been resolved."
+msgstr "Ne mogu se instalirati programi dok se ovo ne razreši."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the clickable link (e.g.
+#. * "http://example.com/what-did-i-do-wrong/")
+#: src/gs-shell.c:1096
+#, c-format
+msgid "For more information, visit %s."
+msgstr "Za više podataka, pogledajte %s."
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1105
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Ne mogu da instaliram „%s“: strujno napajanje je potrebno"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1114
+#, c-format
+msgid "Unable to install %s"
+msgstr "Ne mogu da instaliram program „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1163
+#, c-format
+msgid "Unable to update %s from %s"
+msgstr "Ne mogu da ažuriram program „%s“ iz „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1169
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Ne mogu da ažuriram program „%s“ jer preuzimanje nije uspelo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1175
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Ne mogu da ažuriram: nema veze sa internetom"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1183
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Ne mogu da ažuriram program „%s“: nema dovoljno prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1192
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Ne mogu da ažuriram program „%s“: bila je potrebna prijava"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1199
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Ne mogu da ažuriram program „%s“: prijava nije bila ispravna"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1206
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Ne mogu da ažuriram program „%s“: nemate ovlašćenje za ažuriranje programa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1214
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Ne mogu da ažuriram program „%s“: strujno napajanje je potrebno"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1223
+#, c-format
+msgid "Unable to update %s"
+msgstr "Ne mogu da ažuriram program „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1271
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Ne mogu da se nadogradim sa distribucije „%s“ na „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1276
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Ne mogu da nadogradim na „%s“ zato što preuzimanje nije uspelo"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1283
+msgid "Unable to upgrade: internet access was required but wasn’t available"
+msgstr "Ne mogu da nadogradim: nema veze sa internetom"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1291
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Ne mogu da se nadogradim na „%s“: nema dovoljno prostora na disku"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1300
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr ""
+"Ne mogu da se nadogradim na distribuciju „%s“: bila je potrebna prijava"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1307
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr ""
+"Ne mogu da se nadogradim na distribuciju „%s“: prijava nije bila ispravna"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1314
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr ""
+"Ne mogu da se nadogradim na distribuciju „%s“: nemate ovlašćenje za "
+"nadograđivanje"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1321
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr ""
+"Ne mogu da se nadogradim na distribuciju „%s“: strujno napajanje je potrebno"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1330
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Ne mogu da se nadogradim na distribuciju „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1375
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Ne mogu da uklonim program „%s“: bila je potrebna prijava"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1381
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Ne mogu da uklonim program „%s“: prijava nije bila ispravna"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1387
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Ne mogu da uklonim program „%s“: nemate ovlašćenje za uklanjanje programa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1394
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Ne mogu da uklonim program „%s“: strujno napajanje je potrebno"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1403
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Ne mogu da uklonim program „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1452
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Ne mogu da pokrenem program „%s“: deo „%s“ nije instaliran"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1459 src/gs-shell.c:1510 src/gs-shell.c:1561
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Nema dovoljno slobodnog prostora na disku, oslobodite nešto prostora i "
+"probajte ponovo"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1467 src/gs-shell.c:1518 src/gs-shell.c:1588
+msgid "Sorry, something went wrong"
+msgstr "Nažalost, nešto je pošlo naopako"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1505
+msgid "Failed to install file: authentication failed"
+msgstr "Nisam uspeo da instaliram datoteku: prijava nije uspela"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1555
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Ne mogu da kontaktiram „%s“"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1570
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Program „%s“ se mora ponovo pokrenuti da biste koristili nove dodatke."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1575
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Ovaj program se mora ponovo pokrenuti da biste koristili nove dodatke."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1582
+msgid "AC power is required"
+msgstr "Strujno napajanje je potrebno"
+
+#: src/gs-summary-tile.c:80
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Instaliram)"
+
+#: src/gs-summary-tile.c:85
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Uklanjam)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:106
+msgid "_Remove All"
+msgstr "_Ukloni sve"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:131
+msgid "No update description available."
+msgstr "Nema dostupnog opisa ažuriranja."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:226
+#, c-format
+msgid "Installed on %s"
+msgstr "Instaliran je %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:246
+msgid "Installed Updates"
+msgstr "Instalirana ažuriranja"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:446
+msgid "Additions"
+msgstr "Dodato"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:450
+msgid "Removals"
+msgstr "Uklonjeno"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:454
+msgid "Updates"
+msgstr "Osveženja"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:458
+msgid "Downgrades"
+msgstr "Unazađivanja"
+
+#: src/gs-update-dialog.ui:111
+msgid "No updates have been installed on this system."
+msgstr "Nijedno ažuriranje nije instalirano na ovaj sistem."
+
+#: src/gs-update-monitor.c:93
+msgid "Security Updates Pending"
+msgstr "Ima bezbednosnih ažuriranja"
+
+#: src/gs-update-monitor.c:94
+msgid "It is recommended that you install important updates now"
+msgstr "Preporučeno je što ranije instaliranje ovih ažuriranja"
+
+#: src/gs-update-monitor.c:97
+msgid "Restart & Install"
+msgstr "Ponovo pokreni i instaliraj"
+
+#: src/gs-update-monitor.c:101
+msgid "Software Updates Available"
+msgstr "Dostupna su ažuriranja programa"
+
+#: src/gs-update-monitor.c:102
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Ima važnih ažuriranja za sistem i programe koja su spremna za instaliranje"
+
+#. TRANSLATORS: button text
+#: src/gs-update-monitor.c:105 src/gs-updates-page.c:750
+msgid "Not Now"
+msgstr "Ne sada"
+
+#: src/gs-update-monitor.c:106
+msgid "View"
+msgstr "Pogledaj"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:260 src/gs-updates-page.ui:46
+msgid "Operating System Updates Unavailable"
+msgstr "Ažuriranja operativnog sistema nisu dostupna"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:262
+msgid "Upgrade to continue receiving security updates."
+msgstr "Nadogradite sistem da biste i dalje dobijali bezbednosna ažuriranja."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:316
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Nova verzija distribucije %s je dostupna za instalaciju"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:320
+msgid "Software Upgrade Available"
+msgstr "Dostupna su ažuriranja programa"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:633
+msgid "Software Updates Failed"
+msgstr "Ažuriranje programa nije uspelo"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:635
+msgid "An important OS update failed to be installed."
+msgstr "Nije uspelo instaliranje važnog ažuriranja sistema."
+
+#: src/gs-update-monitor.c:636
+msgid "Show Details"
+msgstr "Prikaži pojedinosti\t"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:659
+msgid "System Upgrade Complete"
+msgstr "Naodgradnja sistema je gotova"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:664
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Dobro došli u distribuciju %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:670
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Program je ažuriran"
+msgstr[1] "Programi su ažurirani"
+msgstr[2] "Programi su ažurirani"
+msgstr[3] "Jedan program je ažuriran"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:674
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Važno ažuriranje sistema je instalirano."
+msgstr[1] "Važna ažuriranja sistema su instalirana."
+msgstr[2] "Važna ažuriranja sistema su instalirana."
+msgstr[3] "Jedno važno ažuriranje sistema je instalirano."
+
+# Mislim da se ova niska odnosi na deo Programa koji je posvećen recenzijama programa.
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:685
+msgctxt "updates"
+msgid "Review"
+msgstr "Pregled"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:734
+msgid "Failed To Update"
+msgstr "Neuspeh pri instaliranju ažuriranja"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:740
+msgid "The system was already up to date."
+msgstr "Sistem je već ažuran."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:745
+msgid "The update was cancelled."
+msgstr "Ažuriranje je otkazano."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:751
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Nema izlaza na internet iako je to potrebno. Postarajte se da imate pristup "
+"internetu i pokušajte ponovo."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:757
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Programi su naišli na bezbednosne probleme sa ažuriranjem. Porazgovarajte sa "
+"dobavljačem vaših programa za više pojedinosti."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:763
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Nema dovoljno slobodnog prostora na disku. Oslobodite prostor na disku pa "
+"pokušajte ponovo."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:768
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Nažalost, dogodila se greška prilikom ažuriranja. Sačekajte novo ažuriranje pa "
+"pokušajte ponovo. Ukoliko se ova greška opet dogodi, prijavite to dobavljaču "
+"vaših programa."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:298
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:301
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:307
+msgid "Yesterday, %R"
+msgstr "Juče, u %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:311
+msgid "Yesterday, %l:%M %p"
+msgstr "Juče, u %l:%M %p"
+
+#: src/gs-updates-page.c:314
+msgid "Two days ago"
+msgstr "Pre dva dana"
+
+#: src/gs-updates-page.c:316
+msgid "Three days ago"
+msgstr "Pre tri dana"
+
+#: src/gs-updates-page.c:318
+msgid "Four days ago"
+msgstr "Pre četiri dana"
+
+#: src/gs-updates-page.c:320
+msgid "Five days ago"
+msgstr "Pre pet dana"
+
+#: src/gs-updates-page.c:322
+msgid "Six days ago"
+msgstr "Pre šest dana"
+
+#: src/gs-updates-page.c:324
+msgid "One week ago"
+msgstr "Pre nedelju dana"
+
+#: src/gs-updates-page.c:326
+msgid "Two weeks ago"
+msgstr "Pre dve nedelje"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-updates-page.c:330
+msgid "%e %B %Y"
+msgstr "%e. %B %Y."
+
+#. TRANSLATORS: the updates are being downloaded
+#: src/gs-updates-page.c:343
+msgid "Downloading new updates…"
+msgstr "Preuzimam nova ažuriranja…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:347
+msgid "Looking for new updates…"
+msgstr "Tražim nova ažuriranja…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:414
+msgid "Setting up updates…"
+msgstr "Podešavam ažuriranja…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:415 src/gs-updates-page.c:422
+msgid "(This could take a while)"
+msgstr "(Ovo može da potraje)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:527
+#, c-format
+msgid "Last checked: %s"
+msgstr "Poslednja provera: %s"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-updates-page.c:746
+msgid "Updates have been installed"
+msgstr "Ažuriranja su instalirana"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-updates-page.c:748
+msgid "A restart is required for them to take effect."
+msgstr "Potrebno je ponovno pokretanje kako bi stupila u dejstvo."
+
+#. TRANSLATORS: button text
+#: src/gs-updates-page.c:752
+msgid "Restart"
+msgstr "Pokreni ponovo"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-page.c:822
+msgid "Integrated Firmware"
+msgstr "Ugrađeni firmver"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * system firmware
+#. TRANSLATORS: This is the button for upgrading all
+#. * offline updates
+#: src/gs-updates-page.c:825 src/gs-updates-page.c:835
+msgid "Restart & Update"
+msgstr "Ponovo pokreni i instaliraj"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-page.c:832
+msgid "Requires Restart"
+msgstr "Zahteva ponovno pokretanje"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-page.c:842
+msgid "Application Updates"
+msgstr "Ažuriranja programa"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-page.c:845
+msgid "Update All"
+msgstr "Ažuriraj sve"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-page.c:852
+msgid "Device Firmware"
+msgstr "Firmver uređaja"
+
+#. TRANSLATORS: this is an offline update
+#: src/gs-updates-page.c:1041
+msgid "_Restart & Update"
+msgstr "_Ponovo pokreni i instaliraj"
+
+#. TRANSLATORS: all updates will be installed
+#: src/gs-updates-page.c:1045
+msgid "U_pdate All"
+msgstr "Až_uriraj sve"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:1132
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Više nema podrške za distribuciju %s %s."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:1137
+msgid "Your OS is no longer supported."
+msgstr "Vaš sistem više nije podržan."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:1142
+msgid "This means that it does not receive security updates."
+msgstr "To znači da više ne dobija bezbedonosna ažuriranja."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:1146
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Preporučeno je da nadogradite sistem na novije izdanje."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:1403
+msgid "Charges may apply"
+msgstr "Ažuriranjem mogu nastati dodatni novčani troškovi"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1407
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Provera ažurnosti prilikom korišćenja mobilne širokopojasne mreže može "
+"dovesti do povećanja troškova na vašoj kartici."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:1411
+msgid "Check Anyway"
+msgstr "Ipak proveri"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:1427
+msgid "No Network"
+msgstr "Nema mreže"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:1431
+msgid "Internet access is required to check for updates."
+msgstr "Potreban je pristup Internetu za proveru ažuriranja."
+
+#: src/gs-updates-page.c:1836
+msgid "Restart & _Install"
+msgstr "Ponovo pokreni i _instaliraj"
+
+#: src/gs-updates-page.c:1854
+msgid "Check for updates"
+msgstr "Proveri da li ima ažuriranja"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Stranica ažuriranja"
+
+#: src/gs-updates-page.ui:194
+msgid "Software is up to date"
+msgstr "Programi su ažurirani"
+
+#: src/gs-updates-page.ui:245
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Provera ažurnosti prilikom korišćenja mobilne širokopojasne mreže može "
+"dovesti do povećanja troškova na kartici"
+
+#: src/gs-updates-page.ui:257
+msgid "_Check Anyway"
+msgstr "_Ipak proveri"
+
+#: src/gs-updates-page.ui:300
+msgid "Go online to check for updates"
+msgstr "Poveži se i potraži ažuriranja"
+
+#: src/gs-updates-page.ui:311
+msgid "_Network Settings"
+msgstr "_Podešavanja mreže"
+
+#: src/gs-updates-page.ui:393
+msgid "Updates are automatically managed"
+msgstr "Samostalno upravljanje ažuriranjima je uključeno"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:85
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s je sada dostupan"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:95
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Preuzimam %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:106
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s je spreman za instaliranje"
+
+#: src/gs-upgrade-banner.ui:32
+msgid "A major upgrade, with new features and added polish."
+msgstr "Velika nadogradnja, sa novim funkcijama i dodatim ispravkama."
+
+#: src/gs-upgrade-banner.ui:52
+msgid "_Learn More"
+msgstr "_Saznaj više"
+
+#: src/gs-upgrade-banner.ui:98
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Preporučuje vam se da napravite rezervu vaših podataka i datoteka pre "
+"nadograđivanja."
+
+#: src/gs-upgrade-banner.ui:116
+msgid "_Download"
+msgstr "_Preuzmi"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Dodajte, uklonite ili ažurirajte programe na ovom računaru"
+
+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+#: src/org.gnome.Software.desktop.in:6
+#: src/org.gnome.Software.Editor.desktop.in:6
+msgid "org.gnome.Software"
+msgstr "org.gnome.Software"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"ažuriranja;osveženja;dogradnje;nadogradnje;izvori;riznice;skladišta;postavke;"
+"instalacija;uklanjanje;program;softver;aplikacija;radnja;ispravke;apdejtovi;"
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;ažuriranja;osveženja;dogradnje;nadogradnje;izvori;riznice;"
+"skladišta;postavke;instalacija;uklanjanje;program;softver;aplikacija;radnja;"
+"ispravke;apdejtovi;"
+
+#: src/org.gnome.Software.Editor.desktop.in:4
+msgid "Design the featured banners for GNOME Software"
+msgstr "Dizajniraj banere za Gnomove progrme"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.Editor.desktop.in:13
+msgid "AppStream;Software;App;"
+msgstr ""
+"AppStream;Software;App;AppStrim;Softver;Aplikacija;Programi;App;Programi;"
+"Softver;Aplikacija;"
+
+#: plugins/core/gs-desktop-common.c:30
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:33
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:36
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Stvaranje i uređivanje zvuka"
+
+#: plugins/core/gs-desktop-common.c:42
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Programi za muziku"
+
+#: plugins/core/gs-desktop-common.c:51
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:54
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:57
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Pročišćavači"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IRO"
+
+#: plugins/core/gs-desktop-common.c:69
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:73
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:77
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Veštačka inteligencija"
+
+#: plugins/core/gs-desktop-common.c:80
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: plugins/core/gs-desktop-common.c:84
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Hemija"
+
+#: plugins/core/gs-desktop-common.c:88
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Jezici"
+
+#: plugins/core/gs-desktop-common.c:92
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematika"
+
+#: plugins/core/gs-desktop-common.c:99
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotika"
+
+#: plugins/core/gs-desktop-common.c:108
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:111
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:114
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Akcija"
+
+#: plugins/core/gs-desktop-common.c:117
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Avantura"
+
+#: plugins/core/gs-desktop-common.c:120
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkadne"
+
+#: plugins/core/gs-desktop-common.c:123
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Blokovi"
+
+#: plugins/core/gs-desktop-common.c:126
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tabla"
+
+#: plugins/core/gs-desktop-common.c:129
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Karte"
+
+#: plugins/core/gs-desktop-common.c:132
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Oponašavači"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Dečje igre"
+
+#: plugins/core/gs-desktop-common.c:138
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logika"
+
+#: plugins/core/gs-desktop-common.c:141
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Igranje uloge"
+
+#: plugins/core/gs-desktop-common.c:144
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sportovi"
+
+#: plugins/core/gs-desktop-common.c:148
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategije"
+
+#: plugins/core/gs-desktop-common.c:156
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:159
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:162
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D grafika"
+
+#: plugins/core/gs-desktop-common.c:165
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografija"
+
+#: plugins/core/gs-desktop-common.c:168
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Skeniranje"
+
+#: plugins/core/gs-desktop-common.c:171
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorska grafika"
+
+#: plugins/core/gs-desktop-common.c:174
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Pregledači"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:185
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:188
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalendar"
+
+#: plugins/core/gs-desktop-common.c:192
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Baza podataka"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finansije"
+
+#: plugins/core/gs-desktop-common.c:199
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Obrađivanje teksta"
+
+#: plugins/core/gs-desktop-common.c:208
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Slova"
+
+#: plugins/core/gs-desktop-common.c:211
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodeci"
+
+#: plugins/core/gs-desktop-common.c:214
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Izvori ulaza"
+
+#: plugins/core/gs-desktop-common.c:217
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Jezički paketi"
+
+#: plugins/core/gs-desktop-common.c:220
+msgctxt "Menu of Add-ons"
+msgid "Shell Extensions"
+msgstr "Proširenja školjke"
+
+#: plugins/core/gs-desktop-common.c:223
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Prevod"
+
+#: plugins/core/gs-desktop-common.c:226
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hardverski upravljački programi"
+
+#: plugins/core/gs-desktop-common.c:234
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:237
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:240
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Ćaskanje"
+
+#: plugins/core/gs-desktop-common.c:247
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Vesti"
+
+#: plugins/core/gs-desktop-common.c:251
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Veb preglednici"
+
+#: plugins/core/gs-desktop-common.c:259
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:262
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:265
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Uređivači teksta"
+
+#: plugins/core/gs-desktop-common.c:273
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Sve"
+
+#: plugins/core/gs-desktop-common.c:276
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Izdvojeno"
+
+#: plugins/core/gs-desktop-common.c:279
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Umetnost"
+
+#: plugins/core/gs-desktop-common.c:282
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografija"
+
+#: plugins/core/gs-desktop-common.c:285
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Stripovi"
+
+#: plugins/core/gs-desktop-common.c:288
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Fantastika"
+
+#: plugins/core/gs-desktop-common.c:291
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Zdravlje"
+
+#: plugins/core/gs-desktop-common.c:294
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Istorija"
+
+#: plugins/core/gs-desktop-common.c:297
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Način življenja"
+
+#: plugins/core/gs-desktop-common.c:300
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politika"
+
+#: plugins/core/gs-desktop-common.c:303
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sportovi"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:313
+msgid "Audio & Video"
+msgstr "Zvuk i snimci"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:316
+msgid "Developer Tools"
+msgstr "Razvojni alati"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:319
+msgid "Education & Science"
+msgstr "Obrazovanje i nauka"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:322
+msgid "Games"
+msgstr "Igre"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:325
+msgid "Graphics & Photography"
+msgstr "Grafika i fotografija"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:328
+msgid "Productivity"
+msgstr "Produktivnost"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:334
+msgid "Communication & News"
+msgstr "Saopštenja i vesti"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:337
+msgid "Reference"
+msgstr "Upute"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:340
+msgid "Utilities"
+msgstr "Alatke"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:65
+msgid "OS Updates"
+msgstr "Nadogradnje sistema"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:70
+msgid "Includes performance, stability and security improvements."
+msgstr ""
+"U nadogradnje su uključena poboljšanja stabilnosti, bezbednosti i rada sistema."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:55
+msgid "Downloading featured images…"
+msgstr "Preuzimam izdvojene slike…"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:6
+msgid "Web Apps Support"
+msgstr "Podrška za veb aplikacije"
+
+#: plugins/epiphany/org.gnome.Software.Plugin.Epiphany.metainfo.xml.in:7
+msgid "Run popular web applications in a browser"
+msgstr "Izvrši popularne veb programe unutar pregledača"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:112
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Sistemski instalater datoteka toka Gnomovih programa"
+
+#: plugins/external-appstream/gs-install-appstream.c:114
+msgid "Failed to parse command line arguments"
+msgstr "Nisam uspeo da obradim argumente linije naredbi"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:121
+msgid "You need to specify exactly one filename"
+msgstr "Morate navesti tačno jedno ime datoteke"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:128
+msgid "This program can only be used by the root user"
+msgstr "Ovaj program može koristiti samo administrator"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:136
+msgid "Failed to validate content type"
+msgstr "Nisam uspeo da potvrdim vrstu sadržaja"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to copy"
+msgstr "Nisam uspeo da iskopiram"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:243
+msgid "Downloading extra metadata files…"
+msgstr "Preuzimam dodatne datoteke sa metapodacima…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:217
+msgid "Downloading upgrade information…"
+msgstr "Preuzimam podatke o nadogradnji…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:311
+msgid "Upgrade your Fedora system to the latest features and improvements."
+msgstr "Nadogradite vaš Fedora sistem radi novih mogućnosti i poboljšanja."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Podrška za Fletpek (Flatpak)"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Fletpek je radni okvir za stone Linuks programe"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:607
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Dobavljam fletpek metapodatke za %s…"
+
+#. TRANSLATORS: status text when downloading the RuntimeRepo
+#: plugins/flatpak/gs-flatpak.c:2795
+msgid "Getting runtime source…"
+msgstr "Dobavljam izvor izvršnog okruženja…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:695
+msgid "Downloading firmware update signature…"
+msgstr "Preuzimam potpis ažuriranja firmvera…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:736
+msgid "Downloading firmware update metadata…"
+msgstr "Preuzimam ažuriranja metapodataka firmvera…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:826
+msgid "Downloading firmware update…"
+msgstr "Preuzimam ažuriranja firmvera…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Podrška za nadogradnju firmvera"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Pruža podršku za nadogradnje firmvera"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:6
+msgid "Limba Support"
+msgstr "Podrška za Limbu"
+
+#: plugins/limba/org.gnome.Software.Plugin.Limba.metainfo.xml.in:7
+msgid "Limba provides developers a way to easily create software bundles"
+msgstr ""
+"Limba pruža programerima jednostavan način za pravljenje programskih paketa"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:205
+msgid "Downloading application ratings…"
+msgstr "Preuzimam ocene programa…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Podrška za ocene otvorene radne površi"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS je usluga koja pruža preglede programa od strane korisnika"
+
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:398
+msgid "GNOME Shell Extensions Repository"
+msgstr "Riznica sa proširenjima Gnomove školjke"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/shell-extensions/gs-plugin-shell-extensions.c:715
+msgid "Downloading shell extension metadata…"
+msgstr "Preuzimam metapodatke proširenja školjke…"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:211
+msgid "Snap Store"
+msgstr "Skladište snepova"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snappy Support"
+msgstr "Podrška za Snepi (Snappy)"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snep je univerzalni Linuks paket"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/steam/gs-plugin-steam.c:600
+msgid "Downloading application page…"
+msgstr "Preuzimam stranicu programa…"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:6
+msgid "Steam Support"
+msgstr "Podrška za Stim (Steam)"
+
+#: plugins/steam/org.gnome.Software.Plugin.Steam.metainfo.xml.in:7
+msgid "The ultimate entertainment platform from Valve"
+msgstr "Krajnja platforma za zabavu od Valva"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Poređano po nazivu"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Poređano po oceni"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Spisak dodatnih izvora koji su prethodno bili uključeni"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Spisak dodatnih izvora koji su prethodno bili uključeni prilikom "
+#~ "instalacije programa trećih lica."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Prikazuje neslobodan softver u rezultatima pretrage"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "Spisak neslobodnih izvora koji se mogu po izboru uključiti"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Pretpodešeno međudejstvo između igrača bez mogućnosti ćaskanja"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Razmena korisničkih podataka sa trećim stranama"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Obezbeđuje pristup dodatnom softveru, uključujući veb preglednike i igre."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Da uključim izvore vlasničkog softvera?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Nema instaliranih programa ili dodataka, druge vrste programa mogu biti "
+#~ "instalirane"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Obično ima ograničenja na korišćenje i na pristup izvornom kodu."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Izvori vlasničkog softvera"
+
+#~ msgid "Remove Source"
+#~ msgstr "Ukloni izvor"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Dodatni izvori programa se mogu preuzeti sa interneta. Oni će vam "
+#~ "omogućiti instaliranje programa koji nisu dostupni u operativnom sistemu "
+#~ "%s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Uklanjanjem izvora uklonićete takođe i sve programe koje ste sa njega "
+#~ "instalirali."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Nema programa instaliranih sa ovog izvora"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Instalirani sa ovog izvora"
+
+#~ msgid "Source Details"
+#~ msgstr "Pojedinosti programa"
+
+#~ msgid "Last Checked"
+#~ msgstr "Poslednja provera"
+
+#~ msgid "Added"
+#~ msgstr "Dodat"
+
+#~ msgid "Website"
+#~ msgstr "Veb stranica"
+
+#~ msgid "page1"
+#~ msgstr "stranica1"
+
+#~ msgid "page2"
+#~ msgstr "stranica2"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "„%s“ [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgid "About Software"
+#~ msgstr "O Programima"
+
+#~ msgid "Total"
+#~ msgstr "Ukupno"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Ne mogu da nađem „%s“"
+
+#~ msgid "_Install All"
+#~ msgstr "_Instaliraj sve"
+
+#~ msgid "Other Updates"
+#~ msgstr "Druga ažuriranja"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Nisam uspeo da instaliram „%s“."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Nisam uspeo da uklonim „%s“."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Uverite se da imate pristup internetu i pokušajte ponovo."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Oslobodite prostor na disku pa pokušajte ponovo."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Ako se problem ponovi, obratite se dostavljaču softvera."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ništa"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Sve"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Izdvojeno"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Hemija"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgid "Science"
+#~ msgstr "Nauka"
+
+#~ msgid " or "
+#~ msgstr " ili "
+
+#~ msgid "3rd party"
+#~ msgstr "trećih lica"
+
+#~ msgid "web app"
+#~ msgstr "programi veba"
+
+#~ msgid "nonfree"
+#~ msgstr "neslobodni"
+
+#~ msgid "_Installing"
+#~ msgstr "_Instaliram"
+
+#~ msgid "_Removing"
+#~ msgstr "_Uklanjam"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Nepoznata"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Izračunavam…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Nepoznata"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Ovaj program isporučuju treće strane."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Ovaj program isporučuje treća strana i možda sadrži neslobodne sastojke."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Ovaj program možda sadrži neslobodne sastojke."
+
+#~ msgid "_History"
+#~ msgstr "_Istorijat"
+
+#~ msgid "Size"
+#~ msgstr "Veličina"
+
+#~ msgid "non-free"
+#~ msgstr "neslobodni"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Preporučeni kancelarijski programi"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Izvori programa vam daju pristup dodatnim programima."
+
+#~ msgid "One Star"
+#~ msgstr "Jedna zvezdica"
+
+#~ msgid "Two Stars"
+#~ msgstr "Dve zvezdice"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tri zvezdice"
+
+#~ msgid "Four Stars"
+#~ msgstr "Četiri zvezdice"
+
+#~ msgid "Five Stars"
+#~ msgstr "Pet zvezdica"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Nisam pronašao podatke toka programa"
+
+#~ msgid "Audio"
+#~ msgstr "Zvuk"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Uređivanje"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Baze podataka"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Narezivanje diska"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham radio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mešači"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Muzika"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Snimači"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Sekvenceri"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Tjuneri"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Izgradnja"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Baze podataka"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IRO"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilisanje"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Revision Control"
+#~ msgstr "Upravljanje revizijama"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Prevođenje"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Veb programiranje"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Računarstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Građevinarstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Prikazivanje podataka"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektrika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Inženjerstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geonauka"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Istorija"
+
+# https://sr.wiktionary.org/sr/%D1%85%D1%83%D0%BC%D0%B0%D0%BD%D0%B8%D0%BE%D1%80%D0%B0
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humanizam"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Obrada slika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Karte"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Muzika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analiza brojeva"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Paralelno računarstvo"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Pucačine"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Oponašanje (simulacije)"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sportske igre"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D grafika"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Izdavaštvo"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Raster grafika"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Pozivanje (dial-ap)"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "El. pošta"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Dovod"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Prenos datoteka"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham radio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Brze poruke"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC klijenti"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Nadzor"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Udaljeni pristup"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefonija"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Veb programiranje"
+
+#~ msgid "Office"
+#~ msgstr "Kancelarija"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafikon"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Upravljanje kontaktima"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Rečnik"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "El. pošta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Dijagram toka"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "LDP (PDA)"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografija"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Izlaganje"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Upravljanje projektima"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Izdavaštvo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Tabele"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Pregledač"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Umetnost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Veštačka inteligencija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Hemija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Računarstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Izgradnja"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Prikazivanje podataka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektrika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Inženjerstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologija"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geonauka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Istorija"
+
+# https://sr.wiktionary.org/sr/%D1%85%D1%83%D0%BC%D0%B0%D0%BD%D0%B8%D0%BE%D1%80%D0%B0
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humanizam"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Obrada slika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Jezici"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Literatura"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Karte"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicina"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Analiza brojeva"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Paralelno računarstvo"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fizika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotika"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sportovi"
+
+#~ msgid "System"
+#~ msgstr "Sistem"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Oponašavač (emulator)"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Upravnik datoteka"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File System"
+#~ msgstr "Sistem datoteka"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Alatke za datoteke"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Praćenje"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Bezbednost"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Emulator terminala"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Pristupačnost"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arhiviranje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Kalkulator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Časovnik"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Pakovanje"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Alatke datoteka"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Karte"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Alati za telefoniju"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Uređivanje"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Baza podataka"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Narezivanje diska"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Puštači"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Snimači"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Prethodno ažuriranje je ostalo nedovršeno."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Ažuriranje se ne može instalirati. Ovo se često dešava ukoliko je problem "
+#~ "u samom ažuriranju. Sačekajte novo ažuriranje i onda pokušajte ponovo."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Mrežni program"
+
+#~ msgid "Checking for updates…"
+#~ msgstr "Proveravam ažuriranja…"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Unesi režim usluge GPrograma"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Jedno ažuriranje nije označeno na pravi način."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Ažuriranje ne može biti dovršeno."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Zatraženo je ažuriranje van mreže ali nijedan paket nije zatražio "
+#~ "ažuriranje."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Nema više prostora na disku."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Jedno ažuriranje nije uspelo da se ispravno instalira."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Ažuriranje van mreže nije uspelo na očekivani način."
+
+#~ msgid "No sources found."
+#~ msgstr "Nisam pronašao izvore."
+
+#~ msgid "OK"
+#~ msgstr "U redu"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i instalirani program i %i dodatak"
+#~ msgstr[1] "%i instalirana programa i %i dodatka"
+#~ msgstr[2] "%i instaliranih programa i %i dodataka"
+#~ msgstr[3] "Jedan instalirani program i jedan dodatak"
+
+#~ msgid "Picks"
+#~ msgstr "Izabrani"
+
+#~ msgid "Done"
+#~ msgstr "Gotovo"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "Podešava nivo navedenog pročišćavanja"
+
+#~ msgid "_Pending"
+#~ msgstr "_Na čekanju"
+
+# timezone.
+#~ msgid "Complicated!"
+#~ msgstr "Zamršeno!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "Skorašnja osveženja softvera"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "Baze podataka"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham radio"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "Razvoj veba"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "Alatke za datoteke"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "Karte"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "Duhovnost"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "Slovni likovi"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "Kodeci"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "Izvori ulaza"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "Paketi jezika"
+
+#~ msgid "Description"
+#~ msgstr "Opis"
+
+#~ msgid "The search term to use when starting the UI"
+#~ msgstr "Obrasci pretrage za korišćenje prilikom pokretanja sučelja"
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "_Instaliranih (%d)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "_Osveženja (%d)"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..76fdf77
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,5644 @@
+# Swedish translation for gnome-software.
+# Copyright © 2014-2020 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Translators:
+# Mattias Eriksson <snaggen@gmail.com>, 2014.
+# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2015, 2016, 2017, 2018, 2019, 2020.
+# Sebastian Rasmussen <sebras@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-23 18:36+0200\n"
+"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Programvara"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Programhanterare för GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Programvara gör det möjligt att hitta och installera nya program och "
+"systemkomponenter, samt att ta bort befintligt installerade program."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Programvara förevisar föreslagna och populära program med användbara "
+"beskrivningar och ett flertal skärmbilder per program. Program kan antingen "
+"hittas genom att bläddra igenom kategorilistan eller genom att söka. Det gör "
+"det även möjligt att uppdatera systemet genom ett frånkopplat "
+"uppdateringsförfarande."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Översiktspanel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Detaljpanel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Installerat-panel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Uppdateringspanel"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Detaljerna för uppdateringen"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "GNOME-projektet"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Installera en appstream-fil till en systemplats"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Installerar en appstream-fil till en systemplats"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "En lista över kompatibla projekt"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Detta är en lista över kompatibla projekt som vi bör visa som GNOME, KDE och "
+"XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr ""
+"Huruvida uppdateringar och uppgraderingar ska hanteras i GNOME Programvara"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Om inaktiverad kommer GNOME Programvara att dölja uppdateringspanelen och "
+"inte utföra några automatiska uppdateringsåtgärder eller ställa frågor om "
+"uppgraderingar."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Hämta och installera uppdateringar automatiskt"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Om aktiverat, kommer GNOME Programvara automatiskt att hämta "
+"programvaruuppdateringar i bakgrunden och installera sådana som inte kräver "
+"en omstart."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Avisera användaren om programvara som uppdaterats i bakgrunden"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Om aktiverat, kommer GNOME Programvara att avisera användaren om "
+"uppdateringar som inträffade medan användaren var inaktiv."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr ""
+"Huruvida automatisk uppdatering ska ske för anslutning med begränsad "
+"surfmängd"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Om aktiverad kommer GNOME Programvara att uppdatera automatiskt i bakgrunden "
+"även på en anslutning med begränsad surfmängd (hämtar förr eller senare "
+"metadata, söker efter uppdateringar o.s.v., vilket kan leda till kostnader "
+"för användaren)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Huruvida det är den första körningen av GNOME Programvara"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Visa stjärnbetyg intill program"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Filtrera program baserat på standardgrenen som ställts in för fjärren"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Icke-fria program visar en varningsdialog före installation"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"När icke-fria program installeras kan en varningsdialog visas. Detta styr om "
+"dialogen undertrycks."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "En lista över populära program"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"En lista över program att använda, som åsidosätter de som definieras av "
+"systemet."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Tidsstämpeln för den senaste uppdateringskontrollen"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Tidsstämpeln för den senaste uppgraderingsaviseringen"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Tidsstämpeln för den första säkerhetsuppdateringen, rensas efter uppdatering"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Tidsstämpeln för den senaste uppdateringen"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Den sista tidsstämpeln då systemet var anslutet och erhöll uppdateringar"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Tiden i sekunder för att bekräfta att skärmbilden uppströms fortfarande är "
+"giltig"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Att välja ett högre värde betyder färre omvägar till fjärrservern men det "
+"kan ta längre tid innan uppdateringar till skärmbilderna visas för "
+"användaren. Värdet 0 betyder att vi aldrig kontrollerar servern om bilden "
+"redan finns i cachen."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Servern som används för programomdömen"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Den minsta karmapoängen för omdömen"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Omdömen med karma mindre än detta tal kommer inte att visas."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "En lista över officiella förråd som inte ska anses vara tredje part"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "En lista över officiella förråd som ska anses vara fri programvara"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "Licens-URL att använda då ett program ska anses vara fri programvara"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Installera paketerade program för alla användare på systemet om möjligt"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Tillåt åtkomst till dialogen Programförråd"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Erbjud uppgraderingar för förhandsutgåvor"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Visa gränssnittselement som informerar användaren om att ett program är icke-"
+"fritt"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Visa prompten för att installera icke-fria programförråd"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Visa den installerade storleken för program i listan över installerade "
+"program"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://sv.wikipedia.org/wiki/Propriet%C3%A4r_programvara'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI som förklarar icke-fri och proprietär programvara"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"En lista över URL:er som pekar till appstream-filer som kommer att hämtas "
+"till en app-info-mapp"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Installera AppStream-filerna till en systemomfattande plats för alla "
+"användare"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Aktivera förråd för GNOME Shell-tillägg"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"En sträng som lagrar gnome-online-account-ID:t som används för att logga in"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Installera programvara"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Installera valda programvaror på systemet"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Markera allt"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Avmarkera allt"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Programförråd"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Uppdateringsinställningar"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Programvara"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Gå bakåt"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Utforska"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Installerat"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Uppdateringar"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Sök"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Källa"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Programförråd"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Undersök disk"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Nätverksinställningar"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Starta om nu"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Mer information"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Automatiska uppdateringar pausade"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Lär dig _mer"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Lokal fil"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Väntar"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Installerad"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Installerar"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Tar bort"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Uppstartsläge: antingen ”updates” (uppdateringar) , ”updated” (uppdaterat), "
+"”installed” (installerat) eller ”overview” (översikt)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "LÄGE"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Sök efter program"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SÖKNING"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Visa programdetaljer (utifrån program-ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Visa programdetaljer (utifrån paketnamn)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKTNAMN"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Installera programmet (utifrån program-ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Öppna en lokal paketfil"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILNAMN"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Typen av interaktion som förväntas för denna åtgärd: antingen "
+"”none” (ingen), ”notify” (avisera) eller ”full”"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Visa utökad felsökningsinformation"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Installerar väntande uppdateringar i bakgrunden"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Visa uppdateringsinställningar"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Avsluta den körande instansen"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Föredra lokala filkällor framför AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Visa versionsnummer"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Mattias Eriksson <snaggen@gmail.com>\n"
+"Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
+"\n"
+"Skicka synpunkter på översättningen till\n"
+"<tp-sv@listor.tp-sv.se>."
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Om Programvara"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Ett trevligt sätt att hantera programvaran på ditt system."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Det finns tyvärr inga detaljer för det programmet."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Besök webbplatsen"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Installera…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Installera"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Uppdatera"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Ta bort"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Enhet kan inte användas under uppdatering."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Kräver ytterligare behörigheter"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Inloggning krävde fjärren %s (rike %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Inloggning krävs"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "A_vbryt"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Logga in"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Användare"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Lösen_ord"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Övrigt"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Alla"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "I blickfånget"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s i blickfånget"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Betyg"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Namn"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Visa"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Filtermeny för underkategorier"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sortera"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Sorteringsmeny för underkategorier"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Ange ett tal från 1 till %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Välj ett program:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "OS-uppdateringar har nu installerats"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Nyligen installerade uppdateringar finns tillgängliga för granskning"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s har installerats"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "En omstart krävs för att ändringarna ska börja gälla."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Programmet är redo att användas."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Starta om"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Starta"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Installera tredjepartsprogramvara?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Aktivera programförråd från tredje part?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s är inte <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">programvara med fri och öppen källkod</a>, och "
+"tillhandahålls av ”%s”."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s tillhandahålls av ”%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Detta programförråd måste vara aktiverat för att fortsätta installation."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Det kan vara olagligt att installera eller använda %s i vissa länder."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Det kan vara olagligt att installera eller använda denna kodek i vissa "
+"länder."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Varna inte igen"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Aktivera och installera"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Detaljerat felmeddelande från pakethanteraren lyder:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Detaljer"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "En uppdatering har installerats"
+msgstr[1] "Uppdateringar har installerats"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "En omstart krävs för att den ska börja gälla."
+msgstr[1] "En omstart krävs för att de ska börja gälla."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Inte nu"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Inget tecknat våld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Tecknade figurer i farliga situationer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Tecknade figurer i aggressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Våldsskildring som involverar tecknade figurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Inget orealistiskt våld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Figurer i farliga situationer lätt åtskiljbara från verkligheten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Figurer i aggressiv konflikt lätt åtskiljbar från verkligheten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Våldsskildring lätt åtskiljbar från verkligheten"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Inget realistiskt våld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Någorlunda realistiska figurer i farliga situationer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Skildringar av realistiska figurer i aggressiv konflikt"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Våldsskildring som involverar realistiska figurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Ingen blodsutgjutelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Orealistisk blodsutgjutelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Realistisk blodsutgjutelse"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Skildringar av blodsutgjutelse och lemlästning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Inget sexuellt våld"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Våldtäkt eller annat våldsamt sexuellt beteende"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Inga referenser till alkohol"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Referenser till alkoholhaltiga drycker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Användning av alkoholhaltiga drycker"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Inga referenser till illegala droger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Referenser till illegala droger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Användning av illegala droger"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Inga referenser till tobaksprodukter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Referenser till tobaksprodukter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Användning av tobaksprodukter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Inga sorters nakenhet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Kortvarig konstnärlig nakenhet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Långvarig nakenhet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Inga sexuella referenser eller skildringar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Provokativa referenser eller skildringar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Sexuella referenser eller skildringar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Skildring av sexuellt beteende"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Inga sorters svordomar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Milda eller tillfälligt förekommande svordomar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Måttlig användning av svordomar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Grova eller ofta förekommande svordomar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Ingen olämplig humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Slapstickhumor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Vulgär humor eller badrumshumor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Mogen eller sexuell humor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Inget diskriminerande språkbruk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Negativ inställning mot en specifik folkgrupp"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Diskriminering avsedd att orsaka emotionell smärta"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Explicit diskriminering baserad på kön, sexuell läggning, ras eller religion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Inga sorters annonser"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Produktplacering"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Explicita referenser till specifika varumärken eller varumärkesskyddade "
+"produkter"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Användare uppmanas att köpa specifika föremål i verkliga världen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Inget spelande"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Spel på slumpbaserade händelser med marker eller poäng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Spel med låtsaspengar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Spel med riktiga pengar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Ingen möjlighet att spendera pengar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Användare uppmanas att skänka riktiga pengar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Möjlighet att spendera riktiga pengar i programmet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Inget sätt att chatta med andra användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Interaktion mellan användare utan chattfunktion"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Modererad chattfunktion mellan användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Okontrollerad chattfunktion mellan användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Inget sätt att prata med andra användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Okontrollerad ljud- eller videochattfunktion mellan användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Ingen delning av e-postadresser eller användarnamn på sociala nätverk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Delning av e-postadresser eller användarnamn på sociala nätverk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Ingen delning av användarinformation med tredje part"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Söker efter den senaste programversionen"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Delning av diagnostiska data som inte låter andra identifiera användaren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Delning av information som låter andra identifiera användaren"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Ingen delning av fysisk plats med andra användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Delning av fysisk plats med andra användare"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Inga referenser till homosexualitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Indirekta referenser till homosexualitet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Kyssande mellan personer av samma kön"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Skildring av sexuellt beteende mellan personer av samma kön"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Inga referenser till prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Indirekta referenser till prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Direkta referenser till prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Skildringar av prostitution"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Inga referenser till otrohet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Indirekta referenser till otrohet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Direkta referenser till otrohet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Skildringar av otrohet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Inga sexualiserade figurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Lättklädda mänskliga figurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Öppet sexualiserade mänskliga figurer"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Inga referenser till skändning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Skildringar av eller referenser till historisk skändning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Skildringar av nutida skändning av människor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Realistiska skildringar av nutida skändning"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Inga synliga kvarlevor av människor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Synliga kvarlevor av människor"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Kvarlevor av döda människor som utsatts för väder och vind"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Realistiska skildringar av skändning av mänskliga kroppar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Inga referenser till slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Skildringar av eller referenser till historiskt slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Skildringar av nutida slaveri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Grafiska skildringar av nutida slaveri"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Allmänt"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "ALLA"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Endast för vuxna"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Mogen"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Tonåring"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Alla över 10 år"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Alla"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Tidig barndom"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Ett program"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s efterfrågar ytterligare stöd för filformat."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Ytterligare MIME-typer krävs"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s efterfrågar ytterligare typsnitt."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Ytterligare typsnitt krävs"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s efterfrågar ytterligare multimediakodekar."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Ytterligare multimediakodekar krävs"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s efterfrågar ytterligare skrivardrivrutiner."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Ytterligare skrivardrivrutiner krävs"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s efterfrågar ytterligare paket."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Ytterligare paket krävs"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Sök i Programvara"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Ta bort…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Väntar på att installeras…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Väntar på att uppdateras…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Förbereder…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Detta program kan endast användas när det finns en fungerande "
+"internetanslutning."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Installera"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Installera…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Starta"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Ta bort"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Nätverk"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Kan kommunicera över nätverket"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Systemtjänster"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Kan komma åt D-Bus-tjänster på systembussen"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Sessionstjänster"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Kan komma åt D-Bus-tjänster på sessionsbussen"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Enheter"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Kan komma åt systemets enhetsfiler"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Hemmapp"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Kan visa, redigera och skapa filer"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Kan visa filer"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Filsystem"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Hämtningsmapp"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Inställningar"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Kan visa och ändra alla inställningar"
+
+# Det är X11 som avses
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Gammalt fönstersystem"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Använder ett gammalt, osäkert fönstersystem"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Flykt från sandlåda"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Kan undkomma sandlådan och gå runt alla andra begränsningar"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Detta program körs fullständigt i sandlåda."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Kan inte avgöra vilka delar av systemet som detta program har åtkomst till. "
+"Detta är typiskt för äldre program."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Okänd"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Aldrig"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Okänd"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Låg"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Medel"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Hög"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Okänd"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Du behöver vara ansluten till internet för att skriva ett omdöme"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Kunde inte hitta ”%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Allmän egendom"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://sv.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.sv"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Fri programvara"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Användare är bundna till följande licens:"
+msgstr[1] "Användare är bundna till följande licenser:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Mer information"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Detaljsida"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Hämtar"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Uppdatera"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Lägg till genväg"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Ta bort genväg"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ingen skärmbild tillhandahållen"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Programförråd inkluderat"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Programmet inkluderar ett programförråd som tillhandahåller uppdateringar "
+"och tillgång till annan programvara."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Inget programförråd inkluderad"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Programmet inkluderar inget programförråd. Det kommer inte att uppdateras "
+"med nya versioner."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Denna programvara tillhandahålls redan av din distribution och bör inte "
+"ersättas."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Programförråd identifierat"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Att lägga till denna programförråd ger dig tillgång till ytterligare "
+"programvara och uppgraderingar."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Använd endast programförråd som du litar på."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Webbplats"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Donera"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Lokalanpassad enligt ditt språk"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Dokumentation"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Publiceringsaktivitet"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Systemintegration"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "I sandlåda"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Version"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Åldersklassificering"
+
+# Singular för att passa bättre med strängvärdena Låg/Medel/Hög
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Behörighet"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Uppdaterad"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategori"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Installerad storlek"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Hämtningsstorlek"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Utvecklare"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Licens"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Fri"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Proprietär"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Tillägg"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Valda tillägg kommer att installeras med programmet."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Omdömen"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Skriv ett omdöme"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Visa mer"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Detta betyder att programvaran fritt kan köras, kopieras, distribueras, "
+"studeras och ändras."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Proprietär programvara"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Detta innebär att programvaran ägs av en individ eller ett företag. Det "
+"finns ofta restriktioner på dess användning och dess källkod är vanligtvis "
+"inte åtkomlig."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Okänd programvarulicens"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Licensvillkoren för denna programvara är okända."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Programmet fick denna klassificering eftersom det innehåller:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Inga detaljer fanns tillgängliga för denna klassificering."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " och "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Tillgängliga typsnitt för skriftspråket %s"
+msgstr[1] "Tillgängliga typsnitt för skriftspråken %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Tillgänglig programvara för %s"
+msgstr[1] "Tillgängliga programvaror för %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Kan inte hitta begärd programvara"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s kunde inte hittas"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "på webbplatsen"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Inga program finns tillgängliga som tillhandahåller filen %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Information om %s, samt alternativ för hur du införskaffar saknade program "
+"kan hittas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Inga program finns tillgängliga för %s-stöd."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s är inte tillgängligt."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Information om %s, samt alternativ för hur du införskaffar ett program som "
+"stöder detta format kan hittas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Inga typsnitt som stöder skriftspråket %s finns tillgängliga."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Information om %s, samt alternativ för hur du införskaffar ytterligare "
+"typsnitt kan hittas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Inga kodek-tillägg finns tillgängliga för %s-formatet."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Information om %s, samt alternativ för hur du införskaffar en kodek som kan "
+"spela detta format kan hittas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Inga Plasma-resurser finns tillgängliga för %s-stöd."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Information om %s, samt alternativ för hur du införskaffar ytterligare "
+"Plasma-resurser kan hittas %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Inga skrivardrivrutiner finns tillgängliga för %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Information om %s, samt alternativ för hur du införskaffar en drivrutin som "
+"stöder denna skrivare kan hittas %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "denna webbplats"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Tyvärr kunde %s som du sökte efter inte hittas. Se %s för mer information."
+msgstr[1] ""
+"Tyvärr kunde %s som du sökte efter inte hittas. Se %s för mer information."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Kunde inte hitta några sökresultat"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s-filformat"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kodeksida"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Välkommen"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Välkommen till Programvara"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Programvara låter dig installera alla programvaror du behöver, allt från ett "
+"ställe. Se våra rekommendationer, bläddra i kategorierna, eller sök efter de "
+"program du vill ha."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Då sätter vi igång"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Borttagen"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Installerad"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Uppdaterad"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Okänt"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Historik"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Systemprogram"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Installerat-sida"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Programvarukatalog hämtas"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Inläsningssida"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Startar…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Aktuellt nätverk har datakvot. Anslutningar med datakvot har datagränser "
+"eller kostnader förknippade med sig. För att minska dataanvändningen så har "
+"automatiska uppdateringar därför pausats.\n"
+"\n"
+"Automatiska uppdateringar kommer att återupptas då ett nätverk utan "
+"datakvoter blir tillgängligt. Tills dess är det fortfarande möjligt att "
+"manuellt installera uppdateringar.\n"
+"\n"
+"Alternativt kan denna inställning ändras om det aktuella nätverket felaktigt "
+"identifierats som att ha datakvoter."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Öppna nätverks_inställningar"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Modereringssida"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Det finns inga omdömen att moderera"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "system"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "användare"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Gren"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Format"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Installation"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Mer…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Rekommenderade ljud- & videoprogram"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Rekommenderade Spel"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Rekommenderade grafikprogram"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Rekommenderade produktivitetsprogram"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Kom åt ytterligare programvara från utvalda tredjepartskällor."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Delar av denna programvara är proprietär och har därför restriktioner vad "
+"gäller användning, delning och åtkomst till källkod."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Lär dig mer…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Aktivera"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Översiktssida"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Aktivera programförråd från tredje part?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Föregående"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Nästa"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Redaktionens val"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Senaste utgåvor"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategorier"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Inget programdata hittades"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Förbered %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Är du säker att du vill ta bort förrådet %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Alla paket från %s kommer att tas bort, och du måste installera om förrådet "
+"för att använda dem igen."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Är du säker att du vill ta bort %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s kommer att tas bort, och du måste installera det för att använda det igen."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Installerad)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Uppdateringsinställningar"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Automatiska uppdateringar"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Automatiska uppdateringar inaktiveras vid mobilanslutning eller anslutning "
+"med begränsad surfmängd."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Aviseringar för automatiska uppdateringar"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Visa aviseringar då uppdateringar har installerats automatiskt."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Viss nu installerad programvara är inte kompatibel med %s. Om du fortsätter "
+"kommer följande att tas bort automatiskt under uppgraderingen:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Inkompatibel programvara"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Fortsätt"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u program installerat"
+msgstr[1] "%u program installerade"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u tillägg installerat"
+msgstr[1] "%u tillägg installerade"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u program"
+msgstr[1] "%u program"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tillägg"
+msgstr[1] "%u tillägg"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s och %s installerade"
+msgstr[1] "%s och %s installerade"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Ta bort ”%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Inaktivera ”%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Programvara som har installerats från detta förråd kommer inte längre att "
+"erhålla uppdateringar, inklusive säkerhetsfixar."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Inaktivera"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "operativsystemet"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr ""
+"Dessa förråd kompletterar den standardprogramvara som tillhandahålls av %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Förråd från tredje part"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Inga ytterligare förråd"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Aktivera"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Ta bort…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Inaktivera…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Aktiverar"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Inaktiverar"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Aktiverat"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Inaktiverat"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Hatar det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Tycker inte om det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Det är OK"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Tycker om det"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Älskar det"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Ta mer tid på dig att skriva omdömet"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Välj ett stjärnbetyg"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Sammanfattningen är för kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Sammanfattningen är för lång"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Beskrivningen är för kort"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Beskrivningen är för lång"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Skicka omdöme"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Skicka"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Sammanfattning"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Ge en kort sammanfattning av ditt omdöme, t.ex. ”Bra program, rekommenderas”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Omdöme"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Vad tycker du om programmet? Försök att ge skäl till dina åsikter."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Se vilka data som skickas i vår <a href=\"https://odrs.gnome.org/privacy"
+"\">sekretesspolicy</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "totalt antal omdömen"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Du kan rapportera omdömen för kränkande, oförskämt eller diskriminerande "
+"beteende."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"När det är rapporterat kommer omdömet att gömmas tills det har kontrollerats "
+"av en administratör."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Rapportera omdöme?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Rapportera"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Var detta omdöme användbart för dig?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Ja"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Nej"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Bah"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Rapportera…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Ta bort…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Skärmbild kunde inte hittas"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Misslyckades med att läsa in bild"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Skärmbildsstorlek kunde inte hittas"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Kunde inte skapa katalog för temporärlagring"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Skärmbilden är ogiltig"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Skärmbilden inte tillgänglig"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Skärmbild"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u träff till"
+msgstr[1] "%u träffar till"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Söksida"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Inget program hittades"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "”%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Kunde inte hämta uppdateringar för fast programvara från %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Kunde inte hämta uppdateringar från %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Kunde inte hämta uppdateringar"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Kunde inte hämta uppdateringar: internetanslutning krävdes men var inte "
+"tillgänglig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Kunde inte hämta uppdateringar %s: otillräckligt diskutrymme"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Kunde inte hämta uppdateringar: otillräckligt diskutrymme"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Kunde inte hämta uppdateringar: autentisering krävdes"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Kunde inte hämta uppdateringar: autentiseringen var ogiltig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr ""
+"Kunde inte hämta uppdateringar: du har inte behörighet att installera "
+"programvara"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Kunde inte hämta lista över uppdateringar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Kunde inte installera %s eftersom hämtning misslyckades från %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Kunde inte installera %s eftersom hämtning misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr ""
+"Kunde inte installera %s eftersom exekveringsmiljön %s ej är tillgänglig"
+
+# TODO: as *it's* not supported?
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Kunde inte installera %s eftersom det inte stöds"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Kunde inte installera: internetanslutning krävdes men var inte tillgänglig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Kunde inte installera: programmets format är ogiltigt"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Kunde inte installera %s: otillräckligt diskutrymme"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Kunde inte installera %s: autentisering krävdes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Kunde inte installera %s: autentiseringen var ogiltig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr ""
+"Kunde inte installera %s: du har inte behörighet att installera programvara"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Kunde inte installera %s: nätspänning krävs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Kunde inte installera %s: Batterinivån är för låg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Kunde inte installera %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Kunde inte uppdatera %s från %s eftersom hämtning misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Kunde inte uppdatera %s eftersom hämtning misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Kunde inte installera uppdateringar från %s eftersom hämtning misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Kunde inte installera uppdateringar eftersom hämtning misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Kunde inte uppdatera: internetanslutning krävdes men var inte tillgänglig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Kunde inte uppdatera %s: otillräckligt diskutrymme"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Kunde inte installera uppdateringar: otillräckligt diskutrymme"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Kunde inte uppdatera %s: autentisering krävdes"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Kunde inte installera uppdateringar: autentisering krävdes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Kunde inte uppdatera %s: autentiseringen var ogiltig"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Kunde inte installera uppdateringar: autentiseringen var ogiltig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr ""
+"Kunde inte uppdatera %s: du har inte behörighet att uppdatera programvara"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Kunde inte installera uppdateringar: du har inte behörighet att uppdatera "
+"programvara"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Kunde inte uppdatera %s: nätspänning krävs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Kunde inte installera uppdateringar: nätspänning krävs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Kunde inte uppdatera %s: Batterinivån är för låg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Kunde inte installera uppdateringar: Batterinivån är för låg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Kunde inte uppdatera %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Kunde inte installera uppdateringar"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Kunde inte uppgradera till %s från %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Kunde inte uppgradera till %s eftersom hämtning misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Kunde inte uppgradera till %s: internetanslutning krävdes men var inte "
+"tillgänglig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Kunde inte uppgradera till %s: otillräckligt diskutrymme"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Kunde inte uppgradera till %s: autentisering krävdes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Kunde inte uppgradera till %s: autentiseringen var ogiltig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Kunde inte uppgradera till %s: du har inte behörighet att uppgradera"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Kunde inte uppgradera till %s: nätspänning krävs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Kunde inte uppgradera till %s: Batterinivån är för låg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Kunde inte uppgradera till %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Kunde inte ta bort %s: autentisering krävdes"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Kunde inte ta bort %s: autentiseringen var ogiltig"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Kunde inte ta bort %s: du har inte behörighet att ta bort programvara"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Kunde inte ta bort %s: nätspänning krävs"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Kunde inte ta bort %s: Batterinivån är för låg"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Kunde inte ta bort %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Kunde inte köra %s: %s har inte installerats"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Otillräckligt diskutrymme — frigör utrymme och försök igen"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Något gick tyvärr fel"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Misslyckades med att installera fil: stöds inte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Misslyckades med att installera fil: autentisering misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Misslyckades med att installera: stöds inte"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Misslyckades med att installera: autentisering misslyckades"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Kunde inte kontakta %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s behöver startas om för att använda nya insticksmoduler."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Detta program behöver startas om för att använda nya insticksmoduler."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Nätspänning krävs"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Batterinivån är för låg"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Källa: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Installerar)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Tar bort)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Ta bort alla"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Ingen beskrivning för uppdatering tillgänglig."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Installerade på %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Installerade uppdateringar"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Tillägg"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Borttagningar"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Uppdaterar"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Nedgraderingar"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Inga uppdateringar har installerats på detta system."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Säkerhetsuppdateringar väntar"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Du rekommenderas att nu installera viktiga uppdateringar"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Starta om & installera"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Programvaruuppdateringar tillgängliga"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Viktiga system- och programuppdateringar är redo att installeras"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Visa"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u program uppdaterades — Omstart krävs"
+msgstr[1] "%u program uppdaterades — Omstart krävs"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u program uppdaterades"
+msgstr[1] "%u program uppdaterades"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s har uppdaterats."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Starta om programmet."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s och %s har uppdaterats."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u program kräver en omstart."
+msgstr[1] "%u program kräver en omstart."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Inkluderande %s, %s och %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Operativsystemsuppdateringar ej tillgängliga"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Uppgradera för att fortsätta erhålla säkerhetsuppdateringar."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "En ny version av %s finns tillgänglig att installera"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Programvaruuppgradering tillgänglig"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Programvaruuppdatering misslyckades"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Misslyckades med att installera en viktig systemuppdatering."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Visa detaljer"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Systemuppgradering slutförd"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Välkommen till %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Programvaruuppdatering installerad"
+msgstr[1] "Programvaruuppdateringar installerade"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "En viktig systemuppdatering har installerats."
+msgstr[1] "Viktiga systemuppdateringar har installerats."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Granska"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Misslyckades med att uppdatera"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Systemet var redan uppdaterat."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Uppdateringen avbröts."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Internetåtkomst krävdes men fanns inte tillgänglig. Försäkra dig om att du "
+"har internetåtkomst och försök igen."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Det fanns säkerhetsproblem med uppdateringen. Konsultera din "
+"programvaruleverantör för mer detaljer."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Det fanns inte tillräckligt diskutrymme. Frigör utrymme och försök igen."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Uppdateringen gick tyvärr inte att installera. Vänta på ännu en uppdatering "
+"och försök igen. Kontakta din programvaruleverantör om problemet kvarstår."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Igår %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Igår %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Två dagar sedan"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Tre dagar sedan"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Fyra dagar sedan"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Fem dagar sedan"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Sex dagar sedan"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "En vecka sedan"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Två veckor sedan"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Letar efter nya uppdateringar…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Förbereder uppdateringar…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Detta kan ta ett tag)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Senaste sökning: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s stöds inte längre."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Ditt operativsystem stöds inte längre."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Detta betyder att det inte erhåller säkerhetsuppdateringar."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Du rekommenderas att nu uppgradera till en senare version."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Kostnader kan tillkomma"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Att söka efter uppdateringar via mobilt bredband kan medföra kostnader."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Sök ändå"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Inget nätverk"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Internetförbindelse krävs för att söka efter uppdateringar."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Söker…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Sök efter tillgängliga uppdateringar"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Uppdateringssida"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Programvara är uppdaterad"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "Att söka efter uppdateringar via mobilt bredband kan medföra kostnader"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Kontrollera ändå"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Anslut till nätverk för att söka efter uppdateringar"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Nätverksinställningar"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Uppdateringar hanteras automatiskt"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Starta om & uppdatera"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Uppdatera alla"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Integrerad fast programvara"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Kräver omstart"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Programuppdateringar"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Fast programvara för enheter"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Hämta"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Det rekommenderas att du säkerhetskopierar data och filer innan uppgradering."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Sta_rta om nu"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Uppdateringar kommer att tillämpas då datorn startas om."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s finns nu tillgänglig"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Väntar på att hämta %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Hämtar %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s redo att bli installerat"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "En större uppgradering, bättre polerad och med nya funktioner."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Lär dig mer"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Lägg till, ta bort eller uppdatera programvara på denna dator"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Uppdateringar;Uppgradera;Källor;Programvarukällor;Inställningar;Installera;"
+"Avinstallera;Program;Programvara;Mjukvara;Butik;App;Store;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Skapande & redigering av ljud"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Musikspelare"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Felsökare"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE-miljöer"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Artificiell intelligens"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kemi"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Språk"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematik"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotik"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Action"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Äventyr"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arkad"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Klossar"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Brädspel"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kort"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emulatorer"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Barn"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Logik"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rollspel"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Sport"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strategi"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D-grafik"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotografi"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Bildinläsning"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektorgrafik"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Visare"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Kalender"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Databas"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finans"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Ordbehandlare"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Typsnitt"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kodekar"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Inmatningskällor"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Språkpaket"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Lokalisering"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Hårdvarudrivrutiner"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chatt"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Nyheter"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Webbläsare"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Textredigerare"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Alla"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "I blickfånget"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Konst"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biografi"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Serietidningar"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Skönlitteratur"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Hälsa"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Historia"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Livsstil"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politik"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Sport"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Ljud & video"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Utvecklarverktyg"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Utbildning & vetenskap"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Spel"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafik & fotografi"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Produktivitet"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Kommunikation & nyheter"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Referens"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Verktyg"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Systemuppdateringar"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Innehåller prestanda-, stabilitets- och säkerhetsförbättringar."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Hämtar bilder i blickfånget…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "En Endless OS-uppdatering med nya funktioner och fixar."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS-uppdateringstjänsten kunde inte hämta och tillämpa uppdateringen."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Programvaras systemomfattande Appstream-installerare"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Misslyckades med att tolka kommandoradsargument"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Du måste ange exakt ett filnamn"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Detta program kan endast köras av root-användaren"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Misslyckades med att validera innehållstyp"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Misslyckades med att kopiera"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Hämtar extra metadatafiler…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Hämtar uppgraderingsinformation…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Uppgradera för att få de senaste funktionerna och förbättringarna vad gäller "
+"prestanda och stabilitet."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak-stöd"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak är ett ramverk för skrivbordsprogram på Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Hämtar flatpak-metadata för %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s-enhetsuppdatering"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s-systemuppdatering"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s inbäddad styrenhetsuppdatering"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s ME-uppdatering"
+
+# Behandlar det som ett namn då namnsättningen verkar vara starkt förknippad med Intel
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s Corporate ME-uppdatering"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s Consumer ME-uppdatering"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s-styrenhetsuppdatering"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt-styrenhetsuppdatering"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU-mikrokodsuppdatering"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s-konfigurationsuppdatering"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Hämtar signatur för uppdatering till fast programvara…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Hämtar metadata för uppdatering till fast programvara…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Stöd för uppgradering av fast programvara"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Tillhandahåller stöd för uppgradering av fast programvara"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Hämtar omdömen för program…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Open Desktop Ratings-stöd"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS är en tjänst som tillhandahåller användaromdömen av program"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap-affär"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap-stöd"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "En snap är ett universellt Linuxpaket"
+
+#~ msgid "About %s"
+#~ msgstr "Om %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Tilläggsinställningar"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Tillägg används på din egen risk. Om du får systemproblem rekommenderas "
+#~ "det att du inaktiverar dem."
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Skaltillägg"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Förråd för GNOME Shell-tillägg"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Hämtar metadata för skaltillägg…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell-tillägg"
+
+#~ msgid "Spacing"
+#~ msgstr "Utrymme"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Mängden utrymme mellan barn"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Program i blickfånget"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Stöd för webbapplikationer"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Kör populära webbapplikationer i en webbläsare"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Visa användargränssnittet för mapphantering"
+
+#~ msgid "Folder Name"
+#~ msgstr "Mappnamn"
+
+#~ msgid "_Add"
+#~ msgstr "_Lägg till"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Lägg till i programmapp"
+
+#~ msgid "Top Rated"
+#~ msgstr "Högsta betyg"
+
+#~ msgid "Failed to load components"
+#~ msgstr "Misslyckades med att läsa in komponenter"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS validerades utan problem!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Misslyckades med att läsa in fil"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Osparade ändringar"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Programlistan är redan inläst."
+
+#~ msgid "Merge documents"
+#~ msgstr "Sammanfoga dokument"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Förkasta ändringar"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Öppna AppStream-fil"
+
+#~ msgid "_Open"
+#~ msgstr "Ö_ppna"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Spara AppStream-fil"
+
+#~ msgid "_Save"
+#~ msgstr "_Spara"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Misslyckades med att spara fil"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Banderolldesign för %s borttagen."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Banderolldesign borttagen."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Programlistan har osparade ändringar."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Använd utförlig loggning"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Programvaras banderolldesignverktyg"
+
+#~ msgid "No Designs"
+#~ msgstr "Inga designer"
+
+#~ msgid "Error message here"
+#~ msgstr "Felmeddelande här"
+
+#~ msgid "App ID"
+#~ msgstr "Program-ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Redaktionens val"
+
+#~ msgid "Category Featured"
+#~ msgstr "I blickfånget för kategori"
+
+#~ msgid "Undo"
+#~ msgstr "Ångra"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Banderolldesignverktyg"
+
+#~ msgid "New Banner"
+#~ msgstr "Ny banderoll"
+
+#~ msgid "Import from file"
+#~ msgstr "Importera från fil"
+
+#~ msgid "Export to file"
+#~ msgstr "Exportera till fil"
+
+#~ msgid "Delete Design"
+#~ msgstr "Ta bort design"
+
+#~ msgid "Featured App"
+#~ msgstr "Program i blickfånget"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Systemuppgradering"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Klicka på poster för att välja dem"
+
+#~ msgid "Select"
+#~ msgstr "Markera"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Lägg till i mapp…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Flytta till mapp…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Ta bort från mapp"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Designa banderollerna i blickfånget för GNOME Programvara"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Programvara;Mjukvara;App;"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Allt"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Logga in / Registrera…"
+
+#~ msgid "Continue"
+#~ msgstr "Fortsätt"
+
+#~ msgid "Use"
+#~ msgstr "Använd"
+
+#~ msgid "Add another…"
+#~ msgstr "Lägg till ännu ett…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Programvarukatalog läses in"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Är du säker på att du vill köpa %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s kommer att installeras, och du kommer få betala %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Köp"
+
+#~ msgid "A$%.2f"
+#~ msgstr "%.2fA$"
+
+#~ msgid "C$%.2f"
+#~ msgstr "%.2fC$"
+
+# Eventuellt CNY i stället.
+#~ msgid "CN¥%.2f"
+#~ msgstr "%.2fCN¥"
+
+#~ msgid "€%.2f"
+#~ msgstr "%.2f€"
+
+#~ msgid "£%.2f"
+#~ msgstr "%.2f£"
+
+#~ msgid "¥%.2f"
+#~ msgstr "%.2f¥"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "%.2fNZ$"
+
+#~ msgid "₽%.2f"
+#~ msgstr "%.2f₽"
+
+#~ msgid "US$%.2f"
+#~ msgstr "%.2fUS$"
+
+#~ msgid "%s %f"
+#~ msgstr "%2$f %1$s"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "Inloggad som %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "Logga in…"
+
+#~ msgid "Sign out"
+#~ msgstr "Logga ut"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "Kunde inte köpa %s: autentisering krävdes"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "Kunde inte köpa %s: autentiseringen var ogiltig"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "Kunde inte köpa %s: ingen betalningsmetod konfigurerad"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "Kunde inte köpa %s: betalningen nekades"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "Kunde inte köpa %s"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Du måste använda ett Ubuntu One-konto för att fortsätta."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Du måste använda ditt Ubuntu One-konto för att fortsätta."
+
+#~ msgid "..."
+#~ msgstr "…"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Kunde inte uppdatera %s från %s"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Visa profileringsinformation för tjänsten"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Du måste logga in på %s för att fortsätta."
+
+#~ msgid "Email address"
+#~ msgstr "E-postadress"
+
+#~ msgid "I have an account already"
+#~ msgstr "Jag har redan ett konto"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Jag vill registrera ett konto nu"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Jag har glömt mitt lösenord"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Logga in automatiskt nästa gång"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Ange din engångs-pin för tvåfaktorsautentisering."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Autentisera"
+
+#~ msgid "_About"
+#~ msgstr "_Om"
+
+#~ msgid "_Quit"
+#~ msgstr "_Avsluta"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Information om %s, samt alternativ för hur du införskaffar en kodek som "
+#~ "kan spela detta format finns på webbplatsen."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "Ditt %s-konto har stängts av."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr ""
+#~ "Det är inte möjligt att installera programvara innan detta har lösts."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "För mer information, besök %s."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Hämtar nya uppdateringar…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Hämtar programsida…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam-stöd"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Den ultimata underhållningsplattformen från Valve"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Program uppdaterades"
+
+# TODO: Behövs denna punkt?
+#~ msgid "Includes: ."
+#~ msgstr "Inkluderar: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "Starta _om & uppdatera"
+
+#~ msgid "U_pdate All"
+#~ msgstr "U_ppdatera alla"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Starta om & _installera"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Hämtar källa för exekveringsmiljö…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Hämtar uppdatering till fast programvara…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba-stöd"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba tillhandahåller ett sätt för utvecklare att lätt skapa "
+#~ "programvarubuntar"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "En lista över extra källor som tidigare har varit aktiverade"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "En lista över källor som tidigare har varit aktiverade vid installation "
+#~ "av tredjepartsprogram."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Visa icke-fri programvara i sökresultat"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "En lista över icke-fria källor som valfritt kan aktiveras"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Sorterat efter namn"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Sorterat efter betyg"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Tillhandahåller åtkomst till ytterligare programvara, inklusive "
+#~ "webbläsare och spel."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Aktivera proprietära programvarukällor?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Inga program eller tillägg installerade; annan programvara kan "
+#~ "fortfarande vara det"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Har vanligtvis restriktioner kring användning av och åtkomst till källkod."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Proprietära programvarukällor"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Programvarukällor kan hämtas från internet. De ger dig tillgång till "
+#~ "ytterligare programvara som inte tillhandahålls av %s."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Borttagning av en programvarukälla kommer även att ta bort de "
+#~ "programvaror som installerats via den."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Ingen programvara installerad från denna källa"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Installerad från denna källa"
+
+#~ msgid "Source Details"
+#~ msgstr "Detaljer om källa"
+
+#~ msgid "Last Checked"
+#~ msgstr "Senaste sökning"
+
+#~ msgid "Added"
+#~ msgstr "Tillagd"
+
+#~ msgid "Website"
+#~ msgstr "Webbplats"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "Förinställd interaktion mellan spelare utan chattfunktion"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Delning av användarinformation med tredje part"
+
+#~ msgid "Remove Source"
+#~ msgstr "Ta bort källa"
+
+#~ msgid "page1"
+#~ msgstr "sida1"
+
+#~ msgid "page2"
+#~ msgstr "sida2"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "”%s” [%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgid "Total"
+#~ msgstr "Totalt"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "Kunde inte hitta ”%s”"
+
+#~ msgid "_Install All"
+#~ msgstr "_Installera alla"
+
+#~ msgid "Other Updates"
+#~ msgstr "Andra uppdateringar"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "Installationen av %s misslyckades."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "Borttagning av %s misslyckades."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Försäkra dig om att du har internetåtkomst och försök igen."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Frigör utrymme och försök igen."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Kontakta din programvaruleverantör om problemet kvarstår."
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Ingen"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Alla"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "I blickfånget"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomi"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemi"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematik"
+
+#~ msgid "Science"
+#~ msgstr "Vetenskap"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Programvarukällor ger dig tillgång till ytterligare programvara."
+
+#~ msgid " or "
+#~ msgstr " eller "
+
+#~ msgid "3rd party"
+#~ msgstr "tredje part"
+
+#~ msgid "web app"
+#~ msgstr "webbapplikation"
+
+#~ msgid "nonfree"
+#~ msgstr "icke-fri"
+
+#~ msgid "_Installing"
+#~ msgstr "_Installerar"
+
+#~ msgid "_Removing"
+#~ msgstr "_Tar bort"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Okänd"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Beräknar…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Okänd"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "Denna programvara kommer från en tredje part."
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr ""
+#~ "Denna programvara kommer från en tredje part och kan innehålla icke-fria "
+#~ "komponenter."
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Denna programvara kan innehålla icke-fria komponenter."
+
+#~ msgid "_History"
+#~ msgstr "_Historik"
+
+#~ msgid "Size"
+#~ msgstr "Storlek"
+
+#~ msgid "non-free"
+#~ msgstr "icke-fri"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Rekommenderade produktivitetsprogram"
+
+#~ msgid "One Star"
+#~ msgstr "En stjärna"
+
+#~ msgid "Two Stars"
+#~ msgstr "Två stjärnor"
+
+#~ msgid "Three Stars"
+#~ msgstr "Tre Stjärnor"
+
+#~ msgid "Four Stars"
+#~ msgstr "Fyra stjärnor"
+
+#~ msgid "Five Stars"
+#~ msgstr "Fem stjärnor"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "Inget AppStream-data hittades"
+
+#~ msgid "Audio"
+#~ msgstr "Ljud"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Redigering"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Databaser"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Bränna skivor"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatörradio"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Musik"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Inspelare"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Ljudredigering"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Mottagare"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "Bygga"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Databaser"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilering"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Översättning"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Webbutveckling"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biologi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Datavetenskap"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "Konstruktion"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Datavisualisering"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektricitet"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Ingenjörskonst"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Geologi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Geovetenskap"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Historia"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Humaniora"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Bildbehandling"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Litteratur"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Kartor"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Musik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerisk analys"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallella beräkningar"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fysik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Andlighet"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Skjutspel"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simulering"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafik"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D-grafik"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Publicering"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Rastrerad grafik"
+
+#~ msgid "Internet"
+#~ msgstr "Internet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Uppringt"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-post"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Flöde"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Filöverföring"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Amatörradio"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Direktmeddelanden"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC-klienter"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "Övervakning"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "Fjärranslutning"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefoni"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Webbutveckling"
+
+#~ msgid "Office"
+#~ msgstr "Produktivitet"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Diagram"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Kontakthantering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Ordlista"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-post"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Flödesschema"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotografi"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Presentation"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Projekthantering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Publicering"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Kalkylark"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Visare"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Konst"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Artificiell intelligens"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biologi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kemi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Datavetenskap"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "Konstruktion"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Datavisualisering"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektricitet"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Ingenjörskonst"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Geografi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Geologi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Geovetenskap"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Historia"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Humaniora"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Bildbehandling"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Språk"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Litteratur"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Kartor"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Medicin"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Numerisk analys"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Parallella beräkningar"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fysik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Andlighet"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Sport"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emulator"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Filhanterare"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Filverktyg"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "Övervakning"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Säkerhet"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Terminalemulator"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Tillgänglighet"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arkivering"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Miniräknare"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Klockor"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Komprimering"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Filverktyg"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Kartor"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Andlighet"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefoniverktyg"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Redigering"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Databas"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Bränna skivor"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Spelare"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Inspelare"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "En tidigare uppdatering har inte slutförts."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Uppdateringen kunde inte installeras. Detta är ofta ett problem med "
+#~ "uppdateringen själv. Vänta på ännu en uppdatering och försök igen."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Program som kräver internet"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "Starta GApplication-tjänsteläge"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "En uppdatering var inte korrekt signerad."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Uppdateringen kunde inte slutföras."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "En frånkopplad uppdatering begärdes men inga paket behöver uppdateras."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Inget ledigt utrymme på enheten."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "En uppdatering kunde inte installeras korrekt."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Den frånkopplade uppdateringen misslyckades på ett oväntat sätt."
+
+#~ msgid "No sources found."
+#~ msgstr "Inga källor hittades."
+
+#~ msgid "OK"
+#~ msgstr "OK"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i program och %i tillägg installerat"
+#~ msgstr[1] "%i program och %i tillägg installerade"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr ""
+#~ "Beroende på vilket land du befinner dig i kan det möjliggöra åtal mot dig "
+#~ "om du installerar den."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr "Om du är osäker angående detta bör du söka juridisk rådgivning."
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "Vill du aktivera den?"
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 0000000..b7c43c4
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,1812 @@
+# Telugu translation for gnome-software.
+# Copyright (C) 2014 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# Praveen Illa <mail2ipn@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-03-18 08:33+0000\n"
+"PO-Revision-Date: 2014-03-31 00:23+0530\n"
+"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
+"Language-Team: indlinux-telugu@lists.sourceforge.net\n"
+"Language: te\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Project-Style: gnome\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "Application manager for GNOME"
+msgstr "గ్నోమ్ కోసం అనువర్తన నిర్వాహకం"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+
+#: ../src/app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr "అనువర్తన సంచయానికి జోడించు"
+
+#: ../src/app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:325
+#: ../src/gs-shell-details.c:204 ../src/gs-shell-installed.c:593
+msgid "_Cancel"
+msgstr "రద్దుచేయి (_C)"
+
+#: ../src/app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:330
+msgid "_Add"
+msgstr "జతచేయి (_A)"
+
+#: ../src/app-menu.ui.h:1
+msgid "_Software Sources"
+msgstr "సాఫ్ట్‌వేర్ మూలాలు (_S)"
+
+#: ../src/app-menu.ui.h:2
+msgid "_About"
+msgstr "గురించి (_A)"
+
+#: ../src/app-menu.ui.h:3
+msgid "_Quit"
+msgstr "నిష్క్రమించు (_Q)"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#: ../src/app-tile.ui.h:1 ../src/gs-app-tile.c:82 ../src/gs-app-tile.c:85
+#: ../src/gs-feature-tile.c:76 ../src/gs-history-dialog.c:88
+#: ../src/gs-popular-tile.c:79 ../src/gs-popular-tile.c:82
+#: ../src/popular-tile.ui.h:1
+msgid "Installed"
+msgstr "స్థాపితం"
+
+#. TRANSLATORS: this is the application name
+#. TRANSLATORS: this is the main window title
+#: ../src/org.gnome.Software.desktop.in.h:1 ../src/gnome-software.ui.h:3
+#: ../src/gs-application.c:240 ../src/gs-shell.c:162
+msgid "Software"
+msgstr "సాఫ్ట్‌వేర్"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr "ఈ కంప్యూటరుపై సాఫ్ట్‌వేరును జతచేయండి, తీసివేయండి లేదా నవీకరించండి."
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr "సాఫ్ట్‌వేర్ స్థాపన"
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr "ఎంచుకున్న సాఫ్ట్‌వేరును వ్యవస్థపై స్థాపించు"
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr "అన్నీ ఎంచుకొను"
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr "ఎంపిక రద్దు"
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr "వెనక్కి వెళ్ళు"
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "అన్నీ (_A)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "స్థాపితం (_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "నవీకరణలు (_U)"
+
+#: ../src/gnome-software.ui.h:11
+msgid "Restart & _Install"
+msgstr "పునఃప్రారంభించి, స్థాపించు (_I)"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#: ../src/gnome-software.ui.h:12 ../src/gs-shell-details.c:153
+msgid "_Install"
+msgstr "స్థాపించు (_I)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: ../src/gnome-software.ui.h:13 ../src/gs-shell-details.c:191
+msgid "_Remove"
+msgstr "తొలగించు (_R)"
+
+#: ../src/gnome-software.ui.h:14
+msgid "Select"
+msgstr "ఎంచుకొను"
+
+#: ../src/gnome-software.ui.h:15
+msgid "Check for updates"
+msgstr "నవీకరణల కోసం చూడు"
+
+#: ../src/gnome-software.ui.h:16
+msgid "Overview page"
+msgstr "అవలోకన పుట"
+
+#: ../src/gnome-software.ui.h:17
+#: ../src/plugins/gs-plugin-hardcoded-categories.c:160
+msgid "Featured"
+msgstr "ప్రత్యేకం"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: ../src/gnome-software.ui.h:19
+msgid "Picks"
+msgstr "ఏరికలు"
+
+#: ../src/gnome-software.ui.h:20
+msgid "Categories"
+msgstr "వర్గాలు"
+
+#: ../src/gnome-software.ui.h:21
+msgid "No Application Data Found"
+msgstr "ఏ అనువర్తన దత్తాంశం కనపడలేదు"
+
+#: ../src/gnome-software.ui.h:22
+msgid "Installed page"
+msgstr "స్థాపన పుట"
+
+#: ../src/gnome-software.ui.h:23
+msgid "_Add to Folder…"
+msgstr "సంచయానికి జతచేయి…(_A)"
+
+#: ../src/gnome-software.ui.h:24
+msgid "_Move to Folder…"
+msgstr "సంచయానికి తరలించు...(_M)"
+
+#: ../src/gnome-software.ui.h:25
+msgid "_Remove from Folder"
+msgstr "సంచయం నుండి తొలగించు (_R)"
+
+#: ../src/gnome-software.ui.h:26
+msgid "Search page"
+msgstr "వెతుకులాట పుట"
+
+#: ../src/gnome-software.ui.h:27
+msgid "No Application Found"
+msgstr "ఏ అనువర్తనం కనపడలేదు"
+
+#: ../src/gnome-software.ui.h:28
+msgid "Updates page"
+msgstr "నవీకరణల పుట"
+
+#: ../src/gnome-software.ui.h:29
+msgid "Software is up to date"
+msgstr "సాఫ్ట్‌వేర్ తాజాగానే ఉంది"
+
+#: ../src/gnome-software.ui.h:30
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+
+#: ../src/gnome-software.ui.h:31
+msgid "_Check Anyway"
+msgstr "ఏదేమైనప్పటికీ తనిఖీచేయి (_C)"
+
+#: ../src/gnome-software.ui.h:32
+msgid "Go online to check for updates"
+msgstr "నవీకరణల కోసం తనిఖీకై జాలానికి వెళ్ళండి"
+
+#: ../src/gnome-software.ui.h:33
+msgid "_Network Settings"
+msgstr "నెట్‌వర్క్ అమరికలు (_n)"
+
+#: ../src/gnome-software.ui.h:34
+msgid "Details page"
+msgstr "వివరాల పుట"
+
+#: ../src/gnome-software.ui.h:35
+msgid "Software Source Included"
+msgstr "సాఫ్ట్‌వేర్ మూలం చేర్బబడింది"
+
+#: ../src/gnome-software.ui.h:36
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+
+#: ../src/gnome-software.ui.h:37
+msgid "No Software Source Included"
+msgstr "ఎటువంటి సాఫ్ట్‌వేర్ మూలం లేదు"
+
+#: ../src/gnome-software.ui.h:38
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr ""
+
+#: ../src/gnome-software.ui.h:39
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+
+#: ../src/gnome-software.ui.h:40
+msgid "Software Source Identified"
+msgstr "సాఫ్ట్‌వేర్ మూలం గుర్తించబడింది"
+
+#: ../src/gnome-software.ui.h:41
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr ""
+
+#: ../src/gnome-software.ui.h:42
+msgid "Only use software sources that you trust."
+msgstr "మీరు నమ్మే సాఫ్ట్‌వేర్ మూలాలను మాత్రమే ఉపయోగించండి."
+
+#: ../src/gnome-software.ui.h:43
+msgid "_Website"
+msgstr "జాలగూడు (_W)"
+
+#: ../src/gnome-software.ui.h:44
+msgid "_History"
+msgstr "చరిత్ర (_H)"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gnome-software.ui.h:46
+msgid "_Launch"
+msgstr "ఆరంభించు (_L)"
+
+#: ../src/gnome-software.ui.h:47
+msgid "Details"
+msgstr "వివరాలు"
+
+#: ../src/gnome-software.ui.h:48
+msgid "Version"
+msgstr "సంస్కరణ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gnome-software.ui.h:49 ../src/gs-history-dialog.c:93
+msgid "Updated"
+msgstr "నవీకరించబడింది"
+
+#: ../src/gnome-software.ui.h:50
+msgid "Category"
+msgstr "వర్గం"
+
+#: ../src/gnome-software.ui.h:51
+msgid "Source"
+msgstr "మూలం"
+
+#: ../src/gnome-software.ui.h:52
+msgid "Licence"
+msgstr "లైసెన్సు"
+
+#: ../src/gnome-software.ui.h:53
+msgid "Size"
+msgstr "పరిమాణం"
+
+#: ../src/gnome-software.ui.h:54
+msgid "Developer"
+msgstr "వికాసకుడు"
+
+#: ../src/gnome-software.ui.h:55
+msgid "Software Sources"
+msgstr "సాఫ్ట్‌వేర్ మూలాలు"
+
+#: ../src/gnome-software.ui.h:56
+msgid "No sources found."
+msgstr "ఎటువంటి మూలాలు దొరకలేదు."
+
+#: ../src/gnome-software.ui.h:57
+msgid "Software sources give you access to additional software."
+msgstr "సాఫ్ట్‌వేర్ మూలాలు అదనపు సాఫ్ట్‌వేర్ ప్రాప్తిని కల్పిస్తాయి."
+
+#: ../src/gnome-software.ui.h:58
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr ""
+"మూలాన్ని తీసివేస్తే, దాని నుండి స్థాపించిన సాఫ్ట్‌వేర్ కూడా తొలగించబడుతుంది."
+
+#: ../src/gnome-software.ui.h:59
+msgid "No software installed from this source"
+msgstr "ఈ మూలం నుండి ఎటువంటి సాఫ్ట్‌వేర్ స్థాపించబడలేదు"
+
+#: ../src/gnome-software.ui.h:60
+msgid "Installed from this Source"
+msgstr "ఈ మూలం నుండి స్థాపించబడింది"
+
+#: ../src/gnome-software.ui.h:61
+msgid "Source Details"
+msgstr "మూలం వివరాలు"
+
+#: ../src/gnome-software.ui.h:62
+msgid "Last Checked"
+msgstr "చివరి తనిఖీ"
+
+#: ../src/gnome-software.ui.h:63
+msgid "Added"
+msgstr "జోడించబడింది"
+
+#: ../src/gnome-software.ui.h:64
+msgid "Website"
+msgstr "జాలగూడు"
+
+#: ../src/gnome-software.ui.h:65
+msgid "January 30, 2014"
+msgstr "జనవరి 30, 2014"
+
+#: ../src/gnome-software.ui.h:66 ../src/gs-shell.c:600
+msgid "Remove Source"
+msgstr "మూలాన్ని తీసివేయి"
+
+#: ../src/gs-app-folder-dialog.c:313
+msgid "Folder Name"
+msgstr "సంచయం పేరు"
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:238
+msgid "About Software"
+msgstr "సాఫ్ట్‌వేర్ గురించి"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:243
+msgid "A nice way to manage the software on your system."
+msgstr "మీ వ్యవస్థపై సాఫ్ట్‌వేర్ నిర్వహణకు ఒక సులభమైన మార్గం."
+
+#: ../src/gs-application.c:247
+msgid "translator-credits"
+msgstr "Praveen Illa <mail2ipn@gmail.com>, 2014"
+
+#: ../src/gs-application.c:488
+msgid "Enter GApplication service mode"
+msgstr ""
+
+#. TRANSLATORS: this is a command line option
+#: ../src/gs-application.c:491
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+
+#: ../src/gs-application.c:491
+msgid "MODE"
+msgstr "రీతి"
+
+#: ../src/gs-application.c:493
+msgid "Search for applications"
+msgstr "అనువర్తనాల కోసం వెతకండి"
+
+#: ../src/gs-application.c:493
+msgid "SEARCH"
+msgstr "వెతకండి"
+
+#: ../src/gs-application.c:495 ../src/gs-application.c:497
+msgid "Show application details"
+msgstr "అనువర్తనం వివరాలు చూపించు"
+
+#: ../src/gs-application.c:495 ../src/gs-application.c:497
+#: ../src/gs-application.c:499
+msgid "ID"
+msgstr "గుచి"
+
+#: ../src/gs-application.c:499
+msgid "Set the specified debugging level"
+msgstr ""
+
+#: ../src/gs-application.c:501
+msgid "Show profiling information for the service"
+msgstr ""
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user there is an update for the installed
+#. * application available
+#: ../src/gs-app-tile.c:91 ../src/gs-app-tile.c:95 ../src/gs-feature-tile.c:81
+#: ../src/gs-popular-tile.c:88 ../src/gs-popular-tile.c:92
+msgid "Updates"
+msgstr "నవీకరణలు"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-widget.c:200
+msgid "Visit website"
+msgstr "జాలగూటిని సందర్శించండి"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-widget.c:207
+msgid "Cancel"
+msgstr "రద్దుచేయి"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-widget.c:210
+msgid "Pending"
+msgstr "వాయిదా"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-widget.c:217
+msgid "Install"
+msgstr "స్థాపించు"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-widget.c:226 ../src/gs-shell-details.c:1057
+#: ../src/gs-shell-installed.c:205 ../src/gs-shell-search.c:164
+msgid "Remove"
+msgstr "తొలగించు"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#: ../src/gs-app-widget.c:237
+msgid "Installing"
+msgstr "స్థాపిస్తున్నాము"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#: ../src/gs-app-widget.c:246
+msgid "Removing"
+msgstr "తొలగిస్తున్నాము"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:174
+msgid "Other"
+msgstr "ఇతరాలు"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:82
+msgid "Removed"
+msgstr "తీసివేయబడింది"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#. TRANSLATORS: this is where the licence is not known
+#. TRANSLATORS: this is where the version is not known
+#. TRANSLATORS: this is where the size is not known
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-history-dialog.c:99 ../src/gs-shell-details.c:602
+#: ../src/gs-shell-details.c:621 ../src/gs-shell-details.c:631
+#: ../src/gs-shell-details.c:673
+msgid "Unknown"
+msgstr "తెలియదు"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "చరిత్ర"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-offline-updates.c:228
+msgid "Failed To Update"
+msgstr "నవీకరించుటలో విఫలం"
+
+#. TRANSLATORS: the transaction could not be completed
+#. * as a previous transaction was unfinished
+#: ../src/gs-offline-updates.c:234
+msgid "A previous update was unfinished."
+msgstr "క్రితం నవీకరణ పూర్తికాలేదు."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-offline-updates.c:244
+msgid "Network access was required but not available."
+msgstr "నెట్‌వర్కు ప్రాప్తి అవసరం కాని అందుబాటులోలేదు."
+
+#. TRANSLATORS: if the package is not signed correctly
+#. *
+#: ../src/gs-offline-updates.c:253
+msgid "An update was not signed in the correct way."
+msgstr "నవీకరణ సరైన విధానంలో సంతకం చేయబడిలేదు."
+
+#. TRANSLATORS: the transaction failed in a way the user
+#. * probably cannot comprehend. Package management systems
+#. * really are teh suck.
+#: ../src/gs-offline-updates.c:263
+msgid "The update could not be completed."
+msgstr "నవీకరణ పూర్తికాలేదు."
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-offline-updates.c:268
+msgid "The update was cancelled."
+msgstr "నవీకరణ రద్దుచేయబడింది."
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-offline-updates.c:274
+msgid "An offline update was requested but no packages required updating."
+msgstr "ఆఫ్‌లైన్ నవీకరణ అభ్యర్ధించబడెను అయితే ఏ ప్యాకేజీలకు నవీకరణ అవసరంలేదు."
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-offline-updates.c:278
+msgid "No space was left on the drive."
+msgstr "డ్రైవ్ నందు ఖాళీ లేదు."
+
+#. TRANSLATORS: the update process failed in a general
+#. * way, usually this message will come from source distros
+#. * like gentoo
+#: ../src/gs-offline-updates.c:286
+msgid "An update failed to install correctly."
+msgstr "నవీకరణ సరిగా స్థాపించుటలో విఫలమైంది."
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-offline-updates.c:291
+msgid "The offline update failed in an unexpected way."
+msgstr "ఆఫ్‌లైన్ నవీకరణ అనుకోని విధంగా విఫలమైంది."
+
+#. TRANSLATORS: these are geeky messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-offline-updates.c:300
+msgid "Detailed errors from the package manager follow:"
+msgstr "ప్యాకేజీ నిర్వాహకం నుండి విశదీకృత దోషాలు కింది విధంగా వున్నాయి:"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:764
+msgid "OS Updates"
+msgstr "నివ్య నవీకరణలు"
+
+#. TRANSLATORS: this is a longer description of the
+#. * os-update item
+#: ../src/gs-plugin-loader.c:769
+msgid ""
+"Includes performance, stability and security improvements for all users."
+msgstr ""
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-plugin-loader.c:1463
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr ""
+
+#: ../src/gs-plugin-loader.c:1466
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:129
+msgid "Screenshot not found"
+msgstr "తెరపట్టు కనబడలేదు"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:236
+msgid "Screenshot size not found"
+msgstr "తెరపట్టు పరిమాణం కనపడలేదు"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:250
+msgid "Could not create cache"
+msgstr "క్యాచిని సృష్టించుట వీలుకాలేదు"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:267
+msgid "Screenshot not valid"
+msgstr "తెరపట్టు సరైనదికాదు"
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:273
+msgid "Screenshot not available"
+msgstr "తెరపట్టు అందుబాటులోలేదు"
+
+#: ../src/gs-screenshot-image.c:326
+msgid "Screenshot"
+msgstr "తెరపట్టు"
+
+#: ../src/gs-shell.c:621
+msgid "Removing…"
+msgstr "తొలగిస్తోంది..."
+
+#. TRANSLATORS: this source has no apps installed from it
+#: ../src/gs-shell.c:871
+msgid "No software installed"
+msgstr "ఎటువంటి సాఫ్ట్‌వేర్ స్థాపించబడిలేదు"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-shell.c:874
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] "%i అనువర్తనం స్థాపించబడింది"
+msgstr[1] "%i అనువర్తనాలు స్థాపించబడ్డాయి"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-shell.c:879
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] "%i యాడ్ ఆన్ స్థాపించబడింది"
+msgstr[1] "%i యాడ్ ఆన్లు స్థాపించబడ్డాయి"
+
+#. TRANSLATORS: this source has some apps and addons installed from it
+#: ../src/gs-shell.c:884
+#, c-format
+msgid "%i application and %i add-ons installed"
+msgid_plural "%i applications and %i add-ons installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/gs-shell-details.c:136
+msgid "_Pending"
+msgstr "వాయిదా (_P)"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:164
+msgid "_Installing"
+msgstr "స్థాపిస్తున్నాము (_I)"
+
+#. TRANSLATORS: button text in the header when an application can be installed
+#: ../src/gs-shell-details.c:198
+msgid "_Removing"
+msgstr "తొలగిస్తున్నాము (_R)"
+
+#. TRANSLATORS: this is where the licence is insanely
+#. * complicated and the full string is put into the tooltip
+#: ../src/gs-shell-details.c:607
+msgid "Complicated!"
+msgstr "క్లిష్టం!"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:628
+msgid "Calculating…"
+msgstr "లెక్కిస్తోంది..."
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:644
+msgid "Never"
+msgstr "ఎప్పటికీవద్దు"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined menu category
+#: ../src/gs-shell-details.c:661
+msgid "None"
+msgstr "ఏదీకాదు"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-shell-details.c:1042 ../src/gs-shell-installed.c:190
+#: ../src/gs-shell-search.c:149
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "మీరు ఖచ్ఛితంగా %s ను తీసివేయాలనుకుంటున్నారా?"
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-shell-details.c:1054 ../src/gs-shell-installed.c:202
+#: ../src/gs-shell-search.c:161
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: these are extra things that add to existing programs,
+#. * for instance fonts, codecs or language packs
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-installed.c:512 ../src/gs-shell-updates.c:584
+#: ../src/plugins/gs-plugin-packagekit.c:576
+#: ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr "యాడ్-ఆన్లు"
+
+#: ../src/gs-shell-installed.c:601
+msgid "Click on items to select them"
+msgstr "అంశాలను ఎంచుకోవడానికి వాటిపై నొక్కండి"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:135
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:138
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:143
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:204
+msgid "Setting up updates…"
+msgstr "నవీకరణలను అమరుస్తూంది…"
+
+#: ../src/gs-shell-updates.c:205 ../src/gs-shell-updates.c:212
+msgid "(This could take a while)"
+msgstr "(ఇందుకు కొంత సమయం పడుతుంది)"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:211
+msgid "Looking for new updates…"
+msgstr "సరికొత్త నవీకరణల కోసం చూస్తూంది..."
+
+#. TRANSLATORS: this is when the updates panel is starting up
+#: ../src/gs-shell-updates.c:218
+msgid "Checking for updates…"
+msgstr "నవీకరణల కోసం చూస్తున్నాము..."
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:333
+#, c-format
+msgid "Last checked: %s"
+msgstr "చివరి తనిఖీ: %s"
+
+#. TRANSLATORS: window title to suggest that we are showing
+#. * the offline updates that have just been applied
+#: ../src/gs-shell-updates.c:468
+msgid "Recent Software Updates"
+msgstr "ఇటీవలి సాఫ్ట్‌వేర్ నవీకరణలు"
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:776
+msgid "No Network"
+msgstr "నెట్‌వర్కు లేదు"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:780
+msgid "Internet access is required to check for updates."
+msgstr "నవీకరణల కోసం చూడాలంటే అంతర్జాల ప్రాప్తి అవసరం."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:784
+msgid "Network Settings"
+msgstr "నెట్‌వర్కు అమరికలు"
+
+#. TRANSLATORS: $$$
+#: ../src/gs-shell-updates.c:804
+msgid "Charges may apply"
+msgstr "చార్జీలు వర్తించవచ్చు"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:808
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:812
+msgid "Check Anyway"
+msgstr "ఏదేమైనప్పటికీ తనిఖీచేయి"
+
+#: ../src/gs-update-monitor.c:102
+msgid "Software Updates Available"
+msgstr "సాఫ్ట్‌వేర్ నవీకరణలు ఉన్నాయి"
+
+#: ../src/gs-update-monitor.c:103
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+
+#: ../src/gs-update-monitor.c:106
+msgid "View"
+msgstr "చూడండి"
+
+#: ../src/gs-update-monitor.c:107
+msgid "Not Now"
+msgstr "ఇప్పుడు కాదు"
+
+#: ../src/gs-update-monitor.c:149
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "సాఫ్టువేర్ నవీకరణ‌ స్థాపించబడింది"
+msgstr[1] "సాఫ్టువేర్ నవీకరణలు స్థాపించబడ్డాయి"
+
+#. TRANSLATORS: message when we've done offline updates
+#: ../src/gs-update-monitor.c:153
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "ఒక ముఖ్యమైన నివ్య నవీకరణ స్థాపించబడెను."
+msgstr[1] "ఒక ముఖ్యమైన నివ్య నవీకరణలు స్థాపించబడ్డాయి."
+
+#: ../src/gs-update-monitor.c:158
+msgid "Software Updates Failed"
+msgstr "సాఫ్ట్‌వేర్ నవీకరణలు విఫలం"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:160
+msgid "An important OS update failed to be installed."
+msgstr "ఒక ముఖ్యమైన నివ్య నవీకరణ స్థాపన విఫలమైంది."
+
+#: ../src/gs-update-monitor.c:169
+msgid "Review"
+msgstr "సమీక్ష"
+
+#: ../src/gs-update-monitor.c:171
+msgid "Show Details"
+msgstr "వివరాలు చూపించు"
+
+#: ../src/gs-update-monitor.c:172
+msgid "OK"
+msgstr "సరే"
+
+#. vim: set noexpandtab:
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "ఏక నక్షత్రం"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "రెండు నక్షత్రాలు"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "మూడు నక్షత్రాలు"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "నాలుగు నక్షత్రాలు"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "ఐదు నక్షత్రాలు"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:131
+#, c-format
+msgid "%s is now installed"
+msgstr "%s ఇప్పుడు స్థాపితం"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:135
+msgid "Launch"
+msgstr "ప్రారంభించు"
+
+#: ../src/gs-utils.c:160
+msgid "Sorry, this did not work"
+msgstr "క్షమించండి, ఇది పని చేయదు"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:164
+#, c-format
+msgid "Installation of %s failed."
+msgstr "%s యొక్క స్థాపన విఫలమైంది."
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:169
+#, c-format
+msgid "Removal of %s failed."
+msgstr "%s యొక్క తొలగింపు విఫలమైంది."
+
+#: ../src/plugins/gs-plugin-appstream.c:348
+#, c-format
+msgid "No AppStream data found"
+msgstr "ఎటువంటి ఆప్‌స్ట్రీమ్ దత్తాంశం దొరకలేదు"
+
+#. TRANSLATORS: this is when a webapp has no comment
+#: ../src/plugins/gs-plugin-epiphany.c:143
+#, c-format
+msgid "Web app"
+msgstr "జాల అనువర్తనం"
+
+#. TRANSLATORS: this is the licence of the web-app
+#: ../src/plugins/gs-plugin-epiphany.c:151
+msgid "Proprietary"
+msgstr "యాజమాన్య"
+
+#. TRANSLATORS: audio/video decoders
+#: ../src/plugins/gs-plugin-packagekit.c:580
+msgid "Codecs"
+msgstr "కోడెక్లు"
+
+#. TRANSLATORS: fonts of different styles or languages
+#: ../src/plugins/gs-plugin-packagekit.c:584
+msgid "Fonts"
+msgstr "ఖతులు"
+
+#. TRANSLATORS: these are ways to enter text
+#: ../src/plugins/gs-plugin-packagekit.c:588
+msgid "Input Sources"
+msgstr "నివేశ మూలాలు"
+
+#. TRANSLATORS: additional languages for apps
+#: ../src/plugins/gs-plugin-packagekit.c:592
+msgid "Language Packs"
+msgstr "భాషా ప్యాక్లు"
+
+#. TRANSLATORS: this is where update details either are
+#. * no longer available or were never provided in the first place
+#: ../src/plugins/gs-plugin-packagekit-refine.c:414
+msgid "No update details were provided"
+msgstr "ఎటువంటి నవీకరణ వివరాలు అందించలేదు"
+
+#. TRANSLATORS: this is the menu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "శ్రవ్యకం"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Menu subcategory of Audio"
+msgid "Editing"
+msgstr "కూర్పు"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Menu subcategory of Audio"
+msgid "Databases"
+msgstr "దత్తకోశాలు"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Menu subcategory of Audio"
+msgid "Disc Burning"
+msgstr "డిస్కు కాల్చుట"
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Menu subcategory of Audio"
+msgid "Ham Radio"
+msgstr "హ్యామ్ రేడియో"
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Menu subcategory of Audio"
+msgid "MIDI"
+msgstr "MIDI"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Menu subcategory of Audio"
+msgid "Mixer"
+msgstr "మిక్సర్"
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Menu subcategory of Audio"
+msgid "Music"
+msgstr "సంగీతం"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Menu subcategory of Audio"
+msgid "Players"
+msgstr "ప్రదర్శకాలు"
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Menu subcategory of Audio"
+msgid "Recorders"
+msgstr "రికార్డర్లు"
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Menu subcategory of Audio"
+msgid "Sequencers"
+msgstr "సీక్వెన్సర్లు"
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Menu subcategory of Audio"
+msgid "Tuners"
+msgstr "ట్యూనర్స్"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr "వికాస పనిముట్లు"
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Menu subcategory of Development"
+msgid "Building"
+msgstr "నిర్మాణం"
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Menu subcategory of Development"
+msgid "Databases"
+msgstr "దత్తకోశాలు"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Menu subcategory of Development"
+msgid "Debuggers"
+msgstr "దోషశుద్ధకాలు"
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Menu subcategory of Development"
+msgid "GUI Designers"
+msgstr "GUI రూపకల్పకాలు"
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Menu subcategory of Development"
+msgid "IDE"
+msgstr "IDE"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Menu subcategory of Development"
+msgid "Profiling"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Menu subcategory of Development"
+msgid "Project Management"
+msgstr "పరియోజన నిర్వహణ"
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Menu subcategory of Development"
+msgid "Revision Control"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Menu subcategory of Development"
+msgid "Translation"
+msgstr "అనువాదం"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Menu subcategory of Development"
+msgid "Web Development"
+msgstr "జాల వికాసం"
+
+#. TRANSLATORS: this is the menu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "విద్య"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Menu subcategory of Education"
+msgid "Art"
+msgstr "కళ"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Menu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr "కృత్రిమ జ్ఞానం"
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Menu subcategory of Education"
+msgid "Astronomy"
+msgstr "ఖగోళశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Menu subcategory of Education"
+msgid "Biology"
+msgstr "జీవశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Menu subcategory of Education"
+msgid "Chemistry"
+msgstr "రసాయనశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Menu subcategory of Education"
+msgid "Computer Science"
+msgstr "కంప్యూటరు విజ్ఞానశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Menu subcategory of Education"
+msgid "Construction"
+msgstr "నిర్మాణం"
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Menu subcategory of Education"
+msgid "Data Visualization"
+msgstr "దత్తాంశ దృశ్యమానం"
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Menu subcategory of Education"
+msgid "Economy"
+msgstr "ఆర్థికశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Menu subcategory of Education"
+msgid "Electricity"
+msgstr "విద్యుత్"
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Menu subcategory of Education"
+msgid "Electronics"
+msgstr "ఎలక్ట్రానిక్స్"
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Menu subcategory of Education"
+msgid "Engineering"
+msgstr "ఇంజనీరింగు"
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Menu subcategory of Education"
+msgid "Geography"
+msgstr "భౌగోళికశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Menu subcategory of Education"
+msgid "Geology"
+msgstr "భూగర్భశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Menu subcategory of Education"
+msgid "Geoscience"
+msgstr "భూవిజ్ఞానశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Menu subcategory of Education"
+msgid "History"
+msgstr "చరిత్ర"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Menu subcategory of Education"
+msgid "Humanities"
+msgstr "మానవశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Menu subcategory of Education"
+msgid "Image Processing"
+msgstr "బొమ్మ ప్రక్రియాపనం"
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Menu subcategory of Education"
+msgid "Languages"
+msgstr "భాషలు"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Menu subcategory of Education"
+msgid "Literature"
+msgstr "సాహిత్యం"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Menu subcategory of Education"
+msgid "Maps"
+msgstr "పటాలు"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Menu subcategory of Education"
+msgid "Math"
+msgstr "గణితం"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Menu subcategory of Education"
+msgid "Medical"
+msgstr "వైద్యశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Menu subcategory of Education"
+msgid "Music"
+msgstr "సంగీతం"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Menu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr "సాంఖ్యిక విశ్లేషణ"
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Menu subcategory of Education"
+msgid "Parallel Computing"
+msgstr "సమాంతర సంగణనం"
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Menu subcategory of Education"
+msgid "Physics"
+msgstr "భౌతికశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Menu subcategory of Education"
+msgid "Robotics"
+msgstr "రోబోటిక్స్"
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Menu subcategory of Education"
+msgid "Spirituality"
+msgstr "ఆధ్యాత్మికం"
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Menu subcategory of Education"
+msgid "Sports"
+msgstr "క్రీడలు"
+
+#. TRANSLATORS: this is the menu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr "ఆటలు"
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Menu subcategory of Games"
+msgid "Action"
+msgstr "పోరాటం"
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Menu subcategory of Games"
+msgid "Adventure"
+msgstr "సాహసం"
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Menu subcategory of Games"
+msgid "Arcade"
+msgstr "ఆర్కేడ్"
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Menu subcategory of Games"
+msgid "Blocks"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Menu subcategory of Games"
+msgid "Board"
+msgstr "బోర్డు"
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Menu subcategory of Games"
+msgid "Card"
+msgstr "కార్డు"
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Menu subcategory of Games"
+msgid "Emulators"
+msgstr "ఎమ్యులేటర్లు"
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Menu subcategory of Games"
+msgid "Kids"
+msgstr "పిల్లలు"
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Menu subcategory of Games"
+msgid "Logic"
+msgstr "తర్కం"
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Menu subcategory of Games"
+msgid "Role Playing"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Menu subcategory of Games"
+msgid "Shooter"
+msgstr "గురికాడు"
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Menu subcategory of Games"
+msgid "Simulation"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Menu subcategory of Games"
+msgid "Sports"
+msgstr "క్రీడలు"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Menu subcategory of Games"
+msgid "Strategy"
+msgstr "వ్యూహం"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr "రేఖాచిత్రాలు"
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Menu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr "2D రేఖాచిత్రాలు"
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Menu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr "3D రేఖాచిత్రాలు"
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Menu subcategory of Graphics"
+msgid "OCR"
+msgstr "OCR"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Menu subcategory of Graphics"
+msgid "Photography"
+msgstr "ఛాయాచిత్రీకరణం"
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Menu subcategory of Graphics"
+msgid "Publishing"
+msgstr "ప్రచురణ"
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Menu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Menu subcategory of Graphics"
+msgid "Scanning"
+msgstr "స్కానింగు"
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Menu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr "సదిశా రేఖాచిత్రాలు"
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Menu subcategory of Graphics"
+msgid "Viewer"
+msgstr "వీక్షకాలు"
+
+#. TRANSLATORS: this is the menu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "అంతర్జాలం"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Menu subcategory of Network"
+msgid "Chat"
+msgstr "మాటామంతీ"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Menu subcategory of Network"
+msgid "Dialup"
+msgstr "డయలప్"
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Menu subcategory of Network"
+msgid "Email"
+msgstr "ఈమెయిల్"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Menu subcategory of Network"
+msgid "Feed"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Menu subcategory of Network"
+msgid "File Transfer"
+msgstr "దస్త్ర బదిలీ"
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Menu subcategory of Network"
+msgid "Ham Radio"
+msgstr "హ్యామ్ రేడియో"
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Menu subcategory of Network"
+msgid "Instant Messaging"
+msgstr "తక్షణ సందేశం"
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Menu subcategory of Network"
+msgid "IRC Clients"
+msgstr "ఐఆర్‌సీ క్లయింట్లు"
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Menu subcategory of Network"
+msgid "Monitor"
+msgstr "మానిటర్"
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Menu subcategory of Network"
+msgid "News"
+msgstr "వార్తలు"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Menu subcategory of Network"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Menu subcategory of Network"
+msgid "Remote Access"
+msgstr "సుదూర ప్రాప్తి"
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Menu subcategory of Network"
+msgid "Telephony"
+msgstr "టెలీఫోనీ"
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Menu subcategory of Network"
+msgid "Video Conference"
+msgstr "దృశ్య సమావేశం"
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Menu subcategory of Network"
+msgid "Web Browser"
+msgstr "జాల విహారకం"
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Menu subcategory of Network"
+msgid "Web Development"
+msgstr "జాల వికాసం"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "కార్యాలయం"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Menu subcategory of Office"
+msgid "Calendar"
+msgstr "క్యాలెండరు"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Menu subcategory of Office"
+msgid "Chart"
+msgstr "పటం"
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Menu subcategory of Office"
+msgid "Contact Management"
+msgstr "పరిచయాల నిర్వహణ"
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Menu subcategory of Office"
+msgid "Database"
+msgstr "దత్తకోశం"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Menu subcategory of Office"
+msgid "Dictionary"
+msgstr "నిఘంటువు"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Menu subcategory of Office"
+msgid "Email"
+msgstr "ఈమెయిల్"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Menu subcategory of Office"
+msgid "Finance"
+msgstr "ఆర్థికం"
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Menu subcategory of Office"
+msgid "Flow Chart"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Menu subcategory of Office"
+msgid "PDA"
+msgstr "PDA"
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Menu subcategory of Office"
+msgid "Photography"
+msgstr "ఛాయాచిత్రీకరణం"
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Menu subcategory of Office"
+msgid "Presentation"
+msgstr "సమర్పణం"
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Menu subcategory of Office"
+msgid "Project Management"
+msgstr "పరియోజన నిర్వహణ"
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Menu subcategory of Office"
+msgid "Publishing"
+msgstr "ప్రచురణ"
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Menu subcategory of Office"
+msgid "Spreadsheet"
+msgstr "స్ప్రెడ్‌షీట్"
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Menu subcategory of Office"
+msgid "Viewer"
+msgstr "వీక్షకం"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Menu subcategory of Office"
+msgid "Word Processor"
+msgstr "పద ప్రక్రియపకం"
+
+#. TRANSLATORS: this is the menu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "విజ్ఞానశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Menu subcategory of Science"
+msgid "Art"
+msgstr "కళ"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Menu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr "కృత్రిమ జ్ఞానం"
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Menu subcategory of Science"
+msgid "Astronomy"
+msgstr "ఖగోళశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Menu subcategory of Science"
+msgid "Biology"
+msgstr "జీవశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Menu subcategory of Science"
+msgid "Chemistry"
+msgstr "రసాయనశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Menu subcategory of Science"
+msgid "Computer Science"
+msgstr "కంప్యూటరు విజ్ఞానశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Menu subcategory of Science"
+msgid "Construction"
+msgstr "నిర్మాణం"
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Menu subcategory of Science"
+msgid "Data Visualization"
+msgstr "దత్తాంశ దృశ్యమానం"
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Menu subcategory of Science"
+msgid "Economy"
+msgstr "ఆర్థికశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Menu subcategory of Science"
+msgid "Electricity"
+msgstr "విద్యుత్"
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Menu subcategory of Science"
+msgid "Electronics"
+msgstr "ఎలక్ట్రానిక్స్"
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Menu subcategory of Science"
+msgid "Engineering"
+msgstr "యంత్రశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Menu subcategory of Science"
+msgid "Geography"
+msgstr "భౌగోళికశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Menu subcategory of Science"
+msgid "Geology"
+msgstr "భూగర్భశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Menu subcategory of Science"
+msgid "Geoscience"
+msgstr "భూవిజ్ఞానశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Menu subcategory of Science"
+msgid "History"
+msgstr "చరిత్ర"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Menu subcategory of Science"
+msgid "Humanities"
+msgstr "మానవశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Menu subcategory of Science"
+msgid "Image Processing"
+msgstr "బొమ్మ ప్రక్రియాపనం"
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Menu subcategory of Science"
+msgid "Languages"
+msgstr "భాషలు"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Menu subcategory of Science"
+msgid "Literature"
+msgstr "సాహిత్యం"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Menu subcategory of Science"
+msgid "Maps"
+msgstr "పటాలు"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Menu subcategory of Science"
+msgid "Math"
+msgstr "గణితం"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Menu subcategory of Science"
+msgid "Medical"
+msgstr "వైద్యశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Menu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr "సాంఖ్యిక విశ్లేషణ"
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Menu subcategory of Science"
+msgid "Parallel Computing"
+msgstr "సమాంతర సంగణనం"
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Menu subcategory of Science"
+msgid "Physics"
+msgstr "భౌతికశాస్త్రం"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Menu subcategory of Science"
+msgid "Robotics"
+msgstr "రోబోటిక్స్"
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Menu subcategory of Science"
+msgid "Spirituality"
+msgstr "ఆధ్యాత్మికం"
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Menu subcategory of Science"
+msgid "Sports"
+msgstr "క్రీడలు"
+
+#. TRANSLATORS: this is the menu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "వ్యవస్థ"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Menu subcategory of System"
+msgid "Emulator"
+msgstr "ఎమ్యులేటర్"
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Menu subcategory of System"
+msgid "File Manager"
+msgstr "దస్త్ర నిర్వాహకం"
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Menu subcategory of System"
+msgid "File System"
+msgstr "దస్త్ర వ్యవస్థ"
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Menu subcategory of System"
+msgid "File Tools"
+msgstr "దస్త్ర పనిముట్లు"
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Menu subcategory of System"
+msgid "Monitor"
+msgstr "మానిటర్"
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Menu subcategory of System"
+msgid "Security"
+msgstr "భద్రత"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Menu subcategory of System"
+msgid "Terminal Emulator"
+msgstr "టెర్మినల్ ఎములేటర్"
+
+#. TRANSLATORS: this is the menu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr "సౌలభ్యాలు"
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Menu subcategory of Utility"
+msgid "Accessibility"
+msgstr "ప్రాపనీయత"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Menu subcategory of Utility"
+msgid "Archiving"
+msgstr ""
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Menu subcategory of Utility"
+msgid "Calculator"
+msgstr "గణని"
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Menu subcategory of Utility"
+msgid "Clock"
+msgstr "గడియారం"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Menu subcategory of Utility"
+msgid "Compression"
+msgstr "సంపీడనం"
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Menu subcategory of Utility"
+msgid "File Tools"
+msgstr "దస్త్ర పనిముట్లు"
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Menu subcategory of Utility"
+msgid "Maps"
+msgstr "పటాలు"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Menu subcategory of Utility"
+msgid "Spirituality"
+msgstr "ఆధ్యాత్మికం"
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Menu subcategory of Utility"
+msgid "Telephony Tools"
+msgstr "టెలీఫోనీ పనిముట్లు"
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Menu subcategory of Utility"
+msgid "Text Editor"
+msgstr "పాఠ్య కూర్పకం"
+
+#. TRANSLATORS: this is the menu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "దృశ్యకం"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Menu subcategory of Video"
+msgid "Editing"
+msgstr "కూర్పు"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Menu subcategory of Video"
+msgid "Database"
+msgstr "దత్తకోశం"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Menu subcategory of Video"
+msgid "Disc Burning"
+msgstr "డిస్కు కాల్చుట"
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Menu subcategory of Video"
+msgid "Players"
+msgstr "ప్రదర్శకాలు"
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Menu subcategory of Video"
+msgid "Recorders"
+msgstr "రికార్డర్లు"
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Menu subcategory of Video"
+msgid "TV"
+msgstr "టీవీ"
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Menu subcategory of Addons"
+msgid "Fonts"
+msgstr "ఖతులు"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Menu subcategory of Addons"
+msgid "Codecs"
+msgstr "కోడెక్లు"
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Menu subcategory of Addons"
+msgid "Input Sources"
+msgstr "నివేశ మూలాలు"
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Menu subcategory of Addons"
+msgid "Language Packs"
+msgstr "భాషా ప్యాక్లు"
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 0000000..5bb1938
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,2974 @@
+# Thai translation for gnome-software.
+# Copyright (C) 2013-2016 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnome-software package.
+# Akom Chotiphantawanon <knight2000@gmail.com>, 2013-2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2016-04-25 14:21+0000\n"
+"PO-Revision-Date: 2016-05-23 15:38+0700\n"
+"Last-Translator: Akom Chotiphantawanon <knight2000@gmail.com>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.6\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "GNOME Software"
+msgstr "\"ซอฟต์แวร์\" ของ GNOME"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid "Application manager for GNOME"
+msgstr "เครื่องมือจัดการโปรแกรมสำหรับ GNOME"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"\"ซอฟต์แวร์\" ช่วยคุณหาและติดตั้งโปรแกรมและส่วนขยายของระบบเพิ่มเติม "
+"และถอดถอนโปรแกรมที่ติดตั้งแล้ว"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:4
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"โปรแกรม \"ซอฟต์แวร์\" ของ GNOME จัดแสดงโปรแกรมที่เด่นและยอดนิยม "
+"พร้อมคำบรรยายที่เป็นประโยชน์และภาพหน้าจอหลายภาพต่อโปรแกรม "
+"คุณสามารถหาโปรแกรมผ่านการท่องดูตามหมวดหมู่หรือด้วยการค้นหาก็ได้ นอกจากนี้ "
+"ยังให้คุณปรับรุ่นระบบของคุณโดยใช้การปรับรุ่นแบบออฟไลน์ได้"
+
+#: ../data/org.gnome.software.gschema.xml.h:1
+msgid "A list of compatible projects"
+msgstr "รายชื่อของโครงการที่เข้ากันได้"
+
+#: ../data/org.gnome.software.gschema.xml.h:2
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "นี่คือรายชื่อของโครงการที่เข้ากันได้ที่เราควรแสดง เช่น GNOME, KDE และ XFCE"
+
+#: ../data/org.gnome.software.gschema.xml.h:3
+msgid "Whether to automatically download updates"
+msgstr "จะดาวน์โหลดรายการปรับรุ่นโดยอัตโนมัติหรือไม่"
+
+#: ../data/org.gnome.software.gschema.xml.h:4
+msgid ""
+"If enabled, GNOME Software automatically downloads updates in the background "
+"and prompts the user to install them when ready."
+msgstr ""
+"ถ้าเปิดใช้ \"ซอฟต์แวร์\" ของ GNOME จะดาวน์โหลดรายการปรับรุ่นโดยอัตโนมัติในเบื้องหลัง "
+"และถามผู้ใช้เพื่อติดตั้งเมื่อพร้อมแล้ว"
+
+#: ../data/org.gnome.software.gschema.xml.h:5
+msgid "Whether it's the very first run of GNOME Software"
+msgstr "เป็นการเรียกทำงาน \"ซอฟต์แวร์\" ของ GNOME เป็นครั้งแรกหรือไม่"
+
+#: ../data/org.gnome.software.gschema.xml.h:6
+msgid "Show star ratings next to applications"
+msgstr "แสดงคะแนนดาวถัดจากโปรแกรม"
+
+#: ../data/org.gnome.software.gschema.xml.h:7
+msgid "Non-free applications show a warning dialog before install"
+msgstr "แสดงกล่องโต้ตอบคำเตือนก่อนติดตั้งโปรแกรมที่ไม่เสรี"
+
+#: ../data/org.gnome.software.gschema.xml.h:8
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"โปรแกรมสามารถแสดงกล่องโต้ตอบคำเตือนก่อนติดตั้งซอฟต์แวร์เสรีได้ "
+"ตัวเลือกนี้จะควบคุมว่าจะระงับกล่องโต้ตอบดังกล่าวหรือไม่"
+
+#: ../data/org.gnome.software.gschema.xml.h:9
+msgid "A list of popular applications"
+msgstr "รายชื่อโปรแกรมยอดนิยม"
+
+#: ../data/org.gnome.software.gschema.xml.h:10
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "รายชื่อของโปรแกรมที่จะใช้ ซึ่งจะแทนที่โปรแกรมที่ระบบกำหนดมาให้"
+
+#: ../data/org.gnome.software.gschema.xml.h:11
+msgid "The list of extra sources that have been previously enabled"
+msgstr "รายชื่อของแหล่งเพิ่มเติมที่ได้เปิดใช้ก่อนหน้า"
+
+#: ../data/org.gnome.software.gschema.xml.h:12
+msgid ""
+"The list of sources that have been previously enabled when installing third-"
+"party applications."
+msgstr "รายชื่อของแหล่งซอฟต์แวร์ที่ได้เปิดใช้ก่อนหน้านี้ขณะติดตั้งโปรแกรมบุคคลที่สาม"
+
+#: ../data/org.gnome.software.gschema.xml.h:13
+msgid "The last update check timestamp"
+msgstr "เวลาที่ตรวจสอบการปรับรุ่นล่าสุด"
+
+#: ../data/org.gnome.software.gschema.xml.h:14
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "เวลาของรายการปรับรุ่นความปลอดภัยรายการแรก ซึ่งจะล้างหลังจากที่ได้ปรับรุ่นแล้ว"
+
+#: ../data/org.gnome.software.gschema.xml.h:15
+msgid "The last update timestamp"
+msgstr "เวลาที่ปรับรุ่นครั้งล่าสุด"
+
+#: ../data/org.gnome.software.gschema.xml.h:16
+msgid "The server to use for application reviews"
+msgstr "เซิร์ฟเวอร์ที่จะใช้สำหรับอ่านบทวิจารณ์โปรแกรม"
+
+#: ../data/org.gnome.software.gschema.xml.h:17
+msgid "The minimum karma score for reviews"
+msgstr "คะแนนกิจกรรมต่ำสุดสำหรับบทวิจารณ์"
+
+#: ../data/org.gnome.software.gschema.xml.h:18
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "บทวิจารณ์ที่มีกิจกรรมต่ำกว่าค่านี้จะไม่แสดง"
+
+#: ../data/org.gnome.software.gschema.xml.h:19
+msgid "A list of official sources that should not be considered 3rd party"
+msgstr "รายชื่อแหล่งที่เป็นทางการที่จะไม่ถือเป็นบุคคลที่สาม"
+
+#: ../src/gs-app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr "เพิ่มเข้าโฟลเดอร์โปรแกรม"
+
+#: ../src/gs-app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:316
+#: ../src/gs-review-dialog.ui.h:3 ../src/gs-shell-details.c:305
+#: ../src/gs-shell-installed.c:515 ../src/gs-upgrade-banner.ui.h:5
+msgid "_Cancel"
+msgstr "_ยกเลิก"
+
+#: ../src/gs-app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:321
+msgid "_Add"
+msgstr "เ_พิ่ม"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#: ../src/gs-app-tile.ui.h:1 ../src/gs-app-addon-row.c:97
+#: ../src/gs-app-tile.c:78 ../src/gs-app-tile.c:81 ../src/gs-feature-tile.c:68
+#: ../src/gs-popular-tile.c:74 ../src/gs-popular-tile.c:77
+#: ../src/gs-popular-tile.ui.h:1
+msgid "Installed"
+msgstr "ติดตั้งอยู่"
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr "ติดตั้งซอฟต์แวร์"
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr "ติดตั้งซอฟต์แวร์ที่เลือกลงในระบบ"
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr "เลือกทั้งหมด"
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr "ไม่เลือก"
+
+#. TRANSLATORS: this is the application name
+#. set the window title back to default
+#. TRANSLATORS: this is the main window title
+#: ../src/gnome-software.ui.h:3 ../src/gs-application.c:374
+#: ../src/gs-shell.c:253 ../src/org.gnome.Software.desktop.in.h:1
+msgid "Software"
+msgstr "ซอฟต์แวร์"
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-sources-dialog.ui.h:2
+#: ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr "กลับไป"
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "_ทั้งหมด"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "_ติดตั้งอยู่"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "_มีรุ่นใหม่"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-addon-row.c:91 ../src/gs-app-row.c:266
+#: ../src/gs-shell-details.ui.h:4
+msgid "Pending"
+msgstr "รอติดตั้ง"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being installed
+#: ../src/gs-app-addon-row.c:101 ../src/gs-app-row.c:304
+#: ../src/gs-app-tile.c:87 ../src/gs-app-tile.c:90
+msgid "Installing"
+msgstr "กำลังติดตั้ง"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being removed
+#: ../src/gs-app-addon-row.c:105 ../src/gs-app-row.c:313
+#: ../src/gs-app-tile.c:96 ../src/gs-app-tile.c:99
+msgid "Removing"
+msgstr "กำลังถอดถอน"
+
+#. TRANSLATORS: This is how we join the licenses and can
+#. * be considered a "Conjunctive AND Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 and MIT and BSD-2-Clause"
+#. TRANSLATORS: separator for a list of items
+#: ../src/gs-app.c:1391 ../src/gs-shell-extras.c:145
+msgid " and "
+msgstr " และ "
+
+#. TRANSLATORS: This is how we join the licenses and can
+#. * be considered a "Disjunctive OR Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 or MIT"
+#: ../src/gs-app.c:1399
+msgid " or "
+msgstr " หรือ "
+
+#. TRANSLATORS: non-free app
+#: ../src/gs-app.c:1422
+msgid "Proprietary"
+msgstr "กรรมสิทธิ์"
+
+#. TRANSLATORS: see the wikipedia page
+#: ../src/gs-app.c:1432
+msgid "Public domain"
+msgstr "สาธารณสมบัติ"
+
+#: ../src/gs-app-folder-dialog.c:305
+msgid "Folder Name"
+msgstr "ชื่อโฟลเดอร์"
+
+#. TRANSLATORS: this is a command line option
+#: ../src/gs-application.c:97
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"โหมดเริ่มทำงาน: เป็นค่า ‘updates’ (รายการปรับรุ่น), ‘updated’ (รายการปรับรุ่นแล้ว), "
+"‘installed’ (รายการติดตั้งแล้ว) หรือ ‘overview’ (ภาพรวม) อย่างใดอย่างหนึ่ง"
+
+#: ../src/gs-application.c:97
+msgid "MODE"
+msgstr "โหมด"
+
+#: ../src/gs-application.c:99
+msgid "Search for applications"
+msgstr "ค้นหาโปรแกรม"
+
+#: ../src/gs-application.c:99
+msgid "SEARCH"
+msgstr "คำค้น"
+
+#: ../src/gs-application.c:101
+msgid "Show application details"
+msgstr "แสดงรายละเอียดของโปรแกรม"
+
+#: ../src/gs-application.c:101
+msgid "ID"
+msgstr "ID"
+
+#: ../src/gs-application.c:103
+msgid "Open a local package file"
+msgstr "เปิดแฟ้มแพกเกจในเครื่อง"
+
+#: ../src/gs-application.c:103
+msgid "FILENAME"
+msgstr "ชื่อแฟ้ม"
+
+#: ../src/gs-application.c:105
+msgid "Show verbose debugging information"
+msgstr "แสดงข้อมูลดีบั๊กโดยละเอียด"
+
+#: ../src/gs-application.c:107
+msgid "Show profiling information for the service"
+msgstr "แสดงข้อมูลการวัดประสิทธิภาพของบริการ"
+
+#: ../src/gs-application.c:109
+msgid "Prefer local file sources to AppStream"
+msgstr "พยายามใช้แหล่งแฟ้มในเครื่องก่อนใช้ AppStream"
+
+#: ../src/gs-application.c:111
+msgid "Show version number"
+msgstr "แสดงเลขรุ่น"
+
+#: ../src/gs-application.c:367
+msgid "translator-credits"
+msgstr "Akom Chotiphantawanon"
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:371
+msgid "About Software"
+msgstr "เกี่ยวกับ \"ซอฟต์แวร์\""
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:377
+msgid "A nice way to manage the software on your system."
+msgstr "วิธีที่ดีในการจัดการซอฟต์แวร์ในระบบของคุณ"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: ../src/gs-app-row.c:152
+msgid "Device cannot be used during update."
+msgstr "อุปกรณ์ไม่สามารถใช้งานได้ในระหว่างปรับรุ่น"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-row.c:250
+msgid "Visit website"
+msgstr "เยี่ยมชมเว็บไซต์"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: ../src/gs-app-row.c:255
+msgid "Install…"
+msgstr "ติดตั้ง…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-row.c:263
+msgid "Cancel"
+msgstr "ยกเลิก"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#. TRANSLATORS: this is button text to update the firware
+#. TRANSLATORS: button text
+#: ../src/gs-app-row.c:273 ../src/gs-app-row.c:280 ../src/gs-page.c:282
+#: ../src/gs-utils.c:348
+msgid "Install"
+msgstr "ติดตั้ง"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-row.c:284 ../src/gs-app-row.c:295 ../src/gs-page.c:350
+msgid "Remove"
+msgstr "ถอดถอน"
+
+#. vim: set noexpandtab:
+#. This is shown in the search result row as a tag
+#: ../src/gs-app-row.ui.h:2 ../src/gs-shell-details.ui.h:31
+msgid "3rd party"
+msgstr "บุคคลที่ 3"
+
+#. This is shown in the search result row as a tag
+#: ../src/gs-app-row.ui.h:4 ../src/gs-shell-details.ui.h:32
+msgid "web app"
+msgstr "โปรแกรมบนเว็บ"
+
+#. This is shown in the search result row as a tag
+#: ../src/gs-app-row.ui.h:6
+msgid "nonfree"
+msgstr "ไม่เสรี"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:235
+msgid "Other"
+msgstr "อื่นๆ"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: ../src/gs-category.c:239
+msgid "All"
+msgstr "ทั้งหมด"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: ../src/gs-category.c:242
+msgid "Featured"
+msgstr "เด่น"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: ../src/gs-dbus-helper.c:307
+msgid "An application"
+msgstr "มีโปรแกรมหนึ่ง"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: ../src/gs-dbus-helper.c:313
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s ร้องขอการรองรับฟอร์แมตแฟ้มเพิ่มเติม"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:315
+msgid "Additional MIME Types Required"
+msgstr "ต้องการชนิด MIME เพิ่มเติม"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: ../src/gs-dbus-helper.c:319
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s ร้องขอแบบอักษรเพิ่มเติม"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:321
+msgid "Additional Fonts Required"
+msgstr "ต้องการแบบอักษรเพิ่มเติม"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: ../src/gs-dbus-helper.c:325
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s ร้องขอตัวอ่าน-ลงรหัสสื่อผสมเพิ่มเติม"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:327
+msgid "Additional Multimedia Codecs Required"
+msgstr "ต้องการตัวอ่าน-ลงรหัสสื่อผสมเพิ่มเติม"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: ../src/gs-dbus-helper.c:331
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s ร้องขอไดรเวอร์เครื่องพิมพ์เพิ่มเติม"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:333
+msgid "Additional Printer Drivers Required"
+msgstr "ต้องการไดรเวอร์เครื่องพิมพ์เพิ่มเติม"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: ../src/gs-dbus-helper.c:337
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s ร้องขอแพกเกจเพิ่มเติม"
+
+#. TRANSLATORS: notification title
+#: ../src/gs-dbus-helper.c:339
+msgid "Additional Packages Required"
+msgstr "ต้องการแพกเกจเพิ่มเติม"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: ../src/gs-dbus-helper.c:348
+msgid "Find in Software"
+msgstr "หาใน \"ซอฟต์แวร์\""
+
+#. vim: set noexpandtab:
+#: ../src/gs-first-run-dialog.ui.h:1
+msgid "Welcome"
+msgstr "ยินดีต้อนรับ"
+
+#: ../src/gs-first-run-dialog.ui.h:2
+msgid "Welcome to Software"
+msgstr "ยินดีต้อนรับสู่ \"ซอฟต์แวร์\""
+
+#: ../src/gs-first-run-dialog.ui.h:3
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"\"ซอฟต์แวร์\" ช่วยคุณติดตั้งซอฟต์แวร์ใดๆ ที่คุณต้องการได้โดยสั่งจากที่นี่ที่เดียว "
+"คุณสามารถดูซอฟต์แวร์แนะนำ ท่องดูหมวดต่างๆ หรือค้นหาโปรแกรมที่คุณต้องการได้"
+
+#: ../src/gs-first-run-dialog.ui.h:4
+msgid "_Let’s Go Shopping"
+msgstr "ไ_ปช็อปกันเลย"
+
+#. TRANSLATORS: Here are 2 strings the same as in gtk/gtkbox.c
+#. in GTK+ project. Please use the same translation.
+#: ../src/gs-hiding-box.c:384
+msgid "Spacing"
+msgstr "ช่องว่าง"
+
+#: ../src/gs-hiding-box.c:385
+msgid "The amount of space between children"
+msgstr "จำนวนช่องว่างระหว่างรายการลูก"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:83
+msgctxt "app status"
+msgid "Removed"
+msgstr "ถอดถอนแล้ว"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: ../src/gs-history-dialog.c:89
+msgctxt "app status"
+msgid "Installed"
+msgstr "ติดตั้งอยู่"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gs-history-dialog.c:95
+msgctxt "app status"
+msgid "Updated"
+msgstr "ปรับรุ่นแล้ว"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: ../src/gs-history-dialog.c:101
+msgctxt "app status"
+msgid "Unknown"
+msgstr "ไม่ทราบ"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "ประวัติ"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-page.c:276
+#, c-format
+msgid "Prepare %s"
+msgstr "เตรียม %s"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-page.c:341
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "คุณแน่ใจหรือไม่ว่าต้องการถอดถอน %s?"
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-page.c:346
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s จะถูกถอดถอน และคุณจะต้องติดตั้งโปรแกรมดังกล่าวใหม่หากต้องการใช้งานอีกครั้ง"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:675
+msgid "OS Updates"
+msgstr "ปรับรุ่น OS"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: ../src/gs-plugin-loader.c:680
+msgid "Includes performance, stability and security improvements."
+msgstr "มีการปรับปรุงประสิทธิภาพ เสถียรภาพ และการรักษาความปลอดภัย"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-plugin-loader.c:1387 ../src/gs-shell-extras.c:386
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "ไม่มีส่วนเสริมของตัวอ่าน-ลงรหัสสำหรับรูปแบบ %s"
+
+#: ../src/gs-plugin-loader.c:1390
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr ""
+"ข้อมูลเกี่ยวกับ %s และตัวเลือกสำหรับวิธีการรับตัวอ่าน-ลงรหัสที่สามารถเล่นรูปแบบนี้ มีอยู่ในในเว็บไซต์"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: ../src/gs-review-dialog.c:93
+msgid "Hate it"
+msgstr "เกลียด"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: ../src/gs-review-dialog.c:97
+msgid "Don't like it"
+msgstr "ไม่ชอบ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: ../src/gs-review-dialog.c:101
+msgid "It's OK"
+msgstr "ใช้ได้"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: ../src/gs-review-dialog.c:105
+msgid "Like it"
+msgstr "ชอบ"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: ../src/gs-review-dialog.c:109
+msgid "Love it"
+msgstr "โปรดปราน"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: ../src/gs-review-dialog.c:131
+msgid "Please take more time writing the review"
+msgstr "กรุณาใช้เวลาเขียนบทวิจารณ์มากกว่านี้"
+
+#. TRANSLATORS: the review is not acceptable
+#: ../src/gs-review-dialog.c:135
+msgid "Please choose a star rating"
+msgstr "กรุณาเลือกคะแนนดาว"
+
+#. TRANSLATORS: the review is not acceptable
+#: ../src/gs-review-dialog.c:139
+msgid "The summary is too short"
+msgstr "สรุปสั้นเกินไป"
+
+#. TRANSLATORS: the review is not acceptable
+#: ../src/gs-review-dialog.c:143
+msgid "The summary is too long"
+msgstr "สรุปยาวเกินไป"
+
+#. TRANSLATORS: the review is not acceptable
+#: ../src/gs-review-dialog.c:147
+msgid "The description is too short"
+msgstr "คำบรรยายสั้นเกินไป"
+
+#. TRANSLATORS: the review is not acceptable
+#: ../src/gs-review-dialog.c:151
+msgid "The description is too long"
+msgstr "คำบรรยายยาวเกินไป"
+
+#. vim: set noexpandtab:
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: ../src/gs-review-dialog.ui.h:2
+msgid "Post Review"
+msgstr "แปะประกาศบทวิจารณ์"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: ../src/gs-review-dialog.ui.h:5
+msgid "_Post"
+msgstr "แ_ปะประกาศ"
+
+#: ../src/gs-review-dialog.ui.h:6
+msgid "Rating"
+msgstr "ให้คะแนน"
+
+#: ../src/gs-review-dialog.ui.h:7
+msgid "Summary"
+msgstr "สรุป"
+
+#: ../src/gs-review-dialog.ui.h:8
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "เขียนสรุปบทวิจารณ์ของคุณสั้นๆ ตัวอย่างเช่น: “ยอดเยี่ยม ขอแนะนำ”"
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: ../src/gs-review-dialog.ui.h:10
+msgctxt "app review"
+msgid "Review"
+msgstr "บทวิจารณ์"
+
+#: ../src/gs-review-dialog.ui.h:11
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "คุณคิดเห็นอย่างไรเกี่ยวกับโปรแกรมนี้? พยายามให้เหตุผลประกอบทัศนะของคุณ"
+
+#: ../src/gs-review-histogram.ui.h:1
+msgid "Total"
+msgstr "ทั้งหมด"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: ../src/gs-review-row.c:207
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "คุณสามารถรายงานบทวิจารณ์ที่ไม่เหมาะสม หยาบคาย หรือมีพฤติกรรมเหยียดผู้อื่นได้"
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: ../src/gs-review-row.c:212
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "บทวิจารณ์ที่ถูกรายงานจะถูกซ่อนไว้ จนกว่าจะได้รับการตรวจสอบโดยผู้ดูแลระบบ"
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: ../src/gs-review-row.c:226
+msgid "Report Review?"
+msgstr "รายงานบทวิจารณ์หรือไม่?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: ../src/gs-review-row.c:230
+msgid "Report"
+msgstr "รายงาน"
+
+#. vim: set noexpandtab:
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: ../src/gs-review-row.ui.h:2
+msgid "Was this review useful to you?"
+msgstr "บทวิจารณ์นี้เป็นประโยชน์กับคุณหรือไม่?"
+
+#: ../src/gs-review-row.ui.h:3
+msgid "Yes"
+msgstr "มี"
+
+#: ../src/gs-review-row.ui.h:4
+msgid "No"
+msgstr "ไม่มี"
+
+#. Translators: Button text for indifference, only used when moderating
+#: ../src/gs-review-row.ui.h:6
+msgid "Meh"
+msgstr "กลางๆ"
+
+#: ../src/gs-review-row.ui.h:7
+msgid "Report…"
+msgstr "รายงาน…"
+
+#: ../src/gs-review-row.ui.h:8
+msgid "Remove…"
+msgstr "ลบออก…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:232
+msgid "Screenshot not found"
+msgstr "ไม่พบภาพหน้าจอ"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: ../src/gs-screenshot-image.c:248
+msgid "Failed to load image"
+msgstr "โหลดภาพไม่สำเร็จ"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:379
+msgid "Screenshot size not found"
+msgstr "ไม่พบขนาดภาพหน้าจอ"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:405
+msgid "Could not create cache"
+msgstr "ไม่สามารถสร้างแคชได้"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:433
+msgid "Screenshot not valid"
+msgstr "ภาพหน้าจอไม่ถูกต้อง"
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:449
+msgid "Screenshot not available"
+msgstr "ไม่มีภาพหน้าจอ"
+
+#: ../src/gs-screenshot-image.c:500
+msgid "Screenshot"
+msgstr "ภาพหน้าจอ"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-category.ui.h:1
+msgid ""
+"Extensions are used at your own risk. If you have any system problems, it is "
+"recommended to disable them."
+msgstr ""
+"คุณต้องรับความเสียงเองเมื่อใช้ส่วนขยายต่างๆ ถ้าคุณมีปัญหาใดๆ กับระบบ ขอแนะนำให้ปิดส่วนขยายต่างๆ"
+
+#: ../src/gs-shell-category.ui.h:2
+msgid "Extension Settings"
+msgstr "ตั้งค่าส่วนขยาย"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: button text in the header when an application
+#. * can be live-updated
+#: ../src/gs-shell-details.c:201 ../src/gs-shell-details.c:227
+#: ../src/gs-shell-details.c:232 ../src/gs-shell-details.ui.h:2
+#: ../src/gs-upgrade-banner.ui.h:6
+msgid "_Install"
+msgstr "_ติดตั้ง"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:212
+msgid "_Installing"
+msgstr "กำลัง_ติดตั้ง"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software sources or the like
+#: ../src/gs-shell-details.c:245
+msgid "_Install…"
+msgstr "_ติดตั้ง…"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: ../src/gs-shell-details.c:292 ../src/gs-shell-details.ui.h:3
+msgid "_Remove"
+msgstr "_ถอดถอน"
+
+#. TRANSLATORS: button text in the header when an application can be installed
+#: ../src/gs-shell-details.c:299
+msgid "_Removing"
+msgstr "กำลัง_ถอดถอน"
+
+#. TRANSLATORS: this is where the license is not known
+#: ../src/gs-shell-details.c:669
+msgctxt "license"
+msgid "Unknown"
+msgstr "ไม่ทราบ"
+
+#. TRANSLATORS: this is where the version is not known
+#: ../src/gs-shell-details.c:682
+msgctxt "version"
+msgid "Unknown"
+msgstr "ไม่ทราบ"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:688
+msgctxt "size"
+msgid "Calculating…"
+msgstr "กำลังคำนวณ…"
+
+#. TRANSLATORS: this is where the size is not known
+#: ../src/gs-shell-details.c:691
+msgctxt "size"
+msgid "Unknown"
+msgstr "ไม่ทราบ"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:703
+msgctxt "updated"
+msgid "Never"
+msgstr "ไม่เคย"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined menu category
+#: ../src/gs-shell-details.c:717
+msgctxt "menu category"
+msgid "None"
+msgstr "ไม่มี"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-shell-details.c:734
+msgctxt "origin"
+msgid "Unknown"
+msgstr "ไม่ทราบ"
+
+#. TRANSLATORS: this is the warning box
+#: ../src/gs-shell-details.c:780
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "โปรแกรมนี้สามารถใช้งานได้เมื่อมีการเชื่อมต่ออินเทอร์เน็ตเท่านั้น"
+
+#. TRANSLATORS: this is the warning box
+#: ../src/gs-shell-details.c:791
+msgid "This software comes from a 3rd party."
+msgstr "ซอฟต์แวร์นี้มาจากบุคคลที่ 3"
+
+#. TRANSLATORS: this is the warning box
+#: ../src/gs-shell-details.c:800
+msgid ""
+"This software comes from a 3rd party and may contain non-free components."
+msgstr "ซอฟต์แวร์นี้มาจากบุคคลที่ 3 และอาจมีองค์ประกอบที่ไม่เสรี"
+
+#. TRANSLATORS: this is the warning box
+#: ../src/gs-shell-details.c:809
+msgid "This software may contain non-free components."
+msgstr "ซอฟต์แวร์นี้อาจมีองค์ประกอบที่ไม่เสรี"
+
+#: ../src/gs-shell-details.c:1135
+#, c-format
+msgid "Could not find '%s'"
+msgstr "หา '%s' ไม่พบ"
+
+#. TRANSLATORS: install or removed failed
+#: ../src/gs-shell-details.c:1195 ../src/gs-utils.c:168
+msgid "Sorry, this did not work"
+msgstr "ขออภัย ทำงานล้มเหลว"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-details.ui.h:1
+msgid "Details page"
+msgstr "หน้ารายละเอียด"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gs-shell-details.ui.h:6
+msgid "_Launch"
+msgstr "เ_รียกทำงาน"
+
+#: ../src/gs-shell-details.ui.h:7
+msgid "Software Source Included"
+msgstr "มีแหล่งซอฟต์แวร์"
+
+#: ../src/gs-shell-details.ui.h:8
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr ""
+"โปรแกรมนี้มีแหล่งซอฟต์แวร์ ซึ่งมีการจัดเตรียมรายการปรับรุ่น และสามารถเข้าถึงซอฟต์แวร์อื่นๆ ได้"
+
+#: ../src/gs-shell-details.ui.h:9
+msgid "No Software Source Included"
+msgstr "ไม่มีแหล่งซอฟต์แวร์"
+
+#: ../src/gs-shell-details.ui.h:10
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr "โปรแกรมนี้ไม่มีแหล่งซอฟต์แวร์ จะไม่มีการปรับรุ่นเป็นรุ่นใหม่"
+
+#: ../src/gs-shell-details.ui.h:11
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "ซอฟต์แวร์นี้จัดเตรียมโดยชุดจัดแจกของคุณอยู่แล้ว และไม่ควรแทนที่"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: ../src/gs-shell-details.ui.h:13
+msgid "Software Source Identified"
+msgstr "แหล่งซอฟต์แวร์ที่ระบุที่มา"
+
+#: ../src/gs-shell-details.ui.h:14
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr "การเพิ่มแหล่งซอฟต์แวร์นี้จะให้คุณเข้าถึงซอฟต์แวร์และการปรับรุ่นเพิ่มเติมได้"
+
+#: ../src/gs-shell-details.ui.h:15
+msgid "Only use software sources that you trust."
+msgstr "ใช้แหล่งซอฟต์แวร์ที่คุณเชื่อถือเท่านั้น"
+
+#: ../src/gs-shell-details.ui.h:16
+msgid "_Website"
+msgstr "เ_ว็บไซต์"
+
+#: ../src/gs-shell-details.ui.h:17
+msgid "_History"
+msgstr "_ประวัติ"
+
+#: ../src/gs-shell-details.ui.h:18 ../src/gs-update-monitor.c:561
+msgid "Details"
+msgstr "รายละเอียด"
+
+#: ../src/gs-shell-details.ui.h:19
+msgid "Localized in your Language"
+msgstr "มีการแปลเป็นภาษาของคุณ"
+
+#: ../src/gs-shell-details.ui.h:20
+msgid "Documentation"
+msgstr "เอกสาร"
+
+#: ../src/gs-shell-details.ui.h:21
+msgid "Release Activity"
+msgstr "รุ่นที่เคลื่อนไหว"
+
+#: ../src/gs-shell-details.ui.h:22
+msgid "System Integration"
+msgstr "การเชื่อมรวมระบบ"
+
+#: ../src/gs-shell-details.ui.h:23 ../src/gs-sources-dialog.ui.h:8
+msgid "Version"
+msgstr "รุ่น"
+
+#: ../src/gs-shell-details.ui.h:24
+msgid "Updated"
+msgstr "ปรับรุ่นแล้ว"
+
+#: ../src/gs-shell-details.ui.h:25
+msgid "Category"
+msgstr "หมวด"
+
+#: ../src/gs-shell-details.ui.h:26
+msgid "Size"
+msgstr "ขนาด"
+
+#: ../src/gs-shell-details.ui.h:27
+msgid "Source"
+msgstr "แหล่ง"
+
+#: ../src/gs-shell-details.ui.h:28
+msgid "Developer"
+msgstr "ผู้พัฒนา"
+
+#: ../src/gs-shell-details.ui.h:29
+msgid "License"
+msgstr "สัญญาอนุญาต"
+
+#: ../src/gs-shell-details.ui.h:30
+msgid "non-free"
+msgstr "ไม่เสรี"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-details.ui.h:33 ../src/gs-shell-installed.c:433
+#: ../src/gs-update-list.c:129 ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr "ส่วนเสริม"
+
+#: ../src/gs-shell-details.ui.h:34
+msgid "Selected add-ons will be installed with the application."
+msgstr "ส่วนเสริมที่เลือกจะถูกติดตั้งพร้อมกับโปรแกรม"
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: ../src/gs-shell-details.ui.h:36
+msgid "Reviews"
+msgstr "บทวิจารณ์"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: ../src/gs-shell-details.ui.h:38
+msgid "_Write a Review"
+msgstr "เ_ขียนบทวิจารณ์"
+
+#. Translators: Button to return more application-submitted reviews.
+#: ../src/gs-shell-details.ui.h:40
+msgid "_Show More"
+msgstr "แ_สดงเพิ่มเติม"
+
+#. TRANSLATORS: separator for a list of items
+#: ../src/gs-shell-extras.c:148
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: ../src/gs-shell-extras.c:174
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "แบบอักษรที่มีสำหรับอักษร %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: ../src/gs-shell-extras.c:182
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "ซอฟต์แวร์ที่มีสำหรับ %s"
+
+#: ../src/gs-shell-extras.c:224
+msgid "Unable to Find Requested Software"
+msgstr "ไม่สามารถหาซอฟต์แวร์ที่ร้องขอ"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: ../src/gs-shell-extras.c:320
+#, c-format
+msgid "%s not found"
+msgstr "ไม่พบ %s"
+
+#. TRANSLATORS: hyperlink title
+#: ../src/gs-shell-extras.c:324
+msgid "on the website"
+msgstr "ที่เว็บไซต์"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:331
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "ไม่มีโปรแกรมที่จัดเตรียมแฟ้ม %s"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:335 ../src/gs-shell-extras.c:346
+#: ../src/gs-shell-extras.c:357
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "อ่านข้อมูลเกี่ยวกับ %s รวมทั้งตัวเลือกต่างๆ สำหรับการรับโปรแกรมที่ขาดได้ %s"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:342 ../src/gs-shell-extras.c:364
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "ไม่มีโปรแกรมสำหรับรองรับ %s"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:353
+#, c-format
+msgid "%s is not available."
+msgstr "ไม่มี %s"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:368
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"อ่านข้อมูลเกี่ยวกับ %s รวมทั้งตัวเลือกต่างๆ สำหรับการรับโปรแกรมที่สามารถรองรับฟอร์แมตนี้ได้ %s"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:375
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "ไม่มีแบบอักษรสำหรับรองรับอักษร %s"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:379
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "อ่านข้อมูลเกี่ยวกับ %s รวมทั้งตัวเลือกต่างๆ สำหรับการรับแบบอักษรเพิ่มเติมได้ %s"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:390
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"อ่านข้อมูลเกี่ยวกับ %s รวมทั้งตัวเลือกต่างๆ สำหรับการรับตัวอ่าน-ลงรหัสที่สามารถเล่นฟอร์แมตนี้ได้ %s"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:397
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "ไม่มีทรัพยากรพลาสมาสำหรับรองรับ %s"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:401
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "อ่านข้อมูลเกี่ยวกับ %s รวมทั้งตัวเลือกต่างๆ สำหรับการรับทรัพยากรพลาสมาเพิ่มเติมได้ %s"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-shell-extras.c:408
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "ไม่มีไดรเวอร์เครื่องพิมพ์สำหรับ %s"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: ../src/gs-shell-extras.c:412
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr "อ่านข้อมูลเกี่ยวกับ %s รวมทั้งตัวเลือกต่างๆ สำหรับการรับไดรเวอร์ที่รองรับเครื่องพิมพ์นี้ได้ %s"
+
+#: ../src/gs-shell-extras.c:458
+msgid "this website"
+msgstr "เว็บไซต์นี้"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: ../src/gs-shell-extras.c:462
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "น่าเสียดายที่ไม่พบ %s ที่คุณค้นหา กรุณาอ่านข้อมูลเพิ่มเติมที่ %s"
+
+#: ../src/gs-shell-extras.c:542 ../src/gs-shell-extras.c:590
+#: ../src/gs-shell-extras.c:640
+msgid "Failed to find any search results"
+msgstr "ไม่พบผลการค้นหาใดๆ"
+
+#: ../src/gs-shell-extras.c:809
+#, c-format
+msgid "%s file format"
+msgstr "ฟอร์แมตแฟ้ม %s"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-extras.ui.h:1
+msgid "Codecs page"
+msgstr "หน้าของตัวอ่าน-ลงรหัส"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: ../src/gs-shell-installed.c:423
+msgid "System Applications"
+msgstr "โปรแกรมระบบ"
+
+#: ../src/gs-shell-installed.c:523
+msgid "Click on items to select them"
+msgstr "คลิกที่รายการที่จะเลือก"
+
+#: ../src/gs-shell-installed.c:714
+msgid "Select"
+msgstr "เลือก"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-installed.ui.h:1
+msgid "Installed page"
+msgstr "หน้ารายการติดตั้งแล้ว"
+
+#: ../src/gs-shell-installed.ui.h:2
+msgid "_Add to Folder…"
+msgstr "เ_พิ่มเข้าโฟลเดอร์…"
+
+#: ../src/gs-shell-installed.ui.h:3
+msgid "_Move to Folder…"
+msgstr "_ย้ายไปโฟลเดอร์…"
+
+#: ../src/gs-shell-installed.ui.h:4
+msgid "_Remove from Folder"
+msgstr "_ลบออกจากโฟลเดอร์"
+
+#: ../src/gs-shell-moderate.ui.h:1
+msgid "Moderate page"
+msgstr "กลั่นกรองเนื้อหา"
+
+#: ../src/gs-shell-moderate.ui.h:2
+msgid "There are no reviews to moderate"
+msgstr "ไม่มีบทวิจารณ์ที่จะกลั่นกรอง"
+
+#. TRANSLATORS: this is a heading for audio applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:367
+msgid "Recommended Audio Applications"
+msgstr "โปรแกรมเสียงที่แนะนำ"
+
+#. TRANSLATORS: this is a heading for games which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:372
+msgid "Recommended Games"
+msgstr "เกมที่แนะนำ"
+
+#. TRANSLATORS: this is a heading for graphics applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:377
+msgid "Recommended Graphics Applications"
+msgstr "โปรแกรมกราฟิกส์ที่แนะนำ"
+
+#. TRANSLATORS: this is a heading for office applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:382
+msgid "Recommended Office Applications"
+msgstr "โปรแกรมสำนักงานที่แนะนำ"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-overview.ui.h:1
+msgid "Overview page"
+msgstr "หน้าภาพรวม"
+
+#: ../src/gs-shell-overview.ui.h:2
+msgid "Featured Application"
+msgstr "โปรแกรมเด่น"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: ../src/gs-shell-overview.ui.h:4
+msgid "Editor's Picks"
+msgstr "คัดสรรโดยบรรณาธิการ"
+
+#: ../src/gs-shell-overview.ui.h:5
+msgid "Categories"
+msgstr "หมวด"
+
+#: ../src/gs-shell-overview.ui.h:6
+msgid "No Application Data Found"
+msgstr "ไม่พบข้อมูลโปรแกรม"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-search.ui.h:1
+msgid "Search page"
+msgstr "หน้าค้นหา"
+
+#: ../src/gs-shell-search.ui.h:2
+msgid "No Application Found"
+msgstr "ไม่พบโปรแกรม"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:201
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:204
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: ../src/gs-shell-updates.c:210
+msgid "Yesterday, %R"
+msgstr "เมื่อวาน %R น."
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: ../src/gs-shell-updates.c:214
+msgid "Yesterday, %l:%M %p"
+msgstr "เมื่อวาน %l:%M %p"
+
+#: ../src/gs-shell-updates.c:217
+msgid "Two days ago"
+msgstr "สองวันก่อน"
+
+#: ../src/gs-shell-updates.c:219
+msgid "Three days ago"
+msgstr "สามวันก่อน"
+
+#: ../src/gs-shell-updates.c:221
+msgid "Four days ago"
+msgstr "สี่วันก่อน"
+
+#: ../src/gs-shell-updates.c:223
+msgid "Five days ago"
+msgstr "ห้าวันก่อน"
+
+#: ../src/gs-shell-updates.c:225
+msgid "Six days ago"
+msgstr "หกวันก่อน"
+
+#: ../src/gs-shell-updates.c:227
+msgid "One week ago"
+msgstr "หนึ่งสัปดาห์ที่แล้ว"
+
+#: ../src/gs-shell-updates.c:229
+msgid "Two weeks ago"
+msgstr "สองสัปดาห์ที่แล้ว"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:233
+msgid "%e %B %Y"
+msgstr "%e %B %Ey"
+
+#. TRANSLATORS: the updates are being downloaded
+#: ../src/gs-shell-updates.c:249
+msgid "Downloading new updates…"
+msgstr "กำลังดาวน์โหลดการปรับรุ่นรายการใหม่…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: ../src/gs-shell-updates.c:253
+msgid "Looking for new updates…"
+msgstr "กำลังค้นหารายการปรับรุ่นใหม่…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:296
+msgid "Setting up updates…"
+msgstr "กำลังตั้งค่ารายการปรับรุ่น…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:297 ../src/gs-shell-updates.c:304
+msgid "(This could take a while)"
+msgstr "(อาจใช้เวลาสักครู่)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:434
+#, c-format
+msgid "Last checked: %s"
+msgstr "ตรวจสอบล่าสุด: %s"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: ../src/gs-shell-updates.c:849
+msgid "Charges may apply"
+msgstr "อาจมีค่าใช้จ่าย"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:853
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "การตรวจสอบการปรับรุ่นขณะใช้บรอดแบนด์มือถืออาจทำให้คุณเสียค่าบริการ"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:857
+msgid "Check Anyway"
+msgstr "ตรวจสอบต่อไป"
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:873
+msgid "No Network"
+msgstr "ไม่มีเครือข่าย"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:877
+msgid "Internet access is required to check for updates."
+msgstr "จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อตรวจสอบการปรับรุ่น"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:881
+msgid "Network Settings"
+msgstr "ตั้งค่าเครือข่าย"
+
+#: ../src/gs-shell-updates.c:1256
+msgid "Restart & _Install"
+msgstr "เริ่มใหม่และ_ติดตั้ง"
+
+#: ../src/gs-shell-updates.c:1274
+msgid "Check for updates"
+msgstr "ตรวจสอบการปรับรุ่น"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-updates.ui.h:1
+msgid "Updates page"
+msgstr "หน้ารายการปรับรุ่น"
+
+#: ../src/gs-shell-updates.ui.h:2
+msgid "Other Updates"
+msgstr "รายการปรับรุ่นอื่นๆ"
+
+#: ../src/gs-shell-updates.ui.h:3
+msgid "Software is up to date"
+msgstr "ซอฟต์แวร์เป็นรุ่นล่าสุดแล้ว"
+
+#: ../src/gs-shell-updates.ui.h:4
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "การตรวจสอบการปรับรุ่นขณะใช้บรอดแบนด์มือถืออาจทำให้คุณเสียค่าบริการ"
+
+#: ../src/gs-shell-updates.ui.h:5
+msgid "_Check Anyway"
+msgstr "_ตรวจสอบต่อไป"
+
+#: ../src/gs-shell-updates.ui.h:6
+msgid "Go online to check for updates"
+msgstr "ออนไลน์เพื่อตรวจสอบการปรับรุ่น"
+
+#: ../src/gs-shell-updates.ui.h:7
+msgid "_Network Settings"
+msgstr "ตั้งค่าเ_ครือข่าย"
+
+#: ../src/gs-shell-updates.ui.h:8
+msgid "Updates are automatically managed"
+msgstr "การปรับรุ่นมีการจัดการโดยอัตโนมัติ"
+
+#. TRANSLATORS: This string describes a software source that
+#. has no software installed from it.
+#: ../src/gs-sources-dialog.c:94
+msgid "No applications or addons installed; other software might still be"
+msgstr "ไม่มีโปรแกรมหรือส่วนเสริมติดตั้งอยู่ ซอฟต์แวร์อื่นๆ อาจยังมีอยู่"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software source.
+#: ../src/gs-sources-dialog.c:98
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] "มีโปรแกรมติดตั้งไว้ %i รายการ"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software source.
+#: ../src/gs-sources-dialog.c:104
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] "มีส่วนเสริมติดตั้งไว้ %i รายการ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of applications.
+#: ../src/gs-sources-dialog.c:111
+#, c-format
+msgid "%i application"
+msgid_plural "%i applications"
+msgstr[0] "โปรแกรม %i รายการ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the number of add-ons.
+#: ../src/gs-sources-dialog.c:117
+#, c-format
+msgid "%i add-on"
+msgid_plural "%i add-ons"
+msgstr[0] "ส่วนเสริม %i รายการ"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software source.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: ../src/gs-sources-dialog.c:124
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "ติดตั้ง %s และ %s เสร็จแล้ว"
+
+#: ../src/gs-sources-dialog.c:322 ../src/gs-sources-dialog.ui.h:12
+msgid "Remove Source"
+msgstr "ลบแหล่ง"
+
+#: ../src/gs-sources-dialog.c:336
+msgid "Removing…"
+msgstr "กำลังถอดถอน…"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: ../src/gs-sources-dialog.c:402
+msgid "the operating system"
+msgstr "ระบบปฏิบัติการ"
+
+#. TRANSLATORS: This is the text displayed in the Software Sources
+#. dialog when no OS-provided software sources are enabled. %s gets
+#. replaced by the name of the actual distro, e.g. Fedora.
+#: ../src/gs-sources-dialog.c:473
+#, c-format
+msgid ""
+"Software sources can be downloaded from the internet. They give you access "
+"to additional software that is not provided by %s."
+msgstr ""
+"แหล่งซอฟต์แวร์สามารถดาวน์โหลดได้จากอินเทอร์เน็ต "
+"ซึ่งช่วยให้คุณเข้าถึงซอฟต์แวร์เพิ่มเติมที่ไม่ได้จัดเตรียมไว้โดย %s"
+
+#. vim: set noexpandtab:
+#: ../src/gs-sources-dialog.ui.h:1
+msgid "Software Sources"
+msgstr "แหล่งซอฟต์แวร์"
+
+#: ../src/gs-sources-dialog.ui.h:3
+msgid "Software sources give you access to additional software."
+msgstr "แหล่งซอฟต์แวร์จะเปิดให้คุณเข้าถึงซอฟต์แวร์เพิ่มเติมได้"
+
+#: ../src/gs-sources-dialog.ui.h:4
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr "การลบแหล่งจะเป็นการลบซอฟต์แวร์ใดๆ ที่คุณได้ติดตั้งจากแหล่งนั้นด้วย"
+
+#: ../src/gs-sources-dialog.ui.h:5
+msgid "No software installed from this source"
+msgstr "ไม่มีซอฟต์แวร์ที่ติดตั้งจากแหล่งนี้"
+
+#: ../src/gs-sources-dialog.ui.h:6
+msgid "Installed from this Source"
+msgstr "ติดตั้งจากแหล่งนี้"
+
+#: ../src/gs-sources-dialog.ui.h:7
+msgid "Source Details"
+msgstr "รายละเอียดแหล่ง"
+
+#: ../src/gs-sources-dialog.ui.h:9
+msgid "Last Checked"
+msgstr "ตรวจสอบล่าสุด"
+
+#: ../src/gs-sources-dialog.ui.h:10
+msgid "Added"
+msgstr "วันที่เพิ่ม"
+
+#: ../src/gs-sources-dialog.ui.h:11
+msgid "Website"
+msgstr "เว็บไซต์"
+
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "หนึ่งดาว"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "สองดาว"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "สามดาว"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "สี่ดาว"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "ห้าดาว"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: ../src/gs-update-dialog.c:121
+msgid "No update description available."
+msgstr "ไม่มีรายละเอียดการปรับรุ่น"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: ../src/gs-update-dialog.c:215
+#, c-format
+msgid "Installed on %s"
+msgstr "ติดตั้งเมื่อ %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: ../src/gs-update-dialog.c:235
+msgid "Installed Updates"
+msgstr "รายการปรับรุ่นที่ติดตั้งแล้ว"
+
+#: ../src/gs-update-dialog.ui.h:2
+msgid "No updates have been installed on this system."
+msgstr "ไม่มีการติดตั้งรายการปรับรุ่นในระบบนี้"
+
+#: ../src/gs-update-monitor.c:89
+msgid "Security Updates Pending"
+msgstr "มีรายการปรับรุ่นด้านความปลอดภัยรออยู่"
+
+#: ../src/gs-update-monitor.c:90
+msgid "It is recommended that you install important updates now"
+msgstr "ขอแนะนำให้คุณติดตั้งรายการปรับรุ่นที่สำคัญเดี๋ยวนี้"
+
+#: ../src/gs-update-monitor.c:93
+msgid "Restart & Install"
+msgstr "เริ่มใหม่และติดตั้ง"
+
+#: ../src/gs-update-monitor.c:97
+msgid "Software Updates Available"
+msgstr "มีรายการปรับรุ่นซอฟต์แวร์"
+
+#: ../src/gs-update-monitor.c:98
+msgid "Important OS and application updates are ready to be installed"
+msgstr "การปรับรุ่นที่สำคัญของ OS และโปรแกรมต่างๆ พร้อมที่จะติดตั้งแล้ว"
+
+#: ../src/gs-update-monitor.c:101
+msgid "Not Now"
+msgstr "ไม่ตอนนี้"
+
+#: ../src/gs-update-monitor.c:102
+msgid "View"
+msgstr "ดู"
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: ../src/gs-update-monitor.c:234
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "มีรุ่นใหม่ของ %s ให้ติดตั้งได้"
+
+#. TRANSLATORS: this is a distro upgrade
+#: ../src/gs-update-monitor.c:238
+msgid "Software Upgrade Available"
+msgstr "มีรายการปรับรุ่นซอฟต์แวร์"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: ../src/gs-update-monitor.c:433
+msgid "Software Updates Failed"
+msgstr "ปรับรุ่นซอฟต์แวร์ไม่สำเร็จ"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:435
+msgid "An important OS update failed to be installed."
+msgstr "ติดตั้งรายการปรับรุ่นที่สำคัญของ OS ไม่สำเร็จ"
+
+#. TRANSLATORS: this is an expander title
+#: ../src/gs-update-monitor.c:437 ../src/gs-utils.c:209
+msgid "Show Details"
+msgstr "แสดงรายละเอียด"
+
+#. TRANSLATORS: title when we've done offline updates
+#: ../src/gs-update-monitor.c:452
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "ติดตั้งรายการปรับรุ่นซอฟต์แวร์แล้ว"
+
+#. TRANSLATORS: message when we've done offline updates
+#: ../src/gs-update-monitor.c:456
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "ติดตั้งรายการปรับรุ่นที่สำคัญของ OS แล้ว"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: ../src/gs-update-monitor.c:467
+msgctxt "updates"
+msgid "Review"
+msgstr "ทวนดู"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-update-monitor.c:542
+msgid "Detailed errors from the package manager follow:"
+msgstr "รายละเอียดข้อผิดพลาดจากโปรแกรมจัดการแพกเกจคือ:"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-update-monitor.c:603
+msgid "Failed To Update"
+msgstr "ปรับรุ่นไม่สำเร็จ"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-update-monitor.c:609
+msgid "The system was already up to date."
+msgstr "ระบบเป็นรุ่นใหม่ล่าสุดแล้ว"
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-update-monitor.c:614
+msgid "The update was cancelled."
+msgstr "การปรับรุ่นถูกยกเลิก"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-update-monitor.c:620
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"ต้องใช้การเชื่อมต่ออินเทอร์เน็ต แต่ไม่สามารถใช้ได้ "
+"กรุณาตรวจสอบให้แน่ใจว่าคุณมีการเข้าถึงอินเทอร์เน็ตแล้วลองใหม่"
+
+#. TRANSLATORS: if the package is not signed correctly
+#: ../src/gs-update-monitor.c:626
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"มีปัญหาด้านความปลอดภัยในแพกเกจปรับรุ่น "
+"กรุณาสอบถามรายละเอียดเพิ่มเติมจากผู้ให้บริการซอฟต์แวร์ของคุณ"
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-update-monitor.c:632
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "เนื้อที่ว่างในดิสก์ไม่เพียงพอ กรุณาคืนเนื้อที่ว่างแล้วลองใหม่"
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-update-monitor.c:637
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"ขออภัย: ติดตั้งแพกเกจปรับรุ่นไม่สำเร็จ กรุณารอการปรับรุ่นครั้งถัดไปแล้วลองใหม่ ถ้าปัญหายังคงอยู่ "
+"กรุณาติดต่อผู้ให้บริการซอฟต์แวร์ของคุณ"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: ../src/gs-upgrade-banner.c:86
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s มีให้ติดตั้งแล้ว"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: ../src/gs-upgrade-banner.c:96
+#, c-format
+msgid "Downloading %s %s"
+msgstr "กำลังดาวน์โหลด %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: ../src/gs-upgrade-banner.c:107
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s พร้อมสำหรับติดตั้งแล้ว"
+
+#. vim: set noexpandtab:
+#: ../src/gs-upgrade-banner.ui.h:1
+msgid "A major upgrade, with new features and added polish."
+msgstr "การปรับรุ่นใหญ่ พร้อมความสามารถใหม่และรายการปรับปรุงเพิ่มเติม"
+
+#: ../src/gs-upgrade-banner.ui.h:2
+msgid "_Learn More"
+msgstr "เ_รียนรู้เพิ่มเติม"
+
+#: ../src/gs-upgrade-banner.ui.h:3
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "ขอแนะนำให้คุณสำรองข้อมูลและแฟ้มต่างๆ ก่อนปรับรุ่น"
+
+#: ../src/gs-upgrade-banner.ui.h:4
+msgid "_Download"
+msgstr "_ดาวน์โหลด"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:140
+#, c-format
+msgid "%s is now installed"
+msgstr "%s ติดตั้งเสร็จแล้ว"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:144
+msgid "Launch"
+msgstr "เรียกทำงาน"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:176
+#, c-format
+msgid "Installation of %s failed."
+msgstr "ติดตั้ง %s ไม่สำเร็จ"
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:181
+#, c-format
+msgid "Removal of %s failed."
+msgstr "ถอดถอน %s ไม่สำเร็จ"
+
+#. TRANSLATORS: window title
+#: ../src/gs-utils.c:279
+msgid "Install Third-Party Software?"
+msgstr "ติดตั้งซอฟต์แวร์ของบุคคลที่สามหรือไม่?"
+
+#. TRANSLATORS: window title
+#: ../src/gs-utils.c:283
+msgid "Enable Third-Party Software Source?"
+msgstr "เปิดใช้แหล่งซอฟต์แวร์ของบุคคลที่สามหรือไม่?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#.
+#: ../src/gs-utils.c:301
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s ไม่ใช่ <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">ซอฟต์แวร์เสรีและโอเพนซอร์ส</a> และจัดเตรียมโดย “%s”"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software source name, e.g. fedora-optional
+#: ../src/gs-utils.c:311
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s จัดเตรียมโดย “%s”"
+
+#. TRANSLATORS: a software source is a repo
+#: ../src/gs-utils.c:321
+msgid "This software source must be enabled to continue installation."
+msgstr "แหล่งซอฟต์แวร์นี้ต้องเปิดใช้ก่อนที่จะติดตั้งต่อไป"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: ../src/gs-utils.c:331
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "อาจจะผิดกฎหมายที่จะติดตั้งหรือใช้ %s ในบางประเทศ"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: ../src/gs-utils.c:337
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "อาจจะผิดกฎหมายที่จะติดตั้งหรือใช้ตัวอ่าน-ลงรหัสนี้ในบางประเทศ"
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: ../src/gs-utils.c:344
+msgid "Don't Warn Again"
+msgstr "ไม่ต้องเตือนอีก"
+
+#. TRANSLATORS: button text
+#: ../src/gs-utils.c:353
+msgid "Enable and Install"
+msgstr "เปิดใช้และติดตั้ง"
+
+#. vim: set noexpandtab:
+#: ../src/gs-menus.ui.h:1
+msgid "_Software Sources"
+msgstr "แ_หล่งซอฟต์แวร์"
+
+#: ../src/gs-menus.ui.h:2
+msgid "_About"
+msgstr "เ_กี่ยวกับ"
+
+#: ../src/gs-menus.ui.h:3
+msgid "_Quit"
+msgstr "_ออก"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr "เพิ่ม ลบ หรือปรับรุ่นซอฟต์แวร์ในคอมพิวเตอร์นี้"
+
+#: ../src/org.gnome.Software.desktop.in.h:3
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"ปรับรุ่น;แหล่งซอฟต์แวร์;คลังแพกเกจ;ปรับแต่ง;ติดตั้ง;ถอดถอน;โปรแกรม;ซอฟต์แวร์;แอ็ป;ร้าน;"
+
+#. TRANSLATORS: this is the menu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "เสียง"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Menu subcategory of Audio"
+msgid "Editing"
+msgstr "การแก้ไข"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Menu subcategory of Audio"
+msgid "Databases"
+msgstr "ฐานข้อมูล"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Menu subcategory of Audio"
+msgid "Disc Burning"
+msgstr "การเขียนแผ่น"
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Menu subcategory of Audio"
+msgid "Ham Radio"
+msgstr "วิทยุสมัครเล่น"
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Menu subcategory of Audio"
+msgid "MIDI"
+msgstr "MIDI"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Menu subcategory of Audio"
+msgid "Mixer"
+msgstr "เครื่องมือปรับเสียง"
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Menu subcategory of Audio"
+msgid "Music"
+msgstr "ดนตรี"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Menu subcategory of Audio"
+msgid "Players"
+msgstr "เครื่องมือเล่น"
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Menu subcategory of Audio"
+msgid "Recorders"
+msgstr "เครื่องมืออัด"
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Menu subcategory of Audio"
+msgid "Sequencers"
+msgstr "เครื่องเรียบเรียงดนตรี"
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Menu subcategory of Audio"
+msgid "Tuners"
+msgstr "เครื่องมือตั้งเสียง"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr "เครื่องมือพัฒนา"
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Menu subcategory of Development Tools"
+msgid "Building"
+msgstr "การประกอบสร้าง"
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Menu subcategory of Development Tools"
+msgid "Databases"
+msgstr "ฐานข้อมูล"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Menu subcategory of Development Tools"
+msgid "Debuggers"
+msgstr "เครื่องมือดีบั๊ก"
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Menu subcategory of Development Tools"
+msgid "GUI Designers"
+msgstr "เครื่องมือออกแบบ GUI"
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Menu subcategory of Development Tools"
+msgid "IDE"
+msgstr "ชุดเครื่องมือพัฒนาเบ็ดเสร็จ"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Menu subcategory of Development Tools"
+msgid "Profiling"
+msgstr "เครื่องมือวัดประสิทธิภาพ"
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Menu subcategory of Development Tools"
+msgid "Project Management"
+msgstr "การจัดการโครงการ"
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Menu subcategory of Development Tools"
+msgid "Revision Control"
+msgstr "การควบคุมฉบับแก้ไข"
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Menu subcategory of Development Tools"
+msgid "Translation"
+msgstr "การแปล"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Menu subcategory of Development Tools"
+msgid "Web Development"
+msgstr "การพัฒนาเว็บ"
+
+#. TRANSLATORS: this is the menu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "การศึกษา"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Menu subcategory of Education"
+msgid "Art"
+msgstr "ศิลปะ"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Menu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr "ปัญญาประดิษฐ์"
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Menu subcategory of Education"
+msgid "Astronomy"
+msgstr "ดาราศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Menu subcategory of Education"
+msgid "Biology"
+msgstr "ชีววิทยา"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Menu subcategory of Education"
+msgid "Chemistry"
+msgstr "เคมี"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Menu subcategory of Education"
+msgid "Computer Science"
+msgstr "วิทยาการคอมพิวเตอร์"
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Menu subcategory of Education"
+msgid "Construction"
+msgstr "การก่อสร้าง"
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Menu subcategory of Education"
+msgid "Data Visualization"
+msgstr "การแสดงภาพข้อมูล"
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Menu subcategory of Education"
+msgid "Economy"
+msgstr "เศรษฐกิจ"
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Menu subcategory of Education"
+msgid "Electricity"
+msgstr "ไฟฟ้า"
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Menu subcategory of Education"
+msgid "Electronics"
+msgstr "อิเล็กทรอนิกส์"
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Menu subcategory of Education"
+msgid "Engineering"
+msgstr "วิศวกรรมศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Menu subcategory of Education"
+msgid "Geography"
+msgstr "ภูมิศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Menu subcategory of Education"
+msgid "Geology"
+msgstr "ธรณีวิทยา"
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Menu subcategory of Education"
+msgid "Geoscience"
+msgstr "ธรณีศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Menu subcategory of Education"
+msgid "History"
+msgstr "ประวัติศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Menu subcategory of Education"
+msgid "Humanities"
+msgstr "มนุษยศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Menu subcategory of Education"
+msgid "Image Processing"
+msgstr "การประมวลผลภาพ"
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Menu subcategory of Education"
+msgid "Languages"
+msgstr "ภาษา"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Menu subcategory of Education"
+msgid "Literature"
+msgstr "วรรณกรรม"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Menu subcategory of Education"
+msgid "Maps"
+msgstr "แผนที่"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Menu subcategory of Education"
+msgid "Math"
+msgstr "คณิตศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Menu subcategory of Education"
+msgid "Medical"
+msgstr "การแพทย์"
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Menu subcategory of Education"
+msgid "Music"
+msgstr "ดนตรี"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Menu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr "การวิเคราะห์เชิงตัวเลข"
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Menu subcategory of Education"
+msgid "Parallel Computing"
+msgstr "การคำนวณแบบขนาน"
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Menu subcategory of Education"
+msgid "Physics"
+msgstr "ฟิสิกส์"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Menu subcategory of Education"
+msgid "Robotics"
+msgstr "วิทยาการหุ่นยนต์"
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Menu subcategory of Education"
+msgid "Spirituality"
+msgstr "จิตวิญญาณ"
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Menu subcategory of Education"
+msgid "Sports"
+msgstr "กีฬา"
+
+#. TRANSLATORS: this is the menu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr "เกม"
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Menu subcategory of Games"
+msgid "Action"
+msgstr "แอคชัน"
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Menu subcategory of Games"
+msgid "Adventure"
+msgstr "ผจญภัย"
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Menu subcategory of Games"
+msgid "Arcade"
+msgstr "เกมตู้"
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Menu subcategory of Games"
+msgid "Blocks"
+msgstr "บล็อค"
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Menu subcategory of Games"
+msgid "Board"
+msgstr "หมากกระดาน"
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Menu subcategory of Games"
+msgid "Card"
+msgstr "ไพ่"
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Menu subcategory of Games"
+msgid "Emulators"
+msgstr "เลียนแบบ"
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Menu subcategory of Games"
+msgid "Kids"
+msgstr "เด็ก"
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Menu subcategory of Games"
+msgid "Logic"
+msgstr "ตรรกะ"
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Menu subcategory of Games"
+msgid "Role Playing"
+msgstr "เล่นบท"
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Menu subcategory of Games"
+msgid "Shooter"
+msgstr "ยิง"
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Menu subcategory of Games"
+msgid "Simulation"
+msgstr "จำลอง"
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Menu subcategory of Games"
+msgid "Sports"
+msgstr "กีฬา"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Menu subcategory of Games"
+msgid "Strategy"
+msgstr "แผนการ"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr "กราฟิกส์"
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Menu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr "กราฟิกส์ 2 มิติ"
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Menu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr "กราฟิกส์ 3 มิติ"
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Menu subcategory of Graphics"
+msgid "OCR"
+msgstr "เครื่องอ่านอักขระด้วยแสง"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Menu subcategory of Graphics"
+msgid "Photography"
+msgstr "การถ่ายภาพ"
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Menu subcategory of Graphics"
+msgid "Publishing"
+msgstr "การพิมพ์"
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Menu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr "กราฟิกส์แบบแรสเตอร์"
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Menu subcategory of Graphics"
+msgid "Scanning"
+msgstr "การสแกน"
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Menu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr "กราฟิกส์แบบเวกเตอร์"
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Menu subcategory of Graphics"
+msgid "Viewer"
+msgstr "ดูภาพ"
+
+#. TRANSLATORS: this is the menu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "อินเทอร์เน็ต"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Menu subcategory of Internet"
+msgid "Chat"
+msgstr "สนทนา"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Menu subcategory of Internet"
+msgid "Dialup"
+msgstr "เชื่อมต่อโมเด็ม"
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Menu subcategory of Internet"
+msgid "Email"
+msgstr "อีเมล"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Menu subcategory of Internet"
+msgid "Feed"
+msgstr "ข่าวป้อน"
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Menu subcategory of Internet"
+msgid "File Transfer"
+msgstr "ถ่ายโอนแฟ้ม"
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Menu subcategory of Internet"
+msgid "Ham Radio"
+msgstr "วิทยุสมัครเล่น"
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Menu subcategory of Internet"
+msgid "Instant Messaging"
+msgstr "ข้อความทันใจ"
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Menu subcategory of Internet"
+msgid "IRC Clients"
+msgstr "ลูกข่าย IRC"
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Menu subcategory of Internet"
+msgid "Monitor"
+msgstr "เฝ้าสังเกต"
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Menu subcategory of Internet"
+msgid "News"
+msgstr "ข่าว"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Menu subcategory of Internet"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Menu subcategory of Internet"
+msgid "Remote Access"
+msgstr "การเข้าถึงระยะไกล"
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Menu subcategory of Internet"
+msgid "Telephony"
+msgstr "ระบบโทรศัพท์"
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Menu subcategory of Internet"
+msgid "Video Conference"
+msgstr "ประชุมทางวีดิทัศน์"
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Menu subcategory of Internet"
+msgid "Web Browser"
+msgstr "เว็บเบราว์เซอร์"
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Menu subcategory of Internet"
+msgid "Web Development"
+msgstr "การพัฒนาเว็บ"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "สำนักงาน"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Menu subcategory of Office"
+msgid "Calendar"
+msgstr "ปฏิทิน"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Menu subcategory of Office"
+msgid "Chart"
+msgstr "แผนภูมิ"
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Menu subcategory of Office"
+msgid "Contact Management"
+msgstr "การจัดการสมุดผู้ติดต่อ"
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Menu subcategory of Office"
+msgid "Database"
+msgstr "ฐานข้อมูล"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Menu subcategory of Office"
+msgid "Dictionary"
+msgstr "พจนานุกรม"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Menu subcategory of Office"
+msgid "Email"
+msgstr "อีเมล"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Menu subcategory of Office"
+msgid "Finance"
+msgstr "การเงิน"
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Menu subcategory of Office"
+msgid "Flow Chart"
+msgstr "ผังงาน"
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Menu subcategory of Office"
+msgid "PDA"
+msgstr "PDA"
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Menu subcategory of Office"
+msgid "Photography"
+msgstr "การถ่ายภาพ"
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Menu subcategory of Office"
+msgid "Presentation"
+msgstr "การนำเสนอ"
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Menu subcategory of Office"
+msgid "Project Management"
+msgstr "การจัดการโครงการ"
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Menu subcategory of Office"
+msgid "Publishing"
+msgstr "การพิมพ์"
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Menu subcategory of Office"
+msgid "Spreadsheet"
+msgstr "ตารางคำนวณ"
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Menu subcategory of Office"
+msgid "Viewer"
+msgstr "โปรแกรมดูเอกสาร"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Menu subcategory of Office"
+msgid "Word Processor"
+msgstr "โปรแกรมประมวลคำ"
+
+#. TRANSLATORS: this is the menu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "วิทยาศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Menu subcategory of Science"
+msgid "Art"
+msgstr "ศิลปะ"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Menu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr "ปัญญาประดิษฐ์"
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Menu subcategory of Science"
+msgid "Astronomy"
+msgstr "ดาราศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Menu subcategory of Science"
+msgid "Biology"
+msgstr "ชีววิทยา"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Menu subcategory of Science"
+msgid "Chemistry"
+msgstr "เคมี"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Menu subcategory of Science"
+msgid "Computer Science"
+msgstr "วิทยาการคอมพิวเตอร์"
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Menu subcategory of Science"
+msgid "Construction"
+msgstr "การก่อสร้าง"
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Menu subcategory of Science"
+msgid "Data Visualization"
+msgstr "การแสดงภาพข้อมูล"
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Menu subcategory of Science"
+msgid "Economy"
+msgstr "เศรษฐกิจ"
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Menu subcategory of Science"
+msgid "Electricity"
+msgstr "ไฟฟ้า"
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Menu subcategory of Science"
+msgid "Electronics"
+msgstr "อิเล็กทรอนิกส์"
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Menu subcategory of Science"
+msgid "Engineering"
+msgstr "วิศวกรรมศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Menu subcategory of Science"
+msgid "Geography"
+msgstr "ภูมิศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Menu subcategory of Science"
+msgid "Geology"
+msgstr "ธรณีวิทยา"
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Menu subcategory of Science"
+msgid "Geoscience"
+msgstr "ธรณีศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Menu subcategory of Science"
+msgid "History"
+msgstr "ประวัติศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Menu subcategory of Science"
+msgid "Humanities"
+msgstr "มนุษยศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Menu subcategory of Science"
+msgid "Image Processing"
+msgstr "การประมวลผลภาพ"
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Menu subcategory of Science"
+msgid "Languages"
+msgstr "ภาษา"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Menu subcategory of Science"
+msgid "Literature"
+msgstr "วรรณกรรม"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Menu subcategory of Science"
+msgid "Maps"
+msgstr "แผนที่"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Menu subcategory of Science"
+msgid "Math"
+msgstr "คณิตศาสตร์"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Menu subcategory of Science"
+msgid "Medical"
+msgstr "การแพทย์"
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Menu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr "การวิเคราะห์เชิงตัวเลข"
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Menu subcategory of Science"
+msgid "Parallel Computing"
+msgstr "การคำนวณแบบขนาน"
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Menu subcategory of Science"
+msgid "Physics"
+msgstr "ฟิสิกส์"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Menu subcategory of Science"
+msgid "Robotics"
+msgstr "วิทยาการหุ่นยนต์"
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Menu subcategory of Science"
+msgid "Spirituality"
+msgstr "จิตวิญญาณ"
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Menu subcategory of Science"
+msgid "Sports"
+msgstr "กีฬา"
+
+#. TRANSLATORS: this is the menu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "ระบบ"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Menu subcategory of System"
+msgid "Emulator"
+msgstr "โปรแกรมเลียนแบบ"
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Menu subcategory of System"
+msgid "File Manager"
+msgstr "โปรแกรมจัดการแฟ้ม"
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Menu subcategory of System"
+msgid "File System"
+msgstr "ระบบแฟ้ม"
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Menu subcategory of System"
+msgid "File Tools"
+msgstr "เครื่องมือแฟ้ม"
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Menu subcategory of System"
+msgid "Monitor"
+msgstr "เฝ้าสังเกต"
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Menu subcategory of System"
+msgid "Security"
+msgstr "การรักษาความปลอดภัย"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Menu subcategory of System"
+msgid "Terminal Emulator"
+msgstr "เทอร์มินัลเทียม"
+
+#. TRANSLATORS: this is the menu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr "อรรถประโยชน์"
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Menu subcategory of Utilities"
+msgid "Accessibility"
+msgstr "สิ่งอำนวยความสะดวก"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Menu subcategory of Utilities"
+msgid "Archiving"
+msgstr "การจัดเก็บแฟ้ม"
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Menu subcategory of Utilities"
+msgid "Calculator"
+msgstr "เครื่องคิดเลข"
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Menu subcategory of Utilities"
+msgid "Clock"
+msgstr "นาฬิกา"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Menu subcategory of Utilities"
+msgid "Compression"
+msgstr "การบีบอัด"
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Menu subcategory of Utilities"
+msgid "File Tools"
+msgstr "เครื่องมือแฟ้ม"
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Menu subcategory of Utilities"
+msgid "Maps"
+msgstr "แผนที่"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Menu subcategory of Utilities"
+msgid "Spirituality"
+msgstr "จิตวิญญาณ"
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Menu subcategory of Utilities"
+msgid "Telephony Tools"
+msgstr "เครื่องมือระบบโทรศัพท์"
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Menu subcategory of Utilities"
+msgid "Text Editor"
+msgstr "เครื่องมือแก้ไขข้อความ"
+
+#. TRANSLATORS: this is the menu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "วีดิทัศน์"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Menu subcategory of Video"
+msgid "Editing"
+msgstr "การแก้ไข"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Menu subcategory of Video"
+msgid "Database"
+msgstr "ฐานข้อมูล"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Menu subcategory of Video"
+msgid "Disc Burning"
+msgstr "เขียนแผ่น"
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Menu subcategory of Video"
+msgid "Players"
+msgstr "เครื่องมือเล่น"
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Menu subcategory of Video"
+msgid "Recorders"
+msgstr "เครื่องมืออัด"
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Menu subcategory of Video"
+msgid "TV"
+msgstr "โทรทัศน์"
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Menu subcategory of Add-ons"
+msgid "Fonts"
+msgstr "แบบอักษร"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Menu subcategory of Add-ons"
+msgid "Codecs"
+msgstr "ตัวอ่าน-ลงรหัส"
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Menu subcategory of Add-ons"
+msgid "Input Sources"
+msgstr "แหล่งป้อนข้อความ"
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Menu subcategory of Add-ons"
+msgid "Language Packs"
+msgstr "ชุดภาษา"
+
+#: ../src/plugins/menu-spec-common.c:215
+msgctxt "Menu subcategory of Add-ons"
+msgid "Shell Extensions"
+msgstr "ส่วนขยายของเชลล์"
+
+#: ../src/plugins/menu-spec-common.c:216
+msgctxt "Menu subcategory of Add-ons"
+msgid "Localization"
+msgstr "การปรับให้เข้ากับท้องถิ่น"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "ไม่พบข้อมูล AppStream"
+
+#~ msgid "Update"
+#~ msgstr "ปรับรุ่น"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "การปรับรุ่นครั้งก่อนยังไม่แล้วเสร็จ"
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "แพกเกจปรับรุ่นไม่สามารถติดตั้งได้ ซึ่งมักจะเกิดจากปัญหาของตัวแพกเกจปรับรุ่นเอง "
+#~ "กรุณารอการปรับรุ่นครั้งถัดไปแล้วลองใหม่"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "โปรแกรมผ่านอินเทอร์เน็ตเท่านั้น"
+
+#~ msgid "Checking for updates…"
+#~ msgstr "กำลังตรวจสอบการปรับรุ่น…"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "เข้าโหมดบริการ GApplication"
+
+#~ msgid "No software installed"
+#~ msgstr "ไม่มีซอฟต์แวร์ที่ติดตั้งไว้"
+
+#~ msgid "Updates"
+#~ msgstr "มีรุ่นใหม่"
+
+#~ msgid "Network access was required but not available."
+#~ msgstr "ต้องใช้การเชื่อมต่อเครือข่ายแต่ไม่สามารถเชื่อมต่อได้"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "รายการปรับรุ่นไม่ได้เซ็นกำกับอย่างถูกต้อง"
+
+#~ msgid "The update could not be completed."
+#~ msgstr "ไม่สามารถปรับรุ่นจนเสร็จสมบูรณ์ได้"
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "มีการร้องขอการปรับรุ่นแบบออฟไลน์ แต่ไม่มีแพกเกจใดที่ต้องปรับรุ่น"
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "ไม่เหลือพื้นที่ว่างในไดรว์"
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "รายการปรับรุ่นไม่สามารถติดตั้งได้อย่างถูกต้อง"
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "ปรับรุ่นแบบออฟไลน์ไม่สำเร็จในแบบที่ไม่คาดหมาย"
+
+#~ msgid "OK"
+#~ msgstr "ตกลง"
+
+#~ msgid "No sources found."
+#~ msgstr "ไม่พบแหล่ง"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "มีโปรแกรม %i รายการ และส่วนเสริม %i รายการติดตั้งไว้"
+
+#~ msgid "You're About to Install Non-Free Software"
+#~ msgstr "คุณกำลังติดตั้งซอฟต์แวร์ที่ไม่ใช่ซอฟต์แวร์เสรี"
+
+#~ msgid "%s is not %sfree and open source software%s."
+#~ msgstr "%s ไม่ใช่ %sซอฟต์แวร์เสรีและโอเพนซอร์ส%s"
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr "ขึ้นอยู่กับประเทศที่คุณอาศัยอยู่ การติดตั้งอาจทำให้คุณต้องรับผิดชอบการฟ้องร้องคดีอาญา"
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr "ถ้าคุณไม่แน่ใจเกี่ยวกับเรื่องนี้ คุณก็ควรขอคำปรึกษาทางกฎหมาย"
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "คุณต้องการเปิดใช้หรือไม่?"
+
+#~ msgid "Enable"
+#~ msgstr "เปิดใช้"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "ตั้งระดับการดีบั๊กตามที่ระบุ"
+
+#~ msgid "Picks"
+#~ msgstr "คัดสรร"
+
+#~ msgctxt "license"
+#~ msgid "Complicated!"
+#~ msgstr "ซับซ้อน!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "ซอฟต์แวร์ที่ปรับรุ่นล่าสุด"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "วิทยุสมัครเล่น"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "การพัฒนาเว็บ"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "เครื่องมือแฟ้ม"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "แผนที่"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "จิตวิญญาณ"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "แบบอักษร"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "ตัวอ่าน-ลงรหัส"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "แหล่งป้อนข้อความ"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "ชุดภาษา"
+
+#~ msgid "_Pending"
+#~ msgstr "_รอติดตั้ง"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "ฐานข้อมูล"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "30 มกราคม 2557"
+
+#~ msgid "Done"
+#~ msgstr "เสร็จสิ้น"
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "_ติดตั้งอยู่ (%d)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "_มีรุ่นใหม่ (%d)"
+
+#~ msgid "Goals:"
+#~ msgstr "วัตถุประสงค์:"
+
+#~ msgid ""
+#~ "<li>View installed applications</li> <li>Remove installed applications</"
+#~ "li> <li>View available application updates</li> <li>Install available "
+#~ "updates</li> <li>Find new applications</li> <li>Install new applications</"
+#~ "li> <li>Find an application to handle a specific type of file</li> "
+#~ "<li>Installed apps and updates should be available when offline</li>"
+#~ msgstr ""
+#~ "<li>ดูโปรแกรมที่ติดตั้งแล้ว</li> <li>ถอดถอนโปรแกรมที่ติดตั้งแล้ว</li> "
+#~ "<li>ดูโปรแกรมที่สามารถปรับรุ่นได้</li> <li>ติดตั้งการปรับรุ่นที่มีให้</li> "
+#~ "<li>หาโปรแกรมใหม่</li> <li>ติดตั้งโปรแกรมใหม่</li> "
+#~ "<li>หาโปรแกรมที่จะจัดการชนิดเฉพาะของแฟ้ม</li> "
+#~ "<li>ติดตั้งโปรแกรมและปรับรุ่นที่มีให้เมื่อออฟไลน์</li>"
+
+#~ msgid "New"
+#~ msgstr "ใหม่"
+
+#~ msgid "Related"
+#~ msgstr "ที่เกี่ยวข้อง"
+
+#~ msgid "Update All"
+#~ msgstr "ปรับรุ่นทั้งหมด"
+
+#~ msgid "Popular"
+#~ msgstr "นิยม"
+
+#~ msgid "Description"
+#~ msgstr "คำบรรยาย"
+
+#~ msgid ""
+#~ "Shotwell is a digital photo organiser that runs on Linux. It is the "
+#~ "default photo manager in Ubuntu and Fedora."
+#~ msgstr ""
+#~ "Shotwell เป็นโปรแกรมจัดการภาพถ่ายดิจิทัลที่ทำงานบนลินุกซ์ "
+#~ "และเป็นโปรแกรมจัดการภาพถ่ายมาตรฐานของอูบุนตูและฟีดอรา"
+
+#~ msgid "More ▾"
+#~ msgstr "เพิ่มเติม ▾"
+
+#~ msgid "Waiting for package manager..."
+#~ msgstr "กำลังรอโปรแกรมจัดการแพกเกจ..."
+
+#~ msgid "Loading list of packages..."
+#~ msgstr "กำลังโหลดรายชื่อแพกเกจ..."
+
+#~ msgid "Querying..."
+#~ msgstr "กำลังสอบถาม..."
+
+#~ msgid "Setting up..."
+#~ msgstr "กำลังตั้งค่า..."
+
+#~ msgid "Requires restart"
+#~ msgstr "ต้องเริ่มเปิดเครื่องใหม่"
+
+#~ msgid ""
+#~ "The author of this software has not included a 'Description' in the "
+#~ "desktop file..."
+#~ msgstr "ผู้เขียนซอฟต์แวร์นี้ไม่ได้ให้ 'Description' (คำบรรยาย) ไว้ในแฟ้มเดสก์ท็อป..."
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..db91cf2
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,5606 @@
+# Turkish translation for gnome-software.
+# Copyright (C) 2014-2019 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Gökhan Gurbetoğlu <ggurbet@gmail.com>, 2014.
+# Necdet Yücel <necdetyucel@gmail.com>, 2015.
+# İbrahim Aydın <brhm.1995@hotmail.com>, 2017.
+# Yunus Can Kapucu <yunus_can.kapucu@hotmail.com>, 2017.
+# Furkan Ahmet Kara <furkanahmetkara.fk@gmail.com>, 2018.
+# Muhammet Kara <muhammetk@gmail.com>, 2014-2018.
+# Sabri Ünal <libreajans@gmail.com>, 2014, 2019.
+# Ahmet Elgun <ahmetelgn@gmail.com>, 2020.
+# Emin Tufan Çetin <etcetin@gmail.com>, 2017-2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-11 11:39+0000\n"
+"PO-Revision-Date: 2020-09-12 08:41+0300\n"
+"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
+"Language-Team: Turkish <gnome-turk@gnome.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.2.3\n"
+"X-POOTLE-MTIME: 1433975102.000000\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME Yazılımlar"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME için uygulama yöneticisi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Yazılımlar, yeni uygulamalar ve sistem uzantılarını bulup kurmanızı ve "
+"kurulu uygulamaları kaldırmanızı sağlar."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME Yazılımlar; seçkin ve gözde uygulamaları, her uygulama için anlaşılır "
+"açıklama ve çoklu ekran görüntüleriyle beğeninize sunar. Uygulamalar, "
+"kategori listesinde gezinerek veya arama yoluyla bulunabilir. Ayrıca çevrim "
+"dışı bir güncellemeyi kullanarak sisteminizi güncellemenize olanak tanır."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Genel bakış bölmesi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Ayrıntılar bölmesi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Kurulan bölmesi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Güncellemeler bölmesi"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Güncelleme ayrıntıları"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1524
+msgid "The GNOME Project"
+msgstr "GNOME Projesi"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Appstream dosyasını sistem konumuna kur"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Appstream dosyası sistem konumuna kuruluyor"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Uyumlu projeler listesi"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Bu; GNOME, KDE ve XFCE gibi, göstermemiz gereken uyumlu projelerin "
+"listesidir."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "GNOME Yazılımlar’da güncellemelerin ve yükseltmelerin yönetilmesi"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Eğer devre dışıysa, GNOME Yazılımlar güncellemeler bölmesini gizleyecek ve "
+"herhangi bir kendiliğinden güncelleme eylemi gerçekleştirmeyecek veya "
+"yükseltmeler için harekete geçilmeyecek."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Güncellemeleri kendiliğinden indir ve kur"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Eğer etkinse, GNOME Yazılımlar güncellemeleri arka planda kendiliğinden "
+"indirir, ayrıca yeniden başlatma gerektirmeyenleri kurar."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Yazılım arka planda güncellendiğinde kullanıcıyı bilgilendir"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Eğer etkinse; GNOME Yazılımlar, kullanıcı uzaktayken güncelleme "
+"gerçekleşirse kullanıcıyı bilgilendirir."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Ölçülü bağlantıda kendiliğinden yenilemenin olup olmadığı"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Eğer etkinse, GNOME Yazılımlar ölçülü bağlantı kullanılsa bile arka planda "
+"kendini yenileyecek (kullanıcı için ücrete neden olsa da sonunda bazı üst "
+"verileri indirecek, güncellemeleri denetleyecek vb.)"
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "GNOME Yazılımlar’ın ilk kez çalıştırılışı olup olmadığı"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Uygulamaların yanında yıldızlı puanlamaları göster"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Uygulamaları uzak depo için öntanımlı dala göre süz"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Özgür olmayan uygulamalar kurulmadan önce bir uyarı penceresi gösterir"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Özgür olmayan uygulamalar kurulduğunda, bir uyarı penceresi gösterilebilir. "
+"Bu, o iletişim penceresinin baskılanıp baskılanmayacağını denetler."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Gözde uygulamalar listesi"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Sistem tarafından tanımlananları geçersiz kılan, kullanılacak uygulamalar "
+"listesi."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Son güncelleme denetiminin zaman damgası"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Son yükseltme bildirimi zaman damgası"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Güncellemeden sonra temizlenmiş ilk güvenlik güncellemesinin zaman damgası"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Son güncelleme zaman damgası"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Sistemin çevrim içi olduğu ve herhangi bir güncelleme aldığı son zaman "
+"damgası"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Kaynak ekran görüntüsünü doğrulamak için saniye türünden yaş hala geçerlidir"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Daha büyük sayılar seçmek uzak sunucuya giden tur sayısını azaltır ama ekran "
+"görüntülerindeki güncellemeleri kullanıcının görmesi daha uzun sürebilir. "
+"Değeri 0 seçmek eğer görüntü zaten önbellekteyse sunucunun hiçbir zaman "
+"denetlenmeyeceği anlamına gelir."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Uygulama incelemeleri için kullanılacak sunucu"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "İncelemeler için gereken en düşük karma puanı"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Bu sayıdan daha az karması olan incelemeler gösterilmeyecek."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Üçüncü taraf olarak düşünülmemesi gereken resmi depolar listesi"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Özgür yazılım olarak düşünülmemesi gereken resmi depolar listesi"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Bir uygulama özgür yazılım olarak anıldığında kullanılacak lisans adresi"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Mümkün olduğunda yığın uygulamaları sistemdeki tüm kullanıcılar için kur"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Yazılım Depoları penceresine erişme izni ver"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Dağıtım öncesi güncellemeleri sağla"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Uygulamanın özgür olmadığını kullanıcıya bildiren bazı ögeler göster"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Özgür olmayan yazılım depolarını kurmak için hatırlatıcıyı göster"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Kurulan uygulamalar listesinde uygulamalar için kurulu boyutu göster"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://tr.wikipedia.org/wiki/Sahipli_yazılım'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Özgür olmayan ve sahipli yazılımı açıklayan URI"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Uygulama-bilgisi klasörüne indirilecek appstream dosyalarına işaret eden "
+"URL’lerin listesi"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"AppStream dosyalarını tüm kullanıcılar için sistem geneli bir konuma kur"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "GNOME Kabuğu eklentileri deposunu etkinleştir"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "Giriş için kullanılan gnome-online-account kimliğini depolayan dizge"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Yazılım Kur"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Seçili yazılımı sisteme kur"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Tümünü Seç"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Hiçbirini Seçme"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Yazılım Depoları"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Güncelleme Seçenekleri"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Yazılımlar"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Geri git"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Keşfet"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "K_uruldu"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Güncellemeler"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Ara"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Kaynak"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Yazılım Depoları"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Diski İncele"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Ağ Ayarları"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Yeniden Başlat"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Daha Çok Bilgi"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Kendiliğinden Güncellemeler Duraklatıldı"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "_Daha Çoğunu Öğren"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Yerel dosya"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Paket"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Beklemede"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Kuruldu"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Kuruluyor"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Kaldırılıyor"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Başlangıç kipi: ‘updates’ (güncellemeler), ‘updated’ (güncellendi), "
+"‘installed’ (kuruldu) ya da ‘overview’ (genel görünüm)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "KİP"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Uygulamalarda ara"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "ARA"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Uygulama ayrıntılarını göster (uygulama kimliğini kullanarak)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "Kimlik"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Uygulama ayrıntılarını göster (paket adını kullanarak)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKTADI"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Uygulama kur (uygulama kimliğini kullanarak)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Yerel paket dosyası aç"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "DOSYAADI"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Bu eylem için beklenen etkileşim türü: ‘none’ (hiçbiri), ‘notify’ (bildir), "
+"veya ‘full’ (dolu)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Ayrıntılı hata ayıklama bilgilerini göster"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Bekleyen güncellemeleri arka planda kurar"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Güncelleme seçeneklerini göster"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Çalışan oluşumdan çık"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream yerine yerel dosya kaynaklarını yeğle"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Sürüm numarasını göster"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Muhammet Kara <muhammetk@gmail.com>\n"
+"Emin Tufan Çetin <etcetin@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Yazılımlar Hakkında"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Sisteminizdeki yazılımları yönetmenin güzel bir yolu."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Üzgünüz! Bu uygulama için ayrıntı yok."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Web sitesini ziyaret et"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Kur…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "İptal"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Kur"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Güncelle"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Kaldır"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Aygıt güncelleme sırasında kullanılamaz."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Ek yazı tipleri gerektiriyor"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "%s (%s etki alanı) giriş gerektiriyor"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Giriş Gerekiyor"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_İptal"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Giriş"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Kullanıcı"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Parola"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Diğer"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Tümü"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Vitrin"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s Vitrini"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Puanlama"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Ad"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Göster"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Alt kategoriler süzgeç menüsü"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sırala"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Alt kategoriler sıralama menüsü"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "1 ile %u arasında bir sayı girin: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Bir uygulama seç:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "İS güncellemeleri kuruldu"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Son olarak kurulan güncellemeler gözden geçirme için uygun"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s şimdi kuruldu"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Değişikliklerin etkili olması için yeniden başlatmanız gerekiyor."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Uygulama kullanıma hazır."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Yeniden Başlat"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Başlat"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Üçüncü Taraf Yazılım Kurulsun mu?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Üçüncü Taraf Yazılım Deposu Etkinleştirilsin mi?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s, <a href=\"https://tr.wikipedia.org/wiki/"
+"Özgür_ve_açık_kaynak_kodlu_yazılım\">özgür ve açık kaynak kodlu yazılım</a> "
+"değildir, “%s” tarafından sağlanır."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s, “%s” tarafından sağlanıyor."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Kuruluma devam etmek için bu yazılım deposu etkinleştirilmelidir."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr ""
+"%s yazılımını kurmak ya da kullanmak, bazı ülkelerde yasa dışı olabilir."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Bu kod çözücüyü kurmak ya da kullanmak, bazı ülkelerde yasa dışı olabilir."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Bir Daha Uyarma"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Etkinleştir ve Kur"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Paket yöneticisinden gelen hata ayrıntıları:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Ayrıntılar"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Güncellemeler kuruldu"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Bunların etkili olması için yeniden başlatmanız gerekiyor."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Şimdi Değil"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Çizgi dizisi şiddeti yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Çizgi karakterler güvensiz durumlarda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Çizgi karakterler saldırgan çatışma halinde"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Çizgi karakterlerin dahil olduğu görsel şiddet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Fantezi şiddeti yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr ""
+"Güvensiz durumlardaki karakterler gerçeklikten kolayca ayırt edilebilir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr ""
+"Agresif çatışma içindeki karakterler gerçeklikten kolayca ayırt edilebilir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Gerçeklikten kolayca ayırt edilebilen canlı şiddet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Gerçekçi şiddet yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Hafif gerçekçi karakterler güvenli olmayan durumlarda"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Agresif çatışma içindeki gerçekçi karakterlerin betimlemesi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Gerçekçi karakterleri ilgilendiren canlı şiddet"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Kan dökme yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Gerçekçi olmayan kan dökme"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Gerçekçi kan dökme"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Kan dökme betimlemeleri ve vücut parçalarının sakatlanması"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Cinsel şiddet yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Tecavüz veya diğer şiddetli cinsel davranış"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Alkole atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Alkollü içeceklere atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Alkollü içeceklerin kullanımı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Yasadışı ilaçlara atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Yasadışı ilaçlara atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Yasadışı ilaçların kullanımı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Tütün ürünlerine atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Tütün ürünlerine atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Tütün ürünlerinin kullanımı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Herhangi biçimde çıplaklık yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Kısa sanatsal çıplaklık"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Uzun çıplaklık"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Cinsel doğaya atıf veya betimleme yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Kışkırtıcı atıflar veya betimlemeler"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Cinsel atıflar veya betimlemeler"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Canlı cinsel davranış"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Herhangi biçimde küfür yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Hafif veya sık olmayan küfür kullanımı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Orta kullanımlı küfür"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Şiddetli veya sık küfür kullanımı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Uygunsuz mizah yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Kaba mizah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Kaba veya banyo mizahı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Olgun veya cinsel mizah"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Herhangi biçimde ayrımcı dil yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Belirli bir insan kümesine karşı olumsuzluk"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Duygusal zarara neden olmaya tasarlanmış ayrımcılık"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "Cinsiyet, cinsellik, ırk veya din tabanlı açık ayrımcılık"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Herhangi biçimde reklam yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Ürün yerleştirme"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Belirli markalara veya ticari markalı ürünlere açık atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Kullanıcılar belirli gerçek dünya ögelerini satın almaya özendirilir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Herhangi biçimde kumar yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr ""
+"Belirteç veya kontör kullanarak rastlantısal etkinlikler üzerinde kumar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "“Oyun” parası kullanarak kumar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Gerçek para kullanarak kumar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Para harcama yeteneği yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Kullanıcılar gerçek para bağışlamaya özendirilir"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Uygulama içi gerçek para harcama yeteneği"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Diğer kullanıcılarla sohbet etme yolu yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Sohbet işlevi olmadan kullanıcıdan kullanıcıya etkileşimler"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Kullanıcılar arasında denetlenen konuşma işlevi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Kullanıcılar arasında denetlenmeyen konuşma işlevi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Diğer kullanıcılarla konuşma yolu yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+"Kullanıcılar arasında denetlenmeyen sesli veya görüntülü konuşma işlevi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Sosyal ağ kullanıcı adlarının veya e-posta adreslerinin paylaşımı yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Sosyal ağ kullanıcı adlarını veya e-posta adreslerini paylaşır"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Üçüncü şahıslarla kullanıcı bilgisi paylaşımı yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "En son uygulama sürümünün denetlenmesi"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Başkalarının kullanıcıyı tanımasını sağlamayacak tanılama verisinin "
+"paylaşılması"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Başkalarının kullanıcıyı tanımasını sağlayacak bilgilerin paylaşılması"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Diğer kullanıcılarla fiziksel konum paylaşımı yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Diğer kullanıcılarla fiziksel konum paylaşımı"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Eş cinselliğe atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Eş cinselliğe doğrudan olmayan atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Benzer cinsiyetteki insanlar arasında öpüşme"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Benzer cinsiyetteki insanların arasında görsel cinsî davranış"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Fuhşa atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Fuhşa doğrudan olmayan atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Fuhuşa doğrudan atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Fuhuş eyleminin görsel betimlemeleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Eş aldatmaya atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Eş aldatmaya doğrudan olmayan atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Eş aldatmaya doğrudan atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Eş aldatma eyleminin görsel betimlemeleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Cinselleştirilmiş karakterler yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Yetersizce giyinmiş insan karakterleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Açıkça cinselleştirilmiş insan karakterleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Kutsala saygısızlığa atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Tarihsel saygısızlığa ilişkin betimlemeler veya atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Çağdaş zaman insan saygısızlığının betimlemeleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Çağdaş zaman saygısızlığının görsel betimlemeleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Görününür ölü insan kalıntıları yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Görününür ölü insan kalıntıları"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Parçalarına ayrılmış ölü insan kalıntıları"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "İnsan bedenlerine saygısızlığın görsel betimlemeleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Köleliğe atıf yok"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Tarihsel köleliğe ait betimlemeler veya atıflar"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Çağdaş zaman köleliğinin betimlemeleri"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Çağdaş zaman köleliğinin görsel betimlemeleri"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Genel"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "TÜMÜ"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Yalnızca Yetişkinler"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Yetişkin"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Genç"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "10 Yaş Üstü Herkes"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Herkes"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Erken Çocukluk"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Bir uygulama"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s, ek dosya biçimi desteği istiyor."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Ek MIME (Dosya) Türleri Gerekli"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s, ek yazı tipleri istiyor."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Ek Yazı Tipleri Gerekli"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s, ek çokluortam kod çözücüleri (kodek) istiyor."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Ek Çokluortam Kod Çözücüleri Gerekli"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s, ek yazıcı sürücüleri istiyor."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Ek Yazıcı Sürücüleri Gerekli"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s, ek paketler istiyor."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Ek Paketler Gerekli"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Yazılımlar’da Bul"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Kaldırılıyor…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Kurulum bekleniyor…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Güncellemeler bekleniyor…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Hazırlanıyor…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Bu uygulama yalnızca etkin İnternet bağlantınız olduğunda kullanılabilir."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Kur"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Kur…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Başlat"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "Kaldı_r"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Ağ"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Ağ üzerinden iletişim kurabilir"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Sistem Hizmetleri"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Sistem veriyolundaki D-Bus hizmetlerine erişebilir"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Oturum Hizmetleri"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Oturum veriyolundaki D-Bus hizmetlerine erişebilir"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Aygıtlar"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Sistem aygıt dosyalarına erişebilir"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Ev klasörü"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Dosyaları görüntüleyebilir, düzenleyebilir ve oluşturabilir"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Dosyaları görüntüleyebilir"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Dosya sistemi"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "İndirilenler klasörü"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Ayarları görüntüleyebilir ve değiştirebilir"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Eski görüntü sistemi"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Eski, güvenli olmayan bir görüntü sistemi kullanır"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Yalıtılmış alandan kaçış"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Yalıtılmış alandan kaçabilir ve diğer kısıtlamaları aşabilir"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Bu uygulama tümüyle yalıtılmış alandadır."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Bu uygulamanın sistemin hangi bölümlerine eriştiği belirlenemiyor. Bu eski "
+"uygulamalar için olağandır."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Hiçbir zaman"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Düşük"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Orta"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Yüksek"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Değerlendirme yazmanız için İnternet erişimi gerekiyor"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "“%s” bulunamıyor"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Kamu malı"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://tr.wikipedia.org/wiki/Kamu_mal%C4%B1"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.tr.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Özgür Yazılım"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Kullanıcılar şu lisanslarla sınırlanmıştır:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Daha çok bilgi"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Ayrıntılar sayfası"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "İndiriliyor"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Güncelle"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "Kısayol _ekle"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "Kısayolu _kaldır"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Ekran görüntüsü sağlanmadı"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Yazılımı Deposu Dahildir"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Bu uygulama, güncellemelerin yanı sıra başka yazılımlara erişim sağlayan bir "
+"yazılım deposu içerir."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Yazılım Deposu Dahil Değildir"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Bu uygulamada yazılım deposu bulunmuyor. Yeni sürümleri çıktığında "
+"güncellenmeyecek."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Bu yazılım zaten dağıtımınız tarafından sağlanmaktadır ve "
+"değiştirilmemelidir."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Yazılım Deposu Belirlendi"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Bu yazılım deposunu eklemek, ek yazılımlara ve yükseltmelere erişmenizi "
+"sağlar."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Yalnızca güvendiğiniz yazılım depolarını kullanın."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Web Sitesi"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Bağış Yap"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Dilinize Çevrilmiş"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Belgelendirme"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Yayım Etkinliği"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Sistem Tümleşimi"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Yalıtılmış Alanda"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kanal"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Sürüm"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Yaş Derecelendirmesi"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "İzinler"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Güncellendi"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Kategori"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Kurulu Boyut"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "İndirme Boyutu"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Geliştirici"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Lisans"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Özgür"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Sahipli"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Eklentiler"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Seçilen eklentiler uygulama ile birlikte kurulacak."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "İncelemeler"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_İnceleme Yaz"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "Daha Çoğunu Gö_ster"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Bu; yazılımı özgürce çalıştırma, kopyalama, dağıtma, öğrenme ve düzenleme "
+"anlamına gelir."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Sahipli Yazılım"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Bu, yazılımın bir kişi veya bir şirket tarafından sahiplenildiği anlamına "
+"gelir. Yazılımın kullanımında genellikle kısıtlamalar vardır ve kaynak koda "
+"çoğunlukla erişilemez."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Bilinmeyen Yazılım Lisansı"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Bu yazılımın lisans koşulları bilinmiyor."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Uygulama böyle derecelendirildi çünkü şu özellikleri taşıyor:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Bu derecelendirme için ayrıntı yok."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " ve "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s betiği/betikleri için kullanılabilir yazı tipleri"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s için kullanılabilir yazılım"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "İstenen Yazılım Bulunamadı"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s bulunamadı"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "web sitesinde"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "%s dosyasını sağlayan, kullanılabilir uygulama yok."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Eksik uygulamaları nasıl edinebileceğinizle ilgili seçeneklerin yanında, %s "
+"hakkındaki bilgileri şurada bulabilirsiniz: %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "%s desteği için kullanılabilir uygulama yok."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s kullanılabilir değil."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Hem %s hakkındaki bilgiler hem de bu biçimi oynatabilen uygulamayı nasıl "
+"edinebileceğinizle ilgili seçenekleri %s adresinde bulabilirsiniz."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "%s betik desteği için kullanılabilir yazı tipi yok."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Hem %s hakkındaki bilgiler hem de ek yazı tiplerini nasıl edinebileceğinizi "
+"%s adresinde bulabilirsiniz."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "%s biçimi için kullanılabilir ek kodek yok."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Hem %s hakkındaki bilgiler hem de bu biçimi oynatabilen bir kod çözücüyü "
+"nasıl edinebileceğinizle ilgili bilgiyi %s adresinde bulabilirsiniz."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "%s desteği için kullanılabilir Plazma kaynağı yok."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Hem %s hakkındaki bilgiler hem de ek Plazma kaynaklarını nasıl "
+"edinebileceğinizle ilgili bilgiyi %s adresinde bulabilirsiniz."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "%s için kullanılabilir yazıcı sürücüsü yok."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Hem %s hakkındaki bilgiler hem de bu sürücüyü nasıl edinebileceğinizi %s "
+"adresinde bulabilirsiniz."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "bu web sitesi"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Ne yazık ki aradığınız %s bulunamadı. Daha çok bilgi için lütfen %s’ni "
+"ziyaret edin."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Herhangi bir arama sonucu bulunamadı"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s dosya biçimi"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Kod çözücüler sayfası"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Hoş Geldiniz"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Yazılımlar’a Hoş Geldiniz"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Yazılımlar uygulaması, gereksindiğiniz tüm yazılımları tek bir yerden "
+"kurmanıza olanak tanır. Bizim önerdiklerimize bakın, kategorilere göz atın "
+"ya da istediğiniz uygulamaları bulmak için arama yapın."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Hadi Alışverişe Çıkalım"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Kaldırıldı"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Kuruldu"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Güncellendi"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Geçmiş"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Sistem Uygulamaları"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Kurulan sayfa"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Yazılım kataloğu indiriliyor"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Sayfa yükleniyor"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Başlatılıyor…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Şu anki ağ ölçülüdür. Ölçülü bağlantıların veri sınırları veya ilişkili "
+"ücretleri vardır. Veriyi azaltmak için kendiliğinden güncellemeler "
+"duraklatılacak.\n"
+"\n"
+"Ölçülmeyen bağlantı kullanılabildiğinde kendiliğinden güncellemeler sürecek. "
+"O zamana dek güncellemeler elle kurulabilir.\n"
+"\n"
+"Başka seçenek olarak, eğer şu anki ağ yanlışlıkla ölçülü tanımlandıysa bu "
+"ayar değiştirilebilir."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "_Ağ Ayarlarını Aç"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Sayfayı yönet"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Yönetilecek inceleme yok"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "sistem"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "kullanıcı"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Dal"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Biçim"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Kurulum"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Daha…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Önerilen Ses ve Görüntü Uygulamaları"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Önerilen Oyunlar"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Önerilen Grafik Uygulamaları"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Önerilen Verimlilik Uygulamaları"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Seçilen üçüncü taraf kaynaklardan ek yazılıma erişin."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Bu yazılımların bazıları sahiplidir; bu nedenle kullanım, paylaşım ve kaynak "
+"koda erişim konusunda kısıtlamaları vardır."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Daha çoğunu öğren…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Etkinleştir"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Genel bakış sayfası"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Üçüncü Taraf Yazılım Depoları Etkinleştirilsin mi?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Önceki"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Sonraki"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Editörün Seçtikleri"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Son Çıkanlar"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Kategoriler"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Uygulama Verisi Bulunamadı"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "%s Uygulamasını Hazırla"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "%s deposunu kaldırmak istediğinizden emin misiniz?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"%s kaynağından olan tüm uygulamalar kaldırılacak ve yeniden kullanmak için "
+"depoyu yeniden kurmanız gerekecek."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "%s uygulamasını kaldırmak istediğinizden emin misiniz?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s kaldırılacak ve tekrar kullanmak için yeniden kurmanız gerekecek."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Kuruldu)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Güncelleme Seçenekleri"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Kendiliğinden Güncellemeler"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Mobil veya ölçülen bağlantılarda kendiliğinden güncelleme devre dışıdır."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Kendiliğinden Güncelleme Bildirimleri"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Güncellemeler kendiliğinden kurulduğunda bildirim göster."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Kurulu bazı yazılımlar %s ile uyumlu değil. Eğer devam ederseniz, takip "
+"edenler yükseltme sırasında kendiliğinden kaldırılacak:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Uyumsuz Yazılım"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Devam Et"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u uygulama kuruldu"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "%u eklenti kuruldu"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u uygulama"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u eklenti"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s ve %s kuruldu"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "“%s” deposunu kaldır?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "“%s” deposunu devre dışı bırak?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Bu depodan kurulan yazılımlar, güvenlik düzeltmeleri de dahil olmak üzere "
+"artık güncelleme almayacak."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Devre dışı bırak"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "işletim sistemi"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Bu depolar %s tarafından sağlanan öntanımlı yazılımı tamamlar."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Üçüncü Şahıs Depolar"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Ek Depolar"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Etkinleştir"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Kaldır…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Devre dışı bırak…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Etkinleştiriliyor"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Devre dışı bırakılıyor"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Etkin"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Devre dışı"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Berbat"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Pek iyi değil"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "İdare eder"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Güzel"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Harika"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Lütfen incelemeyi yazmaya biraz daha çok zaman ayırın"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Lütfen yıldız puanlaması seçin"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Özet çok kısa"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Özet çok uzun"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Açıklama çok kısa"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Açıklama çok uzun"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "İnceleme Gönder"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Gönder"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Özet"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"İncelemenizin kısa bir özetini girin, örneğin: “Harika bir uygulama, "
+"öneriyorum”."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "İnceleme"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Uygulama hakkında ne düşünüyorsunuz? Görüşleriniz için neden belirtmeye "
+"çalışın."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Hangi verilerin gönderildiğini <a href=\"https://odrs.gnome.org/privacy"
+"\">gizlilik politikamızda</a> bulabilirsiniz."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "toplam oylama"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Küfürlü, kaba veya ayrımcı tutum içeren incelemeleri rapor edebilirsiniz."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"İnceleme raporlandıktan sonra yönetici tarafından denetlenene dek "
+"gizlenecektir."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "İnceleme Rapor Edilsin Mi?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Rapor Et"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Bu inceleme işinize yaradı mı?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Evet"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Hayır"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Eh İşte"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Rapor Et…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Kaldır…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Ekran görüntüsü bulunamadı"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Resim yüklenemedi"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Ekran görüntüsü boyutu bulunamadı"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Önbellek oluşturulamadı"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Ekran görüntüsü geçerli değil"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Ekran görüntüsü kullanılabilir değil"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Ekran Görüntüsü"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "%u eşleşme daha"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Arama sayfası"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Uygulama Bulunamadı"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "%s’den donanım yazılımı güncellemeleri indirilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "%s’den güncellemeler indirilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Güncellemeler indirilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Güncellemeler indirilemiyor: İnternet bağlantısı gerekiyordu ancak "
+"kullanılabilir değildi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "%s’den güncellemeler indirilemiyor: yetersiz disk alanı"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Güncellemeler indirilemiyor: yetersiz disk alanı"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Güncellemeler indirilemiyor: yetkilendirme gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Güncellemeler indirilemiyor: yetkilendirme geçersiz"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Güncellemeler indirilemiyor: yazılım kurma izniniz yok"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Güncellemelerin listesi alınamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "%2$s’den indirme başarısız olduğundan %1$s kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "İndirme başarısız olduğundan %s kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "%2$s çalışma zamanı olmadığından %1$s kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Desteklenmediğinden %s kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Kurulamıyor: İnternet bağlantısı gerekiyordu ancak kullanılabilir değildi"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Kurulamıyor: uygulama geçersiz biçime sahip"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "%s kurulamıyor: yetersiz disk alanı"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "%s kurulamıyor: yetkilendirme gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "%s kurulamıyor: yetkilendirme geçersiz"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "%s kurulamıyor: yazılım kurma izniniz yok"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "%s kurulamıyor: AC güç gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "%s kurulamıyor: Pil düzeyi çok düşük"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "%s kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "%s, %s üstünden indirme başarısız olduğundan güncellenemedi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "İndirme başarısız olduğundan %s güncellenemedi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "İndirme başarısız olduğundan %s üstünden güncellemeler kurulamadı"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "İndirme başarısız olduğundan güncellemeler kurulamadı"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr ""
+"Güncellenemiyor: İnternet bağlantısı gerekiyordu ancak kullanılabilir değildi"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "%s güncellenemiyor: yetersiz disk alanı"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Güncellemeler kurulamıyor: yeterli disk alanı yok"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "%s güncellenemiyor: yetkilendirme gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Güncellemeler kurulamıyor: kimlik doğrulama gerekli"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "%s güncellenemiyor: yetkilendirme geçersiz"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Güncellemeler kurulamıyor: kimlik doğrulama geçersiz"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "%s güncellenemiyor: yazılım güncellemeye yetkiniz yok"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "Güncellemeler kurulamıyor: yazılımı güncelleme izniniz yok"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "%s güncellenemiyor: AC güç gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Güncellemeler kurulamıyor: AC güç gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "%s güncellenemiyor: Pil düzeyi çok düşük"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Güncellemeler kurulamıyor: Pil düzeyi çok düşük"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "%s yükseltilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Güncellemeler kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "%2$s’den %1$s’e yükseltilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "İndirme başarısız olduğundan %s yükseltilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "%sʼe yükseltilemiyor: İnternet erişimi gerekli ancak yok"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "%s’e yükseltilemiyor: yetersiz disk alanı"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "%s’e yükseltilemiyor: yetkilendirme gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "%s’e yükseltilemiyor: yetkilendirme geçersiz"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "%sʼe yükseltilemiyor: yükseltme için izniniz yok"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "%s’e yükseltilemiyor: AC güç gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "%s’e yükseltilemiyor: Pil düzeyi çok düşük"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "%s’e yükseltilemiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "%s kaldırılamıyor: yetkilendirme gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "%s kaldırılamıyor: yetkilendirme geçersiz"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "%s kaldırılamıyor: yazılım kaldırma izniniz yok"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "%s kaldırılamıyor: AC güç gerekiyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "%s kaldırılamıyor: Pil düzeyi çok düşük"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "%s kaldırılamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "%s başlatılamıyor: %s kurulmamış"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Yetersiz disk alanı — biraz yer aç ve yeniden dene"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Üzgünüz, bir şeyler yanlış gitti"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Dosya kurulamadı: desteklenmiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Dosya kurulamıyor: yetkilendirme başarısız"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Kurulamadı: desteklenmiyor"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Kurulamadı: yetkilendirme başarısız"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "%s ile iletişim kurulamıyor"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Yeni eklentileri kullanmak için %s yeniden başlatılmalıdır."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Yeni eklentileri kullanmak için bu uygulamanın yeniden başlatılması "
+"gerekiyor."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "AC güç gerekiyor"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Pil düzeyi çok düşük"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Kaynak: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Kuruluyor)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Kaldırılıyor)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "Tümünü Kaldı_r"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Güncelleme tanımı yok."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "%s’de kuruldu"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Kurulu Güncellemeler"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Eklentiler"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Kaldırılanlar"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Güncellemeler"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Sürüm düşürmeler"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Bu sisteme hiçbir güncelleme kurulmadı."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Güvenlik Güncellemeleri Beklemede"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Önemli güncellemeleri şimdi kurmanız önerilir"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Yeniden Başlat ve Kur"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Yazılım Güncellemeleri Var"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Önemli işletim sistemi ve uygulama güncellemeleri kurulmaya hazır"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Görüntüle"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Uygulama Güncellendi — Yeniden Başlatma Gerekiyor"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Uygulama Güncellendi"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s güncellendi."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Lütfen uygulamayı yeniden başlatın."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s ve %s güncellendi."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u uygulama yeniden başlatma gerektiriyor."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "%s, %s ve %s içerilir."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "İşletim Sistemi Güncellemeleri Kullanılamaz"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Güvenlik güncellemelerini almayı sürdürmek için yükselt."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s dağıtımının yeni bir sürümü kurulmaya hazır"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Yazılım Yükseltmesi Var"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Yazılım Güncellemeleri Başarısız Oldu"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Önemli bir işletim sistemi güncellemesinin kurulması başarısız oldu."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Ayrıntıları Göster"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Sistem Yükseltmesi Tamamlandı"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "%s %s’a Hoş Geldiniz!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Yazılım Güncellemeleri Kuruldu"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Önemli işletim sistemi güncellemeleri kuruldu."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Gözden Geçir"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Güncelleme Başarısız Oldu"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Sistem zaten güncel."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Güncelleme iptal edildi."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"İnternet erişimine gereksinim duyuldu fakat bulunamadı. Lütfen internet "
+"erişiminiz olduğuna emin olun ve yeniden deneyin."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Güncellemede güvenlik sorunları var. Lütfen daha çok ayrıntı için yazılım "
+"sağlayıcınızla iletişime geçin."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr ""
+"Yeterince boş disk alanı yok. Lütfen biraz yer açın ve yeniden deneyin."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Özür dileriz: güncelleme kurma başarısız. Lütfen başka bir güncellemeyi "
+"bekleyin ve yeniden deneyin. Eğer sorun devam ederse, yazılım sağlayıcınızla "
+"görüşün."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Dün, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Dün, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "İki gün önce"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Üç gün önce"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Dört gün önce"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Beş gün önce"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Altı gün önce"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Bir hafta önce"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "İki hafta önce"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Yeni güncellemeler aranıyor…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Güncellemeler ayarlanıyor…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Biraz uzun sürebilir)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Son denetim: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s artık desteklenmiyor."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "İşletim sisteminiz artık desteklenmiyor."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Bu, güvenlik güncelleştirmeleri almayacağı anlamına gelir."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Daha yeni bir sürüme yükseltmeniz önerilmektedir."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Ücret Uygulanabilir"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Mobil geniş bant kullanımı sırasında güncellemeleri denetlemek sizin için ek "
+"masrafa neden olabilir."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Yine de _Denetle"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Ağ Yok"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Güncellemeleri denetlemek için İnternet erişimi gerekir."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Denetleniyor…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Güncellemeleri denetle"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Güncellemeler sayfası"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Yazılım güncel"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Mobil geniş bant kullanımı sırasında güncellemeleri denetlemek sizin için ek "
+"masrafa neden olabilir"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "Yine de _Denetle"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Güncellemeleri denetlemek için çevrim içi ol"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Ağ Ayarları"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Güncellemeler kendiliğinden kurulur"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Yeniden Başlat ve Güncelle"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Tümünü Güncelle"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Tümleşik Donanım Yazılımı"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Yeniden Başlatma Gerektirir"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Uygulama Güncellemeleri"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Aygıt Donanım Yazılımı"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_İndir"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "Yükseltmeden önce verilerinizi ve dosyalarınızı yedeklemeniz önerilir."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "Şimdi _Yeniden Başlat"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Bilgisayar yeniden başlatıldığında güncellemeler uygulanacaktır."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Şimdi Kullanılabilir Durumda"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "%s %s İndirme İçin Bekliyor"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "%s %s İndiriliyor"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Kurulmaya Hazır"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Yeni özellikler eklenmiş ve makyajlanmış büyük bir yükseltme."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "Daha Çoğunu _Öğren"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Bu bilgisayarda yazılım ekleyin, kaldırın ya da güncelleyin"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Güncellemeler;Güncelleştirmeler;Yükseltme;Depolar;Sürüm Depoları;Tercihler;"
+"Yükle;Kur;Kaldır;Program;Yazılım;Uygulama;Mağaza;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Ses Oluşturma ve Düzenleme"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Müzik Oynatıcılar"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Hata Ayıklayıcılar"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE’ler"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Yapay Zeka"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Kimya"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Diller"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Matematik"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robotik"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Aksiyon"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Macera"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Arcade"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Bloklar"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Tahta"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Kart"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Emülatörler"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Çocuklar"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Mantık"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Rol Yapma"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Spor"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Strateji"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3B Grafik"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Fotoğrafçılık"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Tarama"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Vektör Grafikleri"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Görüntüleyiciler"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Takvim"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Veri Tabanı"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Finans"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Kelime İşlemci"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Yazı Tipleri"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Kod Çözücüler"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Girdi Kaynakları"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Dil Paketleri"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Yerelleştirme"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Donanım Sürücüleri"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Sohbet"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Haberler"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Web Tarayıcıları"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Metin Düzenleyiciler"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tümü"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Vitrin"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Sanat"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Biyografi"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Çizgi Romanlar"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Kurgu"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Sağlık"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Tarih"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Yaşam tarzı"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Politik"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Spor"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Ses ve Görüntü"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Geliştirme Araçları"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Eğitim & Bilim"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Oyunlar"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Grafik ve Fotoğrafçılık"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Verimlilik"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "İletişim ve Haberler"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Atıf"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Araçlar"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "İşletim Sistemi Güncellemeleri"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Performans, kararlılık ve güvenlik geliştirmeleri içerir."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Vitrin resimleri indiriliyor…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Yeni özellikler ve düzeltmeler içeren Endless OS güncellemesi."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS güncelleme servisi güncelleme alamadı ve uygulayamadı."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME Yazılımlar AppStream sistem geneli kurucusu"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Komut satırı argümanları ayrıştırılamadı"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Tam olarak bir dosya adı belirtmeniz gerekiyor"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Bu program yalnızca kök kullanıcı tarafından kullanılabilir"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "İçerik türü doğrulanamıyor"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Kopyalanamadı"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Ek üst veri dosyaları indiriliyor…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Yükseltme bilgisi indiriliyor…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"En son özellikler, performans ve kararlılık iyileştirmeleri için yükseltin."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak Desteği"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak, Linux’taki masaüstü uygulamaları için çerçevedir"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "%s için flatpak üst verisi alınıyor…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s Aygıt Güncellemesi"
+
+# Notes:
+# Add Note
+#
+# Extracted comments:
+# TRANSLATORS: the entire system, e.g. all internal devices,
+# * the first %s is the device name, e.g. 'ThinkPad P50`
+#
+#
+# Format:
+# C
+#
+# Paths:
+# plugins/fwupd/gs-fwupd-app.c:141
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s Sistem Güncellemesi"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s Gömülü Denetleyici Güncellemesi"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s ME Güncellemesi"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s Kurumsal ME Güncellemesi"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s Tüketici ME Güncellemesi"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s Denetleyici Güncellemesi"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt Denetleyici Güncellemesi"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s MİB Mikrokod Güncellemesi"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s Yapılandırma Güncellemesi"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Donanım yazılımı güncellemesi imzası indiriliyor…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Donanım yazılımı güncellemesi üst verisi indiriliyor…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Donanım Yazılımı Yükseltme Desteği"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Donanım yazılımı güncellemeleri için destek sağlar"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Uygulama oylamaları indiriliyor…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Açık Masaüstü Derecelendirme Desteği"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "AMDD uygulamaların kullanıcı görüşlerini sağlayan hizmettir"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap Mağazası"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap Desteği"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap, evrensel Linux paketidir"
+
+#~ msgid "About %s"
+#~ msgstr "%s Hakkında"
+
+#~ msgid "%s ME"
+#~ msgstr "%s YM"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Klasör yönetimi kullanıcı arayüzünü göster"
+
+#~ msgid "Folder Name"
+#~ msgstr "Klasör Adı"
+
+#~ msgid "_Add"
+#~ msgstr "_Ekle"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Uygulama Klasörüne Ekle"
+
+#~ msgid "Top Rated"
+#~ msgstr "Çok Oylanan"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Uzantı Ayarları"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Uzantıları kullanırken tüm sorumluluk size aittir. Eğer herhangi bir "
+#~ "sistem sorunu yaşarsanız, bunları devre dışı bırakmanız önerilir."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Bileşenler yüklenemedi"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS doğrulandı!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Dosya yüklenemedi"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Kaydedilmemiş değişiklikler"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Uygulama listesi zaten yüklendi."
+
+#~ msgid "Merge documents"
+#~ msgstr "Belgeleri birleştir"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Değişiklikleri at"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "AppStream Dosyası Aç"
+
+#~ msgid "_Open"
+#~ msgstr "_Aç"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "AppStream Dosyasını Kaydet"
+
+#~ msgid "_Save"
+#~ msgstr "_Kaydet"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Dosya kaydedilemedi"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s afiş tasarımı silindi."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Afiş tasarımı silindi."
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Uygulama listesinde kaydedilmemiş değişiklikler var."
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Ayrıntılı günlükleme kullan"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME Yazılımlar Afiş Tasarlayıcı"
+
+#~ msgid "No Designs"
+#~ msgstr "Tasarım Yok"
+
+#~ msgid "Error message here"
+#~ msgstr "Hata iletisi buraya"
+
+#~ msgid "App ID"
+#~ msgstr "Uygulama Kimliği"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Editörün Seçimi"
+
+#~ msgid "Category Featured"
+#~ msgstr "Kategori Vitrini"
+
+#~ msgid "Undo"
+#~ msgstr "Geri al"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Afiş Tasarlayıcı"
+
+#~ msgid "New Banner"
+#~ msgstr "Yeni Afiş"
+
+#~ msgid "Import from file"
+#~ msgstr "Dosyadan içe aktar"
+
+#~ msgid "Export to file"
+#~ msgstr "Dosyaya aktar"
+
+#~ msgid "Delete Design"
+#~ msgstr "Tasarımı Sil"
+
+#~ msgid "Featured App"
+#~ msgstr "Öne Çıkan Uygulama"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "İşletim Sistemi Yükseltme"
+
+#~ msgid "Spacing"
+#~ msgstr "Aralama"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Altlar arasındaki boşluk miktarı"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Ögeleri seçmek için tıklayın"
+
+#~ msgid "Select"
+#~ msgstr "Seç"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "Klasöre _Ekle…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "Klasöre _Taşı…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "Klasörden _Kaldır"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Öne Çıkan Uygulamalar"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "GNOME Yazılımlar için vitrin afişleri tasarla"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Yazılım;Uygulama;App;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Kabuk Uzantıları"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Web Uygulamaları Desteği"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Gözde web uygulamalarını tarayıcıda çalıştır"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Kabuğu Uzantıları Deposu"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Kabuk eklentisi üst verisi indiriliyor…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Kabuk Uzantısı"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_All"
+#~ msgstr "_Tümü"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "Giriş Yap / Kaydol…"
+
+#~ msgid "Continue"
+#~ msgstr "Devam et"
+
+#~ msgid "Use"
+#~ msgstr "Kullan"
+
+#~ msgid "Add another…"
+#~ msgstr "Başka ekle…"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Yazılım kataloğu yükleniyor"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "%s uygulamasını satın almak istediğinizden emin misiniz?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s uygulaması kurulacak ve %s ile ücretlendirileceksiniz."
+
+#~ msgid "Purchase"
+#~ msgstr "Satın Al"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "%s olarak girildi"
+
+#~ msgid "Sign in…"
+#~ msgstr "Giriş yap…"
+
+#~ msgid "Sign out"
+#~ msgstr "Çıkış yap"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "%s satın alınamıyor: kimlik doğrulama gerekiyor"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "%s satın alınamıyor: kimlik doğrulama geçersiz"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "%s satın alınamıyor: ayarlanmış ödeme yöntemi yok"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "%s satın alınamıyor: ödeme reddedildi"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "%s satın alınamıyor"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "Devam etmek için Ubuntu One hesabı kullanmanız gerekiyor."
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "Devam etmek için Ubuntu One hesabınızı kullanmanız gerekiyor."
+
+#~ msgid "..."
+#~ msgstr "..."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "%2$s’den %1$s’e güncellenemiyor"
+
+#~ msgid "New System Access"
+#~ msgstr "Yeni Sistem Erişimi"
+
+#~ msgid "_About"
+#~ msgstr "_Hakkında"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Hizmetin profil oluşturma bilgilerini göster"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Devam etmek için %s’e giriş yapmanız gerekiyor."
+
+#~ msgid "Email address"
+#~ msgstr "E-posta adresi"
+
+#~ msgid "I have an account already"
+#~ msgstr "Zaten bir hesabım var"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Bir hesap için kaydolmak istiyorum"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Parolamı unuttum"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Gelecek sefer kendiliğinden giriş yap"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "İki adımlı yetkilendirme için tek seferlik pin’inizi girin."
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Kimlik Doğrula"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Hem %s hakkındaki bilgiler hem de bu biçimi oynatabilen bir kod çözücüyü "
+#~ "nasıl edinebileceğinizle ilgili seçenekleri, web sitesinde bulabilirsiniz."
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "%s hesabınız askıya alındı."
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Bu çözülene dek yazılım kurulması mümkün değildir."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Daha çok bilgi için %s adresini ziyaret et."
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "Yeni güncellemeler indiriliyor…"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Uygulama sayfası indiriliyor…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam Desteği"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Valve’den en üst düzeyde eğlence platformu"
+
+#~ msgid "_Quit"
+#~ msgstr "_Çıkış"
+
+#~ msgid "Applications Updated"
+#~ msgstr "Uygulamalar Güncellendi"
+
+#~ msgid "Includes: ."
+#~ msgstr "Şunlar: ."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Yeniden Başlat ve Güncelle"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Tümünü _Güncelle"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Yeniden Başlat ve _Kur"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Çalışma zamanı kaynağı alınıyor…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Donanım yazılımı güncellemesi indiriliyor…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba Desteği"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba geliştiricilerin kolayca yazılım yığınları oluşturması sağlar"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "Ada Göre Sıralanmış"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "Oylamaya Göre Sralanmış"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Önceden etkinleştirilmiş olan ek kaynakların listesi"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Üçüncü taraf uygulamalar kurulurken önceden etkinleştirilmiş olan "
+#~ "kaynakların listesi."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Arama sonuçlarında özgür olmayan yazılımları göster"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "İsteğe bağlı olarak etkinleştirilebilecek özgür olmayan kaynakların "
+#~ "listesi"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Web tarayıcılarını ve oyunları içeren ek yazılımlara erişmeyi sağlar."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Sahipli Yazılım Kaynakları Etkinleştirilsin Mi?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Hiçbir uygulama ya da eklenti kurulmadı; başka yazılımlar halen kurulu "
+#~ "olabilir"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr ""
+#~ "Tipik olarak kaynak kod kullanımı ve erişimi üzerinde kısıtlamalar vardır."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Sahipli Yazılım Kaynakları"
+
+#~ msgid "Remove Source"
+#~ msgstr "Kaynağı Kaldır"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Yazılım kaynakları internetten indirilebilir. Bunlar size %s tarafından "
+#~ "sağlanan ek yazılımlara erişmenize imkan verirler."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Bir kaynağı kaldırmak, bu kaynaktan kurmuş olduğunuz tüm yazılımları da "
+#~ "kaldıracaktır."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Bu kaynaktan hiçbir yazılım kurulmadı"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Bu Kaynaktan Kuruldu"
+
+#~ msgid "Source Details"
+#~ msgstr "Kaynak Ayrıntıları"
+
+#~ msgid "Last Checked"
+#~ msgstr "Son Denetleme"
+
+#~ msgid "Added"
+#~ msgstr "Eklendi"
+
+#~ msgid "Website"
+#~ msgstr "Web Sitesi"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Oyuncudan oyuncuya konuşma işlevi olmadan önceden ayarlanmış etkileşimler"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "Kullanıcı bilgisini 3. şahıslarla paylaşıyor"
+
+#~ msgid "page1"
+#~ msgstr "sayfa1"
+
+#~ msgid "page2"
+#~ msgstr "sayfa2"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgid "Total"
+#~ msgstr "Toplam"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "'%s' bulunamadı"
+
+#~ msgid "_Install All"
+#~ msgstr "Tümünü _Kur"
+
+#~ msgid "Other Updates"
+#~ msgstr "Diğer Güncellemeler"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "Yazılım kaynakları, ek yazılımlara erişmenizi sağlar."
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "%s kurulumu başarısız oldu."
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "%s uygulaması kaldırılamadı."
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "Lütfen internet erişiminiz olduğundan emin olun ve tekrar deneyin."
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "Lütfen biraz yer açın ve tekrar deneyin."
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "Eğer sorun devam ederse, yazılım sağlayıcınızla iletişime geçin."
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "Yok"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "Tümü"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "Öne Çıkanlar"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomi"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kimya"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "Matematik"
+
+#~ msgid "Science"
+#~ msgstr "Bilim"
+
+#~ msgid "3rd party"
+#~ msgstr "3üncü taraf"
+
+#~ msgid "web app"
+#~ msgstr "web uygulaması"
+
+#~ msgid "nonfree"
+#~ msgstr "özgür olmayan"
+
+#~ msgid "shell extension"
+#~ msgstr "kabuk uzantısı"
+
+#~ msgid "_Installing"
+#~ msgstr "_Kuruluyor"
+
+#~ msgid "_Removing"
+#~ msgstr "_Kaldırılıyor"
+
+#~ msgid " or "
+#~ msgstr "veya"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "Bilinmiyor"
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "Bu yazılım, özgür olmayan bileşenler içerebilir."
+
+#~ msgid "non-free"
+#~ msgstr "özgür olmayan"
+
+#~ msgid "One Star"
+#~ msgstr "Tek Yıldız"
+
+#~ msgid "Two Stars"
+#~ msgstr "İki Yıldız"
+
+#~ msgid "Three Stars"
+#~ msgstr "Üç Yıldız"
+
+#~ msgid "Four Stars"
+#~ msgstr "Dört Yıldız"
+
+#~ msgid "Five Stars"
+#~ msgstr "Beş Yıldız"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "Hesaplanıyor..."
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "Bilinmiyor"
+
+#~ msgid "_History"
+#~ msgstr "_Geçmiş"
+
+#~ msgid "Size"
+#~ msgstr "Boyut"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "Önerilen Ofis Uygulamaları"
+
+#~ msgid "Audio"
+#~ msgstr "Ses"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "Düzenleme"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "Veritabanları"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "Disk Yazdırma"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham Radyo"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "Karıştırıcı"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "Müzik"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "Kaydediciler"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "Ardıştırıcılar"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "Radyo/TV Tarayıcıları"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "İnşa"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "Veritabanları"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "Profilleme"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "Çeviri"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "Web Geliştirme"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "Biyoloji"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "Bilgisayar Bilimleri"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "İnşaat"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "Veri Görselleştirme"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "Ekonomi"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "Elektrik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "Elektronik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "Mühendislik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "Jeoloji"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "Yerbilimleri"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "Tarih"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "Beşeri Bilimler"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "Görüntü İşleme"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "Edebiyat"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "Haritalar"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "Müzik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Sayısal Analiz"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "Paralel Hesaplama"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "Fizik"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "Maneviyat"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "Nişancı"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "Simülasyon"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "Spor"
+
+#~ msgid "Graphics"
+#~ msgstr "Grafik"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2B Grafik"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "Yayıncılık"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "Raster Grafikler"
+
+#~ msgid "Internet"
+#~ msgstr "İnternet"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "Çevirmeli Ağ"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "E-posta"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "Özet Akışı"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "Dosya Aktarımı"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "Ham Radyo"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "Anlık Mesajlaşma"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC İstemcileri"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "İzleyici"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "Telefon"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "Web Geliştirme"
+
+#~ msgid "Office"
+#~ msgstr "Ofis"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "Grafik"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "Adres Yönetimi"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "Sözlük"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "E-posta"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "Akış Şeması"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "Fotoğrafçılık"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "Sunum"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "Proje Yönetimi"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "Yayıncılık"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "Elektronik Tablo"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "Görüntüleyici"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "Sanat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "Yapay Zeka"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "Astronomi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "Biyoloji"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "Kimya"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "Bilgisayar Bilimleri"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "İnşaat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "Veri Görselleştirme"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "Ekonomi"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "Elektrik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "Elektronik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "Mühendislik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "Coğrafya"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "Jeoloji"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "Yerbilimleri"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "Tarih"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "Beşeri Bilimler"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "Görüntü İşleme"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "Diller"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "Edebiyat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "Haritalar"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "Matematik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "Tıp"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "Sayısal Analiz"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "Paralel Hesaplama"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "Fizik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "Robotik"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "Maneviyat"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "Spor"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "Emülatör"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "Dosya Yöneticisi"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "Dosya Araçları"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "İzleyici"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "Güvenlik"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "Uçbirim Emülatörü"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "Erişilebilirlik"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "Arşivleme"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "Hesap Makinesi"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "Saat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "Sıkıştırma"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "Dosya Araçları"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "Haritalar"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "Maneviyat"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "Telefon Araçları"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "Düzenleme"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "Veritabanı"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "Disk Yazdırma"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "Oynatıcılar"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "Kaydediciler"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "TV"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "AppStream verisi bulunamadı"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "Tamamlanmamış bir güncelleme var."
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "Güncelleme yüklenemedi; bu genellikle güncellemenin kendisiyle ilgili bir "
+#~ "sorundur. Lütfen başka bir güncellemeyi bekleyin ve tekrar deneyin."
+
+#~ msgid "Internet Only Application"
+#~ msgstr "Sadece İnternet Uygulaması"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "GApplication hizmet kipine gir"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "Güncelleme doğru şekilde imzalanmamış."
+
+#~ msgid "The update could not be completed."
+#~ msgstr "Güncelleme tamamlanamadı."
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr ""
+#~ "Bir çevrimdışı güncelleştirme istendi, ancak güncelleştirme gerektiren "
+#~ "bir paket bulunmuyor."
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "Sürücüde boş yer kalmadı."
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "Bir güncelleme düzgün yüklenemedi."
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "Çevrimdışı güncelleme beklenmedik bir şekilde başarısız oldu."
+
+#~ msgid "No sources found."
+#~ msgstr "Hiçbir kaynak bulunamadı."
+
+#~ msgid "OK"
+#~ msgstr "Tamam"
+
+#~ msgid "%i application and %i add-ons installed"
+#~ msgid_plural "%i applications and %i add-ons installed"
+#~ msgstr[0] "%i uygulama ve %i eklenti kuruldu"
+
+#~ msgid "%s is not %sfree and open source software%s."
+#~ msgstr "%s, %sücretsiz ve açık kaynaklı bir yazılım%s değildir."
+
+#~ msgid ""
+#~ "Depending on your country of residence, installing it could make you "
+#~ "liable to prosecution."
+#~ msgstr ""
+#~ "Bulunduğunuz ülkeye bağlı olarak, bunu kurmak sizi yasal sorumluluk "
+#~ "altında bırakabilir."
+
+#~ msgid "If you are uncertain about this, you should obtain legal advice."
+#~ msgstr "Eğer bu konuda çekinceniz varsa, yasal danışmanlık almalısınız."
+
+#~ msgid "Do you want to enable it?"
+#~ msgstr "Bunu etkinleştirmek istiyor musunuz?"
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..f405117
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,4385 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Daniel Korostil <ted.korostiled@gmail.com>, 2013, 2014, 2015, 2016, 2017.
+# Yuri Chornoivan <yurchor@ukr.net>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.0\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-19 23:25+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 20.11.70\n"
+"X-Project-Style: gnome\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Програмні засоби GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Керування програмами в середовищі GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Програми дозволяють знайти і встановити нові програми та системні "
+"розширення, вилучити встановлені програми."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Програми GNOME виставляє особливі та популярні програми з корисним описом і "
+"кількома знімками для кожної. Програми можна знайти переглядом списку "
+"категорій або через пошук. Також можна оновлювати вашу систему через "
+"безмережеве оновлення."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Панель огляду"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Панель подробиць"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Панель установлення"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Панель оновлення"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Подробиці оновлення"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "Проєкт GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Встановити файл appstream до загальносистемної теки"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Встановлюємо файл appstream до загальносистемної теки"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Список сумісних проєктів"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Це список таких сумісних проєктів, які слід показувати, як GNOME, KDE і XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Чи опрацьовувати оновлення через «Програми» GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Якщо вимкнено, «Програми» не будуть показувати панель оновлень, не "
+"виконуватиме ніяких дій щодо оновлення і не надсилатимуть запитів щодо "
+"встановлення нових версій системи."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Автоматично отримувати і встановлювати оновлення"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Якщо увімкнено, «Програми» GNOME автоматично отримуватимуть оновлення "
+"програмного забезпечення у фоновому режимі і встановлюватимуть ті з них, які "
+"не потребують перезавантаження системи."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr ""
+"Сповіщати користувача щодо оновлення програмного забезпечення у фоновому "
+"режимі"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Якщо увімкнено, «Програми» GNOME сповіщатимуть користувача про оновлення, "
+"які було виконано під час бездіяльності з боку користувача."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Чи автоматично оновлювати, коли є тарифний зв'язок"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Якщо ввімкнено, Програми автоматично оновлюються у тлі, навіть якщо "
+"використовується тарифний зв'язок (звантаження даних, перевіряння на "
+"оновлення тощо, які можуть коштувати для користувача)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Чи це самий перший запуск Програм"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Показувати рейтинг зірочок біля програм"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Відсіювати програми на основі типової гілки"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "Невільні програми показують попередження перед їхнім встановленням"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Коли невільні програми встановлено може з'явитись вікно з попередженням. Це "
+"вказує, чи замовчувати це вікно."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Перелік популярних програм"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Перелік програм, які використовуються, не враховуючи визначених системою."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Остання часова мітка перевіряння на оновлення"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Останнє сповіщення часова мітка оновлення"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "Часова мітка першого оновлення захисту, очищеного після оновлення"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Остання часова мітка оновлення"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Остання часова позначка, коли система працювала у мережі і отримала якісь "
+"оновлення"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "Тривалість у секундах, щоб перевіряти чи знімок ще дійсний"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Більше значення — більше запитів до віддаленого сервера і тривалість "
+"оновлення зображення може забрати більше часу. 0 — ніколи не надсилати запит "
+"до сервера, якщо зображення вже збережено."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Сервер, який використовується для огляду програм"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Мінімальний бал карми за огляд"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Огляди з кармою меншою за це число не буде показано."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Список офіційних сховищ, які слід не вважати сторонніми"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr ""
+"Перелік офіційних сховищ, які містять програми, які слід вважати відкритими"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "Посилання на ліцензію, коли програму слід вважати відкритою"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Встановити збірку програм для всіх користувачів у системі, де це можливо"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Дозволити доступ до вікна сховищ програм"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Пропонувати оновлення до основних випусків"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "Показувати інтерфейс, який повідомляє, що програма не є відкрита"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr ""
+"Показувати запити у відповідь на спроби встановлення зі сховищ закрити "
+"програм"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "Показувати розмір встановлених програм у списку встановлених програм"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+"'https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BF"
+"%D1%80%D1%96%D1%94%D1%82%D0%B0%D1%80%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE"
+"%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D0%B5_%D0%B7%D0%B0%D0%B1%D0%B5%D0%B7%D0%BF"
+"%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D1%8F'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "Посилання, яке пояснює про невідкриті/закриті програми"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Перелік посилань на файли, які будуть звантажуватись в теку з даними про "
+"програми"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Встановлювати файли AppStream до загальносистемної теки для усіх користувачів"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Увімкнути сховище розширень GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Рядок, у якому зберігається ідентифікатор gnome-online-account, який "
+"використовуватиметься для входу до системи"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Установлення програм"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Встановити у систему вибрані програми"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Вибрати все"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Зняти вибране"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "Сховища _програм"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Налаштування оновлень"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Програми"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Повернутися"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Дослідити"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Встановлено"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Оновлено"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Пошук"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Джерело"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Сховища програм"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Вивчити диск"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Параметри мережі"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Перезавантажити зараз"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Докладніше"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Автоматичне оновлення призупинено"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "З'ясувати _більше"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Локальний файл"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Пакунок"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "У черзі"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Встановлено"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Встановлення"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Вилучення"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Стартовий режим, один із: «updates», «updated» «installed» або «overview»"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "РЕЖИМ"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Пошук програм"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "SEARCH"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Показувати подробиці програм (через ідентифікатор програми)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "Ідентифікатор"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Показувати подробиць програм (через назву пакунка)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Встановити програму (через ідентифікатор програми)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Відкрити локальний файл пакунку"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "НАЗВАФАЙЛА"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Тип взаємодії, які очікується від цієї дії: або «none», або «notify», або "
+"«full»"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Показати розширену зневаджувальну інформацію"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Встановлює будь-які оновлення з черги у фоновому режимі"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Показати налаштування оновлення"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Вийти із запущеного зразку "
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Віддавати перевагу локальним джерелам файлів для AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Показати номер версії"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Daniel Korostil <ted.korostiled@gmail.com>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Про «Програми»"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Гарний спосіб керуванням програмами на вашій системі."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Вибачте! Не маємо подробиць щодо цієї програми."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Відвідати сайт"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Встановити…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Скасувати"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Встановити"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Оновлення"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Вилучити"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Пристрій неможливо використовувати протягом оновлення."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Потребує додаткових прав доступу"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Для входу до сховища %s потрібне ім'я користувача (область %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Потрібна реєстрація"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Скасувати"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "_Увійти"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "_Користувач"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "_Пароль"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Інше"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Усе"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Особливе"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Рекомендовані у «%s»"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Рейтинг"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Назва"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Показати"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Меню фільтрування підкатегорій"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Критерій упорядковування"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Меню упорядковування за підкатегоріями"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Будь ласка, введіть число від 1 до %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Виберіть програму:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Оновлення системи встановлено"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Свіже оновлення встановлене і готове до використання"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s вже встановлено"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Для набуття змінами чинності слід перезапустити систему."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Програми готові до використання."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Перезапустити"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Запустити"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Встановити програму третьої сторони?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Увімкнути сторонні сховища програмного забезпечення?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s — не <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">вільний та відкритий програмний засіб</a>, і його постачає «%s»."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s постачається через «%s»."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr ""
+"Для продовження встановлення слід увімкнути це сховище програмного "
+"забезпечення."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "В деяких країнах встановлення або використання %s може бути незаконне."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"В деяких країнах встановлення або використання цього кодеку може бути "
+"незаконне."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Більше не попереджати"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Увімкнути та встановити"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Докладні помилки з керування пакунками:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Подробиці"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Було встановлено оновлення"
+msgstr[1] "Було встановлено оновлення"
+msgstr[2] "Було встановлено оновлення"
+msgstr[3] "Було встановлено оновлення"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Для набуття ними чинності слід перезавантажити систему."
+msgstr[1] "Для набуття ними чинності слід перезавантажити систему."
+msgstr[2] "Для набуття ними чинності слід перезавантажити систему."
+msgstr[3] "Для набуття ним чинності слід перезавантажити систему."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Не зараз"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Без казкової жорстокості"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Казковий персонаж у небезпеці"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Казковий персонаж у сутичці"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Графічна жорстокість застосовується до казкового персонажа"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Без фантастичної жорстокості"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Персонаж у небезпеці легко розрізняється від дійсності"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Персонаж у сутичці легко розрізняється від дійсності"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Графічна жорстокість легко розрізняється від дійсності"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Без правдоподібної жорстокості"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Наполовину вигаданий персонаж у небезпеці"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Картинки про дійсного персонажа в сутичці"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Графічна жорстокість застосовується до дійсного персонажа"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Без кровопролиття"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Неправдоподібне кровопролиття"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Правдоподібне кровопролиття"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Картинки кровопролиття і орудування частинами тіла"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Без сексуального насильства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Ґвалтування або інші насильні сексуальні поведінки"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Без згадування про алкогольні напої"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Згадування про алкогольні напої"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Вживання алкогольних напоїв"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Без згадування про заборонені медикаменти"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Згадування про заборонені медикаменти"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Вживання заборонених медикаментів"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Без згадування про тютюнові вироби"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Згадування про тютюнові виробів"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Вживання тютюнових виробів"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Без всякої оголеності"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Коротка художня оголеність"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Тривала оголеність"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Без згадування або картинки сексуального характеру"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Згадування або картинки задирливого характеру"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Згадування або картинки сексуального характеру"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Графічна сексуальна поведінка"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Без усілякого богохульства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Часткове використання богохульства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Помірне використання богохульства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Надмірне використання богохульства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Без недоречного гумору"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Блазенський гумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Вульгарний або туалетний гумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Дорослий або сороміцький гумор"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Без дискримінацій в будь-яких її проявах"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Негативне ставлення до певних груп людей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Образи на підґрунті дискримінації"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Чітка дискримінація, яка ґрунтується на статевій, сексуальний, расовій або "
+"релігійній ознаці"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Без реклами в будь-яких її проявах"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Розміщення виробів"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "Чітке згадування про певний бренд або торгову марку"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Користувачам пропонують придбати певні матеріальні товари"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Без азартних ігор у будь-яких її проявах"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Азартні ігри на випадкових подіях з використанням жетонів або кредитів"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Азартні ігри з використанням ігрових грошей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Азартні ігри з використанням справжніх грошей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Без можливості витрачати справжні гроші у грі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Користувачам пропонують вкладати реальні гроші"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Можливість витрачати справжні гроші у програмі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Не можна спілкуватися із іншими користувачами"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Безпосередня взаємодія між користувачами без можливостей спілкування"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Можливості зі спілкування між користувачами із модерацією"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Неконтрольовані можливості із спілкування між користувачами"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Без можливості звукового спілкування із іншими користувачами"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr ""
+"Неконтрольовані можливості із звукового та відеоспілкування між користувачами"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "Без оприлюднення даних соціальної мережі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Оприлюднення даних соціальної мережі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Без оприлюднення інформації третій стороні"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Пошук найсвіжішої версії програми"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Оприлюднення діагностичних даних, які не надають безпосередньої змоги "
+"ідентифікувати користувача"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "Оприлюднення даних, які уможливлюють ідентифікацію користувача"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Без оприлюднення фізичного розміщення іншим користувачам"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Оприлюднення фізичного розміщення іншим користувачам"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Без згадування гомосексуальності"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Опосередковане згадування гомосексуальності"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Цілунки між людьми однієї статі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Відверта сексуальна поведінка між людьми однієї статі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Без згадування проституції"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Опосередковане згадування проституції"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Безпосереднє згадування проституції"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Відверте зображення акту проституції"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Без згадування перелюбу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Опосередковані згадування перелюбу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Безпосередні згадування перелюбу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Відверті зображення актів перелюбу"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Без сексуальних персонажів"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Напівоголені людські персонажі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Відверто сексуальні людські персонажі"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Без згадування знущання над людьми"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Зображення або згадування знущання над людьми у минулому"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Відверті зображення сучасного знущання над людьми"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Відверті зображення сучасного знущання над людьми"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Без показу решток мертвих людей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Показ решток мертвих людей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Докладний показ решток мертвих людей"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Відверте зображення осквернення людських тіл"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Без згадування рабства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Зображення або згадки рабства у минулому"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Зображення сучасного рабства"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Відверте зображення сучасного рабства"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Загальне"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Усі"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Лише для дорослих"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Для дорослих"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Для підлітків"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Для усіх 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Для усіх"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Для маленьких дітей"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Програма"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s потребує підтримування додаткового формату файлів."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Потрібно додаткові типи MIME"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s потребує додаткові шрифти."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Потрібно додаткові шрифти"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s потребує додаткові кодеки."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Потрібно додаткові кодеки"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s потребує додаткові драйвера до принтера."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Потребує додаткові драйвера до принтера"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s потребує додаткові пакунки."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Потрібно додаткові пакунки"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Знайти серед програм"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Вилучення…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Очікуємо на встановлення…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Оновлення у черзі…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Приготування…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr ""
+"Цю програму можна використовувати лише, коли є з'єднання з інтернетом. "
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Встановити"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Встановити…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Запустити"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "В_илучити"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Мережа"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Може обмінюватися даними мережею"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Служби системи"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Може отримувати доступ до служб D-Bus на каналі системи"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Служби сеансу"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Може отримувати доступ до служб D-Bus на каналі сеансу"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Пристрої"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Може отримувати доступ до файлів пристроїв системи"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Домашня тека"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Може переглядати, редагувати та створювати файли"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Може переглядати файли"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Файлова система"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Тека отриманих даних"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Параметри"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Може переглядати і змінювати будь-які параметри"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Застаріла система керування дисплеєм"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Використовує застарілу небезпечну систему керування дисплеєм"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Втеча з «пісочниці»"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Може подолати обмеження «пісочниці» і обійти будь-які інші обмеження"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Ця програма повністю працює у «пісочниці»"
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Не вдалося визначити, доступ до яких частин системи потрібен цій програмі. "
+"Це стандартна ситуація для застарілих програм."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Невідомо"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Ніколи"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Невідомо"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Низька"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Середня"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Висока"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Невідома"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Щоб написати відгук, потрібен інтернет"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Неможливо знайти «%s»"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Відкритий домен"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr ""
+"https://uk.wikipedia.org/wiki/%D0%A1%D1%83%D1%81%D0%BF%D1%96%D0%BB%D1%8C"
+"%D0%BD%D0%B5_%D0%BD%D0%B0%D0%B4%D0%B1%D0%B0%D0%BD%D0%BD%D1%8F"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Вільні програми"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Користувачі пов'язані з такою ліцензією:"
+msgstr[1] "Користувачі пов'язані з такими ліцензіями:"
+msgstr[2] "Користувачі пов'язані з такими ліцензіями:"
+msgstr[3] "Користувач пов'язаний з такою ліцензією:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Докладніше"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Сторінка подробиць"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Отримання"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Оновити"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Додати скорочення"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "В_илучити скорочення"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Не надано знімку"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Визначено сховище програмного забезпечення"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"До запису цієї програми включено сховище програмного забезпечення, яке надає "
+"оновлення, а також доступ до іншого програмного забезпечення."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Не визначено сховища програмного забезпечення"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Запис цієї програми не містить даних щодо сховища, звідки її можна "
+"встановити. Її не буде оновлено до нової версії."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Цю програму вже забезпечено вашим дистрибутивом і її не варто заміняти."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Виявлено сховище програм"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Додавання цього сховища програм надасть доступ до додаткових програм і "
+"оновлень."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Використовувати тільки ті сховища програм, яким ви довіряєте."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "_Сайт"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Підтримати фінансово"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Перекладено на вашу мову"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Документація"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Частота випусків"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Інтеграція з системою"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "В пісочниці"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Канал"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Версія"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Віковий рейтинг"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Права доступу"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Оновлено"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Категорія"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Розмір встановлення"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Розмір звантаження"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Розробник"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Ліцензія"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Вільна"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Комерційна"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Додатки"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Вибрані додатки буде встановлено з цією програмою."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Огляди"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Написати огляд"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Показати більше"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Це означає, що програма вільно запускається, копіюється, поширюється, "
+"досліджується і редагується."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Закриті програми"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Це означає, що програма належить особі або компанії. Часто бувають обмеження "
+"на використання і код зазвичай недоступний."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Невідома ліцензія"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Умови ліцензії цієї програми — невідомі."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Для програми було встановлено рейтинг з таких причин:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Немає подробиць щодо цього рейтингу."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " і "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Доступні шрифти для писемностей %s"
+msgstr[1] "Доступні шрифти для писемностей %s"
+msgstr[2] "Доступні шрифти для писемностей %s"
+msgstr[3] "Доступний шрифт для писемності %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Доступні програми для %s"
+msgstr[1] "Доступні програми для %s"
+msgstr[2] "Доступні програми для %s"
+msgstr[3] "Доступна програма для %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Неможливо знайти потрібну програму"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "%s не знайдено"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "на сайті"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Немає жодної програми, яка б забезпечувала файл %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "Відомості про %s, як і варіанти одержання програми, можна знайти %s. "
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Немає жодної програми, яка підтримує %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s — недоступна."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Відомості про %s, як і варіанти одержання програми, що підтримує це формат, "
+"можна знайти %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Не знайдено жодного доступного шрифту для підтримування скрипту %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Відомості про %s, як і варіанти одержання додаткових шрифтів, можна знайти "
+"%s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Немає жодного кодеку для формату %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Відомості про %s, як і варіанти одержання кодеків, що можуть програти цей "
+"формат, можна знайти %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Немає жодного ресурсу плазми, що підтримує %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Відомості про %s, як і варіанти одержання додаткових ресурсів плазми, можна "
+"знайти %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Немає жодного доступного драйвера принтера для %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Відомості про %s, як і варіанти одержання драйвера, що підтримують цей "
+"принтер, можна знайти %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "цей сайт"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "На жаль, заданий %s не вдалося знайти. Дивіться докладніше %s."
+msgstr[1] "На жаль, задані %s неможливо знайти. Дивіться докладніше %s."
+msgstr[2] "На жаль, задані %s неможливо знайти. Дивіться докладніше %s."
+msgstr[3] "На жаль, заданий %s неможливо знайти. Дивіться докладніше %s."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Не вдалось одержати жодного результату"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Формат файла %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Сторінка кодека"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Вітаємо"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Ласкаво просимо в Програми"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Програми дозволяють установлювати програми, які вам потрібні, все з одного "
+"місця. Погляньте наші рекомендації "
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Нумо на закупи"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Вилучено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Встановлено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Оновлено"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Невідомо"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Історія"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Системні програми"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Сторінка встановлених"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Каталог програм звантажується"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Завантаження сторінки"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Запускається…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"У поточній мережі ведеться облік обміну даними. Для з'єднань із обліком "
+"даних передбачено обмеження на обсяг даних або стягування сплати за обмін "
+"даними. Щоб заощадити ваші ресурси, автоматичне оновлення було призупинено.\n"
+"\n"
+"Автоматичне оновлення буде відновлено, коли стане доступною мережа без "
+"обліку обміну даними. Якщо така ситуація вас не влаштовує, до цього моменту "
+"ви можете встановлювати оновлення вручну.\n"
+"\n"
+"Крім того, якщо програма неправильно визначила характеристики поточної "
+"мережі як мережі із обліком, ви можете змінити значення параметра заборони "
+"оновлень у мережі з обліком."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Відкрити «Параметри _мережі»"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Модерувати сторінку"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Немає оглядів для модерування"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "система"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "користувач"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Гілка"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "Адреса"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Формат"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Встановлення"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Ще…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Рекомендовані звукові та відеопрограми"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Рекомендовані ігри"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Рекомендовані графічні програми"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Рекомендовані офісні програми"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr ""
+"Доступ до додаткового програмного забезпечення з вибраних сторонніх джерел."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Частина із цього програмного забезпечення є закритою, тому має обмеження на "
+"користування, поширення та доступ до початкового коду."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "З'ясувати більше…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Увімкнути"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Сторінка огляду"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Увімкнути сторонні сховища програмного забезпечення?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Назад"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Далі"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Відібране редактором"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Нещодавні випуски"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Категорії"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Не знайдено даних про програму"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Підготувати %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Вилучити запис сховища %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Всі програми з %s буде вилучено, потрібно перевстановити сховище, щоб "
+"використовувати його знову."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Вилучити %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr ""
+"%s буде вилучено. Щоб її використовувати знову, потрібно встановити її."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (встановлено)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Налаштування оновлень"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Автоматичні оновлення"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Автоматичні оновлення вимкнено, якщо ви користуєтеся мобільним з'єднанням "
+"або з'єднанням із обліком даних"
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Сповіщення щодо автоматичних оновлень"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Показувати сповіщення, коли програма автоматично встановлює оновлення."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Деякі з уже встановлених програм не сумісні з %s. Якщо продовжувати, таке "
+"буде вилучено протягом оновлення:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Несумісні програми"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Далі"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "Встановлено %u програму"
+msgstr[1] "Встановлено %u програми"
+msgstr[2] "Встановлено %u програм"
+msgstr[3] "Встановлено одну програму"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Встановлено %u додаток"
+msgstr[1] "Встановлено %u додатки"
+msgstr[2] "Встановлено %u додатків"
+msgstr[3] "Встановлено один додаток"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u програму"
+msgstr[1] "%u програми"
+msgstr[2] "%u програм"
+msgstr[3] "%u програму"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u додаток"
+msgstr[1] "%u додатки"
+msgstr[2] "%u додатків"
+msgstr[3] "%u додаток"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "Встановлено %s і %s"
+msgstr[1] "Встановлено %s і %s"
+msgstr[2] "Встановлено %s і %s"
+msgstr[3] "Встановлено %s і %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Вилучити «%s»?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Вимкнути «%s»?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Програмне забезпечення, яке було встановлено з цього сховища, не "
+"отримуватиме оновлень, зокрема оновлень захисту."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Вимкнути"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "операційна система"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Ці сховища доповнюють типове програмне забезпечення, яке надається %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Сторонні сховища"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Немає додаткових джерел"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Увімкнути"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "Ви_лучити…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "Ви_мкнути…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Вмикання"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Вимикання"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Увімкнено"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Ненавиджу"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Не подобається"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Може бути"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Подобається"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Обожнюю"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Приділіть трохи уваги написанню огляду, будь ласка"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Виберіть рейтинг зірок"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Підсумок закороткий"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Підсумок задовгий"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Опис закороткий"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Опис задовгий"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Оприлюднити огляд"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Оприлюднити"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Підсумок"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Надайте короткий підсумок огляду, наприклад: «Чудова програма, рекомендую»."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Оцінити"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "Що думаєте про програму? Надайте більше аргументів вашому огляду."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Ознайомтеся із переліком даних, які буде надіслано, на нашій <a href="
+"\"https://odrs.gnome.org/privacy\">сторінці правил конфіденційності</a>."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "рейтинг загалом"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "Можете звітувати про образливу, грубу або дискримінаційну поведінку."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Якщо зазвітовано, огляд буде сховано, поки його не перевірить адміністратор."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Зазвітувати про огляд?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Зазвітувати"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Огляд був корисний для вас?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Так"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Ні"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Таке собі"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Зазвітувати…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Вилучити…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Знімок не знайдено"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Не вдалося завантажити зображення "
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Розмір знімка не знайдено"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Неможливо створити кеш"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Знімок — неправильний"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Знімок недоступний"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Знімок"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "і ще %u відповідник"
+msgstr[1] "і ще %u відповідники"
+msgstr[2] "і ще %u відповідників"
+msgstr[3] "і ще %u відповідник"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Сторінка пошуку"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Програм не знайдено"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "«%s»"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Неможливо звантажити оновлення прошитих програм з %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Неможливо звантажити оновлення з %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Неможливо звантажити оновлення"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Неможливо звантажити оновлення: потрібен доступ до інтернету, але його немає "
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Неможливо звантажити оновлення з %s: бракує місця на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Неможливо звантажити оновлення: бракує місця на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Неможливо звантажити оновлення: потрібне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Неможливо звантажити оновлення: неправильне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Неможливо звантажити оновлення: бракує прав для встановлення програм"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Неможливо одержати перелік оновлень"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Неможливо встановити %s, бо не вдалося звантажити з %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Неможливо встановити %s, бо не вдалося звантажити"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Неможливо встановити %s, бо бракує бібліотеки %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Неможливо встановити %s, бо не підтримується"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "Неможливо встановити: потрібен доступ до інтернету, але його немає"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Неможливо встановити: програма має неправильний формат"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Неможливо встановити %s: бракує місця на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Неможливо встановити %s: потрібне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Неможливо встановити %s: хибне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Неможливо встановити %s: бракує прав для встановлення програм"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Неможливо встановити %s: потрібне живлення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Не вдалося встановити %s: рівень заряду акумулятора є надто низьким"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Неможливо встановити %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Не вдалося оновити %s з %s, оскільки не вдалося отримати дані"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Неможливо оновити %s, бо не вдалося звантажити"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr ""
+"Не вдалося встановити оновлення з %s, оскільки не вдалося отримати дані"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Не вдалося встановити оновлення, оскільки не вдалося отримати дані"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Неможливо оновити: потрібен доступ до інтернету, але його немає"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Неможливо оновити %s: бракує місця на диску"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Не вдалося встановити оновлення: недостатньо місця на диску"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Неможливо оновити %s: потрібне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Неможливо встановити оновлення: слід пройти розпізнавання"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Неможливо оновити %s: хибне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Не вдалося встановити оновлення: некоректні дані для розпізнавання"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Неможливо оновити %s: бракує прав для оновлення програм"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr ""
+"Не вдалося встановити оновлення: у вас немає прав доступу до оновлення "
+"програмного забезпечення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Неможливо оновити %s: потрібне живлення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Не вдалося встановити оновлення: потрібне мережеве живлення струмом"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Не вдалося оновити %s: рівень заряду акумулятора є надто низьким"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr ""
+"Не вдалося встановити оновлення: рівень заряду акумулятора є надто низьким"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Неможливо оновити %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Не вдалося встановити оновлення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Неможливо оновитись до %s з %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Неможливо оновитись до %s, бо не вдалося звантажити"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr ""
+"Не вдалося оновитися до %s: потрібен доступ до інтернету, але його немає"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Неможливо оновитись до %s: бракує місця на диску"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Неможливо оновитись до %s: потрібне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Неможливо оновитись до %s: хибне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Неможливо оновитись до %s: бракує прав для оновлення програм"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Неможливо оновитись до %s: потрібне живлення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Не вдалося оновитися до %s: рівень заряду акумулятора є надто низьким"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Неможливо оновитись до %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Неможливо вилучити %s: потрібне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Неможливо вилучити %s: хибне засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Неможливо вилучити %s: бракує прав для вилучення програм"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Неможливо вилучити %s: потрібне живлення"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Не вдалося вилучити %s: рівень заряду акумулятора є надто низьким"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Неможливо вилучити %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Неможливо запустити %s: %s не встановлено"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "Недостатньо місця на диску — спорожніть місце і спробуйте заново"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Вибачте, щось не спрацювало"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Не вдалося встановити файл: підтримки таких файлів не передбачено"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Не вдалося встановити файл: помилка засвідчення"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Не вдалося встановити: не передбачено підтримки"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Не вдалося встановити: не вдалося пройти розпізнавання"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Неможливо під'єднатись до %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Щоб використовувати новий додаток, треба перезапустити %s."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "Щоб використати новий додаток, треба перезапустити програму."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Потрібне живлення"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Рівень заряду акумуляторів є надто низьким"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Джерело: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (встановлення)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (вилучення)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "В_илучити всі"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Немає доступного опису оновлення."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Встановлено на %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Встановлені оновлення"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Додавання"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Вилучення"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Оновлення"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Зниження версій"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Не встановлено жодного оновлення на цій системі."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Опитування оновлень безпеки"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Радимо встановити важливі оновлення зараз же"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Перезапустити та встановити"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Доступні оновлення програм"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "Важливі оновлення системи і програм уже можна встановити"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Переглянути"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "Оновлено %u програму — слід перезавантажити систему"
+msgstr[1] "Оновлено %u програми — слід перезавантажити систему"
+msgstr[2] "Оновлено %u програм — слід перезавантажити систему"
+msgstr[3] "Оновлено %u програму — слід перезавантажити систему"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "Оновлено %u програму"
+msgstr[1] "Оновлено %u програми"
+msgstr[2] "Оновлено %u програм"
+msgstr[3] "Оновлено %u програму"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "Оновлено %s."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Будь ласка, перезапустіть програму."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "Було оновлено %s і %s."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u програма потребує перезапуску."
+msgstr[1] "%u програми потребують перезапуску."
+msgstr[2] "%u програм потребують перезапуску."
+msgstr[3] "%u програма потребує перезапуску."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "Включає %s, %s і %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Оновлення операційної системи недоступні"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Оновіть систему, щоб продовжити отримувати оновлення захисту."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Нова версія %s доступна для встановлення"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Доступні оновлення програм"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Не вдалось оновити програми"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Не вдалось установити важливі оновлення системи."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Показати подробиці"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Оновлення системи завершено"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Вітаємо у %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Оновлення встановлено"
+msgstr[1] "Оновлення встановлено"
+msgstr[2] "Оновлення встановлено"
+msgstr[3] "Оновлення встановлено"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Важливе оновлення системи встановлено."
+msgstr[1] "Важливі оновлення системи встановлено."
+msgstr[2] "Важливі оновлення системи встановлено."
+msgstr[3] "Важливе оновлення системи встановлено."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Переглянути"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Не вдалось оновити"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Систему вже оновлено."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Оновлення скасовано."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Потрібний доступ до інтернету, проте його немає. Переконайтесь, що ви маєте "
+"доступ до інтернету і спробуйте ще раз."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Є кілька проблем з оновленням безпеки. Порадьтесь з постачальником програм "
+"про подальші дії."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Недостатньо місця на диску. Спорожніть місце і спробуйте заново."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"На жаль: оновлення не вдалося встановити. Заждіть іншого оновлення і "
+"спробуйте ще раз. Якщо проблема повториться, зв'яжіться з постачальником "
+"програм."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Учора, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Вчора, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Два дні тому"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Три дні тому"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Чотири дні тому"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "П'ять днів тому"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Шість днів тому"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Тиждень тому"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Два тижні тому"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Пошук нових оновлень…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Підготування оновлень…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Це може зайняти трохи часу)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Востаннє перевірено: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "Підтримку %s %s припинено."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "Підтримку вашої операційної системи припинено."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "Це означає, що система не отримує оновлень захисту."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Рекомендуємо вам оновитися до сучаснішої версії."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Може стягуватися сплата за обмін даними"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Перевіряння на оновлення під час використання мобільного інтернету може "
+"забрати чимало трафіку."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "Перевірити поп_ри це"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Немає мережі"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Потрібен інтернет, щоб перевірити оновлення."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Перевіряємо…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Перевірити на оновлення"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Сторінка оновлень"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Всі програми оновлено"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Перевіряння на оновлення, коли використання мобільного інтернету може "
+"прискорити розрядження батареї"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Однаково перевіряти"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "З'єднатися з інтернетом для пошуку оновлень"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "Параметри _мережі"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Оновлення автоматично опрацьовуються"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Перезавантажити і оновити"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Оновити все"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Вбудовані мікроконтролери"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Потрібно перезавантажити"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Оновлення програм"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Прошиті програми для пристроїв"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Звантажити"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Радимо зробити резервну копію ваших даних і викласти їх перед оновленням."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "П_ерезапустити зараз"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Оновлення буде застосовано під час перезавантаження комп'ютера."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s тепер доступний"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Очікуємо на отримання %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Звантаження %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s можна встановлювати"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Велике оновлення, з новими можливостями і виправленнями."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Дізнатись більше"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Встановити, вилучити або оновити програмні засоби на комп'ютері"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Оновлення;Джерело;Сховище;Параметри;Налаштування;Встановити;Вилучити;"
+"Програма;Магазин;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Створення та редагування звукових даних"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Програвачі музики"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Засоби діагностики"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Штучний інтелект"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Астрономія"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Хімія"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Мови"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Математика"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Робототехніка"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Усе"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Особливе"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Дійовик"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Пригоди"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Аркада"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Мозаїка"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Настільні"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Карти"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Емулятори"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Дитячі"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Логіка"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Рольові ігри"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Спорт"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Стратегія"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Просторова графіка"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Фотографія"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Сканування"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Векторна графіка"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Переглядачі"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Календар"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "База даних"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Фінанси"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Текстовий процесор"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Шрифти"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Кодеки"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Джерела введення"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Мовні пакети"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Локалізація"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Драйвери апаратури"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Спілкування"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Новини"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Переглядачі інтернету"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Усі"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Рекомендовані"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Текстові редактори"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Усе"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Особливе"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Мистецтво"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Біографія"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Комікси"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Фантастика"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Здоров'я"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Історія"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Стиль життя"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Політика"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Спорт"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Відео та звук"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Засоби розробляння"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Освіта та наука"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Ігри"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Фотографія та графіка"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Офіс"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Спілкування та новини"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Посилання"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Засоби"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Оновлення системи"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Зокрема покращення швидкодії, стабільності та безпеки."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Отримання рекомендованих зображень…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Оновлення Endless OS із новими можливостями і виправленнями."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Службі оновлень EOS не вдалося отримати і застосувати оновлення."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Керування програмами у GNOME по всій системі"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Не вдалося розібрати аргумент рядка"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Потрібно вказати лише назву одного файла"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Ця програма може запускатись лише з правами адміністратора"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Не вдалося перевірити тип вмісту"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Не вдалось скопіювати"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Отримання додаткових файлів метаданих…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Отримання даних щодо оновлень…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Оновіть систему, щоб отримати доступу до найсвіжіших можливостей, поліпшеної "
+"швидкодії та стабільності роботи."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Підтримка Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+"Flatpak — система програм і бібліотек для роботи із програмами для робочих "
+"станцій на Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Отримуємо метадані flatpak для %s…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "Оновлення для пристрою %s"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "Оновлення системи для %s"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "Оновлення для вбудованого контролера %s"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "Оновлення ME для %s"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "Оновлення корпоративного ME для %s"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "Оновлення клієнтського ME для %s"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "Оновлення для контролера %s"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "Оновлення для контролера Thunderbolt %s"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "Оновлення для мікропрограми процесора %s"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+#| msgid "%s Controller Update"
+msgid "%s Configuration Update"
+msgstr "Оновлення налаштувань %s"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Отримуємо підпис оновлення мікропрограми…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Отримуємо метадані оновлення мікропрограми…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Підтримка оновлення мікропрограм"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Надає підтримку оновлення мікропрограм"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Отримуємо рейтинги програм…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Підтримка рейтингів Open Desktop"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS — служба, яка надає дані рецензування програм користувачами"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Крамниця Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Підтримка Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap — універсальний пакунок Linux"
+
+#~ msgid "About %s"
+#~ msgstr "Про %s"
+
+#~ msgid "%s ME"
+#~ msgstr "ME %s"
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..50a7cf6
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,4839 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+#
+# Translators:
+# Roddy Shuler <roddy@endlessm.com>, 2016-2017
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2020
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-11-20 09:45+0000\n"
+"PO-Revision-Date: 2020-11-26 13:32+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Nhóm Việt hóa GNOME <gnome-vi-list@gnome.org>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "Phần mềm GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "Trình quản lý ứng dụng cho GNOME"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"Phần mềm cho phép bạn tìm kiếm và cài đặt các ứng dụng mới và phần mở rộng "
+"hệ thống, cũng như loại bỏ các ứng dụng đã cài đặt hiện có."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"Phần mềm GNOME hiển thị các ứng dụng nổi bật và phổ biến với các mô tả hữu "
+"ích và nhiều ảnh chụp màn hình cho mỗi ứng dụng. Có thể tìm được các ứng "
+"dụng nhờ tìm duyệt danh sách các danh mục hoặc bằng cách tìm kiếm. Nó cũng "
+"cho phép bạn cập nhật hệ thống của mình bằng một bản cập nhật ngoại tuyến."
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "Bảng tổng thể"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "Bảng chi tiết"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "Bảng đã cài đặt"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "Bảng cập nhật"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "Chi tiết cập nhật"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1524
+msgid "The GNOME Project"
+msgstr "Dự án GNOME"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "Cài đặt một tệp appstream vào một vị trí trong hệ thống"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "Đang cài đặt một tệp appstream vào một vị trí trong hệ thống"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "Danh sách các dự án tương thích"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr ""
+"Đây là danh sách các dự án tương thích mà chúng ta nên hiển thị như GNOME, "
+"KDE và XFCE."
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "Có quản lý các cập nhật và nâng cấp trong Phần mềm GNOME"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"Nếu bị vô hiệu hóa, Phần mềm GNOME sẽ ẩn bảng cập nhật và cũng không thực "
+"hiện bất kỳ hành động cập nhật hay nâng cấp tự động nào."
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "Tự động tải xuống và cài đặt bản cập nhật"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"Khi được kích hoạt, Phần mềm GNOME sẽ tự động tải về và cài đặt các bản cập "
+"nhật dưới nền, cũng cài đặt những cái không yêu cầu phải khởi động lại."
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "Cảnh báo người dùng về phần mềm được cập nhật ở dưới nền hệ thống"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr ""
+"Nếu cho phép, Phần mềm GNOME cảnh báo người dùng về các cập nhật cái mà xảy "
+"ra trong khi người dùng nghỉ."
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "Có tự động làm mới khi đang duy trì kết nối được đo lưu lượng không"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"Nếu được kích hoạt, Phần mềm GNOME sẽ tự động làm mới trên nền ngay cả khi "
+"sử dụng kết nối được đo lưu lượng (sẽ dẫn đến việc tải về lý lịch dữ liệu, "
+"kiểm tra cập nhật, v.v., có thể làm phát sinh chi phí cho người dùng)."
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "Dù đó là lần đầu tiên chạy Phần mềm GNOME"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "Hiển thị đánh giá bằng sao kế bên các ứng dụng"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "Các ứng dụng bộ lọc dựa trên bộ nhánh mặc định cho điều khiển từ xa"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr ""
+"Các ứng dụng không miễn phí đều hiển thị một hộp thoại cảnh báo trước khi "
+"cài đặt"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"Khi các ứng dụng không miễn phí được cài đặt, một hộp thoại cảnh báo có thể "
+"sẽ hiển thị. Mục này kiểm soát việc có bỏ hộp thoại đó không."
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "Một danh sách các ứng dụng phổ biến"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr ""
+"Một danh sách các ứng dụng để sử dụng, đè lên những ứng dụng được hệ thống "
+"định nghĩa."
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "Nhãn thời gian kiểm tra cập nhật gần nhất"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "Dấu thời gian truy cập thông báo nâng cấp gần nhất"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr ""
+"Dấu thời gian của lần cập nhật bảo mật đầu tiên, đã xóa sau khi cập nhật"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "Dấu vết thời gian cập nhật cuối cùng"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr ""
+"Dấu vết thời gian cuối cùng khi hệ thống trực tuyến và nhận bất kỳ bản cập "
+"nhật nào"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr ""
+"Độ tuổi tính theo giây để xác định ảnh chụp màn hình ngược tuyến vẫn còn "
+"hiệu lực"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"Chọn giá trị lớn hơn sẽ có nghĩa là giảm thời gian trễ trọn vòng đến máy chủ "
+"từ xa, nhưng sẽ kéo dài thời gian hiển thị cho người dùng thấy các cập nhật "
+"về ảnh chụp màn hình. Giá trị bằng 0 nghĩa là không bao giờ kiểm tra máy chủ "
+"xem liệu hình ảnh đã tồn tại trong bộ nhớ đệm."
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "Máy chủ sử dụng để đánh giá ứng dụng"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "Điểm pháp sư tối thiểu để đánh giá"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "Đánh giá với karma nhỏ hơn con số này sẽ không được hiển thị."
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "Danh sách các nguồn chính thức không nên được xem là bên thứ ba"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "Một danh sách các kho chính thức có thể coi là phần mềm tự do"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr ""
+"Địa chỉ URL cấp phép để sử dụng khi một ứng dụng có thể coi là phần mềm miễn "
+"phí"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr ""
+"Cài đặt các ứng dụng tích hợp sẵn cho mọi người dùng trên hệ thống nếu có thể"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "Cho phép truy cập vào hộp thoại Các kho chứa Phần mềm"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "Cung cấp các bản nâng cấp cho các bản phát hành trước"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr ""
+"Hiển thị một số yếu tố giao diện người dùng cho người dùng biết rằng ứng "
+"dụng là không tự do"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "Hiển thị lời nhắc cài đặt các nguồn phần mềm không tự do"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr ""
+"Hiển thị dung lượng đã cài đặt cho các ứng dụng trong danh sách các ứng dụng "
+"đã cài đặt"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr ""
+"'https://vi.wikipedia.org/wiki/Ph%E1%BA%A7n_m%E1%BB%81m_s%E1%BB%9F_h%E1%BB"
+"%AFu_%C4%91%E1%BB%99c_quy%E1%BB%81n'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "URI giải thích phần mềm sở hữu độc quyền và không miễn phí"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr ""
+"Một danh sách các URL chỉ dẫn đến các tệp appstream sẽ được tải về một thư "
+"mục thông tin ứng dụng"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr ""
+"Cài đặt các file AppStream vào một vị trí dễ tiếp cận trên toàn hệ thống cho "
+"tất cả người dùng"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "Bật kho phần mở rộng GNOME Shell"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr ""
+"Một chuỗi lưu trữ id tài khoản gnome trực tuyến được sử dụng để đăng nhập"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "Cài đặt Phần mềm"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "Cài đặt phần mềm đã chọn vào hệ thống"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "Chọn tất cả"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "Chọn Không có"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "_Kho Phần mềm"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "_Tuỳ thích cập nhật phần mềm"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "Phần mềm"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "Trở lại"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "_Khám phá"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "_Đã cài đặt"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "_Bản cập nhật"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "Tìm kiếm"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "Mã nguồn"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "Kho Phần mềm"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "Kiểm nghiệm ổ đĩa"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "Cài đặt Mạng"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "Khởi động lại ngay"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "Thông tin thêm"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "Tự động cập nhật bị tạm dừng"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "Tì_m thêm nữa"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "Tập tin nội bộ"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "Gói"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "Đang chờ xử lý"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "Đã cài đặt"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "Đang cài đặt"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "Đang xóa"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"Chế độ khởi chạy: \"bản cập nhật\", \"đã cập nhật\", \"đã cài đặt\" hoặc "
+"\"tổng quan\""
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "CHẾ_ĐỘ"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "Tìm kiếm các ứng dụng"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "TÌM_KIẾM"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "Hiển thị chi tiết ứng dụng (sử dụng ID ứng dụng)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "Hiển thị thông tin chi tiết về ứng dụng (sử dụng tên gói)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "TÊN_GÓI"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "Cài đặt ứng dụng (sử dụng ID ứng dụng)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "Mở một tập tin package trong hệ thống"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "TÊN_TẬP_TIN"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"Kiểu tương tác cần có cho hành động này: có thể là \"không\", \"thông báo\" "
+"hoặc \"đầy đủ\""
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "Hiển thị thông tin gỡ rối chi tiết"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "Cài đặt bất kỳ bản cập nhật đang chờ xử lý nào trong nền"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "Hiển thị tuỳ thích cập nhật phần mềm"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "Thoát tiến trình đang chạy"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "Thích nguồn tập tin cục bộ hơn là AppStream"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "Hiển thị số phiên bản"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr "Nhóm Việt hóa GNOME <gnome-vi-list@gnome.org>"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "Giới thiệu Phần mềm"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "Một cách hay để quản lý phần mềm trên hệ thống của bạn."
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "Rất tiếc! Không có bất cứ thông tin nào cho ứng dụng đó."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "Truy cập website"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "Cài đặt..."
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "Hủy"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "Cài đặt"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "Cập nhật"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "Xóa"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "Không thể sử dụng thiết bị trong suốt quá trình cập nhật."
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "Yêu cầu quyền bổ sung"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "Máy chủ %s yêu cầu đăng nhập (lĩnh vực %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "Phải đăng nhập"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "_Hủy"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "Đăn_g nhập"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "Tài kh_oản"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "Mật _khẩu"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "Khác"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "Tất cả"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "Nổi bật"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "Nổi bật %s"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "Đánh giá"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "Tên"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "Hiện"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "Trình đơn bộ lọc thể loại con"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "Sắp xếp"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "Trình đơn sắp xếp phân loại con"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "Vui lòng nhập một số từ 1 đến %u: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "Chọn một ứng dụng:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "Các cập nhật HĐH hiện đã được cài đặt"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "Các bản cập nhật vừa được cài đặt gần đây có thể được xem lại"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s giờ đã được cài đặt"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "Phải khởi động lại để các thay đổi được áp dụng."
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "Ứng dụng sẵn sàng để sử dụng."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "Khởi động lại"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "Khởi chạy"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "Cài đặt Phần mềm Bên thứ ba?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "Kích hoạt Kho Phần mềm Bên Thứ ba?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s không phải là <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">phần mềm nguồn mở và miễn phí</a>, phần mềm này do “%s” "
+"cung cấp."
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s được cung cấp bởi “%s”."
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "Cần phải kích hoạt kho phần mềm để tiếp tục cài đặt."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "Việc cài đặt hoặc sử dụng %s có thể là trái phép tại một số quốc gia."
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr ""
+"Việc cài đặt hay sử dụng bộ mã hóa - giải mã này ở một số nước có thể là phi "
+"pháp."
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "Không Cảnh báo Lại nữa"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "Cho phép và Cài đặt"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "Lỗi chi tiết từ trình quản lý gói phần mềm như sau:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "Chi tiết"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "Các bản cập nhật đã được cài đặt"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "Phải khởi động lại để nó được áp dụng."
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "Không phải Bây giờ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "Không có nội dung bạo lực hoạt họa"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "Các nhân vật hoạt hình trong các tình huống nguy hiểm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "Các nhân vật hoạt hình với mâu thuẫn dữ dội"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "Đồ họa cảnh bạo lực với các nhân vật hoạt hình"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "Không có nội dung bạo lực giả tưởng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "Các nhân vật trong các tình huống không an toàn dễ dàng xa rời thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "Các nhân vật có mâu thuẫn dữ dội có thể dễ dàng phân biệt với thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "Bạo lực đồ họa dễ dàng phân biệt với thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "Không có nội dung bạo lực thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "Các nhân vật thực tế ôn hòa trong các tình huống không an toàn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "Miêu tả nhân vật thực tế trong trạng thái vô cùng mâu thuẫn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "Đồ họa cảnh bạo lực với các nhân vật thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "Không có nội dung chém giết"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "Cảnh giết chóc phi thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "Sự giết chóc thực tế"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "Diễn tả cảnh đổ máu và phanh thây"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "Không bạo lực tình dụng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "Cưỡng hiếp hoặc hành vi tình dục bạo lực khác"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "Không nhắc đến rượu bia"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "Dẫn chiếu đến các thức uống có cồn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "Sử dụng các đồ uống có cồn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "Không nhắc đến thuốc cấm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "Nhắc đến các loại thuốc cấm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "Sử dụng ma túy trái phép"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "Dẫn chiếu đến các sản phẩm thuốc lá"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "Dẫn chiếu đến các sản phẩm thuốc lá"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "Sử dụng các sản phẩm thuốc lá"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "Không có bất kỳ loại nội dung khỏa thân nào"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "Ảnh khoả thân nghệ thuật ngắn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "Ảnh khoả thân kéo dài"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "Không dẫn chiếu hoặc mô tả bản năng tình dục"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "Các dẫn chiếu hoặc mô tả mang tính khiêu khích"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "Diễn tả hoặc nhắc đến nội dung tình dục"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "Đồ họa hành vi giới tính"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "Không có loại nội dung báng bổ nào"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "Sử dụng lời lẽ tục tĩu ở mức nhẹ hoặc không thường xuyên"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "Sử dụng từ ngữ thô tục ở mức trung bình"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "Sử dụng từ ngữ thô tục ở mức mạnh hay thường xuyên"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "Không đùa cợt không thích hợp"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "Hài hước vui nhộn"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "Đùa cợt tục tĩu hoặc khiếm nhã"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "Đùa cợt người lớn hoặc về giới tính"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "Không có dạng ngôn ngữ mang tính kỳ thị nào"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "Tính chất cấm đoán đối với một nhóm người cụ thể"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "Sự phân biệt đối xử được tạo ra để gây tổn thương tinh thần"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr ""
+"Sự phân biệt đối xử rõ rệt về giới tính, thiên hướng tình dục, sắc tộc hoặc "
+"tôn giáo"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "Không quảng cáo dưới mọi hình thức"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "Quảng Cáo Sản Phẩm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr ""
+"Dẫn chiếu rõ ràng đến các thương hiệu hoặc sản phẩm có nhãn hiệu cụ thể"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "Người dùng được khuyến khích mua các mặt hàng cụ thể ngoài đời thật"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "Không có dạng nội dung cờ bạc nào"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "Cờ bạc về các sự kiện ngẫu nhiên bằng hiện vật hoặc thẻ tín dụng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "Chơi cờ bạc bằng tiền \"ảo\""
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "Đánh bạc bằng tiền thật"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "Không có khả năng tiêu tiền"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "Người dùng được khuyến khích quyên góp tiền thật"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "Khả năng tiêu tiền thật trong ứng dụng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "Không thể trò chuyện với những người dùng khác"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "Tương tác giữa những người dùng mà không có tính năng chat"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "Tính năng chat vừa phải giữa những người dùng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "Tính năng chát không bị kiểm soát giữa những người dùng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "Không có cách nào trò chuyện với người dùng khác"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "Không có tính năng điều khiển âm thanh hoặc video những người dùng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr ""
+"Không chia sẻ tên người dùng hay địa chỉ thư điện tử dùng trên mạng xã hội"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "Chia sẻ tên người dùng mạng xã hội hoặc địa chỉ thư điện tử"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "Không chia sẻ thông tin người dùng với các bên thứ ba"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "Kiểm tra phiên bản ứng dụng mới nhất"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr ""
+"Chia sẻ dữ liệu chẩn đoán không cho phép người khác xác định người dùng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr ""
+"Chia sẻ thông tin người dùng cái mà làm cho người khác định danh người dùng"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "Không chia sẻ vị trí địa lý với những người dùng khác"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "Chia sẻ vị trí địa lý với những người dùng khác"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "Không tham chiếu đồng tính luyến ái"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "Tham chiếu gián tiếp về đồng tính luyến ái"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "Hôn nhau giữa những người cùng giới tính"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "Hành vi tình dục đồ họa giữa những người cùng giới tính"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "Không tham chiếu đến mại dâm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "Tham chiếu gián tiếp đến mại dâm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "Tham chiếu trực tiếp đến mại dâm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "Mô tả đồ họa về hành vi mại dâm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "Không tham chiếu đến ngoại tình"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "Tham chiếu gián tiếp đến ngoại tình"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "Tham chiếu trực tiếp đến ngoại tình"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "Mô tả đồ họa về hành vi ngoại tình"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "Không có nhân vật tình dục"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "Nhân vật Scantily clad con người"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "Nhân vật con người tính dục công khai"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "Không tham chiếu đến xúc phạm"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "Mô tả hoặc tham chiếu đến sự xúc phạm lịch sử"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "Miêu tả sự xúc phạm con người thời hiện đại"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "Hình vẽ miêu tả sự xúc phạm con người thời hiện đại"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "Không hiển thị hài cốt người chết"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "Hiển thị hài cốt người chết"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "Hài cốt con người đã chết cái mà đab phân hủy thành nhiều mảnh"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "Mô tả đồ họa về sự xúc phạm cơ thể con người"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "Không tham chiếu đến chế độ nô lệ"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "Mô tả hoặc tham chiếu đến chế độ nô lệ lịch sử"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "Mô tả chế độ nô lệ thời hiện đại"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "Mô tả đồ họa về chế độ nô lệ thời hiện đại"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "Chung"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "Tất cả"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "Chỉ người lớn"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "Trưởng thành"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "Tuổi tin"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "Mọi người 10+"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "Mọi người"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "Thời thơ ấu"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "Một ứng dụng"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s đang yêu cầu bổ sung hỗ trợ định dạng tập tin."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "Yêu Cầu Các Loại MIME Bổ Sung"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s đang yêu cầu bổ sung kiểu chữ."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "Yêu cầu Bổ sung Kiểu chữ"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s đang yêu cầu bổ sung bộ mã hóa - giải mã đa phương tiện."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "Cần có Bộ Mã hóa - Giải mã Đa phương tiện Bổ sung"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s đang yêu cầu bổ sung trình điều khiển máy in."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "Phải Bổ sung Trình Điều khiển Máy in"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s đang yêu cầu các gói bổ sung."
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "Phải Bổ sung Gói phần mềm"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "Tìm trong Phần mềm"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "Đang xóa..."
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "Cài đặt đang chờ..."
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "Cập nhật đang chờ..."
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "Đang chuẩn bị…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "Chỉ có thể dùng ứng dụng này khi có kết nối internet hoạt động."
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "_Cài đặt"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "_Cài đặt..."
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "_Khởi chạy"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "_Xóa bỏ"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "Mạng"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "Không thể liên lạc qua mạng"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "Dịch vụ Hệ thống"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "Có thể truy cập các dịch vụ D-Bus trên bus hệ thống"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "Dịch vụ phiên làm việc"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "Có thể truy cập các dịch vụ D-Bus trên bus phiên làm việc"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "Thiết bị"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "Không thể truy cập các tập tin thiết bị hệ thống"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "Thư mục cá nhân (HOME)"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "Có thể xem, sửa và tạo các tập tin"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "Có thể xem các tập tin"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "Hệ thống tập tin"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "Thư mục tải về"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "Các cài đặt"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "Có thể xem và thay đổi bất kỳ cài đặt nào"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "Hệ thống màn hình cũ"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "Dùng một hệ thống hiển thị cũ và thiếu an toàn"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "Thoát khỏi sandbox"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "Có thể thoát khỏi sandbox và phá vỡ bất kỳ hạn chế nào khác"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "Ứng dụng này được sandbox đầy đủ."
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr ""
+"Không thể xác định phần nào của hệ thống mà ứng dụng này truy nhập. Điều này "
+"là điển hình cho các ứng dụng cũ."
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "Không rõ"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "Không bao giờ"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "Không rõ"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "Thấp"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "Trung bình"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "Cao"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "Không xác định"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "Bạn cần truy cập internet để viết bình luận"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "Không tìm thấy “%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "Phạm vi công cộng"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://en.wikipedia.org/wiki/Public_domain"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "Phần mềm Tự do"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "Người dùng bị ràng buộc trong các quyền sử dụng sau đây:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "Thêm thông tin"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "Trang thông tin chi tiết"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "Đang tải về"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "_Cập nhật"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "_Thêm phím tắt"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "_Xóa lối tắt"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "Không có ảnh màn hình nào được cung cấp"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "Kho phần mềm đã được bao gồm"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr ""
+"Ứng dụng này bao gồm một kho phần mềm cung cấp các cập nhật cũng như quyền "
+"truy cập đến phần mềm khác."
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "Chưa có kho Phần mềm nào được bao gồm"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr ""
+"Ứng dụng này không bao gồm một kho phần mềm. Ứng dụng sẽ không được cập nhật "
+"lên các phiên bản mới."
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr ""
+"Phần mềm này đã được nhà phân phối của bạn cung cấp và không nên được thay "
+"thế."
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "Kho phần mềm được xác định"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr ""
+"Việc thêm kho phần mềm này sẽ cho phép bạn truy cập vào phần mềm bổ sung và "
+"các bản nâng cấp."
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "Chỉ sử dụng các kho phần mềm mà bạn tin tưởng."
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "Trang _web"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "_Quyên góp"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "Được địa phương hóa theo Ngôn ngữ của bạn"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "Tài liệu"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "Phát hành tích cực"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "Tích hợp Hệ thống"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "Đã bảo vệ bằng sandbox"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "Kênh"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "Phiên bản"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "Đánh giá Độ tuổi"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "Quyền hạn"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "Đã cập nhật"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "Danh mục"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "Kích cỡ đã Cài đặt"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "Kích cỡ Tải xuống"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "Nhà phát triển"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "Cấp quyền"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "Miễn phí"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "Quyền sở hữu"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "Tiện ích bổ sung"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "Các tiện tích bổ sung được chọn sẽ được cài đặt cùng với ứng dụng."
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "Đánh giá"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "_Viết đánh giá"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "_Hiển thị thêm"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr ""
+"Điều này có nghĩa là phần mềm có thể được chạy, sao chép, phân phối, nghiên "
+"cứu và chỉnh sửa miễn phí."
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "Phần mềm Sở hữu độc quyền"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"Điều này có nghĩa là phần mềm này được sở hữu bởi một cá nhân hoặc một công "
+"ty. Thông thường, việc sử dụng phần mềm này sẽ bị giới hạn và thường không "
+"thể truy cập được mã nguồn của nó."
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "Bản quyền Phần mềm Không xác định"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "Các điều khoản cấp phép cho phần mềm này còn khuyết."
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "Ứng dụng được đánh giá như thế này vì nó có các tính năng:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "Không có thông tin chi tiết nào khả dụng cho đánh giá này."
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " và "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr ", "
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "Kiểu chữ có sẵn cho bộ chữ viết %s"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "Phần mềm khả dụng dành cho %s"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "Không thể Tìm thấy Phần mềm theo Yêu cầu"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "Không tìm thấy %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "trên website"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "Không có sẵn các ứng dụng cung cấp tập tin %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr ""
+"Có thể tìm thấy thông tin về %s cũng như các tùy chọn về cách lấy được các "
+"ứng dụng bỏ lỡ trên trang web %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "Không có sẵn các ứng dụng để hỗ trợ %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s không khả dụng."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"Thông tin về %s, cũng như các tùy chọn về cách có thể tìm được ứng dụng hỗ "
+"trợ định dạng này %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "Không có phông chữ nào hỗ trợ kịch bản %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr ""
+"Có thể tìm thấy thông tin về %s cũng như các tùy chọn về cách có được thêm "
+"kiểu chữ trên trang web %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "Không có sẵn các bộ mã hóa-giải mã add-on cho định dạng %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"Thông tin về %s, cũng như các tùy chọn về cách có thể tìm được codec phát "
+"được định dạng này %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "Không có các tài nguyên Plasma khả dụng để hỗ trợ %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr ""
+"Thông tin về %s, cũng như các tùy chọn về cách có thể tìm được tài nguyên "
+"Plasma bổ sung %s."
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "Không có trình điều khiển máy in khả dụng cho %s."
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"Có thể tìm thấy thông tin về %s cũng như các tùy chọn về cách có được một "
+"trình điều khiển hỗ trợ máy in này trên trang web %s."
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "website này"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] ""
+"Rất tiếc, không thể tìm thấy %s mà bạn đang tìm kiếm. Vui lòng xem %s để "
+"biết thêm thông tin."
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "Không tìm được bất kỳ kết quả tìm kiếm nào"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "Định dạng tập tin %s"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "Trang mã hóa - giải mã"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "Chào mừng"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "Chào mừng đến Phần mềm"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"Phần mềm cho phép bạn cài đặt mọi phần mềm bạn cần chỉ từ một nơi. Hãy xem "
+"đề xuất của chúng tôi, duyệt các danh mục hoặc tìm kiếm các ứng dụng mà bạn "
+"muốn."
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "_Cùng mua sắm"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "Đã gỡ bỏ"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "Đã cài đặt"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "Đã cập nhật"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "Không xác định"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%e %B %Y"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "Lịch sử"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "Ứng dụng Hệ thống"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "Trang đã cài đặt"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "Ca-ta-lô phần mềm đang được tải xuống"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "Đang tải trang"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "Đang khởi động..."
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"Mạng hiện thời được đo đếm. Kết nối bằng gói dữ liệu theo lưu lượng sử dụng "
+"có giới hạn dữ liệu hoặc các khoản phí được liên kết với chúng. Do đó, để "
+"tiết kiệm, các bản cập nhật tự động bị tạm dừng.\n"
+"\n"
+"Cập nhật tự động sẽ được tiếp tục khi một mạng dùng thoải mái trở nên có "
+"sẵn. Cho đến lúc đó, vẫn có thể cài đặt bản cập nhật theo cách thủ công.\n"
+"\n"
+"Ngoài ra, nếu mạng hiện tại đã được xác định không chính xác là đang được "
+"đo, thiết đặt này có thể được thay đổi."
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "Mở _Cài đặt Mạng"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "Trang kiểm soát"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "Không có đánh giá nào để kiểm soát"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "hệ thống"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "người dùng"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "Nhánh"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "Định dạng"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "Cài đặt"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "Thêm..."
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "Ứng dụng Audio & Video Được Đề xuất"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "Trò chơi được Đề xuất"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "Ứng dụng Đồ họa được Đề xuất"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "Ứng dụng về Hiệu suất Khuyên dùng"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "Truy cập phần mềm bổ sung từ các nguồn bên thứ ba được chọn."
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr ""
+"Một số phần mềm này là độc quyền và do đó có những hạn chế về việc sử dụng, "
+"chia sẻ và truy cập vào mã nguồn."
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "Tìm hiểu thêm..."
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "Bật"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "Trang tổng quan"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "Kích hoạt Kho Phần mềm Bên Thứ ba?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "Kế trước"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "Kế tiếp"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "Lựa chọn của Biên tập viên"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "Bản phát hành gần đây"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "Danh mục"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "Không Tìm thấy Dữ liệu Ứng dụng"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "Chuẩn bị %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "Bạn có chắc là bạn muốn gỡ kho %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr ""
+"Mọi ứng dụng từ %s sẽ được gỡ bỏ, và bạn sẽ phải cài đặt lại nguồn để sử "
+"dụng lại các ứng dụng này."
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "Bạn có chắc là bạn muốn gỡ %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s sẽ được xóa bỏ, và bạn sẽ phải cài đặt lại để có thể sử dụng."
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s (Đã cài đặt)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "Tuỳ thích cập nhật phần mềm"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "Tự động cập nhật"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr ""
+"Tự động cập nhật bị tắt khi đang kết nối trên thiết bị di dộng hay bị đo lưu "
+"lượng."
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "Tự động thông báo cập nhật bật"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "Hiện thông báo khi bản cập nhật đã được cài đặt tự động."
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"Một số phần mềm hiện được cài đặt không tương thích với %s. Nếu bạn tiếp "
+"tục, các phần mềm sau sẽ bị tự động gỡ bỏ trong quá trình nâng cấp:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "Phần mềm Không tương thích"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "_Tiếp tục"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "%u ứng dụng đã được cài đặt"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "Đã cài đặt %u tiện ích"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u ứng dụng"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u tiện ích"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s và %s đã được cài đặt"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "Xóa “%s”?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "Tắt “%s”?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr ""
+"Phần mềm đã được cài đặt từ kho lưu trữ này sẽ không còn nhận được bản cập "
+"nhật, bao gồm các bản sửa lỗi bảo mật."
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "Tắt"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "hệ điều hành"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "Các kho này bổ sung phần mềm mặc định được cung cấp bởi %s."
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "Kho Phần mềm Bên Thứ ba"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "Không có kho Bổ sung"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "_Bật"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "_Xóa bỏ..."
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "_Tắt"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "Đang bật"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "Đang tắt"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "Bật"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "Bị tắt"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "Ghét nó"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "Không thích nó"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "Dùng ổn"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "Thích nó"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "Yêu nó"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "Vui lòng dành thêm thời gian để viết đánh giá"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "Vui lòng chọn một loại xếp hạng sao"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "Tóm tắt quá ngắn"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "Tóm tắt quá dài"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "Mô tả quá ngắn"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "Mô tả quá dài"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "Đăng Bài đánh giá"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "_Đăng"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "Tóm tắt"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr ""
+"Viết một câu tóm tắt ngắn về đánh giá của bạn, ví dụ: \"Ứng dụng tuyệt vời, "
+"sẽ giới thiệu mọi người dùng nó\"."
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "Đánh giá"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr ""
+"Bạn nghĩ gì về ứng dụng này? Hãy cố đưa ra các lý do cho nhận xét của bạn."
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"Tìm dữ liệu nào được gửi trong <a href=\"https://odrs.gnome.org/privacy"
+"\">chính sách bảo mật</a> của chúng tôi."
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "tổng số đánh giá"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr ""
+"Bạn có thể báo cáo đánh giá về hành vi lăng mạ, thô lỗ, hoặc phân biệt đối "
+"xử."
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr ""
+"Khi được báo cáo, một đánh giá sẽ bị ẩn đến khi được quản trị viên kiểm tra."
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "Báo Cáo Đánh Giá?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "Báo cáo"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "Đánh giá này có hữu ích đối với bạn không?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "Có"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "Không"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "Thờ ơ"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "Báo cáo..."
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "Xóa bỏ..."
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "Không tìm thấy ảnh chụp màn hình"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "Không thể tải hình ảnh"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "Không tìm thấy kích cỡ ảnh chụp màn hình"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "Không thể tạo bộ nhớ đệm"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "Ảnh chụp màn hình không hợp lệ"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "Ảnh chụp màn hình không khả dụng"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "Ảnh chụp màn hình"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "Thêm %u nội dung trùng khớp"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "Tìm kiếm trang"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "Không tìm thấy Ứng dụng"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "Không thể tải về các cập nhật phần sụn từ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "Không thể tải về các cập nhật từ %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "Không thể cập nhật các cập nhật"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr ""
+"Không thể tải về các bản cập nhật: cần truy cập internet mà không có sẵn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "Không thể tải về các cập nhật từ %s: không đủ chỗ trống trên ổ đĩa"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "Không thể tải về các cập nhật: không đủ chỗ trống trên ổ đĩa"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "Không thể tải về các cập nhật: phải có chứng thực"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "Không thể tải về các bản cập nhật: xác thực không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "Không thể tải về các cập nhật: bạn không có quyền cài đặt phần mềm"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "Không thể nhận danh sách các cập nhật"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "Không thể cài đặt %s do không tải về được từ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "Không thể cài đặt %s do không tải về được"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "Không thể cài đặt %s do %s chạy thực không khả dụng"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "Không thể cài đặt %s do không được hỗ trợ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr ""
+"Không thể cài đặt: quyền truy cập internet là bắt buộc nhưng không khả dụng"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "Không thể cài đặt: ứng dụng có định dạng không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "Không thể cài đặt %s: không đủ chỗ trống trên ổ đĩa"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "Không thể cài đặt %s: phải có chứng thực"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "Không thể cài đặt %s: chứng thực không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "Không thể cài đặt %s: bạn không có quyền cài đặt phần mềm"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "Không thể cài đặt %s: Cần phải có nguồn điện xoay chiều"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "Không thể cài đặt %s: Pin quá yếu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "Không thể cài đặt %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "Không thể cập nhật %s từ %s do không tải về được"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "Không thể cập nhật %s do không tải về được"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "Không thể cài đặt cập nhật %s do không tải về được"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "Không thể cài đặt cập nhật do không tải về được"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "Không thể cập nhật: cần truy cập internet nhưng không có sẵn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "Không thể cập nhật %s: không đủ chỗ trống trên ổ đĩa"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "Không thể cài đặt cập nhật: không đủ chỗ trống trên đĩa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "Không thể cập nhật %s: cần có chứng thực"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "Không thể cài đặt cập nhật: phải có chứng thực"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "Không thể cập nhật %s: chứng thực không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "Không thể cài đặt cập nhật: chứng thực không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "Không thể cập nhật %s: bạn không được phép cập nhật phần mềm"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "Không thể cập nhật nâng cấp: bạn không được phép cập nhật phần mềm"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "Không thể cập nhật %s: cần phải có nguồn điện xoay chiều"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "Không thể cài đặt các cập nhật: Cần phải có nguồn điện xoay chiều"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "Không thể cài đặt cập nhật %s: Pin quá yếu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "Không thể cài đặt các cập nhật: Pin quá yếu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "Không thể cập nhật %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "Không thể cài đặt các cập nhật"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "Không thể nâng cấp lên %s từ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "Không thể nâng cấp lên %s do không tải về được"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "Không thể nâng cấp lên %s: cần truy cập internet nhưng không có sẵn"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "Không thể nâng cấp lên %s: không đủ chỗ trống trên ổ đĩa"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "Không thể nâng cấp lên %s: cần có chứng thực"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "Không thể nâng cấp lên %s: chứng thực không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "Không thể nâng cấp lên %s: bạn không có quyền nâng cấp"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "Không thể nâng cấp lên %s: cần phải có nguồn điện xoay chiều"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "Không thể nâng cấp lên %s: Pin quá yếu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "Không thể nâng cấp lên %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "Không thể gỡ bỏ %s: cần có chứng thực"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "Không thể gỡ bỏ %s: chứng thực không hợp lệ"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "Không thể xóa bỏ %s: bạn không được phép xóa bỏ phần mềm"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "Không thể di chuyển %s: Cần phải có nguồn điện xoay chiều"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "Không thể gỡ bỏ %s: Pin quá yếu"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "Không thể gỡ bỏ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "Không thể khởi chạy %s: %s không được cài đặt"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr ""
+"Không đủ chỗ trống trên ổ đĩa — giải phóng một ít chỗ trống trên và thử lại"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "Rấc tiếc, có lỗi xảy ra"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "Gặp lỗi khi cài đặt tập tin: không được hỗ trợ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "Gặp lỗi khi cài đặt tập tin: quá trình chứng thực thất bại"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "Gặp lỗi khi cài đặt: không được hỗ trợ"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "Gặp lỗi khi cài đặt: quá trình chứng thực thất bại"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "Không thể liên hệ %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "Cần phải khởi động lại %s để sử dụng các plugin mới."
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr ""
+"Cần phải khởi động lại ứng dụng này để sử dụng các tiện ích (plugin) mới."
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "Cần phải cắm điện lưới cho máy"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "Pin yếu quá"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "Nguồn: %s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s (Đang cài đặt)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s (Đang gỡ bỏ)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "_Gỡ bỏ tất cả"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "Không có mô tả cập nhật."
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "Đã cài đặt vào %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "Cập Nhật Đã Cài Đặt"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "Các phần bổ sung"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "Các tệp đã gỡ"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "Các cập nhật"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "Hạ cấp"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "Chưa có cập nhật nào được cài đặt trên hệ thống này."
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "Chờ Cập nhật Bảo mật"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "Bạn nên cài đặt các bản cập nhật quan trọng ngay bây giờ"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "Khởi động lại & Cài đặt"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "Đã có các Bản cập nhật Phần mềm"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr ""
+"Các cập nhật ứng dụng và hệ điều hành quan trọng đã sẵn sàng để được cài đặt"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "Xem"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u Ứng dụng đã cập nhật -- Yêu cầu khởi động lại"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u Ứng dụng đã cập nhật"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s đã được cập nhật."
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "Bạn cần khởi động lại ứng dụng."
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s và %s vừa mới được cập nhật."
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u ứng dụng cần được khởi động lại."
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "bao gồm %s, %s và %s."
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "Cập nhật Hệ điều hành Không Khả dụng"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "Nâng cấp để tiếp tục nhận các cập nhật bảo mật."
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "Đã có một phiên bản mới của %s để cài đặt"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "Có Bản Cập Nhật Phần Mềm"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "Không Thể Cập Nhật Ứng Dụng"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "Không thể cài đặt một bản cập nhật hệ điều hành quan trọng."
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "Hiển thị Chi tiết"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "Nâng cấp xong hệ thống"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "Chào mừng đến với %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "Đã cài đặt các Bản cập nhật Phần mềm"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "Các bản cập nhật Hệ điều hành quan trọng đã được cài đặt."
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "Rà soát"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "Cập nhật gặp lỗi"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "Hệ thống này đã được cập nhật."
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "Bản cập nhật đã bị hủy bỏ."
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr ""
+"Cần truy cập Internet nhưng đã không có sẵn. Vui lòng đảm bảo rằng bạn có "
+"truy cập internet và thử lại."
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr ""
+"Có vấn đề về an ninh với bản cập nhật. Vui lòng tham vấn nhà cung cấp phần "
+"mềm của bạn để biết thêm chi tiết."
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "Dung lượng đĩa không đủ. Vui lòng xóa bớt dữ liệu và thử lại."
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"Chúng tôi rất tiếc: không cài đặt được bản cập nhật này. Vui lòng đợi bản "
+"cập nhật khác và thử lại. Nếu vấn đề còn tiếp diễn, hãy liên hệ với nhà cung "
+"cấp phần mềm của bạn."
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%l:%M %p"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "Hôm qua, %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "Hôm qua, %l:%M %p"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "Hai ngày trước"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "Cách đây ba ngày"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "Bốn ngày trước"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "Năm ngày trước"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "Sáu ngày trước"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "Một tuần trước"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "Hai tuần trước"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "Đang tìm kiếm các cập nhật mới..."
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "Đang thiết lập các cài đặt..."
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(Việc này có thể hơi mất thời gian)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "Lần cuối kiểm tra: %s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s không còn được hỗ trợ."
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "HĐH của bạn không còn được hỗ trợ."
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr ""
+"Điều này có nghĩa là distro EOL không nhận được những cập nhật bảo mật."
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "Bạn nên nâng cấp lên phiên bản mới hơn."
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "Có thể thu phí"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr ""
+"Việc kiểm tra các cập nhật trong khi sử dụng băng thông rộng di động có thể "
+"khiến bạn phải trả phí."
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "_Vẫn cứ xem"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "Không có Mạng"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "Cần truy cập Internet để tìm xem các bản cập nhật."
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "Đang kiểm tra..."
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "Kiểm tra cập nhật"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "Trang cập nhật"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "Phần mềm hiện đã cập nhật"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr ""
+"Tìm duyệt các bản cập nhật khi đang truy cập Internet băng rộng di động có "
+"thể khiến bạn bị phát sinh chi phí"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "_Cứ Kiểm tra"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "Kết nối mạng để tìm xem các bản cập nhật"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "_Cài đặt mạng"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "Các cập nhật được quản lý tự động"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "Khởi động lại & Cập nhật"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "Cập nhật Tất cả"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "Phần dẻo Tích hợp"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "Cần phải Khởi động lại"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "Các bản cập nhật Ứng dụng"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "Phần dẻo Thiết bị"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "_Tải xuống"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr ""
+"Bạn nên sao lưu dữ liệu dự phòng trước khi nâng cấp lên phiên bản mới hơn."
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "_Khởi động lại Ngay"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "Cập nhật sẽ được áp dụng khi máy tính khởi động lại."
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s Giờ đã sẵn sàng"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "Chờ để tải về %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "Đang tải về %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s Đã sẵn sàng để được Cài đặt"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "Một sự nâng cấp lớn, bổ sung thêm tính năng mới và trau chuốt hơn."
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "_Tìm hiểu thêm"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "Cài thêm, xóa hoặc cập nhật phần mềm trên máy tính này"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Bản cập nhật;Nâng cấp;Mã nguồn;Kho chứa mã;Ưu tiên;Cài đặt;Hủy cài đặt;"
+"Chương trình;Phần mềm;Ứng dụng;Cửa hàng;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "Tạo & Chỉnh sửa Audio"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "Trình Phát Nhạc"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "Trình gỡ lỗi"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE (Môi trường Phát triển Tích hợp)"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "Trí tuệ nhân tạo"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "Thiên văn học"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "Hóa học"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "Ngôn ngữ"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "Toán học"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "Robot học"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "Hành động"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "Phiêu lưu"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "Mái vòm"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "Hình khối"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "Bảng"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "Thẻ"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "Giả lập"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "Trẻ em"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "Lô-gíc"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "Nhập vai"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "Thể thao"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "Chiến lược"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "Đồ họa 3D"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "Nhiếp ảnh"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "Quét"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "Đồ họa Vector"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "Bộ xem"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "Lịch"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "Cơ sở dữ liệu"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "Tài chính"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "Trình Xử lý Văn bản"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "Kiểu chữ"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "Bộ mã hóa-giải mã"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "Nguồn nhập liệu"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "Các gói Ngôn ngữ"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "Bản địa hóa"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "Driver Phần cứng"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "Chát"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "Tin tức"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Trình duyệt Web"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "Trình soạn thảo Văn bản"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "Tất cả"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "Nổi bật"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "Nghệ thuật"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "Tiểu sử"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "Truyện tranh"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "Tiểu thuyết"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "Sức khỏe"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "Lịch sử"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "Lối sống"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "Chính trị"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "Thể thao"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "Phim & Nhạc"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "Công cụ dành cho nhà phát triển"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "Giáo dục & Khoa học"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "Trò chơi"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "Đồ họa & Nhiếp ảnh"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "Năng suất"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "Cộng đồng & Tin tức"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "Tùy thích"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "Các tiện ích"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "Cập nhật Hệ điều hành"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "Bao gồm cải thiện về hiệu suất, tính ổn định và bảo mật."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "Đang tải hình ảnh đặc sắc..."
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "HĐH Endless"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Bản cập nhật HĐH Endless với các tính năng và bản sửa lỗi mới."
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "Dịch vụ cập nhật EOS không thể lấy và áp dụng bản cập nhật."
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "Trình cài đặt Phần mềm GNOME trên toàn hệ thống Appstream"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "Không phân tách được các đối số dòng lệnh"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "Bạn cần ghi chính xác một tên tệp"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "Chỉ người dùng chủ mới có thể sử dụng chương trình này"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "Không kiểm định được loại nội dung"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "Không sao chép được"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "Đang tải thêm tập tin siêu dữ liệu..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "Đang tải xuống thông tin nâng cấp..."
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr ""
+"Nâng cấp hệ thống để cải thiện tính năng mới nhất, hiệu suất và sự ổn định."
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Hỗ trợ Flatpak"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr ""
+"Flatpak là một chương trình khung cho các ứng dụng máy tính chạy trên Linux"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "Đang tải siêu dữ liệu flatapak cho %s..."
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s cập nhật thiết bị"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s Cập nhật Hệ thống"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s Cập nhật Bộ điều khiển Nhúng"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s Cập nhật ME"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s Cập nhật ME doanh nghiệp"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s Cập nhật ME người tiêu dùng"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s Cập nhật điều khiển"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Cập nhật điều khiển Thunderbolt"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s Cập nhật Vi mã CPU"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s Cập nhật cấu hình"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "Đang tải chữ ký cập nhật firmware..."
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "Đang tải siêu dữ liệu cập nhật firmware..."
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "Hỗ trợ Nâng cấp Phần dẻo"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "Cung cấp hỗ trợ cho các bản nâng cấp phần dẻo"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "Đang tải xếp hạng ứng dụng..."
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "Hỗ trợ Đánh giá Desktop Mở (ODRS)"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr ""
+"ODRS là một dịch vụ cung cấp các nhận xét, bình luận của người dùng về các "
+"ứng dụng"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Kho Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Hỗ trợ Snap"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap (tệp ứng dụng chạy độc lập) là một gói ứng dụng Linux phổ quát"
+
+#~ msgid "Loading…"
+#~ msgstr "Đang tải..."
+
+#~ msgid "The application contains no age-inappropriate content."
+#~ msgstr "Ứng dụng có chứa nội dung không phù hợp với lứa tuổi."
+
+#~ msgid "Loading application details…"
+#~ msgstr "Đang tải chi tiết về ứng dụng..."
+
+#~ msgid "the documentation"
+#~ msgstr "tài liệu"
+
+#, c-format
+#~ msgid ""
+#~ "Unable to find the %s requested by %s. Please see %s for more information."
+#~ msgid_plural ""
+#~ "Unable to find the %s requested by %s. Please see %s for more information."
+#~ msgstr[0] ""
+#~ "Không thể tìm thấy %s cái được yêu cầu bởi %s. Vui lòng tham khảo %s để "
+#~ "biết thêm thông tin."
+
+#, c-format
+#~ msgid ""
+#~ "Unable to find the %s you were searching for. Please see %s for more "
+#~ "information."
+#~ msgid_plural ""
+#~ "Unable to find the %s you were searching for. Please see %s for more "
+#~ "information."
+#~ msgstr[0] ""
+#~ "Không thể tìm thấy %s mà bạn đang tìm kiếm. Vui lòng tham khảo %s để biết "
+#~ "thêm thông tin."
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "Hiển thị UI (giao diện người dùng) quản lý thư mục"
+
+#~ msgid "Folder Name"
+#~ msgstr "Tên Thư mục"
+
+#~ msgid "_Add"
+#~ msgstr "_Thêm"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "Thêm vào Thư Mục Ứng Dụng"
+
+#~ msgid "About %s"
+#~ msgstr "Giới thiệu %s"
+
+#, fuzzy
+#~| msgid "Updated"
+#~ msgid "Top Rated"
+#~ msgstr "Đã cập nhật"
+
+#~ msgid "Extension Settings"
+#~ msgstr "Cài đặt Phần mở rộng"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "Bạn tự chịu trách nhiệm trong việc sử dụng các tiện ích bổ sung. Nếu bạn "
+#~ "gặp bất kỳ vấn đề hệ thống nào, bạn nên tắt các tiện ích này."
+
+#~ msgid "Failed to load components"
+#~ msgstr "Gặp lỗi khi tải các thành phần"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "Đã xác thực CSS OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "Không thể tải file"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "Thay đổi chưa lưu"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "Đã tải danh sách ứng dụng."
+
+#~ msgid "Merge documents"
+#~ msgstr "Hợp nhất tài liệu"
+
+#~ msgid "Throw away changes"
+#~ msgstr "Hủy thay đổi"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "Mở File AppStream"
+
+#~ msgid "_Open"
+#~ msgstr "_Mở"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "Lưu tập tin AppStream"
+
+#~ msgid "_Save"
+#~ msgstr "_Lưu"
+
+#~ msgid "Failed to save file"
+#~ msgstr "Không thể lưu file"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "Đã xóa thiết kế banner %s."
+
+#~ msgid "Banner design deleted."
+#~ msgstr "Đã xóa thiết kế banner"
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "Có thay đổi chưa lưu trong danh sách ứng dụng"
+
+#~ msgid "Use verbose logging"
+#~ msgstr "Sử dụng phương pháp đăng nhập đa thông tin"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "Nhà thiết kế Banner Phần mềm GNOME"
+
+#~ msgid "No Designs"
+#~ msgstr "Không có Thiết kế"
+
+#~ msgid "Error message here"
+#~ msgstr "Gửi tin nhắn về lỗi tại đây"
+
+#~ msgid "App ID"
+#~ msgstr "ID Ứng dụng"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "Lựa chọn của Biên tập viên"
+
+#~ msgid "Category Featured"
+#~ msgstr "Hạng mục Nổi bật"
+
+#~ msgid "Undo"
+#~ msgstr "Hoàn tác"
+
+#~ msgid "Banner Designer"
+#~ msgstr "Nhà thiết kế Banner"
+
+#~ msgid "New Banner"
+#~ msgstr "Banner Mới"
+
+#~ msgid "Import from file"
+#~ msgstr "Nhập từ file"
+
+#~ msgid "Export to file"
+#~ msgstr "Xuất ra file"
+
+#~ msgid "Delete Design"
+#~ msgstr "Xóa Thiết kế"
+
+#~ msgid "Featured App"
+#~ msgstr "Ứng dụng Nổi bật"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "Nâng cấp Hệ điều hành"
+
+#~ msgid "Spacing"
+#~ msgstr "Giãn cách"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "Lượng không gian giữa trẻ em với nhau"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "Nhấp vào các mục để chọn"
+
+#~ msgid "Select"
+#~ msgstr "Chọn"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "_Thêm Vào Thư Mục…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "_Chuyển đến Thư mục..."
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "_Gỡ khỏi Thư mục"
+
+#~ msgid "Featured Applications"
+#~ msgstr "Ứng dụng Nổi bật"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "Thiết kế các banner đặc sắc cho Phần mềm GNOME"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Phần mềm;Ứng dụng;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Các tiện ích mở rộng"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Hỗ trợ Ứng dụng Web"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "Chạy các ứng dụng web phổ biến trên một trình duyệt"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "Kho phần mở rộng vỏ GNOME"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "Đang tải siêu dữ liệu cho phần mở rộng Shell..."
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "Phần mở rộng Hệ vỏ Gnome"
+
+#~ msgid "Whether to automatically perform updates"
+#~ msgstr "Có tự động tiến hành cập nhật hay không"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "Danh sách các mã nguồn bổ sung đã được kích hoạt trước đây"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr ""
+#~ "Danh sách các nguồn đã được kích hoạt trước đó khi cài đặt ứng dụng của "
+#~ "bên thứ ba."
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "Hiển thị phần mềm không miễn phí trong kết quả tìm kiếm"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr ""
+#~ "Một danh sách các nguồn không miễn phí có thể được tùy chọn kích hoạt"
+
+#~ msgid "Sorts the apps shown in the overview in alphabetical order"
+#~ msgstr ""
+#~ "Sắp xếp các ứng dụng hiển thị trong màn hình tổng quan theo thứ tự bảng "
+#~ "chữ cái"
+
+#~ msgid ""
+#~ "Overrides the name of the \"Featured\" entry in the side-filter (category "
+#~ "list)"
+#~ msgstr ""
+#~ "Ghi đè tên của mục \"Nổi bật\" trong bộ lọc bên (danh sách thể loại)"
+
+#~ msgid "system-software-install"
+#~ msgstr "hệ thống-phần mềm-cài đặt"
+
+#~ msgid "_All"
+#~ msgstr "_Tất cả"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "Hiển thị thông tin hồ sơ cá nhân cho dịch vụ"
+
+#~ msgid "Uninstall"
+#~ msgstr "Hủy cài đặt"
+
+#~ msgid "To continue you need to sign in."
+#~ msgstr "Bạn cần đăng nhập để thực hiện tiếp."
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "Để tiếp tục, bạn cần phải đăng nhập vào %s."
+
+#~ msgid "Email address"
+#~ msgstr "Địa chỉ email"
+
+#~ msgid "I have an account already"
+#~ msgstr "Tôi đã có tài khoản"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "Tôi muốn đăng ký một tài khoản ngay bây giờ"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "Tôi đã quên mật khẩu của mình"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "Tự động đăng nhập lần sau"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "Nhập mã pin dùng-một-lần của bạn để thực hiện xác thực hai yếu tố"
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "Xác thực"
+
+#~ msgid "Continue"
+#~ msgstr "Tiếp tục"
+
+#~ msgid "Scheduled update"
+#~ msgstr "Cập nhật theo lịch"
+
+#~ msgid "Available in a USB drive"
+#~ msgstr "Có sẵn trong ổ USB"
+
+#~ msgid "Requires download"
+#~ msgstr "Cần phải tải về"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr ""
+#~ "Tương tác cài sẵn giữa các người chơi mà không có chức năng trò chuyện"
+
+#~ msgid "_Uninstall"
+#~ msgstr "_Hủy cài đặt"
+
+#~ msgid "_Add to Desktop"
+#~ msgstr "_Thêm vào Màn hình nền"
+
+#~ msgid "_Remove from Desktop"
+#~ msgstr "_Gỡ khỏi Màn hình nền"
+
+#~ msgid "Developer _Website"
+#~ msgstr "Website _Lập trình viên"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "Đang tải danh mục phần mềm"
+
+#~ msgid "_About"
+#~ msgstr "_Giới thiệu"
+
+#~ msgid "_Quit"
+#~ msgstr "_Thoát ra"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr ""
+#~ "Cung cấp quyền truy cập các phần mềm bổ sung, bao gồm các trình duyệt web "
+#~ "và trò chơi."
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "Kích hoạt Các nguồn Phần mềm Sở hữu độc quyền?"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "Bạn có chắc là bạn muốn mua %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "%s sẽ được cài đặt và bạn sẽ bị tính phí %s."
+
+#~ msgid "Purchase"
+#~ msgstr "Mua"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "Trên website có thể tìm thấy thông tin về %s cũng như các tùy chọn về "
+#~ "cách tải một bộ mã hóa-giải mã có thể phát định dạng này."
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "Không thể cài đặt phần mềm khi vấn đề này chưa được giải quyết."
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "Để biết thêm thông tin, hãy truy cập %s."
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "Không thể cập nhật %s từ %s"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr ""
+#~ "Không có ứng dụng hoặc tiện ích bổ sung nào được cài đặt; các ứng dụng "
+#~ "khác có thể vẫn được cài đặt"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "Thông thường bị hạn chế quyền sử dụng và truy cập mã nguồn."
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "Nguồn Phần mềm Sở hữu độc quyền"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr ""
+#~ "Có thể tải các mã nguồn phần mềm từ internet. Chúng cho phép bạn truy cập "
+#~ "vào phần mềm bổ sung mà %s không cung cấp."
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr ""
+#~ "Khi gỡ một nguồn, bất kỳ phần mềm nào mà bạn đã cài đặt từ đó cũng sẽ bị "
+#~ "gỡ."
+
+#~ msgid "No software installed from this source"
+#~ msgstr "Không có phần mềm nào được cài đặt từ nguồn này"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "Đã được cài đặt từ Nguồn này"
+
+#~ msgid "Source Details"
+#~ msgstr "Chi tiết Nguồn"
+
+#~ msgid "Last Checked"
+#~ msgstr "Lần cuối Kiểm tra"
+
+#~ msgid "Added"
+#~ msgstr "Đã thêm"
+
+#~ msgid "automatic updates off"
+#~ msgstr "Tự động cập nhật ở chế độ tắt"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "_Khởi động lại & Cập nhật"
+
+#~ msgid "U_pdate All"
+#~ msgstr "Cập nhật Tất cả"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "Khởi động lại & _Cài đặt"
+
+#~ msgid "App Center"
+#~ msgstr "Trung tâm Ứng dụng"
+
+#~ msgid "More Apps"
+#~ msgstr "Ứng dụng khác"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "Tất cả"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "Nổi bật"
+
+#~ msgctxt "Menu of Reference"
+#~ msgid "Feed"
+#~ msgstr "Nguồn cấp tin"
+
+#~ msgctxt "Menu of Reference"
+#~ msgid "News"
+#~ msgstr "Tin tức"
+
+#~ msgid "Learning"
+#~ msgstr "Học tập"
+
+#~ msgid "Multimedia"
+#~ msgstr "Đa phương tiện"
+
+#~ msgid "Work"
+#~ msgstr "Công việc"
+
+#~ msgid "Dev Tools"
+#~ msgstr "Lập trình"
+
+#~ msgid "USB"
+#~ msgstr "USB"
+
+#~ msgid "Could not launch this application."
+#~ msgstr "Không thể khởi chạy ứng dụng này"
+
+#~ msgid "Framework for applications"
+#~ msgstr "Khung cho các ứng dụng"
+
+#~ msgid ""
+#~ "The app %s is missing its runtime. Update the app to repair this problem."
+#~ msgstr ""
+#~ "Ứng dụng %s bị thiếu các thành phần hỗ trợ chạy chương trình. Hãy cập "
+#~ "nhật ứng dụng để khắc phục lỗi này."
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "Đang nhận nguồn thời gian chạy..."
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "Đang tải xuống cập nhật firmware..."
+
+#~ msgid "Limba Support"
+#~ msgstr "Hỗ trợ Limba"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr ""
+#~ "Limba mang đến cho các lập trình viên một cách tạo các gói phần mềm dễ "
+#~ "dàng"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "Đang tải xuống trang ứng dụng..."
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam Support"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Nền tảng giải trí tối ưu từ Valve"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..b65b225
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,5437 @@
+# Chinese (China) translation for gnome-software.
+# Copyright (C) 2013-2019 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# tuhaihe <1132321739qq@gmail.com>, 2013.
+# eternalhui <www.eternalhui@gmail.com>, 2013
+# Wylmer Wang <wantinghard@gmail.com>, 2013.
+# YunQiang Su <wzssyqa@gmail.com>, 2014.
+# Sphinx Jiang <yishanj13@gmail.com>, 2014.
+# Tong Hui <tonghuix@gmail.com>, 2014.
+# Mingye Wang <arthur2e5@gmail.com>, 2015, 2016.
+# Mingcong Bai <jeffbai@aosc.xyz>, 2015, 2016, 2018.
+# Bin Li <binli@gnome.org>, 2016.
+# Michael Chen <searchends@gnu.hk>, 2016.
+# Mandy Wang <wangmychn@gmail.com>, 2016.
+# Boyuan Yang <073plan@gmail.com>, 2018.
+# Dingzhong Chen <wsxy162@gmail.com>, 2015-2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-08-19 14:58+0000\n"
+"PO-Revision-Date: 2020-08-24 16:05-0400\n"
+"Last-Translator: Merrick Zhang <anphorea@gmail.com>\n"
+"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME 软件"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "GNOME 应用程序管理器"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr "“软件”允许您查找并安装新的应用程序和系统扩展,移除已安装的应用程序。"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME 软件 向您展示特色和流行的应用程序,并提供每个应用程序的描述、截图等有用"
+"信息。您可以通过浏览分类列表或搜索来找到应用程序。您还可以用它离线更新您的系"
+"统。"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "概览面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "详情面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "已安装面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "更新面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "更新详情"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1494
+msgid "The GNOME Project"
+msgstr "GNOME 项目"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "安装 AppStream 文件到系统位置"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "正在安装 AppStream 文件到系统位置"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "兼容项目的列表"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "这是一个应显示的兼容项目的列表,如 GNOME,KDE 和 XFCE。"
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "是否在 GNOME 软件中管理更新和升级"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"如果禁用,GNOME 软件 将隐藏更新面板,且不执行任何自动更新的操作或提示用户进行"
+"更新。"
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "自动下载并安装更新"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"如果启用,GNOME 软件 将自动在后台下载更新,并安装那些不需要重启的更新。"
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "通知用户软件已在后台更新"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr "如果启用,GNOME 软件 将在用户空闲时通知已完成的更新。"
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "是否在计量连接上自动刷新"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"如果启用,GNOME 软件 将在后台自动刷新,即使使用的是计量连接(最终会下载一些元"
+"数据、检查更新等,可能对用户产生费用)。"
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "GNOME 软件 是否是初次启动"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "在应用程序旁显示星级评分"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "基于远程设置的默认分支筛选应用程序"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "在安装非自由应用程序前显示警告对话框"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr "在安装非自由应用程序时显示警告对话框。该选项控制是否禁用此对话框。"
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "热门应用程序列表"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "要使用的应用程序列表,覆盖系统定义。"
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "最近更新检查的时间戳"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "上次更新通知的时间戳"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "第一次安全更新的时间戳,更新后清空"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "上次更新的时间戳"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "最后一次系统上线并获取了更新的时间戳"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "以秒计算的时长,用于验证上游的屏幕截图是否仍然有效"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"选择更大的数值意味着更少往返远程服务器,但是屏幕截图的更新可能需要更长时间才"
+"能显示给用户。数值 0 代表从不检查服务器如果图像已经存在于缓存中。"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "应用程序评价使用的服务器"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "评论的最小 Karma 值"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "低于此 Karma 值的评论将被隐藏。"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "不应当作第三方的源的官方源列表"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "应当作自由软件的官方源列表"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "应用程序为自由软件时要使用的许可 URL"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "尝试为系统上所有的用户安装套装软件"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "允许访问软件源对话框"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "为预发行版本提供更新"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "通过显示某些界面元素来通知用户软件为非自由"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "显示安装非自由软件源的提示"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "显示已安装应用程序列表里应用的安装大小"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://zh.wikipedia.org/wiki/专有软件'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "解释非自由和专有软件的 URI"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "指向将下载到 app-info 文件夹的 AppStream 文件的 URL 列表"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "为所有用户安装 AppStream 文件到系统级位置"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "启用 GNOME Shell 扩展源"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "存储用于登录的 gnome-online-account id 的字符串"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "软件安装"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "安装选中的软件到系统上"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "全选"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "全不选"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "软件源(_S)"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "更新首选项(_U)"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "软件"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "返回"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "浏览(_E)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "已安装(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "更新(_U)"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "搜索"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "源"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "软件源"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "检查磁盘"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "网络设置"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "立即重启"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "更多信息"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "自动更新已暂停"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "了解更多(_M)"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "本地文件"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "软件包"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "等待中"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "已安装"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "安装中"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "移除中"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "启动模式:可选“updates”、“updated”、“installed”或“overview”"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "模式"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "搜索应用程序"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "搜索"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "显示应用程序详情(使用应用程序 ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "显示应用程序详情(使用软件包名)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "软件包名"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "安装应用程序(使用应用程序 ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "打开一个本地的软件包文件"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "文件名"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr "此操作期望的交互类型:可选“none”、“notify”或“full”"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "显示详细的调试信息"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "在后台安装任何等待的更新"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "显示更新首选项"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "退出运行中的实例"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "对 AppStream 优先使用本地文件源"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "显示版本号"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"eternalhui <www.eternalhui@gmail.com>, 2013\n"
+"tuhaihe <1132321739qq@gmail.com>, 2013, 2020\n"
+"Wylmer Wang <wantinghard@gmail.com>, 2013\n"
+"YunQiang Su <wzssyqa@gmail.com>, 2014\n"
+"Sphinx Jiang <yishanj13@gmail.com>, 2014\n"
+"Tong Hui <tonghuix@gmail.com>, 2014\n"
+"Mingye Wang <arthur2e5@gmail.com>, 2015, 2016\n"
+"Mingcong Bai <jeffbai@aosc.xyz>, 2015, 2018\n"
+"Bin Li <binli@gnome.org>, 2016\n"
+"Michael Chen <searchends@gnu.hk>, 2016\n"
+"Mandy Wang <wangmychn@gmail.com>, 2016\n"
+"Dingzhong Chen <wsxy162@gmail.com>, 2015, 2016, 2017, 2019"
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "关于软件"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "一种管理您系统中软件的好方法。"
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "抱歉!该应用程序没有详细信息。"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "访问网站"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "安装…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "取消"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "安装"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "更新"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "移除"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "升级期间设备无法被使用。"
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "要求额外的权限"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "远程服务 %s ( %s 域) 需要登录"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "需要登录"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "取消(_C)"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "登录(_L)"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "用户(_U)"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "密码(_P)"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "其他"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "全部"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "特色软件"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "特色 %s 软件"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "评分"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "名称"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "显示"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "子分类过滤菜单"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "排序"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "子分类排序菜单"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "请输入 1-%u 的任一数字: "
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "选择一个应用程序:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "操作系统更新现已安装"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "可以查看最近安装的更新"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s 已安装"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "需要重新启动以使更新生效。"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "应用程序已就绪。"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "重新启动"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "启动"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "安装第三方软件?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "要启用第三方软件源吗?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s 不是 <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software"
+"\">自由开源软件</a>,它由 “%s” 提供。"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s 由 %s 提供。"
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "要继续安装,必须启用此软件源。"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "在一些国家安装或使用 %s 是非法的。"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "在一些国家安装或使用此编码解码器是非法的。"
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "不再提醒"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "安装并启用"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "包管理器提供的详细错误如下:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "详细信息"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "已安装更新"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "需要重新启动以使更新生效。"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "现在不"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "无动画角色暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "动画角色处于危险境地"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "动画角色处于激烈冲突"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "包含动画角色的写实暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "无幻想的暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "角色处于易于与现实区分的危险境地"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "角色参与易于与现实区分的激烈冲突"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "角色参与易于与现实区分的写实暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "无逼真的暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "较逼真角色处于危险境地"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "描写逼真角色参与激烈冲突"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "逼真角色参与的写实暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "无流血"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "不逼真的血"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "逼真的血"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "描写流血及肢体伤害"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "无性暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "强奸及其他暴力的性行为"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "无对酒精的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "对酒精饮料的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "饮用酒精饮料"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "无对非法药物的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "对非法药物的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "吸食非法药物"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "无烟草产品暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "对烟草产品的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "吸食烟草产品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "无任何形式的裸体"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "短暂且艺术性的裸体"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "长时间的裸体描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "无性相关的暗示和描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "挑衅性暗示或描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "性暗示或描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "生动的性行为"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "无任何种类的粗俗语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "少量粗俗语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "中等数量的粗俗语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "大量粗俗语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "无不适当的笑话"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "闹剧式笑话"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "粗俗或浴室笑话"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "荤笑话"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "无任何种类的歧视性语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "对特定人群负面的语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "伤害情感的歧视性语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "针对性别、性向、种族或宗教的歧视性语言"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "无任何种类的广告"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "植入式广告"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "对特定产品的品牌或商标的明显暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "鼓励用户购买特定的真实商品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "无任何种类的赌博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "通过随机事件使用游戏票券赌博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "使用游戏货币赌博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "使用真实货币赌博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "无花钱的功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "鼓励用户捐赠真实货币"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "应用中可使用真实货币"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "没有与其他用户聊天的功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "在用户之间不带聊天功能的交互功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "在用户之间受监控的聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "在用户之间不受控制的聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "无与其他用户沟通的方式"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "在用户之间不受控制的音频或视频聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "不共享社交网络的用户名或电子邮件地址"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "共享社交网络的用户名或电子邮件地址"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "不与第三方共享用户信息"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "正在检查最新应用程序版本"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "分享无法识别用户身份的诊断数据"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "分享可以识别用户身份的信息"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "不与其他用户共享物理位置"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "与其他用户共享物理位置"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "无对同性恋的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "对同性恋的间接暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "同性别人类之间的亲吻"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "含有同性别人类之间性行为的图像"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "无对卖淫的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "对卖淫的间接暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "对卖淫的直接暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "卖淫行为的图像描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "无对通奸的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "对通奸的间接暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "对通奸的直接暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "通奸的图像描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "无性暗示角色"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "穿着暴露的人类角色"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "具有明显性暗示的人类角色"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "无对亵渎行为的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "亵渎历史的描写或暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "对当代人类亵渎的描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "亵渎当代社会的图像描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "无可见死亡人类尸体"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "有可见死亡人类尸体"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "有死亡人类尸体并展示其内容物"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "对亵渎人体行为的图像描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "无对奴役的暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "对历史上奴役行为的描写或暗示"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "对当代奴役行为的描写"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "对当代奴役行为的图片描写"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s(%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "常规"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "全部"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "仅限成人"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "成人"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "青少年"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "十岁及以上"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "任何人"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "儿童"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "应用程序"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s 需要额外的文件格式的支持。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "需要额外的 MIME 类型"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s 需要额外的字体。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "需要额外的字体"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s 需要额外的多媒体编解码器。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "需要额外的多媒体编解码器"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s 需要额外的打印机驱动程序。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "需要额外的打印机驱动程序"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s 需要额外的软件包。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "需要额外的软件包"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "在“软件”中查找"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "正在移除…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "等待安装…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "等待更新…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "正在准备…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "这个应用只能在联网情况下使用。"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "安装(_I)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "安装(_I)…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "启动(_L)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "移除(_R)"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "网络"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "可以通过网络进行通信"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "系统服务"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "可以访问在系统总线上访问 D-Bus 服务"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "会话服务"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "可以在会话总线上访问 D-Bus 服务"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "设备"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "可以访问系统设备文件"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "主目录"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "可以查看、编辑和创建文件"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "可以查看文件"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "文件系统"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "下载文件夹"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "设置"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "可以查看和更改任意设置"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "传统显示系统"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "使用旧式、不安全的显示系统"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "沙箱逃逸"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "可以逃脱沙箱并绕过任何其他限制"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "此应用程序已完全沙盒化。"
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr "无法确认此应用程序可以访问系统的哪一部分。这是旧版应用程序的特征。"
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "未知"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "未知"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "未知"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "低"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "中"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "高"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "未知"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "您需要互联网连接以编写评论"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "无法找到“%s”"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "公有领域"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://zh.wikipedia.org/wiki/公有领域"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.zh-cn"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "自由软件"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "用户受以下许可证的约束:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "更多信息"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "详细信息页面"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "正在下载"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "更新(_U)"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "添加快捷方式(_A)"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "移除快捷方式(_M)"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "没有截图"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "包含软件源"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr "该应用程序中包含了提供更新和其他软件的软件源。"
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "不含软件源"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr "该应用不包括软件源。不会自动更新到新版本。"
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "该软件已由您的发行版提供,而且不应被替换。"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "探测到软件源"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr "添加此软件源以获取其他软件和更新。"
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "仅使用您信任的软件源。"
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "网站(_W)"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "捐赠(_D)"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "本地语言"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "演示文稿"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "发行活动"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "系统集合"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "隔离环境"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "频道"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "版本"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "年龄分级"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "权限"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "已更新"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "软件分类"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "安装大小"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "下载大小"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "开发者"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "许可协议"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "自由"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "专有软件"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "附加组件"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "选中的附加组件将随应用程序一起安装。"
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "评论"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "编写评论(_W)"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "显示更多(_S)"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr "这表示该软件可以被自由地运行、复制、分发、研究和修改。"
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "专有软件"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"这表示该软件由个人或公司拥有。对该软件的使用常常伴有限制而且它的源码通常也无"
+"法被获取。"
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "未知的软件许可证"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "该软件的发行协议未知。"
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "该应用程序被分到此级因为它包含:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "没有对应此分级可用的详细信息。"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " 和 "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr "、"
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s 书写系统可用的字体"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s 可用的软件"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "未找到相应的软件"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "未找到 %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "在网站上"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "没有提供 %s 文件的可用程序。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "%s 的相关信息,以及如何获取缺失的应用程序的选项有可能在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "没有支持 %s 的可用程序。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s 不可用。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr ""
+"%s 的相关信息,以及如何获取支持此格式的应用程序的选项有可能在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "没有支持 %s 书写系统的可用字体。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "%s 的相关信息,以及如何获取额外字体的选项有可能在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "没有对应 %s 格式的附加编解码器。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr "%s 的相关信息,以及如何获取播放该格式的解码器的选项有可能在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "没有支持 %s 的可用 Plasma 资源。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "%s 的相关信息,以及如何获取附加 Plsama 资源的选项有可能在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "没有对 %s 可用的打印机驱动。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr "%s 的相关信息,以及如何获取支持此打印机的驱动的选项有可能在 %s 找到。"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "这个网站"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "很抱歉,没有找到与 %s 相关的内容。请访问 %s 获取更多相关信息。"
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "未找到任何搜索结果"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s 文件格式"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "编解码器页面"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "欢迎"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "欢迎使用"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"“软件”让您在一个地方安装所有软件。请查看我们的推荐,浏览分类或者搜索想要的软"
+"件。"
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "去逛逛(_L)"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "已移除"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "已安装"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "已更新"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "未知"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y年%-m月%-d日"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "历史"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "系统应用程序"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "已安装页面"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "正在下载软件目录"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "正在载入页面"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "正在启动…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"当前网络为计费流量。计费连接有流量限制或产生相关费用。为了节省流量,自动更新"
+"已暂停。\n"
+"当可使用非计费网络时,自动更新将恢复。届时,仍可能需要手动安装更新。\n"
+"另外情形,如果当前网络被错误识别为计费流量,该设置也会发生改动。"
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "打开网络设置(_S)"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "管理页面"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "没有需要管理的评价"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "系统"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "用户"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "分支"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "格式"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "安装位置"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "更多…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "推荐的影音应用"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "推荐的游戏"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "推荐的图形类应用"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "推荐的生产力应用"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "从选中的第三方软件源获取更多软件。"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr "某些软件使用专有协议,因而对使用、分享及源代码访问有限制。"
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "了解更多…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "启用"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "概览页"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "要启用第三方软件源吗?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "上一页"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "下一页"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "编辑精选"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "最近发布版本"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "软件分类"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "未找到应用程序数据"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "准备 %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "您确定要移除 %s 软件源吗?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr "所有来自 %s 的应用程序将被移除,想再次使用它们您必须重新安装软件源。"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "您确定要移除 %s 吗?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s 将被移除,想再次使用它您必须重新安装。"
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s(已安装)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "更新首选项"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "自动更新"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "在移动或计量连接上禁用自动更新。"
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "自动更新通知"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "当更新被自动安装时显示通知。"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"当前已安装的一些软件与 %s 不兼容。如果您想继续,更新过程中下列软件将被自动移"
+"除:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "不兼容的软件"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "继续(_C)"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "已安装 %u 款应用程序"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "已安装 %u 个附加组件"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u 款应用程序"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u 个附加组件"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s 和 %s 已安装"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "确定要移除“%s”吗?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "确定要禁用“%s”吗?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr "从该软件源获取的软件将不再收到更新,包括安全更新。"
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "禁用"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "操作系统"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "该软件源内的软件可替代 %s 提供的默认软件。"
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "第三方软件源"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "没有更多软件源"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "启用(_E)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "移除(_R)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "禁用(_D)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "正在启用"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "正在禁用"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "已启用"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "已禁用"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "差评"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "反感"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "一般"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "喜欢"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "最喜欢了"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "请花多点时间来编写评论"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "请选择一个星级评分"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "摘要太短了"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "摘要太长了"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "描述太短了"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "描述太长了"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "发布评论"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "发布(_P)"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "摘要"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "给您的评论一段简短的摘要,例如:“很棒的应用,推荐使用”。"
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "评论"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "您认为该应用怎么样?尝试为您的意见列出理由。"
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"在我们的 <a href=\"https://odrs.gnome.org/privacy\">隐私政策</a> 中查看发送了"
+"什么数据。"
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "评分总计"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "您可以举报粗暴、不文明及带有歧视性质的评价。"
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "一旦被举报,该评价在管理员检查之前将被隐藏。"
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "要举报评论吗?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "举报"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "这条评论对您有用吗?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "是"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "否"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "随便"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "举报…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "移除…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "未找到截图"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "加载图片失败"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "未找到截图尺寸"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "无法创建缓存"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "截图无效"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "截图不可用"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "截图"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "还有 %u 个匹配项"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "搜索页"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "未找到应用程序"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "“%s”"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "无法从 %s 下载固件"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "无法从 %s 下载更新"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "无法下载更新"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "无法下载更新:需要互联网连接,但互联网连接不可用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "无法从 %s 下载更新:磁盘空间不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "无法下载更新:磁盘空间不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "无法下载更新:需要身份验证"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "无法下载更新:身份验证无效"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "无法下载更新:您没有安装软件的权限"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "无法获取更新列表"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "无法安装 %s 由于从 %s 下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "无法安装 %s 由于下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "无法安装 %s 由于运行库 %s 不可用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "无法安装 %s 由于不支持"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "无法安装:需要互联网连接,但互联网连接不可用"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "无法安装:该应用程序为无效的格式"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "无法安装 %s:磁盘空间不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "无法安装 %s:需要身份验证"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "无法安装 %s:身份验证无效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "无法安装 %s:您没有安装软件的权限"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "无法安装 %s:需要交流电源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "无法安装 %s:电池电量太低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "无法安装 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "无法从 %2$s 更新 %1$s 由于下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "无法更新 %s 由于下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "无法从 %s 安装更新由于下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "无法安装更新由于下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "无法更新:需要互联网连接,但互联网连接不可用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "无法更新 %s:磁盘空间不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "无法安装更新:磁盘空间不足"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "无法更新 %s:需要身份验证"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "无法安装更新:需要身份验证"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "无法更新 %s:身份验证无效"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "无法安装更新:身份验证无效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "无法更新 %s:您没有更新软件的权限"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "无法更新更新:您没有更新软件的权限"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "无法更新 %s:需要交流电源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "无法安装更新:需要交流电源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "无法更新 %s:电池电量太低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "无法安装更新:电池电量太低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "无法更新 %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "无法安装更新"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "无法从 %2$s 升级到 %1$s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "无法升级到 %s 由于下载失败"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "无法升级到 %s:需要互联网连接,但互联网连接不可用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "无法升级到 %s:磁盘空间不足"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "无法升级到 %s:需要身份验证"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "无法升级到 %s:身份验证无效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "无法升级到 %s:您没有升级的权限"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "无法升级到 %s:需要交流电源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "无法升级到 %s:电池电量太低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "无法升级到 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "无法移除 %s:需要身份验证"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "无法移除 %s:身份验证无效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "无法移除 %s:您没有移除软件的权限"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "无法移除 %s:需要交流电源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "无法移除 %s:电池电量太低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "无法移除 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "无法启动 %s:%s 还未安装"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "磁盘空间不足——释放一些空间后再试一次"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "抱歉,出现了问题"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "无法安装文件:不支持"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "无法安装文件:身份验证失败"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "无法安装:不支持"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "无法安装:身份认证失败"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "无法联系 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s 需要重启才能使用新插件。"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "此应用程序需要重启才能使用新插件。"
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "需要交流电源"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "电池电量太低"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "来源:%s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s(安装中)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s(移除中)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "全部移除(_R)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "没有可用的更新描述。"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "已在 %s 上安装"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "已安装的更新"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "添加"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "移除"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "更新"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "降级"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "此系统未安装过更新。"
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "等待的安全更新"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "建议您现在安装重要更新"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "重启并安装"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "有可用的软件更新"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "重要系统和应用程序更新安装准备就绪"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "查看"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "已更新 %u 款应用程序——需要重启"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "已更新 %u 款应用程序"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s 已经更新。"
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "请重启应用程序。"
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s 和 %s 已经更新。"
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "%u 款应用程序需要重启。"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "包括 %s、%s 和 %s。"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "操作系统更新不再提供"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "升级以继续接收安全更新。"
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "%s 有新版本可用"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "有可用的软件更新"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "软件更新失败"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "重要的操作系统更新安装失败。"
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "显示详细信息"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "系统升级完成"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "欢迎使用 %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "软件更新已安装"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "重要的系统更新已安装。"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "回顾"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "更新失败"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "该系统已是最新的。"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "更新被取消。"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr "需要互联网连接但是未发现有效连接。请确认您有接入互联网并在此尝试。"
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "本次更新有安全性问题。请联系您的软件提供商以获取更多信息。"
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "没有足够的磁盘空间。请释放一些空间后再试一次。"
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"很抱歉:更新安装失败。请等待下一次更新时再试一次。如果问题仍存在,请联系您的"
+"软件提供商。"
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%p %l:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "昨天,%R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "昨天%p,%l:%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "两天前"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "三天前"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "四天前"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "五天前"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "六天前"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "一周前"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "两周前"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "正在查找新更新…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "正在设置更新…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(该过程会持续一会儿)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "上次检查:%s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "不再支持 %s %s。"
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "您的操作系统已不再支持。"
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "这意味着它不会收到安全更新。"
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "建议您升级到更新的版本。"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "可能需要收费"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "使用移动宽带检查更新可能会花费流量。"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "依然检查"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "无网络连接"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "检查更新需要可访问网络。"
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "正在检查……"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "检查更新"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "更新页面"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "软件已为最新"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "使用移动宽带检查更新可能会花费流量"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "依然检查(_C)"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "上线以检查更新"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "网络设置(_N)"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "更新将被自动管理"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "重启并更新"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "全部更新"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "集成固件"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "重新启动"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "应用程序更新"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "设备固件"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "下载(_D)"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "建议您在更新前备份数据和文件。"
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "立即重启(_R)"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "更新将在计算机重启后应用。"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s 现在可用"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "正在等待下载 %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "正在下载 %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s 已经可以安装"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "主要更新,附带新特性并添加优化。"
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "了解更多(_L)"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "添加、移除或更新计算机软件"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;更新;升级;源;仓库;首选项;安装;卸载;程序;软件;应用;商店;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "音频创建与编辑"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "音乐播放器"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "调试器"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "集成开发环境"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "人工智能"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "天文学"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "化学"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "语言学"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "数学"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "机器人学"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "动作"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "冒险"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "街机"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "益智"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "棋类"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "纸牌"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "模拟器"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "儿童"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "逻辑"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "角色扮演"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "体育"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "策略"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D 图形"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "摄影"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "扫描"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "矢量图形"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "查看器"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "日历"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "数据库"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "财务"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "文字处理"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "字体"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "编解码器"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "输入源"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "语言包"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "本地化"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "硬件驱动"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "聊天"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "新闻"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "Web 浏览器"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "文本编辑器"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "特别推荐"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "艺术"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "传记"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "漫画"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "小说"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "健康"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "历史"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "生活"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "政治"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "体育"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "影音"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "开发工具"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "教育与科学"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "游戏"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "图像与摄影"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "生产力"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "通信与新闻"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "参考"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "实用工具"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "操作系统更新"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "包括性能、稳定性及安全改进。"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "正在下载特别推荐的图像…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS 更新,附带新特性并添加优化。"
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "EOS 更新服务无法获取和应用更新。"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME 软件 AppStream 系统级安装器"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "解析命令行参数失败"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "您需要指定正好一个文件名"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "该程序只能被 root 用户使用"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "验证内容类型失败"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "复制失败"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "正在下载额外的元数据文件…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "正在下载升级信息…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "升级以获取最新的功能、性能和稳定性改进。"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak 支持"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak 是用于 Linux 上桌面应用程序的框架"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "正在获取 %s 的 flatpak 元数据…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s 设备更新"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s 系统更新"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s 嵌入式控制器更新"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s 管理引擎(ME)更新"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s 企业级管理引擎(ME)更新"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s 消费级管理引擎(ME)更新"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s 控制器更新"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt 控制器更新"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU微码更新"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s 配置更新"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "正在下载固件更新签名…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "正在下载固件更新元数据…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "固件升级支持"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "提供固件升级的支持"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "正在下载应用程序评分…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "开放桌面评分(ODRS)支持"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS 是一款提供应用程序用户评价的服务"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap 商店"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap 支持"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap 是个通用的 Linux 程序包"
+
+#~ msgid "About %s"
+#~ msgstr "关于 %s"
+
+#~ msgid "%s ME"
+#~ msgstr "%s 管理引擎(ME)"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "显示文件夹管理界面"
+
+#~ msgid "Folder Name"
+#~ msgstr "目录名"
+
+#~ msgid "_Add"
+#~ msgstr "添加(_A)"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "添加到应用程序文件夹"
+
+#~ msgid "Top Rated"
+#~ msgstr "最受欢迎"
+
+#~ msgid "Extension Settings"
+#~ msgstr "扩展设置"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr "使用扩展时风险自负。如果您遇到了系统问题,推荐禁用这些扩展。"
+
+#~ msgid "Failed to load components"
+#~ msgstr "加载组件失败"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS 验证正确!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "加载文件失败"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "未保存的更改"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "应用程序列表已加载。"
+
+#~ msgid "Merge documents"
+#~ msgstr "合并文档"
+
+#~ msgid "Throw away changes"
+#~ msgstr "放弃更改"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "打开 AppStream 文件"
+
+#~ msgid "_Open"
+#~ msgstr "打开(_O)"
+
+#~ msgid "Save AppStream File"
+#~ msgstr "保存 AppStream 文件"
+
+#~ msgid "_Save"
+#~ msgstr "保存(_S)"
+
+#~ msgid "Failed to save file"
+#~ msgstr "保存文件失败"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s 的横幅设计已删除。"
+
+#~ msgid "Banner design deleted."
+#~ msgstr "横幅设计已删除。"
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "应用程序列表有未保存的更改。"
+
+#~ msgid "Use verbose logging"
+#~ msgstr "使用详细日志记录"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME 软件横幅设计工具"
+
+#~ msgid "No Designs"
+#~ msgstr "无设计"
+
+#~ msgid "Error message here"
+#~ msgstr "此处为错误消息"
+
+#~ msgid "App ID"
+#~ msgstr "应用 ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "编辑精选"
+
+#~ msgid "Category Featured"
+#~ msgstr "特色分类"
+
+#~ msgid "Undo"
+#~ msgstr "撤销"
+
+#~ msgid "Banner Designer"
+#~ msgstr "横幅设计工具"
+
+#~ msgid "New Banner"
+#~ msgstr "新横幅"
+
+#~ msgid "Import from file"
+#~ msgstr "从文件导入"
+
+#~ msgid "Export to file"
+#~ msgstr "导出到文件"
+
+#~ msgid "Delete Design"
+#~ msgstr "删除设计"
+
+#~ msgid "Featured App"
+#~ msgstr "特色应用"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "系统升级"
+
+#~ msgid "Spacing"
+#~ msgstr "间距"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "子部件间的间距总和"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "点击项目来选择它们"
+
+#~ msgid "Select"
+#~ msgstr "选择"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "添加到文件夹(_A)…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "移动到文件夹(_M)…"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "从文件夹移除(_R)"
+
+#~ msgid "Featured Applications"
+#~ msgstr "特色应用"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "为“GNOME 软件”设计特色横幅"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;软件;应用;"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell 扩展"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "Web 应用支持"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "在浏览器里运行流行的网络应用程序"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell 扩展软件源"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "正在下载 shell 扩展元数据…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell 扩展"
+
+#~ msgid "_All"
+#~ msgstr "全部(_A)"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "登录/注册…"
+
+#~ msgid "Continue"
+#~ msgstr "继续"
+
+#~ msgid "Use"
+#~ msgstr "使用"
+
+#~ msgid "Add another…"
+#~ msgstr "添加另一个…"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "您确定要购买 %s 吗?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "将安装 %s,您将扣费 %s。"
+
+#~ msgid "Purchase"
+#~ msgstr "购买"
+
+#~ msgid "A$%.2f"
+#~ msgstr "澳大利亚元 $%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "加拿大元$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "人民币 %.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "欧元 %.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "英镑 %.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "日元 %.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "新西兰元 %.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "俄罗斯卢布 %.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "美元 %.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "已登录为 %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "登录…"
+
+#~ msgid "Sign out"
+#~ msgstr "登出"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "无法购买 %s:需要身份验证"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "无法购买 %s:身份验证无效"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "无法购买 %s:未设置付款方式"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "无法购买 %s:付款被拒绝"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "无法购买 %s"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "请使用 Ubuntu One 帐号以继续。"
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "需要使用你的 Ubuntu One 帐号以继续。"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "显示服务分析信息"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "需要登录到 %s 以继续。"
+
+#~ msgid "Email address"
+#~ msgstr "电子邮件地址"
+
+#~ msgid "I have an account already"
+#~ msgstr "我已有帐号"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "我希望现在注册帐号"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "我忘记了密码"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "下次自动登录"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "输入您的一次性 PIN 以进行双重认证。"
+
+#~ msgid "PIN"
+#~ msgstr "PIN"
+
+#~ msgid "Authenticate"
+#~ msgstr "认证"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "正在载入软件目录"
+
+#~ msgid "_About"
+#~ msgstr "关于(_A)"
+
+#~ msgid "_Quit"
+#~ msgstr "退出(_Q)"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr "可在网络上找到关于 %s 及如何获取播放该格式的编解码器的信息。"
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "没有解决了这个问题之前无法安装。"
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "更多信息请访问 %s。"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "无法从 %2$s 更新 %1$s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "正在下载最新的更新…"
+
+#~ msgid "_Restart & Update"
+#~ msgstr "重启并更新(_R)"
+
+#~ msgid "U_pdate All"
+#~ msgstr "全部更新(_P)"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "重启并安装(_I)"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "正在获取运行库源…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "正在下载固件更新…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba 支持"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba 提供给开发者一个轻松创建软件组合包的方法"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "正在下载应用程序页面…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam 支持"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "来自 Valve 的终极娱乐平台"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "按名称排序"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "按评分排序"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "之前开启的额外来源列表"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr "之前开启的,用于安装第三方应用程序的额外来源列表。"
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "在搜索结果里显示非自由软件"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "可选启用的非自由软件列表"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "提供了附加软件的获取通道,包括 web 浏览器和游戏。"
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "启用专有软件源?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "未安装应用程序或扩展;可能还有其他软件"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "通常在使用和源码的获取上有限制。"
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "专有软件源"
+
+#~ msgid "Remove Source"
+#~ msgstr "移除源"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr "软件源可以从网络上下载程序。他们让您能访问未由 %s 提供的额外软件。"
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr "移除源将会移除您从该源安装的任何软件。"
+
+#~ msgid "No software installed from this source"
+#~ msgstr "没有软件是从这个源安装的"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "从这个源安装的软件"
+
+#~ msgid "Source Details"
+#~ msgstr "源详细信息"
+
+#~ msgid "Last Checked"
+#~ msgstr "上次检查"
+
+#~ msgid "Added"
+#~ msgstr "已添加"
+
+#~ msgid "Website"
+#~ msgstr "网站"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "在玩家之间不带聊天功能的预设交互"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "与第三方共享用户信息"
+
+#~ msgid "page1"
+#~ msgstr "第一页"
+
+#~ msgid "page2"
+#~ msgstr "第二页"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "特别推荐"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "“%s” [%s]"
+
+#~ msgid "Total"
+#~ msgstr "总计"
+
+#~ msgid "Could not find '%s'"
+#~ msgstr "找不到 %s"
+
+#~ msgid "_Install All"
+#~ msgstr "全部安装(_I)"
+
+#~ msgid "Other Updates"
+#~ msgstr "其它更新"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "安装 %s 失败。"
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "移除 %s 失败。"
+
+#~ msgid "Upgrade to %s failed."
+#~ msgstr "升级到 %s 失败。"
+
+#~ msgid "Internet access was required but wasn’t available."
+#~ msgstr "需要互联网连接,但其不可用。"
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "请确认您已接入互联网并重试。"
+
+#~ msgid "There wasn’t enough disk space."
+#~ msgstr "磁盘空间不足。"
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "请释放一些空间后再试一次。"
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "如问题依然存在,请联系您的软件提供商。"
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "无"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "特色软件"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "特色软件"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "天文学"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "化学"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "数学"
+
+#~ msgid "Science"
+#~ msgstr "科学"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "软件源可以让您获取基他软件。"
+
+#~ msgid "3rd party"
+#~ msgstr "第三方"
+
+#~ msgid "web app"
+#~ msgstr "网络应用"
+
+#~ msgid "nonfree"
+#~ msgstr "非自由"
+
+#~ msgid "shell extension"
+#~ msgstr "GNOME Shell 扩展"
+
+#~ msgid "_Installing"
+#~ msgstr "正在安装(_I)"
+
+#~ msgid "_Removing"
+#~ msgstr "正在移除(_P)"
+
+#~ msgid " or "
+#~ msgstr " 或 "
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "未知"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "该软件来自第三方。"
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr "该软件来自第三方而且可能包含非自由组件。"
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "该软件可能包含非自由组件。"
+
+#~ msgid "non-free"
+#~ msgstr "非自由"
+
+#~ msgid "One Star"
+#~ msgstr "一星"
+
+#~ msgid "Two Stars"
+#~ msgstr "二星"
+
+#~ msgid "Three Stars"
+#~ msgstr "三星"
+
+#~ msgid "Four Stars"
+#~ msgstr "四星"
+
+#~ msgid "Five Stars"
+#~ msgstr "五星"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "未知"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "无分类"
+
+#~ msgid "_History"
+#~ msgstr "历史(_H)"
+
+#~ msgid "Size"
+#~ msgstr "大小"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "推荐的办公应用"
+
+#~ msgid "Audio"
+#~ msgstr "音频"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "编辑"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "数据库"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "光盘刻录"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "业余无线电"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "混音器"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "音乐"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "录音机"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "音序器"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "调谐器"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "实时构建"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "数据库"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "性能分析"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "项目管理"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "翻译"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "网络开发"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "生物学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "计算机科学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "建筑学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "数据可视化"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "经济学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "电力学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "电子学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "工程学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "地质学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "地球科学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "历史学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "人文学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "图像处理"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "文学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "地图"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "音乐"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "数值分析"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "并行计算"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "物理学"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "灵性(宗教)"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "射击"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "模拟"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "竞技"
+
+#~ msgid "Graphics"
+#~ msgstr "图形"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D 图形"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "光学字符识别"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "出版"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "光栅图形"
+
+#~ msgid "Internet"
+#~ msgstr "互联网"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "拨号"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "邮件"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "消息订阅"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "文件传输"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "业余无线电"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "即时通讯"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC 客户端"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "监视器"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "远程访问"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "电话"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "网络开发"
+
+#~ msgid "Office"
+#~ msgstr "办公"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "图表"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "联系人管理"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "字典"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "电子邮件"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "流程图"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "摄影"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "演示文稿"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "项目管理"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "出版"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "电子表格"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "查看器"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "艺术"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "人工智能"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "天文学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "生物学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "化学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "计算机科学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "建筑学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "数据可视化"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "经济学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "电力学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "电子学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "工程学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "地理学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "地质学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "地球科学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "历史学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "人文学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "图像处理"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "语言学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "文学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "地图"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "数学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "医学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "数值分析"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "并行计算"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "物理学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "机器人学"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "灵性(宗教)"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "体育"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "模拟器"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "文件管理器"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "文件工具"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "监视器"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "安全"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "虚拟终端"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "辅助功能"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "归档管理"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "计算器"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "时钟"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "压缩"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "文件工具"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "地图"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "灵性(宗教)"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "电话通讯工具"
+
+#~ msgid "Video"
+#~ msgstr "视频"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "编辑"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "数据库"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "光盘刻录"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "播放器"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "录影机"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "电视"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "未找到 AppStream 数据"
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100644
index 0000000..bc92dcf
--- /dev/null
+++ b/po/zh_HK.po
@@ -0,0 +1,2086 @@
+# Chinese (Hong Kong) translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"software&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-08-30 19:40+0000\n"
+"PO-Revision-Date: 2014-08-31 15:55+0800\n"
+"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
+"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
+"Language: zh_HK\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.3\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:1
+msgid "Application manager for GNOME"
+msgstr "為 GNOME 設計的應用程式管理員"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:2
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr "《軟件》讓你可以找尋、安裝新程式與系統擴充套件,以及移除所安裝的應用程式。"
+
+#: ../data/appdata/org.gnome.Software.appdata.xml.in.h:3
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr "GNOME Software 陳列各種具有特色,以及廣受歡迎的應用程式,並附上有用的描述與多張螢幕擷圖。除了瀏覽類別清單之外,你還可以透過搜尋的方式來找出想要的應用程式。此外,它也可讓你採用離線更新的方式更新系統。"
+
+#: ../src/app-folder-dialog.ui.h:1
+msgid "Add to Application Folder"
+msgstr "加入到應用程式資料夾中"
+
+#: ../src/app-folder-dialog.ui.h:2 ../src/gs-app-folder-dialog.c:337
+#: ../src/gs-shell-details.c:232 ../src/gs-shell-installed.c:580
+msgid "_Cancel"
+msgstr "取消(_C)"
+
+#: ../src/app-folder-dialog.ui.h:3 ../src/gs-app-folder-dialog.c:342
+msgid "_Add"
+msgstr "加入(_A)"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is installed
+#: ../src/app-tile.ui.h:1 ../src/gs-app-addon-row.c:103
+#: ../src/gs-app-tile.c:72 ../src/gs-app-tile.c:75 ../src/gs-feature-tile.c:66
+#: ../src/gs-popular-tile.c:73 ../src/gs-popular-tile.c:76
+#: ../src/popular-tile.ui.h:1
+msgid "Installed"
+msgstr "已安裝"
+
+#. TRANSLATORS: this is the application name
+#. set the window title back to default
+#. TRANSLATORS: this is the main window title
+#: ../src/org.gnome.Software.desktop.in.h:1 ../src/gnome-software.ui.h:3
+#: ../src/gs-application.c:265 ../src/gs-shell.c:156
+msgid "Software"
+msgstr "軟件"
+
+#: ../src/org.gnome.Software.desktop.in.h:2
+msgid "Add, remove or update software on this computer"
+msgstr "在這臺電腦上加入、移除,或更新軟件"
+
+#: ../src/org.gnome.Software.desktop.in.h:3
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr "Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;;更新;升級;來源;套件庫;軟件庫;倉庫;偏好設定;安裝;解除安裝;程式;軟件;應用;商店;"
+
+#: ../src/gnome-software-local-file.desktop.in.h:1
+msgid "Software Install"
+msgstr "軟件安裝"
+
+#: ../src/gnome-software-local-file.desktop.in.h:2
+msgid "Install selected software on the system"
+msgstr "安裝選取的軟件到系統中"
+
+#: ../src/gnome-software.ui.h:1
+msgid "Select All"
+msgstr "全選"
+
+#: ../src/gnome-software.ui.h:2
+msgid "Select None"
+msgstr "全不選"
+
+#. vim: set noexpandtab:
+#: ../src/gnome-software.ui.h:4 ../src/gs-sources-dialog.ui.h:2
+#: ../src/gs-update-dialog.ui.h:1
+msgid "Go back"
+msgstr "返回"
+
+#. Translators: A label for a button to show all available software.
+#: ../src/gnome-software.ui.h:6
+msgid "_All"
+msgstr "全部(_A)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: ../src/gnome-software.ui.h:8
+msgid "_Installed"
+msgstr "已安裝(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: ../src/gnome-software.ui.h:10
+msgid "_Updates"
+msgstr "更新(_U)"
+
+#: ../src/gnome-software.ui.h:11
+msgid "Restart & _Install"
+msgstr "重新啟動並安裝(_I)"
+
+#: ../src/gnome-software.ui.h:12
+msgid "Select"
+msgstr "選取"
+
+#: ../src/gnome-software.ui.h:13
+msgid "Check for updates"
+msgstr "檢查軟件更新"
+
+#: ../src/gs-app-folder-dialog.c:325
+msgid "Folder Name"
+msgstr "資料夾名稱"
+
+#. TRANSLATORS: this is the title of the about window
+#: ../src/gs-application.c:263
+msgid "About Software"
+msgstr "關於《軟件》"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: ../src/gs-application.c:268
+msgid "A nice way to manage the software on your system."
+msgstr "管理系統中軟件的絕佳方式。"
+
+#: ../src/gs-application.c:272
+msgid "translator-credits"
+msgstr "Cheng-Chia Tseng <pswo10680@gmail.com>, 2013-14."
+
+#: ../src/gs-application.c:531
+msgid "Enter GApplication service mode"
+msgstr "請輸入 GApplication 服務模式"
+
+#. TRANSLATORS: this is a command line option
+#: ../src/gs-application.c:534
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr "初始啟動模式:可以是「updates」(更新)、「updated」(已更新)、「installed」(已安裝) 或「overview」(概覽)"
+
+#: ../src/gs-application.c:534
+msgid "MODE"
+msgstr "模式"
+
+#: ../src/gs-application.c:536
+msgid "Search for applications"
+msgstr "搜尋用程式"
+
+#: ../src/gs-application.c:536
+msgid "SEARCH"
+msgstr "搜尋"
+
+#: ../src/gs-application.c:538
+msgid "Show application details"
+msgstr "顯示應用程式細節"
+
+#: ../src/gs-application.c:538
+msgid "ID"
+msgstr "ID"
+
+#: ../src/gs-application.c:540
+msgid "Open a local package file"
+msgstr "開啟本機軟件包檔案"
+
+#: ../src/gs-application.c:540
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: ../src/gs-application.c:542
+msgid "Show verbose debugging information"
+msgstr "詳細顯示除錯用訊息"
+
+#: ../src/gs-application.c:544
+msgid "Show profiling information for the service"
+msgstr "顯示該服務的評測資訊"
+
+#: ../src/gs-application.c:546
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream 偏好使用本地端檔案來源"
+
+#. TRANSLATORS: this is a label that describes an application
+#. * that has been queued for installation
+#: ../src/gs-app-addon-row.c:98 ../src/gs-app-row.c:201
+#: ../src/gs-shell-details.ui.h:4
+msgid "Pending"
+msgstr "擱置中"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being installing
+#: ../src/gs-app-addon-row.c:107 ../src/gs-app-row.c:228
+#: ../src/gs-app-tile.c:81 ../src/gs-app-tile.c:84
+msgid "Installing"
+msgstr "安裝中"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user the application is being removed
+#: ../src/gs-app-addon-row.c:111 ../src/gs-app-row.c:237
+#: ../src/gs-app-tile.c:90 ../src/gs-app-tile.c:93
+msgid "Removing"
+msgstr "移除中"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-row.c:191
+msgid "Visit website"
+msgstr "造訪網站"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: ../src/gs-app-row.c:198
+msgid "Cancel"
+msgstr "取消"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: ../src/gs-app-row.c:208
+msgid "Install"
+msgstr "安裝"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#: ../src/gs-app-row.c:217 ../src/gs-shell-details.c:1114
+#: ../src/gs-shell-installed.c:182 ../src/gs-shell-search.c:162
+msgid "Remove"
+msgstr "移除"
+
+#. TRANSLATORS: this is the small blue label on the tile
+#. * that tells the user there is an update for the installed
+#. * application available
+#: ../src/gs-app-tile.c:99 ../src/gs-app-tile.c:103
+#: ../src/gs-feature-tile.c:71 ../src/gs-popular-tile.c:82
+#: ../src/gs-popular-tile.c:86
+msgid "Updates"
+msgstr "更新"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: ../src/gs-category.c:215
+msgid "Other"
+msgstr "其他"
+
+#. vim: set noexpandtab:
+#: ../src/gs-first-run-dialog.ui.h:1
+msgid "Welcome"
+msgstr "歡迎"
+
+#: ../src/gs-first-run-dialog.ui.h:2
+msgid "Welcome to Software"
+msgstr "歡迎使用《軟件》"
+
+#: ../src/gs-first-run-dialog.ui.h:3
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr "《軟件》讓你安裝所有你需要的軟件,在一個地方滿足所有需求。請看看我們的推薦項目,瀏覽各項分類,或是直接搜尋你想要使用的應用程式。"
+
+#: ../src/gs-first-run-dialog.ui.h:4
+msgid "_Let’s Go Shopping"
+msgstr "出發去購物(_L)"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: ../src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Removed"
+msgstr "已移除"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: ../src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Installed"
+msgstr "已安裝"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: ../src/gs-history-dialog.c:93
+msgctxt "app status"
+msgid "Updated"
+msgstr "已更新"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: ../src/gs-history-dialog.c:99
+msgctxt "app status"
+msgid "Unknown"
+msgstr "不明"
+
+#. vim: set noexpandtab:
+#: ../src/gs-history-dialog.ui.h:1
+msgid "History"
+msgstr "歷史"
+
+#. TRANSLATORS: this is when the offline update failed
+#: ../src/gs-offline-updates.c:249
+msgid "Failed To Update"
+msgstr "無法更新"
+
+#. TRANSLATORS: the transaction could not be completed
+#. * as a previous transaction was unfinished
+#: ../src/gs-offline-updates.c:255
+msgid "A previous update was unfinished."
+msgstr "上個更新尚未完成。"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: ../src/gs-offline-updates.c:265
+msgid "Network access was required but not available."
+msgstr "需要有網絡存取但卻無法使用。"
+
+#. TRANSLATORS: if the package is not signed correctly
+#. *
+#: ../src/gs-offline-updates.c:274
+msgid "An update was not signed in the correct way."
+msgstr "有項更新的簽署方式不正確。"
+
+#. TRANSLATORS: the transaction failed in a way the user
+#. * probably cannot comprehend. Package management systems
+#. * really are teh suck.
+#: ../src/gs-offline-updates.c:284
+msgid "The update could not be completed."
+msgstr "無法完成更新。"
+
+#. TRANSLATORS: the user aborted the update manually
+#: ../src/gs-offline-updates.c:289
+msgid "The update was cancelled."
+msgstr "更新已取消。"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: ../src/gs-offline-updates.c:295
+msgid "An offline update was requested but no packages required updating."
+msgstr "已請求離線更新,但沒有軟件包需要更新。"
+
+#. TRANSLATORS: we ran out of disk space
+#: ../src/gs-offline-updates.c:299
+msgid "No space was left on the drive."
+msgstr "裝置剩餘空間不足。"
+
+#. TRANSLATORS: the update process failed in a general
+#. * way, usually this message will come from source distros
+#. * like gentoo
+#: ../src/gs-offline-updates.c:307
+msgid "An update failed to install correctly."
+msgstr "無法正確安裝更新。"
+
+#. TRANSLATORS: We didn't handle the error type
+#: ../src/gs-offline-updates.c:312
+msgid "The offline update failed in an unexpected way."
+msgstr "離線更新以不如預期的方式失敗。"
+
+#. TRANSLATORS: these are geeky messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: ../src/gs-offline-updates.c:321
+msgid "Detailed errors from the package manager follow:"
+msgstr "軟件包管理程式的詳細錯誤資訊如下:"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: ../src/gs-plugin-loader.c:900
+msgid "OS Updates"
+msgstr "作業系統更新"
+
+#. TRANSLATORS: this is a longer description of the
+#. * os-update item
+#: ../src/gs-plugin-loader.c:905
+msgid "Includes performance, stability and security improvements."
+msgstr "包括效能、穩定性、安全性等改善。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: ../src/gs-plugin-loader.c:1503
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "沒有可用的 %s 格式附加編解碼器。"
+
+#: ../src/gs-plugin-loader.c:1506
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format can be found on the website."
+msgstr "%s 的相關資訊,以及網站上提供的該如何取得可播放此格式的編解碼器之選項。"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: ../src/gs-screenshot-image.c:220
+msgid "Screenshot not found"
+msgstr "找不到螢幕擷圖"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: ../src/gs-screenshot-image.c:238
+msgid "Failed to load image"
+msgstr "無法載入影像"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: ../src/gs-screenshot-image.c:366
+msgid "Screenshot size not found"
+msgstr "找不到螢幕擷圖的大小"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: ../src/gs-screenshot-image.c:385
+msgid "Could not create cache"
+msgstr "無法建立快取"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: ../src/gs-screenshot-image.c:402
+msgid "Screenshot not valid"
+msgstr "螢幕擷圖無效"
+
+#. TRANSLATORS: this is when networking is not available
+#: ../src/gs-screenshot-image.c:408
+msgid "Screenshot not available"
+msgstr "螢幕擷圖無法使用"
+
+#: ../src/gs-screenshot-image.c:461
+msgid "Screenshot"
+msgstr "螢幕擷圖"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#: ../src/gs-shell-details.c:182 ../src/gs-shell-details.ui.h:2
+msgid "_Install"
+msgstr "安裝(_I)"
+
+#. TRANSLATORS: button text in the header when an application
+#. * is in the process of being installed
+#: ../src/gs-shell-details.c:193
+msgid "_Installing"
+msgstr "安裝中(_I)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: ../src/gs-shell-details.c:219 ../src/gs-shell-details.ui.h:3
+msgid "_Remove"
+msgstr "移除(_R)"
+
+#. TRANSLATORS: button text in the header when an application can be installed
+#: ../src/gs-shell-details.c:226
+msgid "_Removing"
+msgstr "移除中(_R)"
+
+#. TRANSLATORS: this is where the licence is not known
+#: ../src/gs-shell-details.c:591
+msgctxt "license"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: this is where the version is not known
+#: ../src/gs-shell-details.c:604
+msgctxt "version"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: this is where the size is being worked out
+#: ../src/gs-shell-details.c:610
+msgctxt "size"
+msgid "Calculating…"
+msgstr "計算中…"
+
+#. TRANSLATORS: this is where the size is not known
+#: ../src/gs-shell-details.c:613
+msgctxt "size"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: ../src/gs-shell-details.c:625
+msgctxt "updated"
+msgid "Never"
+msgstr "永不"
+
+#. TRANSLATORS: this is the application isn't in any
+#. * defined menu category
+#: ../src/gs-shell-details.c:640
+msgctxt "menu category"
+msgid "None"
+msgstr "無"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: ../src/gs-shell-details.c:650
+msgctxt "origin"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: ../src/gs-shell-details.c:1099 ../src/gs-shell-installed.c:167
+#: ../src/gs-shell-search.c:147
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "你確定要移除 %s?"
+
+#. TRANSLATORS: longer dialog text
+#: ../src/gs-shell-details.c:1111 ../src/gs-shell-installed.c:179
+#: ../src/gs-shell-search.c:159
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s 將被移除,將來若你想使用時則須再次安裝。"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-details.ui.h:1
+msgid "Details page"
+msgstr "細節頁"
+
+#: ../src/gs-shell-details.ui.h:5
+msgid "Software Source Included"
+msgstr "內含軟件來源"
+
+#: ../src/gs-shell-details.ui.h:6
+msgid ""
+"This application includes a software source which provides updates, as well "
+"as access to other software."
+msgstr "此應用程式內含可提供更新,並存取其他軟件的軟件來源。"
+
+#: ../src/gs-shell-details.ui.h:7
+msgid "No Software Source Included"
+msgstr "未含軟件來源"
+
+#: ../src/gs-shell-details.ui.h:8
+msgid ""
+"This application does not include a software source. It will not be updated "
+"with new versions."
+msgstr "此應用程式不含軟件來源。它不會被新版本更新。"
+
+#: ../src/gs-shell-details.ui.h:9
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "此軟件已經由你的散布版提供,不應替換。"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: ../src/gs-shell-details.ui.h:11
+msgid "Software Source Identified"
+msgstr "已識明軟件來源"
+
+#: ../src/gs-shell-details.ui.h:12
+msgid ""
+"Adding this software source will give you access to additional software and "
+"upgrades."
+msgstr "加入此軟件來源可讓你存取更多軟件與升級。"
+
+#: ../src/gs-shell-details.ui.h:13
+msgid "Only use software sources that you trust."
+msgstr "請務必只使用你信任的軟件來源。"
+
+#: ../src/gs-shell-details.ui.h:14
+msgid "Internet Only Application"
+msgstr "唯互聯網應用程式"
+
+#: ../src/gs-shell-details.ui.h:15
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "此類應用程式僅可在有互聯網連線時可以使用。"
+
+#: ../src/gs-shell-details.ui.h:16
+msgid "_Website"
+msgstr "網站(_W)"
+
+#: ../src/gs-shell-details.ui.h:17
+msgid "_History"
+msgstr "歷史(_H)"
+
+#. Translators: A label for a button to execute the selected application.
+#: ../src/gs-shell-details.ui.h:19
+msgid "_Launch"
+msgstr "啟動(_L)"
+
+#: ../src/gs-shell-details.ui.h:20
+msgid "Details"
+msgstr "細節"
+
+#: ../src/gs-shell-details.ui.h:21 ../src/gs-sources-dialog.ui.h:9
+msgid "Version"
+msgstr "版本"
+
+#: ../src/gs-shell-details.ui.h:22
+msgid "Updated"
+msgstr "已更新"
+
+#: ../src/gs-shell-details.ui.h:23
+msgid "Category"
+msgstr "類別"
+
+#: ../src/gs-shell-details.ui.h:24
+msgid "Source"
+msgstr "來源"
+
+#: ../src/gs-shell-details.ui.h:25
+msgid "License"
+msgstr "授權"
+
+#: ../src/gs-shell-details.ui.h:26
+msgid "Size"
+msgstr "大小"
+
+#: ../src/gs-shell-details.ui.h:27
+msgid "Developer"
+msgstr "開發者"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the main category for Add-ons
+#: ../src/gs-shell-details.ui.h:28 ../src/gs-shell-installed.c:492
+#: ../src/gs-update-list.c:88 ../src/plugins/menu-spec-common.c:210
+msgid "Add-ons"
+msgstr "附加元件"
+
+#: ../src/gs-shell-details.ui.h:29
+msgid "Selected add-ons will be installed with the application."
+msgstr "選取的附加元件會隨該程式一併安裝。"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: ../src/gs-shell-installed.c:482
+msgid "System Applications"
+msgstr "系統應用程式"
+
+#: ../src/gs-shell-installed.c:588
+msgid "Click on items to select them"
+msgstr "點按項目可以選取"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-installed.ui.h:1
+msgid "Installed page"
+msgstr "已安裝頁"
+
+#: ../src/gs-shell-installed.ui.h:2
+msgid "_Add to Folder…"
+msgstr "加入到資料夾中(_A)…"
+
+#: ../src/gs-shell-installed.ui.h:3
+msgid "_Move to Folder…"
+msgstr "移動到資料夾中(_M)"
+
+#: ../src/gs-shell-installed.ui.h:4
+msgid "_Remove from Folder"
+msgstr "從資料夾中移除(_R)"
+
+#. TRANSLATORS: this is a heading for audio applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:338
+msgid "Recommended Audio Applications"
+msgstr "推薦的音訊應用程式"
+
+#. TRANSLATORS: this is a heading for games which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:343
+msgid "Recommended Games"
+msgstr "推薦的遊戲"
+
+#. TRANSLATORS: this is a heading for graphics applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:348
+msgid "Recommended Graphics Applications"
+msgstr "推薦的美工圖形應用程式"
+
+#. TRANSLATORS: this is a heading for office applications which have been featured ('recommended') by the distribution
+#: ../src/gs-shell-overview.c:353
+msgid "Recommended Office Applications"
+msgstr "推薦的辦公應用程式"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-overview.ui.h:1
+msgid "Overview page"
+msgstr "概覽頁"
+
+#: ../src/gs-shell-overview.ui.h:2
+msgid "Featured Application"
+msgstr "特色應用程式"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: ../src/gs-shell-overview.ui.h:4
+msgid "Editor's Picks"
+msgstr "編輯精選"
+
+#: ../src/gs-shell-overview.ui.h:5
+msgid "Categories"
+msgstr "類別"
+
+#: ../src/gs-shell-overview.ui.h:6
+msgid "No Application Data Found"
+msgstr "找不到應用程式資料"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-search.ui.h:1
+msgid "Search page"
+msgstr "搜尋頁"
+
+#: ../src/gs-shell-search.ui.h:2
+msgid "No Application Found"
+msgstr "找不到應用程式"
+
+#. TRANSLATORS: Time in 24h format
+#: ../src/gs-shell-updates.c:145
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: ../src/gs-shell-updates.c:148
+msgid "%l:%M %p"
+msgstr "%p %l:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: ../src/gs-shell-updates.c:154
+msgid "Yesterday, %R"
+msgstr "昨日 %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: ../src/gs-shell-updates.c:158
+msgid "Yesterday, %l:%M %p"
+msgstr "昨日%p %l:%M"
+
+#: ../src/gs-shell-updates.c:161
+msgid "Two days ago"
+msgstr "兩天前"
+
+#: ../src/gs-shell-updates.c:163
+msgid "Three days ago"
+msgstr "三天前"
+
+#: ../src/gs-shell-updates.c:165
+msgid "Four days ago"
+msgstr "四天前"
+
+#: ../src/gs-shell-updates.c:167
+msgid "Five days ago"
+msgstr "五天前"
+
+#: ../src/gs-shell-updates.c:169
+msgid "Six days ago"
+msgstr "六天前"
+
+#: ../src/gs-shell-updates.c:171
+msgid "One week ago"
+msgstr "一週前"
+
+#: ../src/gs-shell-updates.c:173
+msgid "Two weeks ago"
+msgstr "兩週前"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: ../src/gs-shell-updates.c:177
+msgid "%e %B %Y"
+msgstr "%Y年%m月%e日"
+
+#. TRANSLATORS: the updates are being downloaded
+#: ../src/gs-shell-updates.c:196
+msgid "Downloading new updates…"
+msgstr "下載新的更新中…"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: ../src/gs-shell-updates.c:200
+msgid "Looking for new updates…"
+msgstr "尋找新的更新中…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:254
+msgid "Setting up updates…"
+msgstr "設置更新中…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: ../src/gs-shell-updates.c:255 ../src/gs-shell-updates.c:262
+msgid "(This could take a while)"
+msgstr "(這可能會花上一段時間)"
+
+#. TRANSLATORS: this is when the updates panel is starting up
+#: ../src/gs-shell-updates.c:268
+msgid "Checking for updates…"
+msgstr "正檢查是否有更新…"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: ../src/gs-shell-updates.c:402
+#, c-format
+msgid "Last checked: %s"
+msgstr "上次檢查:%s"
+
+#. TRANSLATORS: can't do updates check
+#: ../src/gs-shell-updates.c:753
+msgid "No Network"
+msgstr "沒有網絡"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:757
+msgid "Internet access is required to check for updates."
+msgstr "需要存取互聯網以檢查更新。"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:761
+msgid "Network Settings"
+msgstr "網絡設定值"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: ../src/gs-shell-updates.c:780
+msgid "Charges may apply"
+msgstr "可能需要費用"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: ../src/gs-shell-updates.c:784
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "使用流動寬頻檢查更新,可能讓你負擔額外的數據傳輸費用。"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: ../src/gs-shell-updates.c:788
+msgid "Check Anyway"
+msgstr "無論如何都檢查"
+
+#. vim: set noexpandtab:
+#: ../src/gs-shell-updates.ui.h:1
+msgid "Updates page"
+msgstr "更新頁"
+
+#: ../src/gs-shell-updates.ui.h:2
+msgid "Software is up to date"
+msgstr "軟件處於最新狀態"
+
+#: ../src/gs-shell-updates.ui.h:3
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "使用流動寬頻檢查更新,可能讓你負擔額外的數據傳輸費用"
+
+#: ../src/gs-shell-updates.ui.h:4
+msgid "_Check Anyway"
+msgstr "無論如何都檢查(_C)"
+
+#: ../src/gs-shell-updates.ui.h:5
+msgid "Go online to check for updates"
+msgstr "上線以檢查更新"
+
+#: ../src/gs-shell-updates.ui.h:6
+msgid "_Network Settings"
+msgstr "網絡設定值(_N)"
+
+#. TRANSLATORS: this source has no apps installed from it
+#: ../src/gs-sources-dialog.c:91
+msgid "No software installed"
+msgstr "未安裝軟件"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-sources-dialog.c:94
+#, c-format
+msgid "%i application installed"
+msgid_plural "%i applications installed"
+msgstr[0] "已安裝 %i 項應用程式"
+
+#. TRANSLATORS: this source has some apps installed from it
+#: ../src/gs-sources-dialog.c:99
+#, c-format
+msgid "%i add-on installed"
+msgid_plural "%i add-ons installed"
+msgstr[0] "已安裝 %i 個附加元件"
+
+#. TRANSLATORS: this source has some apps and addons installed from it
+#: ../src/gs-sources-dialog.c:104
+#, c-format
+msgid "%i application and %i add-ons installed"
+msgid_plural "%i applications and %i add-ons installed"
+msgstr[0] "已安裝 %i 項應用程式、%i 個附加元件"
+
+#: ../src/gs-sources-dialog.c:296 ../src/gs-sources-dialog.ui.h:13
+msgid "Remove Source"
+msgstr "移除來源"
+
+#: ../src/gs-sources-dialog.c:311
+msgid "Removing…"
+msgstr "移除中…"
+
+#. vim: set noexpandtab:
+#: ../src/gs-sources-dialog.ui.h:1
+msgid "Software Sources"
+msgstr "軟件來源"
+
+#: ../src/gs-sources-dialog.ui.h:3
+msgid "No sources found."
+msgstr "找不到來源。"
+
+#: ../src/gs-sources-dialog.ui.h:4
+msgid "Software sources give you access to additional software."
+msgstr "軟件來源讓你存取更多軟件。"
+
+#: ../src/gs-sources-dialog.ui.h:5
+msgid ""
+"Removing a source will also remove any software you have installed from it."
+msgstr "移除來源也會移除你先前從該來源安裝過的任何軟件。"
+
+#: ../src/gs-sources-dialog.ui.h:6
+msgid "No software installed from this source"
+msgstr "沒有從此來源安裝的軟件"
+
+#: ../src/gs-sources-dialog.ui.h:7
+msgid "Installed from this Source"
+msgstr "從此來源安裝的軟件"
+
+#: ../src/gs-sources-dialog.ui.h:8
+msgid "Source Details"
+msgstr "來源細節"
+
+#: ../src/gs-sources-dialog.ui.h:10
+msgid "Last Checked"
+msgstr "上次檢查"
+
+#: ../src/gs-sources-dialog.ui.h:11
+msgid "Added"
+msgstr "加入時間"
+
+#: ../src/gs-sources-dialog.ui.h:12
+msgid "Website"
+msgstr "網站"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: ../src/gs-update-dialog.c:167
+msgid "Installed Updates"
+msgstr "已安裝的更新"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window
+#: ../src/gs-update-dialog.c:180
+#, c-format
+msgid "Installed on %s"
+msgstr "已安裝於 %s"
+
+#: ../src/gs-update-monitor.c:99
+msgid "Software Updates Available"
+msgstr "有軟件更新可用"
+
+#: ../src/gs-update-monitor.c:100
+msgid "Important OS and application updates are ready to be installed"
+msgstr "已備妥重要的作業系統與應用程式更新可供安裝"
+
+#: ../src/gs-update-monitor.c:103
+msgid "View"
+msgstr "檢視"
+
+#: ../src/gs-update-monitor.c:104
+msgid "Not Now"
+msgstr "現在不是時候"
+
+#: ../src/gs-update-monitor.c:144
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "軟件更新已安裝"
+
+#. TRANSLATORS: message when we've done offline updates
+#: ../src/gs-update-monitor.c:148
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "重要的作業系統更新已安裝。"
+
+#: ../src/gs-update-monitor.c:153
+msgid "Software Updates Failed"
+msgstr "軟件更新失敗"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: ../src/gs-update-monitor.c:155
+msgid "An important OS update failed to be installed."
+msgstr "重要的作業系統更新安裝失敗。"
+
+#: ../src/gs-update-monitor.c:164
+msgid "Review"
+msgstr "檢閱"
+
+#: ../src/gs-update-monitor.c:166
+msgid "Show Details"
+msgstr "顯示細節"
+
+#: ../src/gs-update-monitor.c:167
+msgid "OK"
+msgstr "確定"
+
+#. vim: set noexpandtab:
+#: ../src/gs-star-widget.ui.h:1
+msgid "One Star"
+msgstr "一顆星"
+
+#: ../src/gs-star-widget.ui.h:2
+msgid "Two Stars"
+msgstr "兩顆星"
+
+#: ../src/gs-star-widget.ui.h:3
+msgid "Three Stars"
+msgstr "三顆星"
+
+#: ../src/gs-star-widget.ui.h:4
+msgid "Four Stars"
+msgstr "四顆星"
+
+#: ../src/gs-star-widget.ui.h:5
+msgid "Five Stars"
+msgstr "五顆星"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#: ../src/gs-utils.c:131
+#, c-format
+msgid "%s is now installed"
+msgstr "%s 現已安裝"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: ../src/gs-utils.c:135
+msgid "Launch"
+msgstr "啟動"
+
+#: ../src/gs-utils.c:159
+msgid "Sorry, this did not work"
+msgstr "很抱歉,那沒有用"
+
+#. TRANSLATORS: this is when the install fails
+#: ../src/gs-utils.c:163
+#, c-format
+msgid "Installation of %s failed."
+msgstr "%s 安裝失敗。"
+
+#. TRANSLATORS: this is when the remove fails
+#: ../src/gs-utils.c:168
+#, c-format
+msgid "Removal of %s failed."
+msgstr "%s 移除失敗。"
+
+#: ../src/plugins/gs-plugin-appstream.c:162
+#, c-format
+msgid "No AppStream data found"
+msgstr "找不到 AppStream 資料"
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * be considered a "Conjunctive AND Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 and MIT and BSD-2-Clause"
+#: ../src/plugins/gs-plugin-appstream.c:312
+msgid " and "
+msgstr " and "
+
+#. TRANSLATORS: This is how we join the licences and can
+#. * be considered a "Disjunctive OR Operator" according
+#. * to the SPDX specification. For example:
+#. * "LGPL-2.1 or MIT"
+#: ../src/plugins/gs-plugin-appstream.c:320
+msgid " or "
+msgstr " or "
+
+#. TRANSLATORS: this is when a webapp has no comment
+#: ../src/plugins/gs-plugin-epiphany.c:143
+#, c-format
+msgid "Web app"
+msgstr "網絡程式"
+
+#. TRANSLATORS: this is the licence of the web-app
+#: ../src/plugins/gs-plugin-epiphany.c:151
+msgid "Proprietary"
+msgstr "專有授權"
+
+#: ../src/plugins/gs-plugin-hardcoded-categories.c:160
+msgid "Featured"
+msgstr "特色"
+
+#. TRANSLATORS: this is the menu spec main category for Audio
+#: ../src/plugins/menu-spec-common.c:30
+msgid "Audio"
+msgstr "音訊"
+
+#: ../src/plugins/menu-spec-common.c:31
+msgctxt "Menu subcategory of Audio"
+msgid "Editing"
+msgstr "編輯"
+
+#: ../src/plugins/menu-spec-common.c:32
+msgctxt "Menu subcategory of Audio"
+msgid "Databases"
+msgstr "資料庫"
+
+#: ../src/plugins/menu-spec-common.c:33
+msgctxt "Menu subcategory of Audio"
+msgid "Disc Burning"
+msgstr "光碟燒錄"
+
+#: ../src/plugins/menu-spec-common.c:34
+msgctxt "Menu subcategory of Audio"
+msgid "Ham Radio"
+msgstr "自製無線電"
+
+#: ../src/plugins/menu-spec-common.c:35
+msgctxt "Menu subcategory of Audio"
+msgid "MIDI"
+msgstr "MIDI"
+
+#: ../src/plugins/menu-spec-common.c:36
+msgctxt "Menu subcategory of Audio"
+msgid "Mixer"
+msgstr "混音器"
+
+#: ../src/plugins/menu-spec-common.c:37
+msgctxt "Menu subcategory of Audio"
+msgid "Music"
+msgstr "樂譜"
+
+#: ../src/plugins/menu-spec-common.c:38
+msgctxt "Menu subcategory of Audio"
+msgid "Players"
+msgstr "播放器"
+
+#: ../src/plugins/menu-spec-common.c:39
+msgctxt "Menu subcategory of Audio"
+msgid "Recorders"
+msgstr "錄製器"
+
+#: ../src/plugins/menu-spec-common.c:40
+msgctxt "Menu subcategory of Audio"
+msgid "Sequencers"
+msgstr "序段編輯器"
+
+#: ../src/plugins/menu-spec-common.c:41
+msgctxt "Menu subcategory of Audio"
+msgid "Tuners"
+msgstr "調諧器"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: ../src/plugins/menu-spec-common.c:43
+msgid "Development Tools"
+msgstr "開發工具"
+
+#: ../src/plugins/menu-spec-common.c:44
+msgctxt "Menu subcategory of Development Tools"
+msgid "Building"
+msgstr "建置"
+
+#: ../src/plugins/menu-spec-common.c:45
+msgctxt "Menu subcategory of Development Tools"
+msgid "Databases"
+msgstr "資料庫"
+
+#: ../src/plugins/menu-spec-common.c:46
+msgctxt "Menu subcategory of Development Tools"
+msgid "Debuggers"
+msgstr "除錯器"
+
+#: ../src/plugins/menu-spec-common.c:47
+msgctxt "Menu subcategory of Development Tools"
+msgid "GUI Designers"
+msgstr "GUI 設計工具"
+
+#: ../src/plugins/menu-spec-common.c:48
+msgctxt "Menu subcategory of Development Tools"
+msgid "IDE"
+msgstr "IDE"
+
+#: ../src/plugins/menu-spec-common.c:49
+msgctxt "Menu subcategory of Development Tools"
+msgid "Profiling"
+msgstr "效能評測"
+
+#: ../src/plugins/menu-spec-common.c:50
+msgctxt "Menu subcategory of Development Tools"
+msgid "Project Management"
+msgstr "專案管理"
+
+#: ../src/plugins/menu-spec-common.c:51
+msgctxt "Menu subcategory of Development Tools"
+msgid "Revision Control"
+msgstr "修訂版控制"
+
+#: ../src/plugins/menu-spec-common.c:52
+msgctxt "Menu subcategory of Development Tools"
+msgid "Translation"
+msgstr "翻譯"
+
+#: ../src/plugins/menu-spec-common.c:53
+msgctxt "Menu subcategory of Development Tools"
+msgid "Web Development"
+msgstr "網頁開發"
+
+#. TRANSLATORS: this is the menu spec main category for Education
+#: ../src/plugins/menu-spec-common.c:55
+msgid "Education"
+msgstr "教育"
+
+#: ../src/plugins/menu-spec-common.c:56
+msgctxt "Menu subcategory of Education"
+msgid "Art"
+msgstr "藝術"
+
+#: ../src/plugins/menu-spec-common.c:57
+msgctxt "Menu subcategory of Education"
+msgid "Artificial Intelligence"
+msgstr "人工智能"
+
+#: ../src/plugins/menu-spec-common.c:58
+msgctxt "Menu subcategory of Education"
+msgid "Astronomy"
+msgstr "天文"
+
+#: ../src/plugins/menu-spec-common.c:59
+msgctxt "Menu subcategory of Education"
+msgid "Biology"
+msgstr "生物"
+
+#: ../src/plugins/menu-spec-common.c:60
+msgctxt "Menu subcategory of Education"
+msgid "Chemistry"
+msgstr "化學"
+
+#: ../src/plugins/menu-spec-common.c:61
+msgctxt "Menu subcategory of Education"
+msgid "Computer Science"
+msgstr "電腦科學"
+
+#: ../src/plugins/menu-spec-common.c:62
+msgctxt "Menu subcategory of Education"
+msgid "Construction"
+msgstr "建築"
+
+#: ../src/plugins/menu-spec-common.c:63
+msgctxt "Menu subcategory of Education"
+msgid "Data Visualization"
+msgstr "資料示現"
+
+#: ../src/plugins/menu-spec-common.c:64
+msgctxt "Menu subcategory of Education"
+msgid "Economy"
+msgstr "經濟"
+
+#: ../src/plugins/menu-spec-common.c:65
+msgctxt "Menu subcategory of Education"
+msgid "Electricity"
+msgstr "電學"
+
+#: ../src/plugins/menu-spec-common.c:66
+msgctxt "Menu subcategory of Education"
+msgid "Electronics"
+msgstr "電子學"
+
+#: ../src/plugins/menu-spec-common.c:67
+msgctxt "Menu subcategory of Education"
+msgid "Engineering"
+msgstr "工程"
+
+#: ../src/plugins/menu-spec-common.c:68
+msgctxt "Menu subcategory of Education"
+msgid "Geography"
+msgstr "地理"
+
+#: ../src/plugins/menu-spec-common.c:69
+msgctxt "Menu subcategory of Education"
+msgid "Geology"
+msgstr "地質"
+
+#: ../src/plugins/menu-spec-common.c:70
+msgctxt "Menu subcategory of Education"
+msgid "Geoscience"
+msgstr "地球科學"
+
+#: ../src/plugins/menu-spec-common.c:71
+msgctxt "Menu subcategory of Education"
+msgid "History"
+msgstr "歷史"
+
+#: ../src/plugins/menu-spec-common.c:72
+msgctxt "Menu subcategory of Education"
+msgid "Humanities"
+msgstr "人文"
+
+#: ../src/plugins/menu-spec-common.c:73
+msgctxt "Menu subcategory of Education"
+msgid "Image Processing"
+msgstr "影像處理"
+
+#: ../src/plugins/menu-spec-common.c:74
+msgctxt "Menu subcategory of Education"
+msgid "Languages"
+msgstr "語言"
+
+#: ../src/plugins/menu-spec-common.c:75
+msgctxt "Menu subcategory of Education"
+msgid "Literature"
+msgstr "文學"
+
+#: ../src/plugins/menu-spec-common.c:76
+msgctxt "Menu subcategory of Education"
+msgid "Maps"
+msgstr "地圖"
+
+#: ../src/plugins/menu-spec-common.c:77
+msgctxt "Menu subcategory of Education"
+msgid "Math"
+msgstr "數學"
+
+#: ../src/plugins/menu-spec-common.c:78
+msgctxt "Menu subcategory of Education"
+msgid "Medical"
+msgstr "醫學"
+
+#: ../src/plugins/menu-spec-common.c:79
+msgctxt "Menu subcategory of Education"
+msgid "Music"
+msgstr "音樂"
+
+#: ../src/plugins/menu-spec-common.c:80
+msgctxt "Menu subcategory of Education"
+msgid "Numerical Analysis"
+msgstr "數值分析"
+
+#: ../src/plugins/menu-spec-common.c:81
+msgctxt "Menu subcategory of Education"
+msgid "Parallel Computing"
+msgstr "平行計算"
+
+#: ../src/plugins/menu-spec-common.c:82
+msgctxt "Menu subcategory of Education"
+msgid "Physics"
+msgstr "物理"
+
+#: ../src/plugins/menu-spec-common.c:83
+msgctxt "Menu subcategory of Education"
+msgid "Robotics"
+msgstr "機械人學"
+
+#: ../src/plugins/menu-spec-common.c:84
+msgctxt "Menu subcategory of Education"
+msgid "Spirituality"
+msgstr "靈性"
+
+#: ../src/plugins/menu-spec-common.c:85
+msgctxt "Menu subcategory of Education"
+msgid "Sports"
+msgstr "運動"
+
+#. TRANSLATORS: this is the menu spec main category for Games
+#: ../src/plugins/menu-spec-common.c:87
+msgid "Games"
+msgstr "遊戲"
+
+#: ../src/plugins/menu-spec-common.c:88
+msgctxt "Menu subcategory of Games"
+msgid "Action"
+msgstr "動作"
+
+#: ../src/plugins/menu-spec-common.c:89
+msgctxt "Menu subcategory of Games"
+msgid "Adventure"
+msgstr "冒險"
+
+#: ../src/plugins/menu-spec-common.c:90
+msgctxt "Menu subcategory of Games"
+msgid "Arcade"
+msgstr "機臺"
+
+#: ../src/plugins/menu-spec-common.c:91
+msgctxt "Menu subcategory of Games"
+msgid "Blocks"
+msgstr "方塊"
+
+#: ../src/plugins/menu-spec-common.c:92
+msgctxt "Menu subcategory of Games"
+msgid "Board"
+msgstr "棋盤"
+
+#: ../src/plugins/menu-spec-common.c:93
+msgctxt "Menu subcategory of Games"
+msgid "Card"
+msgstr "啤牌"
+
+#: ../src/plugins/menu-spec-common.c:94
+msgctxt "Menu subcategory of Games"
+msgid "Emulators"
+msgstr "模擬器"
+
+#: ../src/plugins/menu-spec-common.c:95
+msgctxt "Menu subcategory of Games"
+msgid "Kids"
+msgstr "孩童"
+
+#: ../src/plugins/menu-spec-common.c:96
+msgctxt "Menu subcategory of Games"
+msgid "Logic"
+msgstr "邏輯"
+
+#: ../src/plugins/menu-spec-common.c:97
+msgctxt "Menu subcategory of Games"
+msgid "Role Playing"
+msgstr "角色扮演"
+
+#: ../src/plugins/menu-spec-common.c:98
+msgctxt "Menu subcategory of Games"
+msgid "Shooter"
+msgstr "射擊"
+
+#: ../src/plugins/menu-spec-common.c:99
+msgctxt "Menu subcategory of Games"
+msgid "Simulation"
+msgstr "模擬"
+
+#: ../src/plugins/menu-spec-common.c:100
+msgctxt "Menu subcategory of Games"
+msgid "Sports"
+msgstr "運動"
+
+#: ../src/plugins/menu-spec-common.c:101
+msgctxt "Menu subcategory of Games"
+msgid "Strategy"
+msgstr "策略"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: ../src/plugins/menu-spec-common.c:103
+msgid "Graphics"
+msgstr "美工繪圖"
+
+#: ../src/plugins/menu-spec-common.c:104
+msgctxt "Menu subcategory of Graphics"
+msgid "2D Graphics"
+msgstr "2D 圖形"
+
+#: ../src/plugins/menu-spec-common.c:105
+msgctxt "Menu subcategory of Graphics"
+msgid "3D Graphics"
+msgstr "3D 圖形"
+
+#: ../src/plugins/menu-spec-common.c:106
+msgctxt "Menu subcategory of Graphics"
+msgid "OCR"
+msgstr "OCR"
+
+#: ../src/plugins/menu-spec-common.c:107
+msgctxt "Menu subcategory of Graphics"
+msgid "Photography"
+msgstr "攝影"
+
+#: ../src/plugins/menu-spec-common.c:108
+msgctxt "Menu subcategory of Graphics"
+msgid "Publishing"
+msgstr "出版"
+
+#: ../src/plugins/menu-spec-common.c:109
+msgctxt "Menu subcategory of Graphics"
+msgid "Raster Graphics"
+msgstr "光柵圖形"
+
+#: ../src/plugins/menu-spec-common.c:110
+msgctxt "Menu subcategory of Graphics"
+msgid "Scanning"
+msgstr "掃描"
+
+#: ../src/plugins/menu-spec-common.c:111
+msgctxt "Menu subcategory of Graphics"
+msgid "Vector Graphics"
+msgstr "向量圖形"
+
+#: ../src/plugins/menu-spec-common.c:112
+msgctxt "Menu subcategory of Graphics"
+msgid "Viewer"
+msgstr "檢視器"
+
+#. TRANSLATORS: this is the menu spec main category for Network
+#: ../src/plugins/menu-spec-common.c:114
+msgid "Internet"
+msgstr "互聯網"
+
+#: ../src/plugins/menu-spec-common.c:115
+msgctxt "Menu subcategory of Internet"
+msgid "Chat"
+msgstr "聊天"
+
+#: ../src/plugins/menu-spec-common.c:116
+msgctxt "Menu subcategory of Internet"
+msgid "Dialup"
+msgstr "撥號"
+
+#: ../src/plugins/menu-spec-common.c:117
+msgctxt "Menu subcategory of Internet"
+msgid "Email"
+msgstr "電子郵件"
+
+#: ../src/plugins/menu-spec-common.c:118
+msgctxt "Menu subcategory of Internet"
+msgid "Feed"
+msgstr "消息來源"
+
+#: ../src/plugins/menu-spec-common.c:119
+msgctxt "Menu subcategory of Internet"
+msgid "File Transfer"
+msgstr "檔案傳輸"
+
+#: ../src/plugins/menu-spec-common.c:120
+msgctxt "Menu subcategory of Internet"
+msgid "Ham Radio"
+msgstr "自製無線電"
+
+#: ../src/plugins/menu-spec-common.c:121
+msgctxt "Menu subcategory of Internet"
+msgid "Instant Messaging"
+msgstr "即時通訊"
+
+#: ../src/plugins/menu-spec-common.c:122
+msgctxt "Menu subcategory of Internet"
+msgid "IRC Clients"
+msgstr "IRC 客戶端"
+
+#: ../src/plugins/menu-spec-common.c:123
+msgctxt "Menu subcategory of Internet"
+msgid "Monitor"
+msgstr "顯示器"
+
+#: ../src/plugins/menu-spec-common.c:124
+msgctxt "Menu subcategory of Internet"
+msgid "News"
+msgstr "新聞"
+
+#: ../src/plugins/menu-spec-common.c:125
+msgctxt "Menu subcategory of Internet"
+msgid "P2P"
+msgstr "P2P"
+
+#: ../src/plugins/menu-spec-common.c:126
+msgctxt "Menu subcategory of Internet"
+msgid "Remote Access"
+msgstr "遠端存取"
+
+#: ../src/plugins/menu-spec-common.c:127
+msgctxt "Menu subcategory of Internet"
+msgid "Telephony"
+msgstr "電話學"
+
+#: ../src/plugins/menu-spec-common.c:128
+msgctxt "Menu subcategory of Internet"
+msgid "Video Conference"
+msgstr "視像會議"
+
+#: ../src/plugins/menu-spec-common.c:129
+msgctxt "Menu subcategory of Internet"
+msgid "Web Browser"
+msgstr "網頁瀏覽器"
+
+#: ../src/plugins/menu-spec-common.c:130
+msgctxt "Menu subcategory of Internet"
+msgid "Web Development"
+msgstr "網頁開發"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: ../src/plugins/menu-spec-common.c:132
+msgid "Office"
+msgstr "辦公"
+
+#: ../src/plugins/menu-spec-common.c:133
+msgctxt "Menu subcategory of Office"
+msgid "Calendar"
+msgstr "行事曆"
+
+#: ../src/plugins/menu-spec-common.c:134
+msgctxt "Menu subcategory of Office"
+msgid "Chart"
+msgstr "圖表"
+
+#: ../src/plugins/menu-spec-common.c:135
+msgctxt "Menu subcategory of Office"
+msgid "Contact Management"
+msgstr "聯絡人管理"
+
+#: ../src/plugins/menu-spec-common.c:136
+msgctxt "Menu subcategory of Office"
+msgid "Database"
+msgstr "資料庫"
+
+#: ../src/plugins/menu-spec-common.c:137
+msgctxt "Menu subcategory of Office"
+msgid "Dictionary"
+msgstr "字典"
+
+#: ../src/plugins/menu-spec-common.c:138
+msgctxt "Menu subcategory of Office"
+msgid "Email"
+msgstr "電子郵件"
+
+#: ../src/plugins/menu-spec-common.c:139
+msgctxt "Menu subcategory of Office"
+msgid "Finance"
+msgstr "財經"
+
+#: ../src/plugins/menu-spec-common.c:140
+msgctxt "Menu subcategory of Office"
+msgid "Flow Chart"
+msgstr "流程圖"
+
+#: ../src/plugins/menu-spec-common.c:141
+msgctxt "Menu subcategory of Office"
+msgid "PDA"
+msgstr "PDA"
+
+#: ../src/plugins/menu-spec-common.c:142
+msgctxt "Menu subcategory of Office"
+msgid "Photography"
+msgstr "攝影"
+
+#: ../src/plugins/menu-spec-common.c:143
+msgctxt "Menu subcategory of Office"
+msgid "Presentation"
+msgstr "簡報"
+
+#: ../src/plugins/menu-spec-common.c:144
+msgctxt "Menu subcategory of Office"
+msgid "Project Management"
+msgstr "專案管理"
+
+#: ../src/plugins/menu-spec-common.c:145
+msgctxt "Menu subcategory of Office"
+msgid "Publishing"
+msgstr "出版"
+
+#: ../src/plugins/menu-spec-common.c:146
+msgctxt "Menu subcategory of Office"
+msgid "Spreadsheet"
+msgstr "試算表"
+
+#: ../src/plugins/menu-spec-common.c:147
+msgctxt "Menu subcategory of Office"
+msgid "Viewer"
+msgstr "檢視器"
+
+#: ../src/plugins/menu-spec-common.c:148
+msgctxt "Menu subcategory of Office"
+msgid "Word Processor"
+msgstr "文書處理器"
+
+#. TRANSLATORS: this is the menu spec main category for Science
+#: ../src/plugins/menu-spec-common.c:150
+msgid "Science"
+msgstr "科學"
+
+#: ../src/plugins/menu-spec-common.c:151
+msgctxt "Menu subcategory of Science"
+msgid "Art"
+msgstr "藝術"
+
+#: ../src/plugins/menu-spec-common.c:152
+msgctxt "Menu subcategory of Science"
+msgid "Artificial Intelligence"
+msgstr "人工智能"
+
+#: ../src/plugins/menu-spec-common.c:153
+msgctxt "Menu subcategory of Science"
+msgid "Astronomy"
+msgstr "天文"
+
+#: ../src/plugins/menu-spec-common.c:154
+msgctxt "Menu subcategory of Science"
+msgid "Biology"
+msgstr "生物"
+
+#: ../src/plugins/menu-spec-common.c:155
+msgctxt "Menu subcategory of Science"
+msgid "Chemistry"
+msgstr "化學"
+
+#: ../src/plugins/menu-spec-common.c:156
+msgctxt "Menu subcategory of Science"
+msgid "Computer Science"
+msgstr "電腦科學"
+
+#: ../src/plugins/menu-spec-common.c:157
+msgctxt "Menu subcategory of Science"
+msgid "Construction"
+msgstr "建築"
+
+#: ../src/plugins/menu-spec-common.c:158
+msgctxt "Menu subcategory of Science"
+msgid "Data Visualization"
+msgstr "資料示現"
+
+#: ../src/plugins/menu-spec-common.c:159
+msgctxt "Menu subcategory of Science"
+msgid "Economy"
+msgstr "經濟"
+
+#: ../src/plugins/menu-spec-common.c:160
+msgctxt "Menu subcategory of Science"
+msgid "Electricity"
+msgstr "電學"
+
+#: ../src/plugins/menu-spec-common.c:161
+msgctxt "Menu subcategory of Science"
+msgid "Electronics"
+msgstr "電子學"
+
+#: ../src/plugins/menu-spec-common.c:162
+msgctxt "Menu subcategory of Science"
+msgid "Engineering"
+msgstr "工程"
+
+#: ../src/plugins/menu-spec-common.c:163
+msgctxt "Menu subcategory of Science"
+msgid "Geography"
+msgstr "地理"
+
+#: ../src/plugins/menu-spec-common.c:164
+msgctxt "Menu subcategory of Science"
+msgid "Geology"
+msgstr "地質學"
+
+#: ../src/plugins/menu-spec-common.c:165
+msgctxt "Menu subcategory of Science"
+msgid "Geoscience"
+msgstr "地球科學"
+
+#: ../src/plugins/menu-spec-common.c:166
+msgctxt "Menu subcategory of Science"
+msgid "History"
+msgstr "歷史"
+
+#: ../src/plugins/menu-spec-common.c:167
+msgctxt "Menu subcategory of Science"
+msgid "Humanities"
+msgstr "人文"
+
+#: ../src/plugins/menu-spec-common.c:168
+msgctxt "Menu subcategory of Science"
+msgid "Image Processing"
+msgstr "影像處理"
+
+#: ../src/plugins/menu-spec-common.c:169
+msgctxt "Menu subcategory of Science"
+msgid "Languages"
+msgstr "語言"
+
+#: ../src/plugins/menu-spec-common.c:170
+msgctxt "Menu subcategory of Science"
+msgid "Literature"
+msgstr "文學"
+
+#: ../src/plugins/menu-spec-common.c:171
+msgctxt "Menu subcategory of Science"
+msgid "Maps"
+msgstr "地圖"
+
+#: ../src/plugins/menu-spec-common.c:172
+msgctxt "Menu subcategory of Science"
+msgid "Math"
+msgstr "數學"
+
+#: ../src/plugins/menu-spec-common.c:173
+msgctxt "Menu subcategory of Science"
+msgid "Medical"
+msgstr "醫學"
+
+#: ../src/plugins/menu-spec-common.c:174
+msgctxt "Menu subcategory of Science"
+msgid "Numerical Analysis"
+msgstr "數值分析"
+
+#: ../src/plugins/menu-spec-common.c:175
+msgctxt "Menu subcategory of Science"
+msgid "Parallel Computing"
+msgstr "平行計算"
+
+#: ../src/plugins/menu-spec-common.c:176
+msgctxt "Menu subcategory of Science"
+msgid "Physics"
+msgstr "物理"
+
+#: ../src/plugins/menu-spec-common.c:177
+msgctxt "Menu subcategory of Science"
+msgid "Robotics"
+msgstr "機械人學"
+
+#: ../src/plugins/menu-spec-common.c:178
+msgctxt "Menu subcategory of Science"
+msgid "Spirituality"
+msgstr "靈性"
+
+#: ../src/plugins/menu-spec-common.c:179
+msgctxt "Menu subcategory of Science"
+msgid "Sports"
+msgstr "運動"
+
+#. TRANSLATORS: this is the menu spec main category for System
+#: ../src/plugins/menu-spec-common.c:181
+msgid "System"
+msgstr "系統"
+
+#: ../src/plugins/menu-spec-common.c:182
+msgctxt "Menu subcategory of System"
+msgid "Emulator"
+msgstr "模擬器"
+
+#: ../src/plugins/menu-spec-common.c:183
+msgctxt "Menu subcategory of System"
+msgid "File Manager"
+msgstr "檔案管理器"
+
+#: ../src/plugins/menu-spec-common.c:184
+msgctxt "Menu subcategory of System"
+msgid "File System"
+msgstr "檔案系統"
+
+#: ../src/plugins/menu-spec-common.c:185
+msgctxt "Menu subcategory of System"
+msgid "File Tools"
+msgstr "檔案工具"
+
+#: ../src/plugins/menu-spec-common.c:186
+msgctxt "Menu subcategory of System"
+msgid "Monitor"
+msgstr "監控"
+
+#: ../src/plugins/menu-spec-common.c:187
+msgctxt "Menu subcategory of System"
+msgid "Security"
+msgstr "安全"
+
+#: ../src/plugins/menu-spec-common.c:188
+msgctxt "Menu subcategory of System"
+msgid "Terminal Emulator"
+msgstr "終端機模擬器"
+
+#. TRANSLATORS: this is the menu spec main category for Utility
+#: ../src/plugins/menu-spec-common.c:190
+msgid "Utilities"
+msgstr "公用程式"
+
+#: ../src/plugins/menu-spec-common.c:191
+msgctxt "Menu subcategory of Utilities"
+msgid "Accessibility"
+msgstr "無障礙環境"
+
+#: ../src/plugins/menu-spec-common.c:192
+msgctxt "Menu subcategory of Utilities"
+msgid "Archiving"
+msgstr "檔案封存"
+
+#: ../src/plugins/menu-spec-common.c:193
+msgctxt "Menu subcategory of Utilities"
+msgid "Calculator"
+msgstr "計數機"
+
+#: ../src/plugins/menu-spec-common.c:194
+msgctxt "Menu subcategory of Utilities"
+msgid "Clock"
+msgstr "時鐘"
+
+#: ../src/plugins/menu-spec-common.c:195
+msgctxt "Menu subcategory of Utilities"
+msgid "Compression"
+msgstr "壓縮"
+
+#: ../src/plugins/menu-spec-common.c:196
+msgctxt "Menu subcategory of Utilities"
+msgid "File Tools"
+msgstr "檔案工具"
+
+#: ../src/plugins/menu-spec-common.c:197
+msgctxt "Menu subcategory of Utilities"
+msgid "Maps"
+msgstr "地圖"
+
+#: ../src/plugins/menu-spec-common.c:198
+msgctxt "Menu subcategory of Utilities"
+msgid "Spirituality"
+msgstr "靈性"
+
+#: ../src/plugins/menu-spec-common.c:199
+msgctxt "Menu subcategory of Utilities"
+msgid "Telephony Tools"
+msgstr "電話工具"
+
+#: ../src/plugins/menu-spec-common.c:200
+msgctxt "Menu subcategory of Utilities"
+msgid "Text Editor"
+msgstr "文字編輯器"
+
+#. TRANSLATORS: this is the menu spec main category for Video
+#: ../src/plugins/menu-spec-common.c:202
+msgid "Video"
+msgstr "視像"
+
+#: ../src/plugins/menu-spec-common.c:203
+msgctxt "Menu subcategory of Video"
+msgid "Editing"
+msgstr "編輯"
+
+#: ../src/plugins/menu-spec-common.c:204
+msgctxt "Menu subcategory of Video"
+msgid "Database"
+msgstr "資料庫"
+
+#: ../src/plugins/menu-spec-common.c:205
+msgctxt "Menu subcategory of Video"
+msgid "Disc Burning"
+msgstr "光碟燒錄"
+
+#: ../src/plugins/menu-spec-common.c:206
+msgctxt "Menu subcategory of Video"
+msgid "Players"
+msgstr "播放器"
+
+#: ../src/plugins/menu-spec-common.c:207
+msgctxt "Menu subcategory of Video"
+msgid "Recorders"
+msgstr "錄製器"
+
+#: ../src/plugins/menu-spec-common.c:208
+msgctxt "Menu subcategory of Video"
+msgid "TV"
+msgstr "電視"
+
+#: ../src/plugins/menu-spec-common.c:211
+msgctxt "Menu subcategory of Add-ons"
+msgid "Fonts"
+msgstr "字型"
+
+#: ../src/plugins/menu-spec-common.c:212
+msgctxt "Menu subcategory of Add-ons"
+msgid "Codecs"
+msgstr "編解碼器"
+
+#: ../src/plugins/menu-spec-common.c:213
+msgctxt "Menu subcategory of Add-ons"
+msgid "Input Sources"
+msgstr "輸入來源"
+
+#: ../src/plugins/menu-spec-common.c:214
+msgctxt "Menu subcategory of Add-ons"
+msgid "Language Packs"
+msgstr "語言包"
+
+#: ../src/menus.ui.h:1
+msgid "_Software Sources"
+msgstr "軟件來源(_S)"
+
+#: ../src/menus.ui.h:2
+msgid "_About"
+msgstr "關於(_A)"
+
+#: ../src/menus.ui.h:3
+msgid "_Quit"
+msgstr "退出(_Q)"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "設定指定的除錯等級"
+
+#~ msgid "Picks"
+#~ msgstr "精選"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "2014年1月30日"
+
+#~ msgid "_Pending"
+#~ msgstr "擱置中(_P)"
+
+#~ msgid "Complicated!"
+#~ msgstr "超複雜!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "最近軟體更新"
+
+#~ msgid "No update details were provided"
+#~ msgstr "未提供更新的詳細資訊"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "資料庫"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "自製無線電"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "網頁開發"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "檔案工具"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "地圖"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "心靈"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "字型"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "編解碼器"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "輸入來源"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "語言包"
+
+#~ msgid "Done"
+#~ msgstr "完成"
+
+#~ msgid "_Done"
+#~ msgstr "完成(_D)"
+
+#~ msgid "Application _Folders"
+#~ msgstr "應用程式資料夾(_F)"
+
+#~ msgid ""
+#~ "Add or remove folders. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr "新增或移除資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for %s. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr "為 %s 選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for %s and %s. Your application folders can be found in "
+#~ "the Activities Overview."
+#~ msgstr "為 %s 與 %s 選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for %s, %s and %s. Your application folders can be found "
+#~ "in the Activities Overview."
+#~ msgstr ""
+#~ "為 %s、%s 與 %s 選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for the selected applications. Your application folders "
+#~ "can be found in the Activities Overview."
+#~ msgstr ""
+#~ "為選取的應用程式選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid "Software has the following goals:"
+#~ msgstr "軟體有下列目標:"
+
+#~ msgid "View installed applications"
+#~ msgstr "檢視安裝的應用程式"
+
+#~ msgid "View available application updates"
+#~ msgstr "檢視可用的應用程式更新"
+
+#~ msgid "Install available updates"
+#~ msgstr "安裝可用的更新"
+
+#~ msgid "Find an application to handle a specific type of file"
+#~ msgstr "尋找應用程式以處理特定類型的檔案"
+
+#~ msgid "Installed apps and updates should be available when offline"
+#~ msgstr "已安裝的程式與更新應該可在離線時使用"
+
+#~ msgid "Update"
+#~ msgstr "更新"
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "已安裝 (%d)(_I)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "更新 (%d)(_U)"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..7cccfe9
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,5578 @@
+# Chinese (Taiwan) translation for gnome-software.
+# Copyright (C) 2013 gnome-software's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-software package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-software master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-software/issues\n"
+"POT-Creation-Date: 2020-09-09 11:14+0000\n"
+"PO-Revision-Date: 2020-09-18 20:14+0800\n"
+"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
+"Language-Team: Chinese (Taiwan) <chinese-l10n@googlegroups.com>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.1\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:7
+msgid "GNOME Software"
+msgstr "GNOME 軟體"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:8
+msgid "Application manager for GNOME"
+msgstr "為 GNOME 設計的應用程式管理員"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:10
+msgid ""
+"Software allows you to find and install new applications and system "
+"extensions and remove existing installed applications."
+msgstr ""
+"《軟體》讓您可以找尋、安裝新程式與系統擴充套件,以及移除所安裝的應用程式。"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:14
+msgid ""
+"GNOME Software showcases featured and popular applications with useful "
+"descriptions and multiple screenshots per application. Applications can be "
+"found either through browsing the list of categories or by searching. It "
+"also allows you to update your system using an offline update."
+msgstr ""
+"GNOME《軟體》陳列各種具有特色,以及廣受歡迎的應用程式,並附上有用的描述與多張"
+"螢幕擷圖。除了瀏覽類別清單之外,您還可以透過搜尋的方式來找出想要的應用程式。"
+"此外,它也可讓您採用離線更新的方式更新系統。"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:25
+msgid "Overview panel"
+msgstr "概覽面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:29
+msgid "Details panel"
+msgstr "細節面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:33
+msgid "Installed panel"
+msgstr "已安裝面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:37
+msgid "Updates panel"
+msgstr "更新面板"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:41
+msgid "The update details"
+msgstr "更新的詳細資訊"
+
+#: data/appdata/org.gnome.Software.appdata.xml.in:1517
+msgid "The GNOME Project"
+msgstr "GNOME 專案"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:11
+msgid "Install an appstream file into a system location"
+msgstr "將 appstream 檔案安裝至系統位置"
+
+#: data/org.gnome.software.external-appstream.policy.in.in:12
+msgid "Installing an appstream file into a system location"
+msgstr "正在將 appstream 檔案安裝至系統位置"
+
+#: data/org.gnome.software.gschema.xml:5
+msgid "A list of compatible projects"
+msgstr "相容的專案列表"
+
+#: data/org.gnome.software.gschema.xml:6
+msgid ""
+"This is a list of compatible projects we should show such as GNOME, KDE and "
+"XFCE."
+msgstr "這是我們應列出的相容專案列表,如 GNOME、KDE 及 XFCE 等。"
+
+#: data/org.gnome.software.gschema.xml:10
+msgid "Whether to manage updates and upgrades in GNOME Software"
+msgstr "是否是要以 GNOME《軟體》管理更新與升級"
+
+#: data/org.gnome.software.gschema.xml:11
+msgid ""
+"If disabled, GNOME Software will hide the updates panel, not perform any "
+"automatic updates actions or prompt for upgrades."
+msgstr ""
+"若停用,則 GNOME《軟體》會隱藏更新面板,且不會執行任何自動更新動作,或提示可"
+"以升級。"
+
+#: data/org.gnome.software.gschema.xml:15
+msgid "Automatically download and install updates"
+msgstr "自動下載與安裝更新"
+
+#: data/org.gnome.software.gschema.xml:16
+msgid ""
+"If enabled, GNOME Software automatically downloads software updates in the "
+"background, also installing ones that do not require a reboot."
+msgstr ""
+"如果啟用此功能,則《GNOME 軟體》將會在背景下載軟體更新,亦安裝不需要重新開機"
+"的更新。"
+
+#: data/org.gnome.software.gschema.xml:20
+msgid "Notify the user about software updated in the background"
+msgstr "通知使用者關於背景更新程式的資訊"
+
+#: data/org.gnome.software.gschema.xml:21
+msgid ""
+"If enabled, GNOME Software notifies the user about updates that happened "
+"whilst the user was idle."
+msgstr "如果啟用此功能,GNOME 軟體將會通知使用者關於使用者閒置時執行的更新。"
+
+#: data/org.gnome.software.gschema.xml:25
+msgid "Whether to automatically refresh when on a metered connection"
+msgstr "是否要在計價連線時自動重新整理"
+
+#: data/org.gnome.software.gschema.xml:26
+msgid ""
+"If enabled, GNOME Software automatically refreshes in the background even "
+"when using a metered connection (eventually downloading some metadata, "
+"checking for updates, etc., which may incur in costs for the user)."
+msgstr ""
+"若啟用,則 GNOME《軟體》即使在使用計價連線時仍會自動在背景重新整理(甚至下載"
+"一些中介資料、檢查是否有更新…等,這代表使用者可能必須負擔更多費用)。"
+
+#: data/org.gnome.software.gschema.xml:30
+msgid "Whether it’s the very first run of GNOME Software"
+msgstr "是否是第一次執行 GNOME《軟體》"
+
+#: data/org.gnome.software.gschema.xml:34
+msgid "Show star ratings next to applications"
+msgstr "在應用程式旁顯示星級評等"
+
+#: data/org.gnome.software.gschema.xml:38
+msgid "Filter applications based on the default branch set for the remote"
+msgstr "根據遠端的預設分支設定過濾應用程式"
+
+#: data/org.gnome.software.gschema.xml:42
+msgid "Non-free applications show a warning dialog before install"
+msgstr "非自由的應用程式會在安裝前顯示警告對話盒"
+
+#: data/org.gnome.software.gschema.xml:43
+msgid ""
+"When non-free applications are installed a warning dialog can be shown. This "
+"controls if that dialog is suppressed."
+msgstr ""
+"安裝非自由應用程式之時會顯示警告對話盒。這個選項控制是否要解除該對話盒。"
+
+#: data/org.gnome.software.gschema.xml:47
+msgid "A list of popular applications"
+msgstr "熱門應用程式列表"
+
+#: data/org.gnome.software.gschema.xml:48
+msgid "A list of applications to use, overriding the system defined ones."
+msgstr "要使用的應用程式列表,凌駕系統定義的程式列表。"
+
+#: data/org.gnome.software.gschema.xml:52
+msgid "The last update check timestamp"
+msgstr "最近更新檢查時間戳記"
+
+#: data/org.gnome.software.gschema.xml:56
+msgid "The last upgrade notification timestamp"
+msgstr "最近升級通知時間戳記"
+
+#: data/org.gnome.software.gschema.xml:60
+msgid "The timestamp of the first security update, cleared after update"
+msgstr "第一次安全性更新的時間戳記,會在更新之後清除"
+
+#: data/org.gnome.software.gschema.xml:64
+msgid "The last update timestamp"
+msgstr "最近更新時間戳記"
+
+#: data/org.gnome.software.gschema.xml:68
+msgid "The last timestamp when the system was online and got any updates"
+msgstr "上次系統連線及取得更新的時間戳"
+
+#: data/org.gnome.software.gschema.xml:72
+msgid "The age in seconds to verify the upstream screenshot is still valid"
+msgstr "用來驗證上游螢幕快照仍否有效的時間秒數"
+
+#: data/org.gnome.software.gschema.xml:73
+msgid ""
+"Choosing a larger value will mean less round-trips to the remote server but "
+"updates to the screenshots may take longer to show to the user. A value of 0 "
+"means to never check the server if the image already exists in the cache."
+msgstr ""
+"若採取較大的數值則代表較少從遠端伺服器來回,但是螢幕快照的後續更新可能要花上"
+"較長時間才會顯示給使用者觀看。數值為 0 表示若快取中已有影像存在,則永不檢查伺"
+"服器。"
+
+#: data/org.gnome.software.gschema.xml:82
+msgid "The server to use for application reviews"
+msgstr "用來顯示應用程式評論的伺服器"
+
+#: data/org.gnome.software.gschema.xml:86
+msgid "The minimum karma score for reviews"
+msgstr "評論的最低業值"
+
+#: data/org.gnome.software.gschema.xml:87
+msgid "Reviews with karma less than this number will not be shown."
+msgstr "小於這個數字的業值將不會顯示。"
+
+#: data/org.gnome.software.gschema.xml:91
+msgid "A list of official repositories that should not be considered 3rd party"
+msgstr "不應視為第三方的官方軟體庫列表"
+
+#: data/org.gnome.software.gschema.xml:95
+msgid "A list of official repositories that should be considered free software"
+msgstr "應視為自由軟體的官方軟體庫列表"
+
+#: data/org.gnome.software.gschema.xml:99
+msgid ""
+"The licence URL to use when an application should be considered free software"
+msgstr "將應用程式視為自由軟體的授權方式 URL"
+
+#: data/org.gnome.software.gschema.xml:103
+msgid "Install bundled applications for all users on the system where possible"
+msgstr "只要可以便為系統上的所有使用者安裝應用程式套組"
+
+#: data/org.gnome.software.gschema.xml:107
+msgid "Allow access to the Software Repositories dialog"
+msgstr "允許存取《軟體庫》對話盒"
+
+#: data/org.gnome.software.gschema.xml:111
+msgid "Offer upgrades for pre-releases"
+msgstr "提供預先發行版本的升級"
+
+#: data/org.gnome.software.gschema.xml:115
+msgid "Show some UI elements informing the user that an app is non-free"
+msgstr "顯示一些告知使用者某 App 並非自由軟體的操作介面元素"
+
+#: data/org.gnome.software.gschema.xml:119
+msgid "Show the prompt to install nonfree software repositories"
+msgstr "安裝非自由軟體庫時顯示提示"
+
+#: data/org.gnome.software.gschema.xml:123
+msgid "Show the installed size for apps in the list of installed applications"
+msgstr "在已安裝應用程式清單中顯示安裝後程式大小"
+
+#. Translators: Replace the link with a version in your language, e.g. 'https://de.wikipedia.org/wiki/Proprietäre_Software'. Remember to include ''.
+#: data/org.gnome.software.gschema.xml:127
+msgid "'https://en.wikipedia.org/wiki/Proprietary_software'"
+msgstr "'https://zh.wikipedia.org/zh-tw/%E4%B8%93%E6%9C%89%E8%BD%AF%E4%BB%B6'"
+
+#: data/org.gnome.software.gschema.xml:128
+msgid "The URI that explains nonfree and proprietary software"
+msgstr "闡釋非自由軟體和專有軟體的連結"
+
+#: data/org.gnome.software.gschema.xml:132
+msgid ""
+"A list of URLs pointing to appstream files that will be downloaded into an "
+"app-info folder"
+msgstr "一份要下載至 app-info 資料夾中的 appstream 檔案指向 URL 清單"
+
+#: data/org.gnome.software.gschema.xml:136
+msgid "Install the AppStream files to a system-wide location for all users"
+msgstr "為所有使用者安裝 AppStream 檔案到系統層級位置上"
+
+#: data/org.gnome.software.gschema.xml:140
+msgid "Enable GNOME Shell extensions repository"
+msgstr "啟用 GNOME Shell 擴充套件庫"
+
+#: data/org.gnome.software.gschema.xml:147
+msgid "A string storing the gnome-online-account id used to login"
+msgstr "儲存 gnome-online-account id 以用於登入的字串"
+
+#: src/gnome-software-local-file.desktop.in:3
+msgid "Software Install"
+msgstr "軟體安裝"
+
+#: src/gnome-software-local-file.desktop.in:4
+msgid "Install selected software on the system"
+msgstr "安裝選取的軟體到系統中"
+
+#: src/gnome-software.ui:10
+msgid "Select All"
+msgstr "全選"
+
+#: src/gnome-software.ui:16
+msgid "Select None"
+msgstr "全不選"
+
+#: src/gnome-software.ui:35
+msgid "_Software Repositories"
+msgstr "軟體庫(_S)"
+
+#: src/gnome-software.ui:40
+msgid "_Update Preferences"
+msgstr "更新偏好設定(_U)"
+
+#: src/gnome-software.ui:48 src/org.gnome.Software.desktop.in:3
+msgid "Software"
+msgstr "軟體"
+
+#: src/gnome-software.ui:64 src/gs-update-dialog.ui:20
+msgid "Go back"
+msgstr "返回"
+
+#. Translators: A label for a button to show all available software.
+#: src/gnome-software.ui:96
+msgid "_Explore"
+msgstr "探索(_E)"
+
+#. Translators: A label for a button to show only software which is already installed.
+#: src/gnome-software.ui:119
+msgid "_Installed"
+msgstr "已安裝(_I)"
+
+#. Translators: A label for a button to show only updates which are available to install.
+#: src/gnome-software.ui:159
+msgid "_Updates"
+msgstr "更新(_U)"
+
+#: src/gnome-software.ui:228
+msgid "Search"
+msgstr "搜尋"
+
+#. Translators: This is a label in the header bar, followed by a drop down to choose between different source repos
+#. TRANSLATORS: this refers to where the app came from
+#: src/gnome-software.ui:272 src/gs-app-row.c:294 src/gs-details-page.ui:886
+msgid "Source"
+msgstr "來源"
+
+#. button in the info bar
+#: src/gnome-software.ui:377 src/gs-repos-dialog.ui:5 src/gs-repos-dialog.ui:18
+msgid "Software Repositories"
+msgstr "軟體庫"
+
+#. button in the info bar
+#: src/gnome-software.ui:385
+msgid "Examine Disk"
+msgstr "檢視磁碟"
+
+#. button in the info bar
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gnome-software.ui:393 src/gs-updates-page.c:922
+msgid "Network Settings"
+msgstr "網路設定值"
+
+#. button in the info bar
+#: src/gnome-software.ui:401
+msgid "Restart Now"
+msgstr "立刻重新啟動"
+
+#. button in the info bar
+#: src/gnome-software.ui:409
+msgid "More Information"
+msgstr "更多資訊"
+
+#: src/gnome-software.ui:461 src/gs-metered-data-dialog.ui:5
+#: src/gs-metered-data-dialog.ui:17
+msgid "Automatic Updates Paused"
+msgstr "自動更新已暫停"
+
+#: src/gnome-software.ui:480
+msgid "Find Out _More"
+msgstr "深入瞭解(_M)"
+
+#. TRANSLATORS: this is a locally downloaded package
+#: lib/gs-app.c:4559
+msgid "Local file"
+msgstr "本機檔案"
+
+#: lib/gs-app.c:4611
+msgid "Package"
+msgstr "軟體包"
+
+#: src/gs-app-addon-row.c:83 src/gs-app-row.c:401
+msgid "Pending"
+msgstr "擱置中"
+
+#: src/gs-app-addon-row.c:89 src/gs-app-row.ui:163 src/gs-app-tile.ui:51
+#: src/gs-feature-tile.c:88
+msgid "Installed"
+msgstr "已安裝"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being installed
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being installed
+#: src/gs-app-addon-row.c:93 src/gs-app-row.c:172 src/gs-details-page.c:351
+#: src/gs-third-party-repo-row.c:100
+msgid "Installing"
+msgstr "安裝中"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * shows the status of an application being erased
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being removed
+#: src/gs-app-addon-row.c:97 src/gs-app-row.c:178 src/gs-repo-row.c:126
+#: src/gs-third-party-repo-row.c:107
+msgid "Removing"
+msgstr "移除中"
+
+#. TRANSLATORS: this is a command line option
+#: src/gs-application.c:110
+msgid "Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"
+msgstr ""
+"初始啟動模式:可以是「updates」(更新)、「updated」(已更新)、「installed」(已"
+"安裝) 或「overview」(概覽)"
+
+#: src/gs-application.c:110
+msgid "MODE"
+msgstr "模式"
+
+#: src/gs-application.c:112
+msgid "Search for applications"
+msgstr "搜尋用程式"
+
+#: src/gs-application.c:112
+msgid "SEARCH"
+msgstr "搜尋"
+
+#: src/gs-application.c:114
+msgid "Show application details (using application ID)"
+msgstr "顯示應用程式細節(使用應用程式 ID)"
+
+#: src/gs-application.c:114 src/gs-application.c:118
+msgid "ID"
+msgstr "ID"
+
+#: src/gs-application.c:116
+msgid "Show application details (using package name)"
+msgstr "顯示應用程式細節(使用軟體包名稱)"
+
+#: src/gs-application.c:116
+msgid "PKGNAME"
+msgstr "PKGNAME"
+
+#: src/gs-application.c:118
+msgid "Install the application (using application ID)"
+msgstr "安裝應用程式(使用應用程式 ID)"
+
+#: src/gs-application.c:120
+msgid "Open a local package file"
+msgstr "開啟本機軟體包檔案"
+
+#: src/gs-application.c:120
+msgid "FILENAME"
+msgstr "FILENAME"
+
+#: src/gs-application.c:122
+msgid ""
+"The kind of interaction expected for this action: either ‘none’, ‘notify’, "
+"or ‘full’"
+msgstr ""
+"這個動作預期的互動種類:可以是「none」(沒有)、「notify」(通知)或「full」(完"
+"整)"
+
+#: src/gs-application.c:125
+msgid "Show verbose debugging information"
+msgstr "詳細顯示除錯用訊息"
+
+#: src/gs-application.c:127
+msgid "Installs any pending updates in the background"
+msgstr "在背景安裝任何待安裝的更新"
+
+#: src/gs-application.c:129
+msgid "Show update preferences"
+msgstr "顯示更新偏好設定"
+
+#: src/gs-application.c:131
+msgid "Quit the running instance"
+msgstr "退出執行中的實體"
+
+#: src/gs-application.c:133
+msgid "Prefer local file sources to AppStream"
+msgstr "AppStream 偏好使用本地端檔案來源"
+
+#: src/gs-application.c:135
+msgid "Show version number"
+msgstr "顯示版本號碼"
+
+#: src/gs-application.c:328
+msgid "translator-credits"
+msgstr ""
+"Cheng-Chia Tseng <pswo10680@gmail.com>, 2013, 2015, 2018, 2019.\n"
+"Yi-Jyun Pan <pan93412@gmail.com>, 2020."
+
+#. TRANSLATORS: this is the title of the about window
+#. TRANSLATORS: this is the menu item that opens the about window
+#: src/gs-application.c:333 src/gs-shell.c:2123
+msgid "About Software"
+msgstr "關於《軟體》"
+
+#. TRANSLATORS: well, we seem to think so, anyway
+#: src/gs-application.c:336
+msgid "A nice way to manage the software on your system."
+msgstr "管理系統軟體的絕佳方式。"
+
+#. TRANSLATORS: we tried to show an app that did not exist
+#: src/gs-application.c:564
+msgid "Sorry! There are no details for that application."
+msgstr "抱歉!沒有該應用程式的詳細資訊。"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#: src/gs-app-row.c:127
+msgid "Visit website"
+msgstr "造訪網站"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed.
+#. * The ellipsis indicates that further steps are required
+#: src/gs-app-row.c:132
+msgid "Install…"
+msgstr "安裝…"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows to cancel a queued install of the application
+#: src/gs-app-row.c:139 src/gs-updates-section.c:479
+msgid "Cancel"
+msgstr "取消"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily installed
+#. TRANSLATORS: button text
+#. TRANSLATORS: update the fw
+#: src/gs-app-row.c:146 src/gs-common.c:288 src/gs-page.c:334
+msgid "Install"
+msgstr "安裝"
+
+#. TRANSLATORS: this is a button in the updates panel
+#. * that allows the app to be easily updated live
+#: src/gs-app-row.c:153
+msgid "Update"
+msgstr "更新"
+
+#. TRANSLATORS: this is a button next to the search results that
+#. * allows the application to be easily removed
+#. TRANSLATORS: this is button text to remove the application
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-app-row.c:157 src/gs-app-row.c:166 src/gs-page.c:492
+#: src/gs-repos-dialog.c:326
+msgid "Remove"
+msgstr "移除"
+
+#. TRANSLATORS: during the update the device
+#. * will restart into a special update-only mode
+#: src/gs-app-row.c:284
+msgid "Device cannot be used during update."
+msgstr "更新過程中不能使用裝置。"
+
+#: src/gs-app-row.c:459 src/gs-update-dialog.ui:182
+msgid "Requires additional permissions"
+msgstr "需要開通其他權限"
+
+#. TRANSLATORS: This is a description for entering user/password
+#: src/gs-basic-auth-dialog.c:82
+#, c-format
+msgid "Login required remote %s (realm %s)"
+msgstr "登入需要遠端 %s (領域 %s)"
+
+#: src/gs-basic-auth-dialog.ui:10
+msgid "Login Required"
+msgstr "需要登入"
+
+#: src/gs-basic-auth-dialog.ui:19 src/gs-details-page.ui:252
+#: src/gs-removal-dialog.ui:32 src/gs-review-dialog.ui:22
+#: src/gs-upgrade-banner.ui:112
+msgid "_Cancel"
+msgstr "取消(_C)"
+
+#: src/gs-basic-auth-dialog.ui:39
+msgid "_Login"
+msgstr "登入(_L)"
+
+#: src/gs-basic-auth-dialog.ui:99
+msgid "_User"
+msgstr "使用者(_U)"
+
+#: src/gs-basic-auth-dialog.ui:119
+msgid "_Password"
+msgstr "密碼(_P)"
+
+#. TRANSLATORS: this is where all applications that don't
+#. * fit in other groups are put
+#: lib/gs-category.c:178
+msgid "Other"
+msgstr "其他"
+
+#. TRANSLATORS: this is a subcategory matching all the
+#. * different apps in the parent category, e.g. "Games"
+#: lib/gs-category.c:183
+msgid "All"
+msgstr "全部"
+
+#. TRANSLATORS: this is a subcategory of featured apps
+#: lib/gs-category.c:187
+msgid "Featured"
+msgstr "特選"
+
+#. TRANSLATORS: This is a heading on the categories page. %s gets
+#. replaced by the category name, e.g. 'Graphics & Photography'
+#: src/gs-category-page.c:453
+#, c-format
+msgid "Featured %s"
+msgstr "%s特選"
+
+#. Translators: A label for a button to sort apps by their rating.
+#: src/gs-category-page.ui:26 src/gs-review-dialog.ui:74
+msgid "Rating"
+msgstr "評等"
+
+#. Translators: A label for a button to sort apps alphabetically.
+#. TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm"
+#: src/gs-category-page.ui:32 src/gs-origin-popover-row.c:59
+msgid "Name"
+msgstr "名稱"
+
+#. TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.
+#: src/gs-category-page.ui:111
+msgid "Show"
+msgstr "顯示"
+
+#: src/gs-category-page.ui:128
+msgid "Subcategories filter menu"
+msgstr "子類別過濾選單"
+
+#. TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.
+#: src/gs-category-page.ui:159
+msgid "Sort"
+msgstr "排序"
+
+#: src/gs-category-page.ui:175
+msgid "Subcategories sorting menu"
+msgstr "子類別排序選單"
+
+#. TRANSLATORS: the user isn't reading the question
+#: lib/gs-cmd.c:191
+#, c-format
+msgid "Please enter a number from 1 to %u: "
+msgstr "請輸入 1 到 %u 間的數字:"
+
+#. TRANSLATORS: asking the user to choose an app from a list
+#: lib/gs-cmd.c:254
+msgid "Choose an application:"
+msgstr "選擇應用程式:"
+
+#. TRANSLATORS: this is the summary of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:124
+msgid "OS updates are now installed"
+msgstr "作業系統更新現在已安裝"
+
+#. TRANSLATORS: this is the body of a notification that OS updates
+#. * have been successfully installed
+#: src/gs-common.c:127
+msgid "Recently installed updates are available to review"
+msgstr "最近安裝的更新可供評論"
+
+#. TRANSLATORS: this is the summary of a notification that an application
+#. * has been successfully installed
+#. TRANSLATORS: this is the summary of a notification that a component
+#. * has been successfully installed
+#: src/gs-common.c:132 src/gs-common.c:146
+#, c-format
+msgid "%s is now installed"
+msgstr "%s 現在已安裝"
+
+#. TRANSLATORS: an application has been installed, but
+#. * needs a reboot to complete the installation
+#: src/gs-common.c:136 src/gs-common.c:150
+msgid "A restart is required for the changes to take effect."
+msgstr "必須重新啟動才能讓改變生效。"
+
+#. TRANSLATORS: this is the body of a notification that an application
+#. * has been successfully installed
+#: src/gs-common.c:140
+msgid "Application is ready to be used."
+msgstr "應用程式已經準備好可供使用。"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:160 src/gs-common.c:650
+msgid "Restart"
+msgstr "重新啟動"
+
+#. TRANSLATORS: this is button that opens the newly installed application
+#: src/gs-common.c:164
+msgid "Launch"
+msgstr "啟動"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:222
+msgid "Install Third-Party Software?"
+msgstr "是否安裝第三方軟體?"
+
+#. TRANSLATORS: window title
+#: src/gs-common.c:226 src/gs-repos-dialog.c:235
+msgid "Enable Third-Party Software Repository?"
+msgstr "啟用第三方軟體庫?"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#.
+#: src/gs-common.c:242
+#, c-format
+msgid ""
+"%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">free and open source software</a>, and is provided by “%s”."
+msgstr ""
+"%s 並不是 <a href=\"https://en.wikipedia.org/wiki/Free_and_open-"
+"source_software\">自由與開源軟體</a>,此外它是由「%s」提供。"
+
+#. TRANSLATORS: the replacements are as follows:
+#. * 1. Application name, e.g. "Firefox"
+#. * 2. Software repository name, e.g. fedora-optional
+#: src/gs-common.c:252
+#, c-format
+msgid "%s is provided by “%s”."
+msgstr "%s 是由「%s」提供。"
+
+#: src/gs-common.c:261
+msgid "This software repository must be enabled to continue installation."
+msgstr "必須啟用這個軟體庫才能繼續安裝。"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:271
+#, c-format
+msgid "It may be illegal to install or use %s in some countries."
+msgstr "在某些國家安裝或使用 %s 可能是違法的。"
+
+#. TRANSLATORS: Laws are geographical, urgh...
+#: src/gs-common.c:277
+msgid "It may be illegal to install or use this codec in some countries."
+msgstr "在某些國家安裝或使用這個編解碼器可能是違法的。"
+
+#. TRANSLATORS: this is button text to not ask about non-free content again
+#: src/gs-common.c:284
+msgid "Don’t Warn Again"
+msgstr "不要再警告我"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:293
+msgid "Enable and Install"
+msgstr "啟用並安裝"
+
+#. TRANSLATORS: these are show_detailed_error messages from the
+#. * package manager no mortal is supposed to understand,
+#. * but google might know what they mean
+#: src/gs-common.c:452
+msgid "Detailed errors from the package manager follow:"
+msgstr "軟體包管理員的詳細錯誤資訊如下:"
+
+#: src/gs-common.c:471 src/gs-details-page.ui:447
+msgid "Details"
+msgstr "細節"
+
+#. TRANSLATORS: we've just live-updated some apps
+#: src/gs-common.c:636
+msgid "An update has been installed"
+msgid_plural "Updates have been installed"
+msgstr[0] "更新已安裝"
+
+#. TRANSLATORS: the new apps will not be run until we restart
+#: src/gs-common.c:641
+msgid "A restart is required for it to take effect."
+msgid_plural "A restart is required for them to take effect."
+msgstr[0] "必須重新啟動才能讓改變生效。"
+
+#. TRANSLATORS: button text
+#: src/gs-common.c:648 src/gs-update-monitor.c:123
+msgid "Not Now"
+msgstr "現在不是時候"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:61
+msgid "No cartoon violence"
+msgstr "沒有漫畫暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:63
+msgid "Cartoon characters in unsafe situations"
+msgstr "漫畫角色處在非安全的情況下"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:65
+msgid "Cartoon characters in aggressive conflict"
+msgstr "漫畫角色有強勢衝突"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:67
+msgid "Graphic violence involving cartoon characters"
+msgstr "涉及漫畫角色的圖像暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:72
+msgid "No fantasy violence"
+msgstr "沒有幻想暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:74
+msgid "Characters in unsafe situations easily distinguishable from reality"
+msgstr "人物處在非安全的情況下但容易與現實區隔"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:76
+msgid "Characters in aggressive conflict easily distinguishable from reality"
+msgstr "人物有強勢衝突但容易與現實區隔"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:78
+msgid "Graphic violence easily distinguishable from reality"
+msgstr "圖像暴力但容易與現實區隔"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:83
+msgid "No realistic violence"
+msgstr "沒有現實暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:85
+msgid "Mildly realistic characters in unsafe situations"
+msgstr "輕微真實人物處在非安全的情況下"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:87
+msgid "Depictions of realistic characters in aggressive conflict"
+msgstr "真實人物有強勢衝突的描繪"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:89
+msgid "Graphic violence involving realistic characters"
+msgstr "涉及真實人物的圖像暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:94
+msgid "No bloodshed"
+msgstr "沒有殺人"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:96
+msgid "Unrealistic bloodshed"
+msgstr "非寫實的殺人"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:98
+msgid "Realistic bloodshed"
+msgstr "寫實的殺人"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:100
+msgid "Depictions of bloodshed and the mutilation of body parts"
+msgstr "殺人及殘害身體的描繪"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:105
+msgid "No sexual violence"
+msgstr "沒有性暴力"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:107
+msgid "Rape or other violent sexual behavior"
+msgstr "強暴或其他暴力式性行為"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:114
+msgid "No references to alcohol"
+msgstr "沒有涉及酒精"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:116
+msgid "References to alcoholic beverages"
+msgstr "涉及酒精性飲料"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:118
+msgid "Use of alcoholic beverages"
+msgstr "使用到酒精性飲料"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:124
+msgid "No references to illicit drugs"
+msgstr "沒有涉及非法藥物"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:126
+msgid "References to illicit drugs"
+msgstr "涉及非法藥物"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:128
+msgid "Use of illicit drugs"
+msgstr "使用到非法藥物"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:134
+msgid "No references to tobacco products"
+msgstr "沒有涉及菸草產品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:136
+msgid "References to tobacco products"
+msgstr "涉及菸草產品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:138
+msgid "Use of tobacco products"
+msgstr "使用到菸草產品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:144
+msgid "No nudity of any sort"
+msgstr "沒有任何形式之裸體"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:146
+msgid "Brief artistic nudity"
+msgstr "短暫藝術性裸體"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:148
+msgid "Prolonged nudity"
+msgstr "長時間裸體"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:154
+msgid "No references to or depictions of sexual nature"
+msgstr "沒有涉及性事或描繪性事"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:156
+msgid "Provocative references or depictions"
+msgstr "涉及刺激或描繪刺激"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:158
+msgid "Sexual references or depictions"
+msgstr "涉及性或描繪性"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:160
+msgid "Graphic sexual behavior"
+msgstr "圖像式性行為"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:165
+msgid "No profanity of any kind"
+msgstr "沒有任何形式之辱駡"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:167
+msgid "Mild or infrequent use of profanity"
+msgstr "輕微或少有使用辱駡"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:169
+msgid "Moderate use of profanity"
+msgstr "偶爾使用辱駡"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:171
+msgid "Strong or frequent use of profanity"
+msgstr "強烈或經常使用辱駡"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:176
+msgid "No inappropriate humor"
+msgstr "沒有不適切之幽默"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:178
+msgid "Slapstick humor"
+msgstr "低俗鬧劇式幽默"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:180
+msgid "Vulgar or bathroom humor"
+msgstr "粗俗或廁所式幽默"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:182
+msgid "Mature or sexual humor"
+msgstr "成人或性相關幽默"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:187
+msgid "No discriminatory language of any kind"
+msgstr "沒有任何形式之歧視用語"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:189
+msgid "Negativity towards a specific group of people"
+msgstr "排斥特定群體"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:191
+msgid "Discrimination designed to cause emotional harm"
+msgstr "刻意造成情緒傷害之歧視"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:193
+msgid "Explicit discrimination based on gender, sexuality, race or religion"
+msgstr "根據性別、性能力、種族、信仰所作的針對性歧視"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:198
+msgid "No advertising of any kind"
+msgstr "沒有任何形式之行銷"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:200
+msgid "Product placement"
+msgstr "置入性產品行銷"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:202
+msgid "Explicit references to specific brands or trademarked products"
+msgstr "明確指涉特定廠牌或註冊商標之產品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:204
+msgid "Users are encouraged to purchase specific real-world items"
+msgstr "鼓吹使用者購買特定真實世界商品"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:209
+msgid "No gambling of any kind"
+msgstr "任何形式之賭博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:211
+msgid "Gambling on random events using tokens or credits"
+msgstr "使用代幣或儲值之隨機活動性賭博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:213
+msgid "Gambling using “play” money"
+msgstr "使用「遊戲」財物之賭博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:215
+msgid "Gambling using real money"
+msgstr "使用實體金錢的賭博"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:220
+msgid "No ability to spend money"
+msgstr "沒有金錢花費之功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:222
+msgid "Users are encouraged to donate real money"
+msgstr "鼓勵使用者捐贈實體金錢"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:225
+msgid "Ability to spend real money in-app"
+msgstr "可在程式中花費實體金錢"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:230
+msgid "No way to chat with other users"
+msgstr "無法和其他使用者聊天"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:232
+msgid "User-to-user interactions without chat functionality"
+msgstr "使用者與使用者間之互動不含聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:234
+msgid "Moderated chat functionality between users"
+msgstr "受審查的使用者間聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:236
+msgid "Uncontrolled chat functionality between users"
+msgstr "未受管制的使用者間聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:241
+msgid "No way to talk with other users"
+msgstr "無法和其他使用者對談"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:243
+msgid "Uncontrolled audio or video chat functionality between users"
+msgstr "未受管制的使用者間音訊或視訊聊天功能"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:250
+msgid "No sharing of social network usernames or email addresses"
+msgstr "不會分享社交網路使用者名稱或電子郵件爲止"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:252
+msgid "Sharing social network usernames or email addresses"
+msgstr "分享社交網路使用者名稱或電子郵件位址"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:259
+msgid "No sharing of user information with third parties"
+msgstr "不會與第三方單位分享使用者資訊"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:261
+msgid "Checking for the latest application version"
+msgstr "檢查最新的應用程式版本"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:263
+msgid "Sharing diagnostic data that does not let others identify the user"
+msgstr "分享無法讓他人辨識出使用者的診斷性數據資料"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:265
+msgid "Sharing information that lets others identify the user"
+msgstr "分享可以讓其他人辨識出使用者的資訊"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:270
+msgid "No sharing of physical location with other users"
+msgstr "不會與其他使用者分享實際地理位置"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:272
+msgid "Sharing physical location with other users"
+msgstr "與其他使用者分享實際地理位置"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:281
+msgid "No references to homosexuality"
+msgstr "沒有涉及同性戀議題"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:283
+msgid "Indirect references to homosexuality"
+msgstr "間接涉及同性戀議題"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:285
+msgid "Kissing between people of the same gender"
+msgstr "人類同性別親吻"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:287
+msgid "Graphic sexual behavior between people of the same gender"
+msgstr "圖像式人類同性別性行為"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:292
+msgid "No references to prostitution"
+msgstr "沒有涉及賣淫"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:294
+msgid "Indirect references to prostitution"
+msgstr "間接涉及賣淫"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:296
+msgid "Direct references to prostitution"
+msgstr "直接涉及賣淫"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:298
+msgid "Graphic depictions of the act of prostitution"
+msgstr "圖像式賣淫動作描繪"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:303
+msgid "No references to adultery"
+msgstr "沒有涉及通姦"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:305
+msgid "Indirect references to adultery"
+msgstr "間接涉及通姦"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:307
+msgid "Direct references to adultery"
+msgstr "直接涉及通姦"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:309
+msgid "Graphic depictions of the act of adultery"
+msgstr "圖像式通姦行為描繪"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:314
+msgid "No sexualized characters"
+msgstr "沒有性化角色"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:317
+msgid "Scantily clad human characters"
+msgstr "衣著覆蓋極少的人類角色"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:319
+msgid "Overtly sexualized human characters"
+msgstr "刻意性化的人類角色"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:324
+msgid "No references to desecration"
+msgstr "沒有涉及褻瀆"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:326
+msgid "Depictions of or references to historical desecration"
+msgstr "描繪或涉及史實上的褻瀆"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:328
+msgid "Depictions of modern-day human desecration"
+msgstr "描繪當代人體褻瀆"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:330
+msgid "Graphic depictions of modern-day desecration"
+msgstr "圖像式當代褻瀆描繪"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:335
+msgid "No visible dead human remains"
+msgstr "不會看見亡者遺體"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:337
+msgid "Visible dead human remains"
+msgstr "會看見亡者遺體"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:339
+msgid "Dead human remains that are exposed to the elements"
+msgstr "亡者遺體暴露在相關元素中"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:341
+msgid "Graphic depictions of desecration of human bodies"
+msgstr "圖像式褻瀆人體的描繪"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:346
+msgid "No references to slavery"
+msgstr "沒有涉及奴隸行為"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:348
+msgid "Depictions of or references to historical slavery"
+msgstr "描繪或涉及史實上的奴隸行為"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:350
+msgid "Depictions of modern-day slavery"
+msgstr "描繪當代的奴隸行為"
+
+#. TRANSLATORS: content rating description
+#: src/gs-content-rating.c:352
+msgid "Graphic depictions of modern-day slavery"
+msgstr "圖像式當代奴隸行為描繪"
+
+#. TRANSLATORS: This is the formatting of English and localized name
+#. of the rating e.g. "Adults Only (solo adultos)"
+#: src/gs-content-rating.c:412
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#: src/gs-content-rating.c:546
+msgid "General"
+msgstr "一般"
+
+#: src/gs-content-rating.c:555
+msgid "ALL"
+msgstr "所有"
+
+#: src/gs-content-rating.c:559
+msgid "Adults Only"
+msgstr "僅限成人 (18+)"
+
+#: src/gs-content-rating.c:561
+msgid "Mature"
+msgstr "成熟 (17+)"
+
+#: src/gs-content-rating.c:563
+msgid "Teen"
+msgstr "青少年 (13-19)"
+
+#: src/gs-content-rating.c:565
+msgid "Everyone 10+"
+msgstr "十歲以上 (10+)"
+
+#: src/gs-content-rating.c:567
+msgid "Everyone"
+msgstr "任何人"
+
+#: src/gs-content-rating.c:569
+msgid "Early Childhood"
+msgstr "幼兒 (3+)"
+
+#. TRANSLATORS: this is a what we use in notifications if the app's name is unknown
+#: src/gs-dbus-helper.c:282
+msgid "An application"
+msgstr "應用程式"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional MIME types.
+#: src/gs-dbus-helper.c:288
+#, c-format
+msgid "%s is requesting additional file format support."
+msgstr "%s 要求額外的檔案格式支援。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:290
+msgid "Additional MIME Types Required"
+msgstr "需要額外的 MIME 類型"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional fonts.
+#: src/gs-dbus-helper.c:294
+#, c-format
+msgid "%s is requesting additional fonts."
+msgstr "%s 正在要求額外的字型。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:296
+msgid "Additional Fonts Required"
+msgstr "需要額外的字型"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional codecs.
+#: src/gs-dbus-helper.c:300
+#, c-format
+msgid "%s is requesting additional multimedia codecs."
+msgstr "%s 要求額外的多媒體編解碼器支援。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:302
+msgid "Additional Multimedia Codecs Required"
+msgstr "需要額外的多媒體編解碼器"
+
+#. TRANSLATORS: this is a notification displayed when an app needs additional printer drivers.
+#: src/gs-dbus-helper.c:306
+#, c-format
+msgid "%s is requesting additional printer drivers."
+msgstr "%s 要求額外的印表機驅動程式支援。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:308
+msgid "Additional Printer Drivers Required"
+msgstr "需要額外的印表機驅動程式"
+
+#. TRANSLATORS: this is a notification displayed when an app wants to install additional packages.
+#: src/gs-dbus-helper.c:312
+#, c-format
+msgid "%s is requesting additional packages."
+msgstr "%s 要求額外的軟體包。"
+
+#. TRANSLATORS: notification title
+#: src/gs-dbus-helper.c:314
+msgid "Additional Packages Required"
+msgstr "需要額外的軟體包"
+
+#. TRANSLATORS: this is a button that launches gnome-software
+#: src/gs-dbus-helper.c:323
+msgid "Find in Software"
+msgstr "在軟體中尋找"
+
+#: src/gs-details-page.c:346
+msgid "Removing…"
+msgstr "移除中…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be installed soon
+#: src/gs-details-page.c:365
+msgid "Pending installation…"
+msgstr "安裝待決…"
+
+#. TRANSLATORS: This is a label on top of the app's progress
+#. * bar to inform the user that the app should be updated soon
+#: src/gs-details-page.c:372
+msgid "Pending update…"
+msgstr "更新待決…"
+
+#. Translators: This string is shown when preparing to download and install an app.
+#: src/gs-details-page.c:386
+msgid "Preparing…"
+msgstr "準備中…"
+
+#. TRANSLATORS: this is the warning box
+#: src/gs-details-page.c:745
+msgid ""
+"This application can only be used when there is an active internet "
+"connection."
+msgstr "此類應用程式僅可在有網際網路連線時可以使用。"
+
+#. TRANSLATORS: button text in the header when an application
+#. * can be installed
+#. TRANSLATORS: button text in the header when firmware
+#. * can be live-installed
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo
+#: src/gs-details-page.c:890 src/gs-details-page.c:907
+#: src/gs-details-page.ui:167 src/gs-third-party-repo-row.c:84
+#: src/gs-upgrade-banner.c:89
+msgid "_Install"
+msgstr "安裝(_I)"
+
+#. TRANSLATORS: this is a button that allows the apps to
+#. * be installed.
+#. * The ellipsis indicates that further steps are required,
+#. * e.g. enabling software repositories or the like
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for installing a repo.
+#. The ellipsis indicates that further steps are required
+#: src/gs-details-page.c:921 src/gs-third-party-repo-row.c:76
+msgid "_Install…"
+msgstr "安裝(_I)…"
+
+#. TRANSLATORS: A label for a button to execute the selected application.
+#: src/gs-details-page.c:963
+msgid "_Launch"
+msgstr "啟動(_L)"
+
+#. TRANSLATORS: button text in the header when an application can be erased
+#: src/gs-details-page.c:987 src/gs-details-page.ui:192
+msgid "_Remove"
+msgstr "移除(_R)"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Network"
+msgstr "網路"
+
+#: src/gs-details-page.c:1018 src/gs-update-dialog.c:93
+msgid "Can communicate over the network"
+msgstr "可以透過網路溝通"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "System Services"
+msgstr "系統服務"
+
+#: src/gs-details-page.c:1019 src/gs-update-dialog.c:94
+msgid "Can access D-Bus services on the system bus"
+msgstr "可以存取系統匯流排的 D-Bus 服務"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Session Services"
+msgstr "作業階段服務"
+
+#: src/gs-details-page.c:1020 src/gs-update-dialog.c:95
+msgid "Can access D-Bus services on the session bus"
+msgstr "可以存取作業階段匯流排 D-Bus 服務"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Devices"
+msgstr "裝置"
+
+#: src/gs-details-page.c:1021 src/gs-update-dialog.c:96
+msgid "Can access system device files"
+msgstr "可以存取系統裝置檔案"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1023
+#: src/gs-update-dialog.c:97 src/gs-update-dialog.c:98
+msgid "Home folder"
+msgstr "家資料夾"
+
+#: src/gs-details-page.c:1022 src/gs-details-page.c:1024
+#: src/gs-details-page.c:1026 src/gs-update-dialog.c:97
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:101
+msgid "Can view, edit and create files"
+msgstr "可以檢視、編輯、建立檔案"
+
+#: src/gs-details-page.c:1023 src/gs-details-page.c:1025
+#: src/gs-details-page.c:1027 src/gs-update-dialog.c:98
+#: src/gs-update-dialog.c:100 src/gs-update-dialog.c:102
+msgid "Can view files"
+msgstr "可以檢視檔案"
+
+#: src/gs-details-page.c:1024 src/gs-details-page.c:1025
+#: src/gs-update-dialog.c:99 src/gs-update-dialog.c:100
+msgid "File system"
+msgstr "檔案系統"
+
+#: src/gs-details-page.c:1026 src/gs-details-page.c:1027
+#: src/gs-update-dialog.c:101 src/gs-update-dialog.c:102
+msgid "Downloads folder"
+msgstr "下載資料夾"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Settings"
+msgstr "設定值"
+
+#: src/gs-details-page.c:1028 src/gs-update-dialog.c:103
+msgid "Can view and change any settings"
+msgstr "可以檢視並變更任何設定"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Legacy display system"
+msgstr "傳統顯示系統"
+
+#: src/gs-details-page.c:1029 src/gs-update-dialog.c:104
+msgid "Uses an old, insecure display system"
+msgstr "使用舊式、不安全的顯示系統"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Sandbox escape"
+msgstr "沙盒跳脫"
+
+#: src/gs-details-page.c:1030 src/gs-update-dialog.c:105
+msgid "Can escape the sandbox and circumvent any other restrictions"
+msgstr "可以跳脫沙盒並繞過任何限制"
+
+#: src/gs-details-page.c:1045
+msgid "This application is fully sandboxed."
+msgstr "此應用程式已完全採沙盒方式運行。"
+
+#: src/gs-details-page.c:1053
+msgid ""
+"Unable to determine which parts of the system this application accesses. "
+"This is typical for older applications."
+msgstr "無法判定此應用程式可存取系統的什麼部份。這對於老舊應用程式來說很常見。"
+
+#. TRANSLATORS: this is where the version is not known
+#: src/gs-details-page.c:1212
+msgctxt "version"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: this is where the updated date is not known
+#: src/gs-details-page.c:1225
+msgctxt "updated"
+msgid "Never"
+msgstr "永不"
+
+#. TRANSLATORS: this is where we don't know the origin of the
+#. * application
+#: src/gs-details-page.c:1278
+msgctxt "origin"
+msgid "Unknown"
+msgstr "不明"
+
+#: src/gs-details-page.c:1331
+msgid "Low"
+msgstr "低"
+
+#: src/gs-details-page.c:1333
+msgid "Medium"
+msgstr "中"
+
+#: src/gs-details-page.c:1335
+msgid "High"
+msgstr "高"
+
+#. This refers to the license of the application
+#. TRANSLATORS: this is when a user doesn't specify a name
+#: src/gs-details-page.c:1337 src/gs-details-page.ui:1006
+#: src/gs-review-row.c:58
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: we need a remote server to process
+#: src/gs-details-page.c:1675
+msgid "You need internet access to write a review"
+msgstr "您需要網際網路存取才能寫評論"
+
+#: src/gs-details-page.c:1864 src/gs-details-page.c:1880
+#, c-format
+msgid "Unable to find “%s”"
+msgstr "找不到「%s」"
+
+#. TRANSLATORS: see the wikipedia page
+#: src/gs-details-page.c:2458
+msgid "Public domain"
+msgstr "公版著作"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit
+#: src/gs-details-page.c:2461
+msgid "https://en.wikipedia.org/wiki/Public_domain"
+msgstr "https://zh.wikipedia.org/zh-tw/%E5%85%AC%E6%9C%89%E9%A2%86%E5%9F%9F"
+
+#. TRANSLATORS: Replace the link with a version in your language,
+#. * e.g. https://www.gnu.org/philosophy/free-sw.de
+#: src/gs-details-page.c:2468
+msgid "https://www.gnu.org/philosophy/free-sw"
+msgstr "https://www.gnu.org/philosophy/free-sw.zh-tw.html"
+
+#. TRANSLATORS: see GNU page
+#: src/gs-details-page.c:2478 src/gs-details-page.ui:1250
+msgid "Free Software"
+msgstr "自由軟體"
+
+#. TRANSLATORS: for the free software popover
+#: src/gs-details-page.c:2535
+msgid "Users are bound by the following license:"
+msgid_plural "Users are bound by the following licenses:"
+msgstr[0] "使用者受下列授權條款約束:"
+
+#: src/gs-details-page.c:2562 src/gs-details-page.ui:1322
+msgid "More information"
+msgstr "詳細資訊"
+
+#: src/gs-details-page.ui:7
+msgid "Details page"
+msgstr "細節頁面"
+
+#: src/gs-details-page.ui:222
+msgid "Downloading"
+msgstr "下載中"
+
+#: src/gs-details-page.ui:262
+msgid "_Update"
+msgstr "更新(_U)"
+
+#. Translators: A label for a button to add a shortcut to the selected application.
+#: src/gs-details-page.ui:278
+msgid "_Add shortcut"
+msgstr "加入捷徑(_A)"
+
+#. Translators: A label for a button to remove a shortcut to the selected application.
+#: src/gs-details-page.ui:292
+msgid "Re_move shortcut"
+msgstr "移除捷徑(_M)"
+
+#: src/gs-details-page.ui:366
+msgid "No screenshot provided"
+msgstr "未提供螢幕擷圖"
+
+#: src/gs-details-page.ui:386
+msgid "Software Repository Included"
+msgstr "包含軟體庫"
+
+#: src/gs-details-page.ui:387
+msgid ""
+"This application includes a software repository which provides updates, as "
+"well as access to other software."
+msgstr "此應用程式內含可提供更新、並存取其他軟體的軟體庫。"
+
+#: src/gs-details-page.ui:394
+msgid "No Software Repository Included"
+msgstr "未包含軟體庫"
+
+#: src/gs-details-page.ui:395
+msgid ""
+"This application does not include a software repository. It will not be "
+"updated with new versions."
+msgstr "此應用程式不含軟體庫。它不會有新版本更新。"
+
+#: src/gs-details-page.ui:403
+msgid ""
+"This software is already provided by your distribution and should not be "
+"replaced."
+msgstr "此軟體已經由您的散布版提供,不應替換。"
+
+#. Translators: a repository file used for installing software has been discovered.
+#: src/gs-details-page.ui:410
+msgid "Software Repository Identified"
+msgstr "已識明軟體庫"
+
+#: src/gs-details-page.ui:411
+msgid ""
+"Adding this software repository will give you access to additional software "
+"and upgrades."
+msgstr "加入此軟體庫可讓您存取更多軟體與升級。"
+
+#: src/gs-details-page.ui:412
+msgid "Only use software repositories that you trust."
+msgstr "請務必只使用您信任的軟體庫。"
+
+#: src/gs-details-page.ui:422
+msgid "_Website"
+msgstr "網站(_W)"
+
+#: src/gs-details-page.ui:431
+msgid "_Donate"
+msgstr "贊助(_D)"
+
+#: src/gs-details-page.ui:541
+msgid "Localized in your Language"
+msgstr "支援您的本地語言"
+
+#: src/gs-details-page.ui:552
+msgid "Documentation"
+msgstr "文件說明"
+
+#: src/gs-details-page.ui:563
+msgid "Release Activity"
+msgstr "發行活躍"
+
+#: src/gs-details-page.ui:574
+msgid "System Integration"
+msgstr "系統整合"
+
+#: src/gs-details-page.ui:585
+msgid "Sandboxed"
+msgstr "沙盒運行"
+
+#. TRANSLATORS: the title for Snap channels
+#: src/gs-details-page.ui:605 src/gs-origin-popover-row.c:103
+msgid "Channel"
+msgstr "頻道"
+
+#. Translators: The available version of an app
+#: src/gs-details-page.ui:641 src/gs-origin-popover-row.ui:151
+msgid "Version"
+msgstr "版本"
+
+#: src/gs-details-page.ui:677
+msgid "Age Rating"
+msgstr "年齡分級"
+
+#: src/gs-details-page.ui:715 src/gs-details-page.ui:1408
+msgid "Permissions"
+msgstr "權限"
+
+#: src/gs-details-page.ui:753
+msgid "Updated"
+msgstr "更新"
+
+#: src/gs-details-page.ui:787
+msgid "Category"
+msgstr "類別"
+
+#: src/gs-details-page.ui:824
+msgid "Installed Size"
+msgstr "安裝後大小"
+
+#: src/gs-details-page.ui:855
+msgid "Download Size"
+msgstr "下載大小"
+
+#: src/gs-details-page.ui:917
+msgid "Developer"
+msgstr "開發者"
+
+#: src/gs-details-page.ui:963
+msgid "License"
+msgstr "授權"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:982
+msgid "Free"
+msgstr "自由授權"
+
+#. This refers to the license of the application
+#: src/gs-details-page.ui:994
+msgid "Proprietary"
+msgstr "專有授權"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the addons
+#. TRANSLATORS: this is the menu spec main category for Add-ons
+#: src/gs-details-page.ui:1044 src/gs-installed-page.c:441
+#: plugins/core/gs-desktop-common.c:315
+msgid "Add-ons"
+msgstr "附加元件"
+
+#: src/gs-details-page.ui:1056
+msgid "Selected add-ons will be installed with the application."
+msgstr "選取的附加元件會隨該程式一併安裝。"
+
+#. Translators: Header of the section with other users' opinions about the app.
+#: src/gs-details-page.ui:1094
+msgid "Reviews"
+msgstr "評論"
+
+#. Translators: Button opening a dialog where the users can write and publish their opinions about the apps.
+#: src/gs-details-page.ui:1112
+msgid "_Write a Review"
+msgstr "撰寫評論(_W)"
+
+#. Translators: Button to return more application-submitted reviews.
+#: src/gs-details-page.ui:1133
+msgid "_Show More"
+msgstr "顯示更多(_S)"
+
+#: src/gs-details-page.ui:1261
+msgid ""
+"This means that the software can be freely run, copied, distributed, studied "
+"and modified."
+msgstr "這代表該軟體著作可以讓您自由運用、複製、散布、研究、和修改。"
+
+#: src/gs-details-page.ui:1301
+msgid "Proprietary Software"
+msgstr "專有軟體"
+
+#: src/gs-details-page.ui:1312
+msgid ""
+"This means that the software is owned by an individual or a company. There "
+"are often restrictions on its use and its source code cannot usually be "
+"accessed."
+msgstr ""
+"這代表該軟體著作屬於特定人士或公司所有。他們通常會限制您的使用方式,而且一般"
+"來說無法存取其軟體源始碼。"
+
+#: src/gs-details-page.ui:1344
+msgid "Unknown Software License"
+msgstr "不明的軟體授權"
+
+#: src/gs-details-page.ui:1355
+msgid "The license terms of this software are unknown."
+msgstr "此軟體的授權條款細則尚未可知。"
+
+#: src/gs-details-page.ui:1375
+msgid "The application was rated this way because it features:"
+msgstr "該應用程式因下列特點而列於此分級:"
+
+#: src/gs-details-page.ui:1389
+msgid "No details were available for this rating."
+msgstr "此分級沒有可用的詳細資訊。"
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:135
+msgid " and "
+msgstr " 與 "
+
+#. TRANSLATORS: separator for a list of items
+#: src/gs-extras-page.c:138
+msgid ", "
+msgstr "、"
+
+#. TRANSLATORS: Application window title for fonts installation.
+#. %s will be replaced by name of the script we're searching for.
+#: src/gs-extras-page.c:164
+#, c-format
+msgid "Available fonts for the %s script"
+msgid_plural "Available fonts for the %s scripts"
+msgstr[0] "%s 文書的可用字型"
+
+#. TRANSLATORS: Application window title for codec installation.
+#. %s will be replaced by actual codec name(s)
+#: src/gs-extras-page.c:172
+#, c-format
+msgid "Available software for %s"
+msgid_plural "Available software for %s"
+msgstr[0] "%s 有可用的軟體"
+
+#: src/gs-extras-page.c:214
+msgid "Unable to Find Requested Software"
+msgstr "無法尋找要求的軟體"
+
+#. TRANSLATORS: This string is used for codecs that weren't found
+#: src/gs-extras-page.c:319
+#, c-format
+msgid "%s not found"
+msgstr "找不到 %s"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:323
+msgid "on the website"
+msgstr "於網站"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:330
+#, c-format
+msgid "No applications are available that provide the file %s."
+msgstr "沒有應用程式可開啟檔案 %s。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:334 src/gs-extras-page.c:345 src/gs-extras-page.c:356
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get missing applications "
+"might be found %s."
+msgstr "%s 的相關資訊,以及該如何取得缺少的應用程式的選項可以在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:341 src/gs-extras-page.c:363
+#, c-format
+msgid "No applications are available for %s support."
+msgstr "沒有應用程式可支援 %s。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:352
+#, c-format
+msgid "%s is not available."
+msgstr "%s 無法使用。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:367
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get an application that "
+"can support this format might be found %s."
+msgstr "%s 的相關資訊,以及該如何取得支援此格式的程式的選項可在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:374
+#, c-format
+msgid "No fonts are available for the %s script support."
+msgstr "沒有可支援 %s 文書的字型。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:378
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional fonts "
+"might be found %s."
+msgstr "%s 的相關資訊,以及該如何取得額外字型的選項可在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:385
+#, c-format
+msgid "No addon codecs are available for the %s format."
+msgstr "沒有可用的 %s 格式附加編解碼器。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:389
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a codec that can "
+"play this format might be found %s."
+msgstr ""
+"%s 的相關資訊,以及該如何取得可播放這個格式的編解碼器的選項可在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:396
+#, c-format
+msgid "No Plasma resources are available for %s support."
+msgstr "支援 %s 的 Plasma 資源無法使用。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:400
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get additional Plasma "
+"resources might be found %s."
+msgstr "%s 的相關資訊,以及該如何取得額外 Plasma 資源的選項可在 %s 找到。"
+
+#. TRANSLATORS: this is when we know about an application or
+#. * addon, but it can't be listed for some reason
+#: src/gs-extras-page.c:407
+#, c-format
+msgid "No printer drivers are available for %s."
+msgstr "沒有 %s 的印表機驅動程式可用。"
+
+#. TRANSLATORS: first %s is the codec name, and second %s is a
+#. * hyperlink with the "on the website" text
+#: src/gs-extras-page.c:411
+#, c-format
+msgid ""
+"Information about %s, as well as options for how to get a driver that "
+"supports this printer might be found %s."
+msgstr ""
+"%s 的相關資訊,以及該如何取得支援這個印表機的驅動程式的選項可在 %s 找到。"
+
+#. TRANSLATORS: hyperlink title
+#: src/gs-extras-page.c:455
+msgid "this website"
+msgstr "這個網站"
+
+#. TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website"
+#: src/gs-extras-page.c:459
+#, c-format
+msgid ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgid_plural ""
+"Unfortunately, the %s you were searching for could not be found. Please see "
+"%s for more information."
+msgstr[0] "很不幸的,您所搜尋的 %s 沒有任何結果。請參閱 %s 以瞭解更多資訊。"
+
+#: src/gs-extras-page.c:527 src/gs-extras-page.c:583 src/gs-extras-page.c:622
+msgid "Failed to find any search results"
+msgstr "找不到任何結果"
+
+#: src/gs-extras-page.c:810
+#, c-format
+msgid "%s file format"
+msgstr "%s 檔案格式"
+
+#: src/gs-extras-page.ui:7
+msgid "Codecs page"
+msgstr "編解碼器頁面"
+
+#: src/gs-first-run-dialog.ui:6 src/gs-first-run-dialog.ui:15
+msgid "Welcome"
+msgstr "歡迎"
+
+#: src/gs-first-run-dialog.ui:43
+msgid "Welcome to Software"
+msgstr "歡迎使用《軟體》"
+
+#: src/gs-first-run-dialog.ui:53
+msgid ""
+"Software lets you install all the software you need, all from one place. See "
+"our recommendations, browse the categories, or search for the applications "
+"you want."
+msgstr ""
+"《軟體》讓您安裝所有您需要的軟體,在一個地方滿足所有需求。請看看我們的推薦項"
+"目,瀏覽各項分類,或是直接搜尋您想要使用的應用程式。"
+
+#: src/gs-first-run-dialog.ui:62
+msgid "_Let’s Go Shopping"
+msgstr "出發去購物(_L)"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was removed
+#: src/gs-history-dialog.c:70
+msgctxt "app status"
+msgid "Removed"
+msgstr "已移除"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was installed
+#: src/gs-history-dialog.c:76
+msgctxt "app status"
+msgid "Installed"
+msgstr "已安裝"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing the application was updated
+#: src/gs-history-dialog.c:82
+msgctxt "app status"
+msgid "Updated"
+msgstr "已更新"
+
+#. TRANSLATORS: this is the status in the history UI,
+#. * where we are showing that something happened to the
+#. * application but we don't know what
+#: src/gs-history-dialog.c:88
+msgctxt "app status"
+msgid "Unknown"
+msgstr "不明"
+
+#. TRANSLATORS: This is the date string with: day number, month name, year.
+#. i.e. "25 May 2012"
+#: src/gs-history-dialog.c:111 src/gs-review-row.c:65 src/gs-updates-page.c:258
+msgid "%e %B %Y"
+msgstr "%Y年%m月%e日"
+
+#: src/gs-history-dialog.ui:5
+msgid "History"
+msgstr "歷史"
+
+#. TRANSLATORS: This is the header dividing the normal
+#. * applications and the system ones
+#: src/gs-installed-page.c:437
+msgid "System Applications"
+msgstr "系統應用程式"
+
+#: src/gs-installed-page.ui:7
+msgid "Installed page"
+msgstr "已安裝頁"
+
+#. TRANSLATORS: initial start
+#: src/gs-loading-page.c:62 src/gs-loading-page.c:66
+msgid "Software catalog is being downloaded"
+msgstr "正在下載軟體目錄"
+
+#: src/gs-loading-page.ui:7
+msgid "Loading page"
+msgstr "正載入頁面"
+
+#: src/gs-loading-page.ui:47
+msgid "Starting up…"
+msgstr "正在初始啟動…"
+
+#: src/gs-metered-data-dialog.ui:38
+msgid ""
+"The current network is metered. Metered connections have data limits or "
+"charges associated with them. To save data, automatic updates have therefore "
+"been paused.\n"
+"\n"
+"Automatic updates will be resumed when an un­metered network becomes "
+"available. Until then, it is still possible to manually install updates.\n"
+"\n"
+"Alternatively, if the current network has been in­correctly identified as "
+"being metered, this setting can be changed."
+msgstr ""
+"目前的網路為計費連線。計費連線有資料傳輸量的限制,或是與其相關的費用。為了節"
+"省數據傳輸量,自動更新已隨之暫停。\n"
+"\n"
+"自動更新將在可以使用非計費連線時回復。在那之前,您依然可以手動安裝更新。\n"
+"\n"
+"另外,如果目前的網路被錯誤辨識為計費連線,您也可以修改這個設定。"
+
+#: src/gs-metered-data-dialog.ui:53
+msgid "Open Network _Settings"
+msgstr "開啟網路設定值(_S)"
+
+#: src/gs-moderate-page.ui:7
+msgid "Moderate page"
+msgstr "調解頁面"
+
+#: src/gs-moderate-page.ui:85
+msgid "There are no reviews to moderate"
+msgstr "沒有評論需要調解"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:84
+msgid "system"
+msgstr "系統層級"
+
+#. TRANSLATORS: the installation location for flatpaks
+#: src/gs-origin-popover-row.c:87
+msgid "user"
+msgstr "使用者層級"
+
+#. TRANSLATORS: the title for Flatpak branches
+#. Translators: The branch, e.g. 'stable' or '3.32'
+#: src/gs-origin-popover-row.c:108 src/gs-origin-popover-row.ui:122
+msgid "Branch"
+msgstr "分支"
+
+#: src/gs-origin-popover-row.ui:35 src/gs-repo-row.ui:75
+msgid "URL"
+msgstr "URL"
+
+#. Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'
+#: src/gs-origin-popover-row.ui:64
+msgid "Format"
+msgstr "格式"
+
+#. Translators: The installation location for flatpaks, e.g. 'user' or 'system'
+#: src/gs-origin-popover-row.ui:93
+msgid "Installation"
+msgstr "安裝"
+
+#. add button
+#: src/gs-overview-page.c:313
+msgid "More…"
+msgstr "更多…"
+
+#. TRANSLATORS: this is a heading for audio applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:563
+msgid "Recommended Audio & Video Applications"
+msgstr "推薦的音訊和視訊應用程式"
+
+#. TRANSLATORS: this is a heading for games which have been
+#. * featured ('recommended') by the distribution
+#: src/gs-overview-page.c:568
+msgid "Recommended Games"
+msgstr "推薦的遊戲"
+
+#. TRANSLATORS: this is a heading for graphics applications
+#. * which have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:573
+msgid "Recommended Graphics Applications"
+msgstr "推薦的圖形藝術應用程式"
+
+#. TRANSLATORS: this is a heading for office applications which
+#. * have been featured ('recommended') by the distribution
+#: src/gs-overview-page.c:578
+msgid "Recommended Productivity Applications"
+msgstr "推薦的生產力應用程式"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:926 src/gs-repos-dialog.c:832
+msgid "Access additional software from selected third party sources."
+msgstr "從選取的第三方來源存取更多軟體。"
+
+#. TRANSLATORS: this is the third party repositories info bar.
+#: src/gs-overview-page.c:930 src/gs-repos-dialog.c:836
+msgid ""
+"Some of this software is proprietary and therefore has restrictions on use, "
+"sharing, and access to source code."
+msgstr "此軟體有部分是專有授權,因此對於使用、分享、存取軟體源碼等都有所限制。"
+
+#. TRANSLATORS: this is the clickable
+#. * link on the third party repositories info bar
+#: src/gs-overview-page.c:935 src/gs-repos-dialog.c:841
+msgid "Find out more…"
+msgstr "深入瞭解…"
+
+#. TRANSLATORS: button to turn on third party software repositories
+#. TRANSLATORS: button to accept the agreement
+#: src/gs-overview-page.c:943 src/gs-repos-dialog.c:240
+msgid "Enable"
+msgstr "啟用"
+
+#: src/gs-overview-page.ui:7
+msgid "Overview page"
+msgstr "概覽頁"
+
+#: src/gs-overview-page.ui:39
+msgid "Enable Third Party Software Repositories?"
+msgstr "啟用第三方軟體庫?"
+
+#: src/gs-overview-page.ui:101
+msgid "Previous"
+msgstr "上一個"
+
+#: src/gs-overview-page.ui:126
+msgid "Next"
+msgstr "下一個"
+
+#. Translators: This is a heading for software which has been featured ('picked') by the distribution.
+#: src/gs-overview-page.ui:149
+msgid "Editor’s Picks"
+msgstr "編輯精選"
+
+#. Translators: This is a heading for software which has been recently released upstream.
+#: src/gs-overview-page.ui:175
+msgid "Recent Releases"
+msgstr "最近發行"
+
+#: src/gs-overview-page.ui:209
+msgid "Categories"
+msgstr "類別"
+
+#: src/gs-overview-page.ui:274
+msgid "No Application Data Found"
+msgstr "找不到應用程式資料"
+
+#. TRANSLATORS: this is a prompt message, and
+#. * '%s' is an application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:325
+#, c-format
+msgid "Prepare %s"
+msgstr "準備 %s"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-page.c:461
+#, c-format
+msgid "Are you sure you want to remove the %s repository?"
+msgstr "您確定要移除 %s 軟體庫?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:465
+#, c-format
+msgid ""
+"All applications from %s will be removed, and you will have to re-install "
+"the repository to use them again."
+msgstr "所有來自 %s 的應用程式都將被移除,若未來您想再次使用時則須重新安裝。"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is an
+#. * application summary, e.g. 'GNOME Clocks'
+#: src/gs-page.c:473
+#, c-format
+msgid "Are you sure you want to remove %s?"
+msgstr "您確定要移除 %s?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-page.c:476
+#, c-format
+msgid "%s will be removed, and you will have to install it to use it again."
+msgstr "%s 將被移除,將來若您想使用時則須再次安裝。"
+
+#. TRANSLATORS: this refers to an app (by name) that is installed
+#: src/gs-popular-tile.c:64 src/gs-summary-tile.c:87
+#, c-format
+msgid "%s (Installed)"
+msgstr "%s(已安裝)"
+
+#: src/gs-prefs-dialog.ui:5 src/gs-prefs-dialog.ui:17
+msgid "Update Preferences"
+msgstr "更新偏好設定"
+
+#: src/gs-prefs-dialog.ui:43
+msgid "Automatic Updates"
+msgstr "自動更新"
+
+#: src/gs-prefs-dialog.ui:70
+msgid "Automatic updates are disabled when on mobile or metered connections."
+msgstr "使用行動數據或計費連線時,將停用自動更新。"
+
+#: src/gs-prefs-dialog.ui:88
+msgid "Automatic Update Notifications"
+msgstr "自動更新通知"
+
+#: src/gs-prefs-dialog.ui:102
+msgid "Show notifications when updates have been automatically installed."
+msgstr "當更新已經自動安裝完成時顯示通知。"
+
+#. TRANSLATORS: This is a text displayed during a distro upgrade. %s
+#. will be replaced by the name and version of distro, e.g. 'Fedora 23'.
+#: src/gs-removal-dialog.c:120
+#, c-format
+msgid ""
+"Some of the currently installed software is not compatible with %s. If you "
+"continue, the following will be automatically removed during the upgrade:"
+msgstr ""
+"目前安裝的軟體有些和 %s 並不相容。若您希望繼續,則下列軟體在升級過程中會自動"
+"移除:"
+
+#: src/gs-removal-dialog.ui:26
+msgid "Incompatible Software"
+msgstr "不相容的軟體"
+
+#: src/gs-removal-dialog.ui:39
+msgid "_Continue"
+msgstr "繼續(_C)"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:98
+#, c-format
+msgid "%u application installed"
+msgid_plural "%u applications installed"
+msgstr[0] "已安裝 %u 項應用程式"
+
+#. TRANSLATORS: This string is used to construct the 'X add-ons
+#. installed' sentence, describing a software repository.
+#: src/gs-repos-dialog.c:105
+#, c-format
+msgid "%u add-on installed"
+msgid_plural "%u add-ons installed"
+msgstr[0] "已安裝 %u 個附加元件"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of applications.
+#: src/gs-repos-dialog.c:113
+#, c-format
+msgid "%u application"
+msgid_plural "%u applications"
+msgstr[0] "%u 項應用程式"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the number of add-ons.
+#: src/gs-repos-dialog.c:119
+#, c-format
+msgid "%u add-on"
+msgid_plural "%u add-ons"
+msgstr[0] "%u 個附加元件"
+
+#. TRANSLATORS: This string is used to construct the 'X applications
+#. and y add-ons installed' sentence, describing a software repository.
+#. The correct form here depends on the total number of
+#. applications and add-ons.
+#: src/gs-repos-dialog.c:126
+#, c-format
+msgid "%s and %s installed"
+msgid_plural "%s and %s installed"
+msgstr[0] "%s 和 %s 現已安裝"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:302
+#, c-format
+msgid "Remove “%s”?"
+msgstr "移除「%s」?"
+
+#. TRANSLATORS: this is a prompt message, and '%s' is a
+#. * repository name, e.g. 'GNOME Nightly'
+#: src/gs-repos-dialog.c:307
+#, c-format
+msgid "Disable “%s”?"
+msgstr "停用「%s」?"
+
+#. TRANSLATORS: longer dialog text
+#: src/gs-repos-dialog.c:311
+msgid ""
+"Software that has been installed from this repository will no longer receive "
+"updates, including security fixes."
+msgstr "由此軟體庫安裝的軟體將不再接收更新,包括安全性修正。"
+
+#. TRANSLATORS: this is button text to remove the repo
+#: src/gs-repos-dialog.c:329
+msgid "Disable"
+msgstr "停用"
+
+#. TRANSLATORS: this is the fallback text we use if we can't
+#. figure out the name of the operating system
+#: src/gs-repos-dialog.c:745
+msgid "the operating system"
+msgstr "作業系統"
+
+#. TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+#. %s gets replaced by the name of the actual distro, e.g. Fedora.
+#: src/gs-repos-dialog.c:811 src/gs-repos-dialog.c:847
+#, c-format
+msgid "These repositories supplement the default software provided by %s."
+msgstr "這些軟體庫可補充 %s 提供的預設軟體。"
+
+#. TRANSLATORS: info bar title in the software repositories dialog
+#: src/gs-repos-dialog.c:829
+msgid "Third Party Repositories"
+msgstr "第三方軟體庫"
+
+#: src/gs-repos-dialog.ui:73
+msgid "No Additional Repositories"
+msgstr "無額外軟體庫"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for enabling a repo
+#: src/gs-repo-row.c:96
+msgid "_Enable"
+msgstr "啟用(_E)"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for removing a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:105
+msgid "_Remove…"
+msgstr "移除(_R)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. for disabling a repo. The ellipsis indicates that further
+#. steps are required
+#: src/gs-repo-row.c:110
+msgid "_Disable…"
+msgstr "停用(_D)…"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being enabled
+#: src/gs-repo-row.c:118
+msgid "Enabling"
+msgstr "啟用中"
+
+#. TRANSLATORS: this is a button in the software repositories dialog
+#. that shows the status of a repo being disabled
+#: src/gs-repo-row.c:130
+msgid "Disabling"
+msgstr "停用中"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is enabled.
+#: src/gs-repo-row.c:144
+msgid "Enabled"
+msgstr "已啟用"
+
+#. TRANSLATORS: this is a label in the software repositories
+#. dialog that indicates that a repo is disabled.
+#: src/gs-repo-row.c:150
+msgid "Disabled"
+msgstr "已停用"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really bad application
+#: src/gs-review-dialog.c:82
+msgid "Hate it"
+msgstr "厭惡"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * Not a great application
+#: src/gs-review-dialog.c:86
+msgid "Don’t like it"
+msgstr "不喜歡"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A fairly-good application
+#: src/gs-review-dialog.c:90
+msgid "It’s OK"
+msgstr "尚可"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A good application
+#: src/gs-review-dialog.c:94
+msgid "Like it"
+msgstr "喜歡"
+
+#. TRANSLATORS: lighthearted star rating description;
+#. * A really awesome application
+#: src/gs-review-dialog.c:98
+msgid "Love it"
+msgstr "超讚"
+
+#. TRANSLATORS: the review can't just be copied and pasted
+#: src/gs-review-dialog.c:120
+msgid "Please take more time writing the review"
+msgstr "請花點時間寫一些評論"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:124
+msgid "Please choose a star rating"
+msgstr "請選擇一個星級評等"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:128
+msgid "The summary is too short"
+msgstr "摘要太短"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:132
+msgid "The summary is too long"
+msgstr "摘要太長"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:136
+msgid "The description is too short"
+msgstr "描述太短"
+
+#. TRANSLATORS: the review is not acceptable
+#: src/gs-review-dialog.c:140
+msgid "The description is too long"
+msgstr "描述太長"
+
+#. Translators: Title of the dialog box where the users can write and publish their opinions about the apps.
+#: src/gs-review-dialog.ui:10
+msgid "Post Review"
+msgstr "張貼評論"
+
+#. Translators: A button to publish the user's opinion about the app.
+#: src/gs-review-dialog.ui:34
+msgid "_Post"
+msgstr "張貼(_P)"
+
+#: src/gs-review-dialog.ui:110
+msgid "Summary"
+msgstr "摘要"
+
+#: src/gs-review-dialog.ui:120
+msgid ""
+"Give a short summary of your review, for example: “Great app, would "
+"recommend”."
+msgstr "為您的評論下一個簡短的摘要,例如:「很棒的程式,極力推薦」"
+
+#. Translators: This is where the users enter their opinions about the apps.
+#: src/gs-review-dialog.ui:145
+msgctxt "app review"
+msgid "Review"
+msgstr "評論"
+
+#: src/gs-review-dialog.ui:155
+msgid "What do you think of the app? Try to give reasons for your views."
+msgstr "您覺得這個程式如何?請試著以您的觀點提出原因。"
+
+#: src/gs-review-dialog.ui:187
+msgid ""
+"Find what data is sent in our <a href=\"https://odrs.gnome.org/privacy"
+"\">privacy policy</a>."
+msgstr ""
+"參見我們的<a href=\"https://odrs.gnome.org/privacy\">隱私政策</a>來瞭解程式會"
+"傳送哪些資料。"
+
+#. Translators: A label for the total number of reviews.
+#: src/gs-review-histogram.ui:412
+msgid "ratings in total"
+msgstr "總評論數"
+
+#. TRANSLATORS: we explain what the action is going to do
+#: src/gs-review-row.c:223
+msgid "You can report reviews for abusive, rude, or discriminatory behavior."
+msgstr "您可以提報侮辱、粗俗、歧視等評論。"
+
+#. TRANSLATORS: we ask the user if they really want to do this
+#: src/gs-review-row.c:228
+msgid ""
+"Once reported, a review will be hidden until it has been checked by an "
+"administrator."
+msgstr "一旦提報,評論將被隱藏,直到有管理員檢核過為止。"
+
+#. TRANSLATORS: window title when
+#. * reporting a user-submitted review
+#. * for moderation
+#: src/gs-review-row.c:242
+msgid "Report Review?"
+msgstr "提報評論?"
+
+#. TRANSLATORS: button text when
+#. * sending a review for moderation
+#: src/gs-review-row.c:246
+msgid "Report"
+msgstr "提報"
+
+#. Translators: Users can express their opinions about other users' opinions about the apps.
+#: src/gs-review-row.ui:105
+msgid "Was this review useful to you?"
+msgstr "這則評論對您有用嗎?"
+
+#: src/gs-review-row.ui:121
+msgid "Yes"
+msgstr "是"
+
+#: src/gs-review-row.ui:130
+msgid "No"
+msgstr "否"
+
+#. Translators: Button text for indifference, only used when moderating
+#: src/gs-review-row.ui:139
+msgid "Meh"
+msgstr "隨便"
+
+#: src/gs-review-row.ui:162
+msgid "Report…"
+msgstr "提報…"
+
+#: src/gs-review-row.ui:172
+msgid "Remove…"
+msgstr "移除…"
+
+#. TRANSLATORS: this is when we try to download a screenshot and
+#. * we get back 404
+#: src/gs-screenshot-image.c:236
+msgid "Screenshot not found"
+msgstr "找不到螢幕擷圖"
+
+#. TRANSLATORS: possibly image file corrupt or not an image
+#: src/gs-screenshot-image.c:251
+msgid "Failed to load image"
+msgstr "無法載入影像"
+
+#. TRANSLATORS: this is when we request a screenshot size that
+#. * the generator did not create or the parser did not add
+#: src/gs-screenshot-image.c:382
+msgid "Screenshot size not found"
+msgstr "找不到螢幕擷圖的大小"
+
+#. TRANSLATORS: this is when we try create the cache directory
+#. * but we were out of space or permission was denied
+#: src/gs-screenshot-image.c:412
+msgid "Could not create cache"
+msgstr "無法建立快取"
+
+#. TRANSLATORS: this is when we try to download a screenshot
+#. * that was not a valid URL
+#: src/gs-screenshot-image.c:472
+msgid "Screenshot not valid"
+msgstr "螢幕擷圖無效"
+
+#. TRANSLATORS: this is when networking is not available
+#: src/gs-screenshot-image.c:487
+msgid "Screenshot not available"
+msgstr "螢幕擷圖無法使用"
+
+#: src/gs-screenshot-image.c:545
+msgid "Screenshot"
+msgstr "螢幕擷圖"
+
+#. TRANSLATORS: this is when there are too many search results
+#. * to show in in the search page
+#: src/gs-search-page.c:143
+#, c-format
+msgid "%u more match"
+msgid_plural "%u more matches"
+msgstr[0] "其他 %u 項符合"
+
+#: src/gs-search-page.ui:7
+msgid "Search page"
+msgstr "搜尋頁"
+
+#: src/gs-search-page.ui:54
+msgid "No Application Found"
+msgstr "找不到應用程式"
+
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the truncated hostname, e.g.
+#. * 'alt.fedoraproject.org'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is the origin id, e.g. 'fedora'
+#. TRANSLATORS: this is part of the in-app notification,
+#. * where the %s is a multi-word localised app name
+#. * e.g. 'Getting things GNOME!"
+#: src/gs-shell.c:1111 src/gs-shell.c:1116 src/gs-shell.c:1131
+#: src/gs-shell.c:1135
+#, c-format
+msgid "“%s”"
+msgstr "「%s」"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1182
+#, c-format
+msgid "Unable to download firmware updates from %s"
+msgstr "無法從 %s 下載韌體更新"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1188
+#, c-format
+msgid "Unable to download updates from %s"
+msgstr "無法從 %s 下載更新"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1195 src/gs-shell.c:1240
+msgid "Unable to download updates"
+msgstr "無法下載更新"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1201
+msgid ""
+"Unable to download updates: internet access was required but wasn’t available"
+msgstr "無法下載更新:必須要有網際網路存取但卻無法使用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the source (e.g. "alt.fedoraproject.org")
+#: src/gs-shell.c:1210
+#, c-format
+msgid "Unable to download updates from %s: not enough disk space"
+msgstr "無法從 %s 下載更新:磁碟空間不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1215
+msgid "Unable to download updates: not enough disk space"
+msgstr "無法下載更新:磁碟空間不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1222
+msgid "Unable to download updates: authentication was required"
+msgstr "無法下載更新:需要核對身份"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1227
+msgid "Unable to download updates: authentication was invalid"
+msgstr "無法下載更新:身份核對無效"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1232
+msgid ""
+"Unable to download updates: you do not have permission to install software"
+msgstr "無法下載更新:您的權限無法安裝軟體"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1243
+msgid "Unable to get list of updates"
+msgstr "無法取得更新清單"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1286
+#, c-format
+msgid "Unable to install %s as download failed from %s"
+msgstr "無法安裝 %s,因為從 %s 下載失敗"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1292
+#, c-format
+msgid "Unable to install %s as download failed"
+msgstr "無法安裝 %s,因為下載失敗"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1305
+#, c-format
+msgid "Unable to install %s as runtime %s not available"
+msgstr "無法安裝 %s,因為無法使用 %s 執行時期環境"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1311
+#, c-format
+msgid "Unable to install %s as not supported"
+msgstr "無法安裝 %s,因為尚未支援"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1318
+msgid "Unable to install: internet access was required but wasn’t available"
+msgstr "無法安裝:必須要有網際網路存取但卻無法使用"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1324
+msgid "Unable to install: the application has an invalid format"
+msgstr "無法安裝:應用程式內含無效格式"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1329
+#, c-format
+msgid "Unable to install %s: not enough disk space"
+msgstr "無法安裝 %s:磁碟空間不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1336
+#, c-format
+msgid "Unable to install %s: authentication was required"
+msgstr "無法安裝 %s:需要核對身份"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1343
+#, c-format
+msgid "Unable to install %s: authentication was invalid"
+msgstr "無法安裝 %s:身份核對無效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1350
+#, c-format
+msgid "Unable to install %s: you do not have permission to install software"
+msgstr "無法安裝 %s:您的權限無法安裝軟體"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1358
+#, c-format
+msgid "Unable to install %s: AC power is required"
+msgstr "無法安裝 %s:需要交流電源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1365
+#, c-format
+msgid "Unable to install %s: The battery level is too low"
+msgstr "無法安裝 %s:電池電量過低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1374
+#, c-format
+msgid "Unable to install %s"
+msgstr "無法安裝 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the app name (e.g. "GIMP") and
+#. * the second %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1421
+#, c-format
+msgid "Unable to update %s from %s as download failed"
+msgstr "無法從 %2$s 更新 %1$s,因為下載失敗"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1428
+#, c-format
+msgid "Unable to update %s as download failed"
+msgstr "因為下載失敗而無法更新 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1435
+#, c-format
+msgid "Unable to install updates from %s as download failed"
+msgstr "因為下載失敗而無法從 %s 安裝更新"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1439
+#, c-format
+msgid "Unable to install updates as download failed"
+msgstr "因為下載失敗而無法安裝更新"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1445
+msgid "Unable to update: internet access was required but wasn’t available"
+msgstr "無法更新:必須要有網際網路存取但卻無法使用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1455
+#, c-format
+msgid "Unable to update %s: not enough disk space"
+msgstr "無法更新 %s:磁碟空間不足"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1460
+#, c-format
+msgid "Unable to install updates: not enough disk space"
+msgstr "無法安裝更新:磁碟空間不足"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1470
+#, c-format
+msgid "Unable to update %s: authentication was required"
+msgstr "無法更新 %s:需要核對身份"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1475
+#, c-format
+msgid "Unable to install updates: authentication was required"
+msgstr "無法安裝更新:需要核對身份"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1484
+#, c-format
+msgid "Unable to update %s: authentication was invalid"
+msgstr "無法更新 %s:身份核對無效"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1489
+#, c-format
+msgid "Unable to install updates: authentication was invalid"
+msgstr "無法安裝更新:身份核對無效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1498
+#, c-format
+msgid "Unable to update %s: you do not have permission to update software"
+msgstr "無法更新 %s:您的權限無法更新軟體"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1504
+#, c-format
+msgid ""
+"Unable to install updates: you do not have permission to update software"
+msgstr "無法安裝更新:您的權限無法更新軟體"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1514
+#, c-format
+msgid "Unable to update %s: AC power is required"
+msgstr "無法更新 %s:需要交流電源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1520
+#, c-format
+msgid "Unable to install updates: AC power is required"
+msgstr "無法安裝更新:需要交流電源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1529
+#, c-format
+msgid "Unable to update %s: The battery level is too low"
+msgstr "無法安裝 %s:電池電量過低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "Dell XPS 13")
+#: src/gs-shell.c:1535
+#, c-format
+msgid "Unable to install updates: The battery level is too low"
+msgstr "無法安裝更新:電池電量過低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1546
+#, c-format
+msgid "Unable to update %s"
+msgstr "無法更新 %s"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1549
+#, c-format
+msgid "Unable to install updates"
+msgstr "無法安裝更新"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the distro name (e.g. "Fedora 25") and
+#. * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1592
+#, c-format
+msgid "Unable to upgrade to %s from %s"
+msgstr "無法升級成 %s,來源為 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the app name (e.g. "GIMP")
+#: src/gs-shell.c:1597
+#, c-format
+msgid "Unable to upgrade to %s as download failed"
+msgstr "無法升級成 %s,因為下載失敗"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1606
+#, c-format
+msgid ""
+"Unable to upgrade to %s: internet access was required but wasn’t available"
+msgstr "無法升級至 %s:必須要有網際網路存取但卻無法使用"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1615
+#, c-format
+msgid "Unable to upgrade to %s: not enough disk space"
+msgstr "無法升級成 %s:磁碟空間不足"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1623
+#, c-format
+msgid "Unable to upgrade to %s: authentication was required"
+msgstr "無法升級成 %s:需要核對身份"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1630
+#, c-format
+msgid "Unable to upgrade to %s: authentication was invalid"
+msgstr "無法升級成 %s:身份核對無效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1637
+#, c-format
+msgid "Unable to upgrade to %s: you do not have permission to upgrade"
+msgstr "無法升級成 %s:您的權限無法升級"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1644
+#, c-format
+msgid "Unable to upgrade to %s: AC power is required"
+msgstr "無法升級成 %s:需要交流電源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1651
+#, c-format
+msgid "Unable to upgrade to %s: The battery level is too low"
+msgstr "無法升級成 %s:電池電量過低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the distro name (e.g. "Fedora 25")
+#: src/gs-shell.c:1660
+#, c-format
+msgid "Unable to upgrade to %s"
+msgstr "無法升級至 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1698
+#, c-format
+msgid "Unable to remove %s: authentication was required"
+msgstr "無法移除 %s:需要核對身份"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1704
+#, c-format
+msgid "Unable to remove %s: authentication was invalid"
+msgstr "無法移除 %s:身份核對無效"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1710
+#, c-format
+msgid "Unable to remove %s: you do not have permission to remove software"
+msgstr "無法移除 %s:您的權限無法移除軟體"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1717
+#, c-format
+msgid "Unable to remove %s: AC power is required"
+msgstr "無法移除 %s:需要交流電源"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1724
+#, c-format
+msgid "Unable to remove %s: The battery level is too low"
+msgstr "無法移除 %s:電池電量過低"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1736
+#, c-format
+msgid "Unable to remove %s"
+msgstr "無法移除 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the first %s is the application name (e.g. "GIMP")
+#. * and the second %s is the name of the runtime, e.g.
+#. * "GNOME SDK [flatpak.gnome.org]"
+#: src/gs-shell.c:1779
+#, c-format
+msgid "Unable to launch %s: %s is not installed"
+msgstr "無法啟動 %s:%s 未安裝"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1786 src/gs-shell.c:1837 src/gs-shell.c:1878
+#: src/gs-shell.c:1926
+msgid "Not enough disk space — free up some space and try again"
+msgstr "沒有足夠的磁碟空間 — 請空出部分空間後再試一次"
+
+#. TRANSLATORS: we failed to get a proper error code
+#: src/gs-shell.c:1797 src/gs-shell.c:1848 src/gs-shell.c:1889
+#: src/gs-shell.c:1960
+msgid "Sorry, something went wrong"
+msgstr "很抱歉,有事情出錯了"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1829
+msgid "Failed to install file: not supported"
+msgstr "無法安裝檔案:尚未支援"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1833
+msgid "Failed to install file: authentication failed"
+msgstr "無法安裝檔案:核對失敗"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1870
+msgid "Failed to install: not supported"
+msgstr "無法安裝:尚未支援"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1874
+msgid "Failed to install: authentication failed"
+msgstr "無法安裝:認證失敗"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * the %s is the origin, e.g. "Fedora" or
+#. * "Fedora Project [fedoraproject.org]"
+#: src/gs-shell.c:1920
+#, c-format
+msgid "Unable to contact %s"
+msgstr "無法聯絡 %s"
+
+#. TRANSLATORS: failure text for the in-app notification,
+#. * where the %s is the application name (e.g. "GIMP")
+#: src/gs-shell.c:1935
+#, c-format
+msgid "%s needs to be restarted to use new plugins."
+msgstr "%s 需要重新開機才能使用新的外掛程式。"
+
+#. TRANSLATORS: failure text for the in-app notification
+#: src/gs-shell.c:1940
+msgid "This application needs to be restarted to use new plugins."
+msgstr "這個應用程式需要重新開機才能使用新的外掛程式。"
+
+#. TRANSLATORS: need to be connected to the AC power
+#: src/gs-shell.c:1947
+msgid "AC power is required"
+msgstr "需要交流電源"
+
+#. TRANSLATORS: not enough juice to do this safely
+#: src/gs-shell.c:1951
+msgid "The battery level is too low"
+msgstr "電池電量過低"
+
+#. TRANSLATORS: this refers to where the app came from
+#: src/gs-shell-search-provider.c:258
+#, c-format
+msgid "Source: %s"
+msgstr "來源:%s"
+
+#: src/gs-summary-tile.c:92
+#, c-format
+msgid "%s (Installing)"
+msgstr "%s(安裝中)"
+
+#: src/gs-summary-tile.c:97
+#, c-format
+msgid "%s (Removing)"
+msgstr "%s(移除中)"
+
+#. TRANSLATORS: this is a button in the software repositories
+#. dialog for removing multiple repos
+#: src/gs-third-party-repo-row.c:93
+msgid "_Remove All"
+msgstr "全部移除(_R)"
+
+#. TRANSLATORS: this is where the packager did not write
+#. * a description for the update
+#: src/gs-update-dialog.c:188
+msgid "No update description available."
+msgstr "未提供更新的詳細資訊。"
+
+#. TRANSLATORS: this is the subtitle of the installed updates dialog window.
+#. %s will be replaced by the date when the updates were installed.
+#. The date format is defined by the locale's preferred date representation
+#. ("%x" in strftime.)
+#: src/gs-update-dialog.c:292
+#, c-format
+msgid "Installed on %s"
+msgstr "已安裝於 %s"
+
+#. TRANSLATORS: this is the title of the installed updates dialog window
+#: src/gs-update-dialog.c:312
+msgid "Installed Updates"
+msgstr "已安裝的更新"
+
+#. TRANSLATORS: This is the header for package additions during
+#. * a system update
+#: src/gs-update-dialog.c:528
+msgid "Additions"
+msgstr "新增"
+
+#. TRANSLATORS: This is the header for package removals during
+#. * a system update
+#: src/gs-update-dialog.c:532
+msgid "Removals"
+msgstr "移除"
+
+#. TRANSLATORS: This is the header for package updates during
+#. * a system update
+#: src/gs-update-dialog.c:536
+msgid "Updates"
+msgstr "更新"
+
+#. TRANSLATORS: This is the header for package downgrades during
+#. * a system update
+#: src/gs-update-dialog.c:540
+msgid "Downgrades"
+msgstr "降級"
+
+#: src/gs-update-dialog.ui:100
+msgid "No updates have been installed on this system."
+msgstr "這個系統沒有安裝過更新。"
+
+#: src/gs-update-monitor.c:111
+msgid "Security Updates Pending"
+msgstr "擱置的安全性更新"
+
+#: src/gs-update-monitor.c:112
+msgid "It is recommended that you install important updates now"
+msgstr "建議您現在安裝重要更新"
+
+#: src/gs-update-monitor.c:115
+msgid "Restart & Install"
+msgstr "重新啟動並安裝更新"
+
+#: src/gs-update-monitor.c:119
+msgid "Software Updates Available"
+msgstr "有軟體更新可用"
+
+#: src/gs-update-monitor.c:120
+msgid "Important OS and application updates are ready to be installed"
+msgstr "已備妥重要的作業系統與應用程式更新可供安裝"
+
+#: src/gs-update-monitor.c:124
+msgid "View"
+msgstr "檢視"
+
+#. TRANSLATORS: apps were auto-updated and restart is required
+#: src/gs-update-monitor.c:232
+#, c-format
+msgid "%u Application Updated — Restart Required"
+msgid_plural "%u Applications Updated — Restart Required"
+msgstr[0] "%u 個應用程式已更新 — 需要重開機"
+
+#. TRANSLATORS: apps were auto-updated
+#: src/gs-update-monitor.c:238
+#, c-format
+msgid "%u Application Updated"
+msgid_plural "%u Applications Updated"
+msgstr[0] "%u 個應用程式已更新"
+
+#. TRANSLATORS: %1 is an application name, e.g. Firefox
+#: src/gs-update-monitor.c:249
+#, c-format
+msgid "%s has been updated."
+msgstr "%s 已經更新。"
+
+#. TRANSLATORS: the app needs restarting
+#: src/gs-update-monitor.c:252
+msgid "Please restart the application."
+msgstr "請重新啟動應用程式。"
+
+#. TRANSLATORS: %1 and %2 are both application names, e.g. Firefox
+#: src/gs-update-monitor.c:260
+#, c-format
+msgid "%s and %s have been updated."
+msgstr "%s 和 %s 已經更新。"
+
+#. TRANSLATORS: at least one application needs restarting
+#: src/gs-update-monitor.c:266 src/gs-update-monitor.c:285
+#, c-format
+msgid "%u application requires a restart."
+msgid_plural "%u applications require a restart."
+msgstr[0] "有 %u 個應用程式必須重新開機。"
+
+#. TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox
+#: src/gs-update-monitor.c:278
+#, c-format
+msgid "Includes %s, %s and %s."
+msgstr "包括 %s、%s、%s 等。"
+
+#. TRANSLATORS: this is when the current OS version goes end-of-life
+#: src/gs-update-monitor.c:519 src/gs-updates-page.ui:43
+msgid "Operating System Updates Unavailable"
+msgstr "沒有作業系統更新"
+
+#. TRANSLATORS: this is the message dialog for the distro EOL notice
+#: src/gs-update-monitor.c:521
+msgid "Upgrade to continue receiving security updates."
+msgstr "升級以繼續接受安全性更新。"
+
+#. TRANSLATORS: this is a distro upgrade, the replacement would be the
+#. * distro name, e.g. 'Fedora'
+#: src/gs-update-monitor.c:576
+#, c-format
+msgid "A new version of %s is available to install"
+msgstr "有新版本的「%s」可安裝"
+
+#. TRANSLATORS: this is a distro upgrade
+#: src/gs-update-monitor.c:580
+msgid "Software Upgrade Available"
+msgstr "有可用的軟體升級"
+
+#. TRANSLATORS: title when we offline updates have failed
+#: src/gs-update-monitor.c:969
+msgid "Software Updates Failed"
+msgstr "軟體更新失敗"
+
+#. TRANSLATORS: message when we offline updates have failed
+#: src/gs-update-monitor.c:971
+msgid "An important OS update failed to be installed."
+msgstr "重要的作業系統更新安裝失敗。"
+
+#: src/gs-update-monitor.c:972
+msgid "Show Details"
+msgstr "顯示細節"
+
+#. TRANSLATORS: Notification title when we've done a distro upgrade
+#: src/gs-update-monitor.c:995
+msgid "System Upgrade Complete"
+msgstr "系統升級完成"
+
+#. TRANSLATORS: This is the notification body when we've done a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Welcome to Fedora 28!"
+#: src/gs-update-monitor.c:1000
+#, c-format
+msgid "Welcome to %s %s!"
+msgstr "歡迎使用 %s %s!"
+
+#. TRANSLATORS: title when we've done offline updates
+#: src/gs-update-monitor.c:1006
+msgid "Software Update Installed"
+msgid_plural "Software Updates Installed"
+msgstr[0] "軟體更新已安裝"
+
+#. TRANSLATORS: message when we've done offline updates
+#: src/gs-update-monitor.c:1010
+msgid "An important OS update has been installed."
+msgid_plural "Important OS updates have been installed."
+msgstr[0] "重要的作業系統更新已安裝。"
+
+#. TRANSLATORS: Button to look at the updates that were installed.
+#. * Note that it has nothing to do with the application reviews, the
+#. * users can't express their opinions here. In some languages
+#. * "Review (evaluate) something" is a different translation than
+#. * "Review (browse) something."
+#: src/gs-update-monitor.c:1021
+msgctxt "updates"
+msgid "Review"
+msgstr "檢閱"
+
+#. TRANSLATORS: this is when the offline update failed
+#: src/gs-update-monitor.c:1069
+msgid "Failed To Update"
+msgstr "無法更新"
+
+#. TRANSLATORS: the user must have updated manually after
+#. * the updates were prepared
+#: src/gs-update-monitor.c:1075
+msgid "The system was already up to date."
+msgstr "該系統已經是最新的。"
+
+#. TRANSLATORS: the user aborted the update manually
+#: src/gs-update-monitor.c:1080
+msgid "The update was cancelled."
+msgstr "更新已取消。"
+
+#. TRANSLATORS: the package manager needed to download
+#. * something with no network available
+#: src/gs-update-monitor.c:1086
+msgid ""
+"Internet access was required but wasn’t available. Please make sure that you "
+"have internet access and try again."
+msgstr "需要存取網際網路但無法使用。請確定您能使用網際網路後再試一次。"
+
+#. TRANSLATORS: if the package is not signed correctly
+#: src/gs-update-monitor.c:1092
+msgid ""
+"There were security issues with the update. Please consult your software "
+"provider for more details."
+msgstr "這次更新中有安全性問題。請詢問您的軟體供應商以瞭解更多資訊。"
+
+#. TRANSLATORS: we ran out of disk space
+#: src/gs-update-monitor.c:1098
+msgid ""
+"There wasn’t enough disk space. Please free up some space and try again."
+msgstr "沒有足夠的磁碟空間。請空出部分空間後再試一次。"
+
+#. TRANSLATORS: We didn't handle the error type
+#: src/gs-update-monitor.c:1103
+msgid ""
+"We’re sorry: the update failed to install. Please wait for another update "
+"and try again. If the problem persists, contact your software provider."
+msgstr ""
+"我們很抱歉:更新無法安裝。請等待下一次更新時再試一次。如果問題持續出現,請連"
+"絡您的軟體供應商。"
+
+#. TRANSLATORS: Time in 24h format
+#: src/gs-updates-page.c:226
+msgid "%R"
+msgstr "%R"
+
+#. TRANSLATORS: Time in 12h format
+#: src/gs-updates-page.c:229
+msgid "%l:%M %p"
+msgstr "%p %l:%M"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 24h format. i.e. "Yesterday, 14:30"
+#: src/gs-updates-page.c:235
+msgid "Yesterday, %R"
+msgstr "昨日 %R"
+
+#. TRANSLATORS: This is the word "Yesterday" followed by a
+#. time string in 12h format. i.e. "Yesterday, 2:30 PM"
+#: src/gs-updates-page.c:239
+msgid "Yesterday, %l:%M %p"
+msgstr "昨日%p %l:%M"
+
+#: src/gs-updates-page.c:242
+msgid "Two days ago"
+msgstr "兩天前"
+
+#: src/gs-updates-page.c:244
+msgid "Three days ago"
+msgstr "三天前"
+
+#: src/gs-updates-page.c:246
+msgid "Four days ago"
+msgstr "四天前"
+
+#: src/gs-updates-page.c:248
+msgid "Five days ago"
+msgstr "五天前"
+
+#: src/gs-updates-page.c:250
+msgid "Six days ago"
+msgstr "六天前"
+
+#: src/gs-updates-page.c:252
+msgid "One week ago"
+msgstr "一週前"
+
+#: src/gs-updates-page.c:254
+msgid "Two weeks ago"
+msgstr "兩週前"
+
+#. TRANSLATORS: the update panel is doing *something* vague
+#: src/gs-updates-page.c:270
+msgid "Looking for new updates…"
+msgstr "尋找新的更新中…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:339
+msgid "Setting up updates…"
+msgstr "設置更新中…"
+
+#. TRANSLATORS: the updates panel is starting up
+#: src/gs-updates-page.c:340 src/gs-updates-page.c:347
+msgid "(This could take a while)"
+msgstr "(這可能會花上一段時間)"
+
+#. TRANSLATORS: This is the time when we last checked for updates
+#: src/gs-updates-page.c:454
+#, c-format
+msgid "Last checked: %s"
+msgstr "上次檢查:%s"
+
+#. TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+#. * and the second %s is the distro version, e.g. '25'
+#: src/gs-updates-page.c:618
+#, c-format
+msgid "%s %s is no longer supported."
+msgstr "%s %s 已不再有支援。"
+
+#. TRANSLATORS: OS refers to operating system, e.g. Fedora
+#: src/gs-updates-page.c:623
+msgid "Your OS is no longer supported."
+msgstr "您的作業系統已不再有支援。"
+
+#. TRANSLATORS: EOL distros do not get important updates
+#: src/gs-updates-page.c:628
+msgid "This means that it does not receive security updates."
+msgstr "這代表它無法取得安全性更新。"
+
+#. TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26
+#: src/gs-updates-page.c:632
+msgid "It is recommended that you upgrade to a more recent version."
+msgstr "建議您升級到較新的版本。"
+
+#. TRANSLATORS: this is to explain that downloading updates may cost money
+#: src/gs-updates-page.c:890
+msgid "Charges May Apply"
+msgstr "可能需要費用"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:894
+msgid ""
+"Checking for updates while using mobile broadband could cause you to incur "
+"charges."
+msgstr "使用行動寬頻檢查更新,可能讓您負擔額外的數據傳輸費用。"
+
+#. TRANSLATORS: this is a link to the
+#. * control-center network panel
+#: src/gs-updates-page.c:898
+msgid "Check _Anyway"
+msgstr "無論如何都檢查(_A)"
+
+#. TRANSLATORS: can't do updates check
+#: src/gs-updates-page.c:914
+msgid "No Network"
+msgstr "沒有網路"
+
+#. TRANSLATORS: we need network
+#. * to do the updates check
+#: src/gs-updates-page.c:918
+msgid "Internet access is required to check for updates."
+msgstr "需要存取網際網路以檢查更新。"
+
+#. This label indicates that the update check is in progress
+#: src/gs-updates-page.c:1341
+msgid "Checking…"
+msgstr "正在檢查…"
+
+#: src/gs-updates-page.c:1354
+msgid "Check for updates"
+msgstr "檢查軟體更新"
+
+#: src/gs-updates-page.ui:7
+msgid "Updates page"
+msgstr "更新頁"
+
+#. TRANSLATORS: This means all software (plural) installed on this system is up to date.
+#: src/gs-updates-page.ui:177
+msgid "Software is up to date"
+msgstr "軟體處於最新狀態"
+
+#: src/gs-updates-page.ui:225
+msgid ""
+"Checking for updates when using mobile broadband could cause you to incur "
+"charges"
+msgstr "使用行動寬頻檢查更新,可能讓您負擔額外的數據傳輸費用"
+
+#: src/gs-updates-page.ui:237
+msgid "_Check Anyway"
+msgstr "無論如何都檢查(_C)"
+
+#: src/gs-updates-page.ui:273
+msgid "Go online to check for updates"
+msgstr "上線以檢查更新"
+
+#: src/gs-updates-page.ui:284
+msgid "_Network Settings"
+msgstr "網路設定值(_N)"
+
+#: src/gs-updates-page.ui:357
+msgid "Updates are automatically managed"
+msgstr "更新為自動管理"
+
+#. TRANSLATORS: This is the button for installing all
+#. * offline updates
+#: src/gs-updates-section.c:281
+msgid "Restart & Update"
+msgstr "重新啟動並更新"
+
+#. TRANSLATORS: This is the button for upgrading all
+#. * online-updatable applications
+#: src/gs-updates-section.c:287
+msgid "Update All"
+msgstr "全部更新"
+
+#. TRANSLATORS: This is the header for system firmware that
+#. * requires a reboot to apply
+#: src/gs-updates-section.c:418
+msgid "Integrated Firmware"
+msgstr "整合的韌體"
+
+#. TRANSLATORS: This is the header for offline OS and offline
+#. * app updates that require a reboot to apply
+#: src/gs-updates-section.c:422
+msgid "Requires Restart"
+msgstr "必須重新啟動"
+
+#. TRANSLATORS: This is the header for online runtime and
+#. * app updates, typically flatpaks or snaps
+#: src/gs-updates-section.c:426
+msgid "Application Updates"
+msgstr "應用程式更新"
+
+#. TRANSLATORS: This is the header for device firmware that can
+#. * be installed online
+#: src/gs-updates-section.c:430
+msgid "Device Firmware"
+msgstr "裝置韌體"
+
+#: src/gs-updates-section.c:458 src/gs-upgrade-banner.ui:102
+msgid "_Download"
+msgstr "下載(_D)"
+
+#: src/gs-upgrade-banner.c:91
+msgid ""
+"It is recommended that you back up your data and files before upgrading."
+msgstr "建議您在升級前先備份您的資料與檔案。"
+
+#: src/gs-upgrade-banner.c:95
+msgid "_Restart Now"
+msgstr "立刻重新啟動(_R)"
+
+#: src/gs-upgrade-banner.c:97
+msgid "Updates will be applied when the computer is restarted."
+msgstr "更新會在電腦重新啟動時套用。"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade is available. First %s is the distro name and the
+#. * 2nd %s is the version, e.g. "Fedora 23 Now Available"
+#: src/gs-upgrade-banner.c:112
+#, c-format
+msgid "%s %s Now Available"
+msgstr "%s %s 現在可用"
+
+#. TRANSLATORS: This is the text displayed while waiting to
+#. * download a distro upgrade. First %s is the distro name and
+#. * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23"
+#: src/gs-upgrade-banner.c:122
+#, c-format
+msgid "Waiting to Download %s %s"
+msgstr "正在等候下載 %s %s"
+
+#. TRANSLATORS: This is the text displayed while downloading a
+#. * distro upgrade. First %s is the distro name and the 2nd %s
+#. * is the version, e.g. "Downloading Fedora 23"
+#: src/gs-upgrade-banner.c:132
+#, c-format
+msgid "Downloading %s %s"
+msgstr "正在下載 %s %s"
+
+#. TRANSLATORS: This is the text displayed when a distro
+#. * upgrade has been downloaded and is ready to be installed.
+#. * First %s is the distro name and the 2nd %s is the version,
+#. * e.g. "Fedora 23 Ready to be Installed"
+#: src/gs-upgrade-banner.c:143
+#, c-format
+msgid "%s %s Ready to be Installed"
+msgstr "%s %s 已準備好可以安裝"
+
+#: src/gs-upgrade-banner.ui:30
+msgid "A major upgrade, with new features and added polish."
+msgstr "重大升級,包含新功能和加入改進。"
+
+#: src/gs-upgrade-banner.ui:50
+msgid "_Learn More"
+msgstr "深入瞭解(_L)"
+
+#: src/org.gnome.Software.desktop.in:4
+msgid "Add, remove or update software on this computer"
+msgstr "在這臺電腦上加入、移除、或更新軟體"
+
+#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+#: src/org.gnome.Software.desktop.in:12
+msgid ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;"
+msgstr ""
+"Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;"
+"Software;App;Store;;更新;升級;來源;套件庫;軟體庫;倉庫;偏好設定;安裝;解除安裝;"
+"程式;軟體;應用;商店;"
+
+#: plugins/core/gs-desktop-common.c:17
+msgctxt "Menu of Audio & Video"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:20
+msgctxt "Menu of Audio & Video"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:23
+msgctxt "Menu of Audio & Video"
+msgid "Audio Creation & Editing"
+msgstr "音訊創作和編輯"
+
+#: plugins/core/gs-desktop-common.c:29
+msgctxt "Menu of Audio & Video"
+msgid "Music Players"
+msgstr "音樂播放器"
+
+#: plugins/core/gs-desktop-common.c:38
+msgctxt "Menu of Developer Tools"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:41
+msgctxt "Menu of Developer Tools"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:44
+msgctxt "Menu of Developer Tools"
+msgid "Debuggers"
+msgstr "除錯器"
+
+#: plugins/core/gs-desktop-common.c:47
+msgctxt "Menu of Developer Tools"
+msgid "IDEs"
+msgstr "IDE"
+
+#: plugins/core/gs-desktop-common.c:56
+msgctxt "Menu of Education & Science"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:60
+msgctxt "Menu of Education & Science"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:64
+msgctxt "Menu of Education & Science"
+msgid "Artificial Intelligence"
+msgstr "人工智慧"
+
+#: plugins/core/gs-desktop-common.c:67
+msgctxt "Menu of Education & Science"
+msgid "Astronomy"
+msgstr "天文"
+
+#: plugins/core/gs-desktop-common.c:71
+msgctxt "Menu of Education & Science"
+msgid "Chemistry"
+msgstr "化學"
+
+#: plugins/core/gs-desktop-common.c:75
+msgctxt "Menu of Education & Science"
+msgid "Languages"
+msgstr "語言"
+
+#: plugins/core/gs-desktop-common.c:79
+msgctxt "Menu of Education & Science"
+msgid "Math"
+msgstr "數學"
+
+#: plugins/core/gs-desktop-common.c:86
+msgctxt "Menu of Education & Science"
+msgid "Robotics"
+msgstr "機器人"
+
+#: plugins/core/gs-desktop-common.c:95
+msgctxt "Menu of Games"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:98
+msgctxt "Menu of Games"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:101
+msgctxt "Menu of Games"
+msgid "Action"
+msgstr "動作"
+
+#: plugins/core/gs-desktop-common.c:104
+msgctxt "Menu of Games"
+msgid "Adventure"
+msgstr "冒險"
+
+#: plugins/core/gs-desktop-common.c:107
+msgctxt "Menu of Games"
+msgid "Arcade"
+msgstr "機臺"
+
+#: plugins/core/gs-desktop-common.c:110
+msgctxt "Menu of Games"
+msgid "Blocks"
+msgstr "方塊"
+
+#: plugins/core/gs-desktop-common.c:113
+msgctxt "Menu of Games"
+msgid "Board"
+msgstr "棋盤"
+
+#: plugins/core/gs-desktop-common.c:116
+msgctxt "Menu of Games"
+msgid "Card"
+msgstr "紙牌"
+
+#: plugins/core/gs-desktop-common.c:119
+msgctxt "Menu of Games"
+msgid "Emulators"
+msgstr "模擬器"
+
+#: plugins/core/gs-desktop-common.c:122
+msgctxt "Menu of Games"
+msgid "Kids"
+msgstr "孩童"
+
+#: plugins/core/gs-desktop-common.c:125
+msgctxt "Menu of Games"
+msgid "Logic"
+msgstr "邏輯"
+
+#: plugins/core/gs-desktop-common.c:128
+msgctxt "Menu of Games"
+msgid "Role Playing"
+msgstr "角色扮演"
+
+#: plugins/core/gs-desktop-common.c:131
+msgctxt "Menu of Games"
+msgid "Sports"
+msgstr "運動"
+
+#: plugins/core/gs-desktop-common.c:135
+msgctxt "Menu of Games"
+msgid "Strategy"
+msgstr "策略"
+
+#: plugins/core/gs-desktop-common.c:143
+msgctxt "Menu of Graphics & Photography"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:146
+msgctxt "Menu of Graphics & Photography"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:149
+msgctxt "Menu of Graphics & Photography"
+msgid "3D Graphics"
+msgstr "3D 圖形"
+
+#: plugins/core/gs-desktop-common.c:152
+msgctxt "Menu of Graphics & Photography"
+msgid "Photography"
+msgstr "攝影"
+
+#: plugins/core/gs-desktop-common.c:155
+msgctxt "Menu of Graphics & Photography"
+msgid "Scanning"
+msgstr "掃描"
+
+#: plugins/core/gs-desktop-common.c:158
+msgctxt "Menu of Graphics & Photography"
+msgid "Vector Graphics"
+msgstr "向量圖形"
+
+#: plugins/core/gs-desktop-common.c:161
+msgctxt "Menu of Graphics & Photography"
+msgid "Viewers"
+msgstr "檢視器"
+
+#: plugins/core/gs-desktop-common.c:169
+msgctxt "Menu of Productivity"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:172
+msgctxt "Menu of Productivity"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:175
+msgctxt "Menu of Productivity"
+msgid "Calendar"
+msgstr "行事曆"
+
+#: plugins/core/gs-desktop-common.c:179
+msgctxt "Menu of Productivity"
+msgid "Database"
+msgstr "資料庫"
+
+#: plugins/core/gs-desktop-common.c:182
+msgctxt "Menu of Productivity"
+msgid "Finance"
+msgstr "財經"
+
+#: plugins/core/gs-desktop-common.c:186
+msgctxt "Menu of Productivity"
+msgid "Word Processor"
+msgstr "文書處理器"
+
+#: plugins/core/gs-desktop-common.c:195
+msgctxt "Menu of Add-ons"
+msgid "Fonts"
+msgstr "字型"
+
+#: plugins/core/gs-desktop-common.c:198
+msgctxt "Menu of Add-ons"
+msgid "Codecs"
+msgstr "編解碼器"
+
+#: plugins/core/gs-desktop-common.c:201
+msgctxt "Menu of Add-ons"
+msgid "Input Sources"
+msgstr "輸入來源"
+
+#: plugins/core/gs-desktop-common.c:204
+msgctxt "Menu of Add-ons"
+msgid "Language Packs"
+msgstr "語言包"
+
+#: plugins/core/gs-desktop-common.c:207
+msgctxt "Menu of Add-ons"
+msgid "Localization"
+msgstr "在地化"
+
+#: plugins/core/gs-desktop-common.c:210
+msgctxt "Menu of Add-ons"
+msgid "Hardware Drivers"
+msgstr "硬體驅動程式"
+
+#: plugins/core/gs-desktop-common.c:218
+msgctxt "Menu of Communication & News"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:221
+msgctxt "Menu of Communication & News"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:224
+msgctxt "Menu of Communication & News"
+msgid "Chat"
+msgstr "聊天"
+
+#: plugins/core/gs-desktop-common.c:231
+msgctxt "Menu of Communication & News"
+msgid "News"
+msgstr "新聞"
+
+#: plugins/core/gs-desktop-common.c:235
+msgctxt "Menu of Communication & News"
+msgid "Web Browsers"
+msgstr "網頁瀏覽器"
+
+#: plugins/core/gs-desktop-common.c:243
+msgctxt "Menu of Utilities"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:246
+msgctxt "Menu of Utilities"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:249
+msgctxt "Menu of Utilities"
+msgid "Text Editors"
+msgstr "文字編輯器"
+
+#: plugins/core/gs-desktop-common.c:257
+msgctxt "Menu of Reference"
+msgid "All"
+msgstr "全部"
+
+#: plugins/core/gs-desktop-common.c:260
+msgctxt "Menu of Reference"
+msgid "Featured"
+msgstr "特選"
+
+#: plugins/core/gs-desktop-common.c:263
+msgctxt "Menu of Art"
+msgid "Art"
+msgstr "藝術"
+
+#: plugins/core/gs-desktop-common.c:266
+msgctxt "Menu of Reference"
+msgid "Biography"
+msgstr "傳記"
+
+#: plugins/core/gs-desktop-common.c:269
+msgctxt "Menu of Reference"
+msgid "Comics"
+msgstr "漫畫"
+
+#: plugins/core/gs-desktop-common.c:272
+msgctxt "Menu of Reference"
+msgid "Fiction"
+msgstr "小說"
+
+#: plugins/core/gs-desktop-common.c:275
+msgctxt "Menu of Reference"
+msgid "Health"
+msgstr "健康"
+
+#: plugins/core/gs-desktop-common.c:278
+msgctxt "Menu of Reference"
+msgid "History"
+msgstr "歷史"
+
+#: plugins/core/gs-desktop-common.c:281
+msgctxt "Menu of Reference"
+msgid "Lifestyle"
+msgstr "生活風格"
+
+#: plugins/core/gs-desktop-common.c:284
+msgctxt "Menu of Reference"
+msgid "Politics"
+msgstr "政治"
+
+#: plugins/core/gs-desktop-common.c:287
+msgctxt "Menu of Reference"
+msgid "Sports"
+msgstr "運動"
+
+#. TRANSLATORS: this is the menu spec main category for Audio & Video
+#: plugins/core/gs-desktop-common.c:297
+msgid "Audio & Video"
+msgstr "音訊和視訊"
+
+#. TRANSLATORS: this is the menu spec main category for Development
+#: plugins/core/gs-desktop-common.c:300
+msgid "Developer Tools"
+msgstr "開發者工具"
+
+#. TRANSLATORS: this is the menu spec main category for Education & Science
+#: plugins/core/gs-desktop-common.c:303
+msgid "Education & Science"
+msgstr "教育和科學"
+
+#. TRANSLATORS: this is the menu spec main category for Game
+#: plugins/core/gs-desktop-common.c:306
+msgid "Games"
+msgstr "遊戲"
+
+#. TRANSLATORS: this is the menu spec main category for Graphics
+#: plugins/core/gs-desktop-common.c:309
+msgid "Graphics & Photography"
+msgstr "圖形和攝影"
+
+#. TRANSLATORS: this is the menu spec main category for Office
+#: plugins/core/gs-desktop-common.c:312
+msgid "Productivity"
+msgstr "生產力"
+
+#. TRANSLATORS: this is the menu spec main category for Communication
+#: plugins/core/gs-desktop-common.c:318
+msgid "Communication & News"
+msgstr "溝通和新聞"
+
+#. TRANSLATORS: this is the menu spec main category for Reference
+#: plugins/core/gs-desktop-common.c:321
+msgid "Reference"
+msgstr "參考"
+
+#. TRANSLATORS: this is the menu spec main category for Utilities
+#: plugins/core/gs-desktop-common.c:324
+msgid "Utilities"
+msgstr "公用程式"
+
+#. TRANSLATORS: this is a group of updates that are not
+#. * packages and are not shown in the main list
+#: plugins/core/gs-plugin-generic-updates.c:56
+msgid "OS Updates"
+msgstr "作業系統更新"
+
+#. TRANSLATORS: this is a longer description of the
+#. * "OS Updates" string
+#: plugins/core/gs-plugin-generic-updates.c:61
+msgid "Includes performance, stability and security improvements."
+msgstr "包括效能、穩定性、安全性等改善。"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/core/gs-plugin-rewrite-resource.c:42
+msgid "Downloading featured images…"
+msgstr "下載特選影像中…"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:562
+msgid "Endless OS"
+msgstr "Endless OS"
+
+#. TRANSLATORS: ‘Endless OS’ is a brand name; https://endlessos.com/
+#: plugins/eos-updater/gs-plugin-eos-updater.c:565
+msgid "An Endless OS update with new features and fixes."
+msgstr "Endless OS 更新,含新功能和錯誤修正。"
+
+#: plugins/eos-updater/gs-plugin-eos-updater.c:826
+msgid "EOS update service could not fetch and apply the update."
+msgstr "無法取得 EOS 更新服務並套用更新。"
+
+#. TRANSLATORS: tool that is used when copying profiles system-wide
+#: plugins/external-appstream/gs-install-appstream.c:141
+msgid "GNOME Software AppStream system-wide installer"
+msgstr "GNOME 軟體 AppStrem 系統域安裝程式"
+
+#: plugins/external-appstream/gs-install-appstream.c:143
+msgid "Failed to parse command line arguments"
+msgstr "無法解析指令列引數"
+
+#. TRANSLATORS: user did not specify a valid filename
+#: plugins/external-appstream/gs-install-appstream.c:150
+msgid "You need to specify exactly one filename"
+msgstr "您需要指定單一個檔名"
+
+#. TRANSLATORS: only able to install files as root
+#: plugins/external-appstream/gs-install-appstream.c:157
+msgid "This program can only be used by the root user"
+msgstr "此程式僅能由 root 使用者使用"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:165
+msgid "Failed to validate content type"
+msgstr "無法驗證內容類型"
+
+#. TRANSLATORS: error details
+#: plugins/external-appstream/gs-install-appstream.c:175
+msgid "Failed to copy"
+msgstr "無法複製"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/external-appstream/gs-plugin-external-appstream.c:236
+msgid "Downloading extra metadata files…"
+msgstr "下載額外的中介資料檔案中…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:193
+msgid "Downloading upgrade information…"
+msgstr "下載升級資訊中…"
+
+#. TRANSLATORS: this is a title for Fedora distro upgrades
+#: plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c:283
+msgid ""
+"Upgrade for the latest features, performance and stability improvements."
+msgstr "升級系統以取得最新功能、效能與穩定性改善等。"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:6
+msgid "Flatpak Support"
+msgstr "Flatpak 支援"
+
+#: plugins/flatpak/org.gnome.Software.Plugin.Flatpak.metainfo.xml.in:7
+msgid "Flatpak is a framework for desktop applications on Linux"
+msgstr "Flatpak 是一個用於 Linux 桌面應用程式框架"
+
+#. TRANSLATORS: status text when downloading new metadata
+#: plugins/flatpak/gs-flatpak.c:901
+#, c-format
+msgid "Getting flatpak metadata for %s…"
+msgstr "取得 %s 的 flatpak 中介資料…"
+
+#. TRANSLATORS: a specific part of hardware,
+#. * the first %s is the device name, e.g. 'Unifying Receiver`
+#: plugins/fwupd/gs-fwupd-app.c:136
+#, c-format
+msgid "%s Device Update"
+msgstr "%s 裝置更新"
+
+#. TRANSLATORS: the entire system, e.g. all internal devices,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:141
+#, c-format
+msgid "%s System Update"
+msgstr "%s 系統更新"
+
+#. TRANSLATORS: the EC is typically the keyboard controller chip,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:146
+#, c-format
+msgid "%s Embedded Controller Update"
+msgstr "%s 內嵌控制器更新"
+
+#. TRANSLATORS: ME stands for Management Engine, the Intel AMT thing,
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:151
+#, c-format
+msgid "%s ME Update"
+msgstr "%s ME 更新"
+
+#. TRANSLATORS: ME stands for Management Engine (with Intel AMT),
+#. * where the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:156
+#, c-format
+msgid "%s Corporate ME Update"
+msgstr "%s 企業級 ME 更新"
+
+#. TRANSLATORS: ME stands for Management Engine, where
+#. * the first %s is the device name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:161
+#, c-format
+msgid "%s Consumer ME Update"
+msgstr "%s 消費者級 ME 更新"
+
+#. TRANSLATORS: the controller is a device that has other devices
+#. * plugged into it, for example ThunderBolt, FireWire or USB,
+#. * the first %s is the device name, e.g. 'Intel ThunderBolt`
+#: plugins/fwupd/gs-fwupd-app.c:167
+#, c-format
+msgid "%s Controller Update"
+msgstr "%s 控制器更新"
+
+#. TRANSLATORS: the Thunderbolt controller is a device that
+#. * has other high speed Thunderbolt devices plugged into it;
+#. * the first %s is the system name, e.g. 'ThinkPad P50`
+#: plugins/fwupd/gs-fwupd-app.c:173
+#, c-format
+msgid "%s Thunderbolt Controller Update"
+msgstr "%s Thunderbolt 控制器更新"
+
+#. TRANSLATORS: the CPU microcode is firmware loaded onto the CPU
+#. * at system bootup
+#: plugins/fwupd/gs-fwupd-app.c:178
+#, c-format
+msgid "%s CPU Microcode Update"
+msgstr "%s CPU 微碼更新"
+
+#. TRANSLATORS: configuration refers to hardware state,
+#. * e.g. a security database or a default power value
+#: plugins/fwupd/gs-fwupd-app.c:183
+#, c-format
+msgid "%s Configuration Update"
+msgstr "%s 組態設定更新"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:691
+msgid "Downloading firmware update signature…"
+msgstr "下載韌體更新簽章中…"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/fwupd/gs-plugin-fwupd.c:732
+msgid "Downloading firmware update metadata…"
+msgstr "下載韌體更新中介資料中…"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:6
+msgid "Firmware Upgrade Support"
+msgstr "韌體升級支援"
+
+#: plugins/fwupd/org.gnome.Software.Plugin.Fwupd.metainfo.xml.in:7
+msgid "Provides support for firmware upgrades"
+msgstr "提供韌體升級的支援"
+
+#. TRANSLATORS: status text when downloading
+#: plugins/odrs/gs-plugin-odrs.c:291
+msgid "Downloading application ratings…"
+msgstr "下載應用程式評等中…"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:6
+msgid "Open Desktop Ratings Support"
+msgstr "開放桌面評等支援"
+
+#: plugins/odrs/org.gnome.Software.Plugin.Odrs.metainfo.xml.in:7
+msgid "ODRS is a service providing user reviews of applications"
+msgstr "ODRS 是個提供應用程式使用者發表評論的服務"
+
+#. TRANSLATORS: default snap store name
+#: plugins/snap/gs-plugin-snap.c:240
+msgid "Snap Store"
+msgstr "Snap 商店"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:6
+msgid "Snap Support"
+msgstr "Snap 支援"
+
+#: plugins/snap/org.gnome.Software.Plugin.Snap.metainfo.xml.in:7
+msgid "A snap is a universal Linux package"
+msgstr "Snap 是一種通用的 Linux 軟體包"
+
+#~ msgid "About %s"
+#~ msgstr "關於《%s》"
+
+#~ msgid "%s ME"
+#~ msgstr "%s ME"
+
+#~ msgid "Extension Settings"
+#~ msgstr "擴充套件設定值"
+
+#~ msgid ""
+#~ "Extensions are used at your own risk. If you have any system problems, it "
+#~ "is recommended to disable them."
+#~ msgstr ""
+#~ "請自行承擔擴充套件的使用風險。若您遇上任何系統問題,建議將擴充套件停用。"
+
+#~ msgctxt "Menu of Add-ons"
+#~ msgid "Shell Extensions"
+#~ msgstr "Shell 擴充套件"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "GNOME Shell Extensions Repository"
+#~ msgstr "GNOME Shell 擴充套件庫"
+
+#~ msgid "Downloading shell extension metadata…"
+#~ msgstr "下載擴充套件中介資料中…"
+
+#~ msgid "GNOME Shell Extension"
+#~ msgstr "GNOME Shell 擴充套件"
+
+#~ msgid "Show the folder management UI"
+#~ msgstr "顯示資料夾管理之使用者介面"
+
+#~ msgid "_All"
+#~ msgstr "全部(_A)"
+
+#~ msgid "Folder Name"
+#~ msgstr "資料夾名稱"
+
+#~ msgid "_Add"
+#~ msgstr "加入(_A)"
+
+#~ msgid "Add to Application Folder"
+#~ msgstr "加入到應用程式資料夾中"
+
+#~ msgid "Sign In / Register…"
+#~ msgstr "登入 / 註冊…"
+
+#~ msgid "Continue"
+#~ msgstr "繼續"
+
+#~ msgid "Use"
+#~ msgstr "使用"
+
+#~ msgid "Add another…"
+#~ msgstr "加入其他…"
+
+#~ msgid "Top Rated"
+#~ msgstr "最高評等"
+
+#~ msgid "CSS validated OK!"
+#~ msgstr "CSS 驗證 OK!"
+
+#~ msgid "Failed to load file"
+#~ msgstr "無法載入檔案"
+
+#~ msgid "Unsaved changes"
+#~ msgstr "尚未儲存變更"
+
+#~ msgid "The application list is already loaded."
+#~ msgstr "應用程式清單已經載入。"
+
+#~ msgid "Merge documents"
+#~ msgstr "合併文件"
+
+#~ msgid "Throw away changes"
+#~ msgstr "放棄變更"
+
+#~ msgid "Open AppStream File"
+#~ msgstr "開啟 AppStream 檔案"
+
+#~ msgid "_Open"
+#~ msgstr "開啟(_O)"
+
+#~ msgid "_Save"
+#~ msgstr "儲存(_S)"
+
+#~ msgid "Failed to save file"
+#~ msgstr "無法儲存檔案"
+
+#~ msgid "%s banner design deleted."
+#~ msgstr "%s 橫幅設計已刪除。"
+
+#~ msgid "Banner design deleted."
+#~ msgstr "橫幅設計已刪除。"
+
+#~ msgid "The application list has unsaved changes."
+#~ msgstr "尚未儲存應用程式清單的更動。"
+
+#~ msgid "Use verbose logging"
+#~ msgstr "使用詳盡紀錄"
+
+#~ msgid "GNOME Software Banner Designer"
+#~ msgstr "GNOME 軟體橫幅設計師"
+
+#~ msgid "No Designs"
+#~ msgstr "沒有設計"
+
+#~ msgid "Error message here"
+#~ msgstr "這裡是錯誤訊息"
+
+#~ msgid "App ID"
+#~ msgstr "App ID"
+
+#~ msgid "Editor’s Pick"
+#~ msgstr "編輯精選"
+
+#~ msgid "Category Featured"
+#~ msgstr "類別特選"
+
+#~ msgid "Undo"
+#~ msgstr "取消動作"
+
+#~ msgid "Banner Designer"
+#~ msgstr "橫幅設計師"
+
+#~ msgid "New Banner"
+#~ msgstr "新橫幅"
+
+#~ msgid "Import from file"
+#~ msgstr "從檔案匯入"
+
+#~ msgid "Export to file"
+#~ msgstr "匯出成檔案"
+
+#~ msgid "Delete Design"
+#~ msgstr "刪除設計"
+
+#~ msgid "Featured App"
+#~ msgstr "特選程式"
+
+#~ msgid "OS Upgrade"
+#~ msgstr "作業系統升級"
+
+#~ msgid "Spacing"
+#~ msgstr "間距"
+
+#~ msgid "The amount of space between children"
+#~ msgstr "子元件之間的間距"
+
+#~ msgid "Click on items to select them"
+#~ msgstr "點按項目可以選取"
+
+#~ msgid "Select"
+#~ msgstr "選取"
+
+#~ msgid "_Add to Folder…"
+#~ msgstr "加入到資料夾中(_A)…"
+
+#~ msgid "_Move to Folder…"
+#~ msgstr "移動到資料夾中(_M)"
+
+#~ msgid "_Remove from Folder"
+#~ msgstr "從資料夾中移除(_R)"
+
+#~ msgid "Featured Applications"
+#~ msgstr "特色應用程式"
+
+#~ msgid "Are you sure you want to purchase %s?"
+#~ msgstr "您確定要購買 %s?"
+
+#~ msgid "%s will be installed, and you will be charged %s."
+#~ msgstr "即將安裝 %s,並且向您收取 %s。"
+
+#~ msgid "Purchase"
+#~ msgstr "購買"
+
+#~ msgid "A$%.2f"
+#~ msgstr "A$%.2f"
+
+#~ msgid "C$%.2f"
+#~ msgstr "C$%.2f"
+
+#~ msgid "CN¥%.2f"
+#~ msgstr "CN¥%.2f"
+
+#~ msgid "€%.2f"
+#~ msgstr "€%.2f"
+
+#~ msgid "£%.2f"
+#~ msgstr "£%.2f"
+
+#~ msgid "¥%.2f"
+#~ msgstr "¥%.2f"
+
+#~ msgid "NZ$%.2f"
+#~ msgstr "NZ$%.2f"
+
+#~ msgid "₽%.2f"
+#~ msgstr "₽%.2f"
+
+#~ msgid "US$%.2f"
+#~ msgstr "US$%.2f"
+
+#~ msgid "%s %f"
+#~ msgstr "%s %f"
+
+#~ msgid "Signed in as %s"
+#~ msgstr "已登入為 %s"
+
+#~ msgid "Sign in…"
+#~ msgstr "登入…"
+
+#~ msgid "Sign out"
+#~ msgstr "登出"
+
+#~ msgid "Unable to purchase %s: authentication was required"
+#~ msgstr "無法購買 %s:需要核對身份"
+
+#~ msgid "Unable to purchase %s: authentication was invalid"
+#~ msgstr "無法購買 %s:身份核對無效"
+
+#~ msgid "Unable to purchase %s: no payment method setup"
+#~ msgstr "無法購買 %s:尚未設置支付方式"
+
+#~ msgid "Unable to purchase %s: payment was declined"
+#~ msgstr "無法購買 %s:拒絕支付"
+
+#~ msgid "Unable to purchase %s"
+#~ msgstr "無法購買 %s"
+
+#~ msgid "Design the featured banners for GNOME Software"
+#~ msgstr "設計 GNOME《軟體》的特選橫幅"
+
+#~ msgid "AppStream;Software;App;"
+#~ msgstr "AppStream;Software;App;軟體;程式;"
+
+#~ msgid "Web Apps Support"
+#~ msgstr "網頁程式支援"
+
+#~ msgid "Run popular web applications in a browser"
+#~ msgstr "在瀏覽器中執行熱門的網頁應用程式"
+
+#~ msgid "To continue, you need to use an Ubuntu One account."
+#~ msgstr "若要繼續,您需要使用 Ubuntu One 帳號。"
+
+#~ msgid "To continue, you need to use your Ubuntu One account."
+#~ msgstr "若要繼續,需要登入您的 Ubuntu One 帳號。"
+
+#~ msgid "system-software-install"
+#~ msgstr "system-software-install"
+
+#~ msgid "_About"
+#~ msgstr "關於(_A)"
+
+#~ msgid "Show profiling information for the service"
+#~ msgstr "顯示該服務的評測資訊"
+
+#~ msgid "To continue you need to sign in to %s."
+#~ msgstr "若要繼續,需要您登入 %s。"
+
+#~ msgid "Email address"
+#~ msgstr "電子郵件位址"
+
+#~ msgid "I have an account already"
+#~ msgstr "我已有帳號"
+
+#~ msgid "I want to register for an account now"
+#~ msgstr "我想要立刻註冊帳號"
+
+#~ msgid "I have forgotten my password"
+#~ msgstr "我竟然忘記密碼"
+
+#~ msgid "Sign in automatically next time"
+#~ msgstr "下次自動登入"
+
+#~ msgid "Enter your one-time pin for two-factor authentication."
+#~ msgstr "請輸入雙因素身份認證的一次性 PIN 碼。"
+
+#~ msgid "PIN"
+#~ msgstr "PIN 碼"
+
+#~ msgid "Authenticate"
+#~ msgstr "核對"
+
+#~ msgid "Software catalog is being loaded"
+#~ msgstr "正在載入軟體目錄"
+
+#~ msgid ""
+#~ "Information about %s, as well as options for how to get a codec that can "
+#~ "play this format can be found on the website."
+#~ msgstr ""
+#~ "%s 的相關資訊,以及網站上提供的該如何取得可播放此格式的編解碼器之選項。"
+
+#~ msgid "Your %s account has been suspended."
+#~ msgstr "您的 %s 帳號已經停用。"
+
+#~ msgid "It is not possible to install software until this has been resolved."
+#~ msgstr "除非此問題得到解決,否則無法安裝程式。"
+
+#~ msgid "For more information, visit %s."
+#~ msgstr "若想瞭解詳細資訊,請造訪 %s。"
+
+#~ msgid "Unable to update %s from %s"
+#~ msgstr "無法安裝 %s,來源為 %s"
+
+#~ msgid "Downloading new updates…"
+#~ msgstr "下載新的更新中…"
+
+#~ msgid "org.gnome.Software"
+#~ msgstr "org.gnome.Software"
+
+#~ msgid "Downloading application page…"
+#~ msgstr "下載應用程式頁面中…"
+
+#~ msgid "Steam Support"
+#~ msgstr "Steam 支援"
+
+#~ msgid "The ultimate entertainment platform from Valve"
+#~ msgstr "Valve 提供的終極娛樂平臺"
+
+#~ msgid "_Quit"
+#~ msgstr "退出(_Q)"
+
+#~ msgid "Applications Updated"
+#~ msgstr "已更新應用程式"
+
+#~ msgid "Includes: ."
+#~ msgstr "包含:."
+
+#~ msgid "_Restart & Update"
+#~ msgstr "重新啟動並更新(_R)"
+
+#~ msgid "U_pdate All"
+#~ msgstr "全部更新(_P)"
+
+#~ msgid "Restart & _Install"
+#~ msgstr "重新啟動並安裝(_I)"
+
+#~ msgid "Getting runtime source…"
+#~ msgstr "取得執行時期來源中…"
+
+#~ msgid "Downloading firmware update…"
+#~ msgstr "下載韌體更新中…"
+
+#~ msgid "Limba Support"
+#~ msgstr "Limba 支援"
+
+#~ msgid "Limba provides developers a way to easily create software bundles"
+#~ msgstr "Limba 為開發人員提供了一個輕鬆建立軟體捆綁的方法"
+
+#~ msgid "The list of extra sources that have been previously enabled"
+#~ msgstr "之前已啟用過的額外來源列表"
+
+#~ msgid ""
+#~ "The list of sources that have been previously enabled when installing "
+#~ "third-party applications."
+#~ msgstr "之前在安裝第三方應用程式時啟用過的來源列表。"
+
+#~ msgid "Show non-free software in search results"
+#~ msgstr "在搜尋結果中顯示非自由軟體"
+
+#~ msgid "A list of non-free sources that can be optionally enabled"
+#~ msgstr "可選擇性啟用的非自由軟體來源清單"
+
+#~ msgid "Sorted by Name"
+#~ msgstr "依名稱排序"
+
+#~ msgid "Sorted by Rating"
+#~ msgstr "依評等排序"
+
+#~ msgid ""
+#~ "Provides access to additional software, including web browsers and games."
+#~ msgstr "提供額外軟體,包含一些網頁瀏覽器和遊戲。"
+
+#~ msgid "Enable Proprietary Software Sources?"
+#~ msgstr "啟用專有軟體來源?"
+
+#~ msgid "No applications or addons installed; other software might still be"
+#~ msgstr "沒有安裝應用程式或附加程式;可能還有其他軟體"
+
+#~ msgid "Typically has restrictions on use and access to source code."
+#~ msgstr "一般會限制軟體的使用用途、並限制其源始碼的存取。"
+
+#~ msgid "Proprietary Software Sources"
+#~ msgstr "專有軟體來源"
+
+#~ msgid ""
+#~ "Software sources can be downloaded from the internet. They give you "
+#~ "access to additional software that is not provided by %s."
+#~ msgstr "軟體來源可以從網際網路下載。它們讓您存取更多 %s 沒有提供的軟體。"
+
+#~ msgid ""
+#~ "Removing a source will also remove any software you have installed from "
+#~ "it."
+#~ msgstr "移除來源也會移除您先前從該來源安裝過的任何軟體。"
+
+#~ msgid "No software installed from this source"
+#~ msgstr "沒有從此來源安裝的軟體"
+
+#~ msgid "Installed from this Source"
+#~ msgstr "從此來源安裝的軟體"
+
+#~ msgid "Source Details"
+#~ msgstr "來源細節"
+
+#~ msgid "Last Checked"
+#~ msgstr "上次檢查"
+
+#~ msgid "Added"
+#~ msgstr "加入時間"
+
+#~ msgid "Website"
+#~ msgstr "網站"
+
+#~ msgid "Player-to-player preset interactions without chat functionality"
+#~ msgstr "玩家與玩家間預先設置性互動,不含聊天功能"
+
+#~ msgid "Sharing user information with 3rd parties"
+#~ msgstr "和第三方團體或單位分享使用者資訊"
+
+#~ msgid "Remove Source"
+#~ msgstr "移除來源"
+
+#~ msgid "page1"
+#~ msgstr "page1"
+
+#~ msgid "page2"
+#~ msgstr "page2"
+
+#~ msgid "“%s” [%s]"
+#~ msgstr "「%s」[%s]"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of AudioVideo"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Development"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Education and Science"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Graphics"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Office"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Communication"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Utility"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgid "Other Updates"
+#~ msgstr "其他更新"
+
+#~ msgid "Total"
+#~ msgstr "合計"
+
+#~ msgid "_Install All"
+#~ msgstr "全部安裝(_I)"
+
+#~ msgid "Installation of %s failed."
+#~ msgstr "%s 安裝失敗。"
+
+#~ msgid "Removal of %s failed."
+#~ msgstr "%s 移除失敗。"
+
+#~ msgid "Please make sure that you have internet access and try again."
+#~ msgstr "請確定您能使用網際網路後再試一次。"
+
+#~ msgid "Please free up some space and try again."
+#~ msgstr "請挪出部分空間後再試一次。"
+
+#~ msgid "If the problem persists, contact your software provider."
+#~ msgstr "如果問題持續發生,請聯絡您的軟體供應商。"
+
+#~ msgctxt "content rating violence-cartoon"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating violence-fantasy"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating violence-realistic"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating violence-bloodshed"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating violence-sexual"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating drugs-alcohol"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating drugs-narcotics"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating sex-nudity"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating sex-themes"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating language-profanity"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating language-humor"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating language-discrimination"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating money-advertising"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating money-gambling"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating money-purchasing"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating social-chat"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating social-audio"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating social-contacts"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating social-info"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "content rating social-location"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Education"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "All"
+#~ msgstr "全部"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Featured"
+#~ msgstr "特選"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Astronomy"
+#~ msgstr "天文"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Chemistry"
+#~ msgstr "化學"
+
+#~ msgctxt "Menu of Science"
+#~ msgid "Math"
+#~ msgstr "數學"
+
+#~ msgid "Science"
+#~ msgstr "科學"
+
+#~ msgid "Software sources give you access to additional software."
+#~ msgstr "軟體來源讓您存取更多軟體。"
+
+#~ msgid " or "
+#~ msgstr " or "
+
+#~ msgid "3rd party"
+#~ msgstr "第三方協力廠商"
+
+#~ msgid "web app"
+#~ msgstr "網頁應用程式"
+
+#~ msgid "nonfree"
+#~ msgstr "非自由"
+
+#~ msgid "shell extension"
+#~ msgstr "shell 擴充套件"
+
+#~ msgid "_Installing"
+#~ msgstr "安裝中(_I)"
+
+#~ msgid "_Removing"
+#~ msgstr "移除中(_R)"
+
+#~ msgctxt "license"
+#~ msgid "Unknown"
+#~ msgstr "不明"
+
+#~ msgctxt "menu category"
+#~ msgid "None"
+#~ msgstr "無"
+
+#~ msgid "This software comes from a 3rd party."
+#~ msgstr "這個軟體是來自第三方協力廠商。"
+
+#~ msgid ""
+#~ "This software comes from a 3rd party and may contain non-free components."
+#~ msgstr "這個軟體來自第三方協力廠商,並可能包含非自由的元件。"
+
+#~ msgid "This software may contain non-free components."
+#~ msgstr "這個軟體可能包含非自由的元件。"
+
+#~ msgid "non-free"
+#~ msgstr "非自由"
+
+#~ msgid "Recommended Office Applications"
+#~ msgstr "推薦的辦公應用程式"
+
+#~ msgid "One Star"
+#~ msgstr "一顆星"
+
+#~ msgid "Two Stars"
+#~ msgstr "兩顆星"
+
+#~ msgid "Three Stars"
+#~ msgstr "三顆星"
+
+#~ msgid "Four Stars"
+#~ msgstr "四顆星"
+
+#~ msgid "Five Stars"
+#~ msgstr "五顆星"
+
+#~ msgid "Audio"
+#~ msgstr "音訊"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Editing"
+#~ msgstr "編輯"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Databases"
+#~ msgstr "資料庫"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Disc Burning"
+#~ msgstr "碟片燒錄"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Ham Radio"
+#~ msgstr "自製無線電"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "MIDI"
+#~ msgstr "MIDI"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Mixer"
+#~ msgstr "混音器"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Music"
+#~ msgstr "音樂"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Recorders"
+#~ msgstr "錄製器"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Sequencers"
+#~ msgstr "序段編輯器"
+
+#~ msgctxt "Menu subcategory of Audio"
+#~ msgid "Tuners"
+#~ msgstr "調諧器"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Building"
+#~ msgstr "建置"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Databases"
+#~ msgstr "資料庫"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Profiling"
+#~ msgstr "效能評測"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Project Management"
+#~ msgstr "專案管理"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Translation"
+#~ msgstr "翻譯"
+
+#~ msgctxt "Menu subcategory of Development Tools"
+#~ msgid "Web Development"
+#~ msgstr "網頁開發"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Biology"
+#~ msgstr "生物"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Computer Science"
+#~ msgstr "電腦科學"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Construction"
+#~ msgstr "建築"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Data Visualization"
+#~ msgstr "資料示現"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Economy"
+#~ msgstr "經濟"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electricity"
+#~ msgstr "電學"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Electronics"
+#~ msgstr "電子學"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Engineering"
+#~ msgstr "工程"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geology"
+#~ msgstr "地質"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Geoscience"
+#~ msgstr "地球科學"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "History"
+#~ msgstr "歷史"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Humanities"
+#~ msgstr "人文"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Image Processing"
+#~ msgstr "影像處理"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Literature"
+#~ msgstr "文學"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Maps"
+#~ msgstr "地圖"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Music"
+#~ msgstr "音樂"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Numerical Analysis"
+#~ msgstr "數值分析"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Parallel Computing"
+#~ msgstr "平行計算"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Physics"
+#~ msgstr "物理"
+
+#~ msgctxt "Menu subcategory of Education"
+#~ msgid "Spirituality"
+#~ msgstr "靈性"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Shooter"
+#~ msgstr "射擊"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Simulation"
+#~ msgstr "模擬"
+
+#~ msgctxt "Menu subcategory of Games"
+#~ msgid "Sports"
+#~ msgstr "運動"
+
+#~ msgid "Graphics"
+#~ msgstr "美工繪圖"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "2D Graphics"
+#~ msgstr "2D 圖形"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "OCR"
+#~ msgstr "OCR"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Publishing"
+#~ msgstr "出版"
+
+#~ msgctxt "Menu subcategory of Graphics"
+#~ msgid "Raster Graphics"
+#~ msgstr "光柵圖形"
+
+#~ msgid "Internet"
+#~ msgstr "網際網路"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Dialup"
+#~ msgstr "撥接"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Email"
+#~ msgstr "電子郵件"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Feed"
+#~ msgstr "消息來源"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "File Transfer"
+#~ msgstr "檔案傳輸"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Ham Radio"
+#~ msgstr "自製無線電"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Instant Messaging"
+#~ msgstr "即時通訊"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "IRC Clients"
+#~ msgstr "IRC 客戶端"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Monitor"
+#~ msgstr "顯示器"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "P2P"
+#~ msgstr "P2P"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Remote Access"
+#~ msgstr "遠端存取"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Telephony"
+#~ msgstr "電話學"
+
+#~ msgctxt "Menu subcategory of Internet"
+#~ msgid "Web Development"
+#~ msgstr "網頁開發"
+
+#~ msgid "Office"
+#~ msgstr "辦公"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Chart"
+#~ msgstr "圖表"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Contact Management"
+#~ msgstr "聯絡人管理"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Dictionary"
+#~ msgstr "字典"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Email"
+#~ msgstr "電子郵件"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Flow Chart"
+#~ msgstr "流程圖"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "PDA"
+#~ msgstr "PDA"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Photography"
+#~ msgstr "攝影"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Presentation"
+#~ msgstr "簡報"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Project Management"
+#~ msgstr "專案管理"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Publishing"
+#~ msgstr "出版"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Spreadsheet"
+#~ msgstr "試算表"
+
+#~ msgctxt "Menu subcategory of Office"
+#~ msgid "Viewer"
+#~ msgstr "檢視器"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Art"
+#~ msgstr "藝術"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Artificial Intelligence"
+#~ msgstr "人工智慧"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Astronomy"
+#~ msgstr "天文"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Biology"
+#~ msgstr "生物"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Chemistry"
+#~ msgstr "化學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Computer Science"
+#~ msgstr "電腦科學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Construction"
+#~ msgstr "建築"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Data Visualization"
+#~ msgstr "資料示現"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Economy"
+#~ msgstr "經濟"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electricity"
+#~ msgstr "電學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Electronics"
+#~ msgstr "電子學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Engineering"
+#~ msgstr "工程"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geography"
+#~ msgstr "地理"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geology"
+#~ msgstr "地質學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Geoscience"
+#~ msgstr "地球科學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "History"
+#~ msgstr "歷史"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Humanities"
+#~ msgstr "人文"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Image Processing"
+#~ msgstr "影像處理"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Languages"
+#~ msgstr "語言"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Literature"
+#~ msgstr "文學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Maps"
+#~ msgstr "地圖"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Math"
+#~ msgstr "數學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Medical"
+#~ msgstr "醫學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Numerical Analysis"
+#~ msgstr "數值分析"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Parallel Computing"
+#~ msgstr "平行計算"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Physics"
+#~ msgstr "物理"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Robotics"
+#~ msgstr "機器人學"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Spirituality"
+#~ msgstr "靈性"
+
+#~ msgctxt "Menu subcategory of Science"
+#~ msgid "Sports"
+#~ msgstr "運動"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Emulator"
+#~ msgstr "模擬器"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Manager"
+#~ msgstr "檔案管理器"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "File Tools"
+#~ msgstr "檔案工具"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Monitor"
+#~ msgstr "監控"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Security"
+#~ msgstr "安全"
+
+#~ msgctxt "Menu subcategory of System"
+#~ msgid "Terminal Emulator"
+#~ msgstr "終端機模擬器"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Accessibility"
+#~ msgstr "無障礙環境"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Archiving"
+#~ msgstr "檔案封存"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Calculator"
+#~ msgstr "計算機"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Clock"
+#~ msgstr "時鐘"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Compression"
+#~ msgstr "壓縮"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "File Tools"
+#~ msgstr "檔案工具"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Maps"
+#~ msgstr "地圖"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Spirituality"
+#~ msgstr "靈性"
+
+#~ msgctxt "Menu subcategory of Utilities"
+#~ msgid "Telephony Tools"
+#~ msgstr "電話工具"
+
+#~ msgid "Video"
+#~ msgstr "視訊"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Editing"
+#~ msgstr "編輯"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Database"
+#~ msgstr "資料庫"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Disc Burning"
+#~ msgstr "碟片燒錄"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Players"
+#~ msgstr "播放器"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "Recorders"
+#~ msgstr "錄製器"
+
+#~ msgctxt "Menu subcategory of Video"
+#~ msgid "TV"
+#~ msgstr "電視"
+
+#~ msgctxt "size"
+#~ msgid "Calculating…"
+#~ msgstr "計算中…"
+
+#~ msgctxt "size"
+#~ msgid "Unknown"
+#~ msgstr "不明"
+
+#~ msgid "_History"
+#~ msgstr "歷史(_H)"
+
+#~ msgid "Size"
+#~ msgstr "大小"
+
+#~ msgid "No AppStream data found"
+#~ msgstr "找不到 AppStream 資料"
+
+#~ msgid "Enter GApplication service mode"
+#~ msgstr "請輸入 GApplication 服務模式"
+
+#~ msgid "A previous update was unfinished."
+#~ msgstr "上個更新尚未完成。"
+
+#~ msgid ""
+#~ "The update couldn’t be installed; this is often a problem with the update "
+#~ "itself. Please wait for another update and try again."
+#~ msgstr ""
+#~ "這個更新無法安裝;這通常是更新檔本身的問題。請等待下一次更新時再試一次。"
+
+#~ msgid "Internet Only Application"
+#~ msgstr "唯網際網路應用程式"
+
+#~ msgid "An update was not signed in the correct way."
+#~ msgstr "有項更新的簽署方式不正確。"
+
+#~ msgid "The update could not be completed."
+#~ msgstr "無法完成更新。"
+
+#~ msgid "An offline update was requested but no packages required updating."
+#~ msgstr "已請求離線更新,但沒有軟體包需要更新。"
+
+#~ msgid "No space was left on the drive."
+#~ msgstr "裝置剩餘空間不足。"
+
+#~ msgid "An update failed to install correctly."
+#~ msgstr "無法正確安裝更新。"
+
+#~ msgid "The offline update failed in an unexpected way."
+#~ msgstr "離線更新以不如預期的方式失敗。"
+
+#~ msgid "No sources found."
+#~ msgstr "找不到來源。"
+
+#~ msgid "OK"
+#~ msgstr "確定"
+
+#~ msgid "Set the specified debugging level"
+#~ msgstr "設定指定的除錯等級"
+
+#~ msgid "Picks"
+#~ msgstr "精選"
+
+#~ msgid "January 30, 2014"
+#~ msgstr "2014年1月30日"
+
+#~ msgid "_Pending"
+#~ msgstr "擱置中(_P)"
+
+#~ msgid "Complicated!"
+#~ msgstr "超複雜!"
+
+#~ msgid "Recent Software Updates"
+#~ msgstr "最近軟體更新"
+
+#~ msgctxt "Menu subcategory of Development"
+#~ msgid "Databases"
+#~ msgstr "資料庫"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Ham Radio"
+#~ msgstr "自製無線電"
+
+#~ msgctxt "Menu subcategory of Network"
+#~ msgid "Web Development"
+#~ msgstr "網頁開發"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "File Tools"
+#~ msgstr "檔案工具"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Maps"
+#~ msgstr "地圖"
+
+#~ msgctxt "Menu subcategory of Utility"
+#~ msgid "Spirituality"
+#~ msgstr "心靈"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Fonts"
+#~ msgstr "字型"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Codecs"
+#~ msgstr "編解碼器"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Input Sources"
+#~ msgstr "輸入來源"
+
+#~ msgctxt "Menu subcategory of Addons"
+#~ msgid "Language Packs"
+#~ msgstr "語言包"
+
+#~ msgid "Done"
+#~ msgstr "完成"
+
+#~ msgid ""
+#~ "Add or remove folders. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr "新增或移除資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for %s. Your application folders can be found in the "
+#~ "Activities Overview."
+#~ msgstr "為 %s 選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for %s and %s. Your application folders can be found in "
+#~ "the Activities Overview."
+#~ msgstr "為 %s 與 %s 選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for %s, %s and %s. Your application folders can be found "
+#~ "in the Activities Overview."
+#~ msgstr ""
+#~ "為 %s、%s 與 %s 選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid ""
+#~ "Choose a folder for the selected applications. Your application folders "
+#~ "can be found in the Activities Overview."
+#~ msgstr ""
+#~ "為選取的應用程式選個資料夾。您可以在「概覽」畫面中找到應用程式資料夾。"
+
+#~ msgid "Software has the following goals:"
+#~ msgstr "軟體有下列目標:"
+
+#~ msgid "View installed applications"
+#~ msgstr "檢視安裝的應用程式"
+
+#~ msgid "View available application updates"
+#~ msgstr "檢視可用的應用程式更新"
+
+#~ msgid "Install available updates"
+#~ msgstr "安裝可用的更新"
+
+#~ msgid "Find an application to handle a specific type of file"
+#~ msgstr "尋找應用程式以處理特定類型的檔案"
+
+#~ msgid "Installed apps and updates should be available when offline"
+#~ msgstr "已安裝的程式與更新應該可在離線時使用"
+
+#~ msgid "_Installed (%d)"
+#~ msgstr "已安裝 (%d)(_I)"
+
+#~ msgid "_Updates (%d)"
+#~ msgstr "更新 (%d)(_U)"
diff --git a/src/gnome-software-local-file.desktop.in b/src/gnome-software-local-file.desktop.in
new file mode 100644
index 0000000..1c4cb0f
--- /dev/null
+++ b/src/gnome-software-local-file.desktop.in
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Name=Software Install
+Comment=Install selected software on the system
+Categories=System;
+Exec=gnome-software --local-filename %f
+Terminal=false
+Type=Application
+# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+Icon=system-software-install
+StartupNotify=true
+NoDisplay=true
+MimeType=application/x-rpm;application/x-redhat-package-manager;application/x-deb;application/x-app-package;application/vnd.ms-cab-compressed;application/vnd.flatpak;application/vnd.flatpak.repo;application/vnd.flatpak.ref;application/vnd.snap;
diff --git a/src/gnome-software-service.desktop.in b/src/gnome-software-service.desktop.in
new file mode 100644
index 0000000..dc4d4d9
--- /dev/null
+++ b/src/gnome-software-service.desktop.in
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=GNOME Software
+Exec=@bindir@/gnome-software --gapplication-service
+OnlyShowIn=GNOME;Unity;
+NoDisplay=true
diff --git a/src/gnome-software.gresource.xml b/src/gnome-software.gresource.xml
new file mode 100644
index 0000000..459ecf8
--- /dev/null
+++ b/src/gnome-software.gresource.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/Software">
+ <file preprocess="xml-stripblanks">gnome-software.ui</file>
+ <file preprocess="xml-stripblanks">gs-app-addon-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-app-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-basic-auth-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-category-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-category-tile.ui</file>
+ <file preprocess="xml-stripblanks">gs-details-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-extras-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-feature-tile.ui</file>
+ <file preprocess="xml-stripblanks">gs-first-run-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-history-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-info-bar.ui</file>
+ <file preprocess="xml-stripblanks">gs-installed-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-loading-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-metered-data-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-moderate-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-overview-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-origin-popover-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-popular-tile.ui</file>
+ <file preprocess="xml-stripblanks">gs-prefs-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-removal-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-repo-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-repos-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-review-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-review-histogram.ui</file>
+ <file preprocess="xml-stripblanks">gs-review-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-screenshot-image.ui</file>
+ <file preprocess="xml-stripblanks">gs-search-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-star-widget.ui</file>
+ <file preprocess="xml-stripblanks">gs-summary-tile.ui</file>
+ <file preprocess="xml-stripblanks">gs-third-party-repo-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-update-dialog.ui</file>
+ <file preprocess="xml-stripblanks">gs-updates-page.ui</file>
+ <file preprocess="xml-stripblanks">gs-upgrade-banner.ui</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.PackageKit.xml</file>
+ <file>gtk-style.css</file>
+ <file>gtk-style-hc.css</file>
+ </gresource>
+</gresources>
diff --git a/src/gnome-software.ui b/src/gnome-software.ui
new file mode 100644
index 0000000..0811b61
--- /dev/null
+++ b/src/gnome-software.ui
@@ -0,0 +1,602 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.15.2 on Thu Aug 15 17:13:59 2013 -->
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <object class="GtkMenu" id="header_selection_menu">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkMenuItem" id="select_all_menuitem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Select All</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="select_none_menuitem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Select None</property>
+ </object>
+ </child>
+ </object>
+ <object class="GtkPopoverMenu" id="account_popover">
+ <property name="visible">False</property>
+ <child>
+ <object class="GtkBox" id="account_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <menu id="primary_menu">
+ <item>
+ <attribute name="label" translatable="yes">_Software Repositories</attribute>
+ <attribute name="action">app.sources</attribute>
+ <attribute name="hidden-when">action-disabled</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">_Update Preferences</attribute>
+ <attribute name="action">app.prefs</attribute>
+ </item>
+ </menu>
+ <object class="GtkApplicationWindow" id="window_software">
+ <property name="visible">False</property>
+ <property name="default-width">1200</property>
+ <property name="default-height">800</property>
+ <property name="title" translatable="yes">Software</property>
+ <property name="icon_name">org.gnome.Software</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar" id="header">
+ <property name="visible">True</property>
+ <property name="show_close_button">True</property>
+ <child>
+ <object class="GtkButton" id="button_back">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button_back_accessible">
+ <property name="accessible-name" translatable="yes">Go back</property>
+ </object>
+ </child>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="back_image">
+ <property name="visible">True</property>
+ <property name="icon_name">go-previous-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="title">
+ <object class="GtkBox" id="title_box">
+ <property name="visible">True</property>
+ <property name="hexpand">False</property>
+ <child>
+ <object class="GtkButtonBox" id="buttonbox_main">
+ <property name="visible">True</property>
+ <property name="layout_style">center</property>
+ <style>
+ <class name="linked"/>
+ </style>
+ <child>
+ <object class="GtkToggleButton" id="button_explore">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators: A label for a button to show all available software.">_Explore</property>
+ <style>
+ <class name="toolbar-primary-buttons-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="button_installed">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <object class="GtkBox" id="button_installed_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">fill</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="button_installed_label">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="halign">center</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes" comments="Translators: A label for a button to show only software which is already installed.">_Installed</property>
+ <property name="mnemonic_widget">button_installed</property>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="button_installed_counter">
+ <property name="visible">False</property>
+ <property name="width-chars">2</property>
+ <style>
+ <class name="counter-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <style>
+ <class name="toolbar-primary-buttons-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="button_updates">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <object class="GtkBox" id="button_updates_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">fill</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="button_updates_label">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="halign">center</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes" comments="Translators: A label for a button to show only updates which are available to install.">_Updates</property>
+ <property name="mnemonic_widget">button_updates</property>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="button_updates_counter">
+ <property name="visible">False</property>
+ <property name="width-chars">2</property>
+ <style>
+ <class name="counter-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <style>
+ <class name="toolbar-primary-buttons-software"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="application_details_header">
+ <property name="visible">False</property>
+ <property name="selectable">False</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="header_selection_menu_button">
+ <property name="visible">False</property>
+ <property name="popup">header_selection_menu</property>
+ <style>
+ <class name="selection-menu"/>
+ </style>
+ <child>
+ <object class="GtkBox" id="header_selection_box">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="header_selection_label">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkArrow" id="header_selection_arrow">
+ <property name="visible">True</property>
+ <property name="arrow_type">down</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="search_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="search_button_accessible">
+ <property name="accessible-name" translatable="yes">Search</property>
+ </object>
+ </child>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="search_image">
+ <property name="visible">True</property>
+ <property name="icon_name">edit-find-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="menu_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="sensitive">True</property>
+ <property name="menu_model">primary_menu</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon_name">open-menu-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="origin_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">fill</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes" comments="Translators: This is a label in the header bar, followed by a drop down to choose between different source repos">Source</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">1</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="origin_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="sensitive">True</property>
+ <property name="popover">origin_popover</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="column-spacing">12</property>
+ <property name="visible">1</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <child>
+ <object class="GtkLabel" id="origin_button_label">
+ <property name="label"></property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">1</property>
+ <property name="xalign">0</property>
+ <property name="width_chars">10</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">pan-down-symbolic</property>
+ <property name="pixel-size">16</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSearchBar" id="search_bar">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSearchEntry" id="entry_search">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ <property name="width_request">500</property>
+ <property name="max_length">100</property>
+ <property name="hexpand">True</property>
+ <property name="halign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkOverlay" id="overlay">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="vexpand">True</property>
+ <child type="overlay">
+ <object class="GtkRevealer" id="notification_event">
+ <property name="visible">True</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ <property name="valign">GTK_ALIGN_START</property>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="app-notification"/>
+ </style>
+ <child>
+ <object class="GtkLabel" id="label_events">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label">Some Title</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="max_width_chars">60</property>
+ <property name="margin_start">9</property>
+ <property name="margin_end">9</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButtonBox">
+ <property name="layout_style">end</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="button_events_sources">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Software Repositories</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_no_space">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Examine Disk</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_network_settings">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Network Settings</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_restart_required">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Restart Now</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_more_info">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">More Information</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_dismiss">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="flat"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon_name">window-close-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+
+ <child>
+ <object class="GtkInfoBar" id="metered_updates_bar">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <property name="message-type">GTK_MESSAGE_INFO</property>
+ <property name="show-close-button">False</property>
+ <property name="revealed">False</property>
+ <child internal-child="content_area">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="margin_top">6</property>
+ <property name="margin_left">6</property>
+ <property name="margin_bottom">6</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Automatic Updates Paused</property>
+ <property name="xalign">0.0</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="visible">True</property>
+ <property name="margin_right">6</property>
+ <child>
+ <object class="GtkButton" id="metered_updates_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">Find Out _More</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="GTK_RESPONSE_OK">metered_updates_button</action-widget>
+ </action-widgets>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStack" id="stack_main">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <child>
+ <object class="GsOverviewPage" id="overview_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">overview</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsInstalledPage" id="installed_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">installed</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsModeratePage" id="moderate_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">moderate</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsLoadingPage" id="loading_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">loading</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsSearchPage" id="search_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">search</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsUpdatesPage" id="updates_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">updates</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GsDetailsPage" id="details_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">details</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GsCategoryPage" id="category_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">category</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsExtrasPage" id="extras_page">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">extras</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkPopover" id="origin_popover">
+ <property name="visible">False</property>
+ <child>
+ <object class="GtkBox" id="origin_popover_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="propagate-natural-height">true</property>
+ <property name="propagate-natural-width">true</property>
+ <property name="max-content-height">600</property>
+ <property name="visible">true</property>
+ <child>
+ <object class="GtkListBox" id="origin_popover_list_box">
+ <property name="selection-mode">none</property>
+ <property name="visible">true</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/src/gnome-software.xml b/src/gnome-software.xml
new file mode 100644
index 0000000..5f87829
--- /dev/null
+++ b/src/gnome-software.xml
@@ -0,0 +1,74 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<refentry id="gnome-software">
+
+ <refentryinfo>
+ <title>gnome-software</title>
+ <productname>GNOME</productname>
+ <author>
+ <contrib>Maintainer</contrib>
+ <firstname>Richard</firstname>
+ <surname>Hughes</surname>
+ <email>richard@hughsie.com</email>
+ </author>
+ <copyright>
+ <year>2013</year>
+ <holder>Richard Hughes</holder>
+ </copyright>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>gnome-software</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">User Commands</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>gnome-software</refname>
+ <refpurpose>Install applications</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>gnome-software</command>
+ <arg choice="opt" rep="repeat">OPTION</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+ <para>
+ This manual page documents briefly the <command>gnome-software</command> command.
+ </para>
+ <para>
+ <command>gnome-software</command> allows you to add and remove
+ applications and update your system.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+ <variablelist>
+ <varlistentry>
+ <term><option>-?</option>, <option>--help</option></term>
+ <listitem><para>Prints a short help text and exits.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--version</option></term>
+ <listitem><para>Prints the program version and exits.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--mode</option> <replaceable>MODE</replaceable></term>
+ <listitem><para>Starts gnome-software in the given mode. <replaceable>MODE</replaceable> can be 'updates', 'updated', 'installed' or 'overview'. The default mode is 'overview'.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Author</title>
+ <para>This manual page was written by Richard Hughes <email>richard@hughsie.com</email>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/src/gs-app-addon-row.c b/src/gs-app-addon-row.c
new file mode 100644
index 0000000..30fb4d6
--- /dev/null
+++ b/src/gs-app-addon-row.c
@@ -0,0 +1,273 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-app-addon-row.h"
+
+struct _GsAppAddonRow
+{
+ GtkListBoxRow parent_instance;
+
+ GsApp *app;
+ GtkWidget *name_label;
+ GtkWidget *description_label;
+ GtkWidget *label;
+ GtkWidget *checkbox;
+};
+
+G_DEFINE_TYPE (GsAppAddonRow, gs_app_addon_row, GTK_TYPE_LIST_BOX_ROW)
+
+enum {
+ PROP_ZERO,
+ PROP_SELECTED
+};
+
+static void
+checkbox_toggled (GtkWidget *widget, GsAppAddonRow *row)
+{
+ g_object_notify (G_OBJECT (row), "selected");
+}
+
+/**
+ * gs_app_addon_row_get_summary:
+ *
+ * Return value: PangoMarkup
+ **/
+static GString *
+gs_app_addon_row_get_summary (GsAppAddonRow *row)
+{
+ const gchar *tmp = NULL;
+ g_autofree gchar *escaped = NULL;
+
+ /* try all these things in order */
+ if (gs_app_get_state (row->app) == AS_APP_STATE_UNAVAILABLE)
+ tmp = gs_app_get_summary_missing (row->app);
+ if (tmp == NULL || (tmp != NULL && tmp[0] == '\0'))
+ tmp = gs_app_get_summary (row->app);
+ if (tmp == NULL || (tmp != NULL && tmp[0] == '\0'))
+ tmp = gs_app_get_description (row->app);
+
+ escaped = g_markup_escape_text (tmp, -1);
+ return g_string_new (escaped);
+}
+
+void
+gs_app_addon_row_refresh (GsAppAddonRow *row)
+{
+ g_autoptr(GString) str = NULL;
+
+ if (row->app == NULL)
+ return;
+
+ /* join the lines */
+ str = gs_app_addon_row_get_summary (row);
+ as_utils_string_replace (str, "\n", " ");
+ gtk_label_set_markup (GTK_LABEL (row->description_label), str->str);
+ gtk_label_set_label (GTK_LABEL (row->name_label),
+ gs_app_get_name (row->app));
+
+ /* update the state label */
+ switch (gs_app_get_state (row->app)) {
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_visible (row->label, TRUE);
+ gtk_label_set_label (GTK_LABEL (row->label), _("Pending"));
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ case AS_APP_STATE_INSTALLED:
+ gtk_widget_set_visible (row->label, TRUE);
+ gtk_label_set_label (GTK_LABEL (row->label), _("Installed"));
+ break;
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (row->label, TRUE);
+ gtk_label_set_label (GTK_LABEL (row->label), _("Installing"));
+ break;
+ case AS_APP_STATE_REMOVING:
+ gtk_widget_set_visible (row->label, TRUE);
+ gtk_label_set_label (GTK_LABEL (row->label), _("Removing"));
+ break;
+ default:
+ gtk_widget_set_visible (row->label, FALSE);
+ break;
+ }
+
+ /* update the checkbox */
+ g_signal_handlers_block_by_func (row->checkbox, checkbox_toggled, row);
+ switch (gs_app_get_state (row->app)) {
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_sensitive (row->checkbox, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), TRUE);
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ gtk_widget_set_sensitive (row->checkbox, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), FALSE);
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_INSTALLED:
+ gtk_widget_set_sensitive (row->checkbox, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), TRUE);
+ break;
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_sensitive (row->checkbox, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), TRUE);
+ break;
+ case AS_APP_STATE_REMOVING:
+ gtk_widget_set_sensitive (row->checkbox, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), FALSE);
+ break;
+ default:
+ gtk_widget_set_sensitive (row->checkbox, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), FALSE);
+ break;
+ }
+ g_signal_handlers_unblock_by_func (row->checkbox, checkbox_toggled, row);
+}
+
+GsApp *
+gs_app_addon_row_get_addon (GsAppAddonRow *row)
+{
+ g_return_val_if_fail (GS_IS_APP_ADDON_ROW (row), NULL);
+ return row->app;
+}
+
+static gboolean
+gs_app_addon_row_refresh_idle (gpointer user_data)
+{
+ GsAppAddonRow *row = GS_APP_ADDON_ROW (user_data);
+
+ gs_app_addon_row_refresh (row);
+
+ g_object_unref (row);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_app_addon_row_notify_props_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsAppAddonRow *row)
+{
+ g_idle_add (gs_app_addon_row_refresh_idle, g_object_ref (row));
+}
+
+static void
+gs_app_addon_row_set_addon (GsAppAddonRow *row, GsApp *app)
+{
+ row->app = g_object_ref (app);
+
+ g_signal_connect_object (row->app, "notify::state",
+ G_CALLBACK (gs_app_addon_row_notify_props_changed_cb),
+ row, 0);
+ gs_app_addon_row_refresh (row);
+}
+
+static void
+gs_app_addon_row_destroy (GtkWidget *object)
+{
+ GsAppAddonRow *row = GS_APP_ADDON_ROW (object);
+
+ if (row->app)
+ g_signal_handlers_disconnect_by_func (row->app, gs_app_addon_row_notify_props_changed_cb, row);
+
+ g_clear_object (&row->app);
+
+ GTK_WIDGET_CLASS (gs_app_addon_row_parent_class)->destroy (object);
+}
+
+static void
+gs_app_addon_row_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ GsAppAddonRow *row = GS_APP_ADDON_ROW (object);
+
+ switch (prop_id) {
+ case PROP_SELECTED:
+ gs_app_addon_row_set_selected (row, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_addon_row_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GsAppAddonRow *row = GS_APP_ADDON_ROW (object);
+
+ switch (prop_id) {
+ case PROP_SELECTED:
+ g_value_set_boolean (value, gs_app_addon_row_get_selected (row));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_addon_row_class_init (GsAppAddonRowClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->set_property = gs_app_addon_row_set_property;
+ object_class->get_property = gs_app_addon_row_get_property;
+
+ widget_class->destroy = gs_app_addon_row_destroy;
+
+ pspec = g_param_spec_boolean ("selected", NULL, NULL,
+ FALSE, G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_SELECTED, pspec);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-app-addon-row.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsAppAddonRow, name_label);
+ gtk_widget_class_bind_template_child (widget_class, GsAppAddonRow, description_label);
+ gtk_widget_class_bind_template_child (widget_class, GsAppAddonRow, label);
+ gtk_widget_class_bind_template_child (widget_class, GsAppAddonRow, checkbox);
+}
+
+static void
+gs_app_addon_row_init (GsAppAddonRow *row)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (row), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (row));
+
+ g_signal_connect (row->checkbox, "toggled",
+ G_CALLBACK (checkbox_toggled), row);
+}
+
+void
+gs_app_addon_row_set_selected (GsAppAddonRow *row, gboolean selected)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), selected);
+}
+
+gboolean
+gs_app_addon_row_get_selected (GsAppAddonRow *row)
+{
+ return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (row->checkbox));
+}
+
+GtkWidget *
+gs_app_addon_row_new (GsApp *app)
+{
+ GtkWidget *row;
+
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+
+ row = g_object_new (GS_TYPE_APP_ADDON_ROW, NULL);
+ gs_app_addon_row_set_addon (GS_APP_ADDON_ROW (row), app);
+ return row;
+}
diff --git a/src/gs-app-addon-row.h b/src/gs-app-addon-row.h
new file mode 100644
index 0000000..257ef86
--- /dev/null
+++ b/src/gs-app-addon-row.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_APP_ADDON_ROW (gs_app_addon_row_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsAppAddonRow, gs_app_addon_row, GS, APP_ADDON_ROW, GtkListBoxRow)
+
+GtkWidget *gs_app_addon_row_new (GsApp *app);
+void gs_app_addon_row_refresh (GsAppAddonRow *row);
+void gs_app_addon_row_set_selected (GsAppAddonRow *row,
+ gboolean selected);
+gboolean gs_app_addon_row_get_selected (GsAppAddonRow *row);
+GsApp *gs_app_addon_row_get_addon (GsAppAddonRow *row);
+
+G_END_DECLS
diff --git a/src/gs-app-addon-row.ui b/src/gs-app-addon-row.ui
new file mode 100644
index 0000000..471d373
--- /dev/null
+++ b/src/gs-app-addon-row.ui
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsAppAddonRow" parent="GtkListBoxRow">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">18</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkCheckButton" id="checkbox">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="name_box">
+ <property name="visible">True</property>
+ <property name="margin_start">12</property>
+ <property name="orientation">vertical</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">20</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.5</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="description_label">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">20</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">False</property>
+ <property name="margin_start">12</property>
+ <property name="width_request">100</property>
+ <property name="xalign">1</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-app-row.c b/src/gs-app-row.c
new file mode 100644
index 0000000..721d729
--- /dev/null
+++ b/src/gs-app-row.c
@@ -0,0 +1,825 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-app-row.h"
+#include "gs-star-widget.h"
+#include "gs-progress-button.h"
+#include "gs-common.h"
+#include "gs-folders.h"
+
+typedef struct
+{
+ GsApp *app;
+ GtkWidget *image;
+ GtkWidget *name_box;
+ GtkWidget *name_label;
+ GtkWidget *version_box;
+ GtkWidget *version_current_label;
+ GtkWidget *version_arrow_label;
+ GtkWidget *version_update_label;
+ GtkWidget *star;
+ GtkWidget *description_box;
+ GtkWidget *description_label;
+ GtkWidget *button_box;
+ GtkWidget *button;
+ GtkWidget *spinner;
+ GtkWidget *label;
+ GtkWidget *label_warning;
+ GtkWidget *label_origin;
+ GtkWidget *label_installed;
+ GtkWidget *label_app_size;
+ gboolean colorful;
+ gboolean show_buttons;
+ gboolean show_rating;
+ gboolean show_source;
+ gboolean show_update;
+ gboolean show_installed_size;
+ guint pending_refresh_id;
+} GsAppRowPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsAppRow, gs_app_row, GTK_TYPE_LIST_BOX_ROW)
+
+enum {
+ SIGNAL_BUTTON_CLICKED,
+ SIGNAL_UNREVEALED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+typedef enum {
+ PROP_APP = 1,
+ PROP_SHOW_SOURCE,
+ PROP_SHOW_BUTTONS,
+ PROP_SHOW_INSTALLED_SIZE,
+} GsAppRowProperty;
+
+static GParamSpec *obj_props[PROP_SHOW_INSTALLED_SIZE + 1] = { NULL, };
+
+/**
+ * gs_app_row_get_description:
+ *
+ * Return value: PangoMarkup
+ **/
+static GString *
+gs_app_row_get_description (GsAppRow *app_row)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ const gchar *tmp = NULL;
+
+ /* convert the markdown update description into PangoMarkup */
+ if (priv->show_update) {
+ tmp = gs_app_get_update_details (priv->app);
+ if (tmp != NULL && tmp[0] != '\0')
+ return g_string_new (tmp);
+ }
+
+ /* if missing summary is set, return it without escaping in order to
+ * correctly show hyperlinks */
+ if (gs_app_get_state (priv->app) == AS_APP_STATE_UNAVAILABLE) {
+ tmp = gs_app_get_summary_missing (priv->app);
+ if (tmp != NULL && tmp[0] != '\0')
+ return g_string_new (tmp);
+ }
+
+ /* try all these things in order */
+ if (tmp == NULL || (tmp != NULL && tmp[0] == '\0'))
+ tmp = gs_app_get_summary (priv->app);
+ if (tmp == NULL || (tmp != NULL && tmp[0] == '\0'))
+ tmp = gs_app_get_description (priv->app);
+ if (tmp == NULL || (tmp != NULL && tmp[0] == '\0'))
+ tmp = gs_app_get_name (priv->app);
+ if (tmp == NULL)
+ return NULL;
+ return g_string_new (tmp);
+}
+
+static void
+gs_app_row_refresh_button (GsAppRow *app_row, gboolean missing_search_result)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ GtkStyleContext *context;
+
+ /* disabled */
+ if (!priv->show_buttons) {
+ gtk_widget_set_visible (priv->button, FALSE);
+ return;
+ }
+
+ /* label */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UNAVAILABLE:
+ gtk_widget_set_visible (priv->button, TRUE);
+ if (missing_search_result) {
+ /* TRANSLATORS: this is a button next to the search results that
+ * allows the application to be easily installed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Visit website"));
+ } else {
+ /* TRANSLATORS: this is a button next to the search results that
+ * allows the application to be easily installed.
+ * The ellipsis indicates that further steps are required */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Install…"));
+ }
+ break;
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_visible (priv->button, TRUE);
+ /* TRANSLATORS: this is a button next to the search results that
+ * allows to cancel a queued install of the application */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Cancel"));
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ gtk_widget_set_visible (priv->button, TRUE);
+ /* TRANSLATORS: this is a button next to the search results that
+ * allows the application to be easily installed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Install"));
+ break;
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ gtk_widget_set_visible (priv->button, TRUE);
+ if (priv->show_update) {
+ /* TRANSLATORS: this is a button in the updates panel
+ * that allows the app to be easily updated live */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Update"));
+ } else {
+ /* TRANSLATORS: this is a button next to the search results that
+ * allows the application to be easily removed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Remove"));
+ }
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_INSTALLED:
+ if (!gs_app_has_quirk (priv->app, GS_APP_QUIRK_COMPULSORY))
+ gtk_widget_set_visible (priv->button, TRUE);
+ /* TRANSLATORS: this is a button next to the search results that
+ * allows the application to be easily removed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Remove"));
+ break;
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (priv->button, TRUE);
+ /* TRANSLATORS: this is a button next to the search results that
+ * shows the status of an application being installed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Installing"));
+ break;
+ case AS_APP_STATE_REMOVING:
+ gtk_widget_set_visible (priv->button, TRUE);
+ /* TRANSLATORS: this is a button next to the search results that
+ * shows the status of an application being erased */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Removing"));
+ break;
+ default:
+ break;
+ }
+
+ /* visible */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UNAVAILABLE:
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ gtk_widget_set_visible (priv->button, TRUE);
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_INSTALLED:
+ gtk_widget_set_visible (priv->button,
+ !gs_app_has_quirk (priv->app,
+ GS_APP_QUIRK_COMPULSORY));
+ break;
+ default:
+ gtk_widget_set_visible (priv->button, FALSE);
+ break;
+ }
+
+ /* colorful */
+ context = gtk_widget_get_style_context (priv->button);
+ if (!priv->colorful) {
+ gtk_style_context_remove_class (context, "destructive-action");
+ } else {
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_INSTALLED:
+ gtk_style_context_add_class (context, "destructive-action");
+ break;
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ if (priv->show_update)
+ gtk_style_context_remove_class (context, "destructive-action");
+ else
+ gtk_style_context_add_class (context, "destructive-action");
+ break;
+ default:
+ gtk_style_context_remove_class (context, "destructive-action");
+ break;
+ }
+ }
+
+ /* always insensitive when in selection mode */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ gtk_widget_set_sensitive (priv->button, FALSE);
+ break;
+ default:
+ gtk_widget_set_sensitive (priv->button, TRUE);
+ break;
+ }
+}
+
+static void
+gs_app_row_actually_refresh (GsAppRow *app_row)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ GtkStyleContext *context;
+ GString *str = NULL;
+ const gchar *tmp;
+ gboolean missing_search_result;
+ guint64 size = 0;
+
+ if (priv->app == NULL)
+ return;
+
+ /* is this a missing search result from the extras page? */
+ missing_search_result = (gs_app_get_state (priv->app) == AS_APP_STATE_UNAVAILABLE &&
+ gs_app_get_url (priv->app, AS_URL_KIND_MISSING) != NULL);
+
+ /* do a fill bar for the current progress */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_INSTALLING:
+ gs_progress_button_set_progress (GS_PROGRESS_BUTTON (priv->button),
+ gs_app_get_progress (priv->app));
+ gs_progress_button_set_show_progress (GS_PROGRESS_BUTTON (priv->button), TRUE);
+ break;
+ default:
+ gs_progress_button_set_show_progress (GS_PROGRESS_BUTTON (priv->button), FALSE);
+ break;
+ }
+
+ /* join the description lines */
+ str = gs_app_row_get_description (app_row);
+ if (str != NULL) {
+ as_utils_string_replace (str, "\n", " ");
+ gtk_label_set_label (GTK_LABEL (priv->description_label), str->str);
+ g_string_free (str, TRUE);
+ } else {
+ gtk_label_set_text (GTK_LABEL (priv->description_label), NULL);
+ }
+
+ /* add warning */
+ if (gs_app_has_quirk (priv->app, GS_APP_QUIRK_REMOVABLE_HARDWARE)) {
+ gtk_label_set_text (GTK_LABEL (priv->label_warning),
+ /* TRANSLATORS: during the update the device
+ * will restart into a special update-only mode */
+ _("Device cannot be used during update."));
+ gtk_widget_show (priv->label_warning);
+ }
+
+ /* where did this app come from */
+ if (priv->show_source) {
+ tmp = gs_app_get_origin_hostname (priv->app);
+ if (tmp != NULL) {
+ g_autofree gchar *origin_tmp = NULL;
+ /* TRANSLATORS: this refers to where the app came from */
+ origin_tmp = g_strdup_printf ("%s: %s", _("Source"), tmp);
+ gtk_label_set_label (GTK_LABEL (priv->label_origin), origin_tmp);
+ }
+ gtk_widget_set_visible (priv->label_origin, tmp != NULL);
+ } else {
+ gtk_widget_set_visible (priv->label_origin, FALSE);
+ }
+
+ /* installed tag */
+ if (!priv->show_buttons) {
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ case AS_APP_STATE_INSTALLED:
+ gtk_widget_set_visible (priv->label_installed, TRUE);
+ break;
+ default:
+ gtk_widget_set_visible (priv->label_installed, FALSE);
+ break;
+ }
+ } else {
+ gtk_widget_set_visible (priv->label_installed, FALSE);
+ }
+
+ /* name */
+ gtk_label_set_label (GTK_LABEL (priv->name_label),
+ gs_app_get_name (priv->app));
+
+ if (priv->show_update) {
+ const gchar *version_current = NULL;
+ const gchar *version_update = NULL;
+
+ /* current version */
+ tmp = gs_app_get_version_ui (priv->app);
+ if (tmp != NULL && tmp[0] != '\0') {
+ version_current = tmp;
+ gtk_label_set_label (GTK_LABEL (priv->version_current_label),
+ version_current);
+ gtk_widget_show (priv->version_current_label);
+ } else {
+ gtk_widget_hide (priv->version_current_label);
+ }
+
+ /* update version */
+ tmp = gs_app_get_update_version_ui (priv->app);
+ if (tmp != NULL && tmp[0] != '\0' &&
+ g_strcmp0 (tmp, version_current) != 0) {
+ version_update = tmp;
+ gtk_label_set_label (GTK_LABEL (priv->version_update_label),
+ version_update);
+ gtk_widget_show (priv->version_update_label);
+ } else {
+ gtk_widget_hide (priv->version_update_label);
+ }
+
+ /* have both: show arrow */
+ if (version_current != NULL && version_update != NULL &&
+ g_strcmp0 (version_current, version_update) != 0) {
+ gtk_widget_show (priv->version_arrow_label);
+ } else {
+ gtk_widget_hide (priv->version_arrow_label);
+ }
+
+ /* show the box if we have either of the versions */
+ if (version_current != NULL || version_update != NULL)
+ gtk_widget_show (priv->version_box);
+ else
+ gtk_widget_hide (priv->version_box);
+
+ gtk_widget_hide (priv->star);
+ } else {
+ gtk_widget_hide (priv->version_box);
+ if (missing_search_result || gs_app_get_rating (priv->app) <= 0 || !priv->show_rating) {
+ gtk_widget_hide (priv->star);
+ } else {
+ gtk_widget_show (priv->star);
+ gtk_widget_set_sensitive (priv->star, FALSE);
+ gs_star_widget_set_rating (GS_STAR_WIDGET (priv->star),
+ gs_app_get_rating (priv->app));
+ }
+ }
+
+ /* pixbuf */
+ if (gs_app_get_pixbuf (priv->app) == NULL) {
+ gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
+ "application-x-executable",
+ GTK_ICON_SIZE_DIALOG);
+ } else {
+ gs_image_set_from_pixbuf (GTK_IMAGE (priv->image),
+ gs_app_get_pixbuf (priv->app));
+ }
+
+ context = gtk_widget_get_style_context (priv->image);
+ if (missing_search_result)
+ gtk_style_context_add_class (context, "dimmer-label");
+ else
+ gtk_style_context_remove_class (context, "dimmer-label");
+
+ if (gs_app_get_use_drop_shadow (priv->app))
+ gtk_style_context_add_class (context, "icon-dropshadow");
+ else
+ gtk_style_context_remove_class (context, "icon-dropshadow");
+
+ /* pending label */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_visible (priv->label, TRUE);
+ gtk_label_set_label (GTK_LABEL (priv->label), _("Pending"));
+ break;
+ default:
+ gtk_widget_set_visible (priv->label, FALSE);
+ break;
+ }
+
+ /* spinner */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_REMOVING:
+ gtk_spinner_start (GTK_SPINNER (priv->spinner));
+ gtk_widget_set_visible (priv->spinner, TRUE);
+ break;
+ default:
+ gtk_widget_set_visible (priv->spinner, FALSE);
+ break;
+ }
+
+ /* button */
+ gs_app_row_refresh_button (app_row, missing_search_result);
+
+ /* hide buttons in the update list, unless the app is live updatable */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (priv->button_box, TRUE);
+ break;
+ default:
+ gtk_widget_set_visible (priv->button_box, !priv->show_update);
+ break;
+ }
+
+ /* show the right size */
+ if (priv->show_installed_size) {
+ size = gs_app_get_size_installed (priv->app);
+ } else if (priv->show_update) {
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ case AS_APP_STATE_INSTALLING:
+ size = gs_app_get_size_download (priv->app);
+ break;
+ default:
+ break;
+ }
+ }
+ if (size != GS_APP_SIZE_UNKNOWABLE && size != 0) {
+ g_autofree gchar *sizestr = NULL;
+ sizestr = g_format_size (size);
+ gtk_label_set_label (GTK_LABEL (priv->label_app_size), sizestr);
+ gtk_widget_show (priv->label_app_size);
+ } else {
+ gtk_widget_hide (priv->label_app_size);
+ }
+
+ /* add warning */
+ if (priv->show_update &&
+ gs_app_has_quirk (priv->app, GS_APP_QUIRK_NEW_PERMISSIONS)) {
+ gtk_label_set_text (GTK_LABEL (priv->label_warning),
+ _("Requires additional permissions"));
+ gtk_widget_show (priv->label_warning);
+ }
+}
+
+static void
+child_unrevealed (GObject *revealer, GParamSpec *pspec, gpointer user_data)
+{
+ GsAppRow *app_row = user_data;
+
+ g_signal_emit (app_row, signals[SIGNAL_UNREVEALED], 0);
+}
+
+void
+gs_app_row_unreveal (GsAppRow *app_row)
+{
+ GtkWidget *child;
+ GtkWidget *revealer;
+
+ g_return_if_fail (GS_IS_APP_ROW (app_row));
+
+ child = gtk_bin_get_child (GTK_BIN (app_row));
+ gtk_widget_set_sensitive (child, FALSE);
+
+ revealer = gtk_revealer_new ();
+ gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), TRUE);
+ gtk_widget_show (revealer);
+
+ g_object_ref (child);
+ gtk_container_remove (GTK_CONTAINER (app_row), child);
+ gtk_container_add (GTK_CONTAINER (revealer), child);
+ g_object_unref (child);
+
+ gtk_container_add (GTK_CONTAINER (app_row), revealer);
+ g_signal_connect (revealer, "notify::child-revealed",
+ G_CALLBACK (child_unrevealed), app_row);
+ gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), FALSE);
+}
+
+GsApp *
+gs_app_row_get_app (GsAppRow *app_row)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ g_return_val_if_fail (GS_IS_APP_ROW (app_row), NULL);
+ return priv->app;
+}
+
+static gboolean
+gs_app_row_refresh_idle_cb (gpointer user_data)
+{
+ GsAppRow *app_row = GS_APP_ROW (user_data);
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ priv->pending_refresh_id = 0;
+ gs_app_row_actually_refresh (app_row);
+ return G_SOURCE_REMOVE;
+}
+
+/* Schedule an idle call to gs_app_row_actually_refresh() unless one’s already pending. */
+static void
+gs_app_row_schedule_refresh (GsAppRow *app_row)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ if (priv->pending_refresh_id > 0)
+ return;
+ priv->pending_refresh_id = g_idle_add (gs_app_row_refresh_idle_cb, app_row);
+}
+
+static void
+gs_app_row_notify_props_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsAppRow *app_row)
+{
+ gs_app_row_schedule_refresh (app_row);
+}
+
+static void
+gs_app_row_set_app (GsAppRow *app_row, GsApp *app)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ priv->app = g_object_ref (app);
+
+ g_signal_connect_object (priv->app, "notify::state",
+ G_CALLBACK (gs_app_row_notify_props_changed_cb),
+ app_row, 0);
+ g_signal_connect_object (priv->app, "notify::rating",
+ G_CALLBACK (gs_app_row_notify_props_changed_cb),
+ app_row, 0);
+ g_signal_connect_object (priv->app, "notify::progress",
+ G_CALLBACK (gs_app_row_notify_props_changed_cb),
+ app_row, 0);
+ g_signal_connect_object (priv->app, "notify::allow-cancel",
+ G_CALLBACK (gs_app_row_notify_props_changed_cb),
+ app_row, 0);
+
+ g_object_notify (G_OBJECT (app_row), "app");
+
+ gs_app_row_schedule_refresh (app_row);
+}
+
+static void
+gs_app_row_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ GsAppRow *app_row = GS_APP_ROW (object);
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ switch (prop_id) {
+ case PROP_APP:
+ g_value_set_object (value, priv->app);
+ break;
+ case PROP_SHOW_SOURCE:
+ g_value_set_boolean (value, priv->show_source);
+ break;
+ case PROP_SHOW_BUTTONS:
+ g_value_set_boolean (value, priv->show_buttons);
+ break;
+ case PROP_SHOW_INSTALLED_SIZE:
+ g_value_set_boolean (value, priv->show_installed_size);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_row_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ GsAppRow *app_row = GS_APP_ROW (object);
+
+ switch (prop_id) {
+ case PROP_APP:
+ gs_app_row_set_app (app_row, g_value_get_object (value));
+ break;
+ case PROP_SHOW_SOURCE:
+ gs_app_row_set_show_source (app_row, g_value_get_boolean (value));
+ break;
+ case PROP_SHOW_BUTTONS:
+ gs_app_row_set_show_buttons (app_row, g_value_get_boolean (value));
+ break;
+ case PROP_SHOW_INSTALLED_SIZE:
+ gs_app_row_set_show_installed_size (app_row, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_app_row_destroy (GtkWidget *object)
+{
+ GsAppRow *app_row = GS_APP_ROW (object);
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ if (priv->app)
+ g_signal_handlers_disconnect_by_func (priv->app, gs_app_row_notify_props_changed_cb, app_row);
+
+ g_clear_object (&priv->app);
+ if (priv->pending_refresh_id != 0) {
+ g_source_remove (priv->pending_refresh_id);
+ priv->pending_refresh_id = 0;
+ }
+
+ GTK_WIDGET_CLASS (gs_app_row_parent_class)->destroy (object);
+}
+
+static void
+gs_app_row_class_init (GsAppRowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->get_property = gs_app_row_get_property;
+ object_class->set_property = gs_app_row_set_property;
+ widget_class->destroy = gs_app_row_destroy;
+
+ /**
+ * GsAppRow:app:
+ *
+ * The #GsApp to show in this row.
+ *
+ * Since: 3.38
+ */
+ obj_props[PROP_APP] =
+ g_param_spec_object ("app", NULL, NULL,
+ GS_TYPE_APP,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * GsAppRow:show-source:
+ *
+ * Show the source of the app in the row.
+ *
+ * Since: 3.38
+ */
+ obj_props[PROP_SHOW_SOURCE] =
+ g_param_spec_boolean ("show-source", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * GsAppRow:show-buttons:
+ *
+ * Show buttons (such as Install, Cancel or Update) in the app row.
+ *
+ * Since: 3.38
+ */
+ obj_props[PROP_SHOW_BUTTONS] =
+ g_param_spec_boolean ("show-buttons", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * GsAppRow:show-installed-size:
+ *
+ * Show the installed size of the app in the row.
+ *
+ * Since: 3.38
+ */
+ obj_props[PROP_SHOW_INSTALLED_SIZE] =
+ g_param_spec_boolean ("show-installed-size", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, G_N_ELEMENTS (obj_props), obj_props);
+
+ signals [SIGNAL_BUTTON_CLICKED] =
+ g_signal_new ("button-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsAppRowClass, button_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals [SIGNAL_UNREVEALED] =
+ g_signal_new ("unrevealed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsAppRowClass, unrevealed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-app-row.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, image);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, name_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, name_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, version_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, version_current_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, version_arrow_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, version_update_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, star);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, description_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, description_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, button_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, button);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, spinner);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_warning);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_origin);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_installed);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_app_size);
+}
+
+static void
+button_clicked (GtkWidget *widget, GsAppRow *app_row)
+{
+ g_signal_emit (app_row, signals[SIGNAL_BUTTON_CLICKED], 0);
+}
+
+static void
+gs_app_row_init (GsAppRow *app_row)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ gtk_widget_set_has_window (GTK_WIDGET (app_row), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (app_row));
+
+ g_signal_connect (priv->button, "clicked",
+ G_CALLBACK (button_clicked), app_row);
+}
+
+void
+gs_app_row_set_size_groups (GsAppRow *app_row,
+ GtkSizeGroup *image,
+ GtkSizeGroup *name,
+ GtkSizeGroup *desc,
+ GtkSizeGroup *button)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ gtk_size_group_add_widget (image, priv->image);
+ gtk_size_group_add_widget (name, priv->name_box);
+ gtk_size_group_add_widget (desc, priv->description_box);
+ gtk_size_group_add_widget (button, priv->button);
+}
+
+void
+gs_app_row_set_colorful (GsAppRow *app_row, gboolean colorful)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ priv->colorful = colorful;
+ gs_app_row_schedule_refresh (app_row);
+}
+
+void
+gs_app_row_set_show_buttons (GsAppRow *app_row, gboolean show_buttons)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ priv->show_buttons = show_buttons;
+ g_object_notify (G_OBJECT (app_row), "show-buttons");
+ gs_app_row_schedule_refresh (app_row);
+}
+
+void
+gs_app_row_set_show_rating (GsAppRow *app_row, gboolean show_rating)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ priv->show_rating = show_rating;
+ gs_app_row_schedule_refresh (app_row);
+}
+
+void
+gs_app_row_set_show_source (GsAppRow *app_row, gboolean show_source)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ priv->show_source = show_source;
+ g_object_notify (G_OBJECT (app_row), "show-source");
+ gs_app_row_schedule_refresh (app_row);
+}
+
+void
+gs_app_row_set_show_installed_size (GsAppRow *app_row, gboolean show_size)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ priv->show_installed_size = show_size;
+ g_object_notify (G_OBJECT (app_row), "show-installed-size");
+ gs_app_row_schedule_refresh (app_row);
+}
+
+/**
+ * gs_app_row_set_show_update:
+ *
+ * Only really useful for the update panel to call
+ **/
+void
+gs_app_row_set_show_update (GsAppRow *app_row, gboolean show_update)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+
+ priv->show_update = show_update;
+ gs_app_row_schedule_refresh (app_row);
+}
+
+GtkWidget *
+gs_app_row_new (GsApp *app)
+{
+ g_return_val_if_fail (GS_IS_APP (app), NULL);
+
+ return g_object_new (GS_TYPE_APP_ROW,
+ "app", app,
+ NULL);
+}
diff --git a/src/gs-app-row.h b/src/gs-app-row.h
new file mode 100644
index 0000000..afe386d
--- /dev/null
+++ b/src/gs-app-row.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_APP_ROW (gs_app_row_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsAppRow, gs_app_row, GS, APP_ROW, GtkListBoxRow)
+
+struct _GsAppRowClass
+{
+ GtkListBoxRowClass parent_class;
+ void (*button_clicked) (GsAppRow *app_row);
+ void (*unrevealed) (GsAppRow *app_row);
+};
+
+GtkWidget *gs_app_row_new (GsApp *app);
+void gs_app_row_unreveal (GsAppRow *app_row);
+void gs_app_row_set_colorful (GsAppRow *app_row,
+ gboolean colorful);
+void gs_app_row_set_show_buttons (GsAppRow *app_row,
+ gboolean show_buttons);
+void gs_app_row_set_show_rating (GsAppRow *app_row,
+ gboolean show_rating);
+void gs_app_row_set_show_source (GsAppRow *app_row,
+ gboolean show_source);
+void gs_app_row_set_show_update (GsAppRow *app_row,
+ gboolean show_update);
+GsApp *gs_app_row_get_app (GsAppRow *app_row);
+void gs_app_row_set_size_groups (GsAppRow *app_row,
+ GtkSizeGroup *image,
+ GtkSizeGroup *name,
+ GtkSizeGroup *desc,
+ GtkSizeGroup *button);
+void gs_app_row_set_show_installed_size (GsAppRow *app_row,
+ gboolean show_size);
+
+G_END_DECLS
diff --git a/src/gs-app-row.ui b/src/gs-app-row.ui
new file mode 100644
index 0000000..109881c
--- /dev/null
+++ b/src/gs-app-row.ui
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsAppRow" parent="GtkListBoxRow">
+ <property name="visible">True</property>
+ <style>
+ <class name="list-box-app-row"/>
+ </style>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="margin_top">16</property>
+ <property name="margin_bottom">16</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="pixel_size">64</property>
+ <property name="margin_start">24</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="name_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin-start">12</property>
+ <property name="spacing">6</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">20</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.5</property>
+ <property name="ellipsize">end</property>
+ <property name="lines">3</property>
+ <property name="wrap-mode">word-char</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="version_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="version_current_label">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.5</property>
+ <property name="ellipsize">end</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="version_arrow_label">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.5</property>
+ <property name="ellipsize">end</property>
+ <property name="label">→</property>
+ <style>
+ <class name="version-arrow-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="version_update_label">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.5</property>
+ <property name="ellipsize">end</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GsStarWidget" id="star">
+ <property name="visible">False</property>
+ <property name="halign">start</property>
+ <property name="icon-size">12</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="description_box">
+ <property name="visible">True</property>
+ <property name="margin_top">3</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">3</property>
+ <property name="hexpand">True</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkLabel" id="description_label">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <property name="vexpand">True</property>
+ <property name="margin_start">24</property>
+ <property name="margin_end">24</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="ellipsize">end</property>
+ <property name="lines">2</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_tag">
+ <property name="visible">True</property>
+ <property name="spacing">4</property>
+ <property name="margin_left">24</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box_desc">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="label_origin">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">1.0</property>
+ <property name="halign">start</property>
+ <property name="hexpand">True</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="label_installed">
+ <property name="visible">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="no_show_all">True</property>
+ <property name="halign">end</property>
+ <property name="hexpand">True</property>
+ <property name="valign">end</property>
+ <property name="spacing">6</property>
+ <property name="margin-right">24</property>
+ <child>
+ <object class="GtkImage" id="installed-icon">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="margin-bottom">4</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">software-installed-symbolic</property>
+ <style>
+ <class name="installed-icon"/>
+ <class name="app-row-installed-icon"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="installed-label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Installed</property>
+ <style>
+ <class name="app-row-installed-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_warning">
+ <property name="visible">False</property>
+ <property name="label">warning-text</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">middle</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="foreground" value="#cccc00000000"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vertical_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="margin-right">6</property>
+ <child>
+ <object class="GtkBox" id="button_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GsProgressButton" id="button">
+ <property name="visible">False</property>
+ <property name="width_request">100</property>
+ <property name="halign">end</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">False</property>
+ <property name="margin_start">12</property>
+ <property name="margin_end">12</property>
+ <property name="halign">end</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">False</property>
+ <property name="margin_start">12</property>
+ <property name="margin_end">12</property>
+ <property name="halign">end</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_app_size">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="vexpand">True</property>
+ <property name="label">150 MB</property>
+ <property name="margin-top">6</property>
+ <style>
+ <class name="app-row-app-size"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-app-tile.c b/src/gs-app-tile.c
new file mode 100644
index 0000000..50ee7c9
--- /dev/null
+++ b/src/gs-app-tile.c
@@ -0,0 +1,113 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-app-tile.h"
+#include "gs-common.h"
+
+typedef struct {
+ GsApp *app;
+ guint app_state_changed_idle_id;
+} GsAppTilePrivate;
+
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GsAppTile, gs_app_tile, GTK_TYPE_BUTTON)
+
+GsApp *
+gs_app_tile_get_app (GsAppTile *self)
+{
+ GsAppTilePrivate *priv = gs_app_tile_get_instance_private (self);
+ g_return_val_if_fail (GS_IS_APP_TILE (self), NULL);
+ return priv->app;
+}
+
+static gboolean
+gs_app_tile_state_changed_idle_cb (gpointer user_data)
+{
+ GsAppTile *self = GS_APP_TILE (user_data);
+ GsAppTileClass *klass = GS_APP_TILE_GET_CLASS (self);
+ GsAppTilePrivate *priv = gs_app_tile_get_instance_private (self);
+ priv->app_state_changed_idle_id = 0;
+ klass->refresh (self);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_app_tile_state_changed_cb (GsApp *app, GParamSpec *pspec, GsAppTile *self)
+{
+ GsAppTilePrivate *priv = gs_app_tile_get_instance_private (self);
+ g_clear_handle_id (&priv->app_state_changed_idle_id, g_source_remove);
+ priv->app_state_changed_idle_id = g_idle_add (gs_app_tile_state_changed_idle_cb, self);
+}
+
+void
+gs_app_tile_set_app (GsAppTile *self, GsApp *app)
+{
+ GsAppTileClass *klass = GS_APP_TILE_GET_CLASS (self);
+ GsAppTilePrivate *priv = gs_app_tile_get_instance_private (self);
+
+ g_return_if_fail (GS_IS_APP_TILE (self));
+ g_return_if_fail (!app || GS_IS_APP (app));
+
+ /* cancel pending refresh */
+ g_clear_handle_id (&priv->app_state_changed_idle_id, g_source_remove);
+
+ /* disconnect old app */
+ if (priv->app != NULL)
+ g_signal_handlers_disconnect_by_func (priv->app, gs_app_tile_state_changed_cb, self);
+ g_set_object (&priv->app, app);
+
+ /* optional refresh */
+ if (klass->refresh != NULL && priv->app != NULL) {
+ g_signal_connect (app, "notify::state",
+ G_CALLBACK (gs_app_tile_state_changed_cb), self);
+ g_signal_connect (app, "notify::name",
+ G_CALLBACK (gs_app_tile_state_changed_cb), self);
+ g_signal_connect (app, "notify::summary",
+ G_CALLBACK (gs_app_tile_state_changed_cb), self);
+ g_signal_connect (app, "notify::key-colors",
+ G_CALLBACK (gs_app_tile_state_changed_cb), self);
+ klass->refresh (self);
+ }
+}
+
+static void
+gs_app_tile_finalize (GObject *object)
+{
+ GsAppTile *self = GS_APP_TILE (object);
+ GsAppTilePrivate *priv = gs_app_tile_get_instance_private (self);
+ if (priv->app != NULL)
+ g_signal_handlers_disconnect_by_func (priv->app, gs_app_tile_state_changed_cb, self);
+ g_clear_handle_id (&priv->app_state_changed_idle_id, g_source_remove);
+ g_clear_object (&priv->app);
+
+ G_OBJECT_CLASS (gs_app_tile_parent_class)->finalize (object);
+}
+
+void
+gs_app_tile_class_init (GsAppTileClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_app_tile_finalize;
+}
+
+void
+gs_app_tile_init (GsAppTile *self)
+{
+ GsAppTilePrivate *priv = gs_app_tile_get_instance_private (self);
+ priv->app_state_changed_idle_id = 0;
+}
+
+GtkWidget *
+gs_app_tile_new (GsApp *app)
+{
+ GsAppTile *self = g_object_new (GS_TYPE_APP_TILE, NULL);
+ gs_app_tile_set_app (self, app);
+ return GTK_WIDGET (self);
+}
diff --git a/src/gs-app-tile.h b/src/gs-app-tile.h
new file mode 100644
index 0000000..f1e28a4
--- /dev/null
+++ b/src/gs-app-tile.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_APP_TILE (gs_app_tile_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsAppTile, gs_app_tile, GS, APP_TILE, GtkButton)
+
+struct _GsAppTileClass
+{
+ GtkButtonClass parent_class;
+ void (*refresh) (GsAppTile *self);
+};
+
+GtkWidget *gs_app_tile_new (GsApp *app);
+GsApp *gs_app_tile_get_app (GsAppTile *self);
+void gs_app_tile_set_app (GsAppTile *self,
+ GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-app-tile.ui b/src/gs-app-tile.ui
new file mode 100644
index 0000000..167db8a
--- /dev/null
+++ b/src/gs-app-tile.ui
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsAppTile" parent="GtkButton">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <!-- This is the minimum (sic!) width of a tile when the GtkFlowBox parent container switches to 3 columns -->
+ <property name="preferred-width">270</property>
+ <style>
+ <class name="view"/>
+ <class name="tile"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage" id="waiting">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="name">waiting</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkOverlay" id="overlay">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <child type="overlay">
+ <object class="GtkEventBox" id="eventbox">
+ <property name="visible">False</property>
+ <property name="no_show_all">True</property>
+ <property name="visible_window">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin-top">58</property>
+ <property name="margin-start">12</property>
+ <style>
+ <class name="installed-overlay-box"/>
+ </style>
+ <child>
+ <object class="GtkLabel" id="installed-label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Installed</property>
+ <property name="margin-start">16</property>
+ <property name="margin-end">16</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid">
+ <property name="visible">True</property>
+ <property name="margin-top">14</property>
+ <property name="margin-bottom">15</property>
+ <property name="margin-start">17</property>
+ <property name="margin-end">17</property>
+ <property name="row-spacing">3</property>
+ <property name="column-spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="summary">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.0</property>
+ <property name="lines">2</property>
+ <property name="vexpand">True</property>
+ <property name="single-line-mode">True</property>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">content</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-application.c b/src/gs-application.c
new file mode 100644
index 0000000..9c2676e
--- /dev/null
+++ b/src/gs-application.c
@@ -0,0 +1,1150 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2013-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-application.h"
+
+#include <stdlib.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gio/gdesktopappinfo.h>
+#include <libsoup/soup.h>
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+#ifdef GDK_WINDOWING_WAYLAND
+#include <gdk/gdkwayland.h>
+#endif
+
+#ifdef HAVE_PACKAGEKIT
+#include "gs-dbus-helper.h"
+#endif
+
+#include "gs-first-run-dialog.h"
+#include "gs-shell.h"
+#include "gs-update-monitor.h"
+#include "gs-shell-search-provider.h"
+#include "gs-folders.h"
+
+#define ENABLE_REPOS_DIALOG_CONF_KEY "enable-repos-dialog"
+
+struct _GsApplication {
+ GtkApplication parent;
+ GCancellable *cancellable;
+ GtkCssProvider *provider;
+ GsPluginLoader *plugin_loader;
+ gint pending_apps;
+ GsShell *shell;
+ GsUpdateMonitor *update_monitor;
+#ifdef HAVE_PACKAGEKIT
+ GsDbusHelper *dbus_helper;
+#endif
+ GsShellSearchProvider *search_provider;
+ GSettings *settings;
+ GSimpleActionGroup *action_map;
+ guint shell_loaded_handler_id;
+};
+
+G_DEFINE_TYPE (GsApplication, gs_application, GTK_TYPE_APPLICATION);
+
+typedef struct {
+ GsApplication *app;
+ GSimpleAction *action;
+ GVariant *action_param;
+} GsActivationHelper;
+
+static GsActivationHelper *
+gs_activation_helper_new (GsApplication *app,
+ GSimpleAction *action,
+ GVariant *parameter)
+{
+ GsActivationHelper *helper = g_slice_new0 (GsActivationHelper);
+ helper->app = app;
+ helper->action = G_SIMPLE_ACTION (action);
+ helper->action_param = parameter;
+
+ return helper;
+}
+
+static void
+gs_activation_helper_free (GsActivationHelper *helper)
+{
+ g_variant_unref (helper->action_param);
+ g_slice_free (GsActivationHelper, helper);
+}
+
+GsPluginLoader *
+gs_application_get_plugin_loader (GsApplication *application)
+{
+ return application->plugin_loader;
+}
+
+gboolean
+gs_application_has_active_window (GsApplication *application)
+{
+ GList *windows;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (application));
+ for (GList *l = windows; l != NULL; l = l->next) {
+ if (gtk_window_is_active (GTK_WINDOW (l->data)))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void
+gs_application_init (GsApplication *application)
+{
+ const GOptionEntry options[] = {
+ { "mode", '\0', 0, G_OPTION_ARG_STRING, NULL,
+ /* TRANSLATORS: this is a command line option */
+ _("Start up mode: either ‘updates’, ‘updated’, ‘installed’ or ‘overview’"), _("MODE") },
+ { "search", '\0', 0, G_OPTION_ARG_STRING, NULL,
+ _("Search for applications"), _("SEARCH") },
+ { "details", '\0', 0, G_OPTION_ARG_STRING, NULL,
+ _("Show application details (using application ID)"), _("ID") },
+ { "details-pkg", '\0', 0, G_OPTION_ARG_STRING, NULL,
+ _("Show application details (using package name)"), _("PKGNAME") },
+ { "install", '\0', 0, G_OPTION_ARG_STRING, NULL,
+ _("Install the application (using application ID)"), _("ID") },
+ { "local-filename", '\0', 0, G_OPTION_ARG_FILENAME, NULL,
+ _("Open a local package file"), _("FILENAME") },
+ { "interaction", '\0', 0, G_OPTION_ARG_STRING, NULL,
+ _("The kind of interaction expected for this action: either "
+ "‘none’, ‘notify’, or ‘full’"), NULL },
+ { "verbose", '\0', 0, G_OPTION_ARG_NONE, NULL,
+ _("Show verbose debugging information"), NULL },
+ { "autoupdate", 0, 0, G_OPTION_ARG_NONE, NULL,
+ _("Installs any pending updates in the background"), NULL },
+ { "prefs", 0, 0, G_OPTION_ARG_NONE, NULL,
+ _("Show update preferences"), NULL },
+ { "quit", 0, 0, G_OPTION_ARG_NONE, NULL,
+ _("Quit the running instance"), NULL },
+ { "prefer-local", '\0', 0, G_OPTION_ARG_NONE, NULL,
+ _("Prefer local file sources to AppStream"), NULL },
+ { "version", 0, 0, G_OPTION_ARG_NONE, NULL,
+ _("Show version number"), NULL },
+ { NULL }
+ };
+
+ g_application_add_main_option_entries (G_APPLICATION (application), options);
+}
+
+static void
+gs_application_initialize_plugins (GsApplication *app)
+{
+ static gboolean initialized = FALSE;
+ g_auto(GStrv) plugin_blocklist = NULL;
+ g_auto(GStrv) plugin_allowlist = NULL;
+ g_autoptr(GError) error = NULL;
+ const gchar *tmp;
+
+ if (initialized)
+ return;
+
+ initialized = TRUE;
+
+ /* allow for debugging */
+ tmp = g_getenv ("GNOME_SOFTWARE_PLUGINS_BLOCKLIST");
+ if (tmp != NULL)
+ plugin_blocklist = g_strsplit (tmp, ",", -1);
+ tmp = g_getenv ("GNOME_SOFTWARE_PLUGINS_ALLOWLIST");
+ if (tmp != NULL)
+ plugin_allowlist = g_strsplit (tmp, ",", -1);
+
+ app->plugin_loader = gs_plugin_loader_new ();
+ if (g_file_test (LOCALPLUGINDIR, G_FILE_TEST_EXISTS))
+ gs_plugin_loader_add_location (app->plugin_loader, LOCALPLUGINDIR);
+ if (!gs_plugin_loader_setup (app->plugin_loader,
+ plugin_allowlist,
+ plugin_blocklist,
+ NULL,
+ &error)) {
+ g_warning ("Failed to setup plugins: %s", error->message);
+ exit (1);
+ }
+
+ /* show the priority of each plugin */
+ gs_plugin_loader_dump_state (app->plugin_loader);
+
+}
+
+static gboolean
+gs_application_dbus_register (GApplication *application,
+ GDBusConnection *connection,
+ const gchar *object_path,
+ GError **error)
+{
+ GsApplication *app = GS_APPLICATION (application);
+ app->search_provider = gs_shell_search_provider_new ();
+ return gs_shell_search_provider_register (app->search_provider, connection, error);
+}
+
+static void
+gs_application_dbus_unregister (GApplication *application,
+ GDBusConnection *connection,
+ const gchar *object_path)
+{
+ GsApplication *app = GS_APPLICATION (application);
+
+ if (app->search_provider != NULL) {
+ gs_shell_search_provider_unregister (app->search_provider);
+ g_clear_object (&app->search_provider);
+ }
+}
+
+static void
+gs_application_show_first_run_dialog (GsApplication *app)
+{
+ GtkWidget *dialog;
+
+ if (g_settings_get_boolean (app->settings, "first-run") == TRUE) {
+ dialog = gs_first_run_dialog_new ();
+ gs_shell_modal_dialog_present (app->shell, GTK_DIALOG (dialog));
+ g_settings_set_boolean (app->settings, "first-run", FALSE);
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+ }
+}
+
+static void
+theme_changed (GtkSettings *settings, GParamSpec *pspec, GsApplication *app)
+{
+ g_autoptr(GFile) file = NULL;
+ g_autofree gchar *theme = NULL;
+
+ g_object_get (settings, "gtk-theme-name", &theme, NULL);
+ if (g_strcmp0 (theme, "HighContrast") == 0) {
+ file = g_file_new_for_uri ("resource:///org/gnome/Software/gtk-style-hc.css");
+ } else {
+ file = g_file_new_for_uri ("resource:///org/gnome/Software/gtk-style.css");
+ }
+ gtk_css_provider_load_from_file (app->provider, file, NULL);
+}
+
+static void
+gs_application_shell_loaded_cb (GsShell *shell, GsApplication *app)
+{
+ g_signal_handler_disconnect (app->shell, app->shell_loaded_handler_id);
+ app->shell_loaded_handler_id = 0;
+}
+
+static void
+gs_application_initialize_ui (GsApplication *app)
+{
+ static gboolean initialized = FALSE;
+
+ if (initialized)
+ return;
+
+ initialized = TRUE;
+
+ /* get CSS */
+ app->provider = gtk_css_provider_new ();
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (app->provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+ g_signal_connect (gtk_settings_get_default (), "notify::gtk-theme-name",
+ G_CALLBACK (theme_changed), app);
+ theme_changed (gtk_settings_get_default (), NULL, app);
+
+ gs_application_initialize_plugins (app);
+
+ /* setup UI */
+ app->shell = gs_shell_new ();
+ app->cancellable = g_cancellable_new ();
+
+ app->shell_loaded_handler_id = g_signal_connect (app->shell, "loaded",
+ G_CALLBACK (gs_application_shell_loaded_cb),
+ app);
+
+ gs_shell_setup (app->shell, app->plugin_loader, app->cancellable);
+ gtk_application_add_window (GTK_APPLICATION (app), gs_shell_get_window (app->shell));
+}
+
+static void
+gs_application_present_window (GsApplication *app, const gchar *startup_id)
+{
+ GList *windows;
+ GtkWindow *window;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows) {
+ window = windows->data;
+
+ if (startup_id != NULL)
+ gtk_window_set_startup_id (window, startup_id);
+ gtk_window_present (window);
+ }
+}
+
+static void
+sources_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ gs_shell_show_sources (GS_APPLICATION (app)->shell);
+}
+
+static void
+prefs_activated (GSimpleAction *action, GVariant *parameter, gpointer app)
+{
+ gs_shell_show_prefs (GS_APPLICATION (app)->shell);
+}
+
+static void
+about_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GsApplication *app = GS_APPLICATION (user_data);
+ const gchar *authors[] = {
+ "Richard Hughes",
+ "Matthias Clasen",
+ "Kalev Lember",
+ "Allan Day",
+ "Ryan Lerch",
+ "William Jon McCann",
+ NULL
+ };
+ const gchar *copyright = "Copyright \xc2\xa9 2016-2019 Richard Hughes, Matthias Clasen, Kalev Lember";
+ GtkAboutDialog *dialog;
+
+ dialog = GTK_ABOUT_DIALOG (gtk_about_dialog_new ());
+ gtk_about_dialog_set_authors (dialog, authors);
+ gtk_about_dialog_set_copyright (dialog, copyright);
+ gtk_about_dialog_set_license_type (dialog, GTK_LICENSE_GPL_2_0);
+ gtk_about_dialog_set_logo_icon_name (dialog, "org.gnome.Software");
+ gtk_about_dialog_set_translator_credits (dialog, _("translator-credits"));
+ gtk_about_dialog_set_version (dialog, VERSION);
+ gtk_about_dialog_set_program_name (dialog, g_get_application_name ());
+
+ /* TRANSLATORS: this is the title of the about window */
+ gtk_window_set_title (GTK_WINDOW (dialog), _("About Software"));
+
+ /* TRANSLATORS: well, we seem to think so, anyway */
+ gtk_about_dialog_set_comments (dialog, _("A nice way to manage the "
+ "software on your system."));
+
+ gs_shell_modal_dialog_present (app->shell, GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
+static void
+cancel_trigger_failed_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsApplication *app = GS_APPLICATION (user_data);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (app->plugin_loader, res, &error)) {
+ g_warning ("failed to cancel trigger: %s", error->message);
+ return;
+ }
+}
+
+static void
+reboot_failed_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsApplication *app = GS_APPLICATION (user_data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GVariant) retval = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get result */
+ retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error);
+ if (retval != NULL)
+ return;
+
+ if (error != NULL) {
+ g_warning ("Calling org.gnome.SessionManager.Reboot failed: %s",
+ error->message);
+ }
+
+ /* cancel trigger */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE_CANCEL, NULL);
+ gs_plugin_loader_job_process_async (app->plugin_loader, plugin_job,
+ app->cancellable,
+ cancel_trigger_failed_cb,
+ app);
+}
+
+static void
+offline_update_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsApplication *app)
+{
+ g_autoptr(GDBusConnection) bus = NULL;
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("Failed to trigger offline update: %s", error->message);
+ return;
+ }
+
+ /* trigger reboot */
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+ g_dbus_connection_call (bus,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager",
+ "org.gnome.SessionManager",
+ "Reboot",
+ NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, NULL,
+ reboot_failed_cb,
+ app);
+}
+
+static void
+gs_application_reboot_failed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GVariant) retval = NULL;
+
+ /* get result */
+ retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error);
+ if (retval != NULL)
+ return;
+ if (error != NULL) {
+ g_warning ("Calling org.gnome.SessionManager.Reboot failed: %s",
+ error->message);
+ }
+}
+
+static void
+reboot_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ g_autoptr(GDBusConnection) bus = NULL;
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+ g_dbus_connection_call (bus,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager",
+ "org.gnome.SessionManager",
+ "Reboot",
+ NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, NULL,
+ gs_application_reboot_failed_cb,
+ NULL);
+}
+
+static void
+shutdown_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ g_application_quit (G_APPLICATION (app));
+}
+
+static void
+reboot_and_install (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ gs_application_initialize_plugins (app);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE, NULL);
+ gs_plugin_loader_job_process_async (app->plugin_loader, plugin_job,
+ app->cancellable,
+ (GAsyncReadyCallback) offline_update_cb,
+ app);
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ GApplicationFlags flags;
+ GList *windows;
+ GtkWidget *window;
+
+ flags = g_application_get_flags (app);
+
+ if (flags & G_APPLICATION_IS_SERVICE) {
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows) {
+ window = windows->data;
+ gtk_widget_hide (window);
+ }
+
+ return;
+ }
+
+ g_application_quit (G_APPLICATION (app));
+}
+
+static void
+activate_on_shell_loaded_cb (GsActivationHelper *helper)
+{
+ GsApplication *app = helper->app;
+
+ g_action_activate (G_ACTION (helper->action), helper->action_param);
+
+ g_signal_handlers_disconnect_by_data (app->shell, helper);
+ gs_activation_helper_free (helper);
+}
+
+static void
+set_mode_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *mode;
+
+ gs_application_present_window (app, NULL);
+
+ gs_shell_reset_state (app->shell);
+
+ mode = g_variant_get_string (parameter, NULL);
+ if (g_strcmp0 (mode, "updates") == 0) {
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_UPDATES);
+ } else if (g_strcmp0 (mode, "installed") == 0) {
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_INSTALLED);
+ } else if (g_strcmp0 (mode, "moderate") == 0) {
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_MODERATE);
+ } else if (g_strcmp0 (mode, "overview") == 0) {
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_OVERVIEW);
+ } else if (g_strcmp0 (mode, "updated") == 0) {
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_UPDATES);
+ gs_shell_show_installed_updates (app->shell);
+ } else {
+ g_warning ("Mode '%s' not recognised", mode);
+ }
+}
+
+static void
+search_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *search;
+
+ gs_application_present_window (app, NULL);
+
+ search = g_variant_get_string (parameter, NULL);
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_search (app->shell, search);
+}
+
+static void
+_search_launchable_details_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsApp *a;
+ GsApplication *app = GS_APPLICATION (user_data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ list = gs_plugin_loader_job_process_finish (app->plugin_loader, res, &error);
+ if (list == NULL) {
+ g_warning ("failed to find application: %s", error->message);
+ return;
+ }
+ if (gs_app_list_length (list) == 0) {
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_OVERVIEW);
+ gs_shell_show_notification (app->shell,
+ /* TRANSLATORS: we tried to show an app that did not exist */
+ _("Sorry! There are no details for that application."));
+ return;
+ }
+ a = gs_app_list_index (list, 0);
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_app (app->shell, a);
+}
+
+static void
+details_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *id;
+ const gchar *search;
+
+ gs_application_present_window (app, NULL);
+
+ g_variant_get (parameter, "(&s&s)", &id, &search);
+ g_debug ("trying to activate %s:%s for details", id, search);
+ if (search != NULL && search[0] != '\0') {
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_search_result (app->shell, id, search);
+ } else {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ if (as_utils_unique_id_valid (id)) {
+ g_autoptr(GsApp) a = gs_plugin_loader_app_create (app->plugin_loader, id);
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_app (app->shell, a);
+ return;
+ }
+
+ /* find by launchable */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", id,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_loader_job_process_async (app->plugin_loader, plugin_job,
+ app->cancellable,
+ _search_launchable_details_cb,
+ app);
+ }
+}
+
+static void
+details_pkg_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *name;
+ const gchar *plugin;
+ g_autoptr (GsApp) a = NULL;
+
+ gs_application_present_window (app, NULL);
+
+ g_variant_get (parameter, "(&s&s)", &name, &plugin);
+ a = gs_app_new (NULL);
+ gs_app_add_source (a, name);
+ if (strcmp (plugin, "") != 0)
+ gs_app_set_management_plugin (a, plugin);
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_app (app->shell, a);
+}
+
+static void
+details_url_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *url;
+ g_autoptr (GsApp) a = NULL;
+
+ gs_application_present_window (app, NULL);
+
+ g_variant_get (parameter, "(&s)", &url);
+
+ /* this is only used as a wrapper to transport the URL to
+ * the gs_shell_change_mode() function -- not in the GsAppList */
+ a = gs_app_new (NULL);
+ gs_app_set_metadata (a, "GnomeSoftware::from-url", url);
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_app (app->shell, a);
+}
+
+static void
+install_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *id;
+ GsShellInteraction interaction;
+ g_autoptr (GsApp) a = NULL;
+
+ g_variant_get (parameter, "(&su)", &id, &interaction);
+ if (!as_utils_unique_id_valid (id)) {
+ g_warning ("Need to use a valid unique-id: %s", id);
+ return;
+ }
+
+ if (interaction == GS_SHELL_INTERACTION_FULL)
+ gs_application_present_window (app, NULL);
+
+ a = gs_plugin_loader_app_create (app->plugin_loader, id);
+ if (a == NULL) {
+ g_warning ("Could not create app from unique-id: %s", id);
+ return;
+ }
+
+ gs_shell_reset_state (app->shell);
+ gs_shell_install (app->shell, a, interaction);
+}
+
+static GFile *
+_copy_file_to_cache (GFile *file_src, GError **error)
+{
+ g_autoptr(GFile) file_dest = NULL;
+ g_autofree gchar *cache_dir = NULL;
+ g_autofree gchar *cache_fn = NULL;
+ g_autofree gchar *basename = NULL;
+
+ /* get destination location */
+ cache_dir = g_dir_make_tmp ("gnome-software-XXXXXX", error);
+ if (cache_dir == NULL)
+ return NULL;
+ basename = g_file_get_basename (file_src);
+ cache_fn = g_build_filename (cache_dir, basename, NULL);
+
+ /* copy file to cache */
+ file_dest = g_file_new_for_path (cache_fn);
+ if (!g_file_copy (file_src, file_dest,
+ G_FILE_COPY_OVERWRITE,
+ NULL, /* cancellable */
+ NULL, NULL, /* progress */
+ error)) {
+ return NULL;
+ }
+ return g_steal_pointer (&file_dest);
+}
+
+static void
+filename_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *filename;
+ g_autoptr(GFile) file = NULL;
+
+ g_variant_get (parameter, "(&s)", &filename);
+
+ /* this could go away at any moment, so make a local copy */
+ if (g_str_has_prefix (filename, "/tmp") ||
+ g_str_has_prefix (filename, "/var/tmp")) {
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GFile) file_src = g_file_new_for_path (filename);
+ file = _copy_file_to_cache (file_src, &error);
+ if (file == NULL) {
+ g_warning ("failed to copy file, falling back to %s: %s",
+ filename, error->message);
+ file = g_file_new_for_path (filename);
+ }
+ } else {
+ file = g_file_new_for_path (filename);
+ }
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_local_file (app->shell, file);
+}
+
+static void
+launch_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *self = GS_APPLICATION (data);
+ const gchar *id;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) refine_job = NULL;
+ g_autoptr(GsPluginJob) launch_job = NULL;
+ g_autoptr(GError) error = NULL;
+
+ id = g_variant_get_string (parameter, NULL);
+ app = gs_app_new (id);
+ refine_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION,
+ NULL);
+ if (!gs_plugin_loader_job_action (self->plugin_loader, refine_job, self->cancellable, &error)) {
+ g_warning ("Failed to refine app: %s", error->message);
+ return;
+ }
+ launch_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_LAUNCH,
+ "app", app,
+ NULL);
+ if (!gs_plugin_loader_job_action (self->plugin_loader, launch_job, self->cancellable, &error)) {
+ g_warning ("Failed to launch app: %s", error->message);
+ return;
+ }
+}
+
+static void
+show_offline_updates_error (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+
+ gs_application_present_window (app, NULL);
+
+ gs_shell_reset_state (app->shell);
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_UPDATES);
+ gs_update_monitor_show_error (app->update_monitor, app->shell);
+}
+
+static void
+autoupdate_activated (GSimpleAction *action, GVariant *parameter, gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ gs_shell_reset_state (app->shell);
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_UPDATES);
+ gs_update_monitor_autoupdate (app->update_monitor);
+}
+
+static void
+install_resources_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ GdkDisplay *display;
+ const gchar *mode;
+ const gchar *startup_id;
+ g_autofree gchar **resources = NULL;
+
+ g_variant_get (parameter, "(&s^a&s&s)", &mode, &resources, &startup_id);
+
+ display = gdk_display_get_default ();
+#ifdef GDK_WINDOWING_X11
+ if (GDK_IS_X11_DISPLAY (display)) {
+ if (startup_id != NULL && startup_id[0] != '\0')
+ gdk_x11_display_set_startup_notification_id (display,
+ startup_id);
+ }
+#endif
+#ifdef GDK_WINDOWING_WAYLAND
+ if (GDK_IS_WAYLAND_DISPLAY (display)) {
+ if (startup_id != NULL && startup_id[0] != '\0')
+ gdk_wayland_display_set_startup_notification_id (display,
+ startup_id);
+ }
+#endif
+
+ gs_application_present_window (app, startup_id);
+
+ gs_shell_reset_state (app->shell);
+ gs_shell_show_extras_search (app->shell, mode, resources);
+}
+
+static GActionEntry actions[] = {
+ { "about", about_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL },
+ { "reboot-and-install", reboot_and_install, NULL, NULL, NULL },
+ { "reboot", reboot_activated, NULL, NULL, NULL },
+ { "shutdown", shutdown_activated, NULL, NULL, NULL },
+ { "launch", launch_activated, "s", NULL, NULL },
+ { "show-offline-update-error", show_offline_updates_error, NULL, NULL, NULL },
+ { "autoupdate", autoupdate_activated, NULL, NULL, NULL },
+ { "nop", NULL, NULL, NULL }
+};
+
+static GActionEntry actions_after_loading[] = {
+ { "sources", sources_activated, NULL, NULL, NULL },
+ { "prefs", prefs_activated, NULL, NULL, NULL },
+ { "set-mode", set_mode_activated, "s", NULL, NULL },
+ { "search", search_activated, "s", NULL, NULL },
+ { "details", details_activated, "(ss)", NULL, NULL },
+ { "details-pkg", details_pkg_activated, "(ss)", NULL, NULL },
+ { "details-url", details_url_activated, "(s)", NULL, NULL },
+ { "install", install_activated, "(su)", NULL, NULL },
+ { "filename", filename_activated, "(s)", NULL, NULL },
+ { "install-resources", install_resources_activated, "(sass)", NULL, NULL },
+ { "nop", NULL, NULL, NULL }
+};
+
+static void
+gs_application_update_software_sources_presence (GApplication *self)
+{
+ GsApplication *app = GS_APPLICATION (self);
+ GSimpleAction *action;
+ gboolean enable_sources;
+
+ action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (self),
+ "sources"));
+ enable_sources = g_settings_get_boolean (app->settings,
+ ENABLE_REPOS_DIALOG_CONF_KEY);
+ g_simple_action_set_enabled (action, enable_sources);
+}
+
+static void
+gs_application_settings_changed_cb (GApplication *self,
+ const gchar *key,
+ gpointer data)
+{
+ if (g_strcmp0 (key, ENABLE_REPOS_DIALOG_CONF_KEY) == 0) {
+ gs_application_update_software_sources_presence (self);
+ }
+}
+
+static void
+gs_application_setup_search_provider (GsApplication *app)
+{
+ gs_application_initialize_plugins (app);
+ gs_shell_search_provider_setup (app->search_provider, app->plugin_loader);
+}
+
+static void
+wrapper_action_activated_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ GsApplication *app = GS_APPLICATION (data);
+ const gchar *action_name = g_action_get_name (G_ACTION (action));
+ GAction *real_action = g_action_map_lookup_action (G_ACTION_MAP (app->action_map),
+ action_name);
+
+ if (app->shell_loaded_handler_id != 0) {
+ GsActivationHelper *helper = gs_activation_helper_new (app,
+ G_SIMPLE_ACTION (real_action),
+ g_variant_ref (parameter));
+
+ g_signal_connect_swapped (app->shell, "loaded",
+ G_CALLBACK (activate_on_shell_loaded_cb), helper);
+ return;
+ }
+
+ g_action_activate (real_action, parameter);
+}
+
+static void
+gs_application_add_wrapper_actions (GApplication *application)
+{
+ GsApplication *app = GS_APPLICATION (application);
+ GActionMap *map = NULL;
+
+ app->action_map = g_simple_action_group_new ();
+ map = G_ACTION_MAP (app->action_map);
+
+ /* add the real actions to a different map and add wrapper actions to the
+ * application instead; the wrapper actions will call the real ones but
+ * after the "loading state" has finished */
+
+ g_action_map_add_action_entries (G_ACTION_MAP (map), actions_after_loading,
+ G_N_ELEMENTS (actions_after_loading),
+ application);
+
+ for (guint i = 0; i < G_N_ELEMENTS (actions_after_loading); ++i) {
+ const GActionEntry *entry = &actions_after_loading[i];
+ GAction *action = g_action_map_lookup_action (map, entry->name);
+ g_autoptr (GSimpleAction) simple_action = NULL;
+
+ simple_action = g_simple_action_new (g_action_get_name (action),
+ g_action_get_parameter_type (action));
+ g_signal_connect (simple_action, "activate",
+ G_CALLBACK (wrapper_action_activated_cb),
+ application);
+ g_object_bind_property (simple_action, "enabled", action,
+ "enabled", G_BINDING_DEFAULT);
+ g_action_map_add_action (G_ACTION_MAP (application),
+ G_ACTION (simple_action));
+ }
+}
+
+static void
+gs_application_startup (GApplication *application)
+{
+ GSettings *settings;
+ GsApplication *app = GS_APPLICATION (application);
+ G_APPLICATION_CLASS (gs_application_parent_class)->startup (application);
+
+ gs_application_add_wrapper_actions (application);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (application),
+ actions, G_N_ELEMENTS (actions),
+ application);
+
+ gs_application_setup_search_provider (GS_APPLICATION (application));
+
+#ifdef HAVE_PACKAGEKIT
+ GS_APPLICATION (application)->dbus_helper = gs_dbus_helper_new ();
+#endif
+ settings = g_settings_new ("org.gnome.software");
+ GS_APPLICATION (application)->settings = settings;
+ g_signal_connect_swapped (settings, "changed",
+ G_CALLBACK (gs_application_settings_changed_cb),
+ application);
+
+ gs_application_initialize_ui (app);
+
+ GS_APPLICATION (application)->update_monitor =
+ gs_update_monitor_new (GS_APPLICATION (application));
+ gs_folders_convert ();
+
+ gs_application_update_software_sources_presence (application);
+}
+
+static void
+gs_application_activate (GApplication *application)
+{
+ GsApplication *app = GS_APPLICATION (application);
+
+ if (app->shell_loaded_handler_id == 0)
+ gs_shell_set_mode (app->shell, GS_SHELL_MODE_OVERVIEW);
+
+ gs_shell_activate (GS_APPLICATION (application)->shell);
+
+ gs_application_show_first_run_dialog (GS_APPLICATION (application));
+}
+
+static void
+gs_application_dispose (GObject *object)
+{
+ GsApplication *app = GS_APPLICATION (object);
+
+ g_cancellable_cancel (app->cancellable);
+ g_clear_object (&app->cancellable);
+
+ g_clear_object (&app->plugin_loader);
+ g_clear_object (&app->shell);
+ g_clear_object (&app->provider);
+ g_clear_object (&app->update_monitor);
+#ifdef HAVE_PACKAGEKIT
+ g_clear_object (&app->dbus_helper);
+#endif
+ g_clear_object (&app->settings);
+ g_clear_object (&app->action_map);
+
+ G_OBJECT_CLASS (gs_application_parent_class)->dispose (object);
+}
+
+static GsShellInteraction
+get_page_interaction_from_string (const gchar *interaction)
+{
+ if (g_strcmp0 (interaction, "notify") == 0)
+ return GS_SHELL_INTERACTION_NOTIFY;
+ else if (g_strcmp0 (interaction, "none") == 0)
+ return GS_SHELL_INTERACTION_NONE;
+ return GS_SHELL_INTERACTION_FULL;
+}
+
+static int
+gs_application_handle_local_options (GApplication *app, GVariantDict *options)
+{
+ const gchar *id;
+ const gchar *pkgname;
+ const gchar *local_filename;
+ const gchar *mode;
+ const gchar *search;
+ gint rc = -1;
+ g_autoptr(GError) error = NULL;
+
+ if (g_variant_dict_contains (options, "verbose"))
+ g_setenv ("GS_DEBUG", "1", TRUE);
+
+ /* prefer local sources */
+ if (g_variant_dict_contains (options, "prefer-local"))
+ g_setenv ("GNOME_SOFTWARE_PREFER_LOCAL", "true", TRUE);
+
+ if (g_variant_dict_contains (options, "version")) {
+ g_print ("gnome-software " VERSION "\n");
+ return 0;
+ }
+
+ if (!g_application_register (app, NULL, &error)) {
+ g_printerr ("%s\n", error->message);
+ return 1;
+ }
+
+ if (g_variant_dict_contains (options, "autoupdate")) {
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "autoupdate",
+ NULL);
+ }
+ if (g_variant_dict_contains (options, "prefs")) {
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "prefs",
+ NULL);
+ }
+ if (g_variant_dict_contains (options, "quit")) {
+ /* The 'quit' command-line option shuts down everything,
+ * including the backend service */
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "shutdown",
+ NULL);
+ return 0;
+ }
+
+ if (g_variant_dict_lookup (options, "mode", "&s", &mode)) {
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "set-mode",
+ g_variant_new_string (mode));
+ rc = 0;
+ } else if (g_variant_dict_lookup (options, "search", "&s", &search)) {
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "search",
+ g_variant_new_string (search));
+ rc = 0;
+ } else if (g_variant_dict_lookup (options, "details", "&s", &id)) {
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "details",
+ g_variant_new ("(ss)", id, ""));
+ rc = 0;
+ } else if (g_variant_dict_lookup (options, "details-pkg", "&s", &pkgname)) {
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "details-pkg",
+ g_variant_new ("(ss)", pkgname, ""));
+ rc = 0;
+ } else if (g_variant_dict_lookup (options, "install", "&s", &id)) {
+ GsShellInteraction interaction = GS_SHELL_INTERACTION_FULL;
+ const gchar *str_interaction = NULL;
+
+ if (g_variant_dict_lookup (options, "interaction", "&s",
+ &str_interaction))
+ interaction = get_page_interaction_from_string (str_interaction);
+
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "install",
+ g_variant_new ("(su)", id,
+ interaction));
+ rc = 0;
+ } else if (g_variant_dict_lookup (options, "local-filename", "^&ay", &local_filename)) {
+ g_autoptr(GFile) file = NULL;
+ g_autofree gchar *absolute_filename = NULL;
+
+ file = g_file_new_for_path (local_filename);
+ absolute_filename = g_file_get_path (file);
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "filename",
+ g_variant_new ("(s)", absolute_filename));
+ rc = 0;
+ }
+
+ return rc;
+}
+
+static void
+gs_application_open (GApplication *application,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GsApplication *app = GS_APPLICATION (application);
+ gint i;
+
+ for (i = 0; i < n_files; i++) {
+ g_autofree gchar *str = g_file_get_uri (files[i]);
+ g_action_group_activate_action (G_ACTION_GROUP (app),
+ "details-url",
+ g_variant_new ("(s)", str));
+ }
+}
+
+static void
+gs_application_class_init (GsApplicationClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = gs_application_dispose;
+ G_APPLICATION_CLASS (class)->startup = gs_application_startup;
+ G_APPLICATION_CLASS (class)->activate = gs_application_activate;
+ G_APPLICATION_CLASS (class)->handle_local_options = gs_application_handle_local_options;
+ G_APPLICATION_CLASS (class)->open = gs_application_open;
+ G_APPLICATION_CLASS (class)->dbus_register = gs_application_dbus_register;
+ G_APPLICATION_CLASS (class)->dbus_unregister = gs_application_dbus_unregister;
+}
+
+GsApplication *
+gs_application_new (void)
+{
+ return g_object_new (GS_APPLICATION_TYPE,
+ "application-id", "org.gnome.Software",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ "inactivity-timeout", 12000,
+ NULL);
+}
diff --git a/src/gs-application.h b/src/gs-application.h
new file mode 100644
index 0000000..dd56509
--- /dev/null
+++ b/src/gs-application.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+#define GS_APPLICATION_TYPE (gs_application_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsApplication, gs_application, GS, APPLICATION, GtkApplication)
+
+GsApplication *gs_application_new (void);
+GsPluginLoader *gs_application_get_plugin_loader (GsApplication *application);
+gboolean gs_application_has_active_window (GsApplication *application);
diff --git a/src/gs-basic-auth-dialog.c b/src/gs-basic-auth-dialog.c
new file mode 100644
index 0000000..4c3f0b0
--- /dev/null
+++ b/src/gs-basic-auth-dialog.c
@@ -0,0 +1,131 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-basic-auth-dialog.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+struct _GsBasicAuthDialog
+{
+ GtkDialog parent_instance;
+
+ GsBasicAuthCallback callback;
+ gpointer callback_data;
+
+ /* template widgets */
+ GtkButton *login_button;
+ GtkLabel *description_label;
+ GtkEntry *user_entry;
+ GtkEntry *password_entry;
+};
+
+G_DEFINE_TYPE (GsBasicAuthDialog, gs_basic_auth_dialog, GTK_TYPE_DIALOG)
+
+static void
+cancel_button_clicked_cb (GsBasicAuthDialog *dialog)
+{
+ /* abort the basic auth request */
+ dialog->callback (NULL, NULL, dialog->callback_data);
+
+ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL);
+}
+
+static void
+login_button_clicked_cb (GsBasicAuthDialog *dialog)
+{
+ const gchar *user;
+ const gchar *password;
+
+ user = gtk_entry_get_text (dialog->user_entry);
+ password = gtk_entry_get_text (dialog->password_entry);
+
+ /* submit the user/password to basic auth */
+ dialog->callback (user, password, dialog->callback_data);
+
+ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+}
+
+static void
+dialog_validate (GsBasicAuthDialog *dialog)
+{
+ const gchar *user;
+ const gchar *password;
+ gboolean valid_user;
+ gboolean valid_password;
+
+ /* require user */
+ user = gtk_entry_get_text (dialog->user_entry);
+ valid_user = user != NULL && strlen (user) != 0;
+
+ /* require password */
+ password = gtk_entry_get_text (dialog->password_entry);
+ valid_password = password != NULL && strlen (password) != 0;
+
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->login_button), valid_user && valid_password);
+}
+
+static void
+update_description (GsBasicAuthDialog *dialog, const gchar *remote, const gchar *realm)
+{
+ g_autofree gchar *description = NULL;
+
+ /* TRANSLATORS: This is a description for entering user/password */
+ description = g_strdup_printf (_("Login required remote %s (realm %s)"),
+ remote, realm);
+ gtk_label_set_text (dialog->description_label, description);
+}
+
+static void
+gs_basic_auth_dialog_init (GsBasicAuthDialog *dialog)
+{
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+}
+
+static void
+gs_basic_auth_dialog_class_init (GsBasicAuthDialogClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-basic-auth-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, login_button);
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, description_label);
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, user_entry);
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, password_entry);
+
+ gtk_widget_class_bind_template_callback (widget_class, dialog_validate);
+ gtk_widget_class_bind_template_callback (widget_class, cancel_button_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, login_button_clicked_cb);
+}
+
+GtkWidget *
+gs_basic_auth_dialog_new (GtkWindow *parent,
+ const gchar *remote,
+ const gchar *realm,
+ GsBasicAuthCallback callback,
+ gpointer callback_data)
+{
+ GsBasicAuthDialog *dialog;
+
+ dialog = g_object_new (GS_TYPE_BASIC_AUTH_DIALOG,
+ "use-header-bar", TRUE,
+ "transient-for", parent,
+ "modal", TRUE,
+ NULL);
+ dialog->callback = callback;
+ dialog->callback_data = callback_data;
+
+ update_description (dialog, remote, realm);
+ dialog_validate (dialog);
+
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-basic-auth-dialog.h b/src/gs-basic-auth-dialog.h
new file mode 100644
index 0000000..9c07778
--- /dev/null
+++ b/src/gs-basic-auth-dialog.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+typedef void (*GsBasicAuthCallback) (const gchar *user, const gchar *password, gpointer callback_data);
+
+#define GS_TYPE_BASIC_AUTH_DIALOG (gs_basic_auth_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsBasicAuthDialog, gs_basic_auth_dialog, GS, BASIC_AUTH_DIALOG, GtkDialog)
+
+GtkWidget *gs_basic_auth_dialog_new (GtkWindow *parent,
+ const gchar *remote,
+ const gchar *realm,
+ GsBasicAuthCallback callback,
+ gpointer callback_data);
+
+G_END_DECLS
diff --git a/src/gs-basic-auth-dialog.ui b/src/gs-basic-auth-dialog.ui
new file mode 100644
index 0000000..339e831
--- /dev/null
+++ b/src/gs-basic-auth-dialog.ui
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GsBasicAuthDialog" parent="GtkDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="title" translatable="yes">Login Required</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">False</property>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="visible">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="cancel_button_clicked_cb" object="GsBasicAuthDialog" swapped="yes"/>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="login_button">
+ <property name="label" translatable="yes">_Login</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="login_button_clicked_cb" object="GsBasicAuthDialog" swapped="yes"/>
+ <style>
+ <class name="text-button"/>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="row_spacing">8</property>
+ <property name="column_spacing">6</property>
+ <property name="border_width">20</property>
+ <property name="margin_end">20</property>
+ <child>
+ <object class="GtkLabel" id="description_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="margin_bottom">20</property>
+ <property name="max_width_chars">55</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="user_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_User</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">user_entry</property>
+ <property name="margin_start">20</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="password_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password_entry</property>
+ <property name="margin_start">20</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="user_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <property name="input_purpose">password</property>
+ <signal name="changed" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ <signal name="activate" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <property name="input_purpose">password</property>
+ <signal name="changed" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ <signal name="activate" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkSizeGroup">
+ <widgets>
+ <widget name="user_label"/>
+ <widget name="password_label"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup">
+ <widgets>
+ <widget name="user_entry"/>
+ <widget name="password_entry"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="login_button"/>
+ <widget name="cancel_button"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/gs-category-page.c b/src/gs-category-page.c
new file mode 100644
index 0000000..0608ac8
--- /dev/null
+++ b/src/gs-category-page.c
@@ -0,0 +1,594 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "gs-app-list-private.h"
+#include "gs-common.h"
+#include "gs-summary-tile.h"
+#include "gs-popular-tile.h"
+#include "gs-category-page.h"
+#include "gs-utils.h"
+
+typedef enum {
+ SUBCATEGORY_SORT_TYPE_RATING,
+ SUBCATEGORY_SORT_TYPE_NAME
+} SubcategorySortType;
+
+struct _GsCategoryPage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *cancellable;
+ GsShell *shell;
+ GsCategory *category;
+ GsCategory *subcategory;
+ guint sort_rating_handler_id;
+ guint sort_name_handler_id;
+ SubcategorySortType sort_type;
+
+ GtkWidget *category_detail_box;
+ GtkWidget *scrolledwindow_category;
+ GtkWidget *subcats_filter_label;
+ GtkWidget *subcats_filter_button_label;
+ GtkWidget *subcats_filter_button;
+ GtkWidget *popover_filter_box;
+ GtkWidget *subcats_sort_label;
+ GtkWidget *subcats_sort_button;
+ GtkWidget *subcats_sort_button_label;
+ GtkWidget *sort_rating_button;
+ GtkWidget *sort_name_button;
+ GtkWidget *featured_grid;
+ GtkWidget *featured_heading;
+ GtkWidget *header_filter_box;
+};
+
+G_DEFINE_TYPE (GsCategoryPage, gs_category_page, GS_TYPE_PAGE)
+
+static void
+gs_category_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (page);
+ GtkWidget *widget;
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
+ gtk_widget_show (widget);
+ gtk_label_set_label (GTK_LABEL (widget), gs_category_get_name (self->category));
+}
+
+static void
+app_tile_clicked (GsAppTile *tile, gpointer data)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (data);
+ GsApp *app;
+
+ app = gs_app_tile_get_app (tile);
+ gs_shell_show_app (self->shell, app);
+}
+
+static void
+gs_category_page_sort_by_type (GsCategoryPage *self,
+ SubcategorySortType sort_type)
+{
+ g_autofree gchar *button_label;
+
+ if (sort_type == SUBCATEGORY_SORT_TYPE_NAME)
+ g_object_get (self->sort_name_button, "text", &button_label, NULL);
+ else
+ g_object_get (self->sort_rating_button, "text", &button_label, NULL);
+
+ gtk_label_set_text (GTK_LABEL (self->subcats_sort_button_label), button_label);
+
+ /* only sort again if the sort type is different */
+ if (self->sort_type == sort_type)
+ return;
+
+ self->sort_type = sort_type;
+ gtk_flow_box_invalidate_sort (GTK_FLOW_BOX (self->category_detail_box));
+}
+
+static void
+sort_button_clicked (GtkButton *button, gpointer data)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (data);
+
+ if (button == GTK_BUTTON (self->sort_rating_button))
+ gs_category_page_sort_by_type (self, SUBCATEGORY_SORT_TYPE_RATING);
+ else
+ gs_category_page_sort_by_type (self, SUBCATEGORY_SORT_TYPE_NAME);
+}
+
+static GtkWidget *
+make_addon_tile_for_category (GsApp *app, GsCategory *category)
+{
+ if (g_strcmp0 (gs_category_get_id (category), "fonts") == 0)
+ return gs_popular_tile_new (app);
+
+ return gs_summary_tile_new (app);
+}
+
+static void
+gs_category_page_get_apps_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ guint i;
+ GsApp *app;
+ GtkWidget *tile;
+ GsCategoryPage *self = GS_CATEGORY_PAGE (user_data);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* show an empty space for no results */
+ gs_container_remove_all (GTK_CONTAINER (self->category_detail_box));
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get apps for category apps: %s", error->message);
+ return;
+ }
+
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ if (g_strcmp0 (gs_category_get_id (self->category), "addons") == 0) {
+ tile = make_addon_tile_for_category (app, self->subcategory);
+ } else {
+ tile = gs_popular_tile_new (app);
+ }
+
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_container_add (GTK_CONTAINER (self->category_detail_box), tile);
+ gtk_widget_set_can_focus (gtk_widget_get_parent (tile), FALSE);
+ }
+
+ g_signal_handler_unblock (self->sort_rating_button, self->sort_rating_handler_id);
+ g_signal_handler_unblock (self->sort_name_button, self->sort_name_handler_id);
+}
+
+static gboolean
+_max_results_sort_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ return gs_app_get_rating (app1) < gs_app_get_rating (app2);
+}
+
+static gint
+gs_category_page_sort_flow_box_sort_func (GtkFlowBoxChild *child1,
+ GtkFlowBoxChild *child2,
+ gpointer data)
+{
+ GsApp *app1 = gs_app_tile_get_app (GS_APP_TILE (gtk_bin_get_child (GTK_BIN (child1))));
+ GsApp *app2 = gs_app_tile_get_app (GS_APP_TILE (gtk_bin_get_child (GTK_BIN (child2))));
+ SubcategorySortType sort_type;
+
+ if (!GS_IS_APP (app1) || !GS_IS_APP (app2))
+ return 0;
+
+ sort_type = GS_CATEGORY_PAGE (data)->sort_type;
+
+ if (sort_type == SUBCATEGORY_SORT_TYPE_RATING) {
+ gint rating_app1 = gs_app_get_rating (app1);
+ gint rating_app2 = gs_app_get_rating (app2);
+ if (rating_app1 > rating_app2)
+ return -1;
+ if (rating_app1 < rating_app2)
+ return 1;
+ }
+
+ return gs_utils_sort_strcmp (gs_app_get_name (app1), gs_app_get_name (app2));
+}
+
+static void
+gs_category_page_set_featured_placeholders (GsCategoryPage *self)
+{
+ gs_container_remove_all (GTK_CONTAINER (self->featured_grid));
+ for (guint i = 0; i < 3; ++i) {
+ GtkWidget *tile = gs_summary_tile_new (NULL);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_grid_attach (GTK_GRID (self->featured_grid), tile, i, 0, 1, 1);
+ gtk_widget_set_can_focus (gtk_widget_get_parent (tile), FALSE);
+ }
+ gtk_widget_show (self->featured_grid);
+}
+
+static void
+gs_category_page_get_featured_apps_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsApp *app;
+ GtkWidget *tile;
+ GsCategoryPage *self = GS_CATEGORY_PAGE (user_data);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ gs_container_remove_all (GTK_CONTAINER (self->featured_grid));
+ gtk_widget_hide (self->featured_grid);
+ gtk_widget_hide (self->featured_heading);
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get featured apps for category apps: %s", error->message);
+ return;
+ }
+ if (gs_app_list_length (list) < 3) {
+ g_debug ("not enough featured apps for category %s; not showing featured apps!",
+ gs_category_get_id (self->category));
+ return;
+ }
+
+ /* randomize so we show different featured apps every time */
+ gs_app_list_randomize (list);
+
+ for (guint i = 0; i < 3; ++i) {
+ app = gs_app_list_index (list, i);
+ tile = gs_summary_tile_new (app);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_grid_attach (GTK_GRID (self->featured_grid), tile, i, 0, 1, 1);
+ gtk_widget_set_can_focus (gtk_widget_get_parent (tile), FALSE);
+ }
+
+ gtk_widget_show (self->featured_grid);
+ gtk_widget_show (self->featured_heading);
+}
+
+static void
+gs_category_page_set_featured_apps (GsCategoryPage *self)
+{
+ GsCategory *featured_subcat = NULL;
+ GPtrArray *children = gs_category_get_children (self->category);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ for (guint i = 0; i < children->len; ++i) {
+ GsCategory *sub = GS_CATEGORY (g_ptr_array_index (children, i));
+ if (g_strcmp0 (gs_category_get_id (sub), "featured") == 0) {
+ featured_subcat = sub;
+ break;
+ }
+ }
+
+ if (featured_subcat == NULL)
+ return;
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_CATEGORY_APPS,
+ "interactive", TRUE,
+ "category", featured_subcat,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader,
+ plugin_job,
+ self->cancellable,
+ gs_category_page_get_featured_apps_cb,
+ self);
+}
+
+static void
+gs_category_page_reload (GsPage *page)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (page);
+ GtkWidget *tile;
+ guint i, count;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ if (self->subcategory == NULL)
+ return;
+
+ g_cancellable_cancel (self->cancellable);
+ g_clear_object (&self->cancellable);
+ self->cancellable = g_cancellable_new ();
+
+ g_debug ("search using %s/%s",
+ gs_category_get_id (self->category),
+ gs_category_get_id (self->subcategory));
+
+ /* don't show the sort button on addons that cannot be rated */
+ if (g_strcmp0 (gs_category_get_id (self->category), "addons") == 0) {
+ gtk_widget_set_visible (self->subcats_sort_label, FALSE);
+ gtk_widget_set_visible (self->subcats_sort_button, FALSE);
+
+ } else {
+ gtk_widget_set_visible (self->subcats_sort_label, TRUE);
+ gtk_widget_set_visible (self->subcats_sort_button, TRUE);
+ }
+
+ g_signal_handler_block (self->sort_rating_button, self->sort_rating_handler_id);
+ g_signal_handler_block (self->sort_name_button, self->sort_name_handler_id);
+
+ gs_container_remove_all (GTK_CONTAINER (self->category_detail_box));
+
+ /* just ensure the sort button has the correct label */
+ gs_category_page_sort_by_type (self, self->sort_type);
+
+ count = MIN(30, gs_category_get_size (self->subcategory));
+ for (i = 0; i < count; i++) {
+ if (g_strcmp0 (gs_category_get_id (self->category), "addons") == 0)
+ tile = make_addon_tile_for_category (NULL, self->subcategory);
+ else
+ tile = gs_popular_tile_new (NULL);
+ gtk_container_add (GTK_CONTAINER (self->category_detail_box), tile);
+ gtk_widget_set_can_focus (gtk_widget_get_parent (tile), FALSE);
+ }
+
+ gs_category_page_set_featured_apps (self);
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_CATEGORY_APPS,
+ "category", self->subcategory,
+ "filter-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_job_set_sort_func (plugin_job, _max_results_sort_cb);
+ gs_plugin_loader_job_process_async (self->plugin_loader,
+ plugin_job,
+ self->cancellable,
+ gs_category_page_get_apps_cb,
+ self);
+}
+
+static void
+gs_category_page_populate_filtered (GsCategoryPage *self, GsCategory *subcategory)
+{
+ g_assert (subcategory != NULL);
+ g_set_object (&self->subcategory, subcategory);
+ gs_category_page_reload (GS_PAGE (self));
+}
+
+static void
+filter_button_activated (GtkWidget *button, gpointer data)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (data);
+ GsCategory *category;
+
+ category = g_object_get_data (G_OBJECT (button), "category");
+
+ gtk_label_set_text (GTK_LABEL (self->subcats_filter_button_label),
+ gs_category_get_name (category));
+ gs_category_page_populate_filtered (self, category);
+}
+
+static gboolean
+gs_category_page_should_use_header_filter (GsCategory *category)
+{
+ return g_strcmp0 (gs_category_get_id (category), "addons") == 0;
+}
+
+static void
+gs_category_page_create_filter (GsCategoryPage *self,
+ GsCategory *category)
+{
+ GtkWidget *button = NULL;
+ GsCategory *s;
+ guint i;
+ GPtrArray *children;
+ GtkWidget *first_subcat = NULL;
+ gboolean featured_category_found = FALSE;
+ gboolean use_header_filter = gs_category_page_should_use_header_filter (category);
+
+ gs_container_remove_all (GTK_CONTAINER (self->category_detail_box));
+ gs_container_remove_all (GTK_CONTAINER (self->header_filter_box));
+ gs_container_remove_all (GTK_CONTAINER (self->popover_filter_box));
+
+ children = gs_category_get_children (category);
+ for (i = 0; i < children->len; i++) {
+ s = GS_CATEGORY (g_ptr_array_index (children, i));
+ /* don't include the featured subcategory (those will appear as banners) */
+ if (g_strcmp0 (gs_category_get_id (s), "featured") == 0) {
+ featured_category_found = TRUE;
+ continue;
+ }
+ if (gs_category_get_size (s) < 1) {
+ g_debug ("not showing %s/%s as no apps",
+ gs_category_get_id (category),
+ gs_category_get_id (s));
+ continue;
+ }
+
+ /* create the right button type depending on where it will be used */
+ if (use_header_filter) {
+ if (button == NULL)
+ button = gtk_radio_button_new (NULL);
+ else
+ button = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON (button));
+ g_object_set (button, "xalign", 0.5, "label", gs_category_get_name (s),
+ "draw-indicator", FALSE, "relief", GTK_RELIEF_NONE, NULL);
+ gtk_container_add (GTK_CONTAINER (self->header_filter_box), button);
+ } else {
+ button = gtk_model_button_new ();
+ g_object_set (button, "xalign", 0.0, "text", gs_category_get_name (s), NULL);
+ gtk_container_add (GTK_CONTAINER (self->popover_filter_box), button);
+ }
+
+ g_object_set_data_full (G_OBJECT (button), "category", g_object_ref (s), g_object_unref);
+ gtk_widget_show (button);
+ g_signal_connect (button, "clicked", G_CALLBACK (filter_button_activated), self);
+
+ /* make sure the first subcategory gets selected */
+ if (first_subcat == NULL)
+ first_subcat = button;
+ }
+ if (first_subcat != NULL)
+ filter_button_activated (first_subcat, self);
+
+ /* show only the adequate filter */
+ gtk_widget_set_visible (self->subcats_filter_label, !use_header_filter);
+ gtk_widget_set_visible (self->subcats_filter_button, !use_header_filter);
+ gtk_widget_set_visible (self->header_filter_box, use_header_filter);
+
+ if (featured_category_found) {
+ g_autofree gchar *featured_heading = NULL;
+
+ /* set up the placeholders as having the featured category is a good
+ * indicator that there will be featured apps */
+ gs_category_page_set_featured_placeholders (self);
+
+ /* TRANSLATORS: This is a heading on the categories page. %s gets
+ replaced by the category name, e.g. 'Graphics & Photography' */
+ featured_heading = g_strdup_printf (_("Featured %s"), gs_category_get_name (self->category));
+ gtk_label_set_label (GTK_LABEL (self->featured_heading), featured_heading);
+ gtk_widget_show (self->featured_heading);
+ } else {
+ gs_container_remove_all (GTK_CONTAINER (self->featured_grid));
+ gtk_widget_hide (self->featured_grid);
+ gtk_widget_hide (self->featured_heading);
+ }
+}
+
+void
+gs_category_page_set_category (GsCategoryPage *self, GsCategory *category)
+{
+ GtkAdjustment *adj = NULL;
+
+ /* this means we've come from the app-view -> back */
+ if (self->category == category)
+ return;
+
+ /* save this */
+ g_clear_object (&self->category);
+ self->category = g_object_ref (category);
+
+ /* find apps in this group */
+ gs_category_page_create_filter (self, category);
+
+ /* scroll the list of apps to the beginning, otherwise it will show
+ * with the previous scroll value */
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_category));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+}
+
+GsCategory *
+gs_category_page_get_category (GsCategoryPage *self)
+{
+ return self->category;
+}
+
+static void
+gs_category_page_init (GsCategoryPage *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+static void
+gs_category_page_dispose (GObject *object)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (object);
+
+ g_cancellable_cancel (self->cancellable);
+ g_clear_object (&self->cancellable);
+
+ if (self->sort_rating_handler_id > 0) {
+ g_signal_handler_disconnect (self->sort_rating_button,
+ self->sort_rating_handler_id);
+ self->sort_rating_handler_id = 0;
+ }
+
+ if (self->sort_name_handler_id > 0) {
+ g_signal_handler_disconnect (self->sort_name_button,
+ self->sort_name_handler_id);
+ self->sort_name_handler_id = 0;
+ }
+
+ g_clear_object (&self->builder);
+ g_clear_object (&self->category);
+ g_clear_object (&self->subcategory);
+ g_clear_object (&self->plugin_loader);
+
+ G_OBJECT_CLASS (gs_category_page_parent_class)->dispose (object);
+}
+
+static gboolean
+gs_category_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsCategoryPage *self = GS_CATEGORY_PAGE (page);
+ GtkAdjustment *adj;
+
+ self->plugin_loader = g_object_ref (plugin_loader);
+ self->builder = g_object_ref (builder);
+ self->shell = shell;
+ self->sort_type = SUBCATEGORY_SORT_TYPE_RATING;
+ gtk_flow_box_set_sort_func (GTK_FLOW_BOX (self->category_detail_box),
+ gs_category_page_sort_flow_box_sort_func,
+ self, NULL);
+
+ self->sort_rating_handler_id = g_signal_connect (self->sort_rating_button,
+ "clicked",
+ G_CALLBACK (sort_button_clicked),
+ self);
+ self->sort_name_handler_id = g_signal_connect (self->sort_name_button,
+ "clicked",
+ G_CALLBACK (sort_button_clicked),
+ self);
+
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_category));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (self->category_detail_box), adj);
+ return TRUE;
+}
+
+static void
+gs_category_page_class_init (GsCategoryPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_category_page_dispose;
+ page_class->switch_to = gs_category_page_switch_to;
+ page_class->reload = gs_category_page_reload;
+ page_class->setup = gs_category_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-category-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, category_detail_box);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, scrolledwindow_category);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, subcats_filter_label);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, subcats_filter_button_label);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, subcats_filter_button);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, popover_filter_box);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, subcats_sort_label);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, subcats_sort_button);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, subcats_sort_button_label);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, sort_rating_button);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, sort_name_button);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, featured_grid);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, featured_heading);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryPage, header_filter_box);
+}
+
+GsCategoryPage *
+gs_category_page_new (void)
+{
+ GsCategoryPage *self;
+ self = g_object_new (GS_TYPE_CATEGORY_PAGE, NULL);
+ return self;
+}
diff --git a/src/gs-category-page.h b/src/gs-category-page.h
new file mode 100644
index 0000000..98bf197
--- /dev/null
+++ b/src/gs-category-page.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_CATEGORY_PAGE (gs_category_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsCategoryPage, gs_category_page, GS, CATEGORY_PAGE, GsPage)
+
+GsCategoryPage *gs_category_page_new (void);
+void gs_category_page_set_category (GsCategoryPage *self,
+ GsCategory *category);
+GsCategory *gs_category_page_get_category (GsCategoryPage *self);
+
+G_END_DECLS
diff --git a/src/gs-category-page.ui b/src/gs-category-page.ui
new file mode 100644
index 0000000..cbb8284
--- /dev/null
+++ b/src/gs-category-page.ui
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <object class="GtkPopover" id="categories_popover">
+ <property name="visible">False</property>
+ <property name="position">bottom</property>
+ <child>
+ <object class="GtkBox" id="popover_filter_box">
+ <property name="visible">True</property>
+ <property name="margin">10</property>
+ <property name="orientation">vertical</property>
+ </object>
+ </child>
+ </object>
+ <object class="GtkPopover" id="sorting_popover">
+ <property name="visible">False</property>
+ <property name="position">bottom</property>
+ <child>
+ <object class="GtkBox" id="sorting_popover_box">
+ <property name="visible">True</property>
+ <property name="margin">10</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkModelButton" id="sort_rating_button">
+ <property name="visible">True</property>
+ <property name="text" translatable="yes" comments="Translators: A label for a button to sort apps by their rating.">Rating</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkModelButton" id="sort_name_button">
+ <property name="visible">True</property>
+ <property name="text" translatable="yes" comments="Translators: A label for a button to sort apps alphabetically.">Name</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <template class="GsCategoryPage" parent="GsPage">
+ <child>
+ <object class="GtkBox" id="box_category">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="box_category_results">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_category">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="viewport3">
+ <property name="visible">True</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <!-- This is 3*420 plus margins, paddings, CSS borders -->
+ <property name="preferred-width">1338</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">9</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkBox" id="header_filter_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="homogeneous">True</property>
+ <style>
+ <class name="category_page_header_filter_box"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="featured_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="margin_start">24</property>
+ <property name="margin_top">24</property>
+ <property name="margin_end">24</property>
+ <accessibility>
+ <relation target="featured_grid" type="label-for"/>
+ </accessibility>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="featured_grid">
+ <property name="visible">False</property>
+ <property name="column_spacing">14</property>
+ <property name="margin_start">24</property>
+ <property name="margin_end">24</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="margin_start">24</property>
+ <property name="margin_end">24</property>
+ <property name="margin_top">36</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkLabel" id="subcats_filter_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="TRANSLATORS: This is a label for the category filter drop down, which all together can read e.g. 'Show Vector Graphics'.">Show</property>
+ <property name="margin_start">2</property>
+ <accessibility>
+ <relation target="subcats_filter_button" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="subcats_filter_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">normal</property>
+ <property name="popover">categories_popover</property>
+ <property name="margin_end">24</property>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Subcategories filter menu</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="grid1">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="spacing">6</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkLabel" id="subcats_filter_button_label">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkArrow" id="arrow1">
+ <property name="visible">True</property>
+ <property name="arrow_type">down</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subcats_sort_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="TRANSLATORS: This is a label for the category sort drop down, which all together can read e.g. 'Sort Top Rated'.">Sort</property>
+ <property name="margin_start">2</property>
+ <accessibility>
+ <relation target="subcats_sort_button" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="subcats_sort_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">normal</property>
+ <property name="popover">sorting_popover</property>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Subcategories sorting menu</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="grid2">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="spacing">6</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkLabel" id="subcats_sort_button_label">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkArrow" id="arrow2">
+ <property name="visible">True</property>
+ <property name="arrow_type">down</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkFlowBox" id="category_detail_box">
+ <property name="margin_start">24</property>
+ <property name="margin_end">24</property>
+ <property name="margin_top">14</property>
+ <property name="margin_bottom">21</property>
+ <property name="halign">fill</property>
+ <property name="visible">True</property>
+ <property name="row_spacing">14</property>
+ <property name="column_spacing">14</property>
+ <property name="homogeneous">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="valign">start</property>
+ <property name="min-children-per-line">2</property>
+ <property name="selection-mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkSizeGroup">
+ <property name="ignore-hidden">False</property>
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="subcats_filter_button_label"/>
+ <widget name="popover_filter_box"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup">
+ <property name="ignore-hidden">False</property>
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="subcats_sort_button_label"/>
+ <widget name="sorting_popover_box"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/gs-category-tile.c b/src/gs-category-tile.c
new file mode 100644
index 0000000..b434478
--- /dev/null
+++ b/src/gs-category-tile.c
@@ -0,0 +1,93 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-category-tile.h"
+#include "gs-common.h"
+
+struct _GsCategoryTile
+{
+ GtkButton parent_instance;
+
+ GsCategory *cat;
+ GtkWidget *label;
+ GtkWidget *image;
+};
+
+G_DEFINE_TYPE (GsCategoryTile, gs_category_tile, GTK_TYPE_BUTTON)
+
+GsCategory *
+gs_category_tile_get_category (GsCategoryTile *tile)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY_TILE (tile), NULL);
+
+ return tile->cat;
+}
+
+static void
+gs_category_tile_refresh (GsCategoryTile *tile)
+{
+ /* set labels */
+ gtk_label_set_label (GTK_LABEL (tile->label),
+ gs_category_get_name (tile->cat));
+ gtk_image_set_from_icon_name (GTK_IMAGE (tile->image),
+ gs_category_get_icon (tile->cat),
+ GTK_ICON_SIZE_MENU);
+}
+
+void
+gs_category_tile_set_category (GsCategoryTile *tile, GsCategory *cat)
+{
+ g_return_if_fail (GS_IS_CATEGORY_TILE (tile));
+ g_return_if_fail (GS_IS_CATEGORY (cat));
+
+ g_set_object (&tile->cat, cat);
+ gs_category_tile_refresh (tile);
+}
+
+static void
+gs_category_tile_destroy (GtkWidget *widget)
+{
+ GsCategoryTile *tile = GS_CATEGORY_TILE (widget);
+
+ g_clear_object (&tile->cat);
+
+ GTK_WIDGET_CLASS (gs_category_tile_parent_class)->destroy (widget);
+}
+
+static void
+gs_category_tile_init (GsCategoryTile *tile)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (tile), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (tile));
+}
+
+static void
+gs_category_tile_class_init (GsCategoryTileClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ widget_class->destroy = gs_category_tile_destroy;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-category-tile.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryTile, label);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryTile, image);
+}
+
+GtkWidget *
+gs_category_tile_new (GsCategory *cat)
+{
+ GsCategoryTile *tile;
+
+ tile = g_object_new (GS_TYPE_CATEGORY_TILE, NULL);
+ gs_category_tile_set_category (tile, cat);
+
+ return GTK_WIDGET (tile);
+}
diff --git a/src/gs-category-tile.h b/src/gs-category-tile.h
new file mode 100644
index 0000000..577587e
--- /dev/null
+++ b/src/gs-category-tile.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_CATEGORY_TILE (gs_category_tile_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsCategoryTile, gs_category_tile, GS, CATEGORY_TILE, GtkButton)
+
+GtkWidget *gs_category_tile_new (GsCategory *cat);
+GsCategory *gs_category_tile_get_category (GsCategoryTile *tile);
+void gs_category_tile_set_category (GsCategoryTile *tile,
+ GsCategory *cat);
+
+G_END_DECLS
diff --git a/src/gs-category-tile.ui b/src/gs-category-tile.ui
new file mode 100644
index 0000000..117637d
--- /dev/null
+++ b/src/gs-category-tile.ui
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsCategoryTile" parent="GtkButton">
+ <property name="visible">True</property>
+ <style>
+ <class name="view"/>
+ <class name="tile"/>
+ <class name="category-tile"/>
+ </style>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <property name="margin_top">9</property>
+ <property name="margin_bottom">9</property>
+ <property name="margin_start">9</property>
+ <property name="margin_end">9</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="icon_name">folder-music-symbolic</property>
+ <property name="icon_size">1</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-common.c b/src/gs-common.c
new file mode 100644
index 0000000..1d616e7
--- /dev/null
+++ b/src/gs-common.c
@@ -0,0 +1,654 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2015 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016-2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gio/gdesktopappinfo.h>
+
+#include "gs-common.h"
+
+#define SPINNER_DELAY 500
+
+static gboolean
+fade_in (gpointer data)
+{
+ GtkWidget *spinner = data;
+ gdouble opacity;
+
+ opacity = gtk_widget_get_opacity (spinner);
+ opacity = opacity + 0.1;
+ gtk_widget_set_opacity (spinner, opacity);
+
+ if (opacity >= 1.0) {
+ g_object_steal_data (G_OBJECT (spinner), "fade-timeout");
+ return G_SOURCE_REMOVE;
+ }
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+remove_source (gpointer data)
+{
+ g_source_remove (GPOINTER_TO_UINT (data));
+}
+
+static gboolean
+start_spinning (gpointer data)
+{
+ GtkWidget *spinner = data;
+ guint id;
+
+ gtk_widget_set_opacity (spinner, 0);
+ gtk_spinner_start (GTK_SPINNER (spinner));
+ id = g_timeout_add (100, fade_in, spinner);
+ g_object_set_data_full (G_OBJECT (spinner), "fade-timeout",
+ GUINT_TO_POINTER (id), remove_source);
+
+ /* don't try to remove this source in the future */
+ g_object_steal_data (G_OBJECT (spinner), "start-timeout");
+ return G_SOURCE_REMOVE;
+}
+
+void
+gs_stop_spinner (GtkSpinner *spinner)
+{
+ g_object_set_data (G_OBJECT (spinner), "start-timeout", NULL);
+ gtk_spinner_stop (spinner);
+}
+
+void
+gs_start_spinner (GtkSpinner *spinner)
+{
+ gboolean active;
+ guint id;
+
+ /* Don't do anything if it's already spinning */
+ g_object_get (spinner, "active", &active, NULL);
+ if (active || g_object_get_data (G_OBJECT (spinner), "start-timeout") != NULL)
+ return;
+
+ gtk_widget_set_opacity (GTK_WIDGET (spinner), 0);
+ id = g_timeout_add (SPINNER_DELAY, start_spinning, spinner);
+ g_object_set_data_full (G_OBJECT (spinner), "start-timeout",
+ GUINT_TO_POINTER (id), remove_source);
+}
+
+static void
+remove_all_cb (GtkWidget *widget, gpointer user_data)
+{
+ GtkContainer *container = GTK_CONTAINER (user_data);
+ gtk_container_remove (container, widget);
+}
+
+void
+gs_container_remove_all (GtkContainer *container)
+{
+ gtk_container_foreach (container, remove_all_cb, container);
+}
+
+static void
+grab_focus (GtkWidget *widget)
+{
+ g_signal_handlers_disconnect_by_func (widget, grab_focus, NULL);
+ gtk_widget_grab_focus (widget);
+}
+
+void
+gs_grab_focus_when_mapped (GtkWidget *widget)
+{
+ if (gtk_widget_get_mapped (widget))
+ gtk_widget_grab_focus (widget);
+ else
+ g_signal_connect_after (widget, "map",
+ G_CALLBACK (grab_focus), NULL);
+}
+
+void
+gs_app_notify_installed (GsApp *app)
+{
+ g_autofree gchar *summary = NULL;
+ const gchar *body = NULL;
+ g_autoptr(GNotification) n = NULL;
+
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_OS_UPDATE:
+ /* TRANSLATORS: this is the summary of a notification that OS updates
+ * have been successfully installed */
+ summary = g_strdup (_("OS updates are now installed"));
+ /* TRANSLATORS: this is the body of a notification that OS updates
+ * have been successfully installed */
+ body = _("Recently installed updates are available to review");
+ break;
+ case AS_APP_KIND_DESKTOP:
+ /* TRANSLATORS: this is the summary of a notification that an application
+ * has been successfully installed */
+ summary = g_strdup_printf (_("%s is now installed"), gs_app_get_name (app));
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT)) {
+ /* TRANSLATORS: an application has been installed, but
+ * needs a reboot to complete the installation */
+ body = _("A restart is required for the changes to take effect.");
+ } else {
+ /* TRANSLATORS: this is the body of a notification that an application
+ * has been successfully installed */
+ body = _("Application is ready to be used.");
+ }
+ break;
+ default:
+ /* TRANSLATORS: this is the summary of a notification that a component
+ * has been successfully installed */
+ summary = g_strdup_printf (_("%s is now installed"), gs_app_get_name (app));
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT)) {
+ /* TRANSLATORS: an application has been installed, but
+ * needs a reboot to complete the installation */
+ body = _("A restart is required for the changes to take effect.");
+ }
+ break;
+ }
+ n = g_notification_new (summary);
+ if (body != NULL)
+ g_notification_set_body (n, body);
+
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT)) {
+ /* TRANSLATORS: button text */
+ g_notification_add_button_with_target (n, _("Restart"),
+ "app.reboot", NULL);
+ } else if (gs_app_get_kind (app) == AS_APP_KIND_DESKTOP) {
+ /* TRANSLATORS: this is button that opens the newly installed application */
+ g_notification_add_button_with_target (n, _("Launch"),
+ "app.launch", "s",
+ gs_app_get_id (app));
+ }
+ g_notification_set_default_action_and_target (n, "app.details", "(ss)",
+ gs_app_get_unique_id (app), "");
+ g_application_send_notification (g_application_get_default (), "installed", n);
+}
+
+typedef enum {
+ GS_APP_LICENSE_FREE = 0,
+ GS_APP_LICENSE_NONFREE = 1,
+ GS_APP_LICENSE_PATENT_CONCERN = 2
+} GsAppLicenseHint;
+
+GtkResponseType
+gs_app_notify_unavailable (GsApp *app, GtkWindow *parent)
+{
+ GsAppLicenseHint hint = GS_APP_LICENSE_FREE;
+ GtkResponseType response;
+ GtkWidget *dialog;
+ const gchar *license;
+ gboolean already_enabled = FALSE; /* FIXME */
+ guint i;
+ struct {
+ const gchar *str;
+ GsAppLicenseHint hint;
+ } keywords[] = {
+ { "NonFree", GS_APP_LICENSE_NONFREE },
+ { "PatentConcern", GS_APP_LICENSE_PATENT_CONCERN },
+ { "Proprietary", GS_APP_LICENSE_NONFREE },
+ { NULL, 0 }
+ };
+ g_autoptr(GSettings) settings = NULL;
+ g_autoptr(GString) body = NULL;
+ g_autoptr(GString) title = NULL;
+
+ /* this is very crude */
+ license = gs_app_get_license (app);
+ if (license != NULL) {
+ for (i = 0; keywords[i].str != NULL; i++) {
+ if (g_strstr_len (license, -1, keywords[i].str) != NULL)
+ hint |= keywords[i].hint;
+ }
+ } else {
+ /* use the worst-case assumption */
+ hint = GS_APP_LICENSE_NONFREE | GS_APP_LICENSE_PATENT_CONCERN;
+ }
+
+ /* check if the user has already dismissed */
+ settings = g_settings_new ("org.gnome.software");
+ if (!g_settings_get_boolean (settings, "prompt-for-nonfree"))
+ return GTK_RESPONSE_OK;
+
+ title = g_string_new ("");
+ if (already_enabled) {
+ g_string_append_printf (title, "<b>%s</b>",
+ /* TRANSLATORS: window title */
+ _("Install Third-Party Software?"));
+ } else {
+ g_string_append_printf (title, "<b>%s</b>",
+ /* TRANSLATORS: window title */
+ _("Enable Third-Party Software Repository?"));
+ }
+ dialog = gtk_message_dialog_new (parent,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_CANCEL,
+ NULL);
+ gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), title->str);
+
+ body = g_string_new ("");
+ if (hint & GS_APP_LICENSE_NONFREE) {
+ g_string_append_printf (body,
+ /* TRANSLATORS: the replacements are as follows:
+ * 1. Application name, e.g. "Firefox"
+ * 2. Software repository name, e.g. fedora-optional
+ */
+ _("%s is not <a href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\">"
+ "free and open source software</a>, "
+ "and is provided by “%s”."),
+ gs_app_get_name (app),
+ gs_app_get_origin (app));
+ } else {
+ g_string_append_printf (body,
+ /* TRANSLATORS: the replacements are as follows:
+ * 1. Application name, e.g. "Firefox"
+ * 2. Software repository name, e.g. fedora-optional */
+ _("%s is provided by “%s”."),
+ gs_app_get_name (app),
+ gs_app_get_origin (app));
+ }
+
+ /* tell the use what needs to be done */
+ if (!already_enabled) {
+ g_string_append (body, " ");
+ g_string_append (body,
+ _("This software repository must be "
+ "enabled to continue installation."));
+ }
+
+ /* be aware of patent clauses */
+ if (hint & GS_APP_LICENSE_PATENT_CONCERN) {
+ g_string_append (body, "\n\n");
+ if (gs_app_get_kind (app) != AS_APP_KIND_CODEC) {
+ g_string_append_printf (body,
+ /* TRANSLATORS: Laws are geographical, urgh... */
+ _("It may be illegal to install "
+ "or use %s in some countries."),
+ gs_app_get_name (app));
+ } else {
+ g_string_append (body,
+ /* TRANSLATORS: Laws are geographical, urgh... */
+ _("It may be illegal to install or use "
+ "this codec in some countries."));
+ }
+ }
+
+ gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), "%s", body->str);
+ /* TRANSLATORS: this is button text to not ask about non-free content again */
+ if (0) gtk_dialog_add_button (GTK_DIALOG (dialog), _("Don’t Warn Again"), GTK_RESPONSE_YES);
+ if (already_enabled) {
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ /* TRANSLATORS: button text */
+ _("Install"),
+ GTK_RESPONSE_OK);
+ } else {
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ /* TRANSLATORS: button text */
+ _("Enable and Install"),
+ GTK_RESPONSE_OK);
+ }
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ if (response == GTK_RESPONSE_YES) {
+ response = GTK_RESPONSE_OK;
+ g_settings_set_boolean (settings, "prompt-for-nonfree", FALSE);
+ }
+ gtk_widget_destroy (dialog);
+ return response;
+}
+
+void
+gs_image_set_from_pixbuf_with_scale (GtkImage *image, const GdkPixbuf *pixbuf, gint scale)
+{
+ cairo_surface_t *surface;
+ surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, NULL);
+ if (surface == NULL)
+ return;
+ gtk_image_set_from_surface (image, surface);
+ cairo_surface_destroy (surface);
+}
+
+void
+gs_image_set_from_pixbuf (GtkImage *image, const GdkPixbuf *pixbuf)
+{
+ gint scale;
+ scale = gdk_pixbuf_get_width (pixbuf) / 64;
+ gs_image_set_from_pixbuf_with_scale (image, pixbuf, scale);
+}
+
+gboolean
+gs_utils_is_current_desktop (const gchar *name)
+{
+ const gchar *tmp;
+ g_auto(GStrv) names = NULL;
+ tmp = g_getenv ("XDG_CURRENT_DESKTOP");
+ if (tmp == NULL)
+ return FALSE;
+ names = g_strsplit (tmp, ":", -1);
+ return g_strv_contains ((const gchar * const *) names, name);
+}
+
+static void
+gs_utils_widget_css_parsing_error_cb (GtkCssProvider *provider,
+ GtkCssSection *section,
+ GError *error,
+ gpointer user_data)
+{
+ g_warning ("CSS parse error %u:%u: %s",
+ gtk_css_section_get_start_line (section),
+ gtk_css_section_get_start_position (section),
+ error->message);
+}
+
+/**
+ * gs_utils_widget_set_css:
+ * @widget: a widget
+ * @provider: (inout) (transfer full) (not optional) (nullable): pointer to a
+ * #GtkCssProvider to use
+ * @class_name: class name to use, without the leading `.`
+ * @css: (nullable): CSS to set on the widget, or %NULL to clear custom CSS
+ *
+ * Set custom CSS on the given @widget instance. This doesn’t affect any other
+ * instances of the same widget. The @class_name must be a static string to be
+ * used as a name for the @css. It doesn’t need to vary with @widget, but
+ * multiple values of @class_name can be used with the same @widget to control
+ * several independent snippets of custom CSS.
+ *
+ * @provider must be a pointer to a #GtkCssProvider pointer, typically within
+ * your widget’s private data struct. This function will return a
+ * #GtkCssProvider in the provided pointer, reusing any old @provider if
+ * possible. When your widget is destroyed, you must destroy the returned
+ * @provider. If @css is %NULL, this function will destroy the @provider.
+ */
+void
+gs_utils_widget_set_css (GtkWidget *widget, GtkCssProvider **provider, const gchar *class_name, const gchar *css)
+{
+ GtkStyleContext *context;
+ g_autoptr(GString) str = NULL;
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (provider != NULL);
+ g_return_if_fail (provider == NULL || *provider == NULL || GTK_IS_STYLE_PROVIDER (*provider));
+ g_return_if_fail (class_name != NULL);
+
+ context = gtk_widget_get_style_context (widget);
+
+ /* remove custom class if NULL */
+ if (css == NULL) {
+ if (*provider != NULL)
+ gtk_style_context_remove_provider (context, GTK_STYLE_PROVIDER (*provider));
+ g_clear_object (provider);
+ gtk_style_context_remove_class (context, class_name);
+ return;
+ }
+
+ str = g_string_sized_new (1024);
+ g_string_append_printf (str, ".%s {\n", class_name);
+ g_string_append_printf (str, "%s\n", css);
+ g_string_append (str, "}");
+
+ /* create a new provider if needed */
+ if (*provider == NULL) {
+ *provider = gtk_css_provider_new ();
+ g_signal_connect (*provider, "parsing-error",
+ G_CALLBACK (gs_utils_widget_css_parsing_error_cb), NULL);
+ }
+
+ /* set the custom CSS class */
+ gtk_style_context_add_class (context, class_name);
+
+ /* set up custom provider and store on the widget */
+ gtk_css_provider_load_from_data (*provider, str->str, -1, NULL);
+ gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (*provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+}
+
+static void
+do_not_expand (GtkWidget *child, gpointer data)
+{
+ gtk_container_child_set (GTK_CONTAINER (gtk_widget_get_parent (child)),
+ child, "expand", FALSE, "fill", FALSE, NULL);
+}
+
+static gboolean
+unset_focus (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ if (GTK_IS_WINDOW (widget))
+ gtk_window_set_focus (GTK_WINDOW (widget), NULL);
+ return FALSE;
+}
+
+/**
+ * insert_details_widget:
+ * @dialog: the message dialog where the widget will be inserted
+ * @details: the detailed message text to display
+ *
+ * Inserts a widget displaying the detailed message into the message dialog.
+ */
+static void
+insert_details_widget (GtkMessageDialog *dialog, const gchar *details)
+{
+ GtkWidget *message_area, *sw, *label;
+ GtkWidget *box, *tv;
+ GtkTextBuffer *buffer;
+ GList *children;
+ g_autoptr(GString) msg = NULL;
+
+ g_assert (GTK_IS_MESSAGE_DIALOG (dialog));
+ g_assert (details != NULL);
+
+ gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
+
+ msg = g_string_new ("");
+ g_string_append_printf (msg, "%s\n\n%s",
+ /* TRANSLATORS: these are show_detailed_error messages from the
+ * package manager no mortal is supposed to understand,
+ * but google might know what they mean */
+ _("Detailed errors from the package manager follow:"),
+ details);
+
+ message_area = gtk_message_dialog_get_message_area (dialog);
+ g_assert (GTK_IS_BOX (message_area));
+ /* make the hbox expand */
+ box = gtk_widget_get_parent (message_area);
+ gtk_container_child_set (GTK_CONTAINER (gtk_widget_get_parent (box)), box,
+ "expand", TRUE, "fill", TRUE, NULL);
+ /* make the labels not expand */
+ gtk_container_foreach (GTK_CONTAINER (message_area), do_not_expand, NULL);
+
+ /* Find the secondary label and set its width_chars. */
+ /* Otherwise the label will tend to expand vertically. */
+ children = gtk_container_get_children (GTK_CONTAINER (message_area));
+ if (children && children->next && GTK_IS_LABEL (children->next->data)) {
+ gtk_label_set_width_chars (GTK_LABEL (children->next->data), 40);
+ }
+
+ label = gtk_label_new (_("Details"));
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_visible (label, TRUE);
+ gtk_container_add (GTK_CONTAINER (message_area), label);
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), 150);
+ gtk_widget_set_visible (sw, TRUE);
+
+ tv = gtk_text_view_new ();
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (tv), FALSE);
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (tv), GTK_WRAP_WORD);
+ gtk_style_context_add_class (gtk_widget_get_style_context (tv),
+ "update-failed-details");
+ gtk_text_buffer_set_text (buffer, msg->str, -1);
+ gtk_widget_set_visible (tv, TRUE);
+
+ gtk_container_add (GTK_CONTAINER (sw), tv);
+ gtk_widget_set_vexpand (sw, TRUE);
+ gtk_container_add (GTK_CONTAINER (message_area), sw);
+ gtk_container_child_set (GTK_CONTAINER (message_area), sw, "pack-type", GTK_PACK_END, NULL);
+
+ g_signal_connect (dialog, "map-event", G_CALLBACK (unset_focus), NULL);
+}
+
+/**
+ * gs_utils_show_error_dialog:
+ * @parent: transient parent, or NULL for none
+ * @title: the title for the dialog
+ * @msg: the message for the dialog
+ * @details: (allow-none): the detailed error message, or NULL for none
+ *
+ * Shows a message dialog for displaying error messages.
+ */
+void
+gs_utils_show_error_dialog (GtkWindow *parent,
+ const gchar *title,
+ const gchar *msg,
+ const gchar *details)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new_with_markup (parent,
+ 0,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ "<big><b>%s</b></big>", title);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", msg);
+ if (details != NULL)
+ insert_details_widget (GTK_MESSAGE_DIALOG (dialog), details);
+
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ dialog);
+ gtk_widget_show (dialog);
+}
+
+/**
+ * gs_utils_get_error_value:
+ * @error: A GError
+ *
+ * Gets the machine-readable value stored in the error message.
+ * The machine readable string is after the first "@", e.g.
+ * message = "Requires authentication with @aaa"
+ *
+ * Returns: a string, or %NULL
+ */
+const gchar *
+gs_utils_get_error_value (const GError *error)
+{
+ gchar *str;
+ if (error == NULL)
+ return NULL;
+ str = g_strstr_len (error->message, -1, "@");
+ if (str == NULL)
+ return NULL;
+ return (const gchar *) str + 1;
+}
+
+/**
+ * gs_utils_build_unique_id_kind:
+ * @kind: A #AsAppKind
+ * @id: An application ID
+ *
+ * Converts the ID valid into a wildcard unique ID of a specific kind.
+ * If @id is already a unique ID, then it is returned unchanged.
+ *
+ * Returns: (transfer full): a unique ID, or %NULL
+ */
+gchar *
+gs_utils_build_unique_id_kind (AsAppKind kind, const gchar *id)
+{
+ if (as_utils_unique_id_valid (id))
+ return g_strdup (id);
+ return as_utils_unique_id_build (AS_APP_SCOPE_UNKNOWN,
+ AS_BUNDLE_KIND_UNKNOWN,
+ NULL,
+ kind,
+ id,
+ NULL);
+}
+
+/**
+ * gs_utils_list_has_app_fuzzy:
+ * @list: A #GsAppList
+ * @app: A #GsApp
+ *
+ * Finds out if any application in the list would match a given application,
+ * where the match is valid for a matching D-Bus bus name,
+ * the label in the UI or the same icon.
+ *
+ * This function is normally used to work out if the source should be shown
+ * in a GsAppRow.
+ *
+ * Returns: %TRUE if the app is visually the "same"
+ */
+gboolean
+gs_utils_list_has_app_fuzzy (GsAppList *list, GsApp *app)
+{
+ guint i;
+ GsApp *tmp;
+
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ tmp = gs_app_list_index (list, i);
+
+ /* ignore if the same object */
+ if (app == tmp)
+ continue;
+
+ /* ignore with the same source */
+ if (g_strcmp0 (gs_app_get_origin_hostname (tmp),
+ gs_app_get_origin_hostname (app)) == 0) {
+ continue;
+ }
+
+ /* same D-Bus ID */
+ if (g_strcmp0 (gs_app_get_id (tmp),
+ gs_app_get_id (app)) == 0) {
+ return TRUE;
+ }
+
+ /* same name */
+ if (g_strcmp0 (gs_app_get_name (tmp),
+ gs_app_get_name (app)) == 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void
+gs_utils_reboot_notify (GsAppList *list)
+{
+ g_autoptr(GNotification) n = NULL;
+ const gchar *title;
+ const gchar *body;
+
+ /* TRANSLATORS: we've just live-updated some apps */
+ title = ngettext ("An update has been installed",
+ "Updates have been installed",
+ gs_app_list_length (list));
+
+ /* TRANSLATORS: the new apps will not be run until we restart */
+ body = ngettext ("A restart is required for it to take effect.",
+ "A restart is required for them to take effect.",
+ gs_app_list_length (list));
+
+ n = g_notification_new (title);
+ g_notification_set_body (n, body);
+ /* TRANSLATORS: button text */
+ g_notification_add_button (n, _("Not Now"), "app.nop");
+ /* TRANSLATORS: button text */
+ g_notification_add_button_with_target (n, _("Restart"), "app.reboot", NULL);
+ g_notification_set_default_action_and_target (n, "app.set-mode", "s", "updates");
+ g_notification_set_priority (n, G_NOTIFICATION_PRIORITY_URGENT);
+ g_application_send_notification (g_application_get_default (), "restart-required", n);
+}
diff --git a/src/gs-common.h b/src/gs-common.h
new file mode 100644
index 0000000..7540aef
--- /dev/null
+++ b/src/gs-common.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gio/gdesktopappinfo.h>
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+void gs_start_spinner (GtkSpinner *spinner);
+void gs_stop_spinner (GtkSpinner *spinner);
+void gs_container_remove_all (GtkContainer *container);
+void gs_grab_focus_when_mapped (GtkWidget *widget);
+
+void gs_app_notify_installed (GsApp *app);
+GtkResponseType
+ gs_app_notify_unavailable (GsApp *app,
+ GtkWindow *parent);
+
+void gs_image_set_from_pixbuf_with_scale (GtkImage *image,
+ const GdkPixbuf *pixbuf,
+ gint scale);
+void gs_image_set_from_pixbuf (GtkImage *image,
+ const GdkPixbuf *pixbuf);
+
+gboolean gs_utils_is_current_desktop (const gchar *name);
+void gs_utils_widget_set_css (GtkWidget *widget,
+ GtkCssProvider **provider,
+ const gchar *class_name,
+ const gchar *css);
+const gchar *gs_utils_get_error_value (const GError *error);
+void gs_utils_show_error_dialog (GtkWindow *parent,
+ const gchar *title,
+ const gchar *msg,
+ const gchar *details);
+gchar *gs_utils_build_unique_id_kind (AsAppKind kind,
+ const gchar *id);
+gboolean gs_utils_list_has_app_fuzzy (GsAppList *list,
+ GsApp *app);
+void gs_utils_reboot_notify (GsAppList *list);
+
+G_END_DECLS
diff --git a/src/gs-content-rating.c b/src/gs-content-rating.c
new file mode 100644
index 0000000..9746d9b
--- /dev/null
+++ b/src/gs-content-rating.c
@@ -0,0 +1,784 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <string.h>
+#include "gs-content-rating.h"
+
+#if !AS_CHECK_VERSION(0, 7, 18)
+static const gchar *rating_system_names[] = {
+ [GS_CONTENT_RATING_SYSTEM_UNKNOWN] = NULL,
+ [GS_CONTENT_RATING_SYSTEM_INCAA] = "INCAA",
+ [GS_CONTENT_RATING_SYSTEM_ACB] = "ACB",
+ [GS_CONTENT_RATING_SYSTEM_DJCTQ] = "DJCTQ",
+ [GS_CONTENT_RATING_SYSTEM_GSRR] = "GSRR",
+ [GS_CONTENT_RATING_SYSTEM_PEGI] = "PEGI",
+ [GS_CONTENT_RATING_SYSTEM_KAVI] = "KAVI",
+ [GS_CONTENT_RATING_SYSTEM_USK] = "USK",
+ [GS_CONTENT_RATING_SYSTEM_ESRA] = "ESRA",
+ [GS_CONTENT_RATING_SYSTEM_CERO] = "CERO",
+ [GS_CONTENT_RATING_SYSTEM_OFLCNZ] = "OFLCNZ",
+ [GS_CONTENT_RATING_SYSTEM_RUSSIA] = "RUSSIA",
+ [GS_CONTENT_RATING_SYSTEM_MDA] = "MDA",
+ [GS_CONTENT_RATING_SYSTEM_GRAC] = "GRAC",
+ [GS_CONTENT_RATING_SYSTEM_ESRB] = "ESRB",
+ [GS_CONTENT_RATING_SYSTEM_IARC] = "IARC",
+};
+G_STATIC_ASSERT (G_N_ELEMENTS (rating_system_names) == GS_CONTENT_RATING_SYSTEM_LAST);
+
+const gchar *
+gs_content_rating_system_to_str (GsContentRatingSystem system)
+{
+ if ((gint) system < GS_CONTENT_RATING_SYSTEM_UNKNOWN ||
+ (gint) system >= GS_CONTENT_RATING_SYSTEM_LAST)
+ return NULL;
+
+ return rating_system_names[system];
+}
+
+/* Table of the human-readable descriptions for each #AsContentRatingValue for
+ * each content rating category. @desc_none must be non-%NULL, but the other
+ * values may be %NULL if no description is appropriate. In that case, the next
+ * non-%NULL description for a lower #AsContentRatingValue will be used. */
+static const struct {
+ const gchar *id; /* (not nullable) */
+ const gchar *desc_none; /* (not nullable) */
+ const gchar *desc_mild; /* (nullable) */
+ const gchar *desc_moderate; /* (nullable) */
+ const gchar *desc_intense; /* (nullable) */
+} oars_descriptions[] = {
+ {
+ "violence-cartoon",
+ /* TRANSLATORS: content rating description */
+ N_("No cartoon violence"),
+ /* TRANSLATORS: content rating description */
+ N_("Cartoon characters in unsafe situations"),
+ /* TRANSLATORS: content rating description */
+ N_("Cartoon characters in aggressive conflict"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic violence involving cartoon characters"),
+ },
+ {
+ "violence-fantasy",
+ /* TRANSLATORS: content rating description */
+ N_("No fantasy violence"),
+ /* TRANSLATORS: content rating description */
+ N_("Characters in unsafe situations easily distinguishable from reality"),
+ /* TRANSLATORS: content rating description */
+ N_("Characters in aggressive conflict easily distinguishable from reality"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic violence easily distinguishable from reality"),
+ },
+ {
+ "violence-realistic",
+ /* TRANSLATORS: content rating description */
+ N_("No realistic violence"),
+ /* TRANSLATORS: content rating description */
+ N_("Mildly realistic characters in unsafe situations"),
+ /* TRANSLATORS: content rating description */
+ N_("Depictions of realistic characters in aggressive conflict"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic violence involving realistic characters"),
+ },
+ {
+ "violence-bloodshed",
+ /* TRANSLATORS: content rating description */
+ N_("No bloodshed"),
+ /* TRANSLATORS: content rating description */
+ N_("Unrealistic bloodshed"),
+ /* TRANSLATORS: content rating description */
+ N_("Realistic bloodshed"),
+ /* TRANSLATORS: content rating description */
+ N_("Depictions of bloodshed and the mutilation of body parts"),
+ },
+ {
+ "violence-sexual",
+ /* TRANSLATORS: content rating description */
+ N_("No sexual violence"),
+ /* TRANSLATORS: content rating description */
+ N_("Rape or other violent sexual behavior"),
+ NULL,
+ NULL,
+ },
+ {
+ "drugs-alcohol",
+ /* TRANSLATORS: content rating description */
+ N_("No references to alcohol"),
+ /* TRANSLATORS: content rating description */
+ N_("References to alcoholic beverages"),
+ /* TRANSLATORS: content rating description */
+ N_("Use of alcoholic beverages"),
+ NULL,
+ },
+ {
+ "drugs-narcotics",
+ /* TRANSLATORS: content rating description */
+ N_("No references to illicit drugs"),
+ /* TRANSLATORS: content rating description */
+ N_("References to illicit drugs"),
+ /* TRANSLATORS: content rating description */
+ N_("Use of illicit drugs"),
+ NULL,
+ },
+ {
+ "drugs-tobacco",
+ /* TRANSLATORS: content rating description */
+ N_("No references to tobacco products"),
+ /* TRANSLATORS: content rating description */
+ N_("References to tobacco products"),
+ /* TRANSLATORS: content rating description */
+ N_("Use of tobacco products"),
+ NULL,
+ },
+ {
+ "sex-nudity",
+ /* TRANSLATORS: content rating description */
+ N_("No nudity of any sort"),
+ /* TRANSLATORS: content rating description */
+ N_("Brief artistic nudity"),
+ /* TRANSLATORS: content rating description */
+ N_("Prolonged nudity"),
+ NULL,
+ },
+ {
+ "sex-themes",
+ /* TRANSLATORS: content rating description */
+ N_("No references to or depictions of sexual nature"),
+ /* TRANSLATORS: content rating description */
+ N_("Provocative references or depictions"),
+ /* TRANSLATORS: content rating description */
+ N_("Sexual references or depictions"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic sexual behavior"),
+ },
+ {
+ "language-profanity",
+ /* TRANSLATORS: content rating description */
+ N_("No profanity of any kind"),
+ /* TRANSLATORS: content rating description */
+ N_("Mild or infrequent use of profanity"),
+ /* TRANSLATORS: content rating description */
+ N_("Moderate use of profanity"),
+ /* TRANSLATORS: content rating description */
+ N_("Strong or frequent use of profanity"),
+ },
+ {
+ "language-humor",
+ /* TRANSLATORS: content rating description */
+ N_("No inappropriate humor"),
+ /* TRANSLATORS: content rating description */
+ N_("Slapstick humor"),
+ /* TRANSLATORS: content rating description */
+ N_("Vulgar or bathroom humor"),
+ /* TRANSLATORS: content rating description */
+ N_("Mature or sexual humor"),
+ },
+ {
+ "language-discrimination",
+ /* TRANSLATORS: content rating description */
+ N_("No discriminatory language of any kind"),
+ /* TRANSLATORS: content rating description */
+ N_("Negativity towards a specific group of people"),
+ /* TRANSLATORS: content rating description */
+ N_("Discrimination designed to cause emotional harm"),
+ /* TRANSLATORS: content rating description */
+ N_("Explicit discrimination based on gender, sexuality, race or religion"),
+ },
+ {
+ "money-advertising",
+ /* TRANSLATORS: content rating description */
+ N_("No advertising of any kind"),
+ /* TRANSLATORS: content rating description */
+ N_("Product placement"),
+ /* TRANSLATORS: content rating description */
+ N_("Explicit references to specific brands or trademarked products"),
+ /* TRANSLATORS: content rating description */
+ N_("Users are encouraged to purchase specific real-world items"),
+ },
+ {
+ "money-gambling",
+ /* TRANSLATORS: content rating description */
+ N_("No gambling of any kind"),
+ /* TRANSLATORS: content rating description */
+ N_("Gambling on random events using tokens or credits"),
+ /* TRANSLATORS: content rating description */
+ N_("Gambling using “play” money"),
+ /* TRANSLATORS: content rating description */
+ N_("Gambling using real money"),
+ },
+ {
+ "money-purchasing",
+ /* TRANSLATORS: content rating description */
+ N_("No ability to spend money"),
+ /* TRANSLATORS: content rating description */
+ N_("Users are encouraged to donate real money"),
+ NULL,
+ /* TRANSLATORS: content rating description */
+ N_("Ability to spend real money in-app"),
+ },
+ {
+ "social-chat",
+ /* TRANSLATORS: content rating description */
+ N_("No way to chat with other users"),
+ /* TRANSLATORS: content rating description */
+ N_("User-to-user interactions without chat functionality"),
+ /* TRANSLATORS: content rating description */
+ N_("Moderated chat functionality between users"),
+ /* TRANSLATORS: content rating description */
+ N_("Uncontrolled chat functionality between users"),
+ },
+ {
+ "social-audio",
+ /* TRANSLATORS: content rating description */
+ N_("No way to talk with other users"),
+ /* TRANSLATORS: content rating description */
+ N_("Uncontrolled audio or video chat functionality between users"),
+ NULL,
+ NULL,
+ },
+ {
+ "social-contacts",
+ /* TRANSLATORS: content rating description */
+ N_("No sharing of social network usernames or email addresses"),
+ /* TRANSLATORS: content rating description */
+ N_("Sharing social network usernames or email addresses"),
+ NULL,
+ NULL,
+ },
+ {
+ "social-info",
+ /* TRANSLATORS: content rating description */
+ N_("No sharing of user information with third parties"),
+ /* TRANSLATORS: content rating description */
+ N_("Checking for the latest application version"),
+ /* TRANSLATORS: content rating description */
+ N_("Sharing diagnostic data that does not let others identify the user"),
+ /* TRANSLATORS: content rating description */
+ N_("Sharing information that lets others identify the user"),
+ },
+ {
+ "social-location",
+ /* TRANSLATORS: content rating description */
+ N_("No sharing of physical location with other users"),
+ /* TRANSLATORS: content rating description */
+ N_("Sharing physical location with other users"),
+ NULL,
+ NULL,
+ },
+
+ /* v1.1 */
+ {
+ "sex-homosexuality",
+ /* TRANSLATORS: content rating description */
+ N_("No references to homosexuality"),
+ /* TRANSLATORS: content rating description */
+ N_("Indirect references to homosexuality"),
+ /* TRANSLATORS: content rating description */
+ N_("Kissing between people of the same gender"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic sexual behavior between people of the same gender"),
+ },
+ {
+ "sex-prostitution",
+ /* TRANSLATORS: content rating description */
+ N_("No references to prostitution"),
+ /* TRANSLATORS: content rating description */
+ N_("Indirect references to prostitution"),
+ /* TRANSLATORS: content rating description */
+ N_("Direct references to prostitution"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic depictions of the act of prostitution"),
+ },
+ {
+ "sex-adultery",
+ /* TRANSLATORS: content rating description */
+ N_("No references to adultery"),
+ /* TRANSLATORS: content rating description */
+ N_("Indirect references to adultery"),
+ /* TRANSLATORS: content rating description */
+ N_("Direct references to adultery"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic depictions of the act of adultery"),
+ },
+ {
+ "sex-appearance",
+ /* TRANSLATORS: content rating description */
+ N_("No sexualized characters"),
+ NULL,
+ /* TRANSLATORS: content rating description */
+ N_("Scantily clad human characters"),
+ /* TRANSLATORS: content rating description */
+ N_("Overtly sexualized human characters"),
+ },
+ {
+ "violence-worship",
+ /* TRANSLATORS: content rating description */
+ N_("No references to desecration"),
+ /* TRANSLATORS: content rating description */
+ N_("Depictions of or references to historical desecration"),
+ /* TRANSLATORS: content rating description */
+ N_("Depictions of modern-day human desecration"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic depictions of modern-day desecration"),
+ },
+ {
+ "violence-desecration",
+ /* TRANSLATORS: content rating description */
+ N_("No visible dead human remains"),
+ /* TRANSLATORS: content rating description */
+ N_("Visible dead human remains"),
+ /* TRANSLATORS: content rating description */
+ N_("Dead human remains that are exposed to the elements"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic depictions of desecration of human bodies"),
+ },
+ {
+ "violence-slavery",
+ /* TRANSLATORS: content rating description */
+ N_("No references to slavery"),
+ /* TRANSLATORS: content rating description */
+ N_("Depictions of or references to historical slavery"),
+ /* TRANSLATORS: content rating description */
+ N_("Depictions of modern-day slavery"),
+ /* TRANSLATORS: content rating description */
+ N_("Graphic depictions of modern-day slavery"),
+ },
+};
+
+const gchar *
+gs_content_rating_key_value_to_str (const gchar *id, AsContentRatingValue value)
+{
+ gsize i;
+
+ if ((gint) value < AS_CONTENT_RATING_VALUE_NONE ||
+ (gint) value > AS_CONTENT_RATING_VALUE_INTENSE)
+ return NULL;
+
+ for (i = 0; i < G_N_ELEMENTS (oars_descriptions); i++) {
+ if (!g_str_equal (oars_descriptions[i].id, id))
+ continue;
+
+ /* Return the most-intense non-NULL string. */
+ if (oars_descriptions[i].desc_intense != NULL && value >= AS_CONTENT_RATING_VALUE_INTENSE)
+ return _(oars_descriptions[i].desc_intense);
+ if (oars_descriptions[i].desc_moderate != NULL && value >= AS_CONTENT_RATING_VALUE_MODERATE)
+ return _(oars_descriptions[i].desc_moderate);
+ if (oars_descriptions[i].desc_mild != NULL && value >= AS_CONTENT_RATING_VALUE_MILD)
+ return _(oars_descriptions[i].desc_mild);
+ if (oars_descriptions[i].desc_none != NULL && value >= AS_CONTENT_RATING_VALUE_NONE)
+ return _(oars_descriptions[i].desc_none);
+ g_assert_not_reached ();
+ }
+
+ /* This means the requested @id is missing from @oars_descriptions, so
+ * presumably the OARS spec has been updated but gnome-software hasn’t. */
+ g_warn_if_reached ();
+
+ return NULL;
+}
+#endif /* appstream-glib < 0.7.18 */
+
+#if !AS_CHECK_VERSION(0, 7, 15)
+/* Equivalent to as_content_rating_get_all_rating_ids() */
+const gchar **
+gs_content_rating_get_all_rating_ids (void)
+{
+ g_autoptr(GPtrArray) ids = g_ptr_array_new_with_free_func (NULL);
+
+ for (gsize i = 0; i < G_N_ELEMENTS (oars_descriptions); i++)
+ g_ptr_array_add (ids, (gpointer) oars_descriptions[i].id);
+ g_ptr_array_add (ids, NULL);
+
+ return (const gchar **) g_ptr_array_free (g_steal_pointer (&ids), FALSE);
+}
+#endif /* appstream-glib < 0.7.15 */
+
+#if !AS_CHECK_VERSION(0, 7, 18)
+static char *
+get_esrb_string (gchar *source, gchar *translate)
+{
+ if (g_strcmp0 (source, translate) == 0)
+ return g_strdup (source);
+ /* TRANSLATORS: This is the formatting of English and localized name
+ of the rating e.g. "Adults Only (solo adultos)" */
+ return g_strdup_printf (_("%s (%s)"), source, translate);
+}
+
+/* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */
+gchar *
+gs_utils_content_rating_age_to_str (GsContentRatingSystem system, guint age)
+{
+ if (system == GS_CONTENT_RATING_SYSTEM_INCAA) {
+ if (age >= 18)
+ return g_strdup ("+18");
+ if (age >= 13)
+ return g_strdup ("+13");
+ return g_strdup ("ATP");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_ACB) {
+ if (age >= 18)
+ return g_strdup ("R18+");
+ if (age >= 15)
+ return g_strdup ("MA15+");
+ return g_strdup ("PG");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_DJCTQ) {
+ if (age >= 18)
+ return g_strdup ("18");
+ if (age >= 16)
+ return g_strdup ("16");
+ if (age >= 14)
+ return g_strdup ("14");
+ if (age >= 12)
+ return g_strdup ("12");
+ if (age >= 10)
+ return g_strdup ("10");
+ return g_strdup ("L");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_GSRR) {
+ if (age >= 18)
+ return g_strdup ("限制");
+ if (age >= 15)
+ return g_strdup ("輔15");
+ if (age >= 12)
+ return g_strdup ("輔12");
+ if (age >= 6)
+ return g_strdup ("保護");
+ return g_strdup ("普通");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_PEGI) {
+ if (age >= 18)
+ return g_strdup ("18");
+ if (age >= 16)
+ return g_strdup ("16");
+ if (age >= 12)
+ return g_strdup ("12");
+ if (age >= 7)
+ return g_strdup ("7");
+ if (age >= 3)
+ return g_strdup ("3");
+ return NULL;
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_KAVI) {
+ if (age >= 18)
+ return g_strdup ("18+");
+ if (age >= 16)
+ return g_strdup ("16+");
+ if (age >= 12)
+ return g_strdup ("12+");
+ if (age >= 7)
+ return g_strdup ("7+");
+ if (age >= 3)
+ return g_strdup ("3+");
+ return NULL;
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_USK) {
+ if (age >= 18)
+ return g_strdup ("18");
+ if (age >= 16)
+ return g_strdup ("16");
+ if (age >= 12)
+ return g_strdup ("12");
+ if (age >= 6)
+ return g_strdup ("6");
+ return g_strdup ("0");
+ }
+ /* Reference: http://www.esra.org.ir/ */
+ if (system == GS_CONTENT_RATING_SYSTEM_ESRA) {
+ if (age >= 18)
+ return g_strdup ("+18");
+ if (age >= 15)
+ return g_strdup ("+15");
+ if (age >= 12)
+ return g_strdup ("+12");
+ if (age >= 7)
+ return g_strdup ("+7");
+ if (age >= 3)
+ return g_strdup ("+3");
+ return NULL;
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_CERO) {
+ if (age >= 18)
+ return g_strdup ("Z");
+ if (age >= 17)
+ return g_strdup ("D");
+ if (age >= 15)
+ return g_strdup ("C");
+ if (age >= 12)
+ return g_strdup ("B");
+ return g_strdup ("A");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_OFLCNZ) {
+ if (age >= 18)
+ return g_strdup ("R18");
+ if (age >= 16)
+ return g_strdup ("R16");
+ if (age >= 15)
+ return g_strdup ("R15");
+ if (age >= 13)
+ return g_strdup ("R13");
+ return g_strdup ("G");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_RUSSIA) {
+ if (age >= 18)
+ return g_strdup ("18+");
+ if (age >= 16)
+ return g_strdup ("16+");
+ if (age >= 12)
+ return g_strdup ("12+");
+ if (age >= 6)
+ return g_strdup ("6+");
+ return g_strdup ("0+");
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_MDA) {
+ if (age >= 18)
+ return g_strdup ("M18");
+ if (age >= 16)
+ return g_strdup ("ADV");
+ return get_esrb_string ("General", _("General"));
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_GRAC) {
+ if (age >= 18)
+ return g_strdup ("18");
+ if (age >= 15)
+ return g_strdup ("15");
+ if (age >= 12)
+ return g_strdup ("12");
+ return get_esrb_string ("ALL", _("ALL"));
+ }
+ if (system == GS_CONTENT_RATING_SYSTEM_ESRB) {
+ if (age >= 18)
+ return get_esrb_string ("Adults Only", _("Adults Only"));
+ if (age >= 17)
+ return get_esrb_string ("Mature", _("Mature"));
+ if (age >= 13)
+ return get_esrb_string ("Teen", _("Teen"));
+ if (age >= 10)
+ return get_esrb_string ("Everyone 10+", _("Everyone 10+"));
+ if (age >= 6)
+ return get_esrb_string ("Everyone", _("Everyone"));
+
+ return get_esrb_string ("Early Childhood", _("Early Childhood"));
+ }
+ /* IARC = everything else */
+ if (age >= 18)
+ return g_strdup ("18+");
+ if (age >= 16)
+ return g_strdup ("16+");
+ if (age >= 12)
+ return g_strdup ("12+");
+ if (age >= 7)
+ return g_strdup ("7+");
+ if (age >= 3)
+ return g_strdup ("3+");
+ return NULL;
+}
+
+/*
+ * parse_locale:
+ * @locale: (transfer full): a locale to parse
+ * @language_out: (out) (optional) (nullable): return location for the parsed
+ * language, or %NULL to ignore
+ * @territory_out: (out) (optional) (nullable): return location for the parsed
+ * territory, or %NULL to ignore
+ * @codeset_out: (out) (optional) (nullable): return location for the parsed
+ * codeset, or %NULL to ignore
+ * @modifier_out: (out) (optional) (nullable): return location for the parsed
+ * modifier, or %NULL to ignore
+ *
+ * Parse @locale as a locale string of the form
+ * `language[_territory][.codeset][@modifier]` — see `man 3 setlocale` for
+ * details.
+ *
+ * On success, %TRUE will be returned, and the components of the locale will be
+ * returned in the given addresses, with each component not including any
+ * separators. Otherwise, %FALSE will be returned and the components will be set
+ * to %NULL.
+ *
+ * @locale is modified, and any returned non-%NULL pointers will point inside
+ * it.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ */
+static gboolean
+parse_locale (gchar *locale /* (transfer full) */,
+ const gchar **language_out,
+ const gchar **territory_out,
+ const gchar **codeset_out,
+ const gchar **modifier_out)
+{
+ gchar *separator;
+ const gchar *language = NULL, *territory = NULL, *codeset = NULL, *modifier = NULL;
+
+ separator = strrchr (locale, '@');
+ if (separator != NULL) {
+ modifier = separator + 1;
+ *separator = '\0';
+ }
+
+ separator = strrchr (locale, '.');
+ if (separator != NULL) {
+ codeset = separator + 1;
+ *separator = '\0';
+ }
+
+ separator = strrchr (locale, '_');
+ if (separator != NULL) {
+ territory = separator + 1;
+ *separator = '\0';
+ }
+
+ language = locale;
+
+ /* Parse failure? */
+ if (*language == '\0') {
+ language = NULL;
+ territory = NULL;
+ codeset = NULL;
+ modifier = NULL;
+ }
+
+ if (language_out != NULL)
+ *language_out = language;
+ if (territory_out != NULL)
+ *territory_out = territory;
+ if (codeset_out != NULL)
+ *codeset_out = codeset;
+ if (modifier_out != NULL)
+ *modifier_out = modifier;
+
+ return (language != NULL);
+}
+
+/* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */
+GsContentRatingSystem
+gs_utils_content_rating_system_from_locale (const gchar *locale)
+{
+ g_autofree gchar *locale_copy = g_strdup (locale);
+ const gchar *territory;
+
+ /* Default to IARC for locales which can’t be parsed. */
+ if (!parse_locale (locale_copy, NULL, &territory, NULL, NULL))
+ return GS_CONTENT_RATING_SYSTEM_IARC;
+
+ /* Argentina */
+ if (g_strcmp0 (territory, "AR") == 0)
+ return GS_CONTENT_RATING_SYSTEM_INCAA;
+
+ /* Australia */
+ if (g_strcmp0 (territory, "AU") == 0)
+ return GS_CONTENT_RATING_SYSTEM_ACB;
+
+ /* Brazil */
+ if (g_strcmp0 (territory, "BR") == 0)
+ return GS_CONTENT_RATING_SYSTEM_DJCTQ;
+
+ /* Taiwan */
+ if (g_strcmp0 (territory, "TW") == 0)
+ return GS_CONTENT_RATING_SYSTEM_GSRR;
+
+ /* Europe (but not Finland or Germany), India, Israel,
+ * Pakistan, Quebec, South Africa */
+ if ((g_strcmp0 (territory, "GB") == 0) ||
+ g_strcmp0 (territory, "AL") == 0 ||
+ g_strcmp0 (territory, "AD") == 0 ||
+ g_strcmp0 (territory, "AM") == 0 ||
+ g_strcmp0 (territory, "AT") == 0 ||
+ g_strcmp0 (territory, "AZ") == 0 ||
+ g_strcmp0 (territory, "BY") == 0 ||
+ g_strcmp0 (territory, "BE") == 0 ||
+ g_strcmp0 (territory, "BA") == 0 ||
+ g_strcmp0 (territory, "BG") == 0 ||
+ g_strcmp0 (territory, "HR") == 0 ||
+ g_strcmp0 (territory, "CY") == 0 ||
+ g_strcmp0 (territory, "CZ") == 0 ||
+ g_strcmp0 (territory, "DK") == 0 ||
+ g_strcmp0 (territory, "EE") == 0 ||
+ g_strcmp0 (territory, "FR") == 0 ||
+ g_strcmp0 (territory, "GE") == 0 ||
+ g_strcmp0 (territory, "GR") == 0 ||
+ g_strcmp0 (territory, "HU") == 0 ||
+ g_strcmp0 (territory, "IS") == 0 ||
+ g_strcmp0 (territory, "IT") == 0 ||
+ g_strcmp0 (territory, "LZ") == 0 ||
+ g_strcmp0 (territory, "XK") == 0 ||
+ g_strcmp0 (territory, "LV") == 0 ||
+ g_strcmp0 (territory, "FL") == 0 ||
+ g_strcmp0 (territory, "LU") == 0 ||
+ g_strcmp0 (territory, "LT") == 0 ||
+ g_strcmp0 (territory, "MK") == 0 ||
+ g_strcmp0 (territory, "MT") == 0 ||
+ g_strcmp0 (territory, "MD") == 0 ||
+ g_strcmp0 (territory, "MC") == 0 ||
+ g_strcmp0 (territory, "ME") == 0 ||
+ g_strcmp0 (territory, "NL") == 0 ||
+ g_strcmp0 (territory, "NO") == 0 ||
+ g_strcmp0 (territory, "PL") == 0 ||
+ g_strcmp0 (territory, "PT") == 0 ||
+ g_strcmp0 (territory, "RO") == 0 ||
+ g_strcmp0 (territory, "SM") == 0 ||
+ g_strcmp0 (territory, "RS") == 0 ||
+ g_strcmp0 (territory, "SK") == 0 ||
+ g_strcmp0 (territory, "SI") == 0 ||
+ g_strcmp0 (territory, "ES") == 0 ||
+ g_strcmp0 (territory, "SE") == 0 ||
+ g_strcmp0 (territory, "CH") == 0 ||
+ g_strcmp0 (territory, "TR") == 0 ||
+ g_strcmp0 (territory, "UA") == 0 ||
+ g_strcmp0 (territory, "VA") == 0 ||
+ g_strcmp0 (territory, "IN") == 0 ||
+ g_strcmp0 (territory, "IL") == 0 ||
+ g_strcmp0 (territory, "PK") == 0 ||
+ g_strcmp0 (territory, "ZA") == 0)
+ return GS_CONTENT_RATING_SYSTEM_PEGI;
+
+ /* Finland */
+ if (g_strcmp0 (territory, "FI") == 0)
+ return GS_CONTENT_RATING_SYSTEM_KAVI;
+
+ /* Germany */
+ if (g_strcmp0 (territory, "DE") == 0)
+ return GS_CONTENT_RATING_SYSTEM_USK;
+
+ /* Iran */
+ if (g_strcmp0 (territory, "IR") == 0)
+ return GS_CONTENT_RATING_SYSTEM_ESRA;
+
+ /* Japan */
+ if (g_strcmp0 (territory, "JP") == 0)
+ return GS_CONTENT_RATING_SYSTEM_CERO;
+
+ /* New Zealand */
+ if (g_strcmp0 (territory, "NZ") == 0)
+ return GS_CONTENT_RATING_SYSTEM_OFLCNZ;
+
+ /* Russia: Content rating law */
+ if (g_strcmp0 (territory, "RU") == 0)
+ return GS_CONTENT_RATING_SYSTEM_RUSSIA;
+
+ /* Singapore */
+ if (g_strcmp0 (territory, "SQ") == 0)
+ return GS_CONTENT_RATING_SYSTEM_MDA;
+
+ /* South Korea */
+ if (g_strcmp0 (territory, "KR") == 0)
+ return GS_CONTENT_RATING_SYSTEM_GRAC;
+
+ /* USA, Canada, Mexico */
+ if ((g_strcmp0 (territory, "US") == 0) ||
+ g_strcmp0 (territory, "CA") == 0 ||
+ g_strcmp0 (territory, "MX") == 0)
+ return GS_CONTENT_RATING_SYSTEM_ESRB;
+
+ /* everything else is IARC */
+ return GS_CONTENT_RATING_SYSTEM_IARC;
+}
+#endif /* appstream-glib < 0.7.18 */
diff --git a/src/gs-content-rating.h b/src/gs-content-rating.h
new file mode 100644
index 0000000..0e31784
--- /dev/null
+++ b/src/gs-content-rating.h
@@ -0,0 +1,76 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+G_BEGIN_DECLS
+
+#include <appstream-glib.h>
+#include <glib-object.h>
+
+#if AS_CHECK_VERSION(0, 7, 18)
+#define GS_CONTENT_RATING_SYSTEM_UNKNOWN AS_CONTENT_RATING_SYSTEM_UNKNOWN
+#define GS_CONTENT_RATING_SYSTEM_INCAA AS_CONTENT_RATING_SYSTEM_INCAA
+#define GS_CONTENT_RATING_SYSTEM_ACB AS_CONTENT_RATING_SYSTEM_ACB
+#define GS_CONTENT_RATING_SYSTEM_DJCTQ AS_CONTENT_RATING_SYSTEM_DJCTQ
+#define GS_CONTENT_RATING_SYSTEM_GSRR AS_CONTENT_RATING_SYSTEM_GSRR
+#define GS_CONTENT_RATING_SYSTEM_PEGI AS_CONTENT_RATING_SYSTEM_PEGI
+#define GS_CONTENT_RATING_SYSTEM_KAVI AS_CONTENT_RATING_SYSTEM_KAVI
+#define GS_CONTENT_RATING_SYSTEM_USK AS_CONTENT_RATING_SYSTEM_USK
+#define GS_CONTENT_RATING_SYSTEM_ESRA AS_CONTENT_RATING_SYSTEM_ESRA
+#define GS_CONTENT_RATING_SYSTEM_CERO AS_CONTENT_RATING_SYSTEM_CERO
+#define GS_CONTENT_RATING_SYSTEM_OFLCNZ AS_CONTENT_RATING_SYSTEM_OFLCNZ
+#define GS_CONTENT_RATING_SYSTEM_RUSSIA AS_CONTENT_RATING_SYSTEM_RUSSIA
+#define GS_CONTENT_RATING_SYSTEM_MDA AS_CONTENT_RATING_SYSTEM_MDA
+#define GS_CONTENT_RATING_SYSTEM_GRAC AS_CONTENT_RATING_SYSTEM_GRAC
+#define GS_CONTENT_RATING_SYSTEM_ESRB AS_CONTENT_RATING_SYSTEM_ESRB
+#define GS_CONTENT_RATING_SYSTEM_IARC AS_CONTENT_RATING_SYSTEM_IARC
+#define GS_CONTENT_RATING_SYSTEM_LAST AS_CONTENT_RATING_SYSTEM_LAST
+#define GsContentRatingSystem AsContentRatingSystem
+
+#define gs_utils_content_rating_age_to_str as_content_rating_system_format_age
+#define gs_utils_content_rating_system_from_locale as_content_rating_system_from_locale
+#define gs_content_rating_key_value_to_str as_content_rating_attribute_get_description
+#define gs_content_rating_system_to_str as_content_rating_system_to_string
+#else
+typedef enum {
+ GS_CONTENT_RATING_SYSTEM_UNKNOWN,
+ GS_CONTENT_RATING_SYSTEM_INCAA,
+ GS_CONTENT_RATING_SYSTEM_ACB,
+ GS_CONTENT_RATING_SYSTEM_DJCTQ,
+ GS_CONTENT_RATING_SYSTEM_GSRR,
+ GS_CONTENT_RATING_SYSTEM_PEGI,
+ GS_CONTENT_RATING_SYSTEM_KAVI,
+ GS_CONTENT_RATING_SYSTEM_USK,
+ GS_CONTENT_RATING_SYSTEM_ESRA,
+ GS_CONTENT_RATING_SYSTEM_CERO,
+ GS_CONTENT_RATING_SYSTEM_OFLCNZ,
+ GS_CONTENT_RATING_SYSTEM_RUSSIA,
+ GS_CONTENT_RATING_SYSTEM_MDA,
+ GS_CONTENT_RATING_SYSTEM_GRAC,
+ GS_CONTENT_RATING_SYSTEM_ESRB,
+ GS_CONTENT_RATING_SYSTEM_IARC,
+ /*< private >*/
+ GS_CONTENT_RATING_SYSTEM_LAST
+} GsContentRatingSystem;
+
+gchar *gs_utils_content_rating_age_to_str (GsContentRatingSystem system,
+ guint age);
+GsContentRatingSystem gs_utils_content_rating_system_from_locale (const gchar *locale);
+const gchar *gs_content_rating_key_value_to_str (const gchar *id,
+ AsContentRatingValue value);
+const gchar *gs_content_rating_system_to_str (GsContentRatingSystem system);
+#endif
+
+#if AS_CHECK_VERSION(0, 7, 15)
+#define gs_content_rating_get_all_rating_ids as_content_rating_get_all_rating_ids
+#else
+const gchar **gs_content_rating_get_all_rating_ids (void);
+#endif
+
+G_END_DECLS
diff --git a/src/gs-css.c b/src/gs-css.c
new file mode 100644
index 0000000..923ac1a
--- /dev/null
+++ b/src/gs-css.c
@@ -0,0 +1,305 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/**
+ * SECTION:gs-css
+ * @title: GsCss
+ * @stability: Unstable
+ * @short_description: Parse, validate and rewrite CSS resources
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <appstream-glib.h>
+
+#include "gs-css.h"
+
+struct _GsCss
+{
+ GObject parent_instance;
+ GHashTable *ids;
+ GsCssRewriteFunc rewrite_func;
+ gpointer rewrite_func_data;
+};
+
+G_DEFINE_TYPE (GsCss, gs_css, G_TYPE_OBJECT)
+
+static void
+_cleanup_string (GString *str)
+{
+ /* remove leading newlines */
+ while (g_str_has_prefix (str->str, "\n") || g_str_has_prefix (str->str, " "))
+ g_string_erase (str, 0, 1);
+
+ /* remove trailing newlines */
+ while (g_str_has_suffix (str->str, "\n") || g_str_has_suffix (str->str, " "))
+ g_string_truncate (str, str->len - 1);
+}
+
+/**
+ * gs_css_parse:
+ * @self: a #GsCss
+ * @markup: come CSS, or %NULL
+ * @error: a #GError or %NULL
+ *
+ * Parses the CSS markup and does some basic validation checks on the input.
+ *
+ * Returns: %TRUE for success
+ */
+gboolean
+gs_css_parse (GsCss *self, const gchar *markup, GError **error)
+{
+ g_auto(GStrv) parts = NULL;
+ g_autoptr(GString) markup_str = NULL;
+
+ /* no data */
+ if (markup == NULL || markup[0] == '\0')
+ return TRUE;
+
+ /* old style, no IDs */
+ markup_str = g_string_new (markup);
+ as_utils_string_replace (markup_str, "@datadir@", DATADIR);
+ if (!g_str_has_prefix (markup_str->str, "#")) {
+ g_hash_table_insert (self->ids,
+ g_strdup ("tile"),
+ g_string_free (g_steal_pointer (&markup_str), FALSE));
+ return TRUE;
+ }
+
+ /* split up CSS into ID chunks, e.g.
+ *
+ * #tile {border-radius: 0;}
+ * #name {color: white;}
+ */
+ parts = g_strsplit (markup_str->str + 1, "\n#", -1);
+ for (guint i = 0; parts[i] != NULL; i++) {
+ g_autoptr(GString) current_css = NULL;
+ g_autoptr(GString) current_key = NULL;
+ for (guint j = 1; parts[i][j] != '\0'; j++) {
+ const gchar ch = parts[i][j];
+ if (ch == '{') {
+ if (current_key != NULL || current_css != NULL) {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "invalid '{'");
+ return FALSE;
+ }
+ current_key = g_string_new_len (parts[i], j);
+ current_css = g_string_new (NULL);
+ _cleanup_string (current_key);
+
+ /* already added */
+ if (g_hash_table_lookup (self->ids, current_key->str) != NULL) {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "duplicate ID '%s'",
+ current_key->str);
+ return FALSE;
+ }
+ continue;
+ }
+ if (ch == '}') {
+ if (current_key == NULL || current_css == NULL) {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "invalid '}'");
+ return FALSE;
+ }
+ _cleanup_string (current_css);
+ g_hash_table_insert (self->ids,
+ g_string_free (current_key, FALSE),
+ g_string_free (current_css, FALSE));
+ current_key = NULL;
+ current_css = NULL;
+ continue;
+ }
+ if (current_css != NULL)
+ g_string_append_c (current_css, ch);
+ }
+ if (current_key != NULL || current_css != NULL) {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "missing '}'");
+ return FALSE;
+ }
+ }
+
+ /* success */
+ return TRUE;
+}
+
+/**
+ * gs_css_get_markup_for_id:
+ * @self: a #GsCss
+ * @id: an ID, or %NULL for the default
+ *
+ * Gets the CSS markup for a specific ID.
+ *
+ * Returns: %TRUE for success
+ */
+const gchar *
+gs_css_get_markup_for_id (GsCss *self, const gchar *id)
+{
+ if (id == NULL)
+ id = "tile";
+ return g_hash_table_lookup (self->ids, id);
+}
+
+static void
+_css_parsing_error_cb (GtkCssProvider *provider,
+ GtkCssSection *section,
+ GError *error,
+ gpointer user_data)
+{
+ GError **error_parse = (GError **) user_data;
+ if (*error_parse != NULL) {
+ g_warning ("ignoring parse error %u:%u: %s",
+ gtk_css_section_get_start_line (section),
+ gtk_css_section_get_start_position (section),
+ error->message);
+ return;
+ }
+ *error_parse = g_error_copy (error);
+}
+
+static gboolean
+gs_css_validate_part (GsCss *self, const gchar *markup, GError **error)
+{
+ g_autofree gchar *markup_new = NULL;
+ g_autoptr(GError) error_parse = NULL;
+ g_autoptr(GString) str = NULL;
+ g_autoptr(GtkCssProvider) provider = NULL;
+
+ /* nothing set */
+ if (markup == NULL)
+ return TRUE;
+
+ /* remove custom class if NULL */
+ str = g_string_new (NULL);
+ g_string_append (str, ".themed-widget {");
+ if (self->rewrite_func != NULL) {
+ markup_new = self->rewrite_func (self->rewrite_func_data,
+ markup,
+ error);
+ if (markup_new == NULL)
+ return FALSE;
+ } else {
+ markup_new = g_strdup (markup);
+ }
+ g_string_append (str, markup_new);
+ g_string_append (str, "}");
+
+ /* set up custom provider */
+ provider = gtk_css_provider_new ();
+ g_signal_connect (provider, "parsing-error",
+ G_CALLBACK (_css_parsing_error_cb), &error_parse);
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ gtk_css_provider_load_from_data (provider, str->str, -1, NULL);
+ if (error_parse != NULL) {
+ if (error != NULL)
+ *error = g_error_copy (error_parse);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * gs_css_validate:
+ * @self: a #GsCss
+ * @error: a #GError or %NULL
+ *
+ * Validates each part of the CSS markup.
+ *
+ * Returns: %TRUE for success
+ */
+gboolean
+gs_css_validate (GsCss *self, GError **error)
+{
+ g_autoptr(GList) keys = NULL;
+
+ /* check each CSS ID */
+ keys = g_hash_table_get_keys (self->ids);
+ for (GList *l = keys; l != NULL; l = l->next) {
+ const gchar *tmp;
+ const gchar *id = l->data;
+ if (g_strcmp0 (id, "tile") != 0 &&
+ g_strcmp0 (id, "name") != 0 &&
+ g_strcmp0 (id, "summary") != 0) {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "Invalid CSS ID '%s'",
+ id);
+ return FALSE;
+ }
+ tmp = g_hash_table_lookup (self->ids, id);
+ if (!gs_css_validate_part (self, tmp, error))
+ return FALSE;
+ }
+
+ /* success */
+ return TRUE;
+}
+
+/**
+ * gs_css_set_rewrite_func:
+ * @self: a #GsCss
+ * @func: a #GsCssRewriteFunc or %NULL
+ * @user_data: user data to pass to @func
+ *
+ * Sets a function to be used when rewriting CSS before it is parsed.
+ *
+ * Returns: %TRUE for success
+ */
+void
+gs_css_set_rewrite_func (GsCss *self, GsCssRewriteFunc func, gpointer user_data)
+{
+ self->rewrite_func = func;
+ self->rewrite_func_data = user_data;
+}
+
+static void
+gs_css_finalize (GObject *object)
+{
+ GsCss *self = GS_CSS (object);
+ g_hash_table_unref (self->ids);
+ G_OBJECT_CLASS (gs_css_parent_class)->finalize (object);
+}
+
+static void
+gs_css_class_init (GsCssClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_css_finalize;
+}
+
+static void
+gs_css_init (GsCss *self)
+{
+ self->ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+}
+
+/**
+ * gs_css_new:
+ *
+ * Return value: a new #GsCss object.
+ **/
+GsCss *
+gs_css_new (void)
+{
+ GsCss *self;
+ self = g_object_new (GS_TYPE_CSS, NULL);
+ return GS_CSS (self);
+}
diff --git a/src/gs-css.h b/src/gs-css.h
new file mode 100644
index 0000000..d2041a9
--- /dev/null
+++ b/src/gs-css.h
@@ -0,0 +1,36 @@
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_CSS (gs_css_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsCss, gs_css, GS, CSS, GObject)
+
+typedef gchar *(*GsCssRewriteFunc) (gpointer user_data,
+ const gchar *markup,
+ GError **error);
+
+GsCss *gs_css_new (void);
+const gchar *gs_css_get_markup_for_id (GsCss *self,
+ const gchar *id);
+gboolean gs_css_parse (GsCss *self,
+ const gchar *markup,
+ GError **error);
+gboolean gs_css_validate (GsCss *self,
+ GError **error);
+void gs_css_set_rewrite_func (GsCss *self,
+ GsCssRewriteFunc func,
+ gpointer user_data);
+
+G_END_DECLS
diff --git a/src/gs-dbus-helper.c b/src/gs-dbus-helper.c
new file mode 100644
index 0000000..b90ff98
--- /dev/null
+++ b/src/gs-dbus-helper.c
@@ -0,0 +1,814 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <gio/gdesktopappinfo.h>
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "gnome-software-private.h"
+
+#include "gs-dbus-helper.h"
+#include "gs-packagekit-generated.h"
+#include "gs-packagekit-modify2-generated.h"
+#include "gs-resources.h"
+#include "gs-extras-page.h"
+
+struct _GsDbusHelper {
+ GObject parent;
+ GCancellable *cancellable;
+ GDBusInterfaceSkeleton *query_interface;
+ GDBusInterfaceSkeleton *modify_interface;
+ GDBusInterfaceSkeleton *modify2_interface;
+ PkTask *task;
+ guint dbus_own_name_id;
+};
+
+G_DEFINE_TYPE (GsDbusHelper, gs_dbus_helper, G_TYPE_OBJECT)
+
+typedef struct {
+ GDBusMethodInvocation *invocation;
+ GsDbusHelper *dbus_helper;
+ gboolean show_confirm_deps;
+ gboolean show_confirm_install;
+ gboolean show_confirm_search;
+ gboolean show_finished;
+ gboolean show_progress;
+ gboolean show_warning;
+} GsDbusHelperTask;
+
+static void
+gs_dbus_helper_task_free (GsDbusHelperTask *dtask)
+{
+ if (dtask->dbus_helper != NULL)
+ g_object_unref (dtask->dbus_helper);
+
+ g_free (dtask);
+}
+
+static void
+gs_dbus_helper_task_set_interaction (GsDbusHelperTask *dtask, const gchar *interaction)
+{
+ guint i;
+ g_auto(GStrv) interactions = NULL;
+
+ interactions = g_strsplit (interaction, ",", -1);
+ for (i = 0; interactions[i] != NULL; i++) {
+ if (g_strcmp0 (interactions[i], "show-warnings") == 0)
+ dtask->show_warning = TRUE;
+ else if (g_strcmp0 (interactions[i], "hide-warnings") == 0)
+ dtask->show_warning = FALSE;
+ else if (g_strcmp0 (interactions[i], "show-progress") == 0)
+ dtask->show_progress = TRUE;
+ else if (g_strcmp0 (interactions[i], "hide-progress") == 0)
+ dtask->show_progress = FALSE;
+ else if (g_strcmp0 (interactions[i], "show-finished") == 0)
+ dtask->show_finished = TRUE;
+ else if (g_strcmp0 (interactions[i], "hide-finished") == 0)
+ dtask->show_finished = FALSE;
+ else if (g_strcmp0 (interactions[i], "show-confirm-search") == 0)
+ dtask->show_confirm_search = TRUE;
+ else if (g_strcmp0 (interactions[i], "hide-confirm-search") == 0)
+ dtask->show_confirm_search = FALSE;
+ else if (g_strcmp0 (interactions[i], "show-confirm-install") == 0)
+ dtask->show_confirm_install = TRUE;
+ else if (g_strcmp0 (interactions[i], "hide-confirm-install") == 0)
+ dtask->show_confirm_install = FALSE;
+ else if (g_strcmp0 (interactions[i], "show-confirm-deps") == 0)
+ dtask->show_confirm_deps = TRUE;
+ else if (g_strcmp0 (interactions[i], "hide-confirm-deps") == 0)
+ dtask->show_confirm_deps = FALSE;
+ }
+}
+
+static void
+gs_dbus_helper_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
+{
+}
+
+static void
+gs_dbus_helper_query_is_installed_cb (GObject *source, GAsyncResult *res, gpointer data)
+{
+ GsDbusHelperTask *dtask = (GsDbusHelperTask *) data;
+ PkClient *client = PK_CLIENT (source);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(PkError) error_code = NULL;
+ g_autoptr(PkResults) results = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ g_dbus_method_invocation_return_error (dtask->invocation,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_ARGUMENT,
+ "failed to resolve: %s",
+ error->message);
+ goto out;
+ }
+
+ /* check error code */
+ error_code = pk_results_get_error_code (results);
+ if (error_code != NULL) {
+ g_dbus_method_invocation_return_error (dtask->invocation,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_ARGUMENT,
+ "failed to resolve: %s",
+ pk_error_get_details (error_code));
+ goto out;
+ }
+
+ /* get results */
+ array = pk_results_get_package_array (results);
+ gs_package_kit_query_complete_is_installed (GS_PACKAGE_KIT_QUERY (dtask->dbus_helper->query_interface),
+ dtask->invocation,
+ array->len > 0);
+out:
+ gs_dbus_helper_task_free (dtask);
+}
+
+static void
+gs_dbus_helper_query_search_file_cb (GObject *source, GAsyncResult *res, gpointer data)
+{
+ g_autoptr(GError) error = NULL;
+ GsDbusHelperTask *dtask = (GsDbusHelperTask *) data;
+ PkClient *client = PK_CLIENT (source);
+ PkInfoEnum info;
+ PkPackage *item;
+ g_autoptr(GPtrArray) array = NULL;
+ g_autoptr(PkError) error_code = NULL;
+ g_autoptr(PkResults) results = NULL;
+
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ g_dbus_method_invocation_return_error (dtask->invocation,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_ARGUMENT,
+ "failed to search: %s",
+ error->message);
+ return;
+ }
+
+ /* check error code */
+ error_code = pk_results_get_error_code (results);
+ if (error_code != NULL) {
+ g_dbus_method_invocation_return_error (dtask->invocation,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_ARGUMENT,
+ "failed to search: %s",
+ pk_error_get_details (error_code));
+ return;
+ }
+
+ /* get results */
+ array = pk_results_get_package_array (results);
+ if (array->len == 0) {
+ //TODO: org.freedesktop.PackageKit.Query.unknown
+ g_dbus_method_invocation_return_error (dtask->invocation,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_ARGUMENT,
+ "failed to find any packages");
+ return;
+ }
+
+ /* get first item */
+ item = g_ptr_array_index (array, 0);
+ info = pk_package_get_info (item);
+ gs_package_kit_query_complete_search_file (GS_PACKAGE_KIT_QUERY (dtask->dbus_helper->query_interface),
+ dtask->invocation,
+ info == PK_INFO_ENUM_INSTALLED,
+ pk_package_get_name (item));
+}
+
+static gboolean
+handle_query_search_file (GsPackageKitQuery *skeleton,
+ GDBusMethodInvocation *invocation,
+ const gchar *file_name,
+ const gchar *interaction,
+ gpointer user_data)
+{
+ GsDbusHelper *dbus_helper = user_data;
+ GsDbusHelperTask *dtask;
+ g_auto(GStrv) names = NULL;
+
+ g_debug ("****** SearchFile");
+
+ dtask = g_new0 (GsDbusHelperTask, 1);
+ dtask->dbus_helper = g_object_ref (dbus_helper);
+ dtask->invocation = invocation;
+ gs_dbus_helper_task_set_interaction (dtask, interaction);
+ names = g_strsplit (file_name, "&", -1);
+ pk_client_search_files_async (PK_CLIENT (dbus_helper->task),
+ pk_bitfield_value (PK_FILTER_ENUM_NEWEST),
+ names, NULL,
+ gs_dbus_helper_progress_cb, dtask,
+ gs_dbus_helper_query_search_file_cb, dtask);
+
+ return TRUE;
+}
+
+static gboolean
+handle_query_is_installed (GsPackageKitQuery *skeleton,
+ GDBusMethodInvocation *invocation,
+ const gchar *package_name,
+ const gchar *interaction,
+ gpointer user_data)
+{
+ GsDbusHelper *dbus_helper = user_data;
+ GsDbusHelperTask *dtask;
+ g_auto(GStrv) names = NULL;
+
+ g_debug ("****** IsInstalled");
+
+ dtask = g_new0 (GsDbusHelperTask, 1);
+ dtask->dbus_helper = g_object_ref (dbus_helper);
+ dtask->invocation = invocation;
+ gs_dbus_helper_task_set_interaction (dtask, interaction);
+ names = g_strsplit (package_name, "|", 1);
+ pk_client_resolve_async (PK_CLIENT (dbus_helper->task),
+ pk_bitfield_value (PK_FILTER_ENUM_INSTALLED),
+ names, NULL,
+ gs_dbus_helper_progress_cb, dtask,
+ gs_dbus_helper_query_is_installed_cb, dtask);
+
+ return TRUE;
+}
+
+static gboolean
+is_show_confirm_search_set (const gchar *interaction)
+{
+ GsDbusHelperTask *dtask;
+ gboolean ret;
+
+ dtask = g_new0 (GsDbusHelperTask, 1);
+ dtask->show_confirm_search = TRUE;
+ gs_dbus_helper_task_set_interaction (dtask, interaction);
+ ret = dtask->show_confirm_search;
+ gs_dbus_helper_task_free (dtask);
+
+ return ret;
+}
+
+static void
+notify_search_resources (GsExtrasPageMode mode,
+ const gchar *desktop_id,
+ gchar **resources)
+{
+ const gchar *app_name = NULL;
+ const gchar *mode_string;
+ const gchar *title = NULL;
+ g_autofree gchar *body = NULL;
+ g_autoptr(GDesktopAppInfo) app_info = NULL;
+ g_autoptr(GNotification) n = NULL;
+
+ if (desktop_id != NULL) {
+ app_info = gs_utils_get_desktop_app_info (desktop_id);
+ if (app_info != NULL)
+ app_name = g_app_info_get_name (G_APP_INFO (app_info));
+ }
+
+ if (app_name == NULL) {
+ /* TRANSLATORS: this is a what we use in notifications if the app's name is unknown */
+ app_name = _("An application");
+ }
+
+ switch (mode) {
+ case GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES:
+ /* TRANSLATORS: this is a notification displayed when an app needs additional MIME types. */
+ body = g_strdup_printf (_("%s is requesting additional file format support."), app_name);
+ /* TRANSLATORS: notification title */
+ title = _("Additional MIME Types Required");
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES:
+ /* TRANSLATORS: this is a notification displayed when an app needs additional fonts. */
+ body = g_strdup_printf (_("%s is requesting additional fonts."), app_name);
+ /* TRANSLATORS: notification title */
+ title = _("Additional Fonts Required");
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES:
+ /* TRANSLATORS: this is a notification displayed when an app needs additional codecs. */
+ body = g_strdup_printf (_("%s is requesting additional multimedia codecs."), app_name);
+ /* TRANSLATORS: notification title */
+ title = _("Additional Multimedia Codecs Required");
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS:
+ /* TRANSLATORS: this is a notification displayed when an app needs additional printer drivers. */
+ body = g_strdup_printf (_("%s is requesting additional printer drivers."), app_name);
+ /* TRANSLATORS: notification title */
+ title = _("Additional Printer Drivers Required");
+ break;
+ default:
+ /* TRANSLATORS: this is a notification displayed when an app wants to install additional packages. */
+ body = g_strdup_printf (_("%s is requesting additional packages."), app_name);
+ /* TRANSLATORS: notification title */
+ title = _("Additional Packages Required");
+ break;
+ }
+
+ mode_string = gs_extras_page_mode_to_string (mode);
+
+ n = g_notification_new (title);
+ g_notification_set_body (n, body);
+ /* TRANSLATORS: this is a button that launches gnome-software */
+ g_notification_add_button_with_target (n, _("Find in Software"), "app.install-resources", "(s^ass)", mode_string, resources, "");
+ g_notification_set_default_action_and_target (n, "app.install-resources", "(s^ass)", mode_string, resources, "");
+ g_application_send_notification (g_application_get_default (), "install-resources", n);
+}
+
+static void
+install_resources (GsExtrasPageMode mode,
+ gchar **resources,
+ const gchar *interaction,
+ const gchar *desktop_id,
+ GVariant *platform_data)
+{
+ GApplication *app;
+ const gchar *mode_string;
+ const gchar *startup_id = NULL;
+
+ if (is_show_confirm_search_set (interaction)) {
+ notify_search_resources (mode, desktop_id, resources);
+ return;
+ }
+
+ if (platform_data != NULL) {
+ g_variant_lookup (platform_data, "desktop-startup-id",
+ "&s", &startup_id);
+ }
+
+ app = g_application_get_default ();
+ mode_string = gs_extras_page_mode_to_string (mode);
+ g_action_group_activate_action (G_ACTION_GROUP (app), "install-resources",
+ g_variant_new ("(s^ass)", mode_string, resources, startup_id));
+}
+
+static gboolean
+handle_modify_install_package_files (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_files,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallPackageFiles");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES, NULL, arg_files);
+ gs_package_kit_modify_complete_install_package_files (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify_install_provide_files (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_files,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallProvideFiles");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES, NULL, arg_files);
+ gs_package_kit_modify_complete_install_provide_files (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify_install_package_names (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_package_names,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallPackageNames");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES, NULL, arg_package_names);
+ gs_package_kit_modify_complete_install_package_names (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify_install_mime_types (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_mime_types,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallMimeTypes");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES, NULL, arg_mime_types);
+ gs_package_kit_modify_complete_install_mime_types (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify_install_fontconfig_resources (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_resources,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallFontconfigResources");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES, NULL, arg_resources);
+ gs_package_kit_modify_complete_install_fontconfig_resources (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify_install_gstreamer_resources (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_resources,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallGStreamerResources");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES, NULL, arg_resources);
+ gs_package_kit_modify_complete_install_gstreamer_resources (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify_install_resources (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ const gchar *arg_type,
+ gchar **arg_resources,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ gboolean ret;
+
+ g_debug ("****** Modify.InstallResources");
+
+ if (g_strcmp0 (arg_type, "plasma-service") == 0) {
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES, NULL, arg_resources);
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+ gs_package_kit_modify_complete_install_resources (object, invocation);
+
+ return ret;
+}
+
+static gboolean
+handle_modify_install_printer_drivers (GsPackageKitModify *object,
+ GDBusMethodInvocation *invocation,
+ guint arg_xid,
+ gchar **arg_device_ids,
+ const gchar *arg_interaction,
+ gpointer user_data)
+{
+ g_debug ("****** Modify.InstallPrinterDrivers");
+
+ notify_search_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS, NULL, arg_device_ids);
+ gs_package_kit_modify_complete_install_printer_drivers (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_package_files (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_files,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallPackageFiles");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES, arg_files, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_package_files (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_provide_files (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_files,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallProvideFiles");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES, arg_files, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_provide_files (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_package_names (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_package_names,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallPackageNames");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES, arg_package_names, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_package_names (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_mime_types (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_mime_types,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallMimeTypes");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES, arg_mime_types, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_mime_types (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_fontconfig_resources (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_resources,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallFontconfigResources");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES, arg_resources, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_fontconfig_resources (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_gstreamer_resources (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_resources,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallGStreamerResources");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES, arg_resources, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_gstreamer_resources (object, invocation);
+
+ return TRUE;
+}
+
+static gboolean
+handle_modify2_install_resources (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_type,
+ gchar **arg_resources,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ gboolean ret;
+
+ g_debug ("****** Modify2.InstallResources");
+
+ if (g_strcmp0 (arg_type, "plasma-service") == 0) {
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES, arg_resources, arg_interaction, arg_desktop_id, arg_platform_data);
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+ gs_package_kit_modify2_complete_install_resources (object, invocation);
+
+ return ret;
+}
+
+static gboolean
+handle_modify2_install_printer_drivers (GsPackageKitModify2 *object,
+ GDBusMethodInvocation *invocation,
+ gchar **arg_device_ids,
+ const gchar *arg_interaction,
+ const gchar *arg_desktop_id,
+ GVariant *arg_platform_data,
+ gpointer user_data)
+{
+ g_debug ("****** Modify2.InstallPrinterDrivers");
+
+ install_resources (GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS, arg_device_ids, arg_interaction, arg_desktop_id, arg_platform_data);
+ gs_package_kit_modify2_complete_install_printer_drivers (object, invocation);
+
+ return TRUE;
+}
+
+static void
+gs_dbus_helper_name_acquired_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_debug ("acquired session service");
+}
+
+static void
+gs_dbus_helper_name_lost_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_warning ("lost session service");
+}
+
+static void
+bus_gotten_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsDbusHelper *dbus_helper = GS_DBUS_HELPER (user_data);
+ g_autoptr(GDBusConnection) connection = NULL;
+ g_autoptr(GDesktopAppInfo) app_info = NULL;
+ g_autoptr(GError) error = NULL;
+
+ connection = g_bus_get_finish (res, &error);
+ if (connection == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("Could not get session bus: %s", error->message);
+ return;
+ }
+
+ /* Query interface */
+ dbus_helper->query_interface = G_DBUS_INTERFACE_SKELETON (gs_package_kit_query_skeleton_new ());
+
+ g_signal_connect (dbus_helper->query_interface, "handle-is-installed",
+ G_CALLBACK (handle_query_is_installed), dbus_helper);
+ g_signal_connect (dbus_helper->query_interface, "handle-search-file",
+ G_CALLBACK (handle_query_search_file), dbus_helper);
+
+ if (!g_dbus_interface_skeleton_export (dbus_helper->query_interface,
+ connection,
+ "/org/freedesktop/PackageKit",
+ &error)) {
+ g_warning ("Could not export dbus interface: %s", error->message);
+ return;
+ }
+
+ /* Modify interface */
+ dbus_helper->modify_interface = G_DBUS_INTERFACE_SKELETON (gs_package_kit_modify_skeleton_new ());
+
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-package-files",
+ G_CALLBACK (handle_modify_install_package_files), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-provide-files",
+ G_CALLBACK (handle_modify_install_provide_files), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-package-names",
+ G_CALLBACK (handle_modify_install_package_names), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-mime-types",
+ G_CALLBACK (handle_modify_install_mime_types), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-fontconfig-resources",
+ G_CALLBACK (handle_modify_install_fontconfig_resources), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-gstreamer-resources",
+ G_CALLBACK (handle_modify_install_gstreamer_resources), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-resources",
+ G_CALLBACK (handle_modify_install_resources), dbus_helper);
+ g_signal_connect (dbus_helper->modify_interface, "handle-install-printer-drivers",
+ G_CALLBACK (handle_modify_install_printer_drivers), dbus_helper);
+
+ if (!g_dbus_interface_skeleton_export (dbus_helper->modify_interface,
+ connection,
+ "/org/freedesktop/PackageKit",
+ &error)) {
+ g_warning ("Could not export dbus interface: %s", error->message);
+ return;
+ }
+
+ /* Modify2 interface */
+ dbus_helper->modify2_interface = G_DBUS_INTERFACE_SKELETON (gs_package_kit_modify2_skeleton_new ());
+
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-package-files",
+ G_CALLBACK (handle_modify2_install_package_files), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-provide-files",
+ G_CALLBACK (handle_modify2_install_provide_files), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-package-names",
+ G_CALLBACK (handle_modify2_install_package_names), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-mime-types",
+ G_CALLBACK (handle_modify2_install_mime_types), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-fontconfig-resources",
+ G_CALLBACK (handle_modify2_install_fontconfig_resources), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-gstreamer-resources",
+ G_CALLBACK (handle_modify2_install_gstreamer_resources), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-resources",
+ G_CALLBACK (handle_modify2_install_resources), dbus_helper);
+ g_signal_connect (dbus_helper->modify2_interface, "handle-install-printer-drivers",
+ G_CALLBACK (handle_modify2_install_printer_drivers), dbus_helper);
+
+ /* Look up our own localized name and export it as a property on the bus */
+ app_info = g_desktop_app_info_new ("org.gnome.Software.desktop");
+ if (app_info != NULL) {
+ const gchar *app_name = g_app_info_get_name (G_APP_INFO (app_info));
+ if (app_name != NULL)
+ g_object_set (G_OBJECT (dbus_helper->modify2_interface),
+ "display-name", app_name,
+ NULL);
+ }
+
+ if (!g_dbus_interface_skeleton_export (dbus_helper->modify2_interface,
+ connection,
+ "/org/freedesktop/PackageKit",
+ &error)) {
+ g_warning ("Could not export dbus interface: %s", error->message);
+ return;
+ }
+
+ dbus_helper->dbus_own_name_id = g_bus_own_name_on_connection (connection,
+ "org.freedesktop.PackageKit",
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ gs_dbus_helper_name_acquired_cb,
+ gs_dbus_helper_name_lost_cb,
+ NULL, NULL);
+}
+
+static void
+gs_dbus_helper_init (GsDbusHelper *dbus_helper)
+{
+ dbus_helper->task = pk_task_new ();
+ dbus_helper->cancellable = g_cancellable_new ();
+
+ g_bus_get (G_BUS_TYPE_SESSION,
+ dbus_helper->cancellable,
+ (GAsyncReadyCallback) bus_gotten_cb,
+ dbus_helper);
+}
+
+static void
+gs_dbus_helper_dispose (GObject *object)
+{
+ GsDbusHelper *dbus_helper = GS_DBUS_HELPER (object);
+
+ g_cancellable_cancel (dbus_helper->cancellable);
+ g_clear_object (&dbus_helper->cancellable);
+
+ if (dbus_helper->dbus_own_name_id != 0) {
+ g_bus_unown_name (dbus_helper->dbus_own_name_id);
+ dbus_helper->dbus_own_name_id = 0;
+ }
+
+ if (dbus_helper->query_interface != NULL) {
+ g_dbus_interface_skeleton_unexport (dbus_helper->query_interface);
+ g_clear_object (&dbus_helper->query_interface);
+ }
+
+ if (dbus_helper->modify_interface != NULL) {
+ g_dbus_interface_skeleton_unexport (dbus_helper->modify_interface);
+ g_clear_object (&dbus_helper->modify_interface);
+ }
+
+ if (dbus_helper->modify2_interface != NULL) {
+ g_dbus_interface_skeleton_unexport (dbus_helper->modify2_interface);
+ g_clear_object (&dbus_helper->modify2_interface);
+ }
+
+ g_clear_object (&dbus_helper->task);
+
+ G_OBJECT_CLASS (gs_dbus_helper_parent_class)->dispose (object);
+}
+
+static void
+gs_dbus_helper_class_init (GsDbusHelperClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = gs_dbus_helper_dispose;
+}
+
+GsDbusHelper *
+gs_dbus_helper_new (void)
+{
+ return GS_DBUS_HELPER (g_object_new (GS_TYPE_DBUS_HELPER, NULL));
+}
diff --git a/src/gs-dbus-helper.h b/src/gs-dbus-helper.h
new file mode 100644
index 0000000..7e77ea5
--- /dev/null
+++ b/src/gs-dbus-helper.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_DBUS_HELPER (gs_dbus_helper_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsDbusHelper, gs_dbus_helper, GS, DBUS_HELPER, GObject)
+
+GsDbusHelper *gs_dbus_helper_new (void);
+
+G_END_DECLS
diff --git a/src/gs-details-page.c b/src/gs-details-page.c
new file mode 100644
index 0000000..6994e6a
--- /dev/null
+++ b/src/gs-details-page.c
@@ -0,0 +1,2856 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2019 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <locale.h>
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "gs-common.h"
+#include "gs-content-rating.h"
+#include "gs-utils.h"
+
+#include "gs-details-page.h"
+#include "gs-app-addon-row.h"
+#include "gs-history-dialog.h"
+#include "gs-origin-popover-row.h"
+#include "gs-screenshot-image.h"
+#include "gs-star-widget.h"
+#include "gs-review-histogram.h"
+#include "gs-review-dialog.h"
+#include "gs-review-row.h"
+
+/* the number of reviews to show before clicking the 'More Reviews' button */
+#define SHOW_NR_REVIEWS_INITIAL 4
+
+static void gs_details_page_refresh_all (GsDetailsPage *self);
+
+typedef enum {
+ GS_DETAILS_PAGE_STATE_LOADING,
+ GS_DETAILS_PAGE_STATE_READY,
+ GS_DETAILS_PAGE_STATE_FAILED
+} GsDetailsPageState;
+
+struct _GsDetailsPage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *cancellable;
+ GCancellable *app_cancellable;
+ GsApp *app;
+ GsApp *app_local_file;
+ GsShell *shell;
+ SoupSession *session;
+ gboolean enable_reviews;
+ gboolean show_all_reviews;
+ GSettings *settings;
+ GtkSizeGroup *size_group_origin_popover;
+
+ GtkWidget *application_details_icon;
+ GtkWidget *application_details_summary;
+ GtkWidget *application_details_title;
+ GtkWidget *box_addons;
+ GtkWidget *box_details;
+ GtkWidget *box_details_description;
+ GtkWidget *box_details_support;
+ GtkWidget *box_progress;
+ GtkWidget *box_progress2;
+ GtkWidget *star;
+ GtkWidget *label_review_count;
+ GtkWidget *box_details_screenshot;
+ GtkWidget *box_details_screenshot_main;
+ GtkWidget *box_details_screenshot_scrolledwindow;
+ GtkWidget *box_details_screenshot_thumbnails;
+ GtkWidget *box_details_license_list;
+ GtkWidget *button_details_launch;
+ GtkWidget *button_details_add_shortcut;
+ GtkWidget *button_details_remove_shortcut;
+ GtkWidget *button_details_website;
+ GtkWidget *button_donate;
+ GtkWidget *button_install;
+ GtkWidget *button_update;
+ GtkWidget *button_remove;
+ GtkWidget *button_cancel;
+ GtkWidget *button_more_reviews;
+ GtkWidget *infobar_details_app_norepo;
+ GtkWidget *infobar_details_app_repo;
+ GtkWidget *infobar_details_package_baseos;
+ GtkWidget *infobar_details_repo;
+ GtkWidget *label_progress_percentage;
+ GtkWidget *label_progress_status;
+ GtkWidget *label_addons_uninstalled_app;
+ GtkWidget *label_details_category_title;
+ GtkWidget *label_details_category_value;
+ GtkWidget *label_details_developer_title;
+ GtkWidget *label_details_developer_value;
+ GtkWidget *box_details_developer;
+ GtkWidget *image_details_developer_verified;
+ GtkWidget *button_details_license_free;
+ GtkWidget *button_details_license_nonfree;
+ GtkWidget *button_details_license_unknown;
+ GtkWidget *label_details_license_title;
+ GtkWidget *box_details_license_value;
+ GtkWidget *label_details_channel_title;
+ GtkWidget *label_details_channel_value;
+ GtkWidget *label_details_origin_title;
+ GtkWidget *label_details_origin_value;
+ GtkWidget *label_details_size_installed_title;
+ GtkWidget *label_details_size_installed_value;
+ GtkWidget *label_details_size_download_title;
+ GtkWidget *label_details_size_download_value;
+ GtkWidget *label_details_updated_title;
+ GtkWidget *label_details_updated_value;
+ GtkWidget *label_details_version_title;
+ GtkWidget *label_details_version_value;
+ GtkWidget *label_details_permissions_title;
+ GtkWidget *button_details_permissions_value;
+ GtkWidget *label_failed;
+ GtkWidget *label_license_nonfree_details;
+ GtkWidget *label_licenses_intro;
+ GtkWidget *list_box_addons;
+ GtkWidget *box_reviews;
+ GtkWidget *box_details_screenshot_fallback;
+ GtkWidget *histogram;
+ GtkWidget *button_review;
+ GtkWidget *list_box_reviews;
+ GtkWidget *scrolledwindow_details;
+ GtkWidget *spinner_details;
+ GtkWidget *spinner_remove;
+ GtkWidget *stack_details;
+ GtkWidget *grid_details_kudo;
+ GtkWidget *image_details_kudo_docs;
+ GtkWidget *image_details_kudo_sandboxed;
+ GtkWidget *image_details_kudo_integration;
+ GtkWidget *image_details_kudo_translated;
+ GtkWidget *image_details_kudo_updated;
+ GtkWidget *label_details_kudo_docs;
+ GtkWidget *label_details_kudo_sandboxed;
+ GtkWidget *label_details_kudo_integration;
+ GtkWidget *label_details_kudo_translated;
+ GtkWidget *label_details_kudo_updated;
+ GtkWidget *progressbar_top;
+ guint progress_pulse_id;
+ GtkWidget *popover_license_free;
+ GtkWidget *popover_license_nonfree;
+ GtkWidget *popover_license_unknown;
+ GtkWidget *popover_content_rating;
+ GtkWidget *label_content_rating_title;
+ GtkWidget *label_content_rating_message;
+ GtkWidget *label_content_rating_none;
+ GtkWidget *button_details_rating_value;
+ GtkStyleProvider *button_details_rating_style_provider;
+ GtkWidget *label_details_rating_title;
+ GtkWidget *popover_permissions;
+ GtkWidget *box_permissions_details;
+ GtkWidget *star_eventbox;
+};
+
+G_DEFINE_TYPE (GsDetailsPage, gs_details_page, GS_TYPE_PAGE)
+
+static void
+gs_details_page_set_state (GsDetailsPage *self,
+ GsDetailsPageState state)
+{
+ /* spinner */
+ switch (state) {
+ case GS_DETAILS_PAGE_STATE_LOADING:
+ gs_start_spinner (GTK_SPINNER (self->spinner_details));
+ gtk_widget_show (self->spinner_details);
+ break;
+ case GS_DETAILS_PAGE_STATE_READY:
+ case GS_DETAILS_PAGE_STATE_FAILED:
+ gs_stop_spinner (GTK_SPINNER (self->spinner_details));
+ gtk_widget_hide (self->spinner_details);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ /* stack */
+ switch (state) {
+ case GS_DETAILS_PAGE_STATE_LOADING:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_details), "spinner");
+ break;
+ case GS_DETAILS_PAGE_STATE_READY:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_details), "ready");
+ break;
+ case GS_DETAILS_PAGE_STATE_FAILED:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_details), "failed");
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_details_page_update_shortcut_button (GsDetailsPage *self)
+{
+ gboolean add_shortcut_func;
+ gboolean remove_shortcut_func;
+ gboolean has_shortcut;
+
+ gtk_widget_set_visible (self->button_details_add_shortcut,
+ FALSE);
+ gtk_widget_set_visible (self->button_details_remove_shortcut,
+ FALSE);
+
+ if (gs_app_get_kind (self->app) != AS_APP_KIND_DESKTOP)
+ return;
+
+ /* Leave the button hidden if the app can’t be launched by the current
+ * user. */
+ if (gs_app_has_quirk (self->app, GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE))
+ return;
+
+ /* only consider the shortcut button if the app is installed */
+ switch (gs_app_get_state (self->app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ break;
+ default:
+ return;
+ }
+
+ add_shortcut_func =
+ gs_plugin_loader_get_plugin_supported (self->plugin_loader,
+ "gs_plugin_add_shortcut");
+ remove_shortcut_func =
+ gs_plugin_loader_get_plugin_supported (self->plugin_loader,
+ "gs_plugin_remove_shortcut");
+
+ has_shortcut = gs_app_has_quirk (self->app, GS_APP_QUIRK_HAS_SHORTCUT);
+
+ if (add_shortcut_func) {
+ gtk_widget_set_visible (self->button_details_add_shortcut,
+ !has_shortcut || !remove_shortcut_func);
+ gtk_widget_set_sensitive (self->button_details_add_shortcut,
+ !has_shortcut);
+ }
+
+ if (remove_shortcut_func) {
+ gtk_widget_set_visible (self->button_details_remove_shortcut,
+ has_shortcut || !add_shortcut_func);
+ gtk_widget_set_sensitive (self->button_details_remove_shortcut,
+ has_shortcut);
+ }
+}
+
+static gboolean
+app_has_pending_action (GsApp *app)
+{
+ /* sanitize the pending state change by verifying we're in one of the
+ * expected states */
+ if (gs_app_get_state (app) != AS_APP_STATE_AVAILABLE &&
+ gs_app_get_state (app) != AS_APP_STATE_UPDATABLE_LIVE &&
+ gs_app_get_state (app) != AS_APP_STATE_UPDATABLE &&
+ gs_app_get_state (app) != AS_APP_STATE_QUEUED_FOR_INSTALL)
+ return FALSE;
+
+ return (gs_app_get_pending_action (app) != GS_PLUGIN_ACTION_UNKNOWN) ||
+ (gs_app_get_state (app) == AS_APP_STATE_QUEUED_FOR_INSTALL);
+}
+
+static void
+gs_details_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (page);
+ GtkWidget *widget;
+ GtkAdjustment *adj;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_DETAILS) {
+ g_warning ("Called switch_to(details) when in mode %s",
+ gs_shell_get_mode_string (self->shell));
+ return;
+ }
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
+ gtk_label_set_label (GTK_LABEL (widget), "");
+ gtk_widget_show (widget);
+
+ /* not set, perhaps file-to-app */
+ if (self->app == NULL)
+ return;
+
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_details));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+
+ gs_grab_focus_when_mapped (self->scrolledwindow_details);
+}
+
+static gboolean
+_pulse_cb (gpointer user_data)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (self->progressbar_top));
+
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+stop_progress_pulsing (GsDetailsPage *self)
+{
+ if (self->progress_pulse_id != 0) {
+ g_source_remove (self->progress_pulse_id);
+ self->progress_pulse_id = 0;
+ }
+}
+
+static void
+gs_details_page_refresh_progress (GsDetailsPage *self)
+{
+ guint percentage;
+ AsAppState state;
+
+ /* cancel button */
+ state = gs_app_get_state (self->app);
+ switch (state) {
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (self->button_cancel, TRUE);
+ /* If the app is installing, the user can only cancel it if
+ * 1) They haven't already, and
+ * 2) the plugin hasn't said that they can't, for example if a
+ * package manager has already gone 'too far'
+ */
+ gtk_widget_set_sensitive (self->button_cancel,
+ !g_cancellable_is_cancelled (self->app_cancellable) &&
+ gs_app_get_allow_cancel (self->app));
+ break;
+ default:
+ gtk_widget_set_visible (self->button_cancel, FALSE);
+ break;
+ }
+ if (app_has_pending_action (self->app)) {
+ gtk_widget_set_visible (self->button_cancel, TRUE);
+ gtk_widget_set_sensitive (self->button_cancel,
+ !g_cancellable_is_cancelled (self->app_cancellable) &&
+ gs_app_get_allow_cancel (self->app));
+ }
+
+ /* progress status label */
+ switch (state) {
+ case AS_APP_STATE_REMOVING:
+ gtk_widget_set_visible (self->label_progress_status, TRUE);
+ gtk_label_set_label (GTK_LABEL (self->label_progress_status),
+ _("Removing…"));
+ break;
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (self->label_progress_status, TRUE);
+ gtk_label_set_label (GTK_LABEL (self->label_progress_status),
+ _("Installing"));
+ break;
+ default:
+ gtk_widget_set_visible (self->label_progress_status, FALSE);
+ break;
+ }
+ if (app_has_pending_action (self->app)) {
+ GsPluginAction action = gs_app_get_pending_action (self->app);
+ gtk_widget_set_visible (self->label_progress_status, TRUE);
+ switch (action) {
+ case GS_PLUGIN_ACTION_INSTALL:
+ gtk_label_set_label (GTK_LABEL (self->label_progress_status),
+ /* TRANSLATORS: This is a label on top of the app's progress
+ * bar to inform the user that the app should be installed soon */
+ _("Pending installation…"));
+ break;
+ case GS_PLUGIN_ACTION_UPDATE:
+ case GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD:
+ gtk_label_set_label (GTK_LABEL (self->label_progress_status),
+ /* TRANSLATORS: This is a label on top of the app's progress
+ * bar to inform the user that the app should be updated soon */
+ _("Pending update…"));
+ break;
+ default:
+ gtk_widget_set_visible (self->label_progress_status, FALSE);
+ break;
+ }
+ }
+
+ /* percentage bar */
+ switch (state) {
+ case AS_APP_STATE_INSTALLING:
+ percentage = gs_app_get_progress (self->app);
+ if (percentage == GS_APP_PROGRESS_UNKNOWN) {
+ /* Translators: This string is shown when preparing to download and install an app. */
+ gtk_label_set_label (GTK_LABEL (self->label_progress_status), _("Preparing…"));
+ gtk_widget_set_visible (self->label_progress_status, TRUE);
+ gtk_widget_set_visible (self->label_progress_percentage, FALSE);
+
+ if (self->progress_pulse_id == 0)
+ self->progress_pulse_id = g_timeout_add (50, _pulse_cb, self);
+
+ gtk_widget_set_visible (self->progressbar_top, TRUE);
+ break;
+ } else if (percentage <= 100) {
+ g_autofree gchar *str = g_strdup_printf ("%u%%", percentage);
+ gtk_label_set_label (GTK_LABEL (self->label_progress_percentage), str);
+ gtk_widget_set_visible (self->label_progress_percentage, TRUE);
+ stop_progress_pulsing (self);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (self->progressbar_top),
+ (gdouble) percentage / 100.f);
+ gtk_widget_set_visible (self->progressbar_top, TRUE);
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ gtk_widget_set_visible (self->label_progress_percentage, FALSE);
+ gtk_widget_set_visible (self->progressbar_top, FALSE);
+ stop_progress_pulsing (self);
+ break;
+ }
+ if (app_has_pending_action (self->app)) {
+ gtk_widget_set_visible (self->progressbar_top, TRUE);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (self->progressbar_top), 0);
+ }
+
+ /* spinner */
+ switch (state) {
+ case AS_APP_STATE_REMOVING:
+ if (!gtk_widget_get_visible (self->spinner_remove)) {
+ gtk_spinner_start (GTK_SPINNER (self->spinner_remove));
+ gtk_widget_set_visible (self->spinner_remove, TRUE);
+ }
+ /* align text together with the spinner if we're showing it */
+ gtk_widget_set_halign (self->box_progress2, GTK_ALIGN_START);
+ break;
+ default:
+ gtk_widget_set_visible (self->spinner_remove, FALSE);
+ gtk_spinner_stop (GTK_SPINNER (self->spinner_remove));
+ gtk_widget_set_halign (self->box_progress2, GTK_ALIGN_CENTER);
+ break;
+ }
+
+ /* progress box */
+ switch (state) {
+ case AS_APP_STATE_REMOVING:
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (self->box_progress, TRUE);
+ break;
+ default:
+ gtk_widget_set_visible (self->box_progress, FALSE);
+ break;
+ }
+ if (app_has_pending_action (self->app))
+ gtk_widget_set_visible (self->box_progress, TRUE);
+}
+
+static gboolean
+gs_details_page_refresh_progress_idle (gpointer user_data)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ gs_details_page_refresh_progress (self);
+ g_object_unref (self);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_details_page_progress_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsDetailsPage *self)
+{
+ g_idle_add (gs_details_page_refresh_progress_idle, g_object_ref (self));
+}
+
+static gboolean
+gs_details_page_allow_cancel_changed_idle (gpointer user_data)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ gtk_widget_set_sensitive (self->button_cancel,
+ gs_app_get_allow_cancel (self->app));
+ g_object_unref (self);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_details_page_allow_cancel_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsDetailsPage *self)
+{
+ g_idle_add (gs_details_page_allow_cancel_changed_idle,
+ g_object_ref (self));
+}
+
+static gboolean
+gs_details_page_switch_to_idle (gpointer user_data)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+
+ if (gs_shell_get_mode (self->shell) == GS_SHELL_MODE_DETAILS)
+ gs_page_switch_to (GS_PAGE (self), TRUE);
+
+ /* update widgets */
+ gs_details_page_refresh_all (self);
+
+ g_object_unref (self);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_details_page_notify_state_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsDetailsPage *self)
+{
+ g_idle_add (gs_details_page_switch_to_idle, g_object_ref (self));
+}
+
+static void
+gs_details_page_load_main_screenshot (GsDetailsPage *self,
+ AsScreenshot *screenshot)
+{
+ GsScreenshotImage *ssmain;
+ g_autoptr(GList) children = NULL;
+
+ children = gtk_container_get_children (GTK_CONTAINER (self->box_details_screenshot_main));
+ ssmain = GS_SCREENSHOT_IMAGE (children->data);
+
+ gs_screenshot_image_set_screenshot (ssmain, screenshot);
+ gs_screenshot_image_load_async (ssmain, NULL);
+}
+
+static void
+gs_details_page_screenshot_selected_cb (GtkListBox *list,
+ GtkListBoxRow *row,
+ GsDetailsPage *self)
+{
+ GsScreenshotImage *ssthumb;
+ AsScreenshot *ss;
+ g_autoptr(GList) children = NULL;
+
+ if (row == NULL)
+ return;
+
+ ssthumb = GS_SCREENSHOT_IMAGE (gtk_bin_get_child (GTK_BIN (row)));
+ ss = gs_screenshot_image_get_screenshot (ssthumb);
+
+ gs_details_page_load_main_screenshot (self, ss);
+}
+
+static void
+gs_details_page_refresh_screenshots (GsDetailsPage *self)
+{
+ GPtrArray *screenshots;
+ AsScreenshot *ss;
+ GtkWidget *label;
+ GtkWidget *list;
+ GtkWidget *ssimg;
+ GtkWidget *main_screenshot = NULL;
+ guint i;
+ gboolean is_offline = !gs_plugin_loader_get_network_available (self->plugin_loader);
+ guint num_screenshots_loaded = 0;
+
+ /* reset the visibility of screenshots */
+ gtk_widget_show (self->box_details_screenshot);
+
+ /* treat screenshots differently */
+ if (gs_app_get_kind (self->app) == AS_APP_KIND_FONT) {
+ gs_container_remove_all (GTK_CONTAINER (self->box_details_screenshot_thumbnails));
+ gs_container_remove_all (GTK_CONTAINER (self->box_details_screenshot_main));
+ screenshots = gs_app_get_screenshots (self->app);
+ for (i = 0; i < screenshots->len; i++) {
+ ss = g_ptr_array_index (screenshots, i);
+
+ /* set caption */
+ label = gtk_label_new (as_screenshot_get_caption (ss, NULL));
+ g_object_set (label,
+ "xalign", 0.0,
+ "max-width-chars", 10,
+ "wrap", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (self->box_details_screenshot_main), label);
+ gtk_widget_set_visible (label, TRUE);
+
+ /* set images */
+ ssimg = gs_screenshot_image_new (self->session);
+ gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss);
+ gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
+ 640,
+ 48);
+ gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), NULL);
+ gtk_container_add (GTK_CONTAINER (self->box_details_screenshot_main), ssimg);
+ gtk_widget_set_visible (ssimg, TRUE);
+ }
+ gtk_widget_set_visible (self->box_details_screenshot,
+ screenshots->len > 0);
+ gtk_widget_set_visible (self->box_details_screenshot_fallback,
+ screenshots->len == 0 && !is_offline);
+ return;
+ }
+
+ /* fallback warning */
+ screenshots = gs_app_get_screenshots (self->app);
+ switch (gs_app_get_kind (self->app)) {
+ case AS_APP_KIND_GENERIC:
+ case AS_APP_KIND_CODEC:
+ case AS_APP_KIND_ADDON:
+ case AS_APP_KIND_SOURCE:
+ case AS_APP_KIND_FIRMWARE:
+ case AS_APP_KIND_DRIVER:
+ case AS_APP_KIND_INPUT_METHOD:
+ case AS_APP_KIND_LOCALIZATION:
+ case AS_APP_KIND_RUNTIME:
+ gtk_widget_set_visible (self->box_details_screenshot_fallback, FALSE);
+ break;
+ default:
+ gtk_widget_set_visible (self->box_details_screenshot_fallback,
+ screenshots->len == 0 && !is_offline);
+ break;
+ }
+
+ /* reset screenshots */
+ gs_container_remove_all (GTK_CONTAINER (self->box_details_screenshot_main));
+ gs_container_remove_all (GTK_CONTAINER (self->box_details_screenshot_thumbnails));
+
+ list = gtk_list_box_new ();
+ gtk_style_context_add_class (gtk_widget_get_style_context (list), "image-list");
+ gtk_widget_show (list);
+ gtk_widget_show (self->box_details_screenshot_scrolledwindow);
+ gtk_container_add (GTK_CONTAINER (self->box_details_screenshot_thumbnails), list);
+
+ for (i = 0; i < screenshots->len; i++) {
+ ss = g_ptr_array_index (screenshots, i);
+
+ /* we need to load the main screenshot only once if we're online
+ * but all times if we're offline (to check which are cached and
+ * hide those who aren't) */
+ if (is_offline || main_screenshot == NULL) {
+ GtkWidget *ssmain = gs_screenshot_image_new (self->session);
+ gtk_widget_set_can_focus (gtk_bin_get_child (GTK_BIN (ssmain)), FALSE);
+ gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssmain), ss);
+ gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssmain),
+ AS_IMAGE_NORMAL_WIDTH,
+ AS_IMAGE_NORMAL_HEIGHT);
+ gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssmain), NULL);
+
+ /* when we're offline, the load will be immediate, so we
+ * can check if it succeeded, and just skip it and its
+ * thumbnails otherwise */
+ if (is_offline &&
+ !gs_screenshot_image_is_showing (GS_SCREENSHOT_IMAGE (ssmain)))
+ continue;
+
+ /* only set the main_screenshot once */
+ if (main_screenshot == NULL) {
+ main_screenshot = ssmain;
+ gtk_box_pack_start (GTK_BOX (self->box_details_screenshot_main),
+ main_screenshot, FALSE, FALSE, 0);
+ gtk_widget_show (main_screenshot);
+ }
+ }
+
+ ssimg = gs_screenshot_image_new (self->session);
+ gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss);
+ gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
+ AS_IMAGE_THUMBNAIL_WIDTH,
+ AS_IMAGE_THUMBNAIL_HEIGHT);
+ gtk_style_context_add_class (gtk_widget_get_style_context (ssimg),
+ "screenshot-image-thumb");
+ gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), NULL);
+ gtk_list_box_insert (GTK_LIST_BOX (list), ssimg, -1);
+ gtk_widget_set_visible (ssimg, TRUE);
+ ++num_screenshots_loaded;
+ }
+
+ if (main_screenshot == NULL) {
+ gtk_widget_hide (self->box_details_screenshot);
+ return;
+ }
+
+ /* reload the main screenshot with a larger size if it's the only screenshot
+ * available */
+ if (num_screenshots_loaded == 1) {
+ gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (main_screenshot),
+ AS_IMAGE_LARGE_WIDTH,
+ AS_IMAGE_LARGE_HEIGHT);
+ gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (main_screenshot), NULL);
+ }
+
+ if (num_screenshots_loaded <= 1) {
+ gtk_widget_hide (self->box_details_screenshot_thumbnails);
+ return;
+ }
+
+ gtk_widget_show (self->box_details_screenshot_thumbnails);
+ gtk_list_box_set_selection_mode (GTK_LIST_BOX (list), GTK_SELECTION_BROWSE);
+ g_signal_connect (list, "row-selected",
+ G_CALLBACK (gs_details_page_screenshot_selected_cb),
+ self);
+ gtk_list_box_select_row (GTK_LIST_BOX (list),
+ gtk_list_box_get_row_at_index (GTK_LIST_BOX (list), 0));
+}
+
+static void
+gs_details_page_website_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ gs_shell_show_uri (self->shell,
+ gs_app_get_url (self->app, AS_URL_KIND_HOMEPAGE));
+}
+
+static void
+gs_details_page_donate_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ gs_shell_show_uri (self->shell, gs_app_get_url (self->app, AS_URL_KIND_DONATION));
+}
+
+static void
+gs_details_page_set_description (GsDetailsPage *self, const gchar *tmp)
+{
+ GtkStyleContext *style_context;
+ GtkWidget *para;
+ guint i;
+ g_auto(GStrv) split = NULL;
+
+ /* does the description exist? */
+ gtk_widget_set_visible (self->box_details_description, tmp != NULL);
+ if (tmp == NULL)
+ return;
+
+ /* add each paragraph as a new GtkLabel which lets us get the 24px
+ * paragraph spacing */
+ gs_container_remove_all (GTK_CONTAINER (self->box_details_description));
+ split = g_strsplit (tmp, "\n\n", -1);
+ for (i = 0; split[i] != NULL; i++) {
+ para = gtk_label_new (split[i]);
+ gtk_label_set_line_wrap (GTK_LABEL (para), TRUE);
+ gtk_label_set_max_width_chars (GTK_LABEL (para), 40);
+ gtk_label_set_selectable (GTK_LABEL (para), TRUE);
+ gtk_widget_set_visible (para, TRUE);
+ gtk_widget_set_can_focus (para, FALSE);
+ g_object_set (para,
+ "xalign", 0.0,
+ NULL);
+
+ /* add style class for theming */
+ style_context = gtk_widget_get_style_context (para);
+ gtk_style_context_add_class (style_context,
+ "application-details-description");
+
+ gtk_container_add (GTK_CONTAINER (self->box_details_description), para);
+ }
+
+ /* show the webapp warning */
+ if (gs_app_get_kind (self->app) == AS_APP_KIND_WEB_APP) {
+ GtkWidget *label;
+ /* TRANSLATORS: this is the warning box */
+ label = gtk_label_new (_("This application can only be used when there is an active internet connection."));
+ gtk_widget_set_visible (label, TRUE);
+ gtk_label_set_xalign (GTK_LABEL (label), 0.f);
+ gtk_style_context_add_class (gtk_widget_get_style_context (label),
+ "application-details-webapp-warning");
+ gtk_container_add (GTK_CONTAINER (self->box_details_description), label);
+ }
+}
+
+static void
+gs_details_page_set_sensitive (GtkWidget *widget, gboolean is_active)
+{
+ GtkStyleContext *style_context;
+ style_context = gtk_widget_get_style_context (widget);
+ if (!is_active) {
+ gtk_style_context_add_class (style_context, "dim-label");
+ } else {
+ gtk_style_context_remove_class (style_context, "dim-label");
+ }
+}
+
+static gboolean
+gs_details_page_history_cb (GtkLabel *label,
+ gchar *uri,
+ GsDetailsPage *self)
+{
+ GtkWidget *dialog;
+
+ dialog = gs_history_dialog_new ();
+ gs_history_dialog_set_app (GS_HISTORY_DIALOG (dialog), self->app);
+ gs_shell_modal_dialog_present (self->shell, GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+
+ return TRUE;
+}
+
+static void
+gs_details_page_refresh_size (GsDetailsPage *self)
+{
+ /* set the installed size */
+ if (gs_app_get_size_installed (self->app) != GS_APP_SIZE_UNKNOWABLE &&
+ gs_app_get_size_installed (self->app) != 0) {
+ g_autofree gchar *size = NULL;
+ size = g_format_size (gs_app_get_size_installed (self->app));
+ gtk_label_set_label (GTK_LABEL (self->label_details_size_installed_value), size);
+ gtk_widget_show (self->label_details_size_installed_title);
+ gtk_widget_show (self->label_details_size_installed_value);
+ } else {
+ gtk_widget_hide (self->label_details_size_installed_title);
+ gtk_widget_hide (self->label_details_size_installed_value);
+ }
+
+ /* set the download size */
+ if (!gs_app_is_installed (self->app) &&
+ gs_app_get_size_download (self->app) != GS_APP_SIZE_UNKNOWABLE) {
+ g_autofree gchar *size = NULL;
+ size = g_format_size (gs_app_get_size_download (self->app));
+ gtk_label_set_label (GTK_LABEL (self->label_details_size_download_value), size);
+ gtk_widget_show (self->label_details_size_download_title);
+ gtk_widget_show (self->label_details_size_download_value);
+ } else {
+ gtk_widget_hide (self->label_details_size_download_title);
+ gtk_widget_hide (self->label_details_size_download_value);
+ }
+}
+
+static void
+gs_details_page_get_alternates_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ GtkWidget *origin_box;
+ GtkWidget *origin_button_label;
+ GtkWidget *origin_popover_list_box;
+ g_autofree gchar *origin_ui = NULL;
+
+ origin_box = GTK_WIDGET (gtk_builder_get_object (self->builder, "origin_box"));
+ origin_button_label = GTK_WIDGET (gtk_builder_get_object (self->builder, "origin_button_label"));
+ origin_popover_list_box = GTK_WIDGET (gtk_builder_get_object (self->builder, "origin_popover_list_box"));
+
+ gs_container_remove_all (GTK_CONTAINER (origin_popover_list_box));
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get alternates: %s", error->message);
+ gtk_widget_hide (origin_box);
+ return;
+ }
+
+ /* add the local file to the list so that we can carry it over when
+ * switching between alternates */
+ if (self->app_local_file != NULL)
+ gs_app_list_add (list, self->app_local_file);
+
+ /* no alternates to show */
+ if (gs_app_list_length (list) < 2) {
+ gtk_widget_hide (origin_box);
+ return;
+ }
+
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GtkWidget *row = gs_origin_popover_row_new (app);
+ gtk_widget_show (row);
+ if (app == self->app)
+ gs_origin_popover_row_set_selected (GS_ORIGIN_POPOVER_ROW (row), TRUE);
+ gs_origin_popover_row_set_size_group (GS_ORIGIN_POPOVER_ROW (row),
+ self->size_group_origin_popover);
+ gtk_container_add (GTK_CONTAINER (origin_popover_list_box), row);
+ }
+
+ origin_ui = gs_app_get_origin_ui (self->app);
+ if (origin_ui != NULL)
+ gtk_label_set_text (GTK_LABEL (origin_button_label), origin_ui);
+ else
+ gtk_label_set_text (GTK_LABEL (origin_button_label), "");
+
+ gtk_widget_show (origin_box);
+}
+
+static void
+gs_details_page_refresh_buttons (GsDetailsPage *self)
+{
+ AsAppState state;
+ g_autofree gchar *text = NULL;
+
+ state = gs_app_get_state (self->app);
+
+ /* install button */
+ switch (state) {
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ gtk_widget_set_visible (self->button_install, TRUE);
+ /* TRANSLATORS: button text in the header when an application
+ * can be installed */
+ gtk_button_set_label (GTK_BUTTON (self->button_install), _("_Install"));
+ break;
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_set_visible (self->button_install, FALSE);
+ break;
+ case AS_APP_STATE_UNKNOWN:
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_REMOVING:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_visible (self->button_install, FALSE);
+ break;
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ if (gs_app_get_kind (self->app) == AS_APP_KIND_FIRMWARE) {
+ gtk_widget_set_visible (self->button_install, TRUE);
+ /* TRANSLATORS: button text in the header when firmware
+ * can be live-installed */
+ gtk_button_set_label (GTK_BUTTON (self->button_install), _("_Install"));
+ } else {
+ gtk_widget_set_visible (self->button_install, FALSE);
+ }
+ break;
+ case AS_APP_STATE_UNAVAILABLE:
+ if (gs_app_get_url (self->app, AS_URL_KIND_MISSING) != NULL) {
+ gtk_widget_set_visible (self->button_install, FALSE);
+ } else {
+ gtk_widget_set_visible (self->button_install, TRUE);
+ /* TRANSLATORS: this is a button that allows the apps to
+ * be installed.
+ * The ellipsis indicates that further steps are required,
+ * e.g. enabling software repositories or the like */
+ gtk_button_set_label (GTK_BUTTON (self->button_install), _("_Install…"));
+ }
+ break;
+ default:
+ g_warning ("App unexpectedly in state %s",
+ as_app_state_to_string (state));
+ g_assert_not_reached ();
+ }
+
+ /* update button */
+ switch (state) {
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ if (gs_app_get_kind (self->app) == AS_APP_KIND_FIRMWARE) {
+ gtk_widget_set_visible (self->button_update, FALSE);
+ } else {
+ gtk_widget_set_visible (self->button_update, TRUE);
+ }
+ break;
+ default:
+ gtk_widget_set_visible (self->button_update, FALSE);
+ break;
+ }
+
+ /* launch button */
+ switch (gs_app_get_state (self->app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ if (!gs_app_has_quirk (self->app, GS_APP_QUIRK_NOT_LAUNCHABLE) &&
+ !gs_app_has_quirk (self->app, GS_APP_QUIRK_PARENTAL_NOT_LAUNCHABLE)) {
+ gtk_widget_set_visible (self->button_details_launch, TRUE);
+ } else {
+ gtk_widget_set_visible (self->button_details_launch, FALSE);
+ }
+ break;
+ default:
+ gtk_widget_set_visible (self->button_details_launch, FALSE);
+ break;
+ }
+
+ gtk_button_set_label (GTK_BUTTON (self->button_details_launch),
+ /* TRANSLATORS: A label for a button to execute the selected application. */
+ _("_Launch"));
+
+ /* don't show the launch and shortcut buttons if the app doesn't have a desktop ID */
+ if (gs_app_get_id (self->app) == NULL) {
+ gtk_widget_set_visible (self->button_details_launch, FALSE);
+ }
+
+ /* remove button */
+ if (gs_app_has_quirk (self->app, GS_APP_QUIRK_COMPULSORY) ||
+ gs_app_get_kind (self->app) == AS_APP_KIND_FIRMWARE) {
+ gtk_widget_set_visible (self->button_remove, FALSE);
+ } else {
+ switch (state) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ gtk_widget_set_visible (self->button_remove, TRUE);
+ gtk_widget_set_sensitive (self->button_remove, TRUE);
+ /* Mark the button as destructive only if Launch is not visible */
+ if (gtk_widget_get_visible (self->button_details_launch))
+ gtk_style_context_remove_class (gtk_widget_get_style_context (self->button_remove), "destructive-action");
+ else
+ gtk_style_context_add_class (gtk_widget_get_style_context (self->button_remove), "destructive-action");
+ /* TRANSLATORS: button text in the header when an application can be erased */
+ gtk_button_set_label (GTK_BUTTON (self->button_remove), _("_Remove"));
+ break;
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ case AS_APP_STATE_UNAVAILABLE:
+ case AS_APP_STATE_UNKNOWN:
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_visible (self->button_remove, FALSE);
+ break;
+ default:
+ g_warning ("App unexpectedly in state %s",
+ as_app_state_to_string (state));
+ g_assert_not_reached ();
+ }
+ }
+
+ if (app_has_pending_action (self->app)) {
+ gtk_widget_set_visible (self->button_install, FALSE);
+ gtk_widget_set_visible (self->button_update, FALSE);
+ gtk_widget_set_visible (self->button_details_launch, FALSE);
+ gtk_widget_set_visible (self->button_remove, FALSE);
+ }
+}
+
+static struct {
+ GsAppPermissions permission;
+ const char *title;
+ const char *subtitle;
+} permission_display_data[] = {
+ { GS_APP_PERMISSIONS_NETWORK, N_("Network"), N_("Can communicate over the network") },
+ { GS_APP_PERMISSIONS_SYSTEM_BUS, N_("System Services"), N_("Can access D-Bus services on the system bus") },
+ { GS_APP_PERMISSIONS_SESSION_BUS, N_("Session Services"), N_("Can access D-Bus services on the session bus") },
+ { GS_APP_PERMISSIONS_DEVICES, N_("Devices"), N_("Can access system device files") },
+ { GS_APP_PERMISSIONS_HOME_FULL, N_("Home folder"), N_("Can view, edit and create files") },
+ { GS_APP_PERMISSIONS_HOME_READ, N_("Home folder"), N_("Can view files") },
+ { GS_APP_PERMISSIONS_FILESYSTEM_FULL, N_("File system"), N_("Can view, edit and create files") },
+ { GS_APP_PERMISSIONS_FILESYSTEM_READ, N_("File system"), N_("Can view files") },
+ { GS_APP_PERMISSIONS_DOWNLOADS_FULL, N_("Downloads folder"), N_("Can view, edit and create files") },
+ { GS_APP_PERMISSIONS_DOWNLOADS_READ, N_("Downloads folder"), N_("Can view files") },
+ { GS_APP_PERMISSIONS_SETTINGS, N_("Settings"), N_("Can view and change any settings") },
+ { GS_APP_PERMISSIONS_X11, N_("Legacy display system"), N_("Uses an old, insecure display system") },
+ { GS_APP_PERMISSIONS_ESCAPE_SANDBOX, N_("Sandbox escape"), N_("Can escape the sandbox and circumvent any other restrictions") },
+};
+
+static void
+populate_permission_details (GsDetailsPage *self, GsAppPermissions permissions)
+{
+ GList *children;
+
+ children = gtk_container_get_children (GTK_CONTAINER (self->box_permissions_details));
+ for (GList *l = children; l != NULL; l = l->next)
+ gtk_widget_destroy (GTK_WIDGET (l->data));
+ g_list_free (children);
+
+ if (permissions == GS_APP_PERMISSIONS_NONE) {
+ GtkWidget *label;
+ label = gtk_label_new (_("This application is fully sandboxed."));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (self->box_permissions_details), label);
+ } else if (permissions == GS_APP_PERMISSIONS_UNKNOWN) {
+ GtkWidget *label;
+ label = gtk_label_new (_("Unable to determine which parts of the system "
+ "this application accesses. This is typical for "
+ "older applications."));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_label_set_max_width_chars (GTK_LABEL (label), 40);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (self->box_permissions_details), label);
+ } else {
+ for (gsize i = 0; i < G_N_ELEMENTS (permission_display_data); i++) {
+ GtkWidget *row, *image, *box, *label;
+
+ if ((permissions & permission_display_data[i].permission) == 0)
+ continue;
+
+ row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+ gtk_widget_show (row);
+
+ image = gtk_image_new_from_icon_name ("dialog-warning-symbolic", GTK_ICON_SIZE_MENU);
+ if ((permission_display_data[i].permission & ~MEDIUM_PERMISSIONS) == 0)
+ gtk_widget_set_opacity (image, 0);
+
+ gtk_widget_show (image);
+ gtk_container_add (GTK_CONTAINER (row), image);
+
+ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_widget_show (box);
+ gtk_container_add (GTK_CONTAINER (row), box);
+
+ label = gtk_label_new (_(permission_display_data[i].title));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (box), label);
+
+ label = gtk_label_new (_(permission_display_data[i].subtitle));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label");
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (box), label);
+
+ gtk_container_add (GTK_CONTAINER (self->box_permissions_details), row);
+ }
+ }
+}
+
+static void
+gs_details_page_refresh_all (GsDetailsPage *self)
+{
+ GsAppList *history;
+ GdkPixbuf *pixbuf = NULL;
+ GList *addons;
+ GtkWidget *widget;
+ const gchar *tmp;
+ gboolean ret;
+ gchar **menu_path;
+ guint64 kudos;
+ guint64 updated;
+ guint64 user_integration_bf;
+ gboolean show_support_box = FALSE;
+ g_autofree gchar *origin = NULL;
+
+ /* change widgets */
+ tmp = gs_app_get_name (self->app);
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
+ if (tmp != NULL && tmp[0] != '\0') {
+ gtk_label_set_label (GTK_LABEL (self->application_details_title), tmp);
+ gtk_label_set_label (GTK_LABEL (widget), tmp);
+ gtk_widget_set_visible (self->application_details_title, TRUE);
+ } else {
+ gtk_widget_set_visible (self->application_details_title, FALSE);
+ gtk_label_set_label (GTK_LABEL (widget), "");
+ }
+ tmp = gs_app_get_summary (self->app);
+ if (tmp != NULL && tmp[0] != '\0') {
+ gtk_label_set_label (GTK_LABEL (self->application_details_summary), tmp);
+ gtk_widget_set_visible (self->application_details_summary, TRUE);
+ } else {
+ gtk_widget_set_visible (self->application_details_summary, FALSE);
+ }
+
+ /* refresh buttons */
+ gs_details_page_refresh_buttons (self);
+
+ /* set the description */
+ tmp = gs_app_get_description (self->app);
+ gs_details_page_set_description (self, tmp);
+
+ /* set the icon */
+ pixbuf = gs_app_get_pixbuf (self->app);
+ if (pixbuf != NULL) {
+ gs_image_set_from_pixbuf (GTK_IMAGE (self->application_details_icon), pixbuf);
+ } else {
+ gtk_image_set_from_icon_name (GTK_IMAGE (self->application_details_icon),
+ "application-x-executable",
+ GTK_ICON_SIZE_DIALOG);
+ }
+
+ tmp = gs_app_get_url (self->app, AS_URL_KIND_HOMEPAGE);
+ if (tmp != NULL && tmp[0] != '\0') {
+ gtk_widget_set_visible (self->button_details_website, TRUE);
+ show_support_box = TRUE;
+ } else {
+ gtk_widget_set_visible (self->button_details_website, FALSE);
+ }
+ tmp = gs_app_get_url (self->app, AS_URL_KIND_DONATION);
+ if (tmp != NULL && tmp[0] != '\0') {
+ gtk_widget_set_visible (self->button_donate, TRUE);
+ show_support_box = TRUE;
+ } else {
+ gtk_widget_set_visible (self->button_donate, FALSE);
+ }
+ gtk_widget_set_visible (self->box_details_support, show_support_box);
+
+ /* set the developer name, falling back to the project group */
+ tmp = gs_app_get_developer_name (self->app);
+ if (tmp == NULL)
+ tmp = gs_app_get_project_group (self->app);
+ if (tmp == NULL) {
+ gtk_widget_set_visible (self->label_details_developer_title, FALSE);
+ gtk_widget_set_visible (self->box_details_developer, FALSE);
+ } else {
+ gtk_widget_set_visible (self->label_details_developer_title, TRUE);
+ gtk_label_set_label (GTK_LABEL (self->label_details_developer_value), tmp);
+ gtk_widget_set_visible (self->box_details_developer, TRUE);
+ }
+ gtk_widget_set_visible (self->image_details_developer_verified, gs_app_has_quirk (self->app, GS_APP_QUIRK_DEVELOPER_VERIFIED));
+
+ /* set the license buttons */
+ tmp = gs_app_get_license (self->app);
+ if (tmp == NULL) {
+ gtk_widget_set_visible (self->button_details_license_free, FALSE);
+ gtk_widget_set_visible (self->button_details_license_nonfree, FALSE);
+ gtk_widget_set_visible (self->button_details_license_unknown, TRUE);
+ } else if (gs_app_get_license_is_free (self->app)) {
+ gtk_widget_set_visible (self->button_details_license_free, TRUE);
+ gtk_widget_set_visible (self->button_details_license_nonfree, FALSE);
+ gtk_widget_set_visible (self->button_details_license_unknown, FALSE);
+ } else {
+ gtk_widget_set_visible (self->button_details_license_free, FALSE);
+ gtk_widget_set_visible (self->button_details_license_nonfree, TRUE);
+ gtk_widget_set_visible (self->button_details_license_unknown, FALSE);
+ }
+
+ /* set channel for snaps */
+ if (gs_app_get_bundle_kind (self->app) == AS_BUNDLE_KIND_SNAP) {
+ gtk_label_set_label (GTK_LABEL (self->label_details_channel_value), gs_app_get_branch (self->app));
+ gtk_widget_set_visible (self->label_details_channel_title, TRUE);
+ gtk_widget_set_visible (self->label_details_channel_value, TRUE);
+ } else {
+ gtk_widget_set_visible (self->label_details_channel_title, FALSE);
+ gtk_widget_set_visible (self->label_details_channel_value, FALSE);
+ }
+
+ /* set version */
+ tmp = gs_app_get_version (self->app);
+ if (tmp != NULL){
+ gtk_label_set_label (GTK_LABEL (self->label_details_version_value), tmp);
+ } else {
+ /* TRANSLATORS: this is where the version is not known */
+ gtk_label_set_label (GTK_LABEL (self->label_details_version_value), C_("version", "Unknown"));
+ }
+
+ /* refresh size information */
+ gs_details_page_refresh_size (self);
+
+ /* set the updated date */
+ updated = gs_app_get_install_date (self->app);
+ if (updated == GS_APP_INSTALL_DATE_UNSET) {
+ gtk_widget_set_visible (self->label_details_updated_title, FALSE);
+ gtk_widget_set_visible (self->label_details_updated_value, FALSE);
+ } else if (updated == GS_APP_INSTALL_DATE_UNKNOWN) {
+ /* TRANSLATORS: this is where the updated date is not known */
+ gtk_label_set_label (GTK_LABEL (self->label_details_updated_value), C_("updated", "Never"));
+ gtk_widget_set_visible (self->label_details_updated_title, TRUE);
+ gtk_widget_set_visible (self->label_details_updated_value, TRUE);
+ } else {
+ g_autoptr(GDateTime) dt = NULL;
+ g_autofree gchar *updated_str = NULL;
+ dt = g_date_time_new_from_unix_utc ((gint64) updated);
+ updated_str = g_date_time_format (dt, "%x");
+
+ history = gs_app_get_history (self->app);
+
+ if (gs_app_list_length (history) == 0) {
+ gtk_label_set_label (GTK_LABEL (self->label_details_updated_value), updated_str);
+ } else {
+ GString *url;
+
+ url = g_string_new (NULL);
+ g_string_printf (url, "<a href=\"show-history\">%s</a>", updated_str);
+ gtk_label_set_markup (GTK_LABEL (self->label_details_updated_value), url->str);
+ g_string_free (url, TRUE);
+ }
+ gtk_widget_set_visible (self->label_details_updated_title, TRUE);
+ gtk_widget_set_visible (self->label_details_updated_value, TRUE);
+ }
+
+ /* set the category */
+ menu_path = gs_app_get_menu_path (self->app);
+ if (menu_path == NULL || menu_path[0] == NULL || menu_path[0][0] == '\0') {
+ gtk_widget_set_visible (self->label_details_category_title, FALSE);
+ gtk_widget_set_visible (self->label_details_category_value, FALSE);
+ } else {
+ g_autofree gchar *path = NULL;
+ if (gtk_widget_get_direction (self->label_details_category_value) == GTK_TEXT_DIR_RTL)
+ path = g_strjoinv (" ← ", menu_path);
+ else
+ path = g_strjoinv (" → ", menu_path);
+ gtk_label_set_label (GTK_LABEL (self->label_details_category_value), path);
+ gtk_widget_set_visible (self->label_details_category_title, TRUE);
+ gtk_widget_set_visible (self->label_details_category_value, TRUE);
+ }
+
+ /* set the origin */
+ origin = g_strdup (gs_app_get_origin_hostname (self->app));
+ if (origin == NULL)
+ origin = g_strdup (gs_app_get_origin (self->app));
+ if (origin == NULL) {
+ GFile *local_file = gs_app_get_local_file (self->app);
+ if (local_file != NULL)
+ origin = g_file_get_basename (local_file);
+ }
+ if (origin == NULL || origin[0] == '\0') {
+ /* TRANSLATORS: this is where we don't know the origin of the
+ * application */
+ gtk_label_set_label (GTK_LABEL (self->label_details_origin_value), C_("origin", "Unknown"));
+ } else {
+ gtk_label_set_label (GTK_LABEL (self->label_details_origin_value), origin);
+ }
+
+ /* set MyLanguage kudo */
+ kudos = gs_app_get_kudos (self->app);
+ ret = (kudos & GS_APP_KUDO_MY_LANGUAGE) > 0;
+ gtk_widget_set_sensitive (self->image_details_kudo_translated, ret);
+ gs_details_page_set_sensitive (self->label_details_kudo_translated, ret);
+
+ /* set RecentRelease kudo */
+ ret = (kudos & GS_APP_KUDO_RECENT_RELEASE) > 0;
+ gtk_widget_set_sensitive (self->image_details_kudo_updated, ret);
+ gs_details_page_set_sensitive (self->label_details_kudo_updated, ret);
+
+ /* set UserDocs kudo */
+ ret = (kudos & GS_APP_KUDO_INSTALLS_USER_DOCS) > 0;
+ gtk_widget_set_sensitive (self->image_details_kudo_docs, ret);
+ gs_details_page_set_sensitive (self->label_details_kudo_docs, ret);
+
+ /* set sandboxed kudo */
+ ret = (kudos & GS_APP_KUDO_SANDBOXED) > 0;
+ gtk_widget_set_sensitive (self->image_details_kudo_sandboxed, ret);
+ gs_details_page_set_sensitive (self->label_details_kudo_sandboxed, ret);
+
+ /* any of the various integration kudos */
+ user_integration_bf = GS_APP_KUDO_SEARCH_PROVIDER |
+ GS_APP_KUDO_USES_NOTIFICATIONS |
+ GS_APP_KUDO_HIGH_CONTRAST;
+ ret = (kudos & user_integration_bf) > 0;
+ gtk_widget_set_sensitive (self->image_details_kudo_integration, ret);
+ gs_details_page_set_sensitive (self->label_details_kudo_integration, ret);
+
+ /* hide the kudo details for non-desktop software */
+ switch (gs_app_get_kind (self->app)) {
+ case AS_APP_KIND_DESKTOP:
+ gtk_widget_set_visible (self->grid_details_kudo, TRUE);
+ break;
+ default:
+ gtk_widget_set_visible (self->grid_details_kudo, FALSE);
+ break;
+ }
+
+ /* only show permissions for flatpak apps */
+ if (gs_app_get_bundle_kind (self->app) == AS_BUNDLE_KIND_FLATPAK &&
+ gs_app_get_kind (self->app) == AS_APP_KIND_DESKTOP) {
+ GsAppPermissions permissions = gs_app_get_permissions (self->app);
+
+ populate_permission_details (self, permissions);
+
+ if (gs_app_get_permissions (self->app) != GS_APP_PERMISSIONS_UNKNOWN) {
+ if ((permissions & ~LIMITED_PERMISSIONS) == 0)
+ gtk_button_set_label (GTK_BUTTON (self->button_details_permissions_value), _("Low"));
+ else if ((permissions & ~MEDIUM_PERMISSIONS) == 0)
+ gtk_button_set_label (GTK_BUTTON (self->button_details_permissions_value), _("Medium"));
+ else
+ gtk_button_set_label (GTK_BUTTON (self->button_details_permissions_value), _("High"));
+ } else {
+ gtk_button_set_label (GTK_BUTTON (self->button_details_permissions_value), _("Unknown"));
+ }
+
+ gtk_widget_set_visible (self->label_details_permissions_title, TRUE);
+ gtk_widget_set_visible (self->button_details_permissions_value, TRUE);
+ } else {
+ gtk_widget_set_visible (self->label_details_permissions_title, FALSE);
+ gtk_widget_set_visible (self->button_details_permissions_value, FALSE);
+ }
+
+ /* are we trying to replace something in the baseos */
+ gtk_widget_set_visible (self->infobar_details_package_baseos,
+ gs_app_has_quirk (self->app, GS_APP_QUIRK_COMPULSORY) &&
+ gs_app_get_state (self->app) == AS_APP_STATE_AVAILABLE_LOCAL);
+
+ switch (gs_app_get_kind (self->app)) {
+ case AS_APP_KIND_DESKTOP:
+ /* installing an app with a repo file */
+ gtk_widget_set_visible (self->infobar_details_app_repo,
+ gs_app_has_quirk (self->app,
+ GS_APP_QUIRK_HAS_SOURCE) &&
+ gs_app_get_state (self->app) == AS_APP_STATE_AVAILABLE_LOCAL);
+ gtk_widget_set_visible (self->infobar_details_repo, FALSE);
+ break;
+ case AS_APP_KIND_GENERIC:
+ /* installing a repo-release package */
+ gtk_widget_set_visible (self->infobar_details_app_repo, FALSE);
+ gtk_widget_set_visible (self->infobar_details_repo,
+ gs_app_has_quirk (self->app,
+ GS_APP_QUIRK_HAS_SOURCE) &&
+ gs_app_get_state (self->app) == AS_APP_STATE_AVAILABLE_LOCAL);
+ break;
+ default:
+ gtk_widget_set_visible (self->infobar_details_app_repo, FALSE);
+ gtk_widget_set_visible (self->infobar_details_repo, FALSE);
+ break;
+ }
+
+ /* installing a app without a repo file */
+ switch (gs_app_get_kind (self->app)) {
+ case AS_APP_KIND_DESKTOP:
+ if (gs_app_get_kind (self->app) == AS_APP_KIND_FIRMWARE) {
+ gtk_widget_set_visible (self->infobar_details_app_norepo, FALSE);
+ } else {
+ gtk_widget_set_visible (self->infobar_details_app_norepo,
+ !gs_app_has_quirk (self->app,
+ GS_APP_QUIRK_HAS_SOURCE) &&
+ gs_app_get_state (self->app) == AS_APP_STATE_AVAILABLE_LOCAL);
+ }
+ break;
+ default:
+ gtk_widget_set_visible (self->infobar_details_app_norepo, FALSE);
+ break;
+ }
+
+ /* only show the "select addons" string if the app isn't yet installed */
+ switch (gs_app_get_state (self->app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ gtk_widget_set_visible (self->label_addons_uninstalled_app, FALSE);
+ break;
+ default:
+ gtk_widget_set_visible (self->label_addons_uninstalled_app, TRUE);
+ break;
+ }
+
+ /* hide fields that don't make sense for sources */
+ switch (gs_app_get_kind (self->app)) {
+ case AS_APP_KIND_SOURCE:
+ gtk_widget_set_visible (self->label_details_license_title, FALSE);
+ gtk_widget_set_visible (self->box_details_license_value, FALSE);
+ gtk_widget_set_visible (self->label_details_version_title, FALSE);
+ gtk_widget_set_visible (self->label_details_version_value, FALSE);
+ break;
+ default:
+ gtk_widget_set_visible (self->label_details_license_title, TRUE);
+ gtk_widget_set_visible (self->box_details_license_value, TRUE);
+ gtk_widget_set_visible (self->label_details_version_title, TRUE);
+ gtk_widget_set_visible (self->label_details_version_value, TRUE);
+ break;
+ }
+
+ gs_details_page_update_shortcut_button (self);
+
+ /* update progress */
+ gs_details_page_refresh_progress (self);
+
+ addons = gtk_container_get_children (GTK_CONTAINER (self->list_box_addons));
+ gtk_widget_set_visible (self->box_addons, addons != NULL);
+ g_list_free (addons);
+}
+
+static void
+list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header = NULL;
+ if (before != NULL)
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static gint
+list_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GsApp *a1 = gs_app_addon_row_get_addon (GS_APP_ADDON_ROW (a));
+ GsApp *a2 = gs_app_addon_row_get_addon (GS_APP_ADDON_ROW (b));
+
+ return gs_utils_sort_strcmp (gs_app_get_name (a1),
+ gs_app_get_name (a2));
+}
+
+static void gs_details_page_addon_selected_cb (GsAppAddonRow *row, GParamSpec *pspec, GsDetailsPage *self);
+
+static void
+gs_details_page_refresh_addons (GsDetailsPage *self)
+{
+ GsAppList *addons;
+ guint i;
+
+ gs_container_remove_all (GTK_CONTAINER (self->list_box_addons));
+
+ addons = gs_app_get_addons (self->app);
+ for (i = 0; i < gs_app_list_length (addons); i++) {
+ GsApp *addon;
+ GtkWidget *row;
+
+ addon = gs_app_list_index (addons, i);
+ if (gs_app_get_state (addon) == AS_APP_STATE_UNKNOWN ||
+ gs_app_get_state (addon) == AS_APP_STATE_UNAVAILABLE)
+ continue;
+
+ row = gs_app_addon_row_new (addon);
+
+ gtk_container_add (GTK_CONTAINER (self->list_box_addons), row);
+ gtk_widget_show (row);
+
+ g_signal_connect (row, "notify::selected",
+ G_CALLBACK (gs_details_page_addon_selected_cb),
+ self);
+ }
+}
+
+static void gs_details_page_refresh_reviews (GsDetailsPage *self);
+
+typedef struct {
+ GsDetailsPage *self;
+ AsReview *review;
+ GsApp *app;
+ GsPluginAction action;
+} GsDetailsPageReviewHelper;
+
+static void
+gs_details_page_review_helper_free (GsDetailsPageReviewHelper *helper)
+{
+ g_object_unref (helper->self);
+ g_object_unref (helper->review);
+ g_object_unref (helper->app);
+ g_free (helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsDetailsPageReviewHelper, gs_details_page_review_helper_free);
+
+static void
+gs_details_page_app_set_review_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(GsDetailsPageReviewHelper) helper = (GsDetailsPageReviewHelper *) user_data;
+ g_autoptr(GError) error = NULL;
+
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to set review on %s: %s",
+ gs_app_get_id (helper->app), error->message);
+ return;
+ }
+ gs_details_page_refresh_reviews (helper->self);
+}
+
+static void
+gs_details_page_review_button_clicked_cb (GsReviewRow *row,
+ GsPluginAction action,
+ GsDetailsPage *self)
+{
+ GsDetailsPageReviewHelper *helper = g_new0 (GsDetailsPageReviewHelper, 1);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ helper->self = g_object_ref (self);
+ helper->app = g_object_ref (self->app);
+ helper->review = g_object_ref (gs_review_row_get_review (row));
+ helper->action = action;
+ plugin_job = gs_plugin_job_newv (helper->action,
+ "interactive", TRUE,
+ "app", helper->app,
+ "review", helper->review,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_details_page_app_set_review_cb,
+ helper);
+}
+
+static void
+gs_details_page_refresh_reviews (GsDetailsPage *self)
+{
+ GArray *review_ratings = NULL;
+ GPtrArray *reviews;
+ gboolean show_review_button = TRUE;
+ gboolean show_reviews = FALSE;
+ guint n_reviews = 0;
+ guint64 possible_actions = 0;
+ guint i;
+ struct {
+ GsPluginAction action;
+ const gchar *plugin_func;
+ } plugin_vfuncs[] = {
+ { GS_PLUGIN_ACTION_REVIEW_UPVOTE, "gs_plugin_review_upvote" },
+ { GS_PLUGIN_ACTION_REVIEW_DOWNVOTE, "gs_plugin_review_downvote" },
+ { GS_PLUGIN_ACTION_REVIEW_REPORT, "gs_plugin_review_report" },
+ { GS_PLUGIN_ACTION_REVIEW_SUBMIT, "gs_plugin_review_submit" },
+ { GS_PLUGIN_ACTION_REVIEW_REMOVE, "gs_plugin_review_remove" },
+ { GS_PLUGIN_ACTION_LAST, NULL }
+ };
+
+ /* nothing to show */
+ if (self->app == NULL)
+ return;
+
+ /* show or hide the entire reviews section */
+ switch (gs_app_get_kind (self->app)) {
+ case AS_APP_KIND_DESKTOP:
+ case AS_APP_KIND_FONT:
+ case AS_APP_KIND_INPUT_METHOD:
+ case AS_APP_KIND_WEB_APP:
+ case AS_APP_KIND_SHELL_EXTENSION:
+ /* don't show a missing rating on a local file */
+ if (gs_app_get_state (self->app) != AS_APP_STATE_AVAILABLE_LOCAL &&
+ self->enable_reviews)
+ show_reviews = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ /* some apps are unreviewable */
+ if (gs_app_has_quirk (self->app, GS_APP_QUIRK_NOT_REVIEWABLE))
+ show_reviews = FALSE;
+
+ /* set the star rating */
+ if (show_reviews) {
+ gtk_widget_set_sensitive (self->star, gs_app_get_rating (self->app) >= 0);
+ gs_star_widget_set_rating (GS_STAR_WIDGET (self->star),
+ gs_app_get_rating (self->app));
+
+ review_ratings = gs_app_get_review_ratings (self->app);
+ if (review_ratings != NULL) {
+ gs_review_histogram_set_ratings (GS_REVIEW_HISTOGRAM (self->histogram),
+ review_ratings);
+ }
+ if (review_ratings != NULL) {
+ for (i = 0; i < review_ratings->len; i++)
+ n_reviews += (guint) g_array_index (review_ratings, guint32, i);
+ } else if (gs_app_get_reviews (self->app) != NULL) {
+ n_reviews = gs_app_get_reviews (self->app)->len;
+ }
+ }
+
+ /* enable appropriate widgets */
+ gtk_widget_set_visible (self->star, show_reviews);
+ gtk_widget_set_visible (self->box_reviews, show_reviews);
+ gtk_widget_set_visible (self->histogram, review_ratings != NULL && review_ratings->len > 0);
+ gtk_widget_set_visible (self->label_review_count, n_reviews > 0);
+
+ /* update the review label next to the star widget */
+ if (n_reviews > 0) {
+ g_autofree gchar *text = NULL;
+ gtk_widget_set_visible (self->label_review_count, TRUE);
+ text = g_strdup_printf ("(%u)", n_reviews);
+ gtk_label_set_text (GTK_LABEL (self->label_review_count), text);
+ }
+
+ /* no point continuing */
+ if (!show_reviews)
+ return;
+
+ /* find what the plugins support */
+ for (i = 0; plugin_vfuncs[i].action != GS_PLUGIN_ACTION_LAST; i++) {
+ if (gs_plugin_loader_get_plugin_supported (self->plugin_loader,
+ plugin_vfuncs[i].plugin_func)) {
+ possible_actions |= 1u << plugin_vfuncs[i].action;
+ }
+ }
+
+ /* add all the reviews */
+ gs_container_remove_all (GTK_CONTAINER (self->list_box_reviews));
+ reviews = gs_app_get_reviews (self->app);
+ for (i = 0; i < reviews->len; i++) {
+ AsReview *review = g_ptr_array_index (reviews, i);
+ GtkWidget *row = gs_review_row_new (review);
+ guint64 actions;
+
+ g_signal_connect (row, "button-clicked",
+ G_CALLBACK (gs_details_page_review_button_clicked_cb), self);
+ if (as_review_get_flags (review) & AS_REVIEW_FLAG_SELF) {
+ actions = possible_actions & 1 << GS_PLUGIN_ACTION_REVIEW_REMOVE;
+ show_review_button = FALSE;
+ } else {
+ actions = possible_actions & ~(1u << GS_PLUGIN_ACTION_REVIEW_REMOVE);
+ }
+ gs_review_row_set_actions (GS_REVIEW_ROW (row), actions);
+ gtk_container_add (GTK_CONTAINER (self->list_box_reviews), row);
+ gtk_widget_set_visible (row, self->show_all_reviews ||
+ i < SHOW_NR_REVIEWS_INITIAL);
+ gs_review_row_set_network_available (GS_REVIEW_ROW (row),
+ gs_plugin_loader_get_network_available (self->plugin_loader));
+ }
+
+ /* only show the button if there are more to show */
+ gtk_widget_set_visible (self->button_more_reviews,
+ !self->show_all_reviews &&
+ reviews->len > SHOW_NR_REVIEWS_INITIAL);
+
+ /* show the button only if the user never reviewed */
+ gtk_widget_set_visible (self->button_review, show_review_button);
+ if (gs_plugin_loader_get_network_available (self->plugin_loader)) {
+ gtk_widget_set_sensitive (self->button_review, TRUE);
+ gtk_widget_set_sensitive (self->star_eventbox, TRUE);
+ gtk_widget_set_tooltip_text (self->button_review, NULL);
+ } else {
+ gtk_widget_set_sensitive (self->button_review, FALSE);
+ gtk_widget_set_sensitive (self->star_eventbox, FALSE);
+ gtk_widget_set_tooltip_text (self->button_review,
+ /* TRANSLATORS: we need a remote server to process */
+ _("You need internet access to write a review"));
+ }
+}
+
+static void
+gs_details_page_app_refine_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to refine %s: %s",
+ gs_app_get_id (self->app),
+ error->message);
+ return;
+ }
+ gs_details_page_refresh_size (self);
+ gs_details_page_refresh_reviews (self);
+}
+
+static void
+gs_details_page_content_rating_set_css (GsDetailsPage *page, guint age)
+{
+ g_autoptr(GString) css = g_string_new (NULL);
+ const gchar *color_bg = NULL;
+ const gchar *color_fg = "#ffffff";
+ if (age >= 18) {
+ color_bg = "#ee2222";
+ } else if (age >= 15) {
+ color_bg = "#f1c000";
+ } else if (age >= 12) {
+ color_bg = "#2a97c9";
+ } else if (age >= 5) {
+ color_bg = "#3f756c";
+ } else {
+ color_bg = "#009d66";
+ }
+ g_string_append_printf (css, "color: %s;\n", color_fg);
+ g_string_append_printf (css, "background-color: %s;\n", color_bg);
+
+ gs_utils_widget_set_css (page->button_details_rating_value,
+ (GtkCssProvider **) &page->button_details_rating_style_provider,
+ "content-rating-custom", css->str);
+}
+
+static void
+gs_details_page_refresh_content_rating (GsDetailsPage *self)
+{
+ AsContentRating *content_rating;
+ GsContentRatingSystem system;
+ guint age = 0;
+ g_autofree gchar *display = NULL;
+ const gchar *locale;
+
+ /* get the content rating system from the locale */
+ locale = setlocale (LC_MESSAGES, NULL);
+ system = gs_utils_content_rating_system_from_locale (locale);
+ g_debug ("content rating system is guessed as %s from %s",
+ gs_content_rating_system_to_str (system),
+ locale);
+
+ /* only show the button if a game and has a content rating */
+ content_rating = gs_app_get_content_rating (self->app);
+ if (content_rating != NULL) {
+ age = as_content_rating_get_minimum_age (content_rating);
+ display = gs_utils_content_rating_age_to_str (system, age);
+ }
+ if (display != NULL) {
+ gtk_button_set_label (GTK_BUTTON (self->button_details_rating_value), display);
+ gtk_widget_set_visible (self->button_details_rating_value, TRUE);
+ gtk_widget_set_visible (self->label_details_rating_title, TRUE);
+ gs_details_page_content_rating_set_css (self, age);
+ } else {
+ gtk_widget_set_visible (self->button_details_rating_value, FALSE);
+ gtk_widget_set_visible (self->label_details_rating_title, FALSE);
+ }
+}
+
+static void
+_set_app (GsDetailsPage *self, GsApp *app)
+{
+ /* do not show all the reviews by default */
+ self->show_all_reviews = FALSE;
+
+ /* disconnect the old handlers */
+ if (self->app != NULL) {
+ g_signal_handlers_disconnect_by_func (self->app, gs_details_page_notify_state_changed_cb, self);
+ g_signal_handlers_disconnect_by_func (self->app, gs_details_page_progress_changed_cb, self);
+ g_signal_handlers_disconnect_by_func (self->app, gs_details_page_allow_cancel_changed_cb,
+ self);
+ }
+
+ /* save app */
+ g_set_object (&self->app, app);
+ if (self->app == NULL) {
+ /* switch away from the details view that failed to load */
+ gs_shell_set_mode (self->shell, GS_SHELL_MODE_OVERVIEW);
+ return;
+ }
+ g_set_object (&self->app_cancellable, gs_app_get_cancellable (app));
+ g_signal_connect_object (self->app, "notify::state",
+ G_CALLBACK (gs_details_page_notify_state_changed_cb),
+ self, 0);
+ g_signal_connect_object (self->app, "notify::size",
+ G_CALLBACK (gs_details_page_notify_state_changed_cb),
+ self, 0);
+ g_signal_connect_object (self->app, "notify::license",
+ G_CALLBACK (gs_details_page_notify_state_changed_cb),
+ self, 0);
+ g_signal_connect_object (self->app, "notify::quirk",
+ G_CALLBACK (gs_details_page_notify_state_changed_cb),
+ self, 0);
+ g_signal_connect_object (self->app, "notify::progress",
+ G_CALLBACK (gs_details_page_progress_changed_cb),
+ self, 0);
+ g_signal_connect_object (self->app, "notify::allow-cancel",
+ G_CALLBACK (gs_details_page_allow_cancel_changed_cb),
+ self, 0);
+ g_signal_connect_object (self->app, "notify::pending-action",
+ G_CALLBACK (gs_details_page_notify_state_changed_cb),
+ self, 0);
+}
+
+/* show the UI and do operations that should not block page load */
+static void
+gs_details_page_load_stage2 (GsDetailsPage *self)
+{
+ g_autofree gchar *tmp = NULL;
+ g_autoptr(GsPluginJob) plugin_job1 = NULL;
+ g_autoptr(GsPluginJob) plugin_job2 = NULL;
+
+ /* print what we've got */
+ tmp = gs_app_to_string (self->app);
+ g_debug ("%s", tmp);
+
+ /* update UI */
+ gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_READY);
+ gs_details_page_refresh_screenshots (self);
+ gs_details_page_refresh_addons (self);
+ gs_details_page_refresh_reviews (self);
+ gs_details_page_refresh_all (self);
+ gs_details_page_refresh_content_rating (self);
+
+ /* if these tasks fail (e.g. because we have no networking) then it's
+ * of no huge importance if we don't get the required data */
+ plugin_job1 = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", self->app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE,
+ NULL);
+ plugin_job2 = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_ALTERNATES,
+ "interactive", TRUE,
+ "app", self->app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_NONE,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job1,
+ self->cancellable,
+ gs_details_page_app_refine_cb,
+ self);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job2,
+ self->cancellable,
+ gs_details_page_get_alternates_cb,
+ self);
+}
+
+static void
+gs_details_page_load_stage1_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ g_autoptr(GError) error = NULL;
+
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to refine %s: %s",
+ gs_app_get_id (self->app),
+ error->message);
+ }
+ if (gs_app_get_kind (self->app) == AS_APP_KIND_UNKNOWN ||
+ gs_app_get_state (self->app) == AS_APP_STATE_UNKNOWN) {
+ g_autofree gchar *str = NULL;
+ const gchar *id = gs_app_get_id (self->app);
+ str = g_strdup_printf (_("Unable to find “%s”"), id == NULL ? gs_app_get_source_default (self->app) : id);
+ gtk_label_set_text (GTK_LABEL (self->label_failed), str);
+ gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_FAILED);
+ return;
+ }
+
+ /* Hide the app if it’s not suitable for the user, but only if it’s not
+ * already installed — a parent could have decided that a particular
+ * app *is* actually suitable for their child, despite its age rating.
+ *
+ * Make it look like the app doesn’t exist, to not tantalise the
+ * child. */
+ if (!gs_app_is_installed (self->app) &&
+ gs_app_has_quirk (self->app, GS_APP_QUIRK_PARENTAL_FILTER)) {
+ g_autofree gchar *str = NULL;
+ const gchar *id = gs_app_get_id (self->app);
+ str = g_strdup_printf (_("Unable to find “%s”"), id == NULL ? gs_app_get_source_default (self->app) : id);
+ gtk_label_set_text (GTK_LABEL (self->label_failed), str);
+ gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_FAILED);
+ return;
+ }
+
+ /* do 2nd stage refine */
+ gs_details_page_load_stage2 (self);
+}
+
+static void
+gs_details_page_file_to_app_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GError) error = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ g_warning ("failed to convert file to GsApp: %s", error->message);
+ /* go back to the overview */
+ gs_shell_set_mode (self->shell, GS_SHELL_MODE_OVERVIEW);
+ } else {
+ GsApp *app = gs_app_list_index (list, 0);
+ g_set_object (&self->app_local_file, app);
+ _set_app (self, app);
+ gs_details_page_load_stage2 (self);
+ }
+}
+
+static void
+gs_details_page_url_to_app_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GError) error = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ g_warning ("failed to convert URL to GsApp: %s", error->message);
+ /* go back to the overview */
+ gs_shell_set_mode (self->shell, GS_SHELL_MODE_OVERVIEW);
+ } else {
+ GsApp *app = gs_app_list_index (list, 0);
+ _set_app (self, app);
+ gs_details_page_load_stage2 (self);
+ }
+}
+
+void
+gs_details_page_set_local_file (GsDetailsPage *self, GFile *file)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_LOADING);
+ g_clear_object (&self->app_local_file);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_details_page_file_to_app_cb,
+ self);
+}
+
+void
+gs_details_page_set_url (GsDetailsPage *self, const gchar *url)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_LOADING);
+ g_clear_object (&self->app_local_file);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_URL_TO_APP,
+ "search", url,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING |
+ GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_details_page_url_to_app_cb,
+ self);
+}
+
+/* refines a GsApp */
+static void
+gs_details_page_load_stage1 (GsDetailsPage *self)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* update UI */
+ gs_page_switch_to (GS_PAGE (self), TRUE);
+ gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_LOADING);
+
+ /* get extra details about the app */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", self->app,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ADDONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROJECT_GROUP |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DEVELOPER_NAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_KUDOS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CONTENT_RATING |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SCREENSHOTS,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_details_page_load_stage1_cb,
+ self);
+
+ /* update UI with loading page */
+ gs_details_page_refresh_all (self);
+}
+
+static void
+gs_details_page_reload (GsPage *page)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (page);
+ if (self->app != NULL)
+ gs_details_page_load_stage1 (self);
+}
+
+static gint
+origin_popover_list_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GsApp *a1 = gs_origin_popover_row_get_app (GS_ORIGIN_POPOVER_ROW (a));
+ GsApp *a2 = gs_origin_popover_row_get_app (GS_ORIGIN_POPOVER_ROW (b));
+ g_autofree gchar *a1_origin = gs_app_get_origin_ui (a1);
+ g_autofree gchar *a2_origin = gs_app_get_origin_ui (a2);
+
+ return gs_utils_sort_strcmp (a1_origin, a2_origin);
+}
+
+static void
+origin_popover_row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ gpointer user_data)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (user_data);
+ GsApp *app;
+ GtkWidget *popover;
+
+ popover = GTK_WIDGET (gtk_builder_get_object (self->builder, "origin_popover"));
+ gtk_popover_popdown (GTK_POPOVER (popover));
+
+ app = gs_origin_popover_row_get_app (GS_ORIGIN_POPOVER_ROW (row));
+ if (app != self->app) {
+ _set_app (self, app);
+ gs_details_page_load_stage1 (self);
+ }
+}
+
+static void
+settings_changed_cb (GsDetailsPage *self, const gchar *key, gpointer data)
+{
+ if (self->app == NULL)
+ return;
+ if (g_strcmp0 (key, "show-nonfree-ui") == 0) {
+ gs_details_page_refresh_all (self);
+ }
+}
+
+/* this is being called from GsShell */
+void
+gs_details_page_set_app (GsDetailsPage *self, GsApp *app)
+{
+ g_return_if_fail (GS_IS_DETAILS_PAGE (self));
+ g_return_if_fail (GS_IS_APP (app));
+
+ /* clear old state */
+ g_clear_object (&self->app_local_file);
+
+ /* save GsApp */
+ _set_app (self, app);
+ gs_details_page_load_stage1 (self);
+}
+
+GsApp *
+gs_details_page_get_app (GsDetailsPage *self)
+{
+ return self->app;
+}
+
+static void
+gs_details_page_remove_app (GsDetailsPage *self)
+{
+ g_set_object (&self->app_cancellable, gs_app_get_cancellable (self->app));
+ gs_page_remove_app (GS_PAGE (self), self->app, self->app_cancellable);
+}
+
+static void
+gs_details_page_app_remove_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ gs_details_page_remove_app (self);
+}
+
+static void
+gs_details_page_app_cancel_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ g_cancellable_cancel (self->app_cancellable);
+ gtk_widget_set_sensitive (widget, FALSE);
+
+ /* reset the pending-action from the app if needed */
+ gs_app_set_pending_action (self->app, GS_PLUGIN_ACTION_UNKNOWN);
+
+ /* FIXME: We should be able to revert the QUEUED_FOR_INSTALL without
+ * having to pretend to remove the app */
+ if (gs_app_get_state (self->app) == AS_APP_STATE_QUEUED_FOR_INSTALL)
+ gs_details_page_remove_app (self);
+}
+
+static void
+gs_details_page_app_install_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ g_autoptr(GList) addons = NULL;
+
+ /* Mark ticked addons to be installed together with the app */
+ addons = gtk_container_get_children (GTK_CONTAINER (self->list_box_addons));
+ for (GList *l = addons; l; l = l->next) {
+ if (gs_app_addon_row_get_selected (l->data)) {
+ GsApp *addon = gs_app_addon_row_get_addon (l->data);
+
+ if (gs_app_get_state (addon) == AS_APP_STATE_AVAILABLE)
+ gs_app_set_to_be_installed (addon, TRUE);
+ }
+ }
+
+ g_set_object (&self->app_cancellable, gs_app_get_cancellable (self->app));
+
+ if (gs_app_get_state (self->app) == AS_APP_STATE_UPDATABLE_LIVE) {
+ gs_page_update_app (GS_PAGE (self), self->app, self->app_cancellable);
+ return;
+ }
+
+ gs_page_install_app (GS_PAGE (self), self->app, GS_SHELL_INTERACTION_FULL,
+ self->app_cancellable);
+}
+
+static void
+gs_details_page_app_update_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ g_set_object (&self->app_cancellable, gs_app_get_cancellable (self->app));
+ gs_page_update_app (GS_PAGE (self), self->app, self->app_cancellable);
+}
+
+static void
+gs_details_page_addon_selected_cb (GsAppAddonRow *row,
+ GParamSpec *pspec,
+ GsDetailsPage *self)
+{
+ GsApp *addon;
+
+ addon = gs_app_addon_row_get_addon (row);
+
+ /* If the main app is already installed, ticking the addon checkbox
+ * triggers an immediate install. Otherwise we'll install the addon
+ * together with the main app. */
+ switch (gs_app_get_state (self->app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ if (gs_app_addon_row_get_selected (row)) {
+ g_set_object (&self->app_cancellable, gs_app_get_cancellable (addon));
+ gs_page_install_app (GS_PAGE (self), addon, GS_SHELL_INTERACTION_FULL,
+ self->app_cancellable);
+ } else {
+ g_set_object (&self->app_cancellable, gs_app_get_cancellable (addon));
+ gs_page_remove_app (GS_PAGE (self), addon, self->app_cancellable);
+ /* make sure the addon checkboxes are synced if the
+ * user clicks cancel in the remove confirmation dialog */
+ gs_details_page_refresh_addons (self);
+ gs_details_page_refresh_all (self);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gs_details_page_app_launch_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ g_autoptr(GCancellable) cancellable = g_cancellable_new ();
+
+ /* hide the notification */
+ g_application_withdraw_notification (g_application_get_default (),
+ "installed");
+
+ g_set_object (&self->cancellable, cancellable);
+ gs_page_launch_app (GS_PAGE (self), self->app, self->cancellable);
+}
+
+static void
+gs_details_page_app_add_shortcut_button_cb (GtkWidget *widget,
+ GsDetailsPage *self)
+{
+ g_autoptr(GCancellable) cancellable = g_cancellable_new ();
+ g_set_object (&self->cancellable, cancellable);
+ gs_page_shortcut_add (GS_PAGE (self), self->app, self->cancellable);
+}
+
+static void
+gs_details_page_app_remove_shortcut_button_cb (GtkWidget *widget,
+ GsDetailsPage *self)
+{
+ g_autoptr(GCancellable) cancellable = g_cancellable_new ();
+ g_set_object (&self->cancellable, cancellable);
+ gs_page_shortcut_remove (GS_PAGE (self), self->app, self->cancellable);
+}
+
+static void
+gs_details_page_review_response_cb (GtkDialog *dialog,
+ gint response,
+ GsDetailsPage *self)
+{
+ g_autofree gchar *text = NULL;
+ g_autoptr(GDateTime) now = NULL;
+ g_autoptr(AsReview) review = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ GsDetailsPageReviewHelper *helper;
+ GsReviewDialog *rdialog = GS_REVIEW_DIALOG (dialog);
+
+ /* not agreed */
+ if (response != GTK_RESPONSE_OK) {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ return;
+ }
+
+ review = as_review_new ();
+ as_review_set_summary (review, gs_review_dialog_get_summary (rdialog));
+ text = gs_review_dialog_get_text (rdialog);
+ as_review_set_description (review, text);
+ as_review_set_rating (review, gs_review_dialog_get_rating (rdialog));
+ as_review_set_version (review, gs_app_get_version (self->app));
+ now = g_date_time_new_now_local ();
+ as_review_set_date (review, now);
+
+ /* call into the plugins to set the new value */
+ helper = g_new0 (GsDetailsPageReviewHelper, 1);
+ helper->self = g_object_ref (self);
+ helper->app = g_object_ref (self->app);
+ helper->review = g_object_ref (review);
+ helper->action = GS_PLUGIN_ACTION_REVIEW_SUBMIT;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REVIEW_SUBMIT,
+ "interactive", TRUE,
+ "app", helper->app,
+ "review", helper->review,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_details_page_app_set_review_cb,
+ helper);
+
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+gs_details_page_write_review_cb (GtkButton *button,
+ GsDetailsPage *self)
+{
+ GtkWidget *dialog;
+ dialog = gs_review_dialog_new ();
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_details_page_review_response_cb), self);
+ gs_shell_modal_dialog_present (self->shell, GTK_DIALOG (dialog));
+}
+
+static void
+gs_details_page_app_installed (GsPage *page, GsApp *app)
+{
+ gs_details_page_reload (page);
+}
+
+static void
+gs_details_page_app_removed (GsPage *page, GsApp *app)
+{
+ gs_details_page_reload (page);
+}
+
+static void
+show_all_cb (GtkWidget *widget, gpointer user_data)
+{
+ gtk_widget_show (widget);
+}
+
+static void
+gs_details_page_more_reviews_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ self->show_all_reviews = TRUE;
+ gtk_container_foreach (GTK_CONTAINER (self->list_box_reviews),
+ show_all_cb, NULL);
+ gtk_widget_set_visible (self->button_more_reviews, FALSE);
+}
+
+static void
+gs_details_page_content_rating_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ AsContentRating *cr;
+ AsContentRatingValue value_bad = AS_CONTENT_RATING_VALUE_NONE;
+ const gchar *tmp;
+ g_autofree const gchar **ids = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ /* Ordered from worst to best */
+ const gchar *violence_group[] = {
+ "violence-bloodshed",
+ "violence-realistic",
+ "violence-fantasy",
+ "violence-cartoon",
+ NULL
+ };
+ const gchar *social_group[] = {
+ "social-audio",
+ "social-chat",
+ "social-contacts",
+ "social-info",
+ NULL
+ };
+
+ cr = gs_app_get_content_rating (self->app);
+ if (cr == NULL)
+ return;
+
+ ids = gs_content_rating_get_all_rating_ids ();
+
+ /* get the worst thing */
+ for (gsize i = 0; ids[i] != NULL; i++) {
+ AsContentRatingValue value;
+ value = as_content_rating_get_value (cr, ids[i]);
+ if (value > value_bad)
+ value_bad = value;
+ }
+
+ /* get the content rating description for the worst things about the app;
+ * handle the groups separately*/
+ for (gsize i = 0; ids[i] != NULL; i++) {
+ if (!g_strv_contains (violence_group, ids[i]) &&
+ !g_strv_contains (social_group, ids[i])) {
+ AsContentRatingValue value;
+ value = as_content_rating_get_value (cr, ids[i]);
+ if (value < value_bad)
+ continue;
+ tmp = gs_content_rating_key_value_to_str (ids[i], value);
+ g_string_append_printf (str, "• %s\n", tmp);
+ }
+ }
+
+ for (gsize i = 0; violence_group[i] != NULL; i++) {
+ AsContentRatingValue value;
+ value = as_content_rating_get_value (cr, violence_group[i]);
+ if (value < value_bad)
+ continue;
+ tmp = gs_content_rating_key_value_to_str (violence_group[i], value);
+ g_string_append_printf (str, "• %s\n", tmp);
+ break;
+ }
+
+ for (gsize i = 0; social_group[i] != NULL; i++) {
+ AsContentRatingValue value;
+ value = as_content_rating_get_value (cr, social_group[i]);
+ if (value < value_bad)
+ continue;
+ tmp = gs_content_rating_key_value_to_str (social_group[i], value);
+ g_string_append_printf (str, "• %s\n", tmp);
+ break;
+ }
+
+ if (str->len > 0)
+ g_string_truncate (str, str->len - 1);
+
+ /* enable the details if there are any */
+ gtk_label_set_label (GTK_LABEL (self->label_content_rating_message), str->str);
+ gtk_widget_set_visible (self->label_content_rating_title, str->len > 0);
+ gtk_widget_set_visible (self->label_content_rating_message, str->len > 0);
+ gtk_widget_set_visible (self->label_content_rating_none, str->len == 0);
+
+ /* show popover */
+ gtk_popover_set_relative_to (GTK_POPOVER (self->popover_content_rating), widget);
+ gtk_widget_show (self->popover_content_rating);
+}
+
+static void
+gs_details_page_permissions_button_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ gtk_widget_show (self->popover_permissions);
+}
+
+static gboolean
+gs_details_page_activate_link_cb (GtkLabel *label,
+ const gchar *uri,
+ GsDetailsPage *self)
+{
+ gs_shell_show_uri (self->shell, uri);
+ return TRUE;
+}
+
+static GtkWidget *
+gs_details_page_label_widget (GsDetailsPage *self,
+ const gchar *title,
+ const gchar *url)
+{
+ GtkWidget *w;
+ g_autofree gchar *markup = NULL;
+
+ markup = g_strdup_printf ("<a href=\"%s\">%s</a>", url, title);
+ w = gtk_label_new (markup);
+ g_signal_connect (w, "activate-link",
+ G_CALLBACK (gs_details_page_activate_link_cb),
+ self);
+ gtk_label_set_use_markup (GTK_LABEL (w), TRUE);
+ gtk_label_set_xalign (GTK_LABEL (w), 0.f);
+ gtk_widget_set_visible (w, TRUE);
+ return w;
+}
+
+static GtkWidget *
+gs_details_page_license_widget_for_token (GsDetailsPage *self, const gchar *token)
+{
+ /* public domain */
+ if (g_strcmp0 (token, "@LicenseRef-public-domain") == 0) {
+ /* TRANSLATORS: see the wikipedia page */
+ return gs_details_page_label_widget (self, _("Public domain"),
+ /* TRANSLATORS: Replace the link with a version in your language,
+ * e.g. https://de.wikipedia.org/wiki/Gemeinfreiheit */
+ _("https://en.wikipedia.org/wiki/Public_domain"));
+ }
+
+ /* free software, license unspecified */
+ if (g_str_has_prefix (token, "@LicenseRef-free")) {
+ /* TRANSLATORS: Replace the link with a version in your language,
+ * e.g. https://www.gnu.org/philosophy/free-sw.de */
+ const gchar *url = _("https://www.gnu.org/philosophy/free-sw");
+ gchar *tmp;
+
+ /* we support putting a custom URL in the
+ * token string, e.g. @LicenseRef-free=http://ubuntu.com */
+ tmp = g_strstr_len (token, -1, "=");
+ if (tmp != NULL)
+ url = tmp + 1;
+
+ /* TRANSLATORS: see GNU page */
+ return gs_details_page_label_widget (self, _("Free Software"), url);
+ }
+
+ /* SPDX value */
+ if (g_str_has_prefix (token, "@")) {
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("http://spdx.org/licenses/%s",
+ token + 1);
+ return gs_details_page_label_widget (self, token + 1, uri);
+ }
+
+ /* new SPDX value the extractor didn't know about */
+ if (as_utils_is_spdx_license_id (token)) {
+ g_autofree gchar *uri = NULL;
+ uri = g_strdup_printf ("http://spdx.org/licenses/%s",
+ token);
+ return gs_details_page_label_widget (self, token, uri);
+ }
+
+ /* nothing to show */
+ return NULL;
+}
+
+static void
+gs_details_page_license_free_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ guint cnt = 0;
+ guint i;
+ g_auto(GStrv) tokens = NULL;
+
+ /* URLify any SPDX IDs */
+ gs_container_remove_all (GTK_CONTAINER (self->box_details_license_list));
+ tokens = as_utils_spdx_license_tokenize (gs_app_get_license (self->app));
+ for (i = 0; tokens[i] != NULL; i++) {
+ GtkWidget *w = NULL;
+
+ /* translated join */
+ if (g_strcmp0 (tokens[i], "&") == 0)
+ continue;
+ if (g_strcmp0 (tokens[i], "|") == 0)
+ continue;
+ if (g_strcmp0 (tokens[i], "+") == 0)
+ continue;
+
+ /* add widget */
+ w = gs_details_page_license_widget_for_token (self, tokens[i]);
+ if (w == NULL)
+ continue;
+ gtk_container_add (GTK_CONTAINER (self->box_details_license_list), w);
+
+ /* one more license */
+ cnt++;
+ }
+
+ /* use the correct plural */
+ gtk_label_set_label (GTK_LABEL (self->label_licenses_intro),
+ /* TRANSLATORS: for the free software popover */
+ ngettext ("Users are bound by the following license:",
+ "Users are bound by the following licenses:",
+ cnt));
+ gtk_widget_set_visible (self->label_licenses_intro, cnt > 0);
+
+ gtk_widget_show (self->popover_license_free);
+}
+
+static void
+gs_details_page_license_nonfree_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ g_autofree gchar *str = NULL;
+ g_autofree gchar *uri = NULL;
+ g_auto(GStrv) tokens = NULL;
+
+ /* license specified as a link */
+ tokens = as_utils_spdx_license_tokenize (gs_app_get_license (self->app));
+ for (guint i = 0; tokens[i] != NULL; i++) {
+ if (g_str_has_prefix (tokens[i], "@LicenseRef-proprietary=")) {
+ uri = g_strdup (tokens[i] + 24);
+ break;
+ }
+ }
+ if (uri == NULL)
+ uri = g_settings_get_string (self->settings, "nonfree-software-uri");
+ str = g_strdup_printf ("<a href=\"%s\">%s</a>",
+ uri,
+ _("More information"));
+ gtk_label_set_label (GTK_LABEL (self->label_license_nonfree_details), str);
+ gtk_widget_show (self->popover_license_nonfree);
+}
+
+static void
+gs_details_page_license_unknown_cb (GtkWidget *widget, GsDetailsPage *self)
+{
+ gtk_widget_show (self->popover_license_unknown);
+}
+
+static void
+gs_details_page_network_available_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsDetailsPage *self)
+{
+ gs_details_page_refresh_reviews (self);
+}
+
+static void
+gs_details_page_star_pressed_cb(GtkWidget *widget, GdkEventButton *event, GsDetailsPage *self)
+{
+ gs_details_page_write_review_cb(GTK_BUTTON (self->button_review), self);
+}
+
+static gboolean
+gs_details_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (page);
+ GtkAdjustment *adj;
+ GtkWidget *origin_popover_list_box;
+
+ g_return_val_if_fail (GS_IS_DETAILS_PAGE (self), TRUE);
+
+ self->shell = shell;
+
+ self->plugin_loader = g_object_ref (plugin_loader);
+ self->builder = g_object_ref (builder);
+ self->cancellable = g_object_ref (cancellable);
+
+ /* show review widgets if we have plugins that provide them */
+ self->enable_reviews =
+ gs_plugin_loader_get_plugin_supported (plugin_loader,
+ "gs_plugin_review_submit");
+ g_signal_connect (self->button_review, "clicked",
+ G_CALLBACK (gs_details_page_write_review_cb),
+ self);
+ g_signal_connect (self->star_eventbox, "button-press-event",
+ G_CALLBACK (gs_details_page_star_pressed_cb),
+ self);
+
+ /* hide some UI when offline */
+ g_signal_connect_object (self->plugin_loader, "notify::network-available",
+ G_CALLBACK (gs_details_page_network_available_notify_cb),
+ self, 0);
+
+ /* setup details */
+ g_signal_connect (self->button_install, "clicked",
+ G_CALLBACK (gs_details_page_app_install_button_cb),
+ self);
+ g_signal_connect (self->button_update, "clicked",
+ G_CALLBACK (gs_details_page_app_update_button_cb),
+ self);
+ g_signal_connect (self->button_remove, "clicked",
+ G_CALLBACK (gs_details_page_app_remove_button_cb),
+ self);
+ g_signal_connect (self->button_cancel, "clicked",
+ G_CALLBACK (gs_details_page_app_cancel_button_cb),
+ self);
+ g_signal_connect (self->button_more_reviews, "clicked",
+ G_CALLBACK (gs_details_page_more_reviews_button_cb),
+ self);
+ g_signal_connect (self->button_details_rating_value, "clicked",
+ G_CALLBACK (gs_details_page_content_rating_button_cb),
+ self);
+ g_signal_connect (self->button_details_permissions_value, "clicked",
+ G_CALLBACK (gs_details_page_permissions_button_cb),
+ self);
+ g_signal_connect (self->label_details_updated_value, "activate-link",
+ G_CALLBACK (gs_details_page_history_cb),
+ self);
+ g_signal_connect (self->button_details_launch, "clicked",
+ G_CALLBACK (gs_details_page_app_launch_button_cb),
+ self);
+ g_signal_connect (self->button_details_add_shortcut, "clicked",
+ G_CALLBACK (gs_details_page_app_add_shortcut_button_cb),
+ self);
+ g_signal_connect (self->button_details_remove_shortcut, "clicked",
+ G_CALLBACK (gs_details_page_app_remove_shortcut_button_cb),
+ self);
+ g_signal_connect (self->button_details_website, "clicked",
+ G_CALLBACK (gs_details_page_website_cb),
+ self);
+ g_signal_connect (self->button_donate, "clicked",
+ G_CALLBACK (gs_details_page_donate_cb),
+ self);
+ g_signal_connect (self->button_details_license_free, "clicked",
+ G_CALLBACK (gs_details_page_license_free_cb),
+ self);
+ g_signal_connect (self->button_details_license_nonfree, "clicked",
+ G_CALLBACK (gs_details_page_license_nonfree_cb),
+ self);
+ g_signal_connect (self->button_details_license_unknown, "clicked",
+ G_CALLBACK (gs_details_page_license_unknown_cb),
+ self);
+ g_signal_connect (self->label_license_nonfree_details, "activate-link",
+ G_CALLBACK (gs_details_page_activate_link_cb),
+ self);
+ origin_popover_list_box = GTK_WIDGET (gtk_builder_get_object (self->builder, "origin_popover_list_box"));
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (origin_popover_list_box),
+ origin_popover_list_sort_func,
+ NULL, NULL);
+ gtk_list_box_set_header_func (GTK_LIST_BOX (origin_popover_list_box),
+ list_header_func,
+ NULL, NULL);
+ g_signal_connect (origin_popover_list_box, "row-activated",
+ G_CALLBACK (origin_popover_row_activated_cb),
+ self);
+
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_details));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (self->box_details), adj);
+ return TRUE;
+}
+
+static void
+gs_details_page_dispose (GObject *object)
+{
+ GsDetailsPage *self = GS_DETAILS_PAGE (object);
+
+ stop_progress_pulsing (self);
+
+ if (self->app != NULL) {
+ g_signal_handlers_disconnect_by_func (self->app, gs_details_page_notify_state_changed_cb, self);
+ g_signal_handlers_disconnect_by_func (self->app, gs_details_page_progress_changed_cb, self);
+ g_clear_object (&self->app);
+ }
+ g_clear_object (&self->app_local_file);
+ g_clear_object (&self->builder);
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->cancellable);
+ g_clear_object (&self->app_cancellable);
+ g_clear_object (&self->session);
+ g_clear_object (&self->size_group_origin_popover);
+ g_clear_object (&self->button_details_rating_style_provider);
+
+ G_OBJECT_CLASS (gs_details_page_parent_class)->dispose (object);
+}
+
+static void
+gs_details_page_class_init (GsDetailsPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_details_page_dispose;
+ page_class->app_installed = gs_details_page_app_installed;
+ page_class->app_removed = gs_details_page_app_removed;
+ page_class->switch_to = gs_details_page_switch_to;
+ page_class->reload = gs_details_page_reload;
+ page_class->setup = gs_details_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-details-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, application_details_icon);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, application_details_summary);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, application_details_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_addons);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_description);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_support);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_progress);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_progress2);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, star);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_review_count);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_screenshot);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_screenshot_main);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_screenshot_scrolledwindow);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_screenshot_thumbnails);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_license_list);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_launch);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_add_shortcut);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_remove_shortcut);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_website);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_donate);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_install);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_update);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_remove);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_cancel);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_more_reviews);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_app_norepo);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_app_repo);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_package_baseos);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_repo);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_addons_uninstalled_app);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_progress_percentage);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_progress_status);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_category_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_category_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_developer_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_developer_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_developer);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, image_details_developer_verified);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_license_free);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_license_nonfree);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_license_unknown);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_license_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_license_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_channel_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_channel_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_origin_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_origin_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_size_download_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_size_download_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_size_installed_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_size_installed_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_updated_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_updated_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_version_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_version_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_permissions_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_permissions_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_failed);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, list_box_addons);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_reviews);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_details_screenshot_fallback);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, histogram);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_review);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, list_box_reviews);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, scrolledwindow_details);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, spinner_details);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, spinner_remove);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, stack_details);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, grid_details_kudo);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, image_details_kudo_docs);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, image_details_kudo_sandboxed);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, image_details_kudo_integration);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, image_details_kudo_translated);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, image_details_kudo_updated);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_kudo_docs);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_kudo_sandboxed);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_kudo_integration);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_kudo_translated);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_kudo_updated);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, progressbar_top);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, popover_license_free);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, popover_license_nonfree);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, popover_license_unknown);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_license_nonfree_details);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_licenses_intro);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, popover_content_rating);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_content_rating_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_content_rating_message);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_content_rating_none);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_details_rating_value);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_details_rating_title);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, popover_permissions);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, box_permissions_details);
+ gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, star_eventbox);
+}
+
+static void
+gs_details_page_init (GsDetailsPage *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ /* setup networking */
+ self->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
+ NULL);
+ self->settings = g_settings_new ("org.gnome.software");
+ g_signal_connect_swapped (self->settings, "changed",
+ G_CALLBACK (settings_changed_cb),
+ self);
+ self->size_group_origin_popover = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->list_box_addons),
+ list_header_func,
+ self, NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (self->list_box_addons),
+ list_sort_func,
+ self, NULL);
+}
+
+GsDetailsPage *
+gs_details_page_new (void)
+{
+ GsDetailsPage *self;
+ self = g_object_new (GS_TYPE_DETAILS_PAGE, NULL);
+ return GS_DETAILS_PAGE (self);
+}
diff --git a/src/gs-details-page.h b/src/gs-details-page.h
new file mode 100644
index 0000000..0c5eda1
--- /dev/null
+++ b/src/gs-details-page.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_DETAILS_PAGE (gs_details_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsDetailsPage, gs_details_page, GS, DETAILS_PAGE, GsPage)
+
+GsDetailsPage *gs_details_page_new (void);
+void gs_details_page_set_app (GsDetailsPage *self,
+ GsApp *app);
+void gs_details_page_set_local_file(GsDetailsPage *self,
+ GFile *file);
+void gs_details_page_set_url (GsDetailsPage *self,
+ const gchar *url);
+GsApp *gs_details_page_get_app (GsDetailsPage *self);
+
+G_END_DECLS
diff --git a/src/gs-details-page.ui b/src/gs-details-page.ui
new file mode 100644
index 0000000..f86674f
--- /dev/null
+++ b/src/gs-details-page.ui
@@ -0,0 +1,1424 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsDetailsPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="details-accessible">
+ <property name="accessible-name" translatable="yes">Details page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack_details">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="details_spinner_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner_details">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_details">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="viewport1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <property name="preferred-width">860</property>
+ <child>
+ <object class="GtkBox" id="box_details">
+ <property name="width_request">752</property>
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="margin_top">4</property>
+ <property name="margin_bottom">4</property>
+ <property name="border_width">24</property>
+ <property name="spacing">18</property>
+ <property name="hexpand">False</property>
+ <child>
+ <object class="GtkBox" id="box_details_header">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage" id="application_details_icon">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="pixel_size">96</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_header2">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="margin_start">24</property>
+ <property name="margin_end">24</property>
+ <child>
+ <object class="GtkLabel" id="application_details_title">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="margin_bottom">4</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">20</property>
+ <style>
+ <class name="application-details-title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="application_details_summary">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="margin_bottom">16</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <style>
+ <class name="application-details-summary"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="star_box">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkEventBox" id="star_eventbox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GsStarWidget" id="star">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_review_count">
+ <property name="visible">True</property>
+ <property name="margin_start">5</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="box_install_remove">
+ <property name="visible">True</property>
+ <property name="margin_bottom">14</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkButton" id="button_install">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Install</property>
+ <property name="width_request">105</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_launch">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_remove">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Remove</property>
+ <property name="width_request">105</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinner" id="spinner_remove">
+ <property name="visible">False</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_progress">
+ <property name="visible">True</property>
+ <property name="spacing">3</property>
+ <property name="orientation">vertical</property>
+ <property name="hexpand">True</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkBox" id="box_progress2">
+ <property name="visible">True</property>
+ <property name="spacing">3</property>
+ <property name="halign">center</property>
+ <child>
+ <object class="GtkLabel" id="label_progress_status">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <property name="label" translatable="yes">Downloading</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_progress_percentage">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <property name="label">50%</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="progressbar_top">
+ <property name="visible">True</property>
+ <property name="fraction">0.5</property>
+ <property name="valign">center</property>
+ <property name="vexpand">True</property>
+ <property name="width_request">624</property>
+ <style>
+ <class name="upgrade-progressbar"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_cancel">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="width_request">116</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_update">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Update</property>
+ <property name="width_request">105</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_add_shortcut">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators: A label for a button to add a shortcut to the selected application.">_Add shortcut</property>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_remove_shortcut">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators: A label for a button to remove a shortcut to the selected application.">Re_move shortcut</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="box_details_screenshot">
+ <property name="visible">True</property>
+ <property name="margin_bottom">14</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkBox" id="box_details_screenshot_main">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="hexpand">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="box_details_screenshot_scrolledwindow">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkBox" id="box_details_screenshot_thumbnails">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">7</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_screenshot_fallback">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="width_request">752</property>
+ <property name="height_request">423</property>
+ <property name="hexpand">True</property>
+ <property name="halign">fill</property>
+ <style>
+ <class name="screenshot-image"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">camera-photo-symbolic</property>
+ <property name="icon_size">6</property>
+ <property name="valign">end</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="vexpand">True</property>
+ <property name="label" translatable="yes">No screenshot provided</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_description">
+ <property name="visible">True</property>
+ <property name="margin_bottom">14</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_app_repo">
+ <property name="visible">True</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes">Software Repository Included</property>
+ <property name="body" translatable="yes">This application includes a software repository which provides updates, as well as access to other software.</property>
+ </object>
+ </child>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_app_norepo">
+ <property name="visible">True</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes">No Software Repository Included</property>
+ <property name="body" translatable="yes">This application does not include a software repository. It will not be updated with new versions.</property>
+ </object>
+ </child>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_package_baseos">
+ <property name="visible">True</property>
+ <property name="message_type">warning</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes">This software is already provided by your distribution and should not be replaced.</property>
+ </object>
+ </child>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_repo">
+ <property name="visible">True</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes" comments="Translators: a repository file used for installing software has been discovered.">Software Repository Identified</property>
+ <property name="body" translatable="yes">Adding this software repository will give you access to additional software and upgrades.</property>
+ <property name="warning" translatable="yes">Only use software repositories that you trust.</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_support">
+ <property name="visible">True</property>
+ <property name="margin_bottom">26</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkButton" id="button_details_website">
+ <property name="label" translatable="yes">_Website</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_donate">
+ <property name="label" translatable="yes">_Donate</property>
+ <property name="width_request">150</property>
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="application_details_details_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Details</property>
+ <style>
+ <class name="application-details-title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_details">
+ <property name="visible">True</property>
+ <property name="margin_bottom">26</property>
+ <property name="spacing">30</property>
+ <child>
+ <object class="GtkGrid" id="grid_details_kudo">
+ <property name="visible">True</property>
+ <property name="row_spacing">9</property>
+ <property name="column_spacing">12</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkImage" id="image_details_kudo_translated">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">preferences-desktop-locale-symbolic</property>
+ <property name="icon_size">6</property>
+ <style>
+ <class name="kudo-pill"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="image_details_kudo_docs">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">system-help-symbolic</property>
+ <style>
+ <class name="kudo-pill"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="image_details_kudo_updated">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">software-update-available-symbolic</property>
+ <property name="icon_size">6</property>
+ <style>
+ <class name="kudo-pill"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="image_details_kudo_integration">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">emblem-system-symbolic</property>
+ <property name="icon_size">0</property>
+ <style>
+ <class name="kudo-pill"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="image_details_kudo_sandboxed">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">security-medium-symbolic</property>
+ <property name="icon_size">0</property>
+ <style>
+ <class name="kudo-pill"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_kudo_translated">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Localized in your Language</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_kudo_docs">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Documentation</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_kudo_updated">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Release Activity</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_kudo_integration">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">System Integration</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_kudo_sandboxed">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Sandboxed</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid_details_details">
+ <property name="visible">True</property>
+ <property name="row_spacing">9</property>
+ <property name="column_spacing">24</property>
+ <property name="hexpand">True</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="label_details_channel_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Channel</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_channel_value">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">stable</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <accessibility>
+ <relation type="labelled-by" target="label_details_channel_title"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_version_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Version</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_version_value">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">0.12.3</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <accessibility>
+ <relation type="labelled-by" target="label_details_version_title"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_rating_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Age Rating</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">9</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_rating_value">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label">18</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="vexpand">False</property>
+ <property name="halign">start</property>
+ <style>
+ <class name="content-rating"/>
+ </style>
+ <accessibility>
+ <relation type="labelled-by" target="label_details_version_title"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">9</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_permissions_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Permissions</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">10</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_permissions_value">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="label">Details</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="vexpand">False</property>
+ <property name="halign">start</property>
+ <style>
+ <class name="content-rating"/>
+ </style>
+ <accessibility>
+ <relation type="labelled-by" target="label_details_permissions_title"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">10</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_updated_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Updated</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_updated_value">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">May 12, 2012</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <accessibility>
+ <relation type="labelled-by" target="label_details_updated_title"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_category_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Category</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_category_value">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">Photos &amp; Video</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ <property name="max_width_chars">10</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <accessibility>
+ <relation type="labelled-by" target="label_details_category_title"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_size_installed_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Installed Size</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_size_installed_value">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">30 MB</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">7</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_size_download_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Download Size</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_size_download_value">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">30 MB</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">8</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_details_origin_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Source</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_origin_value">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="label">Upstream</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_developer_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Developer</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_developer">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkLabel" id="label_details_developer_value">
+ <property name="visible">True</property>
+ <property name="label">Yorba</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ <property name="max_width_chars">100</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="hexpand">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="image_details_developer_verified">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">emblem-ok-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_details_license_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">License</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_license_value">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkButton" id="button_details_license_free">
+ <property name="label" translatable="yes" comments="This refers to the license of the application">Free</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <style>
+ <class name="details-license-free"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_license_nonfree">
+ <property name="label" translatable="yes" comments="This refers to the license of the application">Proprietary</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <style>
+ <class name="details-license-nonfree"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_license_unknown">
+ <property name="label" translatable="yes" comments="This refers to the license of the application">Unknown</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <style>
+ <class name="details-license-unknown"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_addons">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin_bottom">26</property>
+
+ <child>
+ <object class="GtkBox" id="box_addons_title">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin_bottom">18</property>
+ <child>
+ <object class="GtkLabel" id="label_addons_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Add-ons</property>
+ <style>
+ <class name="application-details-title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_addons_uninstalled_app">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">40</property>
+ <property name="label" translatable="yes">Selected add-ons will be installed with the application.</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkFrame" id="box_addons_frame">
+ <property name="visible">True</property>
+ <property name="shadow_type">in</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkListBox" id="list_box_addons">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_reviews">
+ <property name="visible">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="application_details_reviews_title">
+ <property name="visible">True</property>
+ <property name="margin_bottom">18</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: Header of the section with other users&apos; opinions about the app.">Reviews</property>
+ <style>
+ <class name="application-details-title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GsReviewHistogram" id="histogram">
+ <property name="visible">False</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="margin_bottom">32</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_review">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators: Button opening a dialog where the users can write and publish their opinions about the apps.">_Write a Review</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin_bottom">18</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBox" id="list_box_reviews">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <style>
+ <class name="review-listbox"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_more_reviews">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators: Button to return more application-submitted reviews.">_Show More</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin_top">12</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">ready</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_failed">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_failed">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_failed">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">failed</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkSizeGroup" id="sizegroup_install_remove">
+ <property name="ignore_hidden">True</property>
+ <widgets>
+ <widget name="button_install"/>
+ <widget name="button_update"/>
+ <widget name="button_remove"/>
+ <widget name="button_details_launch"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="sizegroup_details_buttons">
+ <widgets>
+ <widget name="button_details_website"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="sizegroup_details_title">
+ <property name="ignore_hidden">True</property>
+ <widgets>
+ <widget name="label_details_version_title"/>
+ <widget name="label_details_updated_title"/>
+ <widget name="label_details_category_title"/>
+ <widget name="label_details_origin_title"/>
+ <widget name="label_details_license_title"/>
+ <widget name="label_details_size_installed_title"/>
+ <widget name="label_details_size_download_title"/>
+ <widget name="label_details_developer_title"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="sizegroup_details_value">
+ <property name="ignore_hidden">True</property>
+ <widgets>
+ <widget name="label_details_version_value"/>
+ <widget name="label_details_updated_value"/>
+ <widget name="label_details_category_value"/>
+ <widget name="label_details_size_installed_value"/>
+ <widget name="label_details_size_download_value"/>
+ <widget name="box_details_developer"/>
+ <widget name="button_details_license_free"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="sizegroup_button_details_license">
+ <widgets>
+ <widget name="button_details_license_free"/>
+ <widget name="button_details_license_nonfree"/>
+ <widget name="button_details_license_unknown"/>
+ </widgets>
+ </object>
+ <object class="GtkPopover" id="popover_license_free">
+ <property name="visible">False</property>
+ <property name="border_width">21</property>
+ <property name="relative_to">button_details_license_free</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Free Software</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="max_width_chars">34</property>
+ <property name="label" translatable="yes">This means that the software can be freely run, copied, distributed, studied and modified.</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_licenses_intro">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label">Users are bound by the following licenses:</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_license_list">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkPopover" id="popover_license_nonfree">
+ <property name="visible">False</property>
+ <property name="border_width">21</property>
+ <property name="relative_to">button_details_license_nonfree</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Proprietary Software</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="max_width_chars">34</property>
+ <property name="label" translatable="yes">This means that the software is owned by an individual or a company. There are often restrictions on its use and its source code cannot usually be accessed.</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_license_nonfree_details">
+ <property name="visible">True</property>
+ <property name="use-markup">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">More information</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkPopover" id="popover_license_unknown">
+ <property name="visible">False</property>
+ <property name="name">popover_license_unknown</property>
+ <property name="border_width">21</property>
+ <property name="relative_to">button_details_license_unknown</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Unknown Software License</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="max_width_chars">34</property>
+ <property name="label" translatable="yes">The license terms of this software are unknown.</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+
+ <object class="GtkPopover" id="popover_content_rating">
+ <property name="visible">False</property>
+ <child>
+ <object class="GtkBox" id="box_content_rating">
+ <property name="visible">True</property>
+ <property name="border_width">24</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label_content_rating_title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">The application was rated this way because it features:</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_content_rating_message">
+ <property name="visible">True</property>
+ <property name="label">• Use of alcoholic beverages</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_content_rating_none">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">No details were available for this rating.</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkPopover" id="popover_permissions">
+ <property name="visible">False</property>
+ <property name="border_width">21</property>
+ <property name="relative_to">button_details_permissions_value</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="label" translatable="yes">Permissions</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_permissions_details">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/src/gs-extras-page.c b/src/gs-extras-page.c
new file mode 100644
index 0000000..9b9aeec
--- /dev/null
+++ b/src/gs-extras-page.c
@@ -0,0 +1,1220 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-extras-page.h"
+
+#include "gs-app-row.h"
+#include "gs-language.h"
+#include "gs-shell.h"
+#include "gs-common.h"
+#include "gs-utils.h"
+#include "gs-vendor.h"
+
+#include <glib/gi18n.h>
+
+typedef enum {
+ GS_EXTRAS_PAGE_STATE_LOADING,
+ GS_EXTRAS_PAGE_STATE_READY,
+ GS_EXTRAS_PAGE_STATE_NO_RESULTS,
+ GS_EXTRAS_PAGE_STATE_FAILED
+} GsExtrasPageState;
+
+typedef struct {
+ gchar *title;
+ gchar *search;
+ gchar *search_filename;
+ gchar *package_filename;
+ gchar *url_not_found;
+ GsExtrasPage *self;
+} SearchData;
+
+struct _GsExtrasPage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *search_cancellable;
+ GsShell *shell;
+ GsExtrasPageState state;
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+ GtkSizeGroup *sizegroup_button;
+ GPtrArray *array_search_data;
+ GsExtrasPageMode mode;
+ GsLanguage *language;
+ GsVendor *vendor;
+ guint pending_search_cnt;
+
+ GtkWidget *label_failed;
+ GtkWidget *label_no_results;
+ GtkWidget *list_box_results;
+ GtkWidget *scrolledwindow;
+ GtkWidget *spinner;
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE (GsExtrasPage, gs_extras_page, GS_TYPE_PAGE)
+
+static void
+search_data_free (SearchData *search_data)
+{
+ if (search_data->self != NULL)
+ g_object_unref (search_data->self);
+ g_free (search_data->title);
+ g_free (search_data->search);
+ g_free (search_data->search_filename);
+ g_free (search_data->package_filename);
+ g_free (search_data->url_not_found);
+ g_slice_free (SearchData, search_data);
+}
+
+static GsExtrasPageMode
+gs_extras_page_mode_from_string (const gchar *str)
+{
+ if (g_strcmp0 (str, "install-package-files") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES;
+ if (g_strcmp0 (str, "install-provide-files") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES;
+ if (g_strcmp0 (str, "install-package-names") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES;
+ if (g_strcmp0 (str, "install-mime-types") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES;
+ if (g_strcmp0 (str, "install-fontconfig-resources") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES;
+ if (g_strcmp0 (str, "install-gstreamer-resources") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES;
+ if (g_strcmp0 (str, "install-plasma-resources") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES;
+ if (g_strcmp0 (str, "install-printer-drivers") == 0)
+ return GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS;
+
+ g_assert_not_reached ();
+}
+
+const gchar *
+gs_extras_page_mode_to_string (GsExtrasPageMode mode)
+{
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES)
+ return "install-package-files";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES)
+ return "install-provide-files";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES)
+ return "install-package-names";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES)
+ return "install-mime-types";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES)
+ return "install-fontconfig-resources";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES)
+ return "install-gstreamer-resources";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES)
+ return "install-plasma-resources";
+ if (mode == GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS)
+ return "install-printer-drivers";
+
+ g_assert_not_reached ();
+}
+
+static gchar *
+build_comma_separated_list (gchar **items)
+{
+ guint len;
+
+ len = g_strv_length (items);
+ if (len == 2) {
+ /* TRANSLATORS: separator for a list of items */
+ return g_strjoinv (_(" and "), items);
+ } else {
+ /* TRANSLATORS: separator for a list of items */
+ return g_strjoinv (_(", "), items);
+ }
+}
+
+static gchar *
+build_title (GsExtrasPage *self)
+{
+ guint i;
+ g_autofree gchar *titles = NULL;
+ g_autoptr(GPtrArray) title_array = NULL;
+
+ title_array = g_ptr_array_new ();
+ for (i = 0; i < self->array_search_data->len; i++) {
+ SearchData *search_data;
+
+ search_data = g_ptr_array_index (self->array_search_data, i);
+ g_ptr_array_add (title_array, search_data->title);
+ }
+ g_ptr_array_add (title_array, NULL);
+
+ titles = build_comma_separated_list ((gchar **) title_array->pdata);
+
+ switch (self->mode) {
+ case GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES:
+ /* TRANSLATORS: Application window title for fonts installation.
+ %s will be replaced by name of the script we're searching for. */
+ return g_strdup_printf (ngettext ("Available fonts for the %s script",
+ "Available fonts for the %s scripts",
+ self->array_search_data->len),
+ titles);
+ break;
+ default:
+ /* TRANSLATORS: Application window title for codec installation.
+ %s will be replaced by actual codec name(s) */
+ return g_strdup_printf (ngettext ("Available software for %s",
+ "Available software for %s",
+ self->array_search_data->len),
+ titles);
+ break;
+ }
+}
+
+static void
+gs_extras_page_update_ui_state (GsExtrasPage *self)
+{
+ GtkWidget *widget;
+ g_autofree gchar *title = NULL;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_EXTRAS)
+ return;
+
+ /* main spinner */
+ switch (self->state) {
+ case GS_EXTRAS_PAGE_STATE_LOADING:
+ gs_start_spinner (GTK_SPINNER (self->spinner));
+ break;
+ case GS_EXTRAS_PAGE_STATE_READY:
+ case GS_EXTRAS_PAGE_STATE_NO_RESULTS:
+ case GS_EXTRAS_PAGE_STATE_FAILED:
+ gs_stop_spinner (GTK_SPINNER (self->spinner));
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ /* headerbar title */
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
+ switch (self->state) {
+ case GS_EXTRAS_PAGE_STATE_LOADING:
+ case GS_EXTRAS_PAGE_STATE_READY:
+ title = build_title (self);
+ gtk_label_set_label (GTK_LABEL (widget), title);
+ break;
+ case GS_EXTRAS_PAGE_STATE_NO_RESULTS:
+ case GS_EXTRAS_PAGE_STATE_FAILED:
+ gtk_label_set_label (GTK_LABEL (widget), _("Unable to Find Requested Software"));
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ /* stack */
+ switch (self->state) {
+ case GS_EXTRAS_PAGE_STATE_LOADING:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "spinner");
+ break;
+ case GS_EXTRAS_PAGE_STATE_READY:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "results");
+ break;
+ case GS_EXTRAS_PAGE_STATE_NO_RESULTS:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "no-results");
+ break;
+ case GS_EXTRAS_PAGE_STATE_FAILED:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "failed");
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+gs_extras_page_set_state (GsExtrasPage *self,
+ GsExtrasPageState state)
+{
+ self->state = state;
+ gs_extras_page_update_ui_state (self);
+}
+
+static void
+app_row_button_clicked_cb (GsAppRow *app_row,
+ GsExtrasPage *self)
+{
+ GsApp *app = gs_app_row_get_app (app_row);
+
+ if (gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE &&
+ gs_app_get_url (app, AS_URL_KIND_MISSING) != NULL) {
+ gs_shell_show_uri (self->shell,
+ gs_app_get_url (app, AS_URL_KIND_MISSING));
+ } else if (gs_app_get_state (app) == AS_APP_STATE_AVAILABLE ||
+ gs_app_get_state (app) == AS_APP_STATE_AVAILABLE_LOCAL ||
+ gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE) {
+ gs_page_install_app (GS_PAGE (self), app, GS_SHELL_INTERACTION_FULL,
+ self->search_cancellable);
+ } else if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+ gs_page_remove_app (GS_PAGE (self), app, self->search_cancellable);
+ } else {
+ g_critical ("extras: app in unexpected state %u", gs_app_get_state (app));
+ }
+}
+
+static void
+gs_extras_page_add_app (GsExtrasPage *self, GsApp *app, GsAppList *list, SearchData *search_data)
+{
+ GtkWidget *app_row;
+ g_autoptr(GList) existing_apps = NULL;
+
+ /* Don't add same app twice */
+ existing_apps = gtk_container_get_children (GTK_CONTAINER (self->list_box_results));
+ for (GList *l = existing_apps; l != NULL; l = l->next) {
+ GsApp *existing_app;
+
+ existing_app = gs_app_row_get_app (GS_APP_ROW (l->data));
+ if (app == existing_app)
+ gtk_container_remove (GTK_CONTAINER (self->list_box_results),
+ GTK_WIDGET (l->data));
+ }
+
+ app_row = gs_app_row_new (app);
+ gs_app_row_set_colorful (GS_APP_ROW (app_row), TRUE);
+ gs_app_row_set_show_buttons (GS_APP_ROW (app_row), TRUE);
+
+ g_object_set_data_full (G_OBJECT (app_row), "missing-title", g_strdup (search_data->title), g_free);
+
+ g_signal_connect (app_row, "button-clicked",
+ G_CALLBACK (app_row_button_clicked_cb),
+ self);
+
+ gtk_container_add (GTK_CONTAINER (self->list_box_results), app_row);
+ gs_app_row_set_size_groups (GS_APP_ROW (app_row),
+ self->sizegroup_image,
+ self->sizegroup_name,
+ self->sizegroup_desc,
+ self->sizegroup_button);
+ gtk_widget_show (app_row);
+}
+
+static GsApp *
+create_missing_app (SearchData *search_data)
+{
+ GsExtrasPage *self = search_data->self;
+ GsApp *app;
+ GString *summary_missing;
+ g_autofree gchar *name = NULL;
+ g_autofree gchar *url = NULL;
+
+ app = gs_app_new ("missing-codec");
+
+ /* TRANSLATORS: This string is used for codecs that weren't found */
+ name = g_strdup_printf (_("%s not found"), search_data->title);
+ gs_app_set_name (app, GS_APP_QUALITY_HIGHEST, name);
+
+ /* TRANSLATORS: hyperlink title */
+ url = g_strdup_printf ("<a href=\"%s\">%s</a>", search_data->url_not_found, _("on the website"));
+
+ summary_missing = g_string_new ("");
+ switch (self->mode) {
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No applications are available that provide the file %s."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get missing applications "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No applications are available for %s support."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get missing applications "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("%s is not available."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get missing applications "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No applications are available for %s support."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get an application that can support this format "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No fonts are available for the %s script support."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get additional fonts "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No addon codecs are available for the %s format."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get a codec that can play this format "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No Plasma resources are available for %s support."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get additional Plasma resources "
+ "might be found %s."), search_data->title, url);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS:
+ /* TRANSLATORS: this is when we know about an application or
+ * addon, but it can't be listed for some reason */
+ g_string_append_printf (summary_missing, _("No printer drivers are available for %s."), search_data->title);
+ g_string_append (summary_missing, "\n");
+ /* TRANSLATORS: first %s is the codec name, and second %s is a
+ * hyperlink with the "on the website" text */
+ g_string_append_printf (summary_missing, _("Information about %s, as well as options "
+ "for how to get a driver that supports this printer "
+ "might be found %s."), search_data->title, url);
+
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ gs_app_set_summary_missing (app, g_string_free (summary_missing, FALSE));
+
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
+ gs_app_set_url (app, AS_URL_KIND_MISSING, search_data->url_not_found);
+
+ return app;
+}
+
+static gchar *
+build_no_results_label (GsExtrasPage *self)
+{
+ GsApp *app = NULL;
+ guint num;
+ g_autofree gchar *codec_titles = NULL;
+ g_autofree gchar *url = NULL;
+ g_autoptr(GList) list = NULL;
+ g_autoptr(GPtrArray) array = NULL;
+
+ list = gtk_container_get_children (GTK_CONTAINER (self->list_box_results));
+ num = g_list_length (list);
+
+ g_assert (num > 0);
+
+ array = g_ptr_array_new ();
+ for (GList *l = list; l != NULL; l = l->next) {
+ app = gs_app_row_get_app (GS_APP_ROW (l->data));
+ g_ptr_array_add (array,
+ g_object_get_data (G_OBJECT (l->data), "missing-title"));
+ }
+ g_ptr_array_add (array, NULL);
+
+ url = g_strdup_printf ("<a href=\"%s\">%s</a>",
+ gs_app_get_url (app, AS_URL_KIND_MISSING),
+ /* TRANSLATORS: hyperlink title */
+ _("this website"));
+
+ codec_titles = build_comma_separated_list ((gchar **) array->pdata);
+ /* TRANSLATORS: no codecs were found. First %s will be replaced by actual codec name(s), second %s is a link titled "this website" */
+ return g_strdup_printf (ngettext ("Unfortunately, the %s you were searching for could not be found. Please see %s for more information.",
+ "Unfortunately, the %s you were searching for could not be found. Please see %s for more information.",
+ num),
+ codec_titles,
+ url);
+}
+
+static void
+show_search_results (GsExtrasPage *self)
+{
+ GsApp *app;
+ guint n_children;
+ guint n_missing;
+ g_autoptr(GList) list = NULL;
+
+ list = gtk_container_get_children (GTK_CONTAINER (self->list_box_results));
+ n_children = g_list_length (list);
+
+ /* count the number of rows with missing codecs */
+ n_missing = 0;
+ for (GList *l = list; l != NULL; l = l->next) {
+ app = gs_app_row_get_app (GS_APP_ROW (l->data));
+ if (g_strcmp0 (gs_app_get_id (app), "missing-codec") == 0) {
+ n_missing++;
+ }
+ }
+
+ if (n_children == 0 || n_children == n_missing) {
+ g_autofree gchar *str = NULL;
+
+ /* no results */
+ g_debug ("extras: failed to find any results, %u", n_missing);
+ str = build_no_results_label (self);
+ gtk_label_set_label (GTK_LABEL (self->label_no_results), str);
+ gs_extras_page_set_state (self, GS_EXTRAS_PAGE_STATE_NO_RESULTS);
+ } else if (n_children == 1) {
+ /* switch directly to details view */
+ g_debug ("extras: found one result, showing in details view");
+ g_assert (list != NULL);
+ app = gs_app_row_get_app (GS_APP_ROW (list->data));
+ gs_shell_change_mode (self->shell, GS_SHELL_MODE_DETAILS, app, TRUE);
+ } else {
+ /* show what we got */
+ g_debug ("extras: got %u search results, showing", n_children);
+ gs_extras_page_set_state (self, GS_EXTRAS_PAGE_STATE_READY);
+ }
+}
+
+static void
+search_files_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ SearchData *search_data = (SearchData *) user_data;
+ GsExtrasPage *self = search_data->self;
+ g_autoptr(GsAppList) list = NULL;
+ guint i;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ g_autofree gchar *str = NULL;
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("extras: search files cancelled");
+ return;
+ }
+ g_warning ("failed to find any search results: %s", error->message);
+ str = g_strdup_printf ("%s: %s", _("Failed to find any search results"), error->message);
+ gtk_label_set_label (GTK_LABEL (self->label_failed), str);
+ gs_extras_page_set_state (self, GS_EXTRAS_PAGE_STATE_FAILED);
+ return;
+ }
+
+ /* add missing item */
+ if (gs_app_list_length (list) == 0) {
+ g_autoptr(GsApp) app = NULL;
+ g_debug ("extras: no search result for %s, showing as missing",
+ search_data->title);
+ app = create_missing_app (search_data);
+ gs_app_list_add (list, app);
+ }
+
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+
+ g_debug ("%s\n\n", gs_app_to_string (app));
+ gs_extras_page_add_app (self, app, list, search_data);
+ }
+
+ self->pending_search_cnt--;
+
+ /* have all searches finished? */
+ if (self->pending_search_cnt == 0)
+ show_search_results (self);
+}
+
+static void
+file_to_app_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ SearchData *search_data = (SearchData *) user_data;
+ GsExtrasPage *self = search_data->self;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("extras: search what provides cancelled");
+ return;
+ }
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED)) {
+ g_debug ("extras: no search result for %s, showing as missing", search_data->title);
+ app = create_missing_app (search_data);
+ } else {
+ g_autofree gchar *str = NULL;
+
+ g_warning ("failed to find any search results: %s", error->message);
+ str = g_strdup_printf ("%s: %s", _("Failed to find any search results"), error->message);
+ gtk_label_set_label (GTK_LABEL (self->label_failed), str);
+ gs_extras_page_set_state (self, GS_EXTRAS_PAGE_STATE_FAILED);
+ return;
+ }
+ } else {
+ app = g_object_ref (gs_app_list_index (list, 0));
+ }
+
+ g_debug ("%s\n\n", gs_app_to_string (app));
+ gs_extras_page_add_app (self, app, list, search_data);
+
+ self->pending_search_cnt--;
+
+ /* have all searches finished? */
+ if (self->pending_search_cnt == 0)
+ show_search_results (self);
+}
+
+static void
+get_search_what_provides_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ SearchData *search_data = (SearchData *) user_data;
+ GsExtrasPage *self = search_data->self;
+ g_autoptr(GsAppList) list = NULL;
+ guint i;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ g_autofree gchar *str = NULL;
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("extras: search what provides cancelled");
+ return;
+ }
+ g_warning ("failed to find any search results: %s", error->message);
+ str = g_strdup_printf ("%s: %s", _("Failed to find any search results"), error->message);
+ gtk_label_set_label (GTK_LABEL (self->label_failed), str);
+ gs_extras_page_set_state (self, GS_EXTRAS_PAGE_STATE_FAILED);
+ return;
+ }
+
+ /* add missing item */
+ if (gs_app_list_length (list) == 0) {
+ g_autoptr(GsApp) app = NULL;
+ g_debug ("extras: no search result for %s, showing as missing",
+ search_data->title);
+ app = create_missing_app (search_data);
+ gs_app_list_add (list, app);
+ }
+
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+
+ g_debug ("%s\n\n", gs_app_to_string (app));
+ gs_extras_page_add_app (self, app, list, search_data);
+ }
+
+ self->pending_search_cnt--;
+
+ /* have all searches finished? */
+ if (self->pending_search_cnt == 0)
+ show_search_results (self);
+}
+
+static void
+gs_extras_page_load (GsExtrasPage *self, GPtrArray *array_search_data)
+{
+ guint i;
+
+ /* cancel any pending searches */
+ g_cancellable_cancel (self->search_cancellable);
+ g_clear_object (&self->search_cancellable);
+ self->search_cancellable = g_cancellable_new ();
+
+ if (array_search_data != NULL) {
+ if (self->array_search_data != NULL)
+ g_ptr_array_unref (self->array_search_data);
+ self->array_search_data = g_ptr_array_ref (array_search_data);
+ }
+
+ self->pending_search_cnt = 0;
+
+ /* remove old entries */
+ gs_container_remove_all (GTK_CONTAINER (self->list_box_results));
+
+ /* set state as loading */
+ self->state = GS_EXTRAS_PAGE_STATE_LOADING;
+
+ /* start new searches, separate one for each codec */
+ for (i = 0; i < self->array_search_data->len; i++) {
+ GsPluginRefineFlags refine_flags;
+ SearchData *search_data;
+
+ refine_flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
+ GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES;
+
+ search_data = g_ptr_array_index (self->array_search_data, i);
+ if (search_data->search_filename != NULL) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH_FILES,
+ "search", search_data->search_filename,
+ "refine-flags", refine_flags,
+ NULL);
+ g_debug ("searching filename: '%s'", search_data->search_filename);
+ gs_plugin_loader_job_process_async (self->plugin_loader,
+ plugin_job,
+ self->search_cancellable,
+ search_files_cb,
+ search_data);
+ } else if (search_data->package_filename != NULL) {
+ g_autoptr (GFile) file = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ file = g_file_new_for_path (search_data->package_filename);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
+ "file", file,
+ "refine-flags", refine_flags,
+ NULL);
+ g_debug ("resolving filename to app: '%s'", search_data->package_filename);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->search_cancellable,
+ file_to_app_cb,
+ search_data);
+ } else {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_debug ("searching what provides: '%s'", search_data->search);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH_PROVIDES,
+ "search", search_data->search,
+ "refine-flags", refine_flags,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->search_cancellable,
+ get_search_what_provides_cb,
+ search_data);
+ }
+ self->pending_search_cnt++;
+ }
+}
+
+static void
+gs_extras_page_reload (GsPage *page)
+{
+ GsExtrasPage *self = GS_EXTRAS_PAGE (page);
+ if (self->array_search_data != NULL)
+ gs_extras_page_load (self, NULL);
+}
+
+static void
+gs_extras_page_search_package_files (GsExtrasPage *self, gchar **files)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; files[i] != NULL; i++) {
+ SearchData *search_data;
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup (files[i]);
+ search_data->package_filename = g_strdup (files[i]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_DEFAULT);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static void
+gs_extras_page_search_provide_files (GsExtrasPage *self, gchar **files)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; files[i] != NULL; i++) {
+ SearchData *search_data;
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup (files[i]);
+ search_data->search_filename = g_strdup (files[i]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_DEFAULT);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static void
+gs_extras_page_search_package_names (GsExtrasPage *self, gchar **package_names)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; package_names[i] != NULL; i++) {
+ SearchData *search_data;
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup (package_names[i]);
+ search_data->search = g_strdup (package_names[i]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_DEFAULT);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static void
+gs_extras_page_search_mime_types (GsExtrasPage *self, gchar **mime_types)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; mime_types[i] != NULL; i++) {
+ SearchData *search_data;
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup_printf (_("%s file format"), mime_types[i]);
+ search_data->search = g_strdup (mime_types[i]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_MIME);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static gchar *
+font_tag_to_lang (const gchar *tag)
+{
+ if (g_str_has_prefix (tag, ":lang="))
+ return g_strdup (tag + 6);
+
+ return NULL;
+}
+
+static gchar *
+gs_extras_page_font_tag_to_localised_name (GsExtrasPage *self, const gchar *tag)
+{
+ gchar *name;
+ g_autofree gchar *lang = NULL;
+ g_autofree gchar *language = NULL;
+
+ /* use fontconfig to get the language code */
+ lang = font_tag_to_lang (tag);
+ if (lang == NULL) {
+ g_warning ("Could not parse language tag '%s'", tag);
+ return NULL;
+ }
+
+ /* convert to localisable name */
+ language = gs_language_iso639_to_language (self->language, lang);
+ if (language == NULL) {
+ g_warning ("Could not match language code '%s' to an ISO639 language", lang);
+ return NULL;
+ }
+
+ /* get translation, or return untranslated string */
+ name = g_strdup (dgettext("iso_639", language));
+ if (name == NULL)
+ name = g_strdup (language);
+
+ return name;
+}
+
+static void
+gs_extras_page_search_fontconfig_resources (GsExtrasPage *self, gchar **resources)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; resources[i] != NULL; i++) {
+ SearchData *search_data;
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = gs_extras_page_font_tag_to_localised_name (self, resources[i]);
+ search_data->search = g_strdup (resources[i]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_FONT);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static void
+gs_extras_page_search_gstreamer_resources (GsExtrasPage *self, gchar **resources)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; resources[i] != NULL; i++) {
+ SearchData *search_data;
+ g_auto(GStrv) parts = NULL;
+
+ parts = g_strsplit (resources[i], "|", 2);
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup (parts[0]);
+ search_data->search = g_strdup (parts[1]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_CODEC);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static void
+gs_extras_page_search_plasma_resources (GsExtrasPage *self, gchar **resources)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i;
+
+ for (i = 0; resources[i] != NULL; i++) {
+ SearchData *search_data;
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup (resources[i]);
+ search_data->search = g_strdup (resources[i]);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_DEFAULT);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+static void
+gs_extras_page_search_printer_drivers (GsExtrasPage *self, gchar **device_ids)
+{
+ g_autoptr(GPtrArray) array_search_data = g_ptr_array_new_with_free_func ((GDestroyNotify) search_data_free);
+ guint i, j;
+ guint len;
+
+ len = g_strv_length (device_ids);
+ if (len > 1)
+ /* hardcode for now as we only support one at a time */
+ len = 1;
+
+ /* make a list of provides tags */
+ for (i = 0; i < len; i++) {
+ SearchData *search_data;
+ gchar *p;
+ guint n_fields;
+ g_autofree gchar *tag = NULL;
+ g_autofree gchar *mfg = NULL;
+ g_autofree gchar *mdl = NULL;
+ g_auto(GStrv) fields = NULL;
+
+ fields = g_strsplit (device_ids[i], ";", 0);
+ n_fields = g_strv_length (fields);
+ mfg = mdl = NULL;
+ for (j = 0; j < n_fields && (!mfg || !mdl); j++) {
+ if (g_str_has_prefix (fields[j], "MFG:"))
+ mfg = g_strdup (fields[j] + 4);
+ else if (g_str_has_prefix (fields[j], "MDL:"))
+ mdl = g_strdup (fields[j] + 4);
+ }
+
+ if (!mfg || !mdl) {
+ g_warning("invalid line '%s', missing field",
+ device_ids[i]);
+ continue;
+ }
+
+ tag = g_strdup_printf ("%s;%s;", mfg, mdl);
+
+ /* Replace spaces with underscores */
+ for (p = tag; *p != '\0'; p++)
+ if (*p == ' ')
+ *p = '_';
+
+ search_data = g_slice_new0 (SearchData);
+ search_data->title = g_strdup_printf ("%s %s", mfg, mdl);
+ search_data->search = g_ascii_strdown (tag, -1);
+ search_data->url_not_found = gs_vendor_get_not_found_url (self->vendor, GS_VENDOR_URL_TYPE_HARDWARE);
+ search_data->self = g_object_ref (self);
+ g_ptr_array_add (array_search_data, search_data);
+ }
+
+ gs_extras_page_load (self, array_search_data);
+}
+
+void
+gs_extras_page_search (GsExtrasPage *self,
+ const gchar *mode_str,
+ gchar **resources)
+{
+ self->mode = gs_extras_page_mode_from_string (mode_str);
+ switch (self->mode) {
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES:
+ gs_extras_page_search_package_files (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES:
+ gs_extras_page_search_provide_files (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES:
+ gs_extras_page_search_package_names (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES:
+ gs_extras_page_search_mime_types (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES:
+ gs_extras_page_search_fontconfig_resources (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES:
+ gs_extras_page_search_gstreamer_resources (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES:
+ gs_extras_page_search_plasma_resources (self, resources);
+ break;
+ case GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS:
+ gs_extras_page_search_printer_drivers (self, resources);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+gs_extras_page_switch_to (GsPage *page,
+ gboolean scroll_up)
+{
+ GsExtrasPage *self = GS_EXTRAS_PAGE (page);
+ GtkWidget *widget;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_EXTRAS) {
+ g_warning ("Called switch_to(codecs) when in mode %s",
+ gs_shell_get_mode_string (self->shell));
+ return;
+ }
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
+ gtk_widget_show (widget);
+
+ if (scroll_up) {
+ GtkAdjustment *adj;
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+ }
+
+ gs_extras_page_update_ui_state (self);
+}
+
+static void
+row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ GsExtrasPage *self)
+{
+ GsApp *app;
+
+ app = gs_app_row_get_app (GS_APP_ROW (row));
+
+ if (gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE &&
+ gs_app_get_url (app, AS_URL_KIND_MISSING) != NULL) {
+ gs_shell_show_uri (self->shell,
+ gs_app_get_url (app, AS_URL_KIND_MISSING));
+ } else {
+ gs_shell_show_app (self->shell, app);
+ }
+}
+
+static gchar *
+get_app_sort_key (GsApp *app)
+{
+ GString *key = NULL;
+ g_autofree gchar *sort_name = NULL;
+
+ key = g_string_sized_new (64);
+
+ /* sort missing applications as last */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_UNAVAILABLE:
+ g_string_append (key, "9:");
+ break;
+ default:
+ g_string_append (key, "1:");
+ break;
+ }
+
+ /* finally, sort by short name */
+ if (gs_app_get_name (app) != NULL) {
+ sort_name = gs_utils_sort_key (gs_app_get_name (app));
+ g_string_append (key, sort_name);
+ }
+
+ return g_string_free (key, FALSE);
+}
+
+static gint
+list_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GsApp *a1 = gs_app_row_get_app (GS_APP_ROW (a));
+ GsApp *a2 = gs_app_row_get_app (GS_APP_ROW (b));
+ g_autofree gchar *key1 = get_app_sort_key (a1);
+ g_autofree gchar *key2 = get_app_sort_key (a2);
+
+ /* compare the keys according to the algorithm above */
+ return g_strcmp0 (key1, key2);
+}
+
+static void
+list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header;
+
+ /* first entry */
+ header = gtk_list_box_row_get_header (row);
+ if (before == NULL) {
+ gtk_list_box_row_set_header (row, NULL);
+ return;
+ }
+
+ /* already set */
+ if (header != NULL)
+ return;
+
+ /* set new */
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static gboolean
+gs_extras_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsExtrasPage *self = GS_EXTRAS_PAGE (page);
+
+ g_return_val_if_fail (GS_IS_EXTRAS_PAGE (self), TRUE);
+
+ self->shell = shell;
+
+ self->plugin_loader = g_object_ref (plugin_loader);
+ self->builder = g_object_ref (builder);
+
+ g_signal_connect (self->list_box_results, "row-activated",
+ G_CALLBACK (row_activated_cb), self);
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->list_box_results),
+ list_header_func,
+ self, NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (self->list_box_results),
+ list_sort_func,
+ self, NULL);
+ return TRUE;
+}
+
+static void
+gs_extras_page_dispose (GObject *object)
+{
+ GsExtrasPage *self = GS_EXTRAS_PAGE (object);
+
+ g_cancellable_cancel (self->search_cancellable);
+ g_clear_object (&self->search_cancellable);
+
+ g_clear_object (&self->sizegroup_image);
+ g_clear_object (&self->sizegroup_name);
+ g_clear_object (&self->sizegroup_desc);
+ g_clear_object (&self->sizegroup_button);
+ g_clear_object (&self->language);
+ g_clear_object (&self->vendor);
+ g_clear_object (&self->builder);
+ g_clear_object (&self->plugin_loader);
+
+ g_clear_pointer (&self->array_search_data, g_ptr_array_unref);
+
+ G_OBJECT_CLASS (gs_extras_page_parent_class)->dispose (object);
+}
+
+static void
+gs_extras_page_init (GsExtrasPage *self)
+{
+ g_autoptr(GError) error = NULL;
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ self->state = GS_EXTRAS_PAGE_STATE_LOADING;
+ self->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_button = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->vendor = gs_vendor_new ();
+
+ /* map ISO639 to language names */
+ self->language = gs_language_new ();
+ gs_language_populate (self->language, &error);
+ if (error != NULL)
+ g_error ("Failed to map ISO639 to language names: %s", error->message);
+}
+
+static void
+gs_extras_page_class_init (GsExtrasPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_extras_page_dispose;
+ page_class->switch_to = gs_extras_page_switch_to;
+ page_class->reload = gs_extras_page_reload;
+ page_class->setup = gs_extras_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-extras-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsExtrasPage, label_failed);
+ gtk_widget_class_bind_template_child (widget_class, GsExtrasPage, label_no_results);
+ gtk_widget_class_bind_template_child (widget_class, GsExtrasPage, list_box_results);
+ gtk_widget_class_bind_template_child (widget_class, GsExtrasPage, scrolledwindow);
+ gtk_widget_class_bind_template_child (widget_class, GsExtrasPage, spinner);
+ gtk_widget_class_bind_template_child (widget_class, GsExtrasPage, stack);
+}
+
+GsExtrasPage *
+gs_extras_page_new (void)
+{
+ GsExtrasPage *self;
+ self = g_object_new (GS_TYPE_EXTRAS_PAGE, NULL);
+ return GS_EXTRAS_PAGE (self);
+}
diff --git a/src/gs-extras-page.h b/src/gs-extras-page.h
new file mode 100644
index 0000000..e4dc001
--- /dev/null
+++ b/src/gs-extras-page.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_EXTRAS_PAGE (gs_extras_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsExtrasPage, gs_extras_page, GS, EXTRAS_PAGE, GsPage)
+
+typedef enum {
+ GS_EXTRAS_PAGE_MODE_UNKNOWN,
+ GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_FILES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_PROVIDE_FILES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_PACKAGE_NAMES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_MIME_TYPES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_FONTCONFIG_RESOURCES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_GSTREAMER_RESOURCES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_PLASMA_RESOURCES,
+ GS_EXTRAS_PAGE_MODE_INSTALL_PRINTER_DRIVERS,
+ GS_EXTRAS_PAGE_MODE_LAST
+} GsExtrasPageMode;
+
+const gchar *gs_extras_page_mode_to_string (GsExtrasPageMode mode);
+GsExtrasPage *gs_extras_page_new (void);
+void gs_extras_page_search (GsExtrasPage *self,
+ const gchar *mode,
+ gchar **resources);
+
+G_END_DECLS
diff --git a/src/gs-extras-page.ui b/src/gs-extras-page.ui
new file mode 100644
index 0000000..7d61be8
--- /dev/null
+++ b/src/gs-extras-page.ui
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsExtrasPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="codecs-accessible">
+ <property name="accessible-name" translatable="yes">Codecs page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="box_spinner">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <property name="preferred-width">860</property>
+ <child>
+ <object class="GtkBox" id="box_results">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkListBox" id="list_box_results">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparator" id="separator_results">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">results</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_no_results">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="image_no_results">
+ <property name="visible">True</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">face-sad-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_no_results">
+ <property name="visible">True</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">60</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">no-results</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_failed">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_failed">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">action-unavailable-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_failed">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">failed</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-feature-tile.c b/src/gs-feature-tile.c
new file mode 100644
index 0000000..9cc5f7c
--- /dev/null
+++ b/src/gs-feature-tile.c
@@ -0,0 +1,138 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "gs-feature-tile.h"
+#include "gs-common.h"
+#include "gs-css.h"
+
+struct _GsFeatureTile
+{
+ GsAppTile parent_instance;
+ GtkWidget *stack;
+ GtkWidget *title;
+ GtkWidget *subtitle;
+ const gchar *markup_cache; /* (unowned) (nullable) */
+ GtkCssProvider *tile_provider; /* (owned) (nullable) */
+ GtkCssProvider *title_provider; /* (owned) (nullable) */
+ GtkCssProvider *subtitle_provider; /* (owned) (nullable) */
+};
+
+G_DEFINE_TYPE (GsFeatureTile, gs_feature_tile, GS_TYPE_APP_TILE)
+
+static void
+gs_feature_tile_dispose (GObject *object)
+{
+ GsFeatureTile *tile = GS_FEATURE_TILE (object);
+
+ g_clear_object (&tile->tile_provider);
+ g_clear_object (&tile->title_provider);
+ g_clear_object (&tile->subtitle_provider);
+
+ G_OBJECT_CLASS (gs_feature_tile_parent_class)->dispose (object);
+}
+
+static void
+gs_feature_tile_refresh (GsAppTile *self)
+{
+ GsFeatureTile *tile = GS_FEATURE_TILE (self);
+ GsApp *app = gs_app_tile_get_app (self);
+ AtkObject *accessible;
+ const gchar *markup;
+ g_autofree gchar *name = NULL;
+
+ if (app == NULL)
+ return;
+
+ gtk_stack_set_visible_child_name (GTK_STACK (tile->stack), "content");
+
+ /* update text */
+ gtk_label_set_label (GTK_LABEL (tile->title), gs_app_get_name (app));
+ gtk_label_set_label (GTK_LABEL (tile->subtitle), gs_app_get_summary (app));
+
+ /* perhaps set custom css; cache it so that images don’t get reloaded
+ * unnecessarily */
+ markup = gs_app_get_metadata_item (app, "GnomeSoftware::FeatureTile-css");
+ if (tile->markup_cache != markup) {
+ g_autoptr(GsCss) css = gs_css_new ();
+ if (markup != NULL)
+ gs_css_parse (css, markup, NULL);
+ gs_utils_widget_set_css (GTK_WIDGET (tile), &tile->tile_provider, "feature-tile",
+ gs_css_get_markup_for_id (css, "tile"));
+ gs_utils_widget_set_css (tile->title, &tile->title_provider, "feature-tile-name",
+ gs_css_get_markup_for_id (css, "name"));
+ gs_utils_widget_set_css (tile->subtitle, &tile->subtitle_provider, "feature-tile-subtitle",
+ gs_css_get_markup_for_id (css, "summary"));
+ tile->markup_cache = markup;
+ }
+
+ accessible = gtk_widget_get_accessible (GTK_WIDGET (tile));
+
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_REMOVING:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ name = g_strdup_printf ("%s (%s)",
+ gs_app_get_name (app),
+ _("Installed"));
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_INSTALLING:
+ default:
+ name = g_strdup (gs_app_get_name (app));
+ break;
+ }
+
+ if (GTK_IS_ACCESSIBLE (accessible) && name != NULL) {
+ atk_object_set_name (accessible, name);
+ atk_object_set_description (accessible, gs_app_get_summary (app));
+ }
+}
+
+static void
+gs_feature_tile_init (GsFeatureTile *tile)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (tile), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (tile));
+}
+
+static void
+gs_feature_tile_class_init (GsFeatureTileClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GsAppTileClass *app_tile_class = GS_APP_TILE_CLASS (klass);
+
+ object_class->dispose = gs_feature_tile_dispose;
+
+ app_tile_class->refresh = gs_feature_tile_refresh;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-feature-tile.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsFeatureTile, stack);
+ gtk_widget_class_bind_template_child (widget_class, GsFeatureTile, title);
+ gtk_widget_class_bind_template_child (widget_class, GsFeatureTile, subtitle);
+}
+
+GtkWidget *
+gs_feature_tile_new (GsApp *app)
+{
+ GsFeatureTile *tile;
+ tile = g_object_new (GS_TYPE_FEATURE_TILE,
+ "vexpand", FALSE,
+ NULL);
+ if (app != NULL)
+ gs_app_tile_set_app (GS_APP_TILE (tile), app);
+ return GTK_WIDGET (tile);
+}
diff --git a/src/gs-feature-tile.h b/src/gs-feature-tile.h
new file mode 100644
index 0000000..e9b65ea
--- /dev/null
+++ b/src/gs-feature-tile.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-app-tile.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_FEATURE_TILE (gs_feature_tile_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsFeatureTile, gs_feature_tile, GS, FEATURE_TILE, GsAppTile)
+
+GtkWidget *gs_feature_tile_new (GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-feature-tile.ui b/src/gs-feature-tile.ui
new file mode 100644
index 0000000..fae458e
--- /dev/null
+++ b/src/gs-feature-tile.ui
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsFeatureTile" parent="GsAppTile">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <style>
+ <class name="featured-tile"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage" id="waiting">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="name">waiting</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="margin">50</property>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
+ <property name="vexpand">True</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="title-1"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="caption"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">content</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-first-run-dialog.c b/src/gs-first-run-dialog.c
new file mode 100644
index 0000000..5603479
--- /dev/null
+++ b/src/gs-first-run-dialog.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+
+#include "gs-first-run-dialog.h"
+
+struct _GsFirstRunDialog
+{
+ GtkDialog parent_instance;
+
+ GtkWidget *button;
+};
+
+G_DEFINE_TYPE (GsFirstRunDialog, gs_first_run_dialog, GTK_TYPE_DIALOG)
+
+static void
+button_clicked_cb (GtkWidget *widget, GsFirstRunDialog *dialog)
+{
+ gtk_window_close (GTK_WINDOW (dialog));
+}
+
+static void
+gs_first_run_dialog_init (GsFirstRunDialog *dialog)
+{
+ GtkWidget *button_label;
+
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+
+ button_label = gtk_bin_get_child (GTK_BIN (dialog->button));
+ gtk_widget_set_margin_start (button_label, 16);
+ gtk_widget_set_margin_end (button_label, 16);
+
+ g_signal_connect (dialog->button, "clicked", G_CALLBACK (button_clicked_cb), dialog);
+}
+
+static void
+gs_first_run_dialog_class_init (GsFirstRunDialogClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-first-run-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsFirstRunDialog, button);
+}
+
+GtkWidget *
+gs_first_run_dialog_new (void)
+{
+ return GTK_WIDGET (g_object_new (GS_TYPE_FIRST_RUN_DIALOG,
+ "use-header-bar", TRUE,
+ NULL));
+}
diff --git a/src/gs-first-run-dialog.h b/src/gs-first-run-dialog.h
new file mode 100644
index 0000000..0419584
--- /dev/null
+++ b/src/gs-first-run-dialog.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_FIRST_RUN_DIALOG (gs_first_run_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsFirstRunDialog, gs_first_run_dialog, GS, FIRST_RUN_DIALOG, GtkDialog)
+
+GtkWidget *gs_first_run_dialog_new (void);
+
+G_END_DECLS
diff --git a/src/gs-first-run-dialog.ui b/src/gs-first-run-dialog.ui
new file mode 100644
index 0000000..3861bd8
--- /dev/null
+++ b/src/gs-first-run-dialog.ui
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+ <requires lib="gtk+" version="3.12"/>
+ <template class="GsFirstRunDialog" parent="GtkDialog">
+ <property name="title" translatable="yes">Welcome</property>
+ <property name="modal">True</property>
+ <property name="resizable">False</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <property name="title" translatable="yes">Welcome</property>
+ <property name="show_close_button">False</property>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="margin_start">55</property>
+ <property name="margin_end">55</property>
+ <property name="margin_top">44</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box_empty">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">org.gnome.Software</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Welcome to Software</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.7"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Software lets you install all the software you need, all from one place. See our recommendations, browse the categories, or search for the applications you want.</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">48</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button">
+ <property name="label" translatable="yes">_Let’s Go Shopping</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="margin_top">23</property>
+ <property name="margin_bottom">26</property>
+ <property name="use_underline">True</property>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-fixed-size-bin.c b/src/gs-fixed-size-bin.c
new file mode 100644
index 0000000..7d326ee
--- /dev/null
+++ b/src/gs-fixed-size-bin.c
@@ -0,0 +1,237 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Rafał Lużyński <digitalfreak@lingonborough.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-fixed-size-bin.h"
+
+struct _GsFixedSizeBin {
+ GtkBin parent;
+ gint preferred_width;
+ gint preferred_height;
+ gint min_width;
+ gint min_height;
+};
+
+G_DEFINE_TYPE (GsFixedSizeBin, gs_fixed_size_bin, GTK_TYPE_BIN)
+
+enum {
+ PROP_0,
+ PROP_PREFERRED_WIDTH,
+ PROP_PREFERRED_HEIGHT
+};
+
+static void
+gs_fixed_size_bin_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (widget);
+
+ if (bin->preferred_width >= 0 &&
+ bin->preferred_width >= bin->min_width &&
+ allocation->width > bin->preferred_width) {
+ /* Center the contents */
+ allocation->x += (allocation->width - bin->preferred_width) / 2;
+ allocation->width = bin->preferred_width;
+ }
+ if (bin->preferred_height >= 0 &&
+ bin->preferred_height >= bin->min_height &&
+ allocation->height > bin->preferred_height) {
+ /* Align to the top */
+ allocation->height = bin->preferred_height;
+ }
+
+ GTK_WIDGET_CLASS (gs_fixed_size_bin_parent_class)->size_allocate (widget, allocation);
+}
+
+static void
+gs_fixed_size_bin_get_preferred_width (GtkWidget *widget,
+ gint *min, gint *nat)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (widget);
+ gint m, n;
+
+ GTK_WIDGET_CLASS (gs_fixed_size_bin_parent_class)->get_preferred_width (widget, &m, &n);
+
+ bin->min_width = m;
+ if (bin->preferred_width >= 0 && n > bin->preferred_width)
+ n = MAX (m, bin->preferred_width);
+ if (min)
+ *min = m;
+ if (nat)
+ *nat = n;
+}
+
+static void
+gs_fixed_size_bin_get_preferred_height (GtkWidget *widget,
+ gint *min, gint *nat)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (widget);
+ gint m, n;
+
+ GTK_WIDGET_CLASS (gs_fixed_size_bin_parent_class)->get_preferred_height (widget, &m, &n);
+
+ bin->min_height = m;
+ if (bin->preferred_height >= 0 && n > bin->preferred_height)
+ n = MAX (m, bin->preferred_height);
+ if (min)
+ *min = m;
+ if (nat)
+ *nat = n;
+}
+
+static void
+gs_fixed_size_bin_get_preferred_width_for_height (GtkWidget *widget,
+ gint for_height,
+ gint *min, gint *nat)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (widget);
+ gint m, n;
+
+ if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH) {
+ GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget,
+ min, nat);
+ return;
+ }
+
+ if (bin->preferred_height >= 0 &&
+ for_height > bin->preferred_height) {
+ /* The height will be limited */
+ for_height = MAX (bin->min_height, bin->preferred_height);
+ }
+
+ GTK_WIDGET_CLASS (gs_fixed_size_bin_parent_class)->get_preferred_width_for_height (
+ widget, for_height, &m, &n);
+
+ bin->min_width = m;
+ if (bin->preferred_width >= 0 && n > bin->preferred_width)
+ n = MAX (m, bin->preferred_width);
+ if (min)
+ *min = m;
+ if (nat)
+ *nat = n;
+}
+
+static void
+gs_fixed_size_bin_get_preferred_height_for_width (GtkWidget *widget,
+ gint for_width,
+ gint *min, gint *nat)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (widget);
+ gint m, n;
+
+ if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT) {
+ GTK_WIDGET_GET_CLASS (widget)->get_preferred_height (widget,
+ min, nat);
+ return;
+ }
+
+ if (bin->preferred_width >= 0 &&
+ for_width > bin->preferred_width) {
+ /* The width will be limited */
+ for_width = MAX (bin->min_width, bin->preferred_width);
+ }
+
+ GTK_WIDGET_CLASS (gs_fixed_size_bin_parent_class)->get_preferred_height_for_width (
+ widget, for_width, &m, &n);
+
+ bin->min_height = m;
+ if (bin->preferred_height >= 0 && n > bin->preferred_height)
+ n = MAX (m, bin->preferred_height);
+ if (min)
+ *min = m;
+ if (nat)
+ *nat = n;
+}
+
+static void
+gs_fixed_size_bin_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (object);
+
+ switch (prop_id) {
+ case PROP_PREFERRED_WIDTH:
+ g_value_set_int (value, bin->preferred_width);
+ break;
+ case PROP_PREFERRED_HEIGHT:
+ g_value_set_int (value, bin->preferred_height);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_fixed_size_bin_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsFixedSizeBin *bin = GS_FIXED_SIZE_BIN (object);
+
+ switch (prop_id) {
+ case PROP_PREFERRED_WIDTH:
+ bin->preferred_width = g_value_get_int (value);
+ gtk_widget_queue_resize (GTK_WIDGET (bin));
+ break;
+ case PROP_PREFERRED_HEIGHT:
+ bin->preferred_height = g_value_get_int (value);
+ gtk_widget_queue_resize (GTK_WIDGET (bin));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_fixed_size_bin_init (GsFixedSizeBin *bin)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (bin), FALSE);
+ bin->preferred_width = -1;
+ bin->preferred_height = -1;
+}
+
+static void
+gs_fixed_size_bin_class_init (GsFixedSizeBinClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
+ object_class->get_property = gs_fixed_size_bin_get_property;
+ object_class->set_property = gs_fixed_size_bin_set_property;
+
+ widget_class->size_allocate = gs_fixed_size_bin_size_allocate;
+ widget_class->get_preferred_width = gs_fixed_size_bin_get_preferred_width;
+ widget_class->get_preferred_height = gs_fixed_size_bin_get_preferred_height;
+ widget_class->get_preferred_width_for_height = gs_fixed_size_bin_get_preferred_width_for_height;
+ widget_class->get_preferred_height_for_width = gs_fixed_size_bin_get_preferred_height_for_width;
+
+ g_object_class_install_property (object_class, PROP_PREFERRED_WIDTH,
+ g_param_spec_int ("preferred-width",
+ "Preferred width",
+ "The width of this widget unless its parent is smaller or its child requires more",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_PREFERRED_HEIGHT,
+ g_param_spec_int ("preferred-height",
+ "Preferred height",
+ "The height of this widget unless its parent is smaller or its child requires more",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE));
+}
+
+GtkWidget *
+gs_fixed_size_bin_new (void)
+{
+ return g_object_new (GS_TYPE_FIXED_SIZE_BIN, NULL);
+}
diff --git a/src/gs-fixed-size-bin.h b/src/gs-fixed-size-bin.h
new file mode 100644
index 0000000..e28edc9
--- /dev/null
+++ b/src/gs-fixed-size-bin.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Rafał Lużyński <digitalfreak@lingonborough.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_FIXED_SIZE_BIN (gs_fixed_size_bin_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsFixedSizeBin, gs_fixed_size_bin, GS, FIXED_SIZE_BIN, GtkBin)
+
+GtkWidget *gs_fixed_size_bin_new (void);
+
+G_END_DECLS
diff --git a/src/gs-folders.c b/src/gs-folders.c
new file mode 100644
index 0000000..295ec39
--- /dev/null
+++ b/src/gs-folders.c
@@ -0,0 +1,610 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+
+#include "gs-folders.h"
+
+#define APP_FOLDER_SCHEMA "org.gnome.desktop.app-folders"
+#define APP_FOLDER_CHILD_SCHEMA "org.gnome.desktop.app-folders.folder"
+
+/* We are loading folders from a settings with type
+ * a{sas}, which maps folder ids to list of app ids.
+ *
+ * For convenience, we unfold this variant into GsFolder
+ * structs and two hash tables, one with folder ids
+ * as keys, and one with app ids.
+ */
+
+typedef struct
+{
+ gchar *id;
+ gchar *name;
+ gchar *translated;
+ gboolean translate;
+ GHashTable *apps;
+ GHashTable *categories;
+ GHashTable *excluded_apps;
+} GsFolder;
+
+struct _GsFolders
+{
+ GObject parent_instance;
+
+ GSettings *settings;
+ GHashTable *folders;
+ GHashTable *apps;
+ GHashTable *categories;
+};
+
+G_DEFINE_TYPE (GsFolders, gs_folders, G_TYPE_OBJECT)
+
+#if 0
+static void
+dump_set (GHashTable *set)
+{
+ GHashTableIter iter;
+ const gchar *key;
+
+ g_hash_table_iter_init (&iter, set);
+ while (g_hash_table_iter_next (&iter, (gpointer *)&key, NULL)) {
+ g_print ("\t\t%s\n", key);
+ }
+}
+
+static void
+dump_map (GHashTable *map)
+{
+ GHashTableIter iter;
+ const gchar *key;
+ GsFolder *folder;
+
+ g_hash_table_iter_init (&iter, map);
+ while (g_hash_table_iter_next (&iter, (gpointer *)&key, (gpointer *)&folder)) {
+ g_print ("\t%s -> %s\n", key, folder->id);
+ }
+}
+
+static void
+dump (GsFolders *folders)
+{
+ GHashTableIter iter;
+ GsFolder *folder;
+
+ g_hash_table_iter_init (&iter, folders->folders);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&folder)) {
+ g_print ("folder %s\n", folder->id);
+ g_print ("\tname %s\n", folder->name);
+ g_print ("\ttranslate %d\n", folder->translate);
+ if (g_hash_table_size (folder->apps) > 0) {
+ g_print ("\tapps\n");
+ dump_set (folder->apps);
+ }
+ if (g_hash_table_size (folder->categories) > 0) {
+ g_print ("\tcategories\n");
+ dump_set (folder->categories);
+ }
+ if (g_hash_table_size (folder->excluded_apps) > 0) {
+ g_print ("\texcluded\n");
+ dump_set (folder->excluded_apps);
+ }
+ }
+
+ g_print ("app mapping\n");
+ dump_map (folders->apps);
+ g_print ("category mapping\n");
+ dump_map (folders->categories);
+}
+#endif
+
+static gchar *
+lookup_folder_name (const gchar *id)
+{
+ gchar *name = NULL;
+ g_autofree gchar *file = NULL;
+ g_autoptr(GKeyFile) key_file = NULL;
+
+ file = g_build_filename ("desktop-directories", id, NULL);
+ key_file = g_key_file_new ();
+ if (g_key_file_load_from_data_dirs (key_file, file, NULL, G_KEY_FILE_NONE, NULL)) {
+ name = g_key_file_get_locale_string (key_file, "Desktop Entry", "Name", NULL, NULL);
+ }
+ return name;
+}
+
+static GsFolder *
+gs_folder_new (const gchar *id, const gchar *name, gboolean translate)
+{
+ GsFolder *folder;
+
+ folder = g_new0 (GsFolder, 1);
+ folder->id = g_strdup (id);
+ folder->name = g_strdup (name);
+ folder->translate = translate;
+ if (translate) {
+ folder->translated = lookup_folder_name (name);
+ }
+ folder->apps = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ folder->categories = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ folder->excluded_apps = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+ return folder;
+}
+
+static void
+gs_folder_free (GsFolder *folder)
+{
+ g_free (folder->id);
+ g_free (folder->name);
+ g_free (folder->translated);
+ g_hash_table_destroy (folder->apps);
+ g_hash_table_destroy (folder->categories);
+ g_hash_table_destroy (folder->excluded_apps);
+ g_free (folder);
+}
+
+static void
+load (GsFolders *folders)
+{
+ GsFolder *folder;
+ guint i, j;
+ gboolean translate;
+ GHashTableIter iter;
+ gchar *app;
+ gchar *category;
+ g_autofree gchar *path = NULL;
+ g_auto(GStrv) ids = NULL;
+
+ folders->folders = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)gs_folder_free);
+ folders->apps = g_hash_table_new (g_str_hash, g_str_equal);
+ folders->categories = g_hash_table_new (g_str_hash, g_str_equal);
+
+ ids = g_settings_get_strv (folders->settings, "folder-children");
+ g_object_get (folders->settings, "path", &path, NULL);
+ for (i = 0; ids[i]; i++) {
+ g_auto(GStrv) apps = NULL;
+ g_auto(GStrv) categories = NULL;
+ g_autofree gchar *child_path = NULL;
+ g_auto(GStrv) excluded_apps = NULL;
+ g_autofree gchar *name = NULL;
+ g_autoptr(GSettings) settings = NULL;
+
+ child_path = g_strconcat (path, "folders/", ids[i], "/", NULL);
+ settings = g_settings_new_with_path (APP_FOLDER_CHILD_SCHEMA, child_path);
+ if (settings == NULL) {
+ g_warning ("ignoring folder child %s as invalid", ids[i]);
+ continue;
+ }
+ name = g_settings_get_string (settings, "name");
+ translate = g_settings_get_boolean (settings, "translate");
+ folder = gs_folder_new (ids[i], name, translate);
+
+ excluded_apps = g_settings_get_strv (settings, "excluded-apps");
+ for (j = 0; excluded_apps[j]; j++) {
+ g_hash_table_add (folder->excluded_apps, g_strdup (excluded_apps[j]));
+ }
+
+ apps = g_settings_get_strv (settings, "apps");
+ for (j = 0; apps[j]; j++) {
+ if (!g_hash_table_contains (folder->excluded_apps, apps[j]))
+ g_hash_table_add (folder->apps, g_strdup (apps[j]));
+ }
+
+ categories = g_settings_get_strv (settings, "categories");
+ for (j = 0; categories[j]; j++) {
+ g_hash_table_add (folder->categories, g_strdup (categories[j]));
+ }
+
+ g_hash_table_insert (folders->folders, (gpointer)folder->id, folder);
+ g_hash_table_iter_init (&iter, folder->apps);
+ while (g_hash_table_iter_next (&iter, (gpointer*)&app, NULL)) {
+ g_hash_table_insert (folders->apps, app, folder);
+ }
+
+ g_hash_table_iter_init (&iter, folder->categories);
+ while (g_hash_table_iter_next (&iter, (gpointer*)&category, NULL)) {
+ g_hash_table_insert (folders->categories, category, folder);
+ }
+ }
+}
+
+static void
+save (GsFolders *folders)
+{
+ GHashTableIter iter;
+ GsFolder *folder;
+ gpointer keys;
+ g_autofree gchar *path = NULL;
+ g_autofree gpointer apps = NULL;
+
+ g_object_get (folders->settings, "path", &path, NULL);
+ g_hash_table_iter_init (&iter, folders->folders);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&folder)) {
+ g_autofree gchar *child_path = NULL;
+ g_autoptr(GSettings) settings = NULL;
+
+ child_path = g_strconcat (path, "folders/", folder->id, "/", NULL);
+ settings = g_settings_new_with_path (APP_FOLDER_CHILD_SCHEMA, child_path);
+ g_settings_set_string (settings, "name", folder->name);
+ g_settings_set_boolean (settings, "translate", folder->translate);
+ keys = g_hash_table_get_keys_as_array (folder->apps, NULL);
+ g_settings_set_strv (settings, "apps", (const gchar * const *)keys);
+ g_free (keys);
+
+ keys = g_hash_table_get_keys_as_array (folder->excluded_apps, NULL);
+ g_settings_set_strv (settings, "excluded-apps", (const gchar * const *)keys);
+ g_free (keys);
+
+ keys = g_hash_table_get_keys_as_array (folder->categories, NULL);
+ g_settings_set_strv (settings, "categories", (const gchar * const *)keys);
+ g_free (keys);
+ }
+
+ apps = gs_folders_get_nonempty_folders (folders);
+ g_settings_set_strv (folders->settings, "folder-children",
+ (const gchar * const *)apps);
+}
+
+static void
+clear (GsFolders *folders)
+{
+ g_hash_table_unref (folders->apps);
+ g_hash_table_unref (folders->categories);
+ g_hash_table_unref (folders->folders);
+
+ folders->apps = NULL;
+ folders->categories = NULL;
+ folders->folders = NULL;
+}
+
+static void
+gs_folders_dispose (GObject *object)
+{
+ GsFolders *folders = GS_FOLDERS (object);
+
+ g_clear_object (&folders->settings);
+
+ G_OBJECT_CLASS (gs_folders_parent_class)->dispose (object);
+}
+
+static void
+gs_folders_finalize (GObject *object)
+{
+ GsFolders *folders = GS_FOLDERS (object);
+
+ clear (folders);
+
+ G_OBJECT_CLASS (gs_folders_parent_class)->finalize (object);
+}
+
+static void
+gs_folders_class_init (GsFoldersClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = gs_folders_dispose;
+ object_class->finalize = gs_folders_finalize;
+}
+
+static void
+gs_folders_init (GsFolders *folders)
+{
+ folders->settings = g_settings_new (APP_FOLDER_SCHEMA);
+ load (folders);
+}
+
+static GsFolders *
+gs_folders_new (void)
+{
+ return GS_FOLDERS (g_object_new (GS_TYPE_FOLDERS, NULL));
+}
+
+static GsFolders *singleton;
+
+GsFolders *
+gs_folders_get (void)
+{
+ if (!singleton)
+ singleton = gs_folders_new ();
+
+ return g_object_ref (singleton);
+}
+
+gchar **
+gs_folders_get_folders (GsFolders *folders)
+{
+ return (gchar**) g_hash_table_get_keys_as_array (folders->folders, NULL);
+}
+
+gchar **
+gs_folders_get_nonempty_folders (GsFolders *folders)
+{
+ GHashTableIter iter;
+ GsFolder *folder;
+ g_autoptr(GHashTable) tmp = NULL;
+
+ tmp = g_hash_table_new (g_str_hash, g_str_equal);
+
+ g_hash_table_iter_init (&iter, folders->apps);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&folder)) {
+ g_hash_table_add (tmp, folder->id);
+ }
+
+ g_hash_table_iter_init (&iter, folders->categories);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&folder)) {
+ g_hash_table_add (tmp, folder->id);
+ }
+
+ return (gchar **) g_hash_table_get_keys_as_array (tmp, NULL);
+}
+
+static void
+canonicalize_key (gchar *key)
+{
+ gchar *p;
+
+ for (p = key; *p != 0; p++) {
+ gchar c = *p;
+
+ if (c != '-' &&
+ (c < '0' || c > '9') &&
+ (c < 'A' || c > 'Z') &&
+ (c < 'a' || c > 'z'))
+ *p = '-';
+ }
+}
+
+const gchar *
+gs_folders_add_folder (GsFolders *folders, const gchar *id)
+{
+ GsFolder *folder;
+ g_autofree gchar *key = NULL;
+
+ key = g_strdup (id);
+ canonicalize_key (key);
+ folder = g_hash_table_lookup (folders->folders, key);
+ if (!folder) {
+ folder = gs_folder_new (key, id, FALSE);
+ g_hash_table_insert (folders->folders, folder->id, folder);
+ }
+
+ return folder->id;
+}
+
+void
+gs_folders_remove_folder (GsFolders *folders, const gchar *id)
+{
+ GsFolder *folder = NULL;
+ GHashTableIter iter;
+
+ if (id == NULL)
+ return;
+
+ g_hash_table_iter_init (&iter, folders->apps);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer*)&folder)) {
+ if (folder && g_strcmp0 (id, folder->id) == 0) {
+ g_hash_table_iter_remove (&iter);
+ }
+ }
+
+ g_hash_table_iter_init (&iter, folders->categories);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer*)&folder)) {
+ if (folder && g_strcmp0 (id, folder->id) == 0) {
+ g_hash_table_iter_remove (&iter);
+ }
+ }
+
+ if (folder != NULL)
+ g_hash_table_remove (folders->folders, folder->id);
+}
+
+const gchar *
+gs_folders_get_folder_name (GsFolders *folders, const gchar *id)
+{
+ GsFolder *folder;
+
+ folder = g_hash_table_lookup (folders->folders, id);
+
+ if (folder) {
+ if (folder->translated)
+ return folder->translated;
+
+ return folder->name;
+ }
+
+ return NULL;
+}
+
+void
+gs_folders_set_folder_name (GsFolders *folders, const gchar *id, const gchar *name)
+{
+ GsFolder *folder;
+
+ folder = g_hash_table_lookup (folders->folders, id);
+ if (folder) {
+ g_free (folder->name);
+ g_free (folder->translated);
+ folder->name = g_strdup (name);
+ folder->translate = FALSE;
+ }
+}
+
+static GsFolder *
+get_app_folder (GsFolders *folders, const gchar *app, GPtrArray *categories)
+{
+ GsFolder *folder;
+ const gchar *category;
+ guint i;
+
+ folder = g_hash_table_lookup (folders->apps, app);
+ if (!folder && categories) {
+ for (i = 0; i < categories->len; i++) {
+ category = g_ptr_array_index (categories, i);
+ if (category == NULL)
+ continue;
+
+ folder = g_hash_table_lookup (folders->categories, category);
+ if (folder) {
+ break;
+ }
+ }
+ }
+ if (folder) {
+ if (g_hash_table_contains (folder->excluded_apps, app)) {
+ folder = NULL;
+ }
+ }
+
+ return folder;
+}
+
+const gchar *
+gs_folders_get_app_folder (GsFolders *folders, const gchar *app, GPtrArray *categories)
+{
+ GsFolder *folder;
+
+ if (app == NULL)
+ return NULL;
+
+ folder = get_app_folder (folders, app, categories);
+
+ return folder ? folder->id : NULL;
+}
+
+void
+gs_folders_set_app_folder (GsFolders *folders, const gchar *app, GPtrArray *categories, const gchar *id)
+{
+ GsFolder *folder;
+
+ folder = get_app_folder (folders, app, categories);
+
+ if (folder) {
+ g_hash_table_remove (folders->apps, app);
+ g_hash_table_remove (folder->apps, app);
+ }
+
+ if (id) {
+ gchar *app_id;
+
+ app_id = g_strdup (app);
+ folder = g_hash_table_lookup (folders->folders, id);
+ g_hash_table_add (folder->apps, app_id);
+ g_hash_table_remove (folder->excluded_apps, app);
+ g_hash_table_insert (folders->apps, app_id, folder);
+ } else {
+ guint i;
+ gchar *category;
+
+ for (i = 0; i < categories->len; i++) {
+ category = g_ptr_array_index (categories, i);
+ folder = g_hash_table_lookup (folders->categories, category);
+ if (folder) {
+ g_hash_table_add (folder->excluded_apps, g_strdup (app));
+ }
+ }
+ }
+}
+
+void
+gs_folders_save (GsFolders *folders)
+{
+ save (folders);
+}
+
+void
+gs_folders_revert (GsFolders *folders)
+{
+ clear (folders);
+ load (folders);
+}
+
+/* Ensure we have the default folders for Utilities and YaST.
+ * We can't do this as default values, since the schemas have
+ * no fixed path.
+ *
+ * The app lists come from gnome-menus: layout/gnome-applications.menu
+ */
+void
+gs_folders_convert (void)
+{
+ g_autoptr(GSettings) settings = NULL;
+ g_auto(GStrv) ids = NULL;
+
+ settings = g_settings_new (APP_FOLDER_SCHEMA);
+ ids = g_settings_get_strv (settings, "folder-children");
+ if (g_strv_length (ids) == 0) {
+ const gchar * const children[] = {
+ "Utilities",
+ "YaST",
+ NULL
+ };
+ const gchar * const utilities_categories[] = {
+ "X-GNOME-Utilities",
+ NULL
+ };
+ const gchar * const utilities_apps[] = {
+ "gnome-abrt.desktop",
+ "gnome-system-log.desktop",
+ "gnome-system-monitor.desktop",
+ "gucharmap.desktop",
+ "nm-connection-editor.desktop",
+ "org.gnome.baobab.desktop",
+ "org.gnome.Calculator.desktop",
+ "org.gnome.DejaDup.desktop",
+ "org.gnome.Dictionary.desktop",
+ "org.gnome.DiskUtility.desktop",
+ "org.gnome.eog.desktop",
+ "org.gnome.Evince.desktop",
+ "org.gnome.FileRoller.desktop",
+ "org.gnome.fonts.desktop",
+ "org.gnome.Screenshot.desktop",
+ "org.gnome.seahorse.Application.desktop",
+ "org.gnome.Terminal.desktop",
+ "org.gnome.tweaks.desktop",
+ "org.gnome.Usage.desktop",
+ "simple-scan.desktop",
+ "vinagre.desktop",
+ "yelp.desktop",
+ NULL
+ };
+ const gchar * const yast_categories[] = {
+ "X-SuSE-YaST",
+ NULL
+ };
+
+ gchar *path;
+ gchar *child_path;
+ GSettings *child;
+
+ g_settings_set_strv (settings, "folder-children", children);
+ g_object_get (settings, "path", &path, NULL);
+
+ child_path = g_strconcat (path, "folders/Utilities/", NULL);
+ child = g_settings_new_with_path (APP_FOLDER_CHILD_SCHEMA, child_path);
+ g_settings_set_string (child, "name", "X-GNOME-Utilities.directory");
+ g_settings_set_boolean (child, "translate", TRUE);
+ g_settings_set_strv (child, "categories", utilities_categories);
+ g_settings_set_strv (child, "apps", utilities_apps);
+
+ g_object_unref (child);
+ g_free (child_path);
+
+ child_path = g_strconcat (path, "folders/YaST/", NULL);
+ child = g_settings_new_with_path (APP_FOLDER_CHILD_SCHEMA, child_path);
+ g_settings_set_string (child, "name", "suse-yast.directory");
+ g_settings_set_boolean (child, "translate", TRUE);
+ g_settings_set_strv (child, "categories", yast_categories);
+
+ g_object_unref (child);
+ g_free (child_path);
+
+ }
+}
diff --git a/src/gs-folders.h b/src/gs-folders.h
new file mode 100644
index 0000000..d23a800
--- /dev/null
+++ b/src/gs-folders.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_FOLDERS (gs_folders_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsFolders, gs_folders, GS, FOLDERS, GObject)
+
+GsFolders *gs_folders_get (void);
+
+gchar **gs_folders_get_folders (GsFolders *folders);
+gchar **gs_folders_get_nonempty_folders (GsFolders *folders);
+const gchar *gs_folders_add_folder (GsFolders *folders,
+ const gchar *id);
+void gs_folders_remove_folder (GsFolders *folders,
+ const gchar *id);
+const gchar *gs_folders_get_folder_name (GsFolders *folders,
+ const gchar *id);
+void gs_folders_set_folder_name (GsFolders *folders,
+ const gchar *id,
+ const gchar *name);
+const gchar *gs_folders_get_app_folder (GsFolders *folders,
+ const gchar *app,
+ GPtrArray *categories);
+void gs_folders_set_app_folder (GsFolders *folders,
+ const gchar *app,
+ GPtrArray *categories,
+ const gchar *id);
+void gs_folders_save (GsFolders *folders);
+void gs_folders_revert (GsFolders *folders);
+
+void gs_folders_convert (void);
+
+G_END_DECLS
diff --git a/src/gs-hiding-box.c b/src/gs-hiding-box.c
new file mode 100644
index 0000000..bada8d8
--- /dev/null
+++ b/src/gs-hiding-box.c
@@ -0,0 +1,421 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015 Rafał Lużyński <digitalfreak@lingonborough.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-hiding-box.h"
+
+enum {
+ PROP_0,
+ PROP_SPACING
+};
+
+struct _GsHidingBox
+{
+ GtkContainer parent_instance;
+
+ GList *children;
+ gint spacing;
+};
+
+static void
+gs_hiding_box_buildable_add_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ GObject *child,
+ const gchar *type)
+{
+ if (!type)
+ gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
+ else
+ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (GS_HIDING_BOX (buildable), type);
+}
+
+static void
+gs_hiding_box_buildable_init (GtkBuildableIface *iface)
+{
+ iface->add_child = gs_hiding_box_buildable_add_child;
+}
+
+G_DEFINE_TYPE_WITH_CODE (GsHidingBox, gs_hiding_box, GTK_TYPE_CONTAINER,
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, gs_hiding_box_buildable_init))
+
+static void
+gs_hiding_box_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsHidingBox *box = GS_HIDING_BOX (object);
+
+ switch (prop_id) {
+ case PROP_SPACING:
+ gs_hiding_box_set_spacing (box, g_value_get_int (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_hiding_box_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsHidingBox *box = GS_HIDING_BOX (object);
+
+ switch (prop_id) {
+ case PROP_SPACING:
+ g_value_set_int (value, box->spacing);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_hiding_box_add (GtkContainer *container, GtkWidget *widget)
+{
+ GsHidingBox *box = GS_HIDING_BOX (container);
+
+ box->children = g_list_append (box->children, widget);
+ gtk_widget_set_parent (widget, GTK_WIDGET (box));
+}
+
+static void
+gs_hiding_box_remove (GtkContainer *container, GtkWidget *widget)
+{
+ GList *child;
+ GsHidingBox *box = GS_HIDING_BOX (container);
+
+ for (child = box->children; child != NULL; child = child->next) {
+ if (child->data == widget) {
+ gboolean was_visible = gtk_widget_get_visible (widget) &&
+ gtk_widget_get_child_visible (widget);
+
+ gtk_widget_unparent (widget);
+ box->children = g_list_delete_link (box->children, child);
+
+ if (was_visible)
+ gtk_widget_queue_resize (GTK_WIDGET (container));
+
+ break;
+ }
+ }
+}
+
+static void
+gs_hiding_box_forall (GtkContainer *container,
+ gboolean include_internals,
+ GtkCallback callback,
+ gpointer callback_data)
+{
+ GsHidingBox *box = GS_HIDING_BOX (container);
+ GtkWidget *child;
+ GList *children;
+
+ children = box->children;
+ while (children) {
+ child = children->data;
+ children = children->next;
+ (* callback) (child, callback_data);
+ }
+}
+
+static void
+gs_hiding_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
+{
+ GsHidingBox *box = GS_HIDING_BOX (widget);
+ gint nvis_children = 0;
+
+ GtkTextDirection direction;
+ GtkAllocation child_allocation;
+ GtkRequestedSize *sizes;
+
+ gint size;
+ gint extra = 0;
+ gint n_extra_widgets = 0; /* Number of widgets that receive 1 extra px */
+ gint x = 0, i;
+ GList *child;
+ GtkWidget *child_widget;
+ gint spacing = box->spacing;
+ gint children_size;
+ GtkAllocation clip, child_clip;
+
+ gtk_widget_set_allocation (widget, allocation);
+
+ for (child = box->children; child != NULL; child = child->next) {
+ if (gtk_widget_get_visible (child->data))
+ ++nvis_children;
+ }
+
+ /* If there is no visible child, simply return. */
+ if (nvis_children == 0)
+ return;
+
+ direction = gtk_widget_get_direction (widget);
+ sizes = g_newa (GtkRequestedSize, nvis_children);
+
+ size = allocation->width;
+ children_size = -spacing;
+ /* Retrieve desired size for visible children. */
+ for (i = 0, child = box->children; child != NULL; child = child->next) {
+
+ child_widget = GTK_WIDGET (child->data);
+ if (!gtk_widget_get_visible (child_widget))
+ continue;
+
+ gtk_widget_get_preferred_width_for_height (child_widget,
+ allocation->height,
+ &sizes[i].minimum_size,
+ &sizes[i].natural_size);
+
+ /* Assert the api is working properly */
+ if (sizes[i].minimum_size < 0)
+ g_error ("GsHidingBox child %s minimum width: %d < 0 for height %d",
+ gtk_widget_get_name (child_widget),
+ sizes[i].minimum_size, allocation->height);
+
+ if (sizes[i].natural_size < sizes[i].minimum_size)
+ g_error ("GsHidingBox child %s natural width: %d < minimum %d for height %d",
+ gtk_widget_get_name (child_widget),
+ sizes[i].natural_size, sizes[i].minimum_size,
+ allocation->height);
+
+ children_size += sizes[i].minimum_size + spacing;
+ if (i > 0 && children_size > allocation->width)
+ break;
+
+ size -= sizes[i].minimum_size;
+ sizes[i].data = child_widget;
+
+ i++;
+ }
+ nvis_children = i;
+
+ /* Bring children up to size first */
+ size = gtk_distribute_natural_allocation (MAX (0, size), (guint) nvis_children, sizes);
+ /* Only now we can subtract the spacings */
+ size -= (nvis_children - 1) * spacing;
+
+ if (nvis_children > 1) {
+ extra = size / nvis_children;
+ n_extra_widgets = size % nvis_children;
+ }
+
+ x = allocation->x;
+ for (i = 0, child = box->children; child != NULL; child = child->next) {
+
+ child_widget = GTK_WIDGET (child->data);
+ if (!gtk_widget_get_visible (child_widget))
+ continue;
+
+ /* Hide the overflowing children even if they have visible=TRUE */
+ if (i >= nvis_children) {
+ while (child) {
+ gtk_widget_set_child_visible (child->data, FALSE);
+ child = child->next;
+ }
+ break;
+ }
+
+ child_allocation.x = x;
+ child_allocation.y = allocation->y;
+ child_allocation.width = sizes[i].minimum_size + extra;
+ child_allocation.height = allocation->height;
+ if (n_extra_widgets) {
+ ++child_allocation.width;
+ --n_extra_widgets;
+ }
+ if (direction == GTK_TEXT_DIR_RTL) {
+ child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width;
+ }
+
+ /* Let this child be visible */
+ gtk_widget_set_child_visible (child_widget, TRUE);
+ gtk_widget_size_allocate (child_widget, &child_allocation);
+ x += child_allocation.width + spacing;
+ ++i;
+ }
+
+ /*
+ * The code below is inspired by _gtk_widget_set_simple_clip.
+ * Note: Here we ignore the "box-shadow" CSS property of the
+ * hiding box because we don't use it.
+ */
+ clip = *allocation;
+ if (gtk_widget_get_has_window (widget)) {
+ clip.x = clip.y = 0;
+ }
+
+ for (child = box->children; child != NULL; child = child->next) {
+ child_widget = GTK_WIDGET (child->data);
+ if (gtk_widget_get_visible (child_widget) &&
+ gtk_widget_get_child_visible (child_widget)) {
+ gtk_widget_get_clip (child_widget, &child_clip);
+ gdk_rectangle_union (&child_clip, &clip, &clip);
+ }
+ }
+
+ if (gtk_widget_get_has_window (widget)) {
+ clip.x += allocation->x;
+ clip.y += allocation->y;
+ }
+ gtk_widget_set_clip (widget, &clip);
+}
+
+static void
+gs_hiding_box_get_preferred_width (GtkWidget *widget, gint *min, gint *nat)
+{
+ GsHidingBox *box = GS_HIDING_BOX (widget);
+ gint cm, cn;
+ gint m, n;
+ GList *child;
+ gint nvis_children;
+ gboolean have_min = FALSE;
+
+ m = n = nvis_children = 0;
+ for (child = box->children; child != NULL; child = child->next) {
+ if (!gtk_widget_is_visible (child->data))
+ continue;
+
+ ++nvis_children;
+ gtk_widget_get_preferred_width (child->data, &cm, &cn);
+ /* Minimum is a minimum of the first visible child */
+ if (!have_min) {
+ m = cm;
+ have_min = TRUE;
+ }
+ /* Natural is a sum of all visible children */
+ n += cn;
+ }
+
+ /* Natural must also include the spacing */
+ if (box->spacing && nvis_children > 1)
+ n += box->spacing * (nvis_children - 1);
+
+ if (min)
+ *min = m;
+ if (nat)
+ *nat = n;
+}
+
+static void
+gs_hiding_box_get_preferred_height (GtkWidget *widget, gint *min, gint *nat)
+{
+ gint m, n;
+ gint cm, cn;
+ GList *child;
+
+ GsHidingBox *box = GS_HIDING_BOX (widget);
+ m = n = 0;
+ for (child = box->children; child != NULL; child = child->next) {
+ if (!gtk_widget_is_visible (child->data))
+ continue;
+
+ gtk_widget_get_preferred_height (child->data, &cm, &cn);
+ m = MAX (m, cm);
+ n = MAX (n, cn);
+ }
+
+ if (min)
+ *min = m;
+ if (nat)
+ *nat = n;
+}
+
+static void
+gs_hiding_box_init (GsHidingBox *box)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (box), FALSE);
+ gtk_widget_set_redraw_on_allocate (GTK_WIDGET (box), FALSE);
+
+ box->spacing = 0;
+}
+
+static void
+gs_hiding_box_class_init (GsHidingBoxClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (class);
+
+ object_class->set_property = gs_hiding_box_set_property;
+ object_class->get_property = gs_hiding_box_get_property;
+
+ widget_class->size_allocate = gs_hiding_box_size_allocate;
+ widget_class->get_preferred_width = gs_hiding_box_get_preferred_width;
+ widget_class->get_preferred_height = gs_hiding_box_get_preferred_height;
+
+ container_class->add = gs_hiding_box_add;
+ container_class->remove = gs_hiding_box_remove;
+ container_class->forall = gs_hiding_box_forall;
+
+ g_object_class_install_property (object_class,
+ PROP_SPACING,
+ g_param_spec_int ("spacing",
+ "Spacing",
+ "The amount of space between children",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
+}
+
+/**
+ * gs_hiding_box_new:
+ *
+ * Creates a new #GsHidingBox.
+ *
+ * Returns: a new #GsHidingBox.
+ **/
+GtkWidget *
+gs_hiding_box_new (void)
+{
+ return g_object_new (GS_TYPE_HIDING_BOX, NULL);
+}
+
+/**
+ * gs_hiding_box_set_spacing:
+ * @box: a #GsHidingBox
+ * @spacing: the number of pixels to put between children
+ *
+ * Sets the #GsHidingBox:spacing property of @box, which is the
+ * number of pixels to place between children of @box.
+ */
+void
+gs_hiding_box_set_spacing (GsHidingBox *box, gint spacing)
+{
+ g_return_if_fail (GS_IS_HIDING_BOX (box));
+
+ if (box->spacing != spacing) {
+ box->spacing = spacing;
+
+ g_object_notify (G_OBJECT (box), "spacing");
+
+ gtk_widget_queue_resize (GTK_WIDGET (box));
+ }
+}
+
+/**
+ * gs_hiding_box_get_spacing:
+ * @box: a #GsHidingBox
+ *
+ * Gets the value set by gs_hiding_box_set_spacing().
+ *
+ * Returns: spacing between children
+ **/
+gint
+gs_hiding_box_get_spacing (GsHidingBox *box)
+{
+ g_return_val_if_fail (GS_IS_HIDING_BOX (box), 0);
+
+ return box->spacing;
+}
diff --git a/src/gs-hiding-box.h b/src/gs-hiding-box.h
new file mode 100644
index 0000000..f29e174
--- /dev/null
+++ b/src/gs-hiding-box.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015 Rafał Lużyński <digitalfreak@lingonborough.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_HIDING_BOX (gs_hiding_box_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsHidingBox, gs_hiding_box, GS, HIDING_BOX, GtkContainer)
+
+GtkWidget *gs_hiding_box_new (void);
+void gs_hiding_box_set_spacing (GsHidingBox *box,
+ gint spacing);
+gint gs_hiding_box_get_spacing (GsHidingBox *box);
+
+G_END_DECLS
diff --git a/src/gs-history-dialog.c b/src/gs-history-dialog.c
new file mode 100644
index 0000000..7863e61
--- /dev/null
+++ b/src/gs-history-dialog.c
@@ -0,0 +1,239 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2014 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-history-dialog.h"
+#include "gs-common.h"
+
+struct _GsHistoryDialog
+{
+ GtkDialog parent_instance;
+
+ GtkSizeGroup *sizegroup_state;
+ GtkSizeGroup *sizegroup_timestamp;
+ GtkSizeGroup *sizegroup_version;
+ GtkWidget *list_box;
+ GtkWidget *scrolledwindow;
+};
+
+G_DEFINE_TYPE (GsHistoryDialog, gs_history_dialog, GTK_TYPE_DIALOG)
+
+static gint
+history_sort_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ guint64 timestamp_a = gs_app_get_install_date (app1);
+ guint64 timestamp_b = gs_app_get_install_date (app2);
+ if (timestamp_a < timestamp_b)
+ return 1;
+ if (timestamp_a > timestamp_b)
+ return -1;
+ return 0;
+}
+
+void
+gs_history_dialog_set_app (GsHistoryDialog *dialog, GsApp *app)
+{
+ const gchar *tmp;
+ GsAppList *history;
+ GtkBox *box;
+ GtkWidget *row;
+ GtkWidget *widget;
+ guint64 timestamp;
+ guint i;
+
+ /* add each history package to the dialog */
+ gs_container_remove_all (GTK_CONTAINER (dialog->list_box));
+ history = gs_app_get_history (app);
+ gs_app_list_sort (history, history_sort_cb, NULL);
+ for (i = 0; i < gs_app_list_length (history); i++) {
+ g_autoptr(GDateTime) datetime = NULL;
+ g_autofree gchar *date_str = NULL;
+ app = gs_app_list_index (history, i);
+ box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0));
+
+ /* add the action */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_REMOVING:
+ /* TRANSLATORS: this is the status in the history UI,
+ * where we are showing the application was removed */
+ tmp = C_("app status", "Removed");
+ break;
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_INSTALLING:
+ /* TRANSLATORS: this is the status in the history UI,
+ * where we are showing the application was installed */
+ tmp = C_("app status", "Installed");
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ /* TRANSLATORS: this is the status in the history UI,
+ * where we are showing the application was updated */
+ tmp = C_("app status", "Updated");
+ break;
+ default:
+ /* TRANSLATORS: this is the status in the history UI,
+ * where we are showing that something happened to the
+ * application but we don't know what */
+ tmp = C_("app status", "Unknown");
+ break;
+ }
+ widget = gtk_label_new (tmp);
+ g_object_set (widget,
+ "margin-start", 20,
+ "margin-end", 20,
+ "margin-top", 6,
+ "margin-bottom", 6,
+ "xalign", 0.0,
+ "hexpand", TRUE,
+ NULL);
+ gtk_size_group_add_widget (dialog->sizegroup_state, widget);
+ gtk_container_add (GTK_CONTAINER (box), widget);
+
+ /* add the timestamp */
+ timestamp = gs_app_get_install_date (app);
+ datetime = g_date_time_new_from_unix_utc ((gint) timestamp);
+ if (timestamp == GS_APP_INSTALL_DATE_UNKNOWN) {
+ date_str = g_strdup ("");
+ } else {
+ /* TRANSLATORS: This is the date string with: day number, month name, year.
+ i.e. "25 May 2012" */
+ date_str = g_date_time_format (datetime, _("%e %B %Y"));
+ }
+ widget = gtk_label_new (date_str);
+ g_object_set (widget,
+ "margin-start", 20,
+ "margin-end", 20,
+ "margin-top", 6,
+ "margin-bottom", 6,
+ "xalign", 0.0,
+ "hexpand", TRUE,
+ NULL);
+ gtk_size_group_add_widget (dialog->sizegroup_timestamp, widget);
+ gtk_container_add (GTK_CONTAINER (box), widget);
+
+ /* add the version */
+ widget = gtk_label_new (gs_app_get_version (app));
+ g_object_set (widget,
+ "margin-start", 20,
+ "margin-end", 20,
+ "margin-top", 6,
+ "margin-bottom", 6,
+ "xalign", 1.0,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "width-chars", 10,
+ "hexpand", TRUE,
+ NULL);
+ gtk_size_group_add_widget (dialog->sizegroup_version, widget);
+ gtk_container_add (GTK_CONTAINER (box), widget);
+
+ gtk_widget_show_all (GTK_WIDGET (box));
+ gtk_list_box_insert (GTK_LIST_BOX (dialog->list_box), GTK_WIDGET (box), -1);
+
+ row = gtk_widget_get_parent (GTK_WIDGET (box));
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
+ }
+}
+
+static void
+update_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header;
+
+ /* first entry */
+ header = gtk_list_box_row_get_header (row);
+ if (before == NULL) {
+ gtk_list_box_row_set_header (row, NULL);
+ return;
+ }
+
+ /* already set */
+ if (header != NULL)
+ return;
+
+ /* set new */
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static void
+scrollbar_mapped_cb (GtkWidget *sb, GtkScrolledWindow *swin)
+{
+ GtkWidget *frame;
+
+ frame = gtk_bin_get_child (GTK_BIN (gtk_bin_get_child (GTK_BIN (swin))));
+ if (gtk_widget_get_mapped (GTK_WIDGET (sb))) {
+ gtk_scrolled_window_set_shadow_type (swin, GTK_SHADOW_IN);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+ } else {
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_scrolled_window_set_shadow_type (swin, GTK_SHADOW_NONE);
+ }
+}
+
+static void
+gs_history_dialog_dispose (GObject *object)
+{
+ GsHistoryDialog *dialog = GS_HISTORY_DIALOG (object);
+
+ g_clear_object (&dialog->sizegroup_state);
+ g_clear_object (&dialog->sizegroup_timestamp);
+ g_clear_object (&dialog->sizegroup_version);
+
+ G_OBJECT_CLASS (gs_history_dialog_parent_class)->dispose (object);
+}
+
+static void
+gs_history_dialog_init (GsHistoryDialog *dialog)
+{
+ GtkWidget *scrollbar;
+
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+
+ dialog->sizegroup_state = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ dialog->sizegroup_timestamp = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ dialog->sizegroup_version = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (dialog->list_box),
+ update_header_func,
+ dialog,
+ NULL);
+
+ scrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (dialog->scrolledwindow));
+ g_signal_connect (scrollbar, "map", G_CALLBACK (scrollbar_mapped_cb), dialog->scrolledwindow);
+ g_signal_connect (scrollbar, "unmap", G_CALLBACK (scrollbar_mapped_cb), dialog->scrolledwindow);
+}
+
+static void
+gs_history_dialog_class_init (GsHistoryDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_history_dialog_dispose;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-history-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsHistoryDialog, list_box);
+ gtk_widget_class_bind_template_child (widget_class, GsHistoryDialog, scrolledwindow);
+}
+
+GtkWidget *
+gs_history_dialog_new (void)
+{
+ return GTK_WIDGET (g_object_new (GS_TYPE_HISTORY_DIALOG,
+ "use-header-bar", TRUE,
+ NULL));
+}
diff --git a/src/gs-history-dialog.h b/src/gs-history-dialog.h
new file mode 100644
index 0000000..ebbec9e
--- /dev/null
+++ b/src/gs-history-dialog.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_HISTORY_DIALOG (gs_history_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsHistoryDialog, gs_history_dialog, GS, HISTORY_DIALOG, GtkDialog)
+
+GtkWidget *gs_history_dialog_new (void);
+void gs_history_dialog_set_app (GsHistoryDialog *dialog,
+ GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-history-dialog.ui b/src/gs-history-dialog.ui
new file mode 100644
index 0000000..942e2a5
--- /dev/null
+++ b/src/gs-history-dialog.ui
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsHistoryDialog" parent="GtkDialog">
+ <property name="title" translatable="yes">History</property>
+ <property name="modal">True</property>
+ <property name="default_width">600</property>
+ <property name="default_height">300</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox">
+ <property name="border_width">0</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">none</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkFrame" id="frame">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkListBox" id="list_box">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-info-bar.c b/src/gs-info-bar.c
new file mode 100644
index 0000000..caac2ec
--- /dev/null
+++ b/src/gs-info-bar.c
@@ -0,0 +1,199 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Rafał Lużyński <digitalfreak@lingonborough.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-info-bar.h"
+
+struct _GsInfoBar
+{
+ GtkInfoBar parent_instance;
+
+ GtkWidget *label_title;
+ GtkWidget *label_body;
+ GtkWidget *label_warning;
+};
+
+G_DEFINE_TYPE (GsInfoBar, gs_info_bar, GTK_TYPE_INFO_BAR)
+
+enum {
+ PROP_0,
+ PROP_TITLE,
+ PROP_BODY,
+ PROP_WARNING
+};
+
+static void
+gs_info_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsInfoBar *infobar = GS_INFO_BAR (object);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ g_value_set_string (value, gs_info_bar_get_title (infobar));
+ break;
+ case PROP_BODY:
+ g_value_set_string (value, gs_info_bar_get_body (infobar));
+ break;
+ case PROP_WARNING:
+ g_value_set_string (value, gs_info_bar_get_warning (infobar));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_info_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsInfoBar *infobar = GS_INFO_BAR (object);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ gs_info_bar_set_title (infobar, g_value_get_string (value));
+ break;
+ case PROP_BODY:
+ gs_info_bar_set_body (infobar, g_value_get_string (value));
+ break;
+ case PROP_WARNING:
+ gs_info_bar_set_warning (infobar, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_info_bar_init (GsInfoBar *infobar)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (infobar), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (infobar));
+}
+
+static void
+gs_info_bar_class_init (GsInfoBarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->get_property = gs_info_bar_get_property;
+ object_class->set_property = gs_info_bar_set_property;
+
+ g_object_class_install_property (object_class, PROP_TITLE,
+ g_param_spec_string ("title",
+ "Title Text",
+ "The title (header) text of the info bar",
+ "",
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_BODY,
+ g_param_spec_string ("body",
+ "Body Text",
+ "The body (main) text of the info bar",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_WARNING,
+ g_param_spec_string ("warning",
+ "Warning Text",
+ "The warning text of the info bar, below the body text",
+ NULL,
+ G_PARAM_READWRITE));
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-info-bar.ui");
+
+ gtk_widget_class_bind_template_child (widget_class,
+ GsInfoBar, label_title);
+ gtk_widget_class_bind_template_child (widget_class,
+ GsInfoBar, label_body);
+ gtk_widget_class_bind_template_child (widget_class,
+ GsInfoBar, label_warning);
+}
+
+GtkWidget *
+gs_info_bar_new (void)
+{
+ GsInfoBar *infobar;
+
+ infobar = g_object_new (GS_TYPE_INFO_BAR, NULL);
+
+ return GTK_WIDGET (infobar);
+}
+
+static const gchar *
+retrieve_from_label (GtkWidget *label)
+{
+ if (!gtk_widget_get_visible (label))
+ return NULL;
+ else
+ return gtk_label_get_label (GTK_LABEL (label));
+}
+
+static void
+update_label (GtkWidget *label, const gchar *text)
+{
+ gtk_label_set_label (GTK_LABEL (label), text);
+ gtk_widget_set_visible (label,
+ text != NULL && *text != '\0');
+}
+
+const gchar *
+gs_info_bar_get_title (GsInfoBar *bar)
+{
+ g_return_val_if_fail (GS_IS_INFO_BAR (bar), NULL);
+
+ return retrieve_from_label (bar->label_title);
+}
+
+void
+gs_info_bar_set_title (GsInfoBar *bar, const gchar *text)
+{
+ g_return_if_fail (GS_IS_INFO_BAR (bar));
+
+ update_label (bar->label_title, text);
+}
+
+const gchar *
+gs_info_bar_get_body (GsInfoBar *bar)
+{
+ g_return_val_if_fail (GS_IS_INFO_BAR (bar), NULL);
+
+ return retrieve_from_label (bar->label_body);
+}
+
+void
+gs_info_bar_set_body (GsInfoBar *bar, const gchar *text)
+{
+ g_return_if_fail (GS_IS_INFO_BAR (bar));
+
+ update_label (bar->label_body, text);
+}
+
+const gchar *
+gs_info_bar_get_warning (GsInfoBar *bar)
+{
+ g_return_val_if_fail (GS_IS_INFO_BAR (bar), NULL);
+
+ return retrieve_from_label (bar->label_warning);
+}
+
+void
+gs_info_bar_set_warning (GsInfoBar *bar, const gchar *text)
+{
+ g_return_if_fail (GS_IS_INFO_BAR (bar));
+
+ update_label (bar->label_warning, text);
+}
diff --git a/src/gs-info-bar.h b/src/gs-info-bar.h
new file mode 100644
index 0000000..7001867
--- /dev/null
+++ b/src/gs-info-bar.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Rafał Lużyński <digitalfreak@lingonborough.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_INFO_BAR (gs_info_bar_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsInfoBar, gs_info_bar, GS, INFO_BAR, GtkInfoBar)
+
+GtkWidget *gs_info_bar_new (void);
+const gchar *gs_info_bar_get_title (GsInfoBar *bar);
+void gs_info_bar_set_title (GsInfoBar *bar,
+ const gchar *text);
+const gchar *gs_info_bar_get_body (GsInfoBar *bar);
+void gs_info_bar_set_body (GsInfoBar *bar,
+ const gchar *text);
+const gchar *gs_info_bar_get_warning (GsInfoBar *bar);
+void gs_info_bar_set_warning (GsInfoBar *bar,
+ const gchar *text);
+G_END_DECLS
diff --git a/src/gs-info-bar.ui b/src/gs-info-bar.ui
new file mode 100644
index 0000000..8977442
--- /dev/null
+++ b/src/gs-info-bar.ui
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsInfoBar" parent="GtkInfoBar">
+ <property name="app_paintable">True</property>
+ <property name="message_type">info</property>
+ <style>
+ <class name="application-details-infobar"/>
+ </style>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="content_area">
+ <property name="spacing">0</property>
+ <property name="halign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label_title">
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">30</property>
+ <property name="visible">False</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_body">
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">30</property>
+ <property name="visible">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_warning">
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">30</property>
+ <property name="visible">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-installed-page.c b/src/gs-installed-page.c
new file mode 100644
index 0000000..3688be4
--- /dev/null
+++ b/src/gs-installed-page.c
@@ -0,0 +1,633 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "gs-shell.h"
+#include "gs-installed-page.h"
+#include "gs-common.h"
+#include "gs-app-row.h"
+#include "gs-utils.h"
+
+struct _GsInstalledPage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *cancellable;
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+ GtkSizeGroup *sizegroup_button;
+ gboolean cache_valid;
+ gboolean waiting;
+ GsShell *shell;
+ GSettings *settings;
+
+ GtkWidget *list_box_install;
+ GtkWidget *scrolledwindow_install;
+ GtkWidget *spinner_install;
+ GtkWidget *stack_install;
+};
+
+G_DEFINE_TYPE (GsInstalledPage, gs_installed_page, GS_TYPE_PAGE)
+
+static void gs_installed_page_pending_apps_changed_cb (GsPluginLoader *plugin_loader,
+ GsInstalledPage *self);
+
+static void
+gs_installed_page_invalidate (GsInstalledPage *self)
+{
+ self->cache_valid = FALSE;
+}
+
+static void
+gs_installed_page_app_row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ GsInstalledPage *self)
+{
+ GsApp *app;
+ app = gs_app_row_get_app (GS_APP_ROW (row));
+ gs_shell_show_app (self->shell, app);
+}
+
+static void
+row_unrevealed (GObject *row, GParamSpec *pspec, gpointer data)
+{
+ GtkWidget *list;
+
+ list = gtk_widget_get_parent (GTK_WIDGET (row));
+ if (list == NULL)
+ return;
+ gtk_container_remove (GTK_CONTAINER (list), GTK_WIDGET (row));
+}
+
+static void
+gs_installed_page_unreveal_row (GsAppRow *app_row)
+{
+ g_signal_connect (app_row, "unrevealed",
+ G_CALLBACK (row_unrevealed), NULL);
+ gs_app_row_unreveal (app_row);
+}
+
+static void
+gs_installed_page_app_removed (GsPage *page, GsApp *app)
+{
+ GsInstalledPage *self = GS_INSTALLED_PAGE (page);
+ g_autoptr(GList) children = NULL;
+
+ children = gtk_container_get_children (GTK_CONTAINER (self->list_box_install));
+ for (GList *l = children; l; l = l->next) {
+ GsAppRow *app_row = GS_APP_ROW (l->data);
+ if (gs_app_row_get_app (app_row) == app) {
+ gs_installed_page_unreveal_row (app_row);
+ }
+ }
+}
+
+static void
+gs_installed_page_app_remove_cb (GsAppRow *app_row,
+ GsInstalledPage *self)
+{
+ GsApp *app;
+
+ app = gs_app_row_get_app (app_row);
+ gs_page_remove_app (GS_PAGE (self), app, self->cancellable);
+}
+
+static gboolean
+gs_installed_page_invalidate_sort_idle (gpointer user_data)
+{
+ GsAppRow *app_row = user_data;
+ GsApp *app = gs_app_row_get_app (app_row);
+ AsAppState state = gs_app_get_state (app);
+
+ gtk_list_box_row_changed (GTK_LIST_BOX_ROW (app_row));
+
+ /* if the app has been uninstalled (which can happen from another view)
+ * we should removed it from the installed view */
+ if (state == AS_APP_STATE_AVAILABLE || state == AS_APP_STATE_UNKNOWN)
+ gs_installed_page_unreveal_row (app_row);
+
+ g_object_unref (app_row);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_installed_page_notify_state_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsAppRow *app_row)
+{
+ g_idle_add (gs_installed_page_invalidate_sort_idle, g_object_ref (app_row));
+}
+
+static gboolean
+should_show_installed_size (GsInstalledPage *self)
+{
+ return g_settings_get_boolean (self->settings,
+ "installed-page-show-size");
+}
+
+static gboolean
+gs_installed_page_is_actual_app (GsApp *app)
+{
+ if (gs_app_get_description (app) != NULL)
+ return TRUE;
+ /* special snowflake */
+ if (g_strcmp0 (gs_app_get_id (app), "google-chrome.desktop") == 0)
+ return TRUE;
+ g_debug ("%s is not an actual app", gs_app_get_unique_id (app));
+ return FALSE;
+}
+
+static void
+gs_installed_page_add_app (GsInstalledPage *self, GsAppList *list, GsApp *app)
+{
+ GtkWidget *app_row;
+
+ app_row = g_object_new (GS_TYPE_APP_ROW,
+ "app", app,
+ "show-buttons", TRUE,
+ "show-source", gs_utils_list_has_app_fuzzy (list, app),
+ "show-installed-size", !gs_app_has_quirk (app, GS_APP_QUIRK_COMPULSORY) && should_show_installed_size (self),
+ NULL);
+
+ g_signal_connect (app_row, "button-clicked",
+ G_CALLBACK (gs_installed_page_app_remove_cb), self);
+ g_signal_connect_object (app, "notify::state",
+ G_CALLBACK (gs_installed_page_notify_state_changed_cb),
+ app_row, 0);
+ gtk_container_add (GTK_CONTAINER (self->list_box_install), app_row);
+ gs_app_row_set_size_groups (GS_APP_ROW (app_row),
+ self->sizegroup_image,
+ self->sizegroup_name,
+ self->sizegroup_desc,
+ self->sizegroup_button);
+
+ /* only show if is an actual application */
+ gtk_widget_set_visible (app_row, gs_installed_page_is_actual_app (app));
+}
+
+static void
+gs_installed_page_get_installed_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ guint i;
+ GsApp *app;
+ GsInstalledPage *self = GS_INSTALLED_PAGE (user_data);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ gs_stop_spinner (GTK_SPINNER (self->spinner_install));
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_install), "view");
+
+ self->waiting = FALSE;
+ self->cache_valid = TRUE;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get installed apps: %s", error->message);
+ goto out;
+ }
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ gs_installed_page_add_app (self, list, app);
+ }
+out:
+ gs_installed_page_pending_apps_changed_cb (plugin_loader, self);
+}
+
+static void
+gs_installed_page_load (GsInstalledPage *self)
+{
+ GsPluginRefineFlags flags;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ if (self->waiting)
+ return;
+ self->waiting = TRUE;
+
+ /* remove old entries */
+ gs_container_remove_all (GTK_CONTAINER (self->list_box_install));
+
+ flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING;
+
+ if (should_show_installed_size (self))
+ flags |= GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE;
+
+ /* get installed apps */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_INSTALLED,
+ "refine-flags", flags,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_NONE,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader,
+ plugin_job,
+ self->cancellable,
+ gs_installed_page_get_installed_cb,
+ self);
+ gs_start_spinner (GTK_SPINNER (self->spinner_install));
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_install), "spinner");
+}
+
+static void
+gs_installed_page_reload (GsPage *page)
+{
+ GsInstalledPage *self = GS_INSTALLED_PAGE (page);
+ gs_installed_page_invalidate (self);
+ gs_installed_page_load (self);
+}
+
+static void
+gs_installed_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsInstalledPage *self = GS_INSTALLED_PAGE (page);
+ GtkWidget *widget;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_INSTALLED) {
+ g_warning ("Called switch_to(installed) when in mode %s",
+ gs_shell_get_mode_string (self->shell));
+ return;
+ }
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "buttonbox_main"));
+ gtk_widget_show (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "menu_button"));
+ gtk_widget_show (widget);
+
+ if (scroll_up) {
+ GtkAdjustment *adj;
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_install));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+ }
+ if (gs_shell_get_mode (self->shell) == GS_SHELL_MODE_INSTALLED) {
+ gs_grab_focus_when_mapped (self->scrolledwindow_install);
+ }
+
+ /* no need to refresh */
+ if (self->cache_valid)
+ return;
+
+ gs_installed_page_load (self);
+}
+
+/**
+ * gs_installed_page_get_app_sort_key:
+ *
+ * Get a sort key to achive this:
+ *
+ * 1. state:installing applications
+ * 2. state: applications queued for installing
+ * 3. state:removing applications
+ * 4. kind:normal applications
+ * 5. kind:system applications
+ *
+ * Within each of these groups, they are sorted by the install date and then
+ * by name.
+ **/
+static gchar *
+gs_installed_page_get_app_sort_key (GsApp *app)
+{
+ GString *key;
+ g_autofree gchar *sort_name = NULL;
+
+ key = g_string_sized_new (64);
+
+ /* sort installed, removing, other */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLING:
+ g_string_append (key, "1:");
+ break;
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ g_string_append (key, "2:");
+ break;
+ case AS_APP_STATE_REMOVING:
+ g_string_append (key, "3:");
+ break;
+ default:
+ g_string_append (key, "4:");
+ break;
+ }
+
+ /* sort apps by kind */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_OS_UPDATE:
+ g_string_append (key, "1:");
+ break;
+ case AS_APP_KIND_DESKTOP:
+ g_string_append (key, "2:");
+ break;
+ case AS_APP_KIND_WEB_APP:
+ g_string_append (key, "3:");
+ break;
+ case AS_APP_KIND_RUNTIME:
+ g_string_append (key, "4:");
+ break;
+ case AS_APP_KIND_ADDON:
+ g_string_append (key, "5:");
+ break;
+ case AS_APP_KIND_CODEC:
+ g_string_append (key, "6:");
+ break;
+ case AS_APP_KIND_FONT:
+ g_string_append (key, "6:");
+ break;
+ case AS_APP_KIND_INPUT_METHOD:
+ g_string_append (key, "7:");
+ break;
+ case AS_APP_KIND_SHELL_EXTENSION:
+ g_string_append (key, "8:");
+ break;
+ default:
+ g_string_append (key, "9:");
+ break;
+ }
+
+ /* sort normal, compulsory */
+ if (!gs_app_has_quirk (app, GS_APP_QUIRK_COMPULSORY))
+ g_string_append (key, "1:");
+ else
+ g_string_append (key, "2:");
+
+ /* finally, sort by short name */
+ if (gs_app_get_name (app) != NULL) {
+ sort_name = gs_utils_sort_key (gs_app_get_name (app));
+ g_string_append (key, sort_name);
+ }
+
+ return g_string_free (key, FALSE);
+}
+
+static gint
+gs_installed_page_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GsApp *a1, *a2;
+ g_autofree gchar *key1 = NULL;
+ g_autofree gchar *key2 = NULL;
+
+ /* check valid */
+ if (!GTK_IS_BIN(a) || !GTK_IS_BIN(b)) {
+ g_warning ("GtkListBoxRow not valid");
+ return 0;
+ }
+
+ a1 = gs_app_row_get_app (GS_APP_ROW (a));
+ a2 = gs_app_row_get_app (GS_APP_ROW (b));
+ key1 = gs_installed_page_get_app_sort_key (a1);
+ key2 = gs_installed_page_get_app_sort_key (a2);
+
+ /* compare the keys according to the algorithm above */
+ return g_strcmp0 (key1, key2);
+}
+
+typedef enum {
+ GS_UPDATE_LIST_SECTION_REMOVABLE_APPS,
+ GS_UPDATE_LIST_SECTION_SYSTEM_APPS,
+ GS_UPDATE_LIST_SECTION_ADDONS,
+ GS_UPDATE_LIST_SECTION_LAST
+} GsInstalledPageSection;
+
+static GsInstalledPageSection
+gs_installed_page_get_app_section (GsApp *app)
+{
+ if (gs_app_get_kind (app) == AS_APP_KIND_DESKTOP ||
+ gs_app_get_kind (app) == AS_APP_KIND_WEB_APP) {
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_COMPULSORY))
+ return GS_UPDATE_LIST_SECTION_SYSTEM_APPS;
+ return GS_UPDATE_LIST_SECTION_REMOVABLE_APPS;
+ }
+ return GS_UPDATE_LIST_SECTION_ADDONS;
+}
+
+static GtkWidget *
+gs_installed_page_get_section_header (GsInstalledPageSection section)
+{
+ GtkWidget *header = NULL;
+
+ if (section == GS_UPDATE_LIST_SECTION_SYSTEM_APPS) {
+ /* TRANSLATORS: This is the header dividing the normal
+ * applications and the system ones */
+ header = gtk_label_new (_("System Applications"));
+ } else if (section == GS_UPDATE_LIST_SECTION_ADDONS) {
+ /* TRANSLATORS: This is the header dividing the normal
+ * applications and the addons */
+ header = gtk_label_new (_("Add-ons"));
+ }
+
+ /* fix header style */
+ if (header != NULL) {
+ GtkStyleContext *context = gtk_widget_get_style_context (header);
+ gtk_label_set_xalign (GTK_LABEL (header), 0.0);
+ gtk_style_context_add_class (context, "app-listbox-header");
+ gtk_style_context_add_class (context, "app-listbox-header-title");
+ }
+ return header;
+}
+
+static void
+gs_installed_page_list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GsApp *app = gs_app_row_get_app (GS_APP_ROW (row));
+ GsInstalledPageSection before_section = GS_UPDATE_LIST_SECTION_LAST;
+ GsInstalledPageSection section;
+ GtkWidget *header;
+
+ /* first entry */
+ gtk_list_box_row_set_header (row, NULL);
+ if (before != NULL) {
+ GsApp *before_app = gs_app_row_get_app (GS_APP_ROW (before));
+ before_section = gs_installed_page_get_app_section (before_app);
+ }
+
+ /* section changed or forced to have headers */
+ section = gs_installed_page_get_app_section (app);
+ if (before_section != section) {
+ header = gs_installed_page_get_section_header (section);
+ if (header == NULL)
+ return;
+ } else {
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ }
+ gtk_list_box_row_set_header (row, header);
+}
+
+static gboolean
+gs_installed_page_has_app (GsInstalledPage *self,
+ GsApp *app)
+{
+ gboolean ret = FALSE;
+ g_autoptr(GList) children = NULL;
+
+ children = gtk_container_get_children (GTK_CONTAINER (self->list_box_install));
+ for (GList *l = children; l; l = l->next) {
+ GsAppRow *app_row = GS_APP_ROW (l->data);
+ if (gs_app_row_get_app (app_row) == app) {
+ ret = TRUE;
+ break;
+ }
+ }
+ return ret;
+}
+
+static void
+gs_installed_page_pending_apps_changed_cb (GsPluginLoader *plugin_loader,
+ GsInstalledPage *self)
+{
+ GsApp *app;
+ GtkWidget *widget;
+ guint i;
+ guint cnt = 0;
+ g_autoptr(GsAppList) pending = NULL;
+
+ /* add new apps to the list */
+ pending = gs_plugin_loader_get_pending (plugin_loader);
+ for (i = 0; i < gs_app_list_length (pending); i++) {
+ app = gs_app_list_index (pending, i);
+
+ /* never show OS upgrades, we handle the scheduling and
+ * cancellation in GsUpgradeBanner */
+ if (gs_app_get_kind (app) == AS_APP_KIND_OS_UPGRADE)
+ continue;
+
+ /* do not to add pending apps more than once. */
+ if (gs_installed_page_has_app (self, app) == FALSE)
+ gs_installed_page_add_app (self, pending, app);
+
+ /* incremement the label */
+ cnt++;
+ }
+
+ /* show a label with the number of on-going operations */
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder,
+ "button_installed_counter"));
+ if (cnt == 0) {
+ gtk_widget_hide (widget);
+ } else {
+ g_autofree gchar *label = NULL;
+ label = g_strdup_printf ("%u", cnt);
+ gtk_label_set_label (GTK_LABEL (widget), label);
+ gtk_widget_show (widget);
+ }
+}
+
+static gboolean
+gs_installed_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsInstalledPage *self = GS_INSTALLED_PAGE (page);
+
+ g_return_val_if_fail (GS_IS_INSTALLED_PAGE (self), TRUE);
+
+ self->shell = shell;
+ self->plugin_loader = g_object_ref (plugin_loader);
+ g_signal_connect (self->plugin_loader, "pending-apps-changed",
+ G_CALLBACK (gs_installed_page_pending_apps_changed_cb),
+ self);
+
+ self->builder = g_object_ref (builder);
+ self->cancellable = g_object_ref (cancellable);
+
+ /* setup installed */
+ g_signal_connect (self->list_box_install, "row-activated",
+ G_CALLBACK (gs_installed_page_app_row_activated_cb), self);
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->list_box_install),
+ gs_installed_page_list_header_func,
+ self, NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (self->list_box_install),
+ gs_installed_page_sort_func,
+ self, NULL);
+ return TRUE;
+}
+
+static void
+gs_installed_page_dispose (GObject *object)
+{
+ GsInstalledPage *self = GS_INSTALLED_PAGE (object);
+
+ g_clear_object (&self->sizegroup_image);
+ g_clear_object (&self->sizegroup_name);
+ g_clear_object (&self->sizegroup_desc);
+ g_clear_object (&self->sizegroup_button);
+
+ g_clear_object (&self->builder);
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->cancellable);
+ g_clear_object (&self->settings);
+
+ G_OBJECT_CLASS (gs_installed_page_parent_class)->dispose (object);
+}
+
+static void
+gs_installed_page_class_init (GsInstalledPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_installed_page_dispose;
+ page_class->app_removed = gs_installed_page_app_removed;
+ page_class->switch_to = gs_installed_page_switch_to;
+ page_class->reload = gs_installed_page_reload;
+ page_class->setup = gs_installed_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-installed-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsInstalledPage, list_box_install);
+ gtk_widget_class_bind_template_child (widget_class, GsInstalledPage, scrolledwindow_install);
+ gtk_widget_class_bind_template_child (widget_class, GsInstalledPage, spinner_install);
+ gtk_widget_class_bind_template_child (widget_class, GsInstalledPage, stack_install);
+}
+
+static void
+gs_installed_page_init (GsInstalledPage *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ self->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_button = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ self->settings = g_settings_new ("org.gnome.software");
+}
+
+GsInstalledPage *
+gs_installed_page_new (void)
+{
+ GsInstalledPage *self;
+ self = g_object_new (GS_TYPE_INSTALLED_PAGE, NULL);
+ return GS_INSTALLED_PAGE (self);
+}
diff --git a/src/gs-installed-page.h b/src/gs-installed-page.h
new file mode 100644
index 0000000..367250d
--- /dev/null
+++ b/src/gs-installed-page.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_INSTALLED_PAGE (gs_installed_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsInstalledPage, gs_installed_page, GS, INSTALLED_PAGE, GsPage)
+
+GsInstalledPage *gs_installed_page_new (void);
+
+G_END_DECLS
diff --git a/src/gs-installed-page.ui b/src/gs-installed-page.ui
new file mode 100644
index 0000000..ec265e0
--- /dev/null
+++ b/src/gs-installed-page.ui
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsInstalledPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="installed-accessible">
+ <property name="accessible-name" translatable="yes">Installed page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack_install">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSpinner" id="spinner_install">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_install">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <property name="preferred-width">860</property>
+ <child>
+ <object class="GtkListBox" id="list_box_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">view</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-language.c b/src/gs-language.c
new file mode 100644
index 0000000..d696b37
--- /dev/null
+++ b/src/gs-language.c
@@ -0,0 +1,163 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gs-language.h"
+
+struct _GsLanguage
+{
+ GObject parent_instance;
+
+ GHashTable *hash;
+};
+
+G_DEFINE_TYPE (GsLanguage, gs_language, G_TYPE_OBJECT)
+
+static void
+gs_language_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
+{
+ guint i, len;
+ const gchar *code1 = NULL;
+ const gchar *code2b = NULL;
+ const gchar *name = NULL;
+ GsLanguage *language = user_data;
+
+ if (strcmp (element_name, "iso_639_entry") != 0)
+ return;
+
+ /* find data */
+ len = g_strv_length ((gchar**)attribute_names);
+ for (i=0; i<len; i++) {
+ if (strcmp (attribute_names[i], "iso_639_1_code") == 0)
+ code1 = attribute_values[i];
+ if (strcmp (attribute_names[i], "iso_639_2B_code") == 0)
+ code2b = attribute_values[i];
+ if (strcmp (attribute_names[i], "name") == 0)
+ name = attribute_values[i];
+ }
+
+ /* not valid entry */
+ if (name == NULL)
+ return;
+
+ /* add both to hash */
+ if (code1 != NULL)
+ g_hash_table_insert (language->hash, g_strdup (code1), g_strdup (name));
+ if (code2b != NULL)
+ g_hash_table_insert (language->hash, g_strdup (code2b), g_strdup (name));
+}
+
+/* trivial parser */
+static const GMarkupParser gs_language_markup_parser =
+{
+ gs_language_parser_start_element,
+ NULL, /* end_element */
+ NULL, /* characters */
+ NULL, /* passthrough */
+ NULL /* error */
+};
+
+/**
+ * gs_language_populate:
+ *
+ * <iso_639_entry iso_639_2B_code="hun" iso_639_2T_code="hun" iso_639_1_code="hu" name="Hungarian" />
+ **/
+gboolean
+gs_language_populate (GsLanguage *language, GError **error)
+{
+ gsize size;
+ g_autofree gchar *contents = NULL;
+ g_autofree gchar *filename = NULL;
+ g_autoptr(GMarkupParseContext) context = NULL;
+
+ /* find filename */
+ filename = g_build_filename (DATADIR, "xml", "iso-codes", "iso_639.xml", NULL);
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ g_free (filename);
+ filename = g_build_filename ("/usr", "share", "xml", "iso-codes", "iso_639.xml", NULL);
+ }
+ /* FreeBSD and OpenBSD ports */
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ g_free (filename);
+ filename = g_build_filename ("/usr", "local", "share", "xml", "iso-codes", "iso_639.xml", NULL);
+ }
+ /* NetBSD pkgsrc */
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ g_free (filename);
+ filename = g_build_filename ("/usr", "pkg", "share", "xml", "iso-codes", "iso_639.xml", NULL);
+ }
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ g_set_error (error, 1, 0, "cannot find source file : '%s'", filename);
+ return FALSE;
+ }
+
+ /* get contents */
+ if (!g_file_get_contents (filename, &contents, &size, error))
+ return FALSE;
+
+ /* create parser */
+ context = g_markup_parse_context_new (&gs_language_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, language, NULL);
+
+ /* parse data */
+ if (!g_markup_parse_context_parse (context, contents, (gssize) size, error))
+ return FALSE;
+
+ return TRUE;;
+}
+
+gchar *
+gs_language_iso639_to_language (GsLanguage *language, const gchar *iso639)
+{
+ return g_strdup (g_hash_table_lookup (language->hash, iso639));
+}
+
+static void
+gs_language_finalize (GObject *object)
+{
+ GsLanguage *language;
+
+ g_return_if_fail (GS_IS_LANGUAGE (object));
+
+ language = GS_LANGUAGE (object);
+
+ g_hash_table_unref (language->hash);
+
+ G_OBJECT_CLASS (gs_language_parent_class)->finalize (object);
+}
+
+static void
+gs_language_init (GsLanguage *language)
+{
+ language->hash = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, (GDestroyNotify) g_free);
+}
+
+static void
+gs_language_class_init (GsLanguageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_language_finalize;
+}
+
+/**
+ * gs_language_new:
+ *
+ * Return value: a new GsLanguage object.
+ **/
+GsLanguage *
+gs_language_new (void)
+{
+ GsLanguage *language;
+ language = g_object_new (GS_TYPE_LANGUAGE, NULL);
+ return GS_LANGUAGE (language);
+}
diff --git a/src/gs-language.h b/src/gs-language.h
new file mode 100644
index 0000000..04688f8
--- /dev/null
+++ b/src/gs-language.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_LANGUAGE (gs_language_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsLanguage, gs_language, GS, LANGUAGE, GObject)
+
+GsLanguage *gs_language_new (void);
+gboolean gs_language_populate (GsLanguage *language,
+ GError **error);
+gchar *gs_language_iso639_to_language (GsLanguage *language,
+ const gchar *iso639);
+
+G_END_DECLS
diff --git a/src/gs-loading-page.c b/src/gs-loading-page.c
new file mode 100644
index 0000000..67a20fb
--- /dev/null
+++ b/src/gs-loading-page.c
@@ -0,0 +1,234 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-shell.h"
+#include "gs-loading-page.h"
+
+typedef struct {
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GCancellable *cancellable;
+ GsShell *shell;
+
+ GtkWidget *progressbar;
+ GtkWidget *label;
+ guint progress_pulse_id;
+} GsLoadingPagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsLoadingPage, gs_loading_page, GS_TYPE_PAGE)
+
+enum {
+ SIGNAL_REFRESHED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+static gboolean
+_pulse_cb (gpointer user_data)
+{
+ GsLoadingPage *self = GS_LOADING_PAGE (user_data);
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progressbar));
+ return TRUE;
+}
+
+static void
+gs_loading_page_status_changed_cb (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GsPluginStatus status,
+ GsLoadingPage *self)
+{
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+ const gchar *str = NULL;
+
+ /* update label */
+ if (status == GS_PLUGIN_STATUS_DOWNLOADING) {
+ if (app != NULL)
+ str = gs_app_get_summary_missing (app);
+ if (str == NULL) {
+ /* TRANSLATORS: initial start */
+ str = _("Software catalog is being downloaded");
+ }
+ } else {
+ /* TRANSLATORS: initial start */
+ str = _("Software catalog is being downloaded");
+ }
+
+ /* update label */
+ gtk_label_set_label (GTK_LABEL (priv->label), str);
+
+ /* update progresbar */
+ if (app != NULL) {
+ if (priv->progress_pulse_id != 0) {
+ g_source_remove (priv->progress_pulse_id);
+ priv->progress_pulse_id = 0;
+ }
+
+ if (gs_app_get_progress (app) == GS_APP_PROGRESS_UNKNOWN) {
+ priv->progress_pulse_id = g_timeout_add (50, _pulse_cb, self);
+ } else {
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progressbar),
+ (gdouble) gs_app_get_progress (app) / 100.0f);
+ }
+ }
+}
+
+static void
+gs_loading_page_refresh_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ GsLoadingPage *self = GS_LOADING_PAGE (user_data);
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+ g_autoptr(GError) error = NULL;
+
+ /* no longer care */
+ g_signal_handlers_disconnect_by_data (plugin_loader, self);
+
+ /* not sure how to handle this */
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to load metadata: %s", error->message);
+ }
+
+ /* no more pulsing */
+ if (priv->progress_pulse_id != 0) {
+ g_source_remove (priv->progress_pulse_id);
+ priv->progress_pulse_id = 0;
+ }
+
+ /* UI is good to go */
+ g_signal_emit (self, signals[SIGNAL_REFRESHED], 0);
+}
+
+static void
+gs_loading_page_load (GsLoadingPage *self)
+{
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GSettings) settings = NULL;
+ guint64 cache_age;
+
+ /* Ensure that at least some metadata of any age is present, and also
+ * spin up the plugins enough as to prime caches. If this is the first
+ * run of gnome-software, set the cache age to 24h to ensure that the
+ * metadata is refreshed if, for example, this is the first boot of a
+ * computer which has been in storage (after manufacture) for a while.
+ * Otherwise, set the cache age to the maximum, to only refresh if we’re
+ * completely missing app data — otherwise, we want to start up as fast
+ * as possible. */
+ settings = g_settings_new ("org.gnome.software");
+ if (g_settings_get_boolean (settings, "first-run"))
+ cache_age = 60 * 60 * 24; /* 24 hours */
+ else
+ cache_age = G_MAXUINT;
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", cache_age,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ priv->cancellable,
+ gs_loading_page_refresh_cb,
+ self);
+ g_signal_connect (priv->plugin_loader, "status-changed",
+ G_CALLBACK (gs_loading_page_status_changed_cb),
+ self);
+}
+
+static void
+gs_loading_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsLoadingPage *self = GS_LOADING_PAGE (page);
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+
+ if (gs_shell_get_mode (priv->shell) != GS_SHELL_MODE_LOADING) {
+ g_warning ("Called switch_to(loading) when in mode %s",
+ gs_shell_get_mode_string (priv->shell));
+ return;
+ }
+ gs_loading_page_load (self);
+}
+
+static gboolean
+gs_loading_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsLoadingPage *self = GS_LOADING_PAGE (page);
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+
+ g_return_val_if_fail (GS_IS_LOADING_PAGE (self), TRUE);
+
+ priv->shell = shell;
+ priv->plugin_loader = g_object_ref (plugin_loader);
+ priv->cancellable = g_object_ref (cancellable);
+ return TRUE;
+}
+
+static void
+gs_loading_page_dispose (GObject *object)
+{
+ GsLoadingPage *self = GS_LOADING_PAGE (object);
+ GsLoadingPagePrivate *priv = gs_loading_page_get_instance_private (self);
+
+ if (priv->progress_pulse_id != 0) {
+ g_source_remove (priv->progress_pulse_id);
+ priv->progress_pulse_id = 0;
+ }
+
+ g_clear_object (&priv->plugin_loader);
+ g_clear_object (&priv->cancellable);
+
+ G_OBJECT_CLASS (gs_loading_page_parent_class)->dispose (object);
+}
+
+static void
+gs_loading_page_class_init (GsLoadingPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_loading_page_dispose;
+ page_class->switch_to = gs_loading_page_switch_to;
+ page_class->setup = gs_loading_page_setup;
+
+ signals [SIGNAL_REFRESHED] =
+ g_signal_new ("refreshed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsLoadingPageClass, refreshed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-loading-page.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsLoadingPage, progressbar);
+ gtk_widget_class_bind_template_child_private (widget_class, GsLoadingPage, label);
+}
+
+static void
+gs_loading_page_init (GsLoadingPage *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+GsLoadingPage *
+gs_loading_page_new (void)
+{
+ GsLoadingPage *self;
+ self = g_object_new (GS_TYPE_LOADING_PAGE, NULL);
+ return GS_LOADING_PAGE (self);
+}
diff --git a/src/gs-loading-page.h b/src/gs-loading-page.h
new file mode 100644
index 0000000..7add3d9
--- /dev/null
+++ b/src/gs-loading-page.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_LOADING_PAGE (gs_loading_page_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsLoadingPage, gs_loading_page, GS, LOADING_PAGE, GsPage)
+
+struct _GsLoadingPageClass
+{
+ GsPageClass parent_class;
+
+ void (*refreshed) (GsLoadingPage *self);
+};
+
+GsLoadingPage *gs_loading_page_new (void);
+
+G_END_DECLS
diff --git a/src/gs-loading-page.ui b/src/gs-loading-page.ui
new file mode 100644
index 0000000..7120e5c
--- /dev/null
+++ b/src/gs-loading-page.ui
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsLoadingPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="loading-accessible">
+ <property name="accessible-name" translatable="yes">Loading page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">48</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child type="center">
+ <object class="GtkBox" id="centerbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="pixel_size">256</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="progressbar">
+ <property name="visible">True</property>
+ <property name="width_request">480</property>
+ <property name="halign">center</property>
+ <property name="fraction">0.0</property>
+ <property name="margin_top">8</property>
+ <style>
+ <class name="upgrade-progressbar"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Starting up…</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-main.c b/src/gs-main.c
new file mode 100644
index 0000000..76837ab
--- /dev/null
+++ b/src/gs-main.c
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2012-2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gio/gdesktopappinfo.h>
+#include <gtk/gtk.h>
+#include <locale.h>
+#include <sys/stat.h>
+
+#include "gs-application.h"
+#include "gs-debug.h"
+
+int
+main (int argc, char **argv)
+{
+ int status = 0;
+ g_autoptr(GDesktopAppInfo) appinfo = NULL;
+ g_autoptr(GsApplication) application = NULL;
+ g_autoptr(GsDebug) debug = gs_debug_new ();
+
+ g_set_prgname ("org.gnome.Software");
+ setlocale (LC_ALL, "");
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ /* Override the umask to 022 to make it possible to share files between
+ * the gnome-software process and flatpak system helper process.
+ * Ideally this should be set when needed in the flatpak plugin, but
+ * umask is thread-unsafe so there is really no local way to fix this.
+ */
+ umask (022);
+
+ /* redirect logs */
+ application = gs_application_new ();
+ appinfo = g_desktop_app_info_new ("org.gnome.Software.desktop");
+ g_set_application_name (g_app_info_get_name (G_APP_INFO (appinfo)));
+ status = g_application_run (G_APPLICATION (application), argc, argv);
+ return status;
+}
diff --git a/src/gs-metered-data-dialog.c b/src/gs-metered-data-dialog.c
new file mode 100644
index 0000000..9cd6698
--- /dev/null
+++ b/src/gs-metered-data-dialog.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright © 2020 Endless Mobile, Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+#include "gs-metered-data-dialog.h"
+
+struct _GsMeteredDataDialog
+{
+ GtkDialog parent_instance;
+
+ GtkWidget *button_network_settings;
+};
+
+G_DEFINE_TYPE (GsMeteredDataDialog, gs_metered_data_dialog, GTK_TYPE_DIALOG)
+
+static void
+button_network_settings_clicked_cb (GtkButton *button,
+ gpointer user_data)
+{
+ g_autoptr(GError) error_local = NULL;
+
+ if (!g_spawn_command_line_async ("gnome-control-center wifi", &error_local)) {
+ g_warning ("Error opening GNOME Control Center: %s",
+ error_local->message);
+ return;
+ }
+}
+
+static void
+gs_metered_data_dialog_init (GsMeteredDataDialog *dialog)
+{
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+}
+
+static void
+gs_metered_data_dialog_class_init (GsMeteredDataDialogClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-metered-data-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsMeteredDataDialog, button_network_settings);
+
+ gtk_widget_class_bind_template_callback (widget_class, button_network_settings_clicked_cb);
+}
+
+GtkWidget *
+gs_metered_data_dialog_new (GtkWindow *parent)
+{
+ GsMeteredDataDialog *dialog;
+
+ dialog = g_object_new (GS_TYPE_METERED_DATA_DIALOG,
+ "use-header-bar", TRUE,
+ "transient-for", parent,
+ "modal", TRUE,
+ NULL);
+
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-metered-data-dialog.h b/src/gs-metered-data-dialog.h
new file mode 100644
index 0000000..8219e9d
--- /dev/null
+++ b/src/gs-metered-data-dialog.h
@@ -0,0 +1,23 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright © 2020 Endless Mobile, Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_METERED_DATA_DIALOG (gs_metered_data_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsMeteredDataDialog, gs_metered_data_dialog, GS, METERED_DATA_DIALOG, GtkDialog)
+
+GtkWidget *gs_metered_data_dialog_new (GtkWindow *parent);
+
+G_END_DECLS
diff --git a/src/gs-metered-data-dialog.ui b/src/gs-metered-data-dialog.ui
new file mode 100644
index 0000000..def0243
--- /dev/null
+++ b/src/gs-metered-data-dialog.ui
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsMeteredDataDialog" parent="GtkDialog">
+ <property name="title" translatable="yes">Automatic Updates Paused</property>
+ <property name="modal">True</property>
+ <property name="destroy-with-parent">True</property>
+ <property name="resizable">False</property>
+ <property name="type-hint">dialog</property>
+ <property name="skip-taskbar-hint">True</property>
+ <property name="use-header-bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <child type="title">
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Automatic Updates Paused</property>
+ <property name="selectable">False</property>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="margin">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="justify">fill</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="label" translatable="yes">The current network is metered. Metered connections have data limits or charges associated with them. To save data, automatic updates have therefore been paused.
+
+Automatic updates will be resumed when an un­metered network becomes available. Until then, it is still possible to manually install updates.
+
+Alternatively, if the current network has been in­correctly identified as being metered, this setting can be changed.</property>
+ <property name="max-width-chars">40</property>
+ <property name="halign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <child type="center">
+ <object class="GtkButton" id="button_network_settings">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Open Network _Settings</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ <property name="use-underline">True</property>
+ <signal name="clicked" handler="button_network_settings_clicked_cb"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="fill">False</property>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-moderate-page.c b/src/gs-moderate-page.c
new file mode 100644
index 0000000..edd77aa
--- /dev/null
+++ b/src/gs-moderate-page.c
@@ -0,0 +1,340 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2016-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gs-app-row.h"
+#include "gs-review-row.h"
+#include "gs-shell.h"
+#include "gs-moderate-page.h"
+#include "gs-common.h"
+
+struct _GsModeratePage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GCancellable *cancellable;
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+ GtkSizeGroup *sizegroup_button;
+ GsShell *shell;
+
+ GtkWidget *list_box_install;
+ GtkWidget *scrolledwindow_install;
+ GtkWidget *spinner_install;
+ GtkWidget *stack_install;
+};
+
+G_DEFINE_TYPE (GsModeratePage, gs_moderate_page, GS_TYPE_PAGE)
+
+static void
+gs_moderate_page_app_set_review_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(GError) error = NULL;
+
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to set review: %s", error->message);
+ return;
+ }
+}
+
+static void
+gs_moderate_page_perhaps_hide_app_row (GsModeratePage *self, GsApp *app)
+{
+ GsAppRow *app_row = NULL;
+ gboolean is_visible = FALSE;
+ g_autoptr(GList) children = NULL;
+
+ children = gtk_container_get_children (GTK_CONTAINER (self->list_box_install));
+ for (GList *l = children; l != NULL; l = l->next) {
+ GtkWidget *w = GTK_WIDGET (l->data);
+ if (!gtk_widget_get_visible (w))
+ continue;
+ if (GS_IS_APP_ROW (w)) {
+ GsApp *app_tmp = gs_app_row_get_app (GS_APP_ROW (w));
+ if (g_strcmp0 (gs_app_get_id (app),
+ gs_app_get_id (app_tmp)) == 0) {
+ app_row = GS_APP_ROW (w);
+ continue;
+ }
+ }
+ if (GS_IS_REVIEW_ROW (w)) {
+ GsApp *app_tmp = g_object_get_data (G_OBJECT (w), "GsApp");
+ if (g_strcmp0 (gs_app_get_id (app),
+ gs_app_get_id (app_tmp)) == 0) {
+ is_visible = TRUE;
+ break;
+ }
+ }
+ }
+ if (!is_visible && app_row != NULL)
+ gs_app_row_unreveal (app_row);
+}
+
+static void
+gs_moderate_page_review_clicked_cb (GsReviewRow *row,
+ GsPluginAction action,
+ GsModeratePage *self)
+{
+ GsApp *app = g_object_get_data (G_OBJECT (row), "GsApp");
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (action,
+ "interactive", TRUE,
+ "app", app,
+ "review", gs_review_row_get_review (row),
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_moderate_page_app_set_review_cb,
+ self);
+ gtk_widget_set_visible (GTK_WIDGET (row), FALSE);
+
+ /* if there are no more visible rows, hide the app */
+ gs_moderate_page_perhaps_hide_app_row (self, app);
+}
+
+static void
+gs_moderate_page_selection_changed_cb (GtkListBox *listbox,
+ GsAppRow *app_row,
+ GsModeratePage *self)
+{
+ g_autofree gchar *tmp = NULL;
+ tmp = gs_app_to_string (gs_app_row_get_app (app_row));
+ g_print ("%s", tmp);
+}
+
+static void
+gs_moderate_page_add_app (GsModeratePage *self, GsApp *app)
+{
+ GPtrArray *reviews;
+ GtkWidget *app_row;
+ guint i;
+
+ /* this hides the action button */
+ gs_app_add_quirk (app, GS_APP_QUIRK_COMPULSORY);
+
+ /* add top level app */
+ app_row = gs_app_row_new (app);
+ gs_app_row_set_show_buttons (GS_APP_ROW (app_row), TRUE);
+ gtk_container_add (GTK_CONTAINER (self->list_box_install), app_row);
+ gs_app_row_set_size_groups (GS_APP_ROW (app_row),
+ self->sizegroup_image,
+ self->sizegroup_name,
+ self->sizegroup_desc,
+ self->sizegroup_button);
+
+ /* add reviews */
+ reviews = gs_app_get_reviews (app);
+ for (i = 0; i < reviews->len; i++) {
+ AsReview *review = g_ptr_array_index (reviews, i);
+ GtkWidget *row = gs_review_row_new (review);
+ gtk_widget_set_margin_start (row, 250);
+ gtk_widget_set_margin_end (row, 250);
+ gs_review_row_set_actions (GS_REVIEW_ROW (row),
+ 1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE |
+ 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE |
+ 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS |
+ 1 << GS_PLUGIN_ACTION_REVIEW_REPORT);
+ g_signal_connect (row, "button-clicked",
+ G_CALLBACK (gs_moderate_page_review_clicked_cb), self);
+ g_object_set_data_full (G_OBJECT (row), "GsApp",
+ g_object_ref (app),
+ (GDestroyNotify) g_object_unref);
+ gtk_container_add (GTK_CONTAINER (self->list_box_install), row);
+ }
+ gtk_widget_show (app_row);
+}
+
+static void
+gs_moderate_page_get_unvoted_reviews_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ guint i;
+ GsApp *app;
+ GsModeratePage *self = GS_MODERATE_PAGE (user_data);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ gs_stop_spinner (GTK_SPINNER (self->spinner_install));
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_install), "view");
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader,
+ res,
+ &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get moderate apps: %s", error->message);
+ return;
+ }
+
+ /* no results */
+ if (gs_app_list_length (list) == 0) {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_install),
+ "uptodate");
+ return;
+ }
+
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ gs_moderate_page_add_app (self, app);
+ }
+}
+
+static void
+gs_moderate_page_load (GsModeratePage *self)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* remove old entries */
+ gs_container_remove_all (GTK_CONTAINER (self->list_box_install));
+
+ /* get unvoted reviews as apps */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UNVOTED_REVIEWS,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEWS,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_moderate_page_get_unvoted_reviews_cb,
+ self);
+ gs_start_spinner (GTK_SPINNER (self->spinner_install));
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_install), "spinner");
+}
+
+static void
+gs_moderate_page_reload (GsPage *page)
+{
+ GsModeratePage *self = GS_MODERATE_PAGE (page);
+ if (gs_shell_get_mode (self->shell) == GS_SHELL_MODE_MODERATE)
+ gs_moderate_page_load (self);
+}
+
+static void
+gs_moderate_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsModeratePage *self = GS_MODERATE_PAGE (page);
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_MODERATE) {
+ g_warning ("Called switch_to(moderate) when in mode %s",
+ gs_shell_get_mode_string (self->shell));
+ return;
+ }
+ if (gs_shell_get_mode (self->shell) == GS_SHELL_MODE_MODERATE)
+ gs_grab_focus_when_mapped (self->scrolledwindow_install);
+ gs_moderate_page_load (self);
+}
+
+static void
+gs_moderate_page_list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header;
+ gtk_list_box_row_set_header (row, NULL);
+ if (before == NULL)
+ return;
+ if (GS_IS_REVIEW_ROW (before) && GS_IS_APP_ROW (row)) {
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+ }
+}
+
+static gboolean
+gs_moderate_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsModeratePage *self = GS_MODERATE_PAGE (page);
+ g_return_val_if_fail (GS_IS_MODERATE_PAGE (self), TRUE);
+
+ self->shell = shell;
+ self->plugin_loader = g_object_ref (plugin_loader);
+ self->cancellable = g_object_ref (cancellable);
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->list_box_install),
+ gs_moderate_page_list_header_func,
+ self, NULL);
+ return TRUE;
+}
+
+static void
+gs_moderate_page_dispose (GObject *object)
+{
+ GsModeratePage *self = GS_MODERATE_PAGE (object);
+
+ g_clear_object (&self->sizegroup_image);
+ g_clear_object (&self->sizegroup_name);
+ g_clear_object (&self->sizegroup_desc);
+ g_clear_object (&self->sizegroup_button);
+
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->cancellable);
+
+ G_OBJECT_CLASS (gs_moderate_page_parent_class)->dispose (object);
+}
+
+static void
+gs_moderate_page_class_init (GsModeratePageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_moderate_page_dispose;
+ page_class->switch_to = gs_moderate_page_switch_to;
+ page_class->reload = gs_moderate_page_reload;
+ page_class->setup = gs_moderate_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-moderate-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsModeratePage, list_box_install);
+ gtk_widget_class_bind_template_child (widget_class, GsModeratePage, scrolledwindow_install);
+ gtk_widget_class_bind_template_child (widget_class, GsModeratePage, spinner_install);
+ gtk_widget_class_bind_template_child (widget_class, GsModeratePage, stack_install);
+}
+
+static void
+gs_moderate_page_init (GsModeratePage *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ g_signal_connect (self->list_box_install, "row-activated",
+ G_CALLBACK (gs_moderate_page_selection_changed_cb), self);
+
+ self->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_button = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+}
+
+GsModeratePage *
+gs_moderate_page_new (void)
+{
+ GsModeratePage *self;
+ self = g_object_new (GS_TYPE_MODERATE_PAGE, NULL);
+ return GS_MODERATE_PAGE (self);
+}
diff --git a/src/gs-moderate-page.h b/src/gs-moderate-page.h
new file mode 100644
index 0000000..cce54d6
--- /dev/null
+++ b/src/gs-moderate-page.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_MODERATE_PAGE (gs_moderate_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsModeratePage, gs_moderate_page, GS, MODERATE_PAGE, GsPage)
+
+GsModeratePage *gs_moderate_page_new (void);
+
+G_END_DECLS
diff --git a/src/gs-moderate-page.ui b/src/gs-moderate-page.ui
new file mode 100644
index 0000000..fafe6d4
--- /dev/null
+++ b/src/gs-moderate-page.ui
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsModeratePage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="moderate-accessible">
+ <property name="accessible-name" translatable="yes">Moderate page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack_install">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSpinner" id="spinner_install">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_install">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <property name="preferred-width">860</property>
+ <child>
+ <object class="GtkListBox" id="list_box_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">view</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="updates_uptodate_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">48</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child type="center">
+ <object class="GtkBox" id="updates_uptodate_centerbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image_updates">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">object-select-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">There are no reviews to moderate</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">uptodate</property>
+ </packing>
+ </child>
+
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-origin-popover-row.c b/src/gs-origin-popover-row.c
new file mode 100644
index 0000000..43e1193
--- /dev/null
+++ b/src/gs-origin-popover-row.c
@@ -0,0 +1,202 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-origin-popover-row.h"
+
+#include <glib/gi18n.h>
+
+typedef struct
+{
+ GsApp *app;
+ GtkWidget *name_label;
+ GtkWidget *url_box;
+ GtkWidget *url_title;
+ GtkWidget *url_label;
+ GtkWidget *format_box;
+ GtkWidget *format_title;
+ GtkWidget *format_label;
+ GtkWidget *installation_box;
+ GtkWidget *installation_title;
+ GtkWidget *installation_label;
+ GtkWidget *branch_box;
+ GtkWidget *branch_title;
+ GtkWidget *branch_label;
+ GtkWidget *version_box;
+ GtkWidget *version_title;
+ GtkWidget *version_label;
+ GtkWidget *selected_image;
+} GsOriginPopoverRowPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsOriginPopoverRow, gs_origin_popover_row, GTK_TYPE_LIST_BOX_ROW)
+
+static void
+refresh_ui (GsOriginPopoverRow *row)
+{
+ GsOriginPopoverRowPrivate *priv = gs_origin_popover_row_get_instance_private (row);
+ g_autofree gchar *origin_ui = NULL;
+ g_autofree gchar *packaging_format = NULL;
+ g_autofree gchar *url = NULL;
+
+ g_assert (GS_IS_ORIGIN_POPOVER_ROW (row));
+ g_assert (GS_IS_APP (priv->app));
+
+ origin_ui = gs_app_get_origin_ui (priv->app);
+ if (origin_ui != NULL) {
+ gtk_label_set_text (GTK_LABEL (priv->name_label), origin_ui);
+ }
+
+ if (gs_app_get_state (priv->app) == AS_APP_STATE_AVAILABLE_LOCAL) {
+ GFile *local_file = gs_app_get_local_file (priv->app);
+ url = g_file_get_basename (local_file);
+ /* TRANSLATORS: This is followed by a file name, e.g. "Name: gedit.rpm" */
+ gtk_label_set_text (GTK_LABEL (priv->url_title), _("Name"));
+ } else {
+ url = g_strdup (gs_app_get_origin_hostname (priv->app));
+ }
+
+ if (url != NULL) {
+ gtk_label_set_text (GTK_LABEL (priv->url_label), url);
+ gtk_widget_show (priv->url_box);
+ } else {
+ gtk_widget_hide (priv->url_box);
+ }
+
+ packaging_format = gs_app_get_packaging_format (priv->app);
+ if (packaging_format != NULL) {
+ gtk_label_set_text (GTK_LABEL (priv->format_label), packaging_format);
+ gtk_widget_show (priv->format_box);
+ } else {
+ gtk_widget_hide (priv->format_box);
+ }
+
+ if (gs_app_get_bundle_kind (priv->app) == AS_BUNDLE_KIND_FLATPAK &&
+ gs_app_get_scope (priv->app) != AS_APP_SCOPE_UNKNOWN) {
+ AsAppScope scope = gs_app_get_scope (priv->app);
+ if (scope == AS_APP_SCOPE_SYSTEM) {
+ /* TRANSLATORS: the installation location for flatpaks */
+ gtk_label_set_text (GTK_LABEL (priv->installation_label), _("system"));
+ } else if (scope == AS_APP_SCOPE_USER) {
+ /* TRANSLATORS: the installation location for flatpaks */
+ gtk_label_set_text (GTK_LABEL (priv->installation_label), _("user"));
+ }
+ gtk_widget_show (priv->installation_box);
+ } else {
+ gtk_widget_hide (priv->installation_box);
+ }
+
+ if (gs_app_get_branch (priv->app) != NULL) {
+ gtk_label_set_text (GTK_LABEL (priv->branch_label), gs_app_get_branch (priv->app));
+ gtk_widget_show (priv->branch_box);
+ } else {
+ gtk_widget_hide (priv->branch_box);
+ }
+
+ if (gs_app_get_bundle_kind (priv->app) == AS_BUNDLE_KIND_SNAP) {
+ /* TRANSLATORS: the title for Snap channels */
+ gtk_label_set_text (GTK_LABEL (priv->branch_title), _("Channel"));
+ gtk_label_set_text (GTK_LABEL (priv->version_label), gs_app_get_version (priv->app));
+ gtk_widget_show (priv->version_box);
+ } else {
+ /* TRANSLATORS: the title for Flatpak branches */
+ gtk_label_set_text (GTK_LABEL (priv->branch_title), _("Branch"));
+ gtk_widget_hide (priv->version_box);
+ }
+}
+
+static void
+gs_origin_popover_row_set_app (GsOriginPopoverRow *row, GsApp *app)
+{
+ GsOriginPopoverRowPrivate *priv = gs_origin_popover_row_get_instance_private (row);
+
+ g_assert (priv->app == NULL);
+
+ priv->app = g_object_ref (app);
+ refresh_ui (row);
+}
+
+GsApp *
+gs_origin_popover_row_get_app (GsOriginPopoverRow *row)
+{
+ GsOriginPopoverRowPrivate *priv = gs_origin_popover_row_get_instance_private (row);
+ return priv->app;
+}
+
+void
+gs_origin_popover_row_set_selected (GsOriginPopoverRow *row, gboolean selected)
+{
+ GsOriginPopoverRowPrivate *priv = gs_origin_popover_row_get_instance_private (row);
+
+ gtk_widget_set_visible (priv->selected_image, selected);
+}
+
+void
+gs_origin_popover_row_set_size_group (GsOriginPopoverRow *row, GtkSizeGroup *size_group)
+{
+ GsOriginPopoverRowPrivate *priv = gs_origin_popover_row_get_instance_private (row);
+
+ gtk_size_group_add_widget (size_group, priv->url_title);
+ gtk_size_group_add_widget (size_group, priv->format_title);
+ gtk_size_group_add_widget (size_group, priv->installation_title);
+ gtk_size_group_add_widget (size_group, priv->branch_title);
+ gtk_size_group_add_widget (size_group, priv->version_title);
+}
+
+static void
+gs_origin_popover_row_destroy (GtkWidget *object)
+{
+ GsOriginPopoverRow *row = GS_ORIGIN_POPOVER_ROW (object);
+ GsOriginPopoverRowPrivate *priv = gs_origin_popover_row_get_instance_private (row);
+
+ g_clear_object (&priv->app);
+
+ GTK_WIDGET_CLASS (gs_origin_popover_row_parent_class)->destroy (object);
+}
+
+static void
+gs_origin_popover_row_init (GsOriginPopoverRow *row)
+{
+ gtk_widget_init_template (GTK_WIDGET (row));
+}
+
+static void
+gs_origin_popover_row_class_init (GsOriginPopoverRowClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ widget_class->destroy = gs_origin_popover_row_destroy;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-origin-popover-row.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, name_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, url_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, url_title);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, url_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, format_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, format_title);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, format_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, installation_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, installation_title);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, installation_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, branch_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, branch_title);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, branch_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, version_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, version_title);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, version_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOriginPopoverRow, selected_image);
+}
+
+GtkWidget *
+gs_origin_popover_row_new (GsApp *app)
+{
+ GsOriginPopoverRow *row = g_object_new (GS_TYPE_ORIGIN_POPOVER_ROW, NULL);
+ gs_origin_popover_row_set_app (row, app);
+ return GTK_WIDGET (row);
+}
diff --git a/src/gs-origin-popover-row.h b/src/gs-origin-popover-row.h
new file mode 100644
index 0000000..2368b04
--- /dev/null
+++ b/src/gs-origin-popover-row.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gnome-software-private.h"
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_ORIGIN_POPOVER_ROW (gs_origin_popover_row_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsOriginPopoverRow, gs_origin_popover_row, GS, ORIGIN_POPOVER_ROW, GtkListBoxRow)
+
+struct _GsOriginPopoverRowClass
+{
+ GtkListBoxRowClass parent_class;
+};
+
+GtkWidget *gs_origin_popover_row_new (GsApp *app);
+GsApp *gs_origin_popover_row_get_app (GsOriginPopoverRow *row);
+void gs_origin_popover_row_set_selected (GsOriginPopoverRow *row,
+ gboolean selected);
+void gs_origin_popover_row_set_size_group (GsOriginPopoverRow *row,
+ GtkSizeGroup *size_group);
+
+G_END_DECLS
diff --git a/src/gs-origin-popover-row.ui b/src/gs-origin-popover-row.ui
new file mode 100644
index 0000000..3fd4eb0
--- /dev/null
+++ b/src/gs-origin-popover-row.ui
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GsOriginPopoverRow" parent="GtkListBoxRow">
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="margin-top">18</property>
+ <property name="margin-bottom">18</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">18</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="url_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="url_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">URL</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="url_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="format_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="format_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: The packaging format of the app being installed, e.g. 'RPM' or 'Flatpak'">Format</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="format_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="installation_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="installation_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: The installation location for flatpaks, e.g. 'user' or 'system'">Installation</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="installation_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="branch_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="branch_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: The branch, e.g. 'stable' or '3.32'">Branch</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="branch_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="version_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="version_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: The available version of an app">Version</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="version_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="app-row-origin-text"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="selected_image">
+ <property name="visible">False</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">object-select-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-overview-page.c b/src/gs-overview-page.c
new file mode 100644
index 0000000..36b6610
--- /dev/null
+++ b/src/gs-overview-page.c
@@ -0,0 +1,1061 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <math.h>
+
+#include "gs-shell.h"
+#include "gs-overview-page.h"
+#include "gs-app-list-private.h"
+#include "gs-popular-tile.h"
+#include "gs-feature-tile.h"
+#include "gs-category-tile.h"
+#include "gs-hiding-box.h"
+#include "gs-common.h"
+
+#define N_TILES 9
+#define FEATURED_ROTATE_TIME 30 /* seconds */
+
+typedef struct
+{
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *cancellable;
+ gboolean cache_valid;
+ GsShell *shell;
+ gint action_cnt;
+ gboolean loading_featured;
+ gboolean loading_popular;
+ gboolean loading_recent;
+ gboolean loading_popular_rotating;
+ gboolean loading_categories;
+ gboolean empty;
+ gchar *category_of_day;
+ GHashTable *category_hash; /* id : GsCategory */
+ GSettings *settings;
+ GsApp *third_party_repo;
+ guint featured_rotate_timer_id;
+
+ GtkWidget *infobar_third_party;
+ GtkWidget *label_third_party;
+ GtkWidget *overlay;
+ GtkWidget *stack_featured;
+ GtkWidget *button_featured_back;
+ GtkWidget *button_featured_forwards;
+ GtkWidget *box_overview;
+ GtkWidget *box_popular;
+ GtkWidget *box_popular_rotating;
+ GtkWidget *box_recent;
+ GtkWidget *category_heading;
+ GtkWidget *flowbox_categories;
+ GtkWidget *popular_heading;
+ GtkWidget *recent_heading;
+ GtkWidget *scrolledwindow_overview;
+ GtkWidget *stack_overview;
+} GsOverviewPagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsOverviewPage, gs_overview_page, GS_TYPE_PAGE)
+
+enum {
+ SIGNAL_REFRESHED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+typedef struct {
+ GsCategory *category;
+ GsOverviewPage *self;
+ const gchar *title;
+} LoadData;
+
+static void
+load_data_free (LoadData *data)
+{
+ if (data->category != NULL)
+ g_object_unref (data->category);
+ if (data->self != NULL)
+ g_object_unref (data->self);
+ g_slice_free (LoadData, data);
+}
+
+static void
+gs_overview_page_invalidate (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+
+ priv->cache_valid = FALSE;
+}
+
+static void
+app_tile_clicked (GsAppTile *tile, gpointer data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (data);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsApp *app;
+
+ app = gs_app_tile_get_app (tile);
+ gs_shell_show_app (priv->shell, app);
+}
+
+static gboolean
+filter_category (GsApp *app, gpointer user_data)
+{
+ const gchar *category = (const gchar *) user_data;
+
+ return !gs_app_has_category (app, category);
+}
+
+static void
+gs_overview_page_decrement_action_cnt (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+
+ /* every job increments this */
+ if (priv->action_cnt == 0) {
+ g_warning ("action_cnt already zero!");
+ return;
+ }
+ if (--priv->action_cnt > 0)
+ return;
+
+ /* all done */
+ priv->cache_valid = TRUE;
+ g_signal_emit (self, signals[SIGNAL_REFRESHED], 0);
+ priv->loading_categories = FALSE;
+ priv->loading_featured = FALSE;
+ priv->loading_popular = FALSE;
+ priv->loading_recent = FALSE;
+ priv->loading_popular_rotating = FALSE;
+}
+
+static void
+gs_overview_page_get_popular_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (user_data);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ guint i;
+ GsApp *app;
+ GtkWidget *tile;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get popular apps */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get popular apps: %s", error->message);
+ goto out;
+ }
+
+ /* not enough to show */
+ if (gs_app_list_length (list) < N_TILES) {
+ g_warning ("Only %u apps for popular list, hiding",
+ gs_app_list_length (list));
+ gtk_widget_set_visible (priv->box_popular, FALSE);
+ gtk_widget_set_visible (priv->popular_heading, FALSE);
+ goto out;
+ }
+
+ /* Don't show apps from the category that's currently featured as the category of the day */
+ gs_app_list_filter (list, filter_category, priv->category_of_day);
+ gs_app_list_randomize (list);
+
+ gs_container_remove_all (GTK_CONTAINER (priv->box_popular));
+
+ for (i = 0; i < gs_app_list_length (list) && i < N_TILES; i++) {
+ app = gs_app_list_index (list, i);
+ tile = gs_popular_tile_new (app);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_container_add (GTK_CONTAINER (priv->box_popular), tile);
+ }
+ gtk_widget_set_visible (priv->box_popular, TRUE);
+ gtk_widget_set_visible (priv->popular_heading, TRUE);
+
+ priv->empty = FALSE;
+
+out:
+ gs_overview_page_decrement_action_cnt (self);
+}
+
+static void
+gs_overview_page_get_recent_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (user_data);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ guint i;
+ GsApp *app;
+ GtkWidget *tile;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get recent apps */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get recent apps: %s", error->message);
+ goto out;
+ }
+
+ /* not enough to show */
+ if (gs_app_list_length (list) < N_TILES) {
+ g_warning ("Only %u apps for recent list, hiding",
+ gs_app_list_length (list));
+ gtk_widget_set_visible (priv->box_recent, FALSE);
+ gtk_widget_set_visible (priv->recent_heading, FALSE);
+ goto out;
+ }
+
+ /* Don't show apps from the category that's currently featured as the category of the day */
+ gs_app_list_filter (list, filter_category, priv->category_of_day);
+ gs_app_list_randomize (list);
+
+ gs_container_remove_all (GTK_CONTAINER (priv->box_recent));
+
+ for (i = 0; i < gs_app_list_length (list) && i < N_TILES; i++) {
+ app = gs_app_list_index (list, i);
+ tile = gs_popular_tile_new (app);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_container_add (GTK_CONTAINER (priv->box_recent), tile);
+ }
+ gtk_widget_set_visible (priv->box_recent, TRUE);
+ gtk_widget_set_visible (priv->recent_heading, TRUE);
+
+ priv->empty = FALSE;
+
+out:
+ gs_overview_page_decrement_action_cnt (self);
+}
+
+static void
+gs_overview_page_category_more_cb (GtkButton *button, GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsCategory *cat;
+ const gchar *id;
+
+ id = g_object_get_data (G_OBJECT (button), "GnomeSoftware::CategoryId");
+ if (id == NULL)
+ return;
+ cat = g_hash_table_lookup (priv->category_hash, id);
+ if (cat == NULL)
+ return;
+ gs_shell_show_category (priv->shell, cat);
+}
+
+static void
+gs_overview_page_get_category_apps_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ LoadData *load_data = (LoadData *) user_data;
+ GsOverviewPage *self = load_data->self;
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ guint i;
+ GsApp *app;
+ GtkWidget *box;
+ GtkWidget *button;
+ GtkWidget *headerbox;
+ GtkWidget *label;
+ GtkWidget *tile;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get popular apps */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ goto out;
+ g_warning ("failed to get category %s featured applications: %s",
+ gs_category_get_id (load_data->category),
+ error->message);
+ goto out;
+ } else if (gs_app_list_length (list) < N_TILES) {
+ g_warning ("hiding category %s featured applications: "
+ "found only %u to show, need at least %d",
+ gs_category_get_id (load_data->category),
+ gs_app_list_length (list), N_TILES);
+ goto out;
+ }
+ gs_app_list_randomize (list);
+
+ /* add header */
+ headerbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 9);
+ gtk_widget_set_visible (headerbox, TRUE);
+
+ /* add label */
+ label = gtk_label_new (load_data->title);
+ gtk_widget_set_visible (label, TRUE);
+ gtk_label_set_xalign (GTK_LABEL (label), 0.f);
+ gtk_widget_set_margin_top (label, 24);
+ gtk_widget_set_margin_bottom (label, 6);
+ gtk_widget_set_hexpand (label, TRUE);
+ gtk_style_context_add_class (gtk_widget_get_style_context (label),
+ "index-title-alignment-software");
+ gtk_container_add (GTK_CONTAINER (headerbox), label);
+
+ /* add button */
+ button = gtk_button_new_with_label (_("More…"));
+ gtk_style_context_add_class (gtk_widget_get_style_context (button),
+ "overview-more-button");
+ g_object_set_data_full (G_OBJECT (button), "GnomeSoftware::CategoryId",
+ g_strdup (gs_category_get_id (load_data->category)),
+ g_free);
+ gtk_widget_set_visible (button, TRUE);
+ gtk_widget_set_valign (button, GTK_ALIGN_END);
+ gtk_widget_set_margin_bottom (button, 9);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (gs_overview_page_category_more_cb), self);
+ gtk_container_add (GTK_CONTAINER (headerbox), button);
+ gtk_container_add (GTK_CONTAINER (priv->box_popular_rotating), headerbox);
+
+ /* add hiding box */
+ box = gs_hiding_box_new ();
+ gs_hiding_box_set_spacing (GS_HIDING_BOX (box), 14);
+ gtk_widget_set_visible (box, TRUE);
+ gtk_widget_set_valign (box, GTK_ALIGN_START);
+ gtk_container_add (GTK_CONTAINER (priv->box_popular_rotating), box);
+
+ /* add all the apps */
+ for (i = 0; i < gs_app_list_length (list) && i < N_TILES; i++) {
+ app = gs_app_list_index (list, i);
+ tile = gs_popular_tile_new (app);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_container_add (GTK_CONTAINER (box), tile);
+ }
+
+ priv->empty = FALSE;
+
+out:
+ load_data_free (load_data);
+ gs_overview_page_decrement_action_cnt (self);
+}
+
+static void
+_feature_banner_forward (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GtkWidget *visible_child;
+ GtkWidget *next_child = NULL;
+ GList *banner_link;
+ g_autoptr(GList) banners = NULL;
+
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (priv->stack_featured));
+ banners = gtk_container_get_children (GTK_CONTAINER (priv->stack_featured));
+ if (banners == NULL)
+ return;
+
+ /* find banner after the currently visible one */
+ for (banner_link = banners; banner_link != NULL; banner_link = banner_link->next) {
+ GtkWidget *child = banner_link->data;
+ if (child == visible_child) {
+ if (banner_link->next != NULL)
+ next_child = banner_link->next->data;
+ break;
+ }
+ }
+ if (next_child == NULL)
+ next_child = g_list_first(banners)->data;
+ gtk_stack_set_visible_child (GTK_STACK (priv->stack_featured), next_child);
+}
+
+static void
+_feature_banner_back (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GtkWidget *visible_child;
+ GtkWidget *next_child = NULL;
+ GList *banner_link;
+ g_autoptr(GList) banners = NULL;
+
+ visible_child = gtk_stack_get_visible_child (GTK_STACK (priv->stack_featured));
+ banners = gtk_container_get_children (GTK_CONTAINER (priv->stack_featured));
+ if (banners == NULL)
+ return;
+
+ /* find banner before the currently visible one */
+ for (banner_link = banners; banner_link != NULL; banner_link = banner_link->next) {
+ GtkWidget *child = banner_link->data;
+ if (child == visible_child) {
+ if (banner_link->prev != NULL)
+ next_child = banner_link->prev->data;
+ break;
+ }
+ }
+ if (next_child == NULL)
+ next_child = g_list_last(banners)->data;
+ gtk_stack_set_visible_child (GTK_STACK (priv->stack_featured), next_child);
+}
+
+static gboolean
+gs_overview_page_featured_rotate_cb (gpointer user_data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (user_data);
+ _feature_banner_forward (self);
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+featured_reset_rotate_timer (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ if (priv->featured_rotate_timer_id != 0)
+ g_source_remove (priv->featured_rotate_timer_id);
+ priv->featured_rotate_timer_id = g_timeout_add_seconds (FEATURED_ROTATE_TIME,
+ gs_overview_page_featured_rotate_cb,
+ self);
+}
+
+static void
+_featured_back_clicked_cb (GsCategoryTile *tile, gpointer data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (data);
+ _feature_banner_back (self);
+}
+
+static void
+_featured_forward_clicked_cb (GsCategoryTile *tile, gpointer data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (data);
+ _feature_banner_forward (self);
+}
+
+static void
+gs_overview_page_get_featured_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (user_data);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ goto out;
+
+ if (priv->featured_rotate_timer_id != 0) {
+ g_source_remove (priv->featured_rotate_timer_id);
+ priv->featured_rotate_timer_id = 0;
+ }
+
+ gs_container_remove_all (GTK_CONTAINER (priv->stack_featured));
+ gtk_widget_set_visible (priv->overlay, gs_app_list_length (list) > 0);
+ gtk_widget_set_visible (priv->button_featured_back, gs_app_list_length (list) > 1);
+ gtk_widget_set_visible (priv->button_featured_forwards, gs_app_list_length (list) > 1);
+ if (list == NULL) {
+ g_warning ("failed to get featured apps: %s",
+ error->message);
+ goto out;
+ }
+ if (gs_app_list_length (list) == 0) {
+ g_warning ("failed to get featured apps: "
+ "no apps to show");
+ goto out;
+ }
+
+ if (g_getenv ("GNOME_SOFTWARE_FEATURED") == NULL) {
+ /* Don't show apps from the category that's currently featured as the category of the day */
+ gs_app_list_filter (list, filter_category, priv->category_of_day);
+ gs_app_list_filter_duplicates (list, GS_APP_LIST_FILTER_FLAG_KEY_ID);
+ gs_app_list_randomize (list);
+ }
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GtkWidget *tile = gs_feature_tile_new (app);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (app_tile_clicked), self);
+ gtk_container_add (GTK_CONTAINER (priv->stack_featured), tile);
+ }
+
+ priv->empty = FALSE;
+ featured_reset_rotate_timer (self);
+
+out:
+ gs_overview_page_decrement_action_cnt (self);
+}
+
+static void
+category_tile_clicked (GsCategoryTile *tile, gpointer data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (data);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsCategory *category;
+
+ category = gs_category_tile_get_category (tile);
+ gs_shell_show_category (priv->shell, category);
+}
+
+static void
+gs_overview_page_get_categories_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (user_data);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ guint i;
+ GsCategory *cat;
+ GtkFlowBox *flowbox;
+ GtkWidget *tile;
+ guint added_cnt = 0;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GPtrArray) list = NULL;
+
+ list = gs_plugin_loader_job_get_categories_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get categories: %s", error->message);
+ goto out;
+ }
+ gs_container_remove_all (GTK_CONTAINER (priv->flowbox_categories));
+
+ /* add categories to the correct flowboxes, the second being hidden */
+ for (i = 0; i < list->len; i++) {
+ cat = GS_CATEGORY (g_ptr_array_index (list, i));
+ if (gs_category_get_size (cat) == 0)
+ continue;
+ tile = gs_category_tile_new (cat);
+ g_signal_connect (tile, "clicked",
+ G_CALLBACK (category_tile_clicked), self);
+ flowbox = GTK_FLOW_BOX (priv->flowbox_categories);
+ gtk_flow_box_insert (flowbox, tile, -1);
+ gtk_widget_set_can_focus (gtk_widget_get_parent (tile), FALSE);
+ added_cnt++;
+
+ /* we save these for the 'More...' buttons */
+ g_hash_table_insert (priv->category_hash,
+ g_strdup (gs_category_get_id (cat)),
+ g_object_ref (cat));
+ }
+
+out:
+ if (added_cnt > 0)
+ priv->empty = FALSE;
+ gtk_widget_set_visible (priv->category_heading, added_cnt > 0);
+
+ gs_overview_page_decrement_action_cnt (self);
+}
+
+static const gchar *
+gs_overview_page_get_category_label (const gchar *id)
+{
+ if (g_strcmp0 (id, "audio-video") == 0) {
+ /* TRANSLATORS: this is a heading for audio applications which
+ * have been featured ('recommended') by the distribution */
+ return _("Recommended Audio & Video Applications");
+ }
+ if (g_strcmp0 (id, "games") == 0) {
+ /* TRANSLATORS: this is a heading for games which have been
+ * featured ('recommended') by the distribution */
+ return _("Recommended Games");
+ }
+ if (g_strcmp0 (id, "graphics") == 0) {
+ /* TRANSLATORS: this is a heading for graphics applications
+ * which have been featured ('recommended') by the distribution */
+ return _("Recommended Graphics Applications");
+ }
+ if (g_strcmp0 (id, "productivity") == 0) {
+ /* TRANSLATORS: this is a heading for office applications which
+ * have been featured ('recommended') by the distribution */
+ return _("Recommended Productivity Applications");
+ }
+ return NULL;
+}
+
+static GPtrArray *
+gs_overview_page_get_random_categories (void)
+{
+ GPtrArray *cats;
+ guint i;
+ g_autoptr(GDateTime) date = NULL;
+ g_autoptr(GRand) rand = NULL;
+ const gchar *ids[] = { "audio-video",
+ "games",
+ "graphics",
+ "productivity",
+ NULL };
+
+ date = g_date_time_new_now_utc ();
+ rand = g_rand_new_with_seed ((guint32) g_date_time_get_day_of_year (date));
+ cats = g_ptr_array_new_with_free_func (g_free);
+ for (i = 0; ids[i] != NULL; i++)
+ g_ptr_array_add (cats, g_strdup (ids[i]));
+ for (i = 0; i < powl (cats->len + 1, 2); i++) {
+ gpointer tmp;
+ guint rnd1 = (guint) g_rand_int_range (rand, 0, (gint32) cats->len);
+ guint rnd2 = (guint) g_rand_int_range (rand, 0, (gint32) cats->len);
+ if (rnd1 == rnd2)
+ continue;
+ tmp = cats->pdata[rnd1];
+ cats->pdata[rnd1] = cats->pdata[rnd2];
+ cats->pdata[rnd2] = tmp;
+ }
+ for (i = 0; i < cats->len; i++) {
+ const gchar *tmp = g_ptr_array_index (cats, i);
+ g_debug ("%u = %s", i + 1, tmp);
+ }
+ return cats;
+}
+
+static void
+refresh_third_party_repo (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+
+ /* only show if never prompted and third party repo is available */
+ if (g_settings_get_boolean (priv->settings, "show-nonfree-prompt") &&
+ priv->third_party_repo != NULL &&
+ gs_app_get_state (priv->third_party_repo) == AS_APP_STATE_AVAILABLE) {
+ gtk_widget_set_visible (priv->infobar_third_party, TRUE);
+ } else {
+ gtk_widget_set_visible (priv->infobar_third_party, FALSE);
+ }
+}
+
+static void
+resolve_third_party_repo_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get the results */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("resolve third party repo cancelled");
+ return;
+ } else {
+ g_warning ("failed to resolve third party repo: %s", error->message);
+ return;
+ }
+ }
+
+ /* save results for later */
+ g_clear_object (&priv->third_party_repo);
+ if (gs_app_list_length (list) > 0)
+ priv->third_party_repo = g_object_ref (gs_app_list_index (list, 0));
+
+ /* refresh widget */
+ refresh_third_party_repo (self);
+}
+
+static gboolean
+is_fedora (void)
+{
+ const gchar *id = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+
+ os_release = gs_os_release_new (NULL);
+ if (os_release == NULL)
+ return FALSE;
+
+ id = gs_os_release_get_id (os_release);
+ if (g_strcmp0 (id, "fedora") == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void
+reload_third_party_repo (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ const gchar *third_party_repo_package = "fedora-workstation-repositories";
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* only show if never prompted */
+ if (!g_settings_get_boolean (priv->settings, "show-nonfree-prompt"))
+ return;
+
+ /* Fedora-specific functionality */
+ if (!is_fedora ())
+ return;
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH_PROVIDES,
+ "search", third_party_repo_package,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ priv->cancellable,
+ (GAsyncReadyCallback) resolve_third_party_repo_cb,
+ self);
+}
+
+static void
+gs_overview_page_load (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ guint i;
+
+ priv->empty = TRUE;
+
+ if (!priv->loading_featured) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ priv->loading_featured = TRUE;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_FEATURED,
+ "max-results", 5,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader,
+ plugin_job,
+ priv->cancellable,
+ gs_overview_page_get_featured_cb,
+ self);
+ priv->action_cnt++;
+ }
+
+ if (!priv->loading_popular) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ priv->loading_popular = TRUE;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_POPULAR,
+ "max-results", 20,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_CATEGORIES |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader,
+ plugin_job,
+ priv->cancellable,
+ gs_overview_page_get_popular_cb,
+ self);
+ priv->action_cnt++;
+ }
+
+ if (!priv->loading_recent) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ priv->loading_recent = TRUE;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_RECENT,
+ "age", (guint64) (60 * 60 * 24 * 60),
+ "max-results", 20,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader,
+ plugin_job,
+ priv->cancellable,
+ gs_overview_page_get_recent_cb,
+ self);
+ priv->action_cnt++;
+ }
+
+ if (!priv->loading_popular_rotating) {
+ const guint MAX_CATS = 2;
+ g_autoptr(GPtrArray) cats_random = NULL;
+ cats_random = gs_overview_page_get_random_categories ();
+
+ /* remove existing widgets, if any */
+ gs_container_remove_all (GTK_CONTAINER (priv->box_popular_rotating));
+
+ /* load all the categories */
+ for (i = 0; i < cats_random->len && i < MAX_CATS; i++) {
+ LoadData *load_data;
+ const gchar *cat_id;
+ g_autoptr(GsCategory) category = NULL;
+ g_autoptr(GsCategory) featured_category = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ cat_id = g_ptr_array_index (cats_random, i);
+ if (i == 0) {
+ g_free (priv->category_of_day);
+ priv->category_of_day = g_strdup (cat_id);
+ }
+ category = gs_category_new (cat_id);
+ featured_category = gs_category_new ("featured");
+ gs_category_add_child (category, featured_category);
+
+ load_data = g_slice_new0 (LoadData);
+ load_data->category = g_object_ref (category);
+ load_data->self = g_object_ref (self);
+ load_data->title = gs_overview_page_get_category_label (cat_id);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_CATEGORY_APPS,
+ "max-results", 20,
+ "category", featured_category,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader,
+ plugin_job,
+ priv->cancellable,
+ gs_overview_page_get_category_apps_cb,
+ load_data);
+ priv->action_cnt++;
+ }
+ priv->loading_popular_rotating = TRUE;
+ }
+
+ if (!priv->loading_categories) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ priv->loading_categories = TRUE;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_CATEGORIES, NULL);
+ gs_plugin_loader_job_get_categories_async (priv->plugin_loader, plugin_job,
+ priv->cancellable,
+ gs_overview_page_get_categories_cb,
+ self);
+ priv->action_cnt++;
+ }
+
+ reload_third_party_repo (self);
+}
+
+static void
+gs_overview_page_reload (GsPage *page)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (page);
+ gs_overview_page_invalidate (self);
+ gs_overview_page_load (self);
+}
+
+static void
+gs_overview_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (page);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GtkWidget *widget;
+ GtkAdjustment *adj;
+
+ if (gs_shell_get_mode (priv->shell) != GS_SHELL_MODE_OVERVIEW) {
+ g_warning ("Called switch_to(overview) when in mode %s",
+ gs_shell_get_mode_string (priv->shell));
+ return;
+ }
+
+ /* we hid the search bar */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_button"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main"));
+ gtk_widget_show (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "menu_button"));
+ gtk_widget_show (widget);
+
+ if (scroll_up) {
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolledwindow_overview));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+ }
+
+ gs_grab_focus_when_mapped (priv->scrolledwindow_overview);
+
+ if (priv->cache_valid || priv->action_cnt > 0)
+ return;
+ gs_overview_page_load (self);
+}
+
+static void
+third_party_response_cb (GtkInfoBar *info_bar,
+ gint response_id,
+ GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ g_settings_set_boolean (priv->settings, "show-nonfree-prompt", FALSE);
+ if (response_id == GTK_RESPONSE_CLOSE) {
+ gtk_widget_hide (priv->infobar_third_party);
+ return;
+ }
+ if (response_id != GTK_RESPONSE_YES)
+ return;
+
+ if (gs_app_get_state (priv->third_party_repo) == AS_APP_STATE_AVAILABLE) {
+ gs_page_install_app (GS_PAGE (self), priv->third_party_repo,
+ GS_SHELL_INTERACTION_FULL,
+ priv->cancellable);
+ }
+
+ refresh_third_party_repo (self);
+}
+
+static gboolean
+gs_overview_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (page);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ GtkAdjustment *adj;
+ GtkWidget *tile;
+ gint i;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ g_return_val_if_fail (GS_IS_OVERVIEW_PAGE (self), TRUE);
+
+ priv->plugin_loader = g_object_ref (plugin_loader);
+ priv->builder = g_object_ref (builder);
+ priv->cancellable = g_object_ref (cancellable);
+ priv->category_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) g_object_unref);
+
+ g_string_append (str,
+ /* TRANSLATORS: this is the third party repositories info bar. */
+ _("Access additional software from selected third party sources."));
+ g_string_append (str, " ");
+ g_string_append (str,
+ /* TRANSLATORS: this is the third party repositories info bar. */
+ _("Some of this software is proprietary and therefore has restrictions on use, sharing, and access to source code."));
+ g_string_append_printf (str, " <a href=\"%s\">%s</a>",
+ "https://fedoraproject.org/wiki/Workstation/Third_Party_Software_Repositories",
+ /* TRANSLATORS: this is the clickable
+ * link on the third party repositories info bar */
+ _("Find out more…"));
+ gtk_label_set_markup (GTK_LABEL (priv->label_third_party), str->str);
+
+ /* create info bar if not already dismissed in initial-setup */
+ refresh_third_party_repo (self);
+ reload_third_party_repo (self);
+ gtk_info_bar_add_button (GTK_INFO_BAR (priv->infobar_third_party),
+ /* TRANSLATORS: button to turn on third party software repositories */
+ _("Enable"), GTK_RESPONSE_YES);
+ g_signal_connect (priv->infobar_third_party, "response",
+ G_CALLBACK (third_party_response_cb), self);
+
+ /* avoid a ref cycle */
+ priv->shell = shell;
+
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolledwindow_overview));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (priv->box_overview), adj);
+
+ tile = gs_feature_tile_new (NULL);
+ gtk_container_add (GTK_CONTAINER (priv->stack_featured), tile);
+
+ for (i = 0; i < N_TILES; i++) {
+ tile = gs_popular_tile_new (NULL);
+ gtk_container_add (GTK_CONTAINER (priv->box_popular), tile);
+ }
+
+ for (i = 0; i < N_TILES; i++) {
+ tile = gs_popular_tile_new (NULL);
+ gtk_container_add (GTK_CONTAINER (priv->box_recent), tile);
+ }
+
+ return TRUE;
+}
+
+static void
+gs_overview_page_init (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ g_signal_connect (priv->button_featured_back, "clicked",
+ G_CALLBACK (_featured_back_clicked_cb), self);
+ g_signal_connect (priv->button_featured_forwards, "clicked",
+ G_CALLBACK (_featured_forward_clicked_cb), self);
+
+ priv->settings = g_settings_new ("org.gnome.software");
+}
+
+static void
+gs_overview_page_dispose (GObject *object)
+{
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (object);
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+
+ g_clear_object (&priv->builder);
+ g_clear_object (&priv->plugin_loader);
+ g_clear_object (&priv->cancellable);
+ g_clear_object (&priv->settings);
+ g_clear_object (&priv->third_party_repo);
+ g_clear_pointer (&priv->category_of_day, g_free);
+ g_clear_pointer (&priv->category_hash, g_hash_table_unref);
+
+ if (priv->featured_rotate_timer_id != 0) {
+ g_source_remove (priv->featured_rotate_timer_id);
+ priv->featured_rotate_timer_id = 0;
+ }
+
+ G_OBJECT_CLASS (gs_overview_page_parent_class)->dispose (object);
+}
+
+static void
+gs_overview_page_refreshed (GsOverviewPage *self)
+{
+ GsOverviewPagePrivate *priv = gs_overview_page_get_instance_private (self);
+
+ if (priv->empty) {
+ gtk_stack_set_visible_child_name (GTK_STACK (priv->stack_overview), "no-results");
+ } else {
+ gtk_stack_set_visible_child_name (GTK_STACK (priv->stack_overview), "overview");
+ }
+}
+
+static void
+gs_overview_page_class_init (GsOverviewPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_overview_page_dispose;
+ page_class->switch_to = gs_overview_page_switch_to;
+ page_class->reload = gs_overview_page_reload;
+ page_class->setup = gs_overview_page_setup;
+ klass->refreshed = gs_overview_page_refreshed;
+
+ signals [SIGNAL_REFRESHED] =
+ g_signal_new ("refreshed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsOverviewPageClass, refreshed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-overview-page.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, infobar_third_party);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, label_third_party);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, overlay);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, stack_featured);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, button_featured_back);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, button_featured_forwards);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, box_overview);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, box_popular);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, box_popular_rotating);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, box_recent);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, category_heading);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, flowbox_categories);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, popular_heading);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, recent_heading);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, scrolledwindow_overview);
+ gtk_widget_class_bind_template_child_private (widget_class, GsOverviewPage, stack_overview);
+}
+
+GsOverviewPage *
+gs_overview_page_new (void)
+{
+ return GS_OVERVIEW_PAGE (g_object_new (GS_TYPE_OVERVIEW_PAGE, NULL));
+}
diff --git a/src/gs-overview-page.h b/src/gs-overview-page.h
new file mode 100644
index 0000000..6bd53eb
--- /dev/null
+++ b/src/gs-overview-page.h
@@ -0,0 +1,31 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_OVERVIEW_PAGE (gs_overview_page_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsOverviewPage, gs_overview_page, GS, OVERVIEW_PAGE, GsPage)
+
+struct _GsOverviewPageClass
+{
+ GsPageClass parent_class;
+
+ void (*refreshed) (GsOverviewPage *self);
+};
+
+GsOverviewPage *gs_overview_page_new (void);
+void gs_overview_page_set_category (GsOverviewPage *self,
+ const gchar *category);
+
+G_END_DECLS
diff --git a/src/gs-overview-page.ui b/src/gs-overview-page.ui
new file mode 100644
index 0000000..e83bc17
--- /dev/null
+++ b/src/gs-overview-page.ui
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsOverviewPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="overview-accessible">
+ <property name="accessible-name" translatable="yes">Overview page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack_overview">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+
+ <child>
+ <object class="GtkInfoBar" id="infobar_third_party">
+ <property name="visible">True</property>
+ <property name="app_paintable">True</property>
+ <property name="show_close_button">True</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="spacing">6</property>
+ <property name="layout_style">end</property>
+ <child/>
+ </object>
+ </child>
+ <child internal-child="content_area">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="border_width">12</property>
+ <child>
+ <object class="GtkLabel" id="label_third_party_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Enable Third Party Software Repositories?</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_third_party">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label">Provides access to additional software.</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_overview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkViewport" id="viewport_overview">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkBox" id="box_overview">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="hexpand">False</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkOverlay" id="overlay">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="height-request">150</property>
+ <child type="overlay">
+ <object class="GtkStack" id="stack_featured">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="transition-type">crossfade</property>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkButton" id="button_featured_back">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button_featured_back_accessible">
+ <property name="accessible-name" translatable="yes">Previous</property>
+ </object>
+ </child>
+ <style>
+ <class name="osd"/>
+ <class name="featured-button-left"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="back_image">
+ <property name="visible">True</property>
+ <property name="icon_name">go-previous-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkButton" id="button_featured_forwards">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button_featured_forwards_accessible">
+ <property name="accessible-name" translatable="yes">Next</property>
+ </object>
+ </child>
+ <style>
+ <class name="osd"/>
+ <class name="featured-button-right"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="forwards_image">
+ <property name="visible">True</property>
+ <property name="icon_name">go-next-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="popular_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: This is a heading for software which has been featured (&apos;picked&apos;) by the distribution.">Editor’s Picks</property>
+ <property name="margin-top">21</property>
+ <property name="margin-bottom">6</property>
+ <accessibility>
+ <relation target="box_popular" type="label-for"/>
+ </accessibility>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GsHidingBox" id="box_popular">
+ <property name="visible">True</property>
+ <property name="spacing">14</property>
+ <property name="valign">start</property>
+ <accessibility>
+ <relation target="popular_heading" type="labelled-by"/>
+ </accessibility>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="recent_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: This is a heading for software which has been recently released upstream.">Recent Releases</property>
+ <property name="margin-top">21</property>
+ <property name="margin-bottom">6</property>
+ <accessibility>
+ <relation target="box_recent" type="label-for"/>
+ </accessibility>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GsHidingBox" id="box_recent">
+ <property name="visible">True</property>
+ <property name="spacing">14</property>
+ <property name="valign">start</property>
+ <accessibility>
+ <relation target="recent_heading" type="labelled-by"/>
+ </accessibility>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="box_popular_rotating">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="category_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Categories</property>
+ <property name="margin-top">24</property>
+ <property name="margin-bottom">6</property>
+ <accessibility>
+ <relation target="flowbox_categories" type="label-for"/>
+ </accessibility>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFlowBox" id="flowbox_categories">
+ <property name="visible">True</property>
+ <property name="margin-bottom">6</property>
+ <property name="row_spacing">14</property>
+ <property name="column_spacing">14</property>
+ <property name="homogeneous">True</property>
+ <property name="max_children_per_line">3</property>
+ <property name="selection_mode">none</property>
+ <accessibility>
+ <relation target="category_heading" type="labelled-by"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">overview</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="noresults_grid_overview">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="row-spacing">12</property>
+ <property name="column-spacing">12</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="noappdata_icon">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="pixel-size">64</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="noappdata_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">No Application Data Found</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="wrap">True</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">no-results</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-page.c b/src/gs-page.c
new file mode 100644
index 0000000..ab5bdc6
--- /dev/null
+++ b/src/gs-page.c
@@ -0,0 +1,691 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "gs-page.h"
+#include "gs-common.h"
+#include "gs-screenshot-image.h"
+
+typedef struct
+{
+ GsPluginLoader *plugin_loader;
+ GsShell *shell;
+ GtkWidget *header_start_widget;
+ GtkWidget *header_end_widget;
+ gboolean is_active;
+} GsPagePrivate;
+
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GsPage, gs_page, GTK_TYPE_BIN)
+
+GsShell *
+gs_page_get_shell (GsPage *page)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ return priv->shell;
+}
+
+typedef struct {
+ GsApp *app;
+ GsPage *page;
+ GCancellable *cancellable;
+ gulong notify_quirk_id;
+ GtkWidget *button_install;
+ GsPluginAction action;
+ GsShellInteraction interaction;
+} GsPageHelper;
+
+static void
+gs_page_helper_free (GsPageHelper *helper)
+{
+ if (helper->notify_quirk_id > 0)
+ g_signal_handler_disconnect (helper->app, helper->notify_quirk_id);
+ if (helper->app != NULL)
+ g_object_unref (helper->app);
+ if (helper->page != NULL)
+ g_object_unref (helper->page);
+ if (helper->cancellable != NULL)
+ g_object_unref (helper->cancellable);
+ g_slice_free (GsPageHelper, helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsPageHelper, gs_page_helper_free);
+
+static void
+gs_page_update_app_response_close_cb (GtkDialog *dialog, gint response, gpointer user_data)
+{
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+gs_page_show_update_message (GsPageHelper *helper, AsScreenshot *ss)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (helper->page);
+ GPtrArray *images;
+ GtkWidget *dialog;
+ g_autofree gchar *escaped = NULL;
+
+ dialog = gtk_message_dialog_new (gs_shell_get_window (priv->shell),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_USE_HEADER_BAR,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ "%s", gs_app_get_name (helper->app));
+ escaped = g_markup_escape_text (as_screenshot_get_caption (ss, NULL), -1);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", escaped);
+
+ /* image is optional */
+ images = as_screenshot_get_images (ss);
+ if (images->len) {
+ GtkWidget *content_area;
+ GtkWidget *ssimg;
+ g_autoptr(SoupSession) soup_session = NULL;
+
+ /* load screenshot */
+ soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT,
+ gs_user_agent (), NULL);
+ ssimg = gs_screenshot_image_new (soup_session);
+ gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss);
+ gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg), 400, 225);
+ gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg),
+ helper->cancellable);
+ gtk_widget_set_margin_start (ssimg, 24);
+ gtk_widget_set_margin_end (ssimg, 24);
+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ gtk_container_add (GTK_CONTAINER (content_area), ssimg);
+ gtk_container_child_set (GTK_CONTAINER (content_area), ssimg, "pack-type", GTK_PACK_END, NULL);
+ }
+
+ /* handle this async */
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_page_update_app_response_close_cb), helper);
+ gs_shell_modal_dialog_present (priv->shell, GTK_DIALOG (dialog));
+}
+
+static void
+gs_page_app_installed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsPage *page = helper->page;
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+
+ ret = gs_plugin_loader_job_action_finish (plugin_loader,
+ res,
+ &error);
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("%s", error->message);
+ return;
+ }
+ if (!ret) {
+ g_warning ("failed to install %s: %s",
+ gs_app_get_id (helper->app),
+ error->message);
+ return;
+ }
+
+ /* the single update needs system reboot, e.g. for firmware */
+ if (gs_app_has_quirk (helper->app, GS_APP_QUIRK_NEEDS_REBOOT)) {
+ g_autoptr(GsAppList) list = gs_app_list_new ();
+ gs_app_list_add (list, helper->app);
+ gs_utils_reboot_notify (list);
+ }
+
+ /* tell the user what they have to do */
+ if (gs_app_get_kind (helper->app) == AS_APP_KIND_FIRMWARE &&
+ gs_app_has_quirk (helper->app, GS_APP_QUIRK_NEEDS_USER_ACTION)) {
+ AsScreenshot *ss = gs_app_get_action_screenshot (helper->app);
+ if (ss != NULL && as_screenshot_get_caption (ss, NULL) != NULL)
+ gs_page_show_update_message (helper, ss);
+ }
+
+ /* only show this if the window is not active */
+ if (gs_app_is_installed (helper->app) &&
+ helper->action == GS_PLUGIN_ACTION_INSTALL &&
+ !gs_shell_is_active (priv->shell) &&
+ ((helper->interaction) & GS_SHELL_INTERACTION_NOTIFY) != 0)
+ gs_app_notify_installed (helper->app);
+
+ if (gs_app_is_installed (helper->app) &&
+ GS_PAGE_GET_CLASS (page)->app_installed != NULL) {
+ GS_PAGE_GET_CLASS (page)->app_installed (page, helper->app);
+ }
+}
+
+static void
+gs_page_app_removed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GsPage *page = helper->page;
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+
+ ret = gs_plugin_loader_job_action_finish (plugin_loader,
+ res,
+ &error);
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("%s", error->message);
+ return;
+ }
+ if (!ret) {
+ g_warning ("failed to remove: %s", error->message);
+ return;
+ }
+
+ if (!gs_app_is_installed (helper->app) &&
+ GS_PAGE_GET_CLASS (page)->app_removed != NULL) {
+ GS_PAGE_GET_CLASS (page)->app_removed (page, helper->app);
+ }
+}
+
+GtkWidget *
+gs_page_get_header_start_widget (GsPage *page)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+
+ return priv->header_start_widget;
+}
+
+void
+gs_page_set_header_start_widget (GsPage *page, GtkWidget *widget)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+
+ g_set_object (&priv->header_start_widget, widget);
+}
+
+GtkWidget *
+gs_page_get_header_end_widget (GsPage *page)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+
+ return priv->header_end_widget;
+}
+
+void
+gs_page_set_header_end_widget (GsPage *page, GtkWidget *widget)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+
+ g_set_object (&priv->header_end_widget, widget);
+}
+
+void
+gs_page_install_app (GsPage *page,
+ GsApp *app,
+ GsShellInteraction interaction,
+ GCancellable *cancellable)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ GsPageHelper *helper;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* probably non-free */
+ if (gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE) {
+ GtkResponseType response;
+
+ response = gs_app_notify_unavailable (app, gs_shell_get_window (priv->shell));
+ if (response != GTK_RESPONSE_OK)
+ return;
+ }
+
+ helper = g_slice_new0 (GsPageHelper);
+ helper->action = GS_PLUGIN_ACTION_INSTALL;
+ helper->app = g_object_ref (app);
+ helper->page = g_object_ref (page);
+ helper->cancellable = g_object_ref (cancellable);
+ helper->interaction = interaction;
+
+ plugin_job = gs_plugin_job_newv (helper->action,
+ "interactive", TRUE,
+ "app", helper->app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader,
+ plugin_job,
+ helper->cancellable,
+ gs_page_app_installed_cb,
+ helper);
+}
+
+static void
+gs_page_update_app_response_cb (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
+{
+ g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data;
+ GsPagePrivate *priv = gs_page_get_instance_private (helper->page);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ /* not agreed */
+ if (response != GTK_RESPONSE_OK)
+ return;
+
+ g_debug ("update %s", gs_app_get_id (helper->app));
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "interactive", TRUE,
+ "app", helper->app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader,
+ plugin_job,
+ helper->cancellable,
+ gs_page_app_installed_cb,
+ helper);
+ g_steal_pointer (&helper);
+}
+
+static void
+gs_page_notify_quirk_cb (GsApp *app, GParamSpec *pspec, GsPageHelper *helper)
+{
+ gtk_widget_set_sensitive (helper->button_install,
+ !gs_app_has_quirk (helper->app,
+ GS_APP_QUIRK_NEEDS_USER_ACTION));
+}
+
+static void
+gs_page_needs_user_action (GsPageHelper *helper, AsScreenshot *ss)
+{
+ GtkWidget *content_area;
+ GtkWidget *dialog;
+ g_autoptr(SoupSession) soup_session = NULL;
+ GtkWidget *ssimg;
+ g_autofree gchar *escaped = NULL;
+ GsPagePrivate *priv = gs_page_get_instance_private (helper->page);
+
+ dialog = gtk_message_dialog_new (gs_shell_get_window (priv->shell),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_USE_HEADER_BAR,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CANCEL,
+ /* TRANSLATORS: this is a prompt message, and
+ * '%s' is an application summary, e.g. 'GNOME Clocks' */
+ _("Prepare %s"),
+ gs_app_get_name (helper->app));
+ escaped = g_markup_escape_text (as_screenshot_get_caption (ss, NULL), -1);
+ gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
+ "%s", escaped);
+
+ /* this will be enabled when the device is in the right mode */
+ helper->button_install = gtk_dialog_add_button (GTK_DIALOG (dialog),
+ /* TRANSLATORS: update the fw */
+ _("Install"),
+ GTK_RESPONSE_OK);
+ helper->notify_quirk_id =
+ g_signal_connect (helper->app, "notify::quirk",
+ G_CALLBACK (gs_page_notify_quirk_cb),
+ helper);
+ gtk_widget_set_sensitive (helper->button_install, FALSE);
+
+ /* load screenshot */
+ soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT,
+ gs_user_agent (), NULL);
+ ssimg = gs_screenshot_image_new (soup_session);
+ gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss);
+ gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg), 400, 225);
+ gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg),
+ helper->cancellable);
+ gtk_widget_set_margin_start (ssimg, 24);
+ gtk_widget_set_margin_end (ssimg, 24);
+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ gtk_container_add (GTK_CONTAINER (content_area), ssimg);
+ gtk_container_child_set (GTK_CONTAINER (content_area), ssimg, "pack-type", GTK_PACK_END, NULL);
+
+ /* handle this async */
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_page_update_app_response_cb), helper);
+ gs_shell_modal_dialog_present (priv->shell, GTK_DIALOG (dialog));
+}
+
+void
+gs_page_update_app (GsPage *page, GsApp *app, GCancellable *cancellable)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ GsPageHelper *helper;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* non-firmware applications do not have to be prepared */
+ helper = g_slice_new0 (GsPageHelper);
+ helper->action = GS_PLUGIN_ACTION_UPDATE;
+ helper->app = g_object_ref (app);
+ helper->page = g_object_ref (page);
+ helper->cancellable = g_object_ref (cancellable);
+
+ /* tell the user what they have to do */
+ if (gs_app_get_kind (app) == AS_APP_KIND_FIRMWARE &&
+ gs_app_has_quirk (app, GS_APP_QUIRK_NEEDS_USER_ACTION)) {
+ AsScreenshot *ss = gs_app_get_action_screenshot (app);
+ if (ss != NULL && as_screenshot_get_caption (ss, NULL) != NULL) {
+ gs_page_needs_user_action (helper, ss);
+ return;
+ }
+ }
+
+ /* generic fallback */
+ plugin_job = gs_plugin_job_newv (helper->action,
+ "interactive", TRUE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ helper->cancellable,
+ gs_page_app_installed_cb,
+ helper);
+}
+
+static void
+gs_page_remove_app_response_cb (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
+{
+ g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data;
+ GsPagePrivate *priv = gs_page_get_instance_private (helper->page);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ /* not agreed */
+ if (response != GTK_RESPONSE_OK)
+ return;
+
+ g_debug ("remove %s", gs_app_get_id (helper->app));
+ plugin_job = gs_plugin_job_newv (helper->action,
+ "interactive", TRUE,
+ "app", helper->app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ helper->cancellable,
+ gs_page_app_removed_cb,
+ helper);
+ g_steal_pointer (&helper);
+}
+
+void
+gs_page_remove_app (GsPage *page, GsApp *app, GCancellable *cancellable)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ GsPageHelper *helper;
+ GtkWidget *dialog;
+ g_autofree gchar *message = NULL;
+ g_autofree gchar *title = NULL;
+ GtkWidget *remove_button;
+ GtkStyleContext *context;
+
+ /* pending install */
+ helper = g_slice_new0 (GsPageHelper);
+ helper->action = GS_PLUGIN_ACTION_REMOVE;
+ helper->app = g_object_ref (app);
+ helper->page = g_object_ref (page);
+ helper->cancellable = g_object_ref (cancellable);
+ if (gs_app_get_state (app) == AS_APP_STATE_QUEUED_FOR_INSTALL) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE,
+ "interactive", TRUE,
+ "app", app,
+ NULL);
+ g_debug ("remove %s", gs_app_get_id (app));
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ helper->cancellable,
+ gs_page_app_removed_cb,
+ helper);
+ return;
+ }
+
+ /* use different name and summary */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_SOURCE:
+ /* TRANSLATORS: this is a prompt message, and '%s' is an
+ * repository name, e.g. 'GNOME Nightly' */
+ title = g_strdup_printf (_("Are you sure you want to remove "
+ "the %s repository?"),
+ gs_app_get_name (app));
+ /* TRANSLATORS: longer dialog text */
+ message = g_strdup_printf (_("All applications from %s will be "
+ "removed, and you will have to "
+ "re-install the repository to use them again."),
+ gs_app_get_name (app));
+ break;
+ default:
+ /* TRANSLATORS: this is a prompt message, and '%s' is an
+ * application summary, e.g. 'GNOME Clocks' */
+ title = g_strdup_printf (_("Are you sure you want to remove %s?"),
+ gs_app_get_name (app));
+ /* TRANSLATORS: longer dialog text */
+ message = g_strdup_printf (_("%s will be removed, and you will "
+ "have to install it to use it again."),
+ gs_app_get_name (app));
+ break;
+ }
+
+ /* ask for confirmation */
+ dialog = gtk_message_dialog_new (gs_shell_get_window (priv->shell),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_CANCEL,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", message);
+
+ /* TRANSLATORS: this is button text to remove the application */
+ remove_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("Remove"), GTK_RESPONSE_OK);
+ context = gtk_widget_get_style_context (remove_button);
+ gtk_style_context_add_class (context, "destructive-action");
+
+ /* handle this async */
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_page_remove_app_response_cb), helper);
+ gs_shell_modal_dialog_present (priv->shell, GTK_DIALOG (dialog));
+}
+
+static void
+gs_page_app_launched_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to launch GsApp: %s", error->message);
+ return;
+ }
+}
+
+void
+gs_page_launch_app (GsPage *page, GsApp *app, GCancellable *cancellable)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_LAUNCH,
+ "interactive", TRUE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ cancellable,
+ gs_page_app_launched_cb,
+ NULL);
+}
+
+static void
+gs_page_app_shortcut_added_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to add a shortcut to GsApp: %s", error->message);
+ return;
+ }
+}
+
+void
+gs_page_shortcut_add (GsPage *page, GsApp *app, GCancellable *cancellable)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_ADD_SHORTCUT,
+ "interactive", TRUE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ cancellable,
+ gs_page_app_shortcut_added_cb,
+ NULL);
+}
+
+static void
+gs_page_app_shortcut_removed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to remove the shortcut to GsApp: %s", error->message);
+ return;
+ }
+}
+
+void
+gs_page_shortcut_remove (GsPage *page, GsApp *app, GCancellable *cancellable)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REMOVE_SHORTCUT,
+ "interactive", TRUE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (priv->plugin_loader, plugin_job,
+ cancellable,
+ gs_page_app_shortcut_removed_cb,
+ NULL);
+}
+
+gboolean
+gs_page_is_active (GsPage *page)
+{
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ g_return_val_if_fail (GS_IS_PAGE (page), FALSE);
+ return priv->is_active;
+}
+
+/**
+ * gs_page_switch_to:
+ *
+ * Pure virtual method that subclasses have to override to show page specific
+ * widgets.
+ */
+void
+gs_page_switch_to (GsPage *page,
+ gboolean scroll_up)
+{
+ GsPageClass *klass = GS_PAGE_GET_CLASS (page);
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ priv->is_active = TRUE;
+ if (klass->switch_to != NULL)
+ klass->switch_to (page, scroll_up);
+}
+
+/**
+ * gs_page_switch_from:
+ *
+ * Pure virtual method that subclasses have to override to show page specific
+ * widgets.
+ */
+void
+gs_page_switch_from (GsPage *page)
+{
+ GsPageClass *klass = GS_PAGE_GET_CLASS (page);
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+ priv->is_active = FALSE;
+ if (klass->switch_from != NULL)
+ klass->switch_from (page);
+}
+
+void
+gs_page_reload (GsPage *page)
+{
+ GsPageClass *klass;
+ g_return_if_fail (GS_IS_PAGE (page));
+ klass = GS_PAGE_GET_CLASS (page);
+ if (klass->reload != NULL)
+ klass->reload (page);
+}
+
+gboolean
+gs_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsPageClass *klass;
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+
+ g_return_val_if_fail (GS_IS_PAGE (page), FALSE);
+
+ klass = GS_PAGE_GET_CLASS (page);
+ g_assert (klass->setup != NULL);
+
+ priv->plugin_loader = g_object_ref (plugin_loader);
+ priv->shell = shell;
+
+ return klass->setup (page, shell, plugin_loader, builder, cancellable, error);
+}
+
+static void
+gs_page_dispose (GObject *object)
+{
+ GsPage *page = GS_PAGE (object);
+ GsPagePrivate *priv = gs_page_get_instance_private (page);
+
+ g_clear_object (&priv->plugin_loader);
+ g_clear_object (&priv->header_start_widget);
+ g_clear_object (&priv->header_end_widget);
+
+ G_OBJECT_CLASS (gs_page_parent_class)->dispose (object);
+}
+
+static void
+gs_page_init (GsPage *page)
+{
+}
+
+static void
+gs_page_class_init (GsPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = gs_page_dispose;
+}
+
+GsPage *
+gs_page_new (void)
+{
+ GsPage *page;
+ page = g_object_new (GS_TYPE_PAGE, NULL);
+ return GS_PAGE (page);
+}
diff --git a/src/gs-page.h b/src/gs-page.h
new file mode 100644
index 0000000..9fc5ad8
--- /dev/null
+++ b/src/gs-page.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-shell.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PAGE (gs_page_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsPage, gs_page, GS, PAGE, GtkBin)
+
+struct _GsPageClass
+{
+ GtkBinClass parent_class;
+
+ void (*app_installed) (GsPage *page,
+ GsApp *app);
+ void (*app_removed) (GsPage *page,
+ GsApp *app);
+ void (*switch_to) (GsPage *page,
+ gboolean scroll_up);
+ void (*switch_from) (GsPage *page);
+ void (*reload) (GsPage *page);
+ gboolean (*setup) (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error);
+};
+
+GsPage *gs_page_new (void);
+GsShell *gs_page_get_shell (GsPage *page);
+GtkWidget *gs_page_get_header_start_widget (GsPage *page);
+void gs_page_set_header_start_widget (GsPage *page,
+ GtkWidget *widget);
+GtkWidget *gs_page_get_header_end_widget (GsPage *page);
+void gs_page_set_header_end_widget (GsPage *page,
+ GtkWidget *widget);
+void gs_page_install_app (GsPage *page,
+ GsApp *app,
+ GsShellInteraction interaction,
+ GCancellable *cancellable);
+void gs_page_remove_app (GsPage *page,
+ GsApp *app,
+ GCancellable *cancellable);
+void gs_page_update_app (GsPage *page,
+ GsApp *app,
+ GCancellable *cancellable);
+void gs_page_launch_app (GsPage *page,
+ GsApp *app,
+ GCancellable *cancellable);
+void gs_page_shortcut_add (GsPage *page,
+ GsApp *app,
+ GCancellable *cancellable);
+void gs_page_shortcut_remove (GsPage *page,
+ GsApp *app,
+ GCancellable *cancellable);
+void gs_page_switch_to (GsPage *page,
+ gboolean scroll_up);
+void gs_page_switch_from (GsPage *page);
+void gs_page_reload (GsPage *page);
+gboolean gs_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error);
+gboolean gs_page_is_active (GsPage *page);
+
+G_END_DECLS
diff --git a/src/gs-popular-tile.c b/src/gs-popular-tile.c
new file mode 100644
index 0000000..0a7cb98
--- /dev/null
+++ b/src/gs-popular-tile.c
@@ -0,0 +1,136 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "gs-popular-tile.h"
+#include "gs-star-widget.h"
+#include "gs-common.h"
+
+struct _GsPopularTile
+{
+ GsAppTile parent_instance;
+ GtkWidget *label;
+ GtkWidget *image;
+ GtkWidget *eventbox;
+ GtkWidget *stack;
+ GtkWidget *stars;
+ GtkCssProvider *tile_provider; /* (owned) (nullable) */
+};
+
+G_DEFINE_TYPE (GsPopularTile, gs_popular_tile, GS_TYPE_APP_TILE)
+
+static void
+gs_popular_tile_dispose (GObject *object)
+{
+ GsPopularTile *tile = GS_POPULAR_TILE (object);
+
+ g_clear_object (&tile->tile_provider);
+
+ G_OBJECT_CLASS (gs_popular_tile_parent_class)->dispose (object);
+}
+
+static void
+gs_popular_tile_refresh (GsAppTile *self)
+{
+ GsPopularTile *tile = GS_POPULAR_TILE (self);
+ GsApp *app = gs_app_tile_get_app (self);
+ AtkObject *accessible;
+ gboolean installed;
+ g_autofree gchar *name = NULL;
+ const gchar *css;
+
+ if (app == NULL)
+ return;
+
+ accessible = gtk_widget_get_accessible (GTK_WIDGET (tile));
+
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_REMOVING:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ installed = TRUE;
+ /* TRANSLATORS: this refers to an app (by name) that is installed */
+ name = g_strdup_printf (_("%s (Installed)"),
+ gs_app_get_name (app));
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_INSTALLING:
+ default:
+ installed = FALSE;
+ name = g_strdup (gs_app_get_name (app));
+ break;
+ }
+
+ gtk_widget_set_visible (tile->eventbox, installed);
+
+ if (GTK_IS_ACCESSIBLE (accessible)) {
+ atk_object_set_name (accessible, name);
+ atk_object_set_description (accessible, gs_app_get_summary (app));
+ }
+
+ gtk_widget_set_sensitive (tile->stars, gs_app_get_rating (app) >= 0);
+ gs_star_widget_set_rating (GS_STAR_WIDGET (tile->stars),
+ gs_app_get_rating (app));
+ gtk_stack_set_visible_child_name (GTK_STACK (tile->stack), "content");
+
+ /* perhaps set custom css */
+ css = gs_app_get_metadata_item (app, "GnomeSoftware::PopularTile-css");
+ gs_utils_widget_set_css (GTK_WIDGET (tile), &tile->tile_provider, "popular-tile", css);
+
+ if (gs_app_get_pixbuf (app) != NULL) {
+ gs_image_set_from_pixbuf (GTK_IMAGE (tile->image), gs_app_get_pixbuf (app));
+ } else {
+ gtk_image_set_from_icon_name (GTK_IMAGE (tile->image),
+ "application-x-executable",
+ GTK_ICON_SIZE_DIALOG);
+ }
+
+ gtk_label_set_label (GTK_LABEL (tile->label), gs_app_get_name (app));
+}
+
+static void
+gs_popular_tile_init (GsPopularTile *tile)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (tile), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (tile));
+}
+
+static void
+gs_popular_tile_class_init (GsPopularTileClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GsAppTileClass *app_tile_class = GS_APP_TILE_CLASS (klass);
+
+ object_class->dispose = gs_popular_tile_dispose;
+
+ app_tile_class->refresh = gs_popular_tile_refresh;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-popular-tile.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsPopularTile, label);
+ gtk_widget_class_bind_template_child (widget_class, GsPopularTile, image);
+ gtk_widget_class_bind_template_child (widget_class, GsPopularTile, eventbox);
+ gtk_widget_class_bind_template_child (widget_class, GsPopularTile, stack);
+ gtk_widget_class_bind_template_child (widget_class, GsPopularTile, stars);
+}
+
+GtkWidget *
+gs_popular_tile_new (GsApp *app)
+{
+ GsPopularTile *tile = g_object_new (GS_TYPE_POPULAR_TILE, NULL);
+ if (app != NULL)
+ gs_app_tile_set_app (GS_APP_TILE (tile), app);
+ return GTK_WIDGET (tile);
+}
diff --git a/src/gs-popular-tile.h b/src/gs-popular-tile.h
new file mode 100644
index 0000000..7e7a8ff
--- /dev/null
+++ b/src/gs-popular-tile.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-app-tile.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_POPULAR_TILE (gs_popular_tile_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsPopularTile, gs_popular_tile, GS, POPULAR_TILE, GsAppTile)
+
+GtkWidget *gs_popular_tile_new (GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-popular-tile.ui b/src/gs-popular-tile.ui
new file mode 100644
index 0000000..17e4eec
--- /dev/null
+++ b/src/gs-popular-tile.ui
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsPopularTile" parent="GsAppTile">
+ <property name="visible">True</property>
+ <style>
+ <class name="view"/>
+ <class name="tile"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage" id="waiting">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="name">waiting</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkOverlay" id="overlay">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <child type="overlay">
+ <object class="GtkEventBox" id="eventbox">
+ <property name="visible">False</property>
+ <property name="no_show_all">True</property>
+ <property name="visible_window">True</property>
+ <property name="halign">end</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkImage" id="installed-icon">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="margin-top">6</property>
+ <property name="margin-right">6</property>
+ <property name="icon-name">software-installed-symbolic</property>
+ <style>
+ <class name="installed-icon"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEventBox" id="eboxbox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="margin-start">15</property>
+ <property name="margin-end">15</property>
+ <property name="margin-top">15</property>
+ <property name="margin-bottom">16</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="valign">end</property>
+ <property name="margin">6</property>
+ <property name="ellipsize">end</property>
+ <property name="width_chars">12</property>
+ <property name="max_width_chars">12</property>
+ </object>
+ </child>
+ <child>
+ <object class="GsStarWidget" id="stars">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="icon-size">12</property>
+ <style>
+ <class name="onlyjustvisible"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">content</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-prefs-dialog.c b/src/gs-prefs-dialog.c
new file mode 100644
index 0000000..51191a7
--- /dev/null
+++ b/src/gs-prefs-dialog.c
@@ -0,0 +1,88 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-prefs-dialog.h"
+
+#include "gnome-software-private.h"
+#include "gs-common.h"
+#include "gs-os-release.h"
+#include "gs-repo-row.h"
+#include "gs-third-party-repo-row.h"
+#include <glib/gi18n.h>
+
+struct _GsPrefsDialog
+{
+ GtkDialog parent_instance;
+ GSettings *settings;
+
+ GCancellable *cancellable;
+ GsPluginLoader *plugin_loader;
+ GtkWidget *switch_updates;
+ GtkWidget *switch_updates_notify;
+};
+
+G_DEFINE_TYPE (GsPrefsDialog, gs_prefs_dialog, GTK_TYPE_DIALOG)
+
+static void
+gs_prefs_dialog_dispose (GObject *object)
+{
+ GsPrefsDialog *dialog = GS_PREFS_DIALOG (object);
+ g_clear_object (&dialog->plugin_loader);
+ g_cancellable_cancel (dialog->cancellable);
+ g_clear_object (&dialog->cancellable);
+ g_clear_object (&dialog->settings);
+
+ G_OBJECT_CLASS (gs_prefs_dialog_parent_class)->dispose (object);
+}
+
+static void
+gs_prefs_dialog_init (GsPrefsDialog *dialog)
+{
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+
+ dialog->cancellable = g_cancellable_new ();
+ dialog->settings = g_settings_new ("org.gnome.software");
+ g_settings_bind (dialog->settings,
+ "download-updates-notify",
+ dialog->switch_updates_notify,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (dialog->settings,
+ "download-updates",
+ dialog->switch_updates,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+}
+
+static void
+gs_prefs_dialog_class_init (GsPrefsDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_prefs_dialog_dispose;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-prefs-dialog.ui");
+ gtk_widget_class_bind_template_child (widget_class, GsPrefsDialog, switch_updates);
+ gtk_widget_class_bind_template_child (widget_class, GsPrefsDialog, switch_updates_notify);
+}
+
+GtkWidget *
+gs_prefs_dialog_new (GtkWindow *parent, GsPluginLoader *plugin_loader)
+{
+ GsPrefsDialog *dialog;
+ dialog = g_object_new (GS_TYPE_PREFS_DIALOG,
+ "use-header-bar", TRUE,
+ "transient-for", parent,
+ "modal", TRUE,
+ NULL);
+ dialog->plugin_loader = g_object_ref (plugin_loader);
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-prefs-dialog.h b/src/gs-prefs-dialog.h
new file mode 100644
index 0000000..27fb955
--- /dev/null
+++ b/src/gs-prefs-dialog.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PREFS_DIALOG (gs_prefs_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsPrefsDialog, gs_prefs_dialog, GS, PREFS_DIALOG, GtkDialog)
+
+GtkWidget *gs_prefs_dialog_new (GtkWindow *parent,
+ GsPluginLoader *plugin_loader);
+
+G_END_DECLS
diff --git a/src/gs-prefs-dialog.ui b/src/gs-prefs-dialog.ui
new file mode 100644
index 0000000..bdf989c
--- /dev/null
+++ b/src/gs-prefs-dialog.ui
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsPrefsDialog" parent="GtkDialog">
+ <property name="title" translatable="yes">Update Preferences</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="resizable">False</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <child type="title">
+ <object class="GtkLabel" id="label_header">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Update Preferences</property>
+ <property name="selectable">False</property>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">24</property>
+ <property name="margin_start">33</property>
+ <property name="margin_end">33</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">27</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Automatic Updates</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="switch_updates">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">end</property>
+ <property name="valign">start</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="margin_bottom">15</property>
+ <property name="label" translatable="yes">Automatic updates are disabled when on mobile or metered connections.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">28</property>
+ <property name="max_width_chars">28</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Automatic Update Notifications</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Show notifications when updates have been automatically installed.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">28</property>
+ <property name="max_width_chars">28</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSwitch" id="switch_updates_notify">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">end</property>
+ <property name="valign">start</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-progress-button.c b/src/gs-progress-button.c
new file mode 100644
index 0000000..ee6a855
--- /dev/null
+++ b/src/gs-progress-button.c
@@ -0,0 +1,87 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2014 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-app.h"
+#include "gs-progress-button.h"
+
+struct _GsProgressButton
+{
+ GtkButton parent_instance;
+
+ GtkCssProvider *css_provider;
+};
+
+G_DEFINE_TYPE (GsProgressButton, gs_progress_button, GTK_TYPE_BUTTON)
+
+void
+gs_progress_button_set_progress (GsProgressButton *button, guint percentage)
+{
+ g_autofree gchar *css = NULL;
+
+ if (percentage == GS_APP_PROGRESS_UNKNOWN) {
+ g_warning ("FIXME: Unknown progress handling is not yet implemented for GsProgressButton");
+ percentage = 0;
+ }
+
+ if (percentage == 0)
+ css = g_strdup (".install-progress { background-size: 0; }");
+ else if (percentage == 100)
+ css = g_strdup (".install-progress { background-size: 100%; }");
+ else
+ css = g_strdup_printf (".install-progress { background-size: %u%%; }", percentage);
+
+ gtk_css_provider_load_from_data (button->css_provider, css, -1, NULL);
+}
+
+void
+gs_progress_button_set_show_progress (GsProgressButton *button, gboolean show_progress)
+{
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (button));
+ if (show_progress)
+ gtk_style_context_add_class (context, "install-progress");
+ else
+ gtk_style_context_remove_class (context, "install-progress");
+}
+
+static void
+gs_progress_button_dispose (GObject *object)
+{
+ GsProgressButton *button = GS_PROGRESS_BUTTON (object);
+
+ g_clear_object (&button->css_provider);
+
+ G_OBJECT_CLASS (gs_progress_button_parent_class)->dispose (object);
+}
+
+static void
+gs_progress_button_init (GsProgressButton *button)
+{
+ button->css_provider = gtk_css_provider_new ();
+ gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (button)),
+ GTK_STYLE_PROVIDER (button->css_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+}
+
+static void
+gs_progress_button_class_init (GsProgressButtonClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = gs_progress_button_dispose;
+}
+
+GtkWidget *
+gs_progress_button_new (void)
+{
+ return g_object_new (GS_TYPE_PROGRESS_BUTTON, NULL);
+}
diff --git a/src/gs-progress-button.h b/src/gs-progress-button.h
new file mode 100644
index 0000000..e45f0d4
--- /dev/null
+++ b/src/gs-progress-button.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2014 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_PROGRESS_BUTTON (gs_progress_button_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsProgressButton, gs_progress_button, GS, PROGRESS_BUTTON, GtkButton)
+
+GtkWidget *gs_progress_button_new (void);
+void gs_progress_button_set_progress (GsProgressButton *button,
+ guint percentage);
+void gs_progress_button_set_show_progress (GsProgressButton *button,
+ gboolean show_progress);
+
+G_END_DECLS
diff --git a/src/gs-removal-dialog.c b/src/gs-removal-dialog.c
new file mode 100644
index 0000000..61b5cbd
--- /dev/null
+++ b/src/gs-removal-dialog.c
@@ -0,0 +1,172 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-removal-dialog.h"
+#include "gs-utils.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+struct _GsRemovalDialog
+{
+ GtkMessageDialog parent_instance;
+ GtkWidget *listbox;
+ GtkWidget *scrolledwindow;
+};
+
+G_DEFINE_TYPE (GsRemovalDialog, gs_removal_dialog, GTK_TYPE_MESSAGE_DIALOG)
+
+static void
+list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header = NULL;
+ if (before != NULL)
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static gint
+list_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GObject *o1 = G_OBJECT (gtk_bin_get_child (GTK_BIN (a)));
+ GObject *o2 = G_OBJECT (gtk_bin_get_child (GTK_BIN (b)));
+ const gchar *key1 = g_object_get_data (o1, "sort");
+ const gchar *key2 = g_object_get_data (o2, "sort");
+ return g_strcmp0 (key1, key2);
+}
+
+static void
+add_app (GtkListBox *listbox, GsApp *app)
+{
+ GtkWidget *box;
+ GtkWidget *widget;
+ GtkWidget *row;
+ g_autofree gchar *sort_key = NULL;
+
+ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_widget_set_margin_top (box, 12);
+ gtk_widget_set_margin_start (box, 12);
+ gtk_widget_set_margin_bottom (box, 12);
+ gtk_widget_set_margin_end (box, 12);
+
+ widget = gtk_label_new (gs_app_get_name (app));
+ gtk_widget_set_halign (widget, GTK_ALIGN_START);
+ gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END);
+ gtk_container_add (GTK_CONTAINER (box), widget);
+
+ if (gs_app_get_name (app) != NULL) {
+ sort_key = gs_utils_sort_key (gs_app_get_name (app));
+ }
+
+ g_object_set_data_full (G_OBJECT (box),
+ "sort",
+ g_steal_pointer (&sort_key),
+ g_free);
+
+ gtk_list_box_prepend (listbox, box);
+ gtk_widget_show (widget);
+ gtk_widget_show (box);
+
+ row = gtk_widget_get_parent (box);
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
+}
+
+static void
+insert_details_widget (GtkMessageDialog *dialog, GtkWidget *widget)
+{
+ GList *children, *l;
+ GtkWidget *message_area;
+
+ message_area = gtk_message_dialog_get_message_area (dialog);
+ g_assert (GTK_IS_BOX (message_area));
+
+ /* find all label children and set the width chars properties */
+ children = gtk_container_get_children (GTK_CONTAINER (message_area));
+ for (l = children; l != NULL; l = l->next) {
+ if (!GTK_IS_LABEL (l->data))
+ continue;
+
+ gtk_label_set_width_chars (GTK_LABEL (l->data), 40);
+ gtk_label_set_max_width_chars (GTK_LABEL (l->data), 40);
+ }
+
+ gtk_container_add (GTK_CONTAINER (message_area), widget);
+}
+
+void
+gs_removal_dialog_show_upgrade_removals (GsRemovalDialog *self,
+ GsApp *upgrade)
+{
+ GsAppList *removals;
+ g_autofree gchar *name_version = NULL;
+
+ name_version = g_strdup_printf ("%s %s",
+ gs_app_get_name (upgrade),
+ gs_app_get_version (upgrade));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (self),
+ /* TRANSLATORS: This is a text displayed during a distro upgrade. %s
+ will be replaced by the name and version of distro, e.g. 'Fedora 23'. */
+ _("Some of the currently installed software is not compatible with %s. "
+ "If you continue, the following will be automatically removed during the upgrade:"),
+ name_version);
+
+ removals = gs_app_get_related (upgrade);
+ for (guint i = 0; i < gs_app_list_length (removals); i++) {
+ GsApp *app = gs_app_list_index (removals, i);
+ g_autofree gchar *tmp = NULL;
+
+ if (gs_app_get_state (app) != AS_APP_STATE_UNAVAILABLE)
+ continue;
+ tmp = gs_app_to_string (app);
+ g_debug ("removal %u: %s", i, tmp);
+ add_app (GTK_LIST_BOX (self->listbox), app);
+ }
+}
+
+static void
+gs_removal_dialog_init (GsRemovalDialog *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ insert_details_widget (GTK_MESSAGE_DIALOG (self), self->scrolledwindow);
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->listbox),
+ list_header_func,
+ self,
+ NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (self->listbox),
+ list_sort_func,
+ self, NULL);
+}
+
+static void
+gs_removal_dialog_class_init (GsRemovalDialogClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-removal-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsRemovalDialog, listbox);
+ gtk_widget_class_bind_template_child (widget_class, GsRemovalDialog, scrolledwindow);
+}
+
+GtkWidget *
+gs_removal_dialog_new (void)
+{
+ GsRemovalDialog *dialog;
+
+ dialog = g_object_new (GS_TYPE_REMOVAL_DIALOG,
+ NULL);
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-removal-dialog.h b/src/gs-removal-dialog.h
new file mode 100644
index 0000000..6006afb
--- /dev/null
+++ b/src/gs-removal-dialog.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REMOVAL_DIALOG (gs_removal_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsRemovalDialog, gs_removal_dialog, GS, REMOVAL_DIALOG, GtkMessageDialog)
+
+GtkWidget *gs_removal_dialog_new (void);
+void gs_removal_dialog_show_upgrade_removals (GsRemovalDialog *self,
+ GsApp *upgrade);
+
+G_END_DECLS
diff --git a/src/gs-removal-dialog.ui b/src/gs-removal-dialog.ui
new file mode 100644
index 0000000..3d03c75
--- /dev/null
+++ b/src/gs-removal-dialog.ui
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="min_content_height">160</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkFrame" id="frame">
+ <property name="visible">True</property>
+ <property name="shadow_type">in</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkListBox" id="listbox">
+ <property name="visible">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <template class="GsRemovalDialog" parent="GtkMessageDialog">
+ <property name="text" translatable="yes">Incompatible Software</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <child type="action">
+ <object class="GtkButton" id="button_cancel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="button_continue">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Continue</property>
+ <property name="use_underline">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="accept" default="true">button_continue</action-widget>
+ <action-widget response="cancel">button_cancel</action-widget>
+ </action-widgets>
+ </template>
+</interface>
diff --git a/src/gs-repo-row.c b/src/gs-repo-row.c
new file mode 100644
index 0000000..72f0416
--- /dev/null
+++ b/src/gs-repo-row.c
@@ -0,0 +1,290 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-repo-row.h"
+
+#include <glib/gi18n.h>
+
+typedef struct
+{
+ GsApp *repo;
+ GtkWidget *button;
+ GtkWidget *name_label;
+ GtkWidget *comment_label;
+ GtkWidget *details_revealer;
+ GtkWidget *status_label;
+ GtkWidget *url_box;
+ GtkWidget *url_label;
+ guint refresh_idle_id;
+} GsRepoRowPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsRepoRow, gs_repo_row, GTK_TYPE_LIST_BOX_ROW)
+
+enum {
+ SIGNAL_BUTTON_CLICKED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+void
+gs_repo_row_set_name (GsRepoRow *row, const gchar *name)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ gtk_label_set_text (GTK_LABEL (priv->name_label), name);
+ gtk_widget_set_visible (priv->name_label, name != NULL);
+}
+
+void
+gs_repo_row_set_comment (GsRepoRow *row, const gchar *comment)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ gtk_label_set_markup (GTK_LABEL (priv->comment_label), comment);
+ gtk_widget_set_visible (priv->comment_label, comment != NULL);
+}
+
+void
+gs_repo_row_set_url (GsRepoRow *row, const gchar *url)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ gtk_label_set_text (GTK_LABEL (priv->url_label), url);
+ gtk_widget_set_visible (priv->url_box, url != NULL);
+}
+
+static gboolean
+repo_supports_removal (GsApp *repo)
+{
+ const gchar *management_plugin = gs_app_get_management_plugin (repo);
+
+ /* can't remove a repo, only enable/disable existing ones */
+ if (g_strcmp0 (management_plugin, "fwupd") == 0 ||
+ g_strcmp0 (management_plugin, "packagekit") == 0 ||
+ g_strcmp0 (management_plugin, "rpm-ostree") == 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+refresh_ui (GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ if (priv->repo == NULL) {
+ gtk_widget_set_visible (priv->button, FALSE);
+ return;
+ }
+
+ gtk_widget_set_visible (priv->button, TRUE);
+
+ /* set button text */
+ switch (gs_app_get_state (priv->repo)) {
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ /* TRANSLATORS: this is a button in the software repositories
+ dialog for enabling a repo */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("_Enable"));
+ /* enable button */
+ gtk_widget_set_sensitive (priv->button, TRUE);
+ break;
+ case AS_APP_STATE_INSTALLED:
+ if (repo_supports_removal (priv->repo)) {
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ for removing a repo. The ellipsis indicates that further
+ steps are required */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("_Remove…"));
+ } else {
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ for disabling a repo. The ellipsis indicates that further
+ steps are required */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("_Disable…"));
+ }
+ /* enable button */
+ gtk_widget_set_sensitive (priv->button, TRUE);
+ break;
+ case AS_APP_STATE_INSTALLING:
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ that shows the status of a repo being enabled */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Enabling"));
+ /* disable button */
+ gtk_widget_set_sensitive (priv->button, FALSE);
+ break;
+ case AS_APP_STATE_REMOVING:
+ if (repo_supports_removal (priv->repo)) {
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ that shows the status of a repo being removed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Removing"));
+ } else {
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ that shows the status of a repo being disabled */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Disabling"));
+ }
+ /* disable button */
+ gtk_widget_set_sensitive (priv->button, FALSE);
+ break;
+ default:
+ break;
+ }
+
+ /* set enabled/disabled label */
+ switch (gs_app_get_state (priv->repo)) {
+ case AS_APP_STATE_INSTALLED:
+ /* TRANSLATORS: this is a label in the software repositories
+ dialog that indicates that a repo is enabled. */
+ gtk_label_set_text (GTK_LABEL (priv->status_label), _("Enabled"));
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ /* TRANSLATORS: this is a label in the software repositories
+ dialog that indicates that a repo is disabled. */
+ gtk_label_set_text (GTK_LABEL (priv->status_label), _("Disabled"));
+ break;
+ default:
+ break;
+ }
+}
+
+static gboolean
+refresh_idle (gpointer user_data)
+{
+ g_autoptr(GsRepoRow) row = (GsRepoRow *) user_data;
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ refresh_ui (row);
+
+ priv->refresh_idle_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void
+repo_state_changed_cb (GsApp *repo, GParamSpec *pspec, GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ if (priv->refresh_idle_id > 0)
+ return;
+ priv->refresh_idle_id = g_idle_add (refresh_idle, g_object_ref (row));
+}
+
+void
+gs_repo_row_set_repo (GsRepoRow *row, GsApp *repo)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ g_assert (priv->repo == NULL);
+
+ priv->repo = g_object_ref (repo);
+ g_signal_connect_object (priv->repo, "notify::state",
+ G_CALLBACK (repo_state_changed_cb),
+ row, 0);
+ refresh_ui (row);
+}
+
+GsApp *
+gs_repo_row_get_repo (GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+ return priv->repo;
+}
+
+void
+gs_repo_row_show_details (GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
+ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->details_revealer), TRUE);
+}
+
+void
+gs_repo_row_hide_details (GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), TRUE);
+ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->details_revealer), FALSE);
+}
+
+void
+gs_repo_row_show_status (GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+ gtk_widget_set_visible (priv->status_label, TRUE);
+}
+
+static void
+button_clicked_cb (GtkWidget *widget, GsRepoRow *row)
+{
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0);
+}
+
+static void
+gs_repo_row_destroy (GtkWidget *object)
+{
+ GsRepoRow *row = GS_REPO_ROW (object);
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ if (priv->repo != NULL) {
+ g_signal_handlers_disconnect_by_func (priv->repo, repo_state_changed_cb, row);
+ g_clear_object (&priv->repo);
+ }
+
+ if (priv->refresh_idle_id != 0) {
+ g_source_remove (priv->refresh_idle_id);
+ priv->refresh_idle_id = 0;
+ }
+
+ GTK_WIDGET_CLASS (gs_repo_row_parent_class)->destroy (object);
+}
+
+static void
+gs_repo_row_init (GsRepoRow *row)
+{
+ GsRepoRowPrivate *priv = gs_repo_row_get_instance_private (row);
+
+ gtk_widget_init_template (GTK_WIDGET (row));
+ g_signal_connect (priv->button, "clicked",
+ G_CALLBACK (button_clicked_cb), row);
+}
+
+static void
+gs_repo_row_class_init (GsRepoRowClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ widget_class->destroy = gs_repo_row_destroy;
+
+ signals [SIGNAL_BUTTON_CLICKED] =
+ g_signal_new ("button-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsRepoRowClass, button_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-repo-row.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, button);
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, name_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, comment_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, details_revealer);
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, status_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, url_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GsRepoRow, url_label);
+}
+
+GtkWidget *
+gs_repo_row_new (void)
+{
+ return g_object_new (GS_TYPE_REPO_ROW, NULL);
+}
diff --git a/src/gs-repo-row.h b/src/gs-repo-row.h
new file mode 100644
index 0000000..ff2564e
--- /dev/null
+++ b/src/gs-repo-row.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2015-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gnome-software-private.h"
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REPO_ROW (gs_repo_row_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsRepoRow, gs_repo_row, GS, REPO_ROW, GtkListBoxRow)
+
+struct _GsRepoRowClass
+{
+ GtkListBoxRowClass parent_class;
+ void (*button_clicked) (GsRepoRow *row);
+};
+
+GtkWidget *gs_repo_row_new (void);
+void gs_repo_row_set_name (GsRepoRow *row,
+ const gchar *name);
+void gs_repo_row_set_comment (GsRepoRow *row,
+ const gchar *comment);
+void gs_repo_row_set_url (GsRepoRow *row,
+ const gchar *url);
+void gs_repo_row_set_repo (GsRepoRow *row,
+ GsApp *repo);
+GsApp *gs_repo_row_get_repo (GsRepoRow *row);
+void gs_repo_row_show_details (GsRepoRow *row);
+void gs_repo_row_hide_details (GsRepoRow *row);
+void gs_repo_row_show_status (GsRepoRow *row);
+
+G_END_DECLS
diff --git a/src/gs-repo-row.ui b/src/gs-repo-row.ui
new file mode 100644
index 0000000..2cbe025
--- /dev/null
+++ b/src/gs-repo-row.ui
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsRepoRow" parent="GtkListBoxRow">
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="margin-top">18</property>
+ <property name="margin-bottom">18</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">18</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox" id="hbox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="status_label">
+ <property name="visible">False</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="comment_label">
+ <property name="visible">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRevealer" id="details_revealer">
+ <property name="visible">True</property>
+ <property name="transition-type">slide-down</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkBox" id="url_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="label" translatable="yes">URL</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="url_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkButton" id="button">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="width_request">105</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-repos-dialog.c b/src/gs-repos-dialog.c
new file mode 100644
index 0000000..53bbf2f
--- /dev/null
+++ b/src/gs-repos-dialog.c
@@ -0,0 +1,890 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-repos-dialog.h"
+
+#include "gnome-software-private.h"
+#include "gs-common.h"
+#include "gs-os-release.h"
+#include "gs-repo-row.h"
+#include "gs-third-party-repo-row.h"
+#include "gs-utils.h"
+#include <glib/gi18n.h>
+
+struct _GsReposDialog
+{
+ GtkDialog parent_instance;
+ GSettings *settings;
+ GsApp *third_party_repo;
+
+ GCancellable *cancellable;
+ GsPluginLoader *plugin_loader;
+ GtkWidget *frame_third_party;
+ GtkWidget *label_description;
+ GtkWidget *label_empty;
+ GtkWidget *label_header;
+ GtkWidget *listbox;
+ GtkWidget *listbox_third_party;
+ GtkWidget *row_third_party;
+ GtkWidget *spinner;
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE (GsReposDialog, gs_repos_dialog, GTK_TYPE_DIALOG)
+
+typedef struct {
+ GsReposDialog *dialog;
+ GsApp *repo;
+ GsPluginAction action;
+} InstallRemoveData;
+
+static void
+install_remove_data_free (InstallRemoveData *data)
+{
+ g_clear_object (&data->dialog);
+ g_clear_object (&data->repo);
+ g_slice_free (InstallRemoveData, data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstallRemoveData, install_remove_data_free);
+
+static void reload_sources (GsReposDialog *dialog);
+static void reload_third_party_repo (GsReposDialog *dialog);
+
+static gchar *
+get_repo_installed_text (GsApp *repo)
+{
+ GsAppList *related;
+ guint cnt_addon = 0;
+ guint cnt_apps = 0;
+ g_autofree gchar *addons_text = NULL;
+ g_autofree gchar *apps_text = NULL;
+
+ related = gs_app_get_related (repo);
+ for (guint i = 0; i < gs_app_list_length (related); i++) {
+ GsApp *app_tmp = gs_app_list_index (related, i);
+ switch (gs_app_get_kind (app_tmp)) {
+ case AS_APP_KIND_WEB_APP:
+ case AS_APP_KIND_DESKTOP:
+ cnt_apps++;
+ break;
+ case AS_APP_KIND_FONT:
+ case AS_APP_KIND_CODEC:
+ case AS_APP_KIND_INPUT_METHOD:
+ case AS_APP_KIND_ADDON:
+ cnt_addon++;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (cnt_apps == 0 && cnt_addon == 0) {
+ /* nothing! */
+ return NULL;
+ }
+ if (cnt_addon == 0) {
+ /* TRANSLATORS: This string is used to construct the 'X applications
+ installed' sentence, describing a software repository. */
+ return g_strdup_printf (ngettext ("%u application installed",
+ "%u applications installed",
+ cnt_apps), cnt_apps);
+ }
+ if (cnt_apps == 0) {
+ /* TRANSLATORS: This string is used to construct the 'X add-ons
+ installed' sentence, describing a software repository. */
+ return g_strdup_printf (ngettext ("%u add-on installed",
+ "%u add-ons installed",
+ cnt_addon), cnt_addon);
+ }
+
+ /* TRANSLATORS: This string is used to construct the 'X applications
+ and y add-ons installed' sentence, describing a software repository.
+ The correct form here depends on the number of applications. */
+ apps_text = g_strdup_printf (ngettext ("%u application",
+ "%u applications",
+ cnt_apps), cnt_apps);
+ /* TRANSLATORS: This string is used to construct the 'X applications
+ and y add-ons installed' sentence, describing a software repository.
+ The correct form here depends on the number of add-ons. */
+ addons_text = g_strdup_printf (ngettext ("%u add-on",
+ "%u add-ons",
+ cnt_addon), cnt_addon);
+ /* TRANSLATORS: This string is used to construct the 'X applications
+ and y add-ons installed' sentence, describing a software repository.
+ The correct form here depends on the total number of
+ applications and add-ons. */
+ return g_strdup_printf (ngettext ("%s and %s installed",
+ "%s and %s installed",
+ cnt_apps + cnt_addon),
+ apps_text, addons_text);
+}
+
+static gboolean
+repo_supports_removal (GsApp *repo)
+{
+ const gchar *management_plugin = gs_app_get_management_plugin (repo);
+
+ /* can't remove a repo, only enable/disable existing ones */
+ if (g_strcmp0 (management_plugin, "fwupd") == 0 ||
+ g_strcmp0 (management_plugin, "packagekit") == 0 ||
+ g_strcmp0 (management_plugin, "rpm-ostree") == 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+repo_enabled_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(InstallRemoveData) install_remove_data = (InstallRemoveData *) user_data;
+ g_autoptr(GError) error = NULL;
+ const gchar *action_str;
+
+ action_str = gs_plugin_action_to_string (install_remove_data->action);
+
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("repo %s cancelled", action_str);
+ return;
+ }
+
+ g_warning ("failed to %s repo: %s", action_str, error->message);
+ return;
+ }
+
+ g_debug ("finished %s repo %s", action_str, gs_app_get_id (install_remove_data->repo));
+}
+
+static void
+_enable_repo (InstallRemoveData *install_data)
+{
+ GsReposDialog *dialog = install_data->dialog;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_debug ("enabling repo %s", gs_app_get_id (install_data->repo));
+ plugin_job = gs_plugin_job_newv (install_data->action,
+ "interactive", TRUE,
+ "app", install_data->repo,
+ NULL);
+ gs_plugin_loader_job_process_async (dialog->plugin_loader, plugin_job,
+ dialog->cancellable,
+ repo_enabled_cb,
+ install_data);
+}
+
+static void
+enable_repo_response_cb (GtkDialog *confirm_dialog,
+ gint response,
+ gpointer user_data)
+{
+ g_autoptr(InstallRemoveData) install_data = (InstallRemoveData *) user_data;
+
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (confirm_dialog));
+
+ /* not agreed */
+ if (response != GTK_RESPONSE_OK)
+ return;
+
+ _enable_repo (g_steal_pointer (&install_data));
+}
+
+static void
+enable_repo (GsReposDialog *dialog, GsApp *repo)
+{
+ g_autoptr(InstallRemoveData) install_data = NULL;
+
+ install_data = g_slice_new0 (InstallRemoveData);
+ install_data->action = GS_PLUGIN_ACTION_INSTALL;
+ install_data->repo = g_object_ref (repo);
+ install_data->dialog = g_object_ref (dialog);
+
+ /* user needs to confirm acceptance of an agreement */
+ if (gs_app_get_agreement (repo) != NULL) {
+ GtkWidget *confirm_dialog;
+ g_autofree gchar *message = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* convert from AppStream markup */
+ message = as_markup_convert_simple (gs_app_get_agreement (repo), &error);
+ if (message == NULL) {
+ /* failed, so just try and show the original markup */
+ message = g_strdup (gs_app_get_agreement (repo));
+ g_warning ("Failed to process AppStream markup: %s",
+ error->message);
+ }
+
+ /* ask for confirmation */
+ confirm_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_CANCEL,
+ /* TRANSLATORS: window title */
+ "%s", _("Enable Third-Party Software Repository?"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (confirm_dialog),
+ "%s", message);
+
+ /* TRANSLATORS: button to accept the agreement */
+ gtk_dialog_add_button (GTK_DIALOG (confirm_dialog), _("Enable"),
+ GTK_RESPONSE_OK);
+
+ /* handle this async */
+ g_signal_connect (confirm_dialog, "response",
+ G_CALLBACK (enable_repo_response_cb),
+ g_steal_pointer (&install_data));
+
+ gtk_window_set_modal (GTK_WINDOW (confirm_dialog), TRUE);
+ gtk_window_present (GTK_WINDOW (confirm_dialog));
+ return;
+ }
+
+ /* no prompt required */
+ _enable_repo (g_steal_pointer (&install_data));
+}
+
+static void
+remove_repo_response_cb (GtkDialog *confirm_dialog,
+ gint response,
+ gpointer user_data)
+{
+ g_autoptr(InstallRemoveData) remove_data = (InstallRemoveData *) user_data;
+ GsReposDialog *dialog = remove_data->dialog;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (confirm_dialog));
+
+ /* not agreed */
+ if (response != GTK_RESPONSE_OK)
+ return;
+
+ g_debug ("removing repo %s", gs_app_get_id (remove_data->repo));
+ plugin_job = gs_plugin_job_newv (remove_data->action,
+ "interactive", TRUE,
+ "app", remove_data->repo,
+ NULL);
+ gs_plugin_loader_job_process_async (dialog->plugin_loader, plugin_job,
+ dialog->cancellable,
+ repo_enabled_cb,
+ g_steal_pointer (&remove_data));
+}
+
+static void
+remove_confirm_repo (GsReposDialog *dialog, GsApp *repo)
+{
+ InstallRemoveData *remove_data;
+ GtkWidget *confirm_dialog;
+ g_autofree gchar *message = NULL;
+ g_autofree gchar *title = NULL;
+ GtkWidget *button;
+ GtkStyleContext *context;
+
+ remove_data = g_slice_new0 (InstallRemoveData);
+ remove_data->action = GS_PLUGIN_ACTION_REMOVE;
+ remove_data->repo = g_object_ref (repo);
+ remove_data->dialog = g_object_ref (dialog);
+
+ if (repo_supports_removal (repo)) {
+ /* TRANSLATORS: this is a prompt message, and '%s' is a
+ * repository name, e.g. 'GNOME Nightly' */
+ title = g_strdup_printf (_("Remove “%s”?"),
+ gs_app_get_name (repo));
+ } else {
+ /* TRANSLATORS: this is a prompt message, and '%s' is a
+ * repository name, e.g. 'GNOME Nightly' */
+ title = g_strdup_printf (_("Disable “%s”?"),
+ gs_app_get_name (repo));
+ }
+ /* TRANSLATORS: longer dialog text */
+ message = g_strdup (_("Software that has been installed from this "
+ "repository will no longer receive updates, "
+ "including security fixes."));
+
+ /* ask for confirmation */
+ confirm_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_CANCEL,
+ "%s", title);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (confirm_dialog),
+ "%s", message);
+
+ if (repo_supports_removal (repo)) {
+ /* TRANSLATORS: this is button text to remove the repo */
+ button = gtk_dialog_add_button (GTK_DIALOG (confirm_dialog), _("Remove"), GTK_RESPONSE_OK);
+ } else {
+ /* TRANSLATORS: this is button text to remove the repo */
+ button = gtk_dialog_add_button (GTK_DIALOG (confirm_dialog), _("Disable"), GTK_RESPONSE_OK);
+ }
+
+ context = gtk_widget_get_style_context (button);
+ gtk_style_context_add_class (context, "destructive-action");
+
+ /* handle this async */
+ g_signal_connect (confirm_dialog, "response",
+ G_CALLBACK (remove_repo_response_cb), remove_data);
+
+ gtk_window_set_modal (GTK_WINDOW (confirm_dialog), TRUE);
+ gtk_window_present (GTK_WINDOW (confirm_dialog));
+}
+
+static void
+repo_button_clicked_cb (GsRepoRow *row,
+ GsReposDialog *dialog)
+{
+ GsApp *repo;
+
+ repo = gs_repo_row_get_repo (row);
+
+ switch (gs_app_get_state (repo)) {
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ enable_repo (dialog, repo);
+ break;
+ case AS_APP_STATE_INSTALLED:
+ remove_confirm_repo (dialog, repo);
+ break;
+ default:
+ g_warning ("repo %s button clicked in unexpected state %s",
+ gs_app_get_id (repo),
+ as_app_state_to_string (gs_app_get_state (repo)));
+ break;
+ }
+}
+
+static GtkListBox *
+get_list_box_for_repo (GsReposDialog *dialog, GsApp *repo)
+{
+ if (dialog->third_party_repo != NULL) {
+ const gchar *source_repo;
+ const gchar *source_third_party_package;
+
+ source_repo = gs_app_get_source_id_default (repo);
+ source_third_party_package = gs_app_get_source_id_default (dialog->third_party_repo);
+
+ /* group repos from the same repo-release package together */
+ if (g_strcmp0 (source_repo, source_third_party_package) == 0)
+ return GTK_LIST_BOX (dialog->listbox_third_party);
+ }
+
+ return GTK_LIST_BOX (dialog->listbox);
+}
+
+static void
+add_repo (GsReposDialog *dialog, GsApp *repo)
+{
+ GtkWidget *row;
+ g_autofree gchar *text = NULL;
+ AsAppState state;
+
+ state = gs_app_get_state (repo);
+ if (!(state == AS_APP_STATE_AVAILABLE ||
+ state == AS_APP_STATE_AVAILABLE_LOCAL ||
+ state == AS_APP_STATE_INSTALLED ||
+ state == AS_APP_STATE_INSTALLING ||
+ state == AS_APP_STATE_REMOVING)) {
+ g_warning ("repo %s in invalid state %s",
+ gs_app_get_id (repo),
+ as_app_state_to_string (state));
+ return;
+ }
+
+ row = gs_repo_row_new ();
+ gs_repo_row_set_name (GS_REPO_ROW (row),
+ gs_app_get_name (repo));
+ text = get_repo_installed_text (repo);
+ gs_repo_row_set_comment (GS_REPO_ROW (row), text);
+ gs_repo_row_set_url (GS_REPO_ROW (row),
+ gs_app_get_url (repo, AS_URL_KIND_HOMEPAGE));
+ gs_repo_row_show_status (GS_REPO_ROW (row));
+ gs_repo_row_set_repo (GS_REPO_ROW (row), repo);
+
+ g_signal_connect (row, "button-clicked",
+ G_CALLBACK (repo_button_clicked_cb), dialog);
+
+ gtk_list_box_prepend (get_list_box_for_repo (dialog, repo), row);
+ gtk_widget_show (row);
+}
+
+static void
+third_party_repo_installed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(InstallRemoveData) install_data = (InstallRemoveData *) user_data;
+ g_autoptr(GError) error = NULL;
+
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ const gchar *action_str = gs_plugin_action_to_string (install_data->action);
+
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("third party repo %s cancelled", action_str);
+ return;
+ }
+
+ g_warning ("failed to %s third party repo: %s", action_str, error->message);
+ return;
+ }
+
+ reload_sources (install_data->dialog);
+}
+
+static void
+install_third_party_repo (GsReposDialog *dialog, gboolean install)
+{
+ InstallRemoveData *install_data;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ install_data = g_slice_new0 (InstallRemoveData);
+ install_data->dialog = g_object_ref (dialog);
+ install_data->action = install ? GS_PLUGIN_ACTION_INSTALL : GS_PLUGIN_ACTION_REMOVE;
+
+ plugin_job = gs_plugin_job_newv (install_data->action,
+ "interactive", TRUE,
+ "app", dialog->third_party_repo,
+ NULL);
+ gs_plugin_loader_job_process_async (dialog->plugin_loader,
+ plugin_job,
+ dialog->cancellable,
+ third_party_repo_installed_cb,
+ install_data);
+}
+
+static void
+third_party_repo_button_clicked_cb (GsThirdPartyRepoRow *row,
+ gpointer user_data)
+{
+ GsReposDialog *dialog = (GsReposDialog *) user_data;
+ GsApp *app;
+
+ app = gs_third_party_repo_row_get_app (row);
+
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_UNAVAILABLE:
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ install_third_party_repo (dialog, TRUE);
+ break;
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_INSTALLED:
+ install_third_party_repo (dialog, FALSE);
+ break;
+ default:
+ g_warning ("third party repo %s button clicked in unexpected state %s",
+ gs_app_get_id (app),
+ as_app_state_to_string (gs_app_get_state (app)));
+ break;
+ }
+
+ g_settings_set_boolean (dialog->settings, "show-nonfree-prompt", FALSE);
+}
+
+static void
+refresh_third_party_repo (GsReposDialog *dialog)
+{
+ if (dialog->third_party_repo == NULL) {
+ gtk_widget_hide (dialog->frame_third_party);
+ return;
+ }
+
+ gtk_widget_show (dialog->frame_third_party);
+}
+
+static void
+remove_all_repo_rows_cb (GtkWidget *widget, gpointer user_data)
+{
+ GtkContainer *container = GTK_CONTAINER (user_data);
+
+ if (GS_IS_REPO_ROW (widget))
+ gtk_container_remove (container, widget);
+}
+
+static void
+container_remove_all_repo_rows (GtkContainer *container)
+{
+ gtk_container_foreach (container, remove_all_repo_rows_cb, container);
+}
+
+static void
+get_sources_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsReposDialog *dialog)
+{
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get the results */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("get sources cancelled");
+ return;
+ } else {
+ g_warning ("failed to get sources: %s", error->message);
+ }
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "empty");
+ gtk_style_context_add_class (gtk_widget_get_style_context (dialog->label_header),
+ "dim-label");
+ return;
+ }
+
+ /* remove previous */
+ gs_container_remove_all (GTK_CONTAINER (dialog->listbox));
+ container_remove_all_repo_rows (GTK_CONTAINER (dialog->listbox_third_party));
+
+ /* stop the spinner */
+ gs_stop_spinner (GTK_SPINNER (dialog->spinner));
+
+ /* no results */
+ if (gs_app_list_length (list) == 0) {
+ g_debug ("no sources to show");
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "empty");
+ gtk_style_context_add_class (gtk_widget_get_style_context (dialog->label_header), "dim-label");
+ return;
+ }
+
+ gtk_style_context_remove_class (gtk_widget_get_style_context (dialog->label_header),
+ "dim-label");
+
+ /* add each */
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "sources");
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ add_repo (dialog, app);
+ }
+}
+
+static void
+resolve_third_party_repo_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsReposDialog *dialog)
+{
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get the results */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("resolve third party repo cancelled");
+ return;
+ } else {
+ g_warning ("failed to resolve third party repo: %s", error->message);
+ return;
+ }
+ }
+
+ /* we should only get one result */
+ if (gs_app_list_length (list) > 0)
+ app = gs_app_list_index (list, 0);
+ else
+ app = NULL;
+
+ g_set_object (&dialog->third_party_repo, app);
+ gs_third_party_repo_row_set_app (GS_THIRD_PARTY_REPO_ROW (dialog->row_third_party), app);
+
+ /* refresh widget */
+ refresh_third_party_repo (dialog);
+}
+
+static void
+reload_sources (GsReposDialog *dialog)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* get the list of non-core software repositories */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_SOURCES,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME,
+ NULL);
+ gs_plugin_loader_job_process_async (dialog->plugin_loader, plugin_job,
+ dialog->cancellable,
+ (GAsyncReadyCallback) get_sources_cb,
+ dialog);
+}
+
+static gboolean
+is_fedora (void)
+{
+ const gchar *id = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+
+ os_release = gs_os_release_new (NULL);
+ if (os_release == NULL)
+ return FALSE;
+
+ id = gs_os_release_get_id (os_release);
+ if (g_strcmp0 (id, "fedora") == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void
+reload_third_party_repo (GsReposDialog *dialog)
+{
+ const gchar *third_party_repo_package = "fedora-workstation-repositories";
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* Fedora-specific functionality */
+ if (!is_fedora ())
+ return;
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH_PROVIDES,
+ "search", third_party_repo_package,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_ALLOW_PACKAGES,
+ NULL);
+ gs_plugin_loader_job_process_async (dialog->plugin_loader, plugin_job,
+ dialog->cancellable,
+ (GAsyncReadyCallback) resolve_third_party_repo_cb,
+ dialog);
+}
+
+static void
+list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header = NULL;
+ if (before != NULL)
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static gchar *
+get_row_sort_key (GtkListBoxRow *row)
+{
+ GsApp *app;
+ guint sort_order;
+ g_autofree gchar *sort_key = NULL;
+
+ /* sort third party repo rows first */
+ if (GS_IS_THIRD_PARTY_REPO_ROW (row)) {
+ sort_order = 1;
+ app = gs_third_party_repo_row_get_app (GS_THIRD_PARTY_REPO_ROW (row));
+ } else {
+ sort_order = 2;
+ app = gs_repo_row_get_repo (GS_REPO_ROW (row));
+ }
+
+ if (gs_app_get_name (app) != NULL) {
+ sort_key = gs_utils_sort_key (gs_app_get_name (app));
+ return g_strdup_printf ("%u:%s", sort_order, sort_key);
+ } else {
+ return g_strdup_printf ("%u:", sort_order);
+ }
+}
+
+static gint
+list_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ g_autofree gchar *key1 = get_row_sort_key (a);
+ g_autofree gchar *key2 = get_row_sort_key (b);
+
+ /* compare the keys according to the algorithm above */
+ return g_strcmp0 (key1, key2);
+}
+
+static void
+list_row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ GsReposDialog *dialog)
+{
+ GtkListBoxRow *other_row;
+
+ if (!GS_IS_REPO_ROW (row))
+ return;
+
+ gs_repo_row_show_details (GS_REPO_ROW (row));
+
+ for (guint i = 0; (other_row = gtk_list_box_get_row_at_index (list_box, i)) != NULL; i++) {
+ if (!GS_IS_REPO_ROW (other_row))
+ continue;
+ if (other_row == row)
+ continue;
+
+ gs_repo_row_hide_details (GS_REPO_ROW (other_row));
+ }
+}
+
+static gchar *
+get_os_name (void)
+{
+ gchar *name = NULL;
+ g_autoptr(GsOsRelease) os_release = NULL;
+
+ os_release = gs_os_release_new (NULL);
+ if (os_release != NULL)
+ name = g_strdup (gs_os_release_get_name (os_release));
+ if (name == NULL) {
+ /* TRANSLATORS: this is the fallback text we use if we can't
+ figure out the name of the operating system */
+ name = g_strdup (_("the operating system"));
+ }
+
+ return name;
+}
+
+static void
+reload_cb (GsPluginLoader *plugin_loader, GsReposDialog *dialog)
+{
+ reload_sources (dialog);
+ reload_third_party_repo (dialog);
+}
+
+static void
+set_plugin_loader (GsReposDialog *dialog, GsPluginLoader *plugin_loader)
+{
+ dialog->plugin_loader = g_object_ref (plugin_loader);
+ g_signal_connect (dialog->plugin_loader, "reload",
+ G_CALLBACK (reload_cb), dialog);
+}
+
+static void
+gs_repos_dialog_dispose (GObject *object)
+{
+ GsReposDialog *dialog = GS_REPOS_DIALOG (object);
+
+ if (dialog->plugin_loader != NULL) {
+ g_signal_handlers_disconnect_by_func (dialog->plugin_loader, reload_cb, dialog);
+ g_clear_object (&dialog->plugin_loader);
+ }
+
+ g_cancellable_cancel (dialog->cancellable);
+ g_clear_object (&dialog->cancellable);
+ g_clear_object (&dialog->settings);
+ g_clear_object (&dialog->third_party_repo);
+
+ G_OBJECT_CLASS (gs_repos_dialog_parent_class)->dispose (object);
+}
+
+static void
+gs_repos_dialog_init (GsReposDialog *dialog)
+{
+ g_autofree gchar *label_description_text = NULL;
+ g_autofree gchar *label_empty_text = NULL;
+ g_autofree gchar *os_name = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+
+ dialog->cancellable = g_cancellable_new ();
+ dialog->settings = g_settings_new ("org.gnome.software");
+
+ os_name = get_os_name ();
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (dialog->listbox),
+ list_header_func,
+ dialog,
+ NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (dialog->listbox),
+ list_sort_func,
+ dialog, NULL);
+ g_signal_connect (dialog->listbox, "row-activated",
+ G_CALLBACK (list_row_activated_cb), dialog);
+
+ /* TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+ %s gets replaced by the name of the actual distro, e.g. Fedora. */
+ label_description_text = g_strdup_printf (_("These repositories supplement the default software provided by %s."),
+ os_name);
+ gtk_label_set_text (GTK_LABEL (dialog->label_description), label_description_text);
+
+ /* set up third party repository row */
+ gtk_list_box_set_header_func (GTK_LIST_BOX (dialog->listbox_third_party),
+ list_header_func,
+ dialog,
+ NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (dialog->listbox_third_party),
+ list_sort_func,
+ dialog, NULL);
+ g_signal_connect (dialog->listbox_third_party, "row-activated",
+ G_CALLBACK (list_row_activated_cb), dialog);
+ g_signal_connect (dialog->row_third_party, "button-clicked",
+ G_CALLBACK (third_party_repo_button_clicked_cb), dialog);
+ gs_third_party_repo_row_set_name (GS_THIRD_PARTY_REPO_ROW (dialog->row_third_party),
+ /* TRANSLATORS: info bar title in the software repositories dialog */
+ _("Third Party Repositories"));
+ g_string_append (str,
+ /* TRANSLATORS: this is the third party repositories info bar. */
+ _("Access additional software from selected third party sources."));
+ g_string_append (str, " ");
+ g_string_append (str,
+ /* TRANSLATORS: this is the third party repositories info bar. */
+ _("Some of this software is proprietary and therefore has restrictions on use, sharing, and access to source code."));
+ g_string_append_printf (str, " <a href=\"%s\">%s</a>",
+ "https://fedoraproject.org/wiki/Workstation/Third_Party_Software_Repositories",
+ /* TRANSLATORS: this is the clickable
+ * link on the third party repositories info bar */
+ _("Find out more…"));
+ gs_third_party_repo_row_set_comment (GS_THIRD_PARTY_REPO_ROW (dialog->row_third_party), str->str);
+ refresh_third_party_repo (dialog);
+
+ /* TRANSLATORS: This is the description text displayed in the Software Repositories dialog.
+ %s gets replaced by the name of the actual distro, e.g. Fedora. */
+ label_empty_text = g_strdup_printf (_("These repositories supplement the default software provided by %s."),
+ os_name);
+ gtk_label_set_text (GTK_LABEL (dialog->label_empty), label_empty_text);
+}
+
+static void
+gs_repos_dialog_class_init (GsReposDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_repos_dialog_dispose;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-repos-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, frame_third_party);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, label_description);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, label_empty);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, label_header);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, listbox);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, listbox_third_party);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, row_third_party);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, spinner);
+ gtk_widget_class_bind_template_child (widget_class, GsReposDialog, stack);
+}
+
+GtkWidget *
+gs_repos_dialog_new (GtkWindow *parent, GsPluginLoader *plugin_loader)
+{
+ GsReposDialog *dialog;
+
+ dialog = g_object_new (GS_TYPE_REPOS_DIALOG,
+ "use-header-bar", TRUE,
+ "transient-for", parent,
+ "modal", TRUE,
+ NULL);
+ set_plugin_loader (dialog, plugin_loader);
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "waiting");
+ gs_start_spinner (GTK_SPINNER (dialog->spinner));
+ reload_sources (dialog);
+ reload_third_party_repo (dialog);
+
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-repos-dialog.h b/src/gs-repos-dialog.h
new file mode 100644
index 0000000..ff82350
--- /dev/null
+++ b/src/gs-repos-dialog.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REPOS_DIALOG (gs_repos_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsReposDialog, gs_repos_dialog, GS, REPOS_DIALOG, GtkDialog)
+
+GtkWidget *gs_repos_dialog_new (GtkWindow *parent,
+ GsPluginLoader *plugin_loader);
+
+G_END_DECLS
diff --git a/src/gs-repos-dialog.ui b/src/gs-repos-dialog.ui
new file mode 100644
index 0000000..b53b574
--- /dev/null
+++ b/src/gs-repos-dialog.ui
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsReposDialog" parent="GtkDialog">
+ <property name="title" translatable="yes">Software Repositories</property>
+ <property name="modal">True</property>
+ <property name="default_width">600</property>
+ <property name="default_height">600</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <child type="title">
+ <object class="GtkLabel" id="label_header">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Software Repositories</property>
+ <property name="selectable">False</property>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ <packing>
+ <property name="name">waiting</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_empty">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="spacing">16</property>
+ <property name="orientation">vertical</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="icon_empty">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="pixel-size">64</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_empty_title">
+ <property name="visible">True</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="label" translatable="yes">No Additional Repositories</property>
+ <property name="max_width_chars">40</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_empty">
+ <property name="visible">True</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">40</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">empty</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="margin_start">52</property>
+ <property name="margin_end">52</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">40</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label_description">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">30</property>
+ <property name="margin_bottom">16</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame_third_party">
+ <property name="visible">True</property>
+ <property name="shadow_type">in</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="margin_bottom">16</property>
+ <child>
+ <object class="GtkListBox" id="listbox_third_party">
+ <property name="visible">True</property>
+ <property name="selection_mode">none</property>
+ <child>
+ <object class="GsThirdPartyRepoRow" id="row_third_party">
+ <property name="visible">True</property>
+ <property name="activatable">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame">
+ <property name="visible">True</property>
+ <property name="shadow_type">in</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="vexpand">True</property>
+ <property name="margin_top">9</property>
+ <child>
+ <object class="GtkListBox" id="listbox">
+ <property name="visible">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">sources</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-restarter.c b/src/gs-restarter.c
new file mode 100644
index 0000000..f4c0b47
--- /dev/null
+++ b/src/gs-restarter.c
@@ -0,0 +1,216 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+#include <stdlib.h>
+
+#define GS_BINARY_NAME "gnome-software"
+#define GS_DBUS_BUS_NAME "org.gnome.Software"
+#define GS_DBUS_OBJECT_PATH "/org/gnome/Software"
+#define GS_DBUS_INTERFACE_NAME "org.gtk.Actions"
+
+typedef struct {
+ GMainLoop *loop;
+ GDBusConnection *connection;
+ gboolean is_running;
+ gboolean timed_out;
+} GsRestarterPrivate;
+
+static void
+gs_restarter_on_name_appeared_cb (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
+{
+ GsRestarterPrivate *priv = (GsRestarterPrivate *) user_data;
+ priv->is_running = TRUE;
+ g_debug ("%s appeared", GS_DBUS_BUS_NAME);
+ if (g_main_loop_is_running (priv->loop))
+ g_main_loop_quit (priv->loop);
+}
+
+static void
+gs_restarter_on_name_vanished_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ GsRestarterPrivate *priv = (GsRestarterPrivate *) user_data;
+ priv->is_running = FALSE;
+ g_debug ("%s vanished", GS_DBUS_BUS_NAME);
+ if (g_main_loop_is_running (priv->loop))
+ g_main_loop_quit (priv->loop);
+}
+
+static gboolean
+gs_restarter_loop_timeout_cb (gpointer user_data)
+{
+ GsRestarterPrivate *priv = (GsRestarterPrivate *) user_data;
+ priv->timed_out = TRUE;
+ g_main_loop_quit (priv->loop);
+ return TRUE;
+}
+
+static gboolean
+gs_restarter_wait_for_timeout (GsRestarterPrivate *priv,
+ guint timeout_ms,
+ GError **error)
+{
+ guint timer_id;
+ priv->timed_out = FALSE;
+ timer_id = g_timeout_add (timeout_ms, gs_restarter_loop_timeout_cb, priv);
+ g_main_loop_run (priv->loop);
+ g_source_remove (timer_id);
+ if (priv->timed_out) {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_TIMED_OUT,
+ "Waited for %ums", timeout_ms);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static GsRestarterPrivate *
+gs_restarter_private_new (void)
+{
+ GsRestarterPrivate *priv = g_new0 (GsRestarterPrivate, 1);
+ priv->loop = g_main_loop_new (NULL, FALSE);
+ return priv;
+}
+
+static void
+gs_restarter_private_free (GsRestarterPrivate *priv)
+{
+ if (priv->connection != NULL)
+ g_object_unref (priv->connection);
+ g_main_loop_unref (priv->loop);
+ g_free (priv);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsRestarterPrivate, gs_restarter_private_free)
+
+static gboolean
+gs_restarter_create_new_process (GsRestarterPrivate *priv, GError **error)
+{
+ g_autofree gchar *binary_filename = NULL;
+
+ /* start executable */
+ binary_filename = g_build_filename (BINDIR, GS_BINARY_NAME, NULL);
+ g_debug ("starting new binary %s", binary_filename);
+ if (!g_spawn_command_line_async (binary_filename, error))
+ return FALSE;
+
+ /* wait for the bus name to appear */
+ if (!gs_restarter_wait_for_timeout (priv, 15000, error)) {
+ g_prefix_error (error, "%s did not appear: ", GS_DBUS_BUS_NAME);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gs_restarter_destroy_old_process (GsRestarterPrivate *priv, GError **error)
+{
+ GVariantBuilder args_params;
+ GVariantBuilder args_platform_data;
+ g_autoptr(GVariant) reply = NULL;
+
+ /* call a GtkAction */
+ g_variant_builder_init (&args_params, g_variant_type_new ("av"));
+ g_variant_builder_init (&args_platform_data, g_variant_type_new ("a{sv}"));
+ reply = g_dbus_connection_call_sync (priv->connection,
+ GS_DBUS_BUS_NAME,
+ GS_DBUS_OBJECT_PATH,
+ GS_DBUS_INTERFACE_NAME,
+ "Activate",
+ g_variant_new ("(sava{sv})",
+ "shutdown",
+ &args_params,
+ &args_platform_data),
+ NULL,
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 5000,
+ NULL,
+ error);
+ if (reply == NULL) {
+ g_prefix_error (error, "Failed to send RequestShutdown: ");
+ return FALSE;
+ }
+
+ /* wait for the name to disappear from the bus */
+ if (!gs_restarter_wait_for_timeout (priv, 30000, error)) {
+ g_prefix_error (error, "Failed to see %s vanish: ", GS_DBUS_BUS_NAME);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gs_restarter_setup_watcher (GsRestarterPrivate *priv, GError **error)
+{
+ /* watch the name appear and vanish */
+ priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error);
+ if (priv->connection == NULL) {
+ g_prefix_error (error, "Failed to get D-Bus connection: ");
+ return FALSE;
+ }
+ g_bus_watch_name_on_connection (priv->connection,
+ GS_DBUS_BUS_NAME,
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ gs_restarter_on_name_appeared_cb,
+ gs_restarter_on_name_vanished_cb,
+ priv,
+ NULL);
+
+ /* wait for one of the callbacks to be called */
+ if (!gs_restarter_wait_for_timeout (priv, 50, error)) {
+ g_prefix_error (error, "Failed to watch %s: ", GS_DBUS_BUS_NAME);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+ g_autoptr(GsRestarterPrivate) priv = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* show all debugging */
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* set up the watcher */
+ priv = gs_restarter_private_new ();
+ if (!gs_restarter_setup_watcher (priv, &error)) {
+ g_warning ("Failed to set up: %s", error->message);
+ return EXIT_FAILURE;
+ }
+
+ /* kill the old process */
+ if (priv->is_running) {
+ if (!gs_restarter_destroy_old_process (priv, &error)) {
+ g_warning ("Failed to quit service: %s", error->message);
+ return EXIT_FAILURE;
+ }
+ }
+
+ /* start a new process */
+ if (!gs_restarter_create_new_process (priv, &error)) {
+ g_warning ("Failed to start service: %s", error->message);
+ return EXIT_FAILURE;
+ }
+
+ /* success */
+ g_debug ("%s process successfully restarted", GS_DBUS_BUS_NAME);
+ return EXIT_SUCCESS;
+}
diff --git a/src/gs-review-bar.c b/src/gs-review-bar.c
new file mode 100644
index 0000000..4f58c83
--- /dev/null
+++ b/src/gs-review-bar.c
@@ -0,0 +1,77 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <math.h>
+
+#include "gs-review-bar.h"
+
+struct _GsReviewBar
+{
+ GtkBin parent_instance;
+ gdouble fraction;
+};
+
+G_DEFINE_TYPE (GsReviewBar, gs_review_bar, GTK_TYPE_BIN)
+
+void
+gs_review_bar_set_fraction (GsReviewBar *bar, gdouble fraction)
+{
+ g_return_if_fail (GS_IS_REVIEW_BAR (bar));
+ bar->fraction = fraction;
+}
+
+static void
+gs_review_bar_init (GsReviewBar *bar)
+{
+}
+
+static gboolean
+gs_review_bar_draw (GtkWidget *widget, cairo_t *cr)
+{
+ GtkStyleContext *context;
+ gdouble y_offset, bar_height;
+ GdkRGBA color;
+
+ context = gtk_widget_get_style_context (widget);
+
+ /* don't fill the complete height (too heavy beside GtkLabel of that height) */
+ y_offset = floor (0.15 * gtk_widget_get_allocated_height (widget));
+ bar_height = gtk_widget_get_allocated_height (widget) - (y_offset * 2);
+
+ gtk_render_background (context, cr,
+ 0, y_offset,
+ gtk_widget_get_allocated_width (widget),
+ bar_height);
+
+ cairo_rectangle (cr,
+ 0, y_offset,
+ round (GS_REVIEW_BAR (widget)->fraction * gtk_widget_get_allocated_width (widget)),
+ bar_height);
+ gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), &color);
+ cairo_set_source_rgba (cr, color.red, color.green, color.blue, color.alpha);
+ cairo_fill (cr);
+
+ return GTK_WIDGET_CLASS (gs_review_bar_parent_class)->draw (widget, cr);
+}
+
+static void
+gs_review_bar_class_init (GsReviewBarClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ widget_class->draw = gs_review_bar_draw;
+}
+
+GtkWidget *
+gs_review_bar_new (void)
+{
+ GsReviewBar *bar;
+ bar = g_object_new (GS_TYPE_REVIEW_BAR, NULL);
+ return GTK_WIDGET (bar);
+}
diff --git a/src/gs-review-bar.h b/src/gs-review-bar.h
new file mode 100644
index 0000000..e09dca0
--- /dev/null
+++ b/src/gs-review-bar.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REVIEW_BAR (gs_review_bar_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsReviewBar, gs_review_bar, GS, REVIEW_BAR, GtkBin)
+
+GtkWidget *gs_review_bar_new (void);
+
+void gs_review_bar_set_fraction (GsReviewBar *bar,
+ gdouble fraction);
+
+G_END_DECLS
diff --git a/src/gs-review-dialog.c b/src/gs-review-dialog.c
new file mode 100644
index 0000000..686209e
--- /dev/null
+++ b/src/gs-review-dialog.c
@@ -0,0 +1,231 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#ifdef HAVE_GSPELL
+#include <gspell/gspell.h>
+#endif
+
+#include "gs-review-dialog.h"
+#include "gs-star-widget.h"
+
+#define DESCRIPTION_LENGTH_MAX 3000 /* chars */
+#define DESCRIPTION_LENGTH_MIN 15 /* chars */
+#define SUMMARY_LENGTH_MAX 70 /* chars */
+#define SUMMARY_LENGTH_MIN 3 /* chars */
+#define WRITING_TIME_MIN 5 /* seconds */
+
+struct _GsReviewDialog
+{
+ GtkDialog parent_instance;
+
+ GtkWidget *star;
+ GtkWidget *label_rating_desc;
+ GtkWidget *summary_entry;
+ GtkWidget *post_button;
+ GtkWidget *text_view;
+ guint timer_id;
+};
+
+G_DEFINE_TYPE (GsReviewDialog, gs_review_dialog, GTK_TYPE_DIALOG)
+
+gint
+gs_review_dialog_get_rating (GsReviewDialog *dialog)
+{
+ return gs_star_widget_get_rating (GS_STAR_WIDGET (dialog->star));
+}
+
+void
+gs_review_dialog_set_rating (GsReviewDialog *dialog, gint rating)
+{
+ gs_star_widget_set_rating (GS_STAR_WIDGET (dialog->star), rating);
+}
+
+const gchar *
+gs_review_dialog_get_summary (GsReviewDialog *dialog)
+{
+ return gtk_entry_get_text (GTK_ENTRY (dialog->summary_entry));
+}
+
+gchar *
+gs_review_dialog_get_text (GsReviewDialog *dialog)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->text_view));
+ gtk_text_buffer_get_start_iter (buffer, &start);
+ gtk_text_buffer_get_end_iter (buffer, &end);
+ return gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+}
+
+static void
+gs_review_dialog_update_review_comment (GsReviewDialog *dialog)
+{
+ const gchar *msg = NULL;
+ gint perc;
+
+ /* update the rating description */
+ perc = gs_star_widget_get_rating (GS_STAR_WIDGET (dialog->star));
+ if (perc == 20) {
+ /* TRANSLATORS: lighthearted star rating description;
+ * A really bad application */
+ msg = _("Hate it");
+ } else if (perc == 40) {
+ /* TRANSLATORS: lighthearted star rating description;
+ * Not a great application */
+ msg = _("Don’t like it");
+ } else if (perc == 60) {
+ /* TRANSLATORS: lighthearted star rating description;
+ * A fairly-good application */
+ msg = _("It’s OK");
+ } else if (perc == 80) {
+ /* TRANSLATORS: lighthearted star rating description;
+ * A good application */
+ msg = _("Like it");
+ } else if (perc == 100) {
+ /* TRANSLATORS: lighthearted star rating description;
+ * A really awesome application */
+ msg = _("Love it");
+ } else {
+ /* just reserve space */
+ msg = "";
+ }
+ gtk_label_set_label (GTK_LABEL (dialog->label_rating_desc), msg);
+}
+
+static void
+gs_review_dialog_changed_cb (GsReviewDialog *dialog)
+{
+ GtkTextBuffer *buffer;
+ gboolean all_okay = TRUE;
+ const gchar *msg = NULL;
+
+ /* update review text */
+ gs_review_dialog_update_review_comment (dialog);
+
+ /* require rating, summary and long review */
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->text_view));
+ if (dialog->timer_id != 0) {
+ /* TRANSLATORS: the review can't just be copied and pasted */
+ msg = _("Please take more time writing the review");
+ all_okay = FALSE;
+ } else if (gs_star_widget_get_rating (GS_STAR_WIDGET (dialog->star)) == 0) {
+ /* TRANSLATORS: the review is not acceptable */
+ msg = _("Please choose a star rating");
+ all_okay = FALSE;
+ } else if (gtk_entry_get_text_length (GTK_ENTRY (dialog->summary_entry)) < SUMMARY_LENGTH_MIN) {
+ /* TRANSLATORS: the review is not acceptable */
+ msg = _("The summary is too short");
+ all_okay = FALSE;
+ } else if (gtk_entry_get_text_length (GTK_ENTRY (dialog->summary_entry)) > SUMMARY_LENGTH_MAX) {
+ /* TRANSLATORS: the review is not acceptable */
+ msg = _("The summary is too long");
+ all_okay = FALSE;
+ } else if (gtk_text_buffer_get_char_count (buffer) < DESCRIPTION_LENGTH_MIN) {
+ /* TRANSLATORS: the review is not acceptable */
+ msg = _("The description is too short");
+ all_okay = FALSE;
+ } else if (gtk_text_buffer_get_char_count (buffer) > DESCRIPTION_LENGTH_MAX) {
+ /* TRANSLATORS: the review is not acceptable */
+ msg = _("The description is too long");
+ all_okay = FALSE;
+ }
+
+ /* tell the user what's happening */
+ gtk_widget_set_tooltip_text (dialog->post_button, msg);
+
+ /* can the user submit this? */
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, all_okay);
+}
+
+static gboolean
+gs_review_dialog_timeout_cb (gpointer user_data)
+{
+ GsReviewDialog *dialog = GS_REVIEW_DIALOG (user_data);
+ dialog->timer_id = 0;
+ gs_review_dialog_changed_cb (dialog);
+ return FALSE;
+}
+
+static void
+gs_review_dialog_init (GsReviewDialog *dialog)
+{
+ GtkTextBuffer *buffer;
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+
+#ifdef HAVE_GSPELL
+ /* allow checking spelling */
+ {
+ GspellEntry *gspell_entry;
+ GspellTextView *gspell_view;
+
+ gspell_entry = gspell_entry_get_from_gtk_entry (GTK_ENTRY (dialog->summary_entry));
+ gspell_entry_basic_setup (gspell_entry);
+
+ gspell_view = gspell_text_view_get_from_gtk_text_view (GTK_TEXT_VIEW (dialog->text_view));
+ gspell_text_view_basic_setup (gspell_view);
+ }
+#endif
+
+ /* require the user to spend at least 30 seconds on writing a review */
+ dialog->timer_id = g_timeout_add_seconds (WRITING_TIME_MIN,
+ gs_review_dialog_timeout_cb,
+ dialog);
+
+ /* update UI */
+ g_signal_connect_swapped (dialog->star, "rating-changed",
+ G_CALLBACK (gs_review_dialog_changed_cb), dialog);
+ g_signal_connect_swapped (dialog->summary_entry, "notify::text",
+ G_CALLBACK (gs_review_dialog_changed_cb), dialog);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->text_view));
+ g_signal_connect_swapped (buffer, "changed",
+ G_CALLBACK (gs_review_dialog_changed_cb), dialog);
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
+}
+
+static void
+gs_review_row_dispose (GObject *object)
+{
+ GsReviewDialog *dialog = GS_REVIEW_DIALOG (object);
+ if (dialog->timer_id > 0) {
+ g_source_remove (dialog->timer_id);
+ dialog->timer_id = 0;
+ }
+ G_OBJECT_CLASS (gs_review_dialog_parent_class)->dispose (object);
+}
+
+static void
+gs_review_dialog_class_init (GsReviewDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_review_row_dispose;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-review-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsReviewDialog, star);
+ gtk_widget_class_bind_template_child (widget_class, GsReviewDialog, label_rating_desc);
+ gtk_widget_class_bind_template_child (widget_class, GsReviewDialog, summary_entry);
+ gtk_widget_class_bind_template_child (widget_class, GsReviewDialog, text_view);
+ gtk_widget_class_bind_template_child (widget_class, GsReviewDialog, post_button);
+}
+
+GtkWidget *
+gs_review_dialog_new (void)
+{
+ return GTK_WIDGET (g_object_new (GS_TYPE_REVIEW_DIALOG,
+ "use-header-bar", TRUE,
+ NULL));
+}
diff --git a/src/gs-review-dialog.h b/src/gs-review-dialog.h
new file mode 100644
index 0000000..33d9992
--- /dev/null
+++ b/src/gs-review-dialog.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REVIEW_DIALOG (gs_review_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsReviewDialog, gs_review_dialog, GS, REVIEW_DIALOG, GtkDialog)
+
+GtkWidget *gs_review_dialog_new (void);
+gint gs_review_dialog_get_rating (GsReviewDialog *dialog);
+void gs_review_dialog_set_rating (GsReviewDialog *dialog,
+ gint rating);
+const gchar *gs_review_dialog_get_summary (GsReviewDialog *dialog);
+gchar *gs_review_dialog_get_text (GsReviewDialog *dialog);
+
+G_END_DECLS
diff --git a/src/gs-review-dialog.ui b/src/gs-review-dialog.ui
new file mode 100644
index 0000000..c79ee53
--- /dev/null
+++ b/src/gs-review-dialog.ui
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsReviewDialog" parent="GtkDialog">
+ <action-widgets>
+ <action-widget response="cancel">cancel_button</action-widget>
+ <action-widget response="ok" default="true">post_button</action-widget>
+ </action-widgets>
+ <property name="title" translatable="yes" comments="Translators: Title of the dialog box where the users can write and publish their opinions about the apps.">Post Review</property>
+ <property name="modal">True</property>
+ <property name="default_width">600</property>
+ <property name="default_height">300</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <property name="show_close_button">False</property>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="post_button">
+ <property name="label" translatable="yes" comments="Translators: A button to publish the user&apos;s opinion about the app.">_Post</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <property name="sensitive">False</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox">
+ <property name="margin_start">40</property>
+ <property name="margin_end">40</property>
+ <property name="margin_top">25</property>
+ <property name="margin_bottom">25</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">9</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">20</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Rating</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GsStarWidget" id="star">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="icon-size">32</property>
+ <property name="interactive">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_rating_desc">
+ <property name="height_request">30</property>
+ <property name="visible">True</property>
+ <property name="label"></property>
+ <property name="xalign">0.5</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Summary</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Give a short summary of your review, for example: “Great app, would recommend”.</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="summary_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" context="app review" comments="Translators: This is where the users enter their opinions about the apps.">Review</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">What do you think of the app? Try to give reasons for your views.</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="text_view_scroll">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkTextView" id="text_view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="height-request">120</property>
+ <property name="wrap-mode">word-char</property>
+ <style>
+ <class name="review-textbox"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Find what data is sent in our &lt;a href="https://odrs.gnome.org/privacy"&gt;privacy policy&lt;/a&gt;.</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ <property name="use-markup">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkSizeGroup" id="sizegroup_folder_buttons">
+ <property name="ignore-hidden">False</property>
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="cancel_button"/>
+ <widget name="post_button"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/gs-review-histogram.c b/src/gs-review-histogram.c
new file mode 100644
index 0000000..5137f63
--- /dev/null
+++ b/src/gs-review-histogram.c
@@ -0,0 +1,112 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-review-histogram.h"
+#include "gs-review-bar.h"
+
+typedef struct
+{
+ GtkWidget *bar1;
+ GtkWidget *bar2;
+ GtkWidget *bar3;
+ GtkWidget *bar4;
+ GtkWidget *bar5;
+ GtkWidget *label_count1;
+ GtkWidget *label_count2;
+ GtkWidget *label_count3;
+ GtkWidget *label_count4;
+ GtkWidget *label_count5;
+ GtkWidget *label_total;
+} GsReviewHistogramPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsReviewHistogram, gs_review_histogram, GTK_TYPE_BIN)
+
+static void
+set_label (GtkWidget *label, gint value)
+{
+ g_autofree gchar *text = NULL;
+ text = g_strdup_printf ("%i", value);
+ gtk_label_set_text (GTK_LABEL (label), text);
+}
+
+void
+gs_review_histogram_set_ratings (GsReviewHistogram *histogram,
+ GArray *review_ratings)
+{
+ GsReviewHistogramPrivate *priv = gs_review_histogram_get_instance_private (histogram);
+ gdouble fraction[6] = { 0.0f };
+ guint32 max = 0;
+ guint32 total = 0;
+
+ g_return_if_fail (GS_IS_REVIEW_HISTOGRAM (histogram));
+
+ /* sanity check */
+ if (review_ratings->len != 6) {
+ g_warning ("ratings data incorrect expected 012345");
+ return;
+ }
+
+ /* idx 0 is '0 stars' which we don't support in the UI */
+ for (guint i = 1; i < review_ratings->len; i++) {
+ guint32 c = g_array_index (review_ratings, guint32, i);
+ max = MAX (c, max);
+ }
+ for (guint i = 1; i < review_ratings->len; i++) {
+ guint32 c = g_array_index (review_ratings, guint32, i);
+ fraction[i] = max > 0 ? (gdouble) c / (gdouble) max : 0.f;
+ total += c;
+ }
+
+ gs_review_bar_set_fraction (GS_REVIEW_BAR (priv->bar5), fraction[5]);
+ set_label (priv->label_count5, g_array_index (review_ratings, guint, 5));
+ gs_review_bar_set_fraction (GS_REVIEW_BAR (priv->bar4), fraction[4]);
+ set_label (priv->label_count4, g_array_index (review_ratings, guint, 4));
+ gs_review_bar_set_fraction (GS_REVIEW_BAR (priv->bar3), fraction[3]);
+ set_label (priv->label_count3, g_array_index (review_ratings, guint, 3));
+ gs_review_bar_set_fraction (GS_REVIEW_BAR (priv->bar2), fraction[2]);
+ set_label (priv->label_count2, g_array_index (review_ratings, guint, 2));
+ gs_review_bar_set_fraction (GS_REVIEW_BAR (priv->bar1), fraction[1]);
+ set_label (priv->label_count1, g_array_index (review_ratings, guint, 1));
+ set_label (priv->label_total, total);
+}
+
+static void
+gs_review_histogram_init (GsReviewHistogram *histogram)
+{
+ gtk_widget_init_template (GTK_WIDGET (histogram));
+}
+
+static void
+gs_review_histogram_class_init (GsReviewHistogramClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-review-histogram.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, bar5);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, bar4);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, bar3);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, bar2);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, bar1);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, label_count5);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, label_count4);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, label_count3);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, label_count2);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, label_count1);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewHistogram, label_total);
+}
+
+GtkWidget *
+gs_review_histogram_new (void)
+{
+ GsReviewHistogram *histogram;
+ histogram = g_object_new (GS_TYPE_REVIEW_HISTOGRAM, NULL);
+ return GTK_WIDGET (histogram);
+}
diff --git a/src/gs-review-histogram.h b/src/gs-review-histogram.h
new file mode 100644
index 0000000..ada8073
--- /dev/null
+++ b/src/gs-review-histogram.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REVIEW_HISTOGRAM (gs_review_histogram_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsReviewHistogram, gs_review_histogram, GS, REVIEW_HISTOGRAM, GtkBin)
+
+struct _GsReviewHistogramClass
+{
+ GtkBinClass parent_class;
+};
+
+GtkWidget *gs_review_histogram_new (void);
+
+void gs_review_histogram_set_ratings (GsReviewHistogram *histogram,
+ GArray *review_ratings);
+
+G_END_DECLS
diff --git a/src/gs-review-histogram.ui b/src/gs-review-histogram.ui
new file mode 100644
index 0000000..11d4c6b
--- /dev/null
+++ b/src/gs-review-histogram.ui
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsReviewHistogram" parent="GtkBin">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="row-spacing">6</property>
+ <property name="column-spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_count5">
+ <property name="halign">end</property>
+ <property name="visible">True</property>
+ <property name="label">0</property>
+ <property name="margin-left">5</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsReviewBar" id="bar5">
+ <property name="visible">True</property>
+ <property name="margin-left">5</property>
+ <property name="width-request">120</property>
+ <style>
+ <class name="reviewbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="histogram_star5_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="star5_1">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star5_2">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star5_3">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star5_4">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star5_5">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_count4">
+ <property name="halign">end</property>
+ <property name="visible">True</property>
+ <property name="label">0</property>
+ <property name="margin-left">5</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsReviewBar" id="bar4">
+ <property name="visible">True</property>
+ <property name="margin-left">5</property>
+ <style>
+ <class name="reviewbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="histogram_star4_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="star4_1">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star4_2">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star4_3">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star4_4">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_count3">
+ <property name="halign">end</property>
+ <property name="visible">True</property>
+ <property name="label">0</property>
+ <property name="margin-left">5</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsReviewBar" id="bar3">
+ <property name="visible">True</property>
+ <property name="margin-left">5</property>
+ <style>
+ <class name="reviewbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="histogram_star3_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="star3_1">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star3_2">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star3_3">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_count2">
+ <property name="halign">end</property>
+ <property name="visible">True</property>
+ <property name="label">0</property>
+ <property name="margin-left">5</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsReviewBar" id="bar2">
+ <property name="visible">True</property>
+ <property name="margin-left">5</property>
+ <style>
+ <class name="reviewbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="histogram_star2_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="star2_1">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="star2_2">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_count1">
+ <property name="halign">end</property>
+ <property name="visible">True</property>
+ <property name="label">0</property>
+ <property name="margin-left">5</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsReviewBar" id="bar1">
+ <property name="visible">True</property>
+ <property name="margin-left">5</property>
+ <style>
+ <class name="reviewbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="histogram_star1_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="star1_1">
+ <property name="visible">True</property>
+ <property name="icon_name">starred-symbolic</property>
+ <property name="sensitive">False</property>
+ <style>
+ <class name="star-disabled"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_total">
+ <property name="visible">True</property>
+ <property name="label">0</property>
+ <property name="margin-left">5</property>
+ <property name="margin-top">5</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_1">
+ <property name="visible">True</property>
+ <property name="margin-left">5</property>
+ <property name="halign">start</property>
+ <property name="margin-top">5</property>
+ <property name="label" translatable="yes" comments="Translators: A label for the total number of reviews.">ratings in total</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">5</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-review-row.c b/src/gs-review-row.c
new file mode 100644
index 0000000..a2b65ad
--- /dev/null
+++ b/src/gs-review-row.c
@@ -0,0 +1,326 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-review-row.h"
+#include "gs-star-widget.h"
+
+typedef struct
+{
+ GtkListBoxRow parent_instance;
+
+ AsReview *review;
+ gboolean network_available;
+ guint64 actions;
+ GtkWidget *stars;
+ GtkWidget *summary_label;
+ GtkWidget *author_label;
+ GtkWidget *date_label;
+ GtkWidget *text_label;
+ GtkWidget *button_yes;
+ GtkWidget *button_no;
+ GtkWidget *button_dismiss;
+ GtkWidget *button_report;
+ GtkWidget *button_remove;
+ GtkWidget *box_voting;
+} GsReviewRowPrivate;
+
+enum {
+ SIGNAL_BUTTON_CLICKED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsReviewRow, gs_review_row, GTK_TYPE_LIST_BOX_ROW)
+
+static void
+gs_review_row_refresh (GsReviewRow *row)
+{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (row);
+ const gchar *reviewer;
+ GDateTime *date;
+ g_autofree gchar *text = NULL;
+
+ gs_star_widget_set_rating (GS_STAR_WIDGET (priv->stars),
+ as_review_get_rating (priv->review));
+ reviewer = as_review_get_reviewer_name (priv->review);
+ if (reviewer == NULL) {
+ /* TRANSLATORS: this is when a user doesn't specify a name */
+ reviewer = _("Unknown");
+ }
+ gtk_label_set_text (GTK_LABEL (priv->author_label), reviewer);
+ date = as_review_get_date (priv->review);
+ if (date != NULL)
+ /* TRANSLATORS: This is the date string with: day number, month name, year.
+ i.e. "25 May 2012" */
+ text = g_date_time_format (date, _("%e %B %Y"));
+ else
+ text = g_strdup ("");
+ gtk_label_set_text (GTK_LABEL (priv->date_label), text);
+ gtk_label_set_text (GTK_LABEL (priv->summary_label),
+ as_review_get_summary (priv->review));
+ gtk_label_set_text (GTK_LABEL (priv->text_label),
+ as_review_get_description (priv->review));
+
+ /* if we voted, we can't do any actions */
+ if (as_review_get_flags (priv->review) & AS_REVIEW_FLAG_VOTED)
+ priv->actions = 0;
+
+ /* set actions up */
+ if ((priv->actions & (1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE |
+ 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE |
+ 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS)) == 0) {
+ gtk_widget_set_visible (priv->box_voting, FALSE);
+ } else {
+ gtk_widget_set_visible (priv->box_voting, TRUE);
+ gtk_widget_set_visible (priv->button_yes,
+ priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE);
+ gtk_widget_set_visible (priv->button_no,
+ priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE);
+ gtk_widget_set_visible (priv->button_dismiss,
+ priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS);
+ }
+ gtk_widget_set_visible (priv->button_remove,
+ priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_REMOVE);
+ gtk_widget_set_visible (priv->button_report,
+ priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_REPORT);
+
+ /* mark insensitive if no network */
+ if (priv->network_available) {
+ gtk_widget_set_sensitive (priv->button_yes, TRUE);
+ gtk_widget_set_sensitive (priv->button_no, TRUE);
+ gtk_widget_set_sensitive (priv->button_remove, TRUE);
+ gtk_widget_set_sensitive (priv->button_report, TRUE);
+ } else {
+ gtk_widget_set_sensitive (priv->button_yes, FALSE);
+ gtk_widget_set_sensitive (priv->button_no, FALSE);
+ gtk_widget_set_sensitive (priv->button_remove, FALSE);
+ gtk_widget_set_sensitive (priv->button_report, FALSE);
+ }
+}
+
+void
+gs_review_row_set_network_available (GsReviewRow *review_row, gboolean network_available)
+{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (review_row);
+ priv->network_available = network_available;
+ gs_review_row_refresh (review_row);
+}
+
+static gboolean
+gs_review_row_refresh_idle (gpointer user_data)
+{
+ GsReviewRow *row = GS_REVIEW_ROW (user_data);
+
+ gs_review_row_refresh (row);
+
+ g_object_unref (row);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gs_review_row_notify_props_changed_cb (GsApp *app,
+ GParamSpec *pspec,
+ GsReviewRow *row)
+{
+ g_idle_add (gs_review_row_refresh_idle, g_object_ref (row));
+}
+
+static void
+gs_review_row_init (GsReviewRow *row)
+{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (row);
+ priv->network_available = TRUE;
+ gtk_widget_set_has_window (GTK_WIDGET (row), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (row));
+}
+
+static void
+gs_review_row_dispose (GObject *object)
+{
+ GsReviewRow *row = GS_REVIEW_ROW (object);
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (row);
+
+ g_clear_object (&priv->review);
+
+ G_OBJECT_CLASS (gs_review_row_parent_class)->dispose (object);
+}
+
+static void
+gs_review_row_class_init (GsReviewRowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_review_row_dispose;
+
+ signals [SIGNAL_BUTTON_CLICKED] =
+ g_signal_new ("button-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsReviewRowClass, button_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-review-row.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, stars);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, summary_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, author_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, date_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, text_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, button_yes);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, button_no);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, button_dismiss);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, button_report);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, button_remove);
+ gtk_widget_class_bind_template_child_private (widget_class, GsReviewRow, box_voting);
+}
+
+static void
+gs_review_row_button_clicked_upvote_cb (GtkButton *button, GsReviewRow *row)
+{
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0,
+ GS_PLUGIN_ACTION_REVIEW_UPVOTE);
+}
+
+static void
+gs_review_row_button_clicked_downvote_cb (GtkButton *button, GsReviewRow *row)
+{
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0,
+ GS_PLUGIN_ACTION_REVIEW_DOWNVOTE);
+}
+
+static void
+gs_review_row_confirm_cb (GtkDialog *dialog, gint response_id, GsReviewRow *row)
+{
+ if (response_id == GTK_RESPONSE_YES) {
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0,
+ GS_PLUGIN_ACTION_REVIEW_REPORT);
+ }
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+gs_review_row_button_clicked_report_cb (GtkButton *button, GsReviewRow *row)
+{
+ GtkWidget *dialog;
+ GtkWidget *toplevel;
+ GtkWidget *widget;
+ g_autoptr(GString) str = NULL;
+
+ str = g_string_new ("");
+
+ /* TRANSLATORS: we explain what the action is going to do */
+ g_string_append (str, _("You can report reviews for abusive, rude, or "
+ "discriminatory behavior."));
+ g_string_append (str, " ");
+
+ /* TRANSLATORS: we ask the user if they really want to do this */
+ g_string_append (str, _("Once reported, a review will be hidden until "
+ "it has been checked by an administrator."));
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ dialog = gtk_message_dialog_new (GTK_WINDOW (toplevel),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT |
+ GTK_DIALOG_USE_HEADER_BAR,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_CANCEL,
+ "%s",
+ /* TRANSLATORS: window title when
+ * reporting a user-submitted review
+ * for moderation */
+ _("Report Review?"));
+ widget = gtk_dialog_add_button (GTK_DIALOG (dialog),
+ /* TRANSLATORS: button text when
+ * sending a review for moderation */
+ _("Report"),
+ GTK_RESPONSE_YES);
+ gtk_style_context_add_class (gtk_widget_get_style_context (widget),
+ "destructive-action");
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", str->str);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_review_row_confirm_cb), row);
+ gtk_window_present (GTK_WINDOW (dialog));
+}
+
+static void
+gs_review_row_button_clicked_dismiss_cb (GtkButton *button, GsReviewRow *row)
+{
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0,
+ GS_PLUGIN_ACTION_REVIEW_DISMISS);
+}
+
+static void
+gs_review_row_button_clicked_remove_cb (GtkButton *button, GsReviewRow *row)
+{
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0,
+ GS_PLUGIN_ACTION_REVIEW_REMOVE);
+}
+
+AsReview *
+gs_review_row_get_review (GsReviewRow *review_row)
+{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (review_row);
+ return priv->review;
+}
+
+void
+gs_review_row_set_actions (GsReviewRow *review_row, guint64 actions)
+{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (review_row);
+ priv->actions = actions;
+ gs_review_row_refresh (review_row);
+}
+
+/**
+ * gs_review_row_new:
+ * @review: The review to show
+ *
+ * Create a widget suitable for showing an application review.
+ *
+ * Return value: A new @GsReviewRow.
+ **/
+GtkWidget *
+gs_review_row_new (AsReview *review)
+{
+ GsReviewRow *row;
+ GsReviewRowPrivate *priv;
+
+ g_return_val_if_fail (AS_IS_REVIEW (review), NULL);
+
+ row = g_object_new (GS_TYPE_REVIEW_ROW, NULL);
+ priv = gs_review_row_get_instance_private (row);
+ priv->review = g_object_ref (review);
+ g_signal_connect_object (priv->review, "notify::state",
+ G_CALLBACK (gs_review_row_notify_props_changed_cb),
+ row, 0);
+ g_signal_connect_object (priv->button_yes, "clicked",
+ G_CALLBACK (gs_review_row_button_clicked_upvote_cb),
+ row, 0);
+ g_signal_connect_object (priv->button_no, "clicked",
+ G_CALLBACK (gs_review_row_button_clicked_downvote_cb),
+ row, 0);
+ g_signal_connect_object (priv->button_dismiss, "clicked",
+ G_CALLBACK (gs_review_row_button_clicked_dismiss_cb),
+ row, 0);
+ g_signal_connect_object (priv->button_report, "clicked",
+ G_CALLBACK (gs_review_row_button_clicked_report_cb),
+ row, 0);
+ g_signal_connect_object (priv->button_remove, "clicked",
+ G_CALLBACK (gs_review_row_button_clicked_remove_cb),
+ row, 0);
+ gs_review_row_refresh (row);
+
+ return GTK_WIDGET (row);
+}
diff --git a/src/gs-review-row.h b/src/gs-review-row.h
new file mode 100644
index 0000000..8f952ba
--- /dev/null
+++ b/src/gs-review-row.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Canonical Ltd.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_REVIEW_ROW (gs_review_row_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsReviewRow, gs_review_row, GS, REVIEW_ROW, GtkListBoxRow)
+
+struct _GsReviewRowClass
+{
+ GtkListBoxRowClass parent_class;
+ void (*button_clicked) (GsReviewRow *review_row,
+ GsPluginAction action);
+};
+
+GtkWidget *gs_review_row_new (AsReview *review);
+AsReview *gs_review_row_get_review (GsReviewRow *review_row);
+void gs_review_row_set_actions (GsReviewRow *review_row,
+ guint64 actions);
+void gs_review_row_set_network_available (GsReviewRow *review_row,
+ gboolean network_available);
+
+G_END_DECLS
diff --git a/src/gs-review-row.ui b/src/gs-review-row.ui
new file mode 100644
index 0000000..3ed3c4e
--- /dev/null
+++ b/src/gs-review-row.ui
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsReviewRow" parent="GtkListBoxRow">
+ <property name="visible">True</property>
+ <property name="activatable">False</property>
+ <style>
+ <class name="review-row"/>
+ </style>
+ <child>
+ <object class="GtkGrid" id="grid">
+ <property name="visible">True</property>
+ <property name="margin_top">32</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">10</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="summary_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label">Steep learning curve, but worth it</property>
+ <property name="ellipsize">end</property>
+ <property name="hexpand">True</property>
+ <property name="selectable">True</property>
+ <style>
+ <class name="review-summary"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="date_label">
+ <property name="visible">True</property>
+ <property name="halign">end</property>
+ <property name="label">3 January 2016</property>
+ <property name="hexpand">True</property>
+ <property name="selectable">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="author_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label">Angela Avery</property>
+ <property name="selectable">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="text_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="margin_top">10</property>
+ <property name="margin_bottom">8</property>
+ <property name="label">Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used overall 3D application I've ever used.</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">80</property>
+ <property name="xalign">0</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="selectable">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GsStarWidget" id="stars">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="sensitive">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_voting">
+ <property name="visible">True</property>
+ <property name="spacing">9</property>
+ <property name="halign">start</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Translators: Users can express their opinions about other users&apos; opinions about the apps.">Was this review useful to you?</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_vote_buttons">
+ <property name="visible">True</property>
+ <property name="spacing">0</property>
+ <property name="halign">start</property>
+ <style>
+ <class name="vote-buttons"/>
+ </style>
+ <child>
+ <object class="GtkButton" id="button_yes">
+ <property name="label" translatable="yes">Yes</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_no">
+ <property name="label" translatable="yes">No</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_dismiss">
+ <property name="label" translatable="yes" comments="Translators: Button text for indifference, only used when moderating">Meh</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_action_buttons">
+ <property name="visible">True</property>
+ <property name="spacing">9</property>
+ <property name="halign">end</property>
+ <child>
+ <object class="GtkButton" id="button_report">
+ <property name="label" translatable="yes">Report…</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <property name="relief">none</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_remove">
+ <property name="label" translatable="yes">Remove…</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <property name="relief">none</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+
+ </template>
+
+ <object class="GtkSizeGroup" id="action_sizegroup">
+ <widgets>
+ <widget name="button_report"/>
+ <widget name="button_remove"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="useful_sizegroup">
+ <widgets>
+ <widget name="button_yes"/>
+ <widget name="button_no"/>
+ </widgets>
+ </object>
+
+</interface>
diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c
new file mode 100644
index 0000000..0ecba07
--- /dev/null
+++ b/src/gs-screenshot-image.c
@@ -0,0 +1,592 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-screenshot-image.h"
+#include "gs-common.h"
+
+struct _GsScreenshotImage
+{
+ GtkBin parent_instance;
+
+ AsScreenshot *screenshot;
+ GtkWidget *stack;
+ GtkWidget *box_error;
+ GtkWidget *image1;
+ GtkWidget *image2;
+ GtkWidget *label_error;
+ GSettings *settings;
+ SoupSession *session;
+ SoupMessage *message;
+ gchar *filename;
+ const gchar *current_image;
+ guint width;
+ guint height;
+ guint scale;
+ gboolean showing_image;
+};
+
+G_DEFINE_TYPE (GsScreenshotImage, gs_screenshot_image, GTK_TYPE_BIN)
+
+AsScreenshot *
+gs_screenshot_image_get_screenshot (GsScreenshotImage *ssimg)
+{
+ g_return_val_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg), NULL);
+ return ssimg->screenshot;
+}
+
+static void
+gs_screenshot_image_set_error (GsScreenshotImage *ssimg, const gchar *message)
+{
+ gint width, height;
+
+ gtk_stack_set_visible_child_name (GTK_STACK (ssimg->stack), "error");
+ gtk_label_set_label (GTK_LABEL (ssimg->label_error), message);
+ gtk_widget_get_size_request (ssimg->stack, &width, &height);
+ if (width < 200)
+ gtk_widget_hide (ssimg->label_error);
+ else
+ gtk_widget_show (ssimg->label_error);
+ ssimg->showing_image = FALSE;
+}
+
+static void
+as_screenshot_show_image (GsScreenshotImage *ssimg)
+{
+ g_autoptr(GdkPixbuf) pixbuf = NULL;
+
+ /* no need to composite */
+ if (ssimg->width == G_MAXUINT || ssimg->height == G_MAXUINT) {
+ pixbuf = gdk_pixbuf_new_from_file (ssimg->filename, NULL);
+ } else {
+ /* this is always going to have alpha */
+ pixbuf = gdk_pixbuf_new_from_file_at_scale (ssimg->filename,
+ (gint) (ssimg->width * ssimg->scale),
+ (gint) (ssimg->height * ssimg->scale),
+ FALSE, NULL);
+ }
+
+ /* show icon */
+ if (g_strcmp0 (ssimg->current_image, "image1") == 0) {
+ if (pixbuf != NULL) {
+ gs_image_set_from_pixbuf_with_scale (GTK_IMAGE (ssimg->image2),
+ pixbuf, (gint) ssimg->scale);
+ }
+ gtk_stack_set_visible_child_name (GTK_STACK (ssimg->stack), "image2");
+ ssimg->current_image = "image2";
+ } else {
+ if (pixbuf != NULL) {
+ gs_image_set_from_pixbuf_with_scale (GTK_IMAGE (ssimg->image1),
+ pixbuf, (gint) ssimg->scale);
+ }
+ gtk_stack_set_visible_child_name (GTK_STACK (ssimg->stack), "image1");
+ ssimg->current_image = "image1";
+ }
+
+ gtk_widget_show (GTK_WIDGET (ssimg));
+ ssimg->showing_image = TRUE;
+}
+
+static void
+gs_screenshot_image_show_blurred (GsScreenshotImage *ssimg,
+ const gchar *filename_thumb)
+{
+ g_autoptr(AsImage) im = NULL;
+ g_autoptr(GdkPixbuf) pb = NULL;
+
+ /* create an helper which can do the blurring for us */
+ im = as_image_new ();
+ if (!as_image_load_filename (im, filename_thumb, NULL))
+ return;
+ pb = as_image_save_pixbuf (im,
+ ssimg->width * ssimg->scale,
+ ssimg->height * ssimg->scale,
+ AS_IMAGE_SAVE_FLAG_BLUR);
+ if (pb == NULL)
+ return;
+
+ if (g_strcmp0 (ssimg->current_image, "image1") == 0) {
+ gs_image_set_from_pixbuf_with_scale (GTK_IMAGE (ssimg->image1),
+ pb, (gint) ssimg->scale);
+ } else {
+ gs_image_set_from_pixbuf_with_scale (GTK_IMAGE (ssimg->image2),
+ pb, (gint) ssimg->scale);
+ }
+}
+
+static gboolean
+gs_screenshot_image_save_downloaded_img (GsScreenshotImage *ssimg,
+ GdkPixbuf *pixbuf,
+ GError **error)
+{
+ g_autoptr(AsImage) im = NULL;
+ gboolean ret;
+ const GPtrArray *images;
+ g_autoptr(GError) error_local = NULL;
+ g_autofree char *filename = NULL;
+ g_autofree char *size_dir = NULL;
+ g_autofree char *cache_kind = NULL;
+ g_autofree char *basename = NULL;
+ guint width = ssimg->width;
+ guint height = ssimg->height;
+
+ /* save to file, using the same code as the AppStream builder
+ * so the preview looks the same */
+ im = as_image_new ();
+ as_image_set_pixbuf (im, pixbuf);
+ ret = as_image_save_filename (im, ssimg->filename,
+ ssimg->width * ssimg->scale,
+ ssimg->height * ssimg->scale,
+ AS_IMAGE_SAVE_FLAG_PAD_16_9,
+ error);
+
+ if (!ret)
+ return FALSE;
+
+ if (ssimg->screenshot == NULL)
+ return TRUE;
+
+ images = as_screenshot_get_images (ssimg->screenshot);
+ if (images->len > 1)
+ return TRUE;
+
+ if (width == AS_IMAGE_THUMBNAIL_WIDTH &&
+ height == AS_IMAGE_THUMBNAIL_HEIGHT) {
+ width = AS_IMAGE_NORMAL_WIDTH;
+ height = AS_IMAGE_NORMAL_HEIGHT;
+ } else {
+ width = AS_IMAGE_THUMBNAIL_WIDTH;
+ height = AS_IMAGE_THUMBNAIL_HEIGHT;
+ }
+
+ width *= ssimg->scale;
+ height *= ssimg->scale;
+ basename = g_path_get_basename (ssimg->filename);
+ size_dir = g_strdup_printf ("%ux%u", width, height);
+ cache_kind = g_build_filename ("screenshots", size_dir, NULL);
+ filename = gs_utils_get_cache_filename (cache_kind, basename,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ &error_local);
+
+ if (filename == NULL) {
+ /* if we cannot get a cache filename, warn about that but do not
+ * set a user's visible error because this is a complementary
+ * operation */
+ g_warning ("Failed to get cache filename for counterpart "
+ "screenshot '%s' in folder '%s': %s", basename,
+ cache_kind, error_local->message);
+ return TRUE;
+ }
+
+ ret = as_image_save_filename (im, filename, width, height,
+ AS_IMAGE_SAVE_FLAG_PAD_16_9,
+ &error_local);
+
+ if (!ret) {
+ /* if we cannot save this screenshot, warn about that but do not
+ * set a user's visible error because this is a complementary
+ * operation */
+ g_warning ("Failed to save screenshot '%s': %s", filename,
+ error_local->message);
+ }
+
+ return TRUE;
+}
+
+static void
+gs_screenshot_image_complete_cb (SoupSession *session,
+ SoupMessage *msg,
+ gpointer user_data)
+{
+ g_autoptr(GsScreenshotImage) ssimg = GS_SCREENSHOT_IMAGE (user_data);
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GdkPixbuf) pixbuf = NULL;
+ g_autoptr(GInputStream) stream = NULL;
+
+ /* return immediately if the message was cancelled or if we're in destruction */
+ if (msg->status_code == SOUP_STATUS_CANCELLED || ssimg->session == NULL)
+ return;
+
+ if (msg->status_code == SOUP_STATUS_NOT_MODIFIED) {
+ g_debug ("screenshot has not been modified");
+ as_screenshot_show_image (ssimg);
+ return;
+ }
+ if (msg->status_code != SOUP_STATUS_OK) {
+ g_warning ("Result of screenshot downloading attempt with "
+ "status code '%u': %s", msg->status_code,
+ msg->reason_phrase);
+ /* if we're already showing an image, then don't set the error
+ * as having an image (even if outdated) is better */
+ if (ssimg->showing_image)
+ return;
+ /* TRANSLATORS: this is when we try to download a screenshot and
+ * we get back 404 */
+ gs_screenshot_image_set_error (ssimg, _("Screenshot not found"));
+ return;
+ }
+
+ /* create a buffer with the data */
+ stream = g_memory_input_stream_new_from_data (msg->response_body->data,
+ msg->response_body->length,
+ NULL);
+ if (stream == NULL)
+ return;
+
+ /* load the image */
+ pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, NULL);
+ if (pixbuf == NULL) {
+ /* TRANSLATORS: possibly image file corrupt or not an image */
+ gs_screenshot_image_set_error (ssimg, _("Failed to load image"));
+ return;
+ }
+
+ /* is image size destination size unknown or exactly the correct size */
+ if (ssimg->width == G_MAXUINT || ssimg->height == G_MAXUINT ||
+ (ssimg->width * ssimg->scale == (guint) gdk_pixbuf_get_width (pixbuf) &&
+ ssimg->height * ssimg->scale == (guint) gdk_pixbuf_get_height (pixbuf))) {
+ ret = g_file_set_contents (ssimg->filename,
+ msg->response_body->data,
+ msg->response_body->length,
+ &error);
+ if (!ret) {
+ gs_screenshot_image_set_error (ssimg, error->message);
+ return;
+ }
+ } else if (!gs_screenshot_image_save_downloaded_img (ssimg, pixbuf,
+ &error)) {
+ gs_screenshot_image_set_error (ssimg, error->message);
+ return;
+ }
+
+ /* got image, so show */
+ as_screenshot_show_image (ssimg);
+}
+
+void
+gs_screenshot_image_set_screenshot (GsScreenshotImage *ssimg,
+ AsScreenshot *screenshot)
+{
+ g_return_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg));
+ g_return_if_fail (AS_IS_SCREENSHOT (screenshot));
+
+ if (ssimg->screenshot == screenshot)
+ return;
+ if (ssimg->screenshot)
+ g_object_unref (ssimg->screenshot);
+ ssimg->screenshot = g_object_ref (screenshot);
+
+ /* we reset this flag here too because it referred to the previous
+ * screenshot, and thus avoids potentially assuming that the new
+ * screenshot is shown when it is the previous one instead */
+ ssimg->showing_image = FALSE;
+}
+
+void
+gs_screenshot_image_set_size (GsScreenshotImage *ssimg,
+ guint width, guint height)
+{
+ g_return_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg));
+ g_return_if_fail (width != 0);
+ g_return_if_fail (height != 0);
+
+ ssimg->width = width;
+ ssimg->height = height;
+ gtk_widget_set_size_request (ssimg->stack, (gint) width, (gint) height);
+}
+
+static gchar *
+gs_screenshot_get_cachefn_for_url (const gchar *url)
+{
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *checksum = NULL;
+ checksum = g_compute_checksum_for_string (G_CHECKSUM_SHA256, url, -1);
+ basename = g_path_get_basename (url);
+ return g_strdup_printf ("%s-%s", checksum, basename);
+}
+
+static void
+gs_screenshot_soup_msg_set_modified_request (SoupMessage *msg, GFile *file)
+{
+#ifndef GLIB_VERSION_2_62
+ GTimeVal time_val;
+#endif
+ g_autoptr(GDateTime) date_time = NULL;
+ g_autoptr(GFileInfo) info = NULL;
+ g_autofree gchar *mod_date = NULL;
+
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ NULL);
+ if (info == NULL)
+ return;
+#ifdef GLIB_VERSION_2_62
+ date_time = g_file_info_get_modification_date_time (info);
+#else
+ g_file_info_get_modification_time (info, &time_val);
+ date_time = g_date_time_new_from_timeval_local (&time_val);
+#endif
+ mod_date = g_date_time_format (date_time, "%a, %d %b %Y %H:%M:%S %Z");
+ soup_message_headers_append (msg->request_headers,
+ "If-Modified-Since",
+ mod_date);
+}
+
+void
+gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
+ GCancellable *cancellable)
+{
+ AsImage *im = NULL;
+ const gchar *url;
+ g_autofree gchar *basename = NULL;
+ g_autofree gchar *cache_kind = NULL;
+ g_autofree gchar *cachefn_thumb = NULL;
+ g_autofree gchar *sizedir = NULL;
+ g_autoptr(SoupURI) base_uri = NULL;
+
+ g_return_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg));
+
+ g_return_if_fail (AS_IS_SCREENSHOT (ssimg->screenshot));
+ g_return_if_fail (ssimg->width != 0);
+ g_return_if_fail (ssimg->height != 0);
+
+ /* load an image according to the scale factor */
+ ssimg->scale = (guint) gtk_widget_get_scale_factor (GTK_WIDGET (ssimg));
+ im = as_screenshot_get_image (ssimg->screenshot,
+ ssimg->width * ssimg->scale,
+ ssimg->height * ssimg->scale);
+
+ /* if we've failed to load a HiDPI image, fallback to LoDPI */
+ if (im == NULL && ssimg->scale > 1) {
+ ssimg->scale = 1;
+ im = as_screenshot_get_image (ssimg->screenshot,
+ ssimg->width,
+ ssimg->height);
+ }
+ if (im == NULL) {
+ /* TRANSLATORS: this is when we request a screenshot size that
+ * the generator did not create or the parser did not add */
+ gs_screenshot_image_set_error (ssimg, _("Screenshot size not found"));
+ return;
+ }
+
+ /* check if the URL points to a local file */
+ url = as_image_get_url (im);
+ if (g_str_has_prefix (url, "file://")) {
+ g_free (ssimg->filename);
+ ssimg->filename = g_strdup (url + 7);
+ if (g_file_test (ssimg->filename, G_FILE_TEST_EXISTS)) {
+ as_screenshot_show_image (ssimg);
+ return;
+ }
+ }
+
+ basename = gs_screenshot_get_cachefn_for_url (url);
+ if (ssimg->width == G_MAXUINT || ssimg->height == G_MAXUINT) {
+ sizedir = g_strdup ("unknown");
+ } else {
+ sizedir = g_strdup_printf ("%ux%u", ssimg->width * ssimg->scale, ssimg->height * ssimg->scale);
+ }
+ cache_kind = g_build_filename ("screenshots", sizedir, NULL);
+ g_free (ssimg->filename);
+ ssimg->filename = gs_utils_get_cache_filename (cache_kind,
+ basename,
+ GS_UTILS_CACHE_FLAG_NONE,
+ NULL);
+ if (ssimg->filename == NULL) {
+ /* TRANSLATORS: this is when we try create the cache directory
+ * but we were out of space or permission was denied */
+ gs_screenshot_image_set_error (ssimg, _("Could not create cache"));
+ return;
+ }
+
+ /* does local file already exist and has recently been downloaded */
+ if (g_file_test (ssimg->filename, G_FILE_TEST_EXISTS)) {
+ guint64 age_max;
+ g_autoptr(GFile) file = NULL;
+
+ /* show the image we have in cache while we're checking for the
+ * new screenshot (which probably won't have changed) */
+ as_screenshot_show_image (ssimg);
+
+ /* verify the cache age against the maximum allowed */
+ age_max = g_settings_get_uint (ssimg->settings,
+ "screenshot-cache-age-maximum");
+ file = g_file_new_for_path (ssimg->filename);
+ /* image new enough, not re-requesting from server */
+ if (age_max > 0 && gs_utils_get_file_age (file) < age_max)
+ return;
+ }
+
+ /* if we're not showing a full-size image, we try loading a blurred
+ * smaller version of it straight away */
+ if (!ssimg->showing_image &&
+ ssimg->width > AS_IMAGE_THUMBNAIL_WIDTH &&
+ ssimg->height > AS_IMAGE_THUMBNAIL_HEIGHT) {
+ const gchar *url_thumb;
+ g_autofree gchar *basename_thumb = NULL;
+ g_autofree gchar *cache_kind_thumb = NULL;
+ im = as_screenshot_get_image (ssimg->screenshot,
+ AS_IMAGE_THUMBNAIL_WIDTH * ssimg->scale,
+ AS_IMAGE_THUMBNAIL_HEIGHT * ssimg->scale);
+ url_thumb = as_image_get_url (im);
+ basename_thumb = gs_screenshot_get_cachefn_for_url (url_thumb);
+ cache_kind_thumb = g_build_filename ("screenshots", "112x63", NULL);
+ cachefn_thumb = gs_utils_get_cache_filename (cache_kind_thumb,
+ basename_thumb,
+ GS_UTILS_CACHE_FLAG_NONE,
+ NULL);
+ if (cachefn_thumb == NULL)
+ return;
+ if (g_file_test (cachefn_thumb, G_FILE_TEST_EXISTS))
+ gs_screenshot_image_show_blurred (ssimg, cachefn_thumb);
+ }
+
+ /* re-request the cache filename, which might be different as it needs
+ * to be writable this time */
+ g_free (ssimg->filename);
+ ssimg->filename = gs_utils_get_cache_filename (cache_kind,
+ basename,
+ GS_UTILS_CACHE_FLAG_WRITEABLE,
+ NULL);
+
+ /* download file */
+ g_debug ("downloading %s to %s", url, ssimg->filename);
+ base_uri = soup_uri_new (url);
+ if (base_uri == NULL || !SOUP_URI_VALID_FOR_HTTP (base_uri)) {
+ /* TRANSLATORS: this is when we try to download a screenshot
+ * that was not a valid URL */
+ gs_screenshot_image_set_error (ssimg, _("Screenshot not valid"));
+ return;
+ }
+
+ /* cancel any previous messages */
+ if (ssimg->message != NULL) {
+ soup_session_cancel_message (ssimg->session,
+ ssimg->message,
+ SOUP_STATUS_CANCELLED);
+ g_clear_object (&ssimg->message);
+ }
+
+ ssimg->message = soup_message_new_from_uri (SOUP_METHOD_GET, base_uri);
+ if (ssimg->message == NULL) {
+ /* TRANSLATORS: this is when networking is not available */
+ gs_screenshot_image_set_error (ssimg, _("Screenshot not available"));
+ return;
+ }
+
+ /* not all servers support If-Modified-Since, but worst case we just
+ * re-download the entire file again every 30 days */
+ if (g_file_test (ssimg->filename, G_FILE_TEST_EXISTS)) {
+ g_autoptr(GFile) file = g_file_new_for_path (ssimg->filename);
+ gs_screenshot_soup_msg_set_modified_request (ssimg->message, file);
+ }
+
+ /* send async */
+ soup_session_queue_message (ssimg->session,
+ g_object_ref (ssimg->message) /* transfer full */,
+ gs_screenshot_image_complete_cb,
+ g_object_ref (ssimg));
+}
+
+gboolean
+gs_screenshot_image_is_showing (GsScreenshotImage *ssimg)
+{
+ return ssimg->showing_image;
+}
+
+static void
+gs_screenshot_image_destroy (GtkWidget *widget)
+{
+ GsScreenshotImage *ssimg = GS_SCREENSHOT_IMAGE (widget);
+
+ if (ssimg->message != NULL) {
+ soup_session_cancel_message (ssimg->session,
+ ssimg->message,
+ SOUP_STATUS_CANCELLED);
+ g_clear_object (&ssimg->message);
+ }
+ g_clear_object (&ssimg->screenshot);
+ g_clear_object (&ssimg->session);
+ g_clear_object (&ssimg->settings);
+
+ g_clear_pointer (&ssimg->filename, g_free);
+
+ GTK_WIDGET_CLASS (gs_screenshot_image_parent_class)->destroy (widget);
+}
+
+static void
+gs_screenshot_image_init (GsScreenshotImage *ssimg)
+{
+ AtkObject *accessible;
+
+ ssimg->settings = g_settings_new ("org.gnome.software");
+ ssimg->showing_image = FALSE;
+
+ gtk_widget_set_has_window (GTK_WIDGET (ssimg), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (ssimg));
+
+ accessible = gtk_widget_get_accessible (GTK_WIDGET (ssimg));
+ if (accessible != 0) {
+ atk_object_set_role (accessible, ATK_ROLE_IMAGE);
+ atk_object_set_name (accessible, _("Screenshot"));
+ }
+}
+
+static gboolean
+gs_screenshot_image_draw (GtkWidget *widget, cairo_t *cr)
+{
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (widget);
+ gtk_render_background (context, cr,
+ 0, 0,
+ gtk_widget_get_allocated_width (widget),
+ gtk_widget_get_allocated_height (widget));
+ gtk_render_frame (context, cr,
+ 0, 0,
+ gtk_widget_get_allocated_width (widget),
+ gtk_widget_get_allocated_height (widget));
+
+ return GTK_WIDGET_CLASS (gs_screenshot_image_parent_class)->draw (widget, cr);
+}
+
+static void
+gs_screenshot_image_class_init (GsScreenshotImageClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ widget_class->destroy = gs_screenshot_image_destroy;
+ widget_class->draw = gs_screenshot_image_draw;
+
+ gtk_widget_class_set_template_from_resource (widget_class,
+ "/org/gnome/Software/gs-screenshot-image.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, stack);
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, image1);
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, image2);
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, box_error);
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, label_error);
+}
+
+GtkWidget *
+gs_screenshot_image_new (SoupSession *session)
+{
+ GsScreenshotImage *ssimg;
+ ssimg = g_object_new (GS_TYPE_SCREENSHOT_IMAGE, NULL);
+ ssimg->session = g_object_ref (session);
+ return GTK_WIDGET (ssimg);
+}
diff --git a/src/gs-screenshot-image.h b/src/gs-screenshot-image.h
new file mode 100644
index 0000000..a5d9355
--- /dev/null
+++ b/src/gs-screenshot-image.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+#include <libsoup/soup.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_SCREENSHOT_IMAGE (gs_screenshot_image_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsScreenshotImage, gs_screenshot_image, GS, SCREENSHOT_IMAGE, GtkBin)
+
+GtkWidget *gs_screenshot_image_new (SoupSession *session);
+
+AsScreenshot *gs_screenshot_image_get_screenshot (GsScreenshotImage *ssimg);
+void gs_screenshot_image_set_screenshot (GsScreenshotImage *ssimg,
+ AsScreenshot *screenshot);
+void gs_screenshot_image_set_size (GsScreenshotImage *ssimg,
+ guint width,
+ guint height);
+void gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
+ GCancellable *cancellable);
+gboolean gs_screenshot_image_is_showing (GsScreenshotImage *ssimg);
+
+G_END_DECLS
diff --git a/src/gs-screenshot-image.ui b/src/gs-screenshot-image.ui
new file mode 100644
index 0000000..5b20671
--- /dev/null
+++ b/src/gs-screenshot-image.ui
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsScreenshotImage" parent="GtkBin">
+ <property name="visible">True</property>
+ <style>
+ <class name="screenshot-image"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="transition-type">crossfade</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="name">image1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="name">image2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_error">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkImage" id="image_error">
+ <property name="visible">True</property>
+ <property name="icon-name">dialog-error-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_error">
+ <property name="visible">True</property>
+ <style>
+ <class name="error-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">error</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-search-page.c b/src/gs-search-page.c
new file mode 100644
index 0000000..8b7b6c1
--- /dev/null
+++ b/src/gs-search-page.c
@@ -0,0 +1,504 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "gs-search-page.h"
+#include "gs-shell.h"
+#include "gs-common.h"
+#include "gs-app-row.h"
+
+#define GS_SEARCH_PAGE_MAX_RESULTS 50
+
+struct _GsSearchPage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *cancellable;
+ GCancellable *search_cancellable;
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+ GtkSizeGroup *sizegroup_button;
+ GsShell *shell;
+ gchar *appid_to_show;
+ gchar *value;
+ guint waiting_id;
+ guint max_results;
+
+ GtkWidget *list_box_search;
+ GtkWidget *scrolledwindow_search;
+ GtkWidget *spinner_search;
+ GtkWidget *stack_search;
+};
+
+G_DEFINE_TYPE (GsSearchPage, gs_search_page, GS_TYPE_PAGE)
+
+static void
+gs_search_page_app_row_clicked_cb (GsAppRow *app_row,
+ GsSearchPage *self)
+{
+ GsApp *app;
+ app = gs_app_row_get_app (app_row);
+ if (gs_app_get_state (app) == AS_APP_STATE_AVAILABLE)
+ gs_page_install_app (GS_PAGE (self), app, GS_SHELL_INTERACTION_FULL,
+ self->cancellable);
+ else if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED)
+ gs_page_remove_app (GS_PAGE (self), app, self->cancellable);
+ else if (gs_app_get_state (app) == AS_APP_STATE_UNAVAILABLE) {
+ if (gs_app_get_url (app, AS_URL_KIND_MISSING) == NULL) {
+ gs_page_install_app (GS_PAGE (self), app,
+ GS_SHELL_INTERACTION_FULL,
+ self->cancellable);
+ return;
+ }
+ gs_shell_show_uri (self->shell,
+ gs_app_get_url (app, AS_URL_KIND_MISSING));
+ }
+}
+
+static void
+gs_search_page_waiting_cancel (GsSearchPage *self)
+{
+ if (self->waiting_id > 0)
+ g_source_remove (self->waiting_id);
+ self->waiting_id = 0;
+}
+
+static void
+gs_search_page_get_search_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ guint i;
+ GsApp *app;
+ GsSearchPage *self = GS_SEARCH_PAGE (user_data);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ GtkWidget *app_row;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* don't do the delayed spinner */
+ gs_search_page_waiting_cancel (self);
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_debug ("search cancelled");
+ return;
+ }
+ g_warning ("failed to get search apps: %s", error->message);
+ gs_stop_spinner (GTK_SPINNER (self->spinner_search));
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_search), "no-results");
+ return;
+ }
+
+ /* no results */
+ if (gs_app_list_length (list) == 0) {
+ g_debug ("no search results to show");
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_search), "no-results");
+ return;
+ }
+
+ /* remove old entries */
+ gs_container_remove_all (GTK_CONTAINER (self->list_box_search));
+
+ gs_stop_spinner (GTK_SPINNER (self->spinner_search));
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_search), "results");
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ app = gs_app_list_index (list, i);
+ app_row = gs_app_row_new (app);
+ gs_app_row_set_show_rating (GS_APP_ROW (app_row), TRUE);
+ g_signal_connect (app_row, "button-clicked",
+ G_CALLBACK (gs_search_page_app_row_clicked_cb),
+ self);
+ gtk_container_add (GTK_CONTAINER (self->list_box_search), app_row);
+ gs_app_row_set_size_groups (GS_APP_ROW (app_row),
+ self->sizegroup_image,
+ self->sizegroup_name,
+ self->sizegroup_desc,
+ self->sizegroup_button);
+ gtk_widget_show (app_row);
+ }
+
+ /* too many results */
+ if (gs_app_list_has_flag (list, GS_APP_LIST_FLAG_IS_TRUNCATED)) {
+ GtkStyleContext *context;
+ GtkWidget *w = gtk_label_new (NULL);
+ g_autofree gchar *str = NULL;
+
+ /* TRANSLATORS: this is when there are too many search results
+ * to show in in the search page */
+ str = g_strdup_printf (ngettext("%u more match",
+ "%u more matches",
+ gs_app_list_get_size_peak (list) - gs_app_list_length (list)),
+ gs_app_list_get_size_peak (list) - gs_app_list_length (list));
+ gtk_label_set_label (GTK_LABEL (w), str);
+ gtk_widget_set_margin_bottom (w, 20);
+ gtk_widget_set_margin_top (w, 20);
+ gtk_widget_set_margin_start (w, 20);
+ gtk_widget_set_margin_end (w, 20);
+ context = gtk_widget_get_style_context (w);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
+ gtk_container_add (GTK_CONTAINER (self->list_box_search), w);
+ gtk_widget_show (w);
+ } else {
+ /* reset to default */
+ self->max_results = GS_SEARCH_PAGE_MAX_RESULTS;
+ }
+
+ if (self->appid_to_show != NULL) {
+ g_autoptr (GsApp) a = NULL;
+ if (as_utils_unique_id_valid (self->appid_to_show)) {
+ a = gs_plugin_loader_app_create (self->plugin_loader,
+ self->appid_to_show);
+ } else {
+ a = gs_app_new (self->appid_to_show);
+ }
+ gs_shell_show_app (self->shell, a);
+ g_clear_pointer (&self->appid_to_show, g_free);
+ }
+}
+
+static gboolean
+gs_search_page_waiting_show_cb (gpointer user_data)
+{
+ GsSearchPage *self = GS_SEARCH_PAGE (user_data);
+
+ /* show spinner */
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_search), "spinner");
+ gs_start_spinner (GTK_SPINNER (self->spinner_search));
+ gs_search_page_waiting_cancel (self);
+ return FALSE;
+}
+
+static gchar *
+gs_search_page_get_app_sort_key (GsApp *app)
+{
+ GString *key = g_string_sized_new (64);
+
+ /* sort apps before runtimes and extensions */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_DESKTOP:
+ case AS_APP_KIND_SHELL_EXTENSION:
+ g_string_append (key, "9:");
+ break;
+ default:
+ g_string_append (key, "1:");
+ break;
+ }
+
+ /* sort missing codecs before applications */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_UNAVAILABLE:
+ g_string_append (key, "9:");
+ break;
+ default:
+ g_string_append (key, "1:");
+ break;
+ }
+
+ /* sort by the search key */
+ g_string_append_printf (key, "%05x:", gs_app_get_match_value (app));
+
+ /* sort by rating */
+ g_string_append_printf (key, "%03i:", gs_app_get_rating (app));
+
+ /* sort by kudos */
+ g_string_append_printf (key, "%03u:", gs_app_get_kudos_percentage (app));
+
+ return g_string_free (key, FALSE);
+}
+
+static gboolean
+gs_search_page_sort_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ g_autofree gchar *key1 = NULL;
+ g_autofree gchar *key2 = NULL;
+ key1 = gs_search_page_get_app_sort_key (app1);
+ key2 = gs_search_page_get_app_sort_key (app2);
+ return g_strcmp0 (key2, key1);
+}
+
+static void
+gs_search_page_load (GsSearchPage *self)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* cancel any pending searches */
+ g_cancellable_cancel (self->search_cancellable);
+ g_clear_object (&self->search_cancellable);
+ self->search_cancellable = g_cancellable_new ();
+
+ /* search for apps */
+ gs_search_page_waiting_cancel (self);
+ self->waiting_id = g_timeout_add (250, gs_search_page_waiting_show_cb, self);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", self->value,
+ "max-results", self->max_results,
+ "timeout", 10,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_REVIEW_RATINGS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_job_set_sort_func (plugin_job, gs_search_page_sort_cb);
+ gs_plugin_job_set_sort_func_data (plugin_job, self);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->search_cancellable,
+ gs_search_page_get_search_cb,
+ self);
+}
+
+static void
+gs_search_page_app_row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ GsSearchPage *self)
+{
+ GsApp *app;
+
+ /* increase the maximum allowed, and re-request the search */
+ if (!GS_IS_APP_ROW (row)) {
+ self->max_results *= 4;
+ gs_search_page_load (self);
+ return;
+ }
+
+ app = gs_app_row_get_app (GS_APP_ROW (row));
+ gs_shell_show_app (self->shell, app);
+}
+
+static void
+gs_search_page_reload (GsPage *page)
+{
+ GsSearchPage *self = GS_SEARCH_PAGE (page);
+ if (self->value != NULL)
+ gs_search_page_load (self);
+}
+
+/**
+ * gs_search_page_set_appid_to_show:
+ *
+ * Switch to the specified app id after loading the search results.
+ **/
+void
+gs_search_page_set_appid_to_show (GsSearchPage *self, const gchar *appid)
+{
+ g_free (self->appid_to_show);
+ self->appid_to_show = g_strdup (appid);
+}
+
+const gchar *
+gs_search_page_get_text (GsSearchPage *self)
+{
+ return self->value;
+}
+
+void
+gs_search_page_set_text (GsSearchPage *self, const gchar *value)
+{
+ if (value == self->value)
+ return;
+ if (g_strcmp0 (value, self->value) == 0)
+ return;
+
+ g_free (self->value);
+ self->value = g_strdup (value);
+
+ gs_search_page_load (self);
+}
+
+static void
+gs_search_page_switch_to (GsPage *page, gboolean scroll_up)
+{
+ GsSearchPage *self = GS_SEARCH_PAGE (page);
+ GtkWidget *widget;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_SEARCH) {
+ g_warning ("Called switch_to(search) when in mode %s",
+ gs_shell_get_mode_string (self->shell));
+ return;
+ }
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "buttonbox_main"));
+ gtk_widget_show (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "menu_button"));
+ gtk_widget_show (widget);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "search_bar"));
+ gtk_widget_show (widget);
+
+ /* hardcode */
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "search_button"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+ if (scroll_up) {
+ GtkAdjustment *adj;
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_search));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+ }
+}
+
+static void
+gs_search_page_list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header;
+
+ /* first entry */
+ header = gtk_list_box_row_get_header (row);
+ if (before == NULL) {
+ gtk_list_box_row_set_header (row, NULL);
+ return;
+ }
+
+ /* already set */
+ if (header != NULL)
+ return;
+
+ /* set new */
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static void
+gs_search_page_cancel_cb (GCancellable *cancellable,
+ GsSearchPage *self)
+{
+ g_cancellable_cancel (self->search_cancellable);
+}
+
+static void
+gs_search_page_app_installed (GsPage *page, GsApp *app)
+{
+ gs_search_page_reload (page);
+}
+
+static void
+gs_search_page_app_removed (GsPage *page, GsApp *app)
+{
+ gs_search_page_reload (page);
+}
+
+static gboolean
+gs_search_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsSearchPage *self = GS_SEARCH_PAGE (page);
+
+ g_return_val_if_fail (GS_IS_SEARCH_PAGE (self), TRUE);
+
+ self->plugin_loader = g_object_ref (plugin_loader);
+ self->builder = g_object_ref (builder);
+ self->cancellable = g_object_ref (cancellable);
+ self->shell = shell;
+
+ /* connect the cancellables */
+ g_cancellable_connect (self->cancellable,
+ G_CALLBACK (gs_search_page_cancel_cb),
+ self, NULL);
+
+ /* setup search */
+ g_signal_connect (self->list_box_search, "row-activated",
+ G_CALLBACK (gs_search_page_app_row_activated_cb), self);
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->list_box_search),
+ gs_search_page_list_header_func,
+ self, NULL);
+ return TRUE;
+}
+
+static void
+gs_search_page_dispose (GObject *object)
+{
+ GsSearchPage *self = GS_SEARCH_PAGE (object);
+
+ g_clear_object (&self->sizegroup_image);
+ g_clear_object (&self->sizegroup_name);
+ g_clear_object (&self->sizegroup_desc);
+ g_clear_object (&self->sizegroup_button);
+
+ g_clear_object (&self->builder);
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->cancellable);
+ g_clear_object (&self->search_cancellable);
+
+ G_OBJECT_CLASS (gs_search_page_parent_class)->dispose (object);
+}
+
+static void
+gs_search_page_finalize (GObject *object)
+{
+ GsSearchPage *self = GS_SEARCH_PAGE (object);
+
+ g_free (self->appid_to_show);
+ g_free (self->value);
+
+ G_OBJECT_CLASS (gs_search_page_parent_class)->finalize (object);
+}
+
+static void
+gs_search_page_class_init (GsSearchPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_search_page_dispose;
+ object_class->finalize = gs_search_page_finalize;
+ page_class->app_installed = gs_search_page_app_installed;
+ page_class->app_removed = gs_search_page_app_removed;
+ page_class->switch_to = gs_search_page_switch_to;
+ page_class->reload = gs_search_page_reload;
+ page_class->setup = gs_search_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-search-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsSearchPage, list_box_search);
+ gtk_widget_class_bind_template_child (widget_class, GsSearchPage, scrolledwindow_search);
+ gtk_widget_class_bind_template_child (widget_class, GsSearchPage, spinner_search);
+ gtk_widget_class_bind_template_child (widget_class, GsSearchPage, stack_search);
+}
+
+static void
+gs_search_page_init (GsSearchPage *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ self->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_button = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ self->max_results = GS_SEARCH_PAGE_MAX_RESULTS;
+}
+
+GsSearchPage *
+gs_search_page_new (void)
+{
+ GsSearchPage *self;
+ self = g_object_new (GS_TYPE_SEARCH_PAGE, NULL);
+ return GS_SEARCH_PAGE (self);
+}
diff --git a/src/gs-search-page.h b/src/gs-search-page.h
new file mode 100644
index 0000000..f955a21
--- /dev/null
+++ b/src/gs-search-page.h
@@ -0,0 +1,27 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_SEARCH_PAGE (gs_search_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsSearchPage, gs_search_page, GS, SEARCH_PAGE, GsPage)
+
+GsSearchPage *gs_search_page_new (void);
+void gs_search_page_set_appid_to_show (GsSearchPage *self,
+ const gchar *appid);
+const gchar *gs_search_page_get_text (GsSearchPage *self);
+void gs_search_page_set_text (GsSearchPage *self,
+ const gchar *value);
+
+G_END_DECLS
diff --git a/src/gs-search-page.ui b/src/gs-search-page.ui
new file mode 100644
index 0000000..b150030
--- /dev/null
+++ b/src/gs-search-page.ui
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsSearchPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="search-accessible">
+ <property name="accessible-name" translatable="yes">Search page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack_search">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSpinner" id="spinner_search">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="noresults_grid_search">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="row-spacing">12</property>
+ <property name="column-spacing">12</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="noresults_icon">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="pixel-size">64</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="noresults_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">No Application Found</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">no-results</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_search">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <property name="preferred-width">860</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkListBox" id="list_box_search">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">results</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-self-test.c b/src/gs-self-test.c
new file mode 100644
index 0000000..43d94c5
--- /dev/null
+++ b/src/gs-self-test.c
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gnome-software-private.h"
+
+#include "gs-content-rating.h"
+#include "gs-css.h"
+#include "gs-test.h"
+
+static void
+gs_css_func (void)
+{
+ const gchar *tmp;
+ gboolean ret;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsCss) css = gs_css_new ();
+
+ /* no IDs */
+ ret = gs_css_parse (css, "border: 0;", &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+ tmp = gs_css_get_markup_for_id (css, "tile");
+ g_assert_cmpstr (tmp, ==, "border: 0;");
+
+ /* with IDs */
+ ret = gs_css_parse (css, "#tile2{\nborder: 0;}\n#name {color: white;\n}", &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+ tmp = gs_css_get_markup_for_id (css, "NotGoingToExist");
+ g_assert_cmpstr (tmp, ==, NULL);
+ tmp = gs_css_get_markup_for_id (css, "tile2");
+ g_assert_cmpstr (tmp, ==, "border: 0;");
+ tmp = gs_css_get_markup_for_id (css, "name");
+ g_assert_cmpstr (tmp, ==, "color: white;");
+}
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv,
+#if GLIB_CHECK_VERSION(2, 60, 0)
+ G_TEST_OPTION_ISOLATE_DIRS,
+#endif
+ NULL);
+ g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
+
+ /* only critical and error are fatal */
+ g_log_set_fatal_mask (NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL);
+
+ /* tests go here */
+ g_test_add_func ("/gnome-software/src/css", gs_css_func);
+
+ return g_test_run ();
+}
diff --git a/src/gs-shell-search-provider.c b/src/gs-shell-search-provider.c
new file mode 100644
index 0000000..715f70f
--- /dev/null
+++ b/src/gs-shell-search-provider.c
@@ -0,0 +1,403 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * gs-shell-search-provider.c - Implementation of a GNOME Shell
+ * search provider
+ *
+ * Copyright (C) 2013 Matthias Clasen
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+#include "gs-shell-search-provider-generated.h"
+#include "gs-shell-search-provider.h"
+#include "gs-common.h"
+
+#define GS_SHELL_SEARCH_PROVIDER_MAX_RESULTS 20
+
+typedef struct {
+ GsShellSearchProvider *provider;
+ GDBusMethodInvocation *invocation;
+} PendingSearch;
+
+struct _GsShellSearchProvider {
+ GObject parent;
+
+ GsShellSearchProvider2 *skeleton;
+ GsPluginLoader *plugin_loader;
+ GCancellable *cancellable;
+
+ GHashTable *metas_cache;
+ GsAppList *search_results;
+};
+
+G_DEFINE_TYPE (GsShellSearchProvider, gs_shell_search_provider, G_TYPE_OBJECT)
+
+static void
+pending_search_free (PendingSearch *search)
+{
+ g_object_unref (search->invocation);
+ g_slice_free (PendingSearch, search);
+}
+
+static gint
+search_sort_by_kudo_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ guint pa, pb;
+ pa = gs_app_get_kudos_percentage (app1);
+ pb = gs_app_get_kudos_percentage (app2);
+ if (pa < pb)
+ return 1;
+ else if (pa > pb)
+ return -1;
+ return 0;
+}
+
+static void
+search_done_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ PendingSearch *search = user_data;
+ GsShellSearchProvider *self = search->provider;
+ guint i;
+ GVariantBuilder builder;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* cache no longer valid */
+ gs_app_list_remove_all (self->search_results);
+
+ list = gs_plugin_loader_job_process_finish (self->plugin_loader, res, NULL);
+ if (list == NULL) {
+ g_dbus_method_invocation_return_value (search->invocation, g_variant_new ("(as)", NULL));
+ pending_search_free (search);
+ g_application_release (g_application_get_default ());
+ return;
+ }
+
+ /* sort by kudos, as there is no ratings data by default */
+ gs_app_list_sort (list, search_sort_by_kudo_cb, NULL);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("as"));
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (gs_app_get_state (app) != AS_APP_STATE_AVAILABLE)
+ continue;
+ g_variant_builder_add (&builder, "s", gs_app_get_unique_id (app));
+
+ /* cache this in case we need the app in GetResultMetas */
+ gs_app_list_add (self->search_results, app);
+ }
+ g_dbus_method_invocation_return_value (search->invocation, g_variant_new ("(as)", &builder));
+
+ pending_search_free (search);
+ g_application_release (g_application_get_default ());
+}
+
+static gchar *
+gs_shell_search_provider_get_app_sort_key (GsApp *app)
+{
+ GString *key = g_string_sized_new (64);
+
+ /* sort available apps before installed ones */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_AVAILABLE:
+ g_string_append (key, "9:");
+ break;
+ default:
+ g_string_append (key, "1:");
+ break;
+ }
+
+ /* sort apps before runtimes and extensions */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_DESKTOP:
+ g_string_append (key, "9:");
+ break;
+ default:
+ g_string_append (key, "1:");
+ break;
+ }
+
+ /* sort by the search key */
+ g_string_append_printf (key, "%05x:", gs_app_get_match_value (app));
+
+ /* tie-break with id */
+ g_string_append (key, gs_app_get_unique_id (app));
+
+ return g_string_free (key, FALSE);
+}
+
+static gboolean
+gs_shell_search_provider_sort_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ g_autofree gchar *key1 = NULL;
+ g_autofree gchar *key2 = NULL;
+ key1 = gs_shell_search_provider_get_app_sort_key (app1);
+ key2 = gs_shell_search_provider_get_app_sort_key (app2);
+ return g_strcmp0 (key2, key1);
+}
+
+static void
+execute_search (GsShellSearchProvider *self,
+ GDBusMethodInvocation *invocation,
+ gchar **terms)
+{
+ PendingSearch *pending_search;
+ g_autofree gchar *value = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ value = g_strjoinv (" ", terms);
+
+ g_cancellable_cancel (self->cancellable);
+ g_clear_object (&self->cancellable);
+
+ /* don't attempt searches for a single character */
+ if (g_strv_length (terms) == 1 &&
+ g_utf8_strlen (terms[0], -1) == 1) {
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", NULL));
+ return;
+ }
+
+ pending_search = g_slice_new (PendingSearch);
+ pending_search->provider = self;
+ pending_search->invocation = g_object_ref (invocation);
+
+ g_application_hold (g_application_get_default ());
+ self->cancellable = g_cancellable_new ();
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_SEARCH,
+ "search", value,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME,
+ "max-results", GS_SHELL_SEARCH_PROVIDER_MAX_RESULTS,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_PREFER_INSTALLED |
+ GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ NULL);
+ gs_plugin_job_set_sort_func (plugin_job, gs_shell_search_provider_sort_cb);
+ gs_plugin_job_set_sort_func_data (plugin_job, self);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ search_done_cb,
+ pending_search);
+}
+
+static gboolean
+handle_get_initial_result_set (GsShellSearchProvider2 *skeleton,
+ GDBusMethodInvocation *invocation,
+ gchar **terms,
+ gpointer user_data)
+{
+ GsShellSearchProvider *self = user_data;
+
+ g_debug ("****** GetInitialResultSet");
+ execute_search (self, invocation, terms);
+ return TRUE;
+}
+
+static gboolean
+handle_get_subsearch_result_set (GsShellSearchProvider2 *skeleton,
+ GDBusMethodInvocation *invocation,
+ gchar **previous_results,
+ gchar **terms,
+ gpointer user_data)
+{
+ GsShellSearchProvider *self = user_data;
+
+ g_debug ("****** GetSubSearchResultSet");
+ execute_search (self, invocation, terms);
+ return TRUE;
+}
+
+static gboolean
+handle_get_result_metas (GsShellSearchProvider2 *skeleton,
+ GDBusMethodInvocation *invocation,
+ gchar **results,
+ gpointer user_data)
+{
+ GsShellSearchProvider *self = user_data;
+ GVariantBuilder meta;
+ GVariant *meta_variant;
+ GdkPixbuf *pixbuf;
+ gint i;
+ GVariantBuilder builder;
+
+ g_debug ("****** GetResultMetas");
+
+ for (i = 0; results[i]; i++) {
+ GsApp *app;
+ g_autofree gchar *description = NULL;
+
+ /* already built */
+ if (g_hash_table_lookup (self->metas_cache, results[i]) != NULL)
+ continue;
+
+ /* get previously found app */
+ app = gs_app_list_lookup (self->search_results, results[i]);
+ if (app == NULL) {
+ g_warning ("failed to refine find app %s in cache", results[i]);
+ continue;
+ }
+
+ g_variant_builder_init (&meta, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&meta, "{sv}", "id", g_variant_new_string (gs_app_get_unique_id (app)));
+ g_variant_builder_add (&meta, "{sv}", "name", g_variant_new_string (gs_app_get_name (app)));
+ pixbuf = gs_app_get_pixbuf (app);
+ if (pixbuf != NULL)
+ g_variant_builder_add (&meta, "{sv}", "icon", g_icon_serialize (G_ICON (pixbuf)));
+
+ if (gs_utils_list_has_app_fuzzy (self->search_results, app) &&
+ gs_app_get_origin_hostname (app) != NULL) {
+ /* TRANSLATORS: this refers to where the app came from */
+ g_autofree gchar *source_text = g_strdup_printf (_("Source: %s"),
+ gs_app_get_origin_hostname (app));
+ description = g_strdup_printf ("%s %s",
+ gs_app_get_summary (app),
+ source_text);
+ } else {
+ description = g_strdup (gs_app_get_summary (app));
+ }
+ g_variant_builder_add (&meta, "{sv}", "description", g_variant_new_string (description));
+
+ meta_variant = g_variant_builder_end (&meta);
+ g_hash_table_insert (self->metas_cache,
+ g_strdup (gs_app_get_unique_id (app)),
+ g_variant_ref_sink (meta_variant));
+
+ }
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{sv}"));
+ for (i = 0; results[i]; i++) {
+ meta_variant = (GVariant*)g_hash_table_lookup (self->metas_cache, results[i]);
+ if (meta_variant == NULL)
+ continue;
+ g_variant_builder_add_value (&builder, meta_variant);
+ }
+
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(aa{sv})", &builder));
+
+ return TRUE;
+}
+
+static gboolean
+handle_activate_result (GsShellSearchProvider2 *skeleton,
+ GDBusMethodInvocation *invocation,
+ gchar *result,
+ gchar **terms,
+ guint32 timestamp,
+ gpointer user_data)
+{
+ GApplication *app = g_application_get_default ();
+ g_autofree gchar *string = NULL;
+
+ string = g_strjoinv (" ", terms);
+
+ g_action_group_activate_action (G_ACTION_GROUP (app), "details",
+ g_variant_new ("(ss)", result, string));
+
+ gs_shell_search_provider2_complete_activate_result (skeleton, invocation);
+ return TRUE;
+}
+
+static gboolean
+handle_launch_search (GsShellSearchProvider2 *skeleton,
+ GDBusMethodInvocation *invocation,
+ gchar **terms,
+ guint32 timestamp,
+ gpointer user_data)
+{
+ GApplication *app = g_application_get_default ();
+ g_autofree gchar *string = g_strjoinv (" ", terms);
+
+ g_action_group_activate_action (G_ACTION_GROUP (app), "search",
+ g_variant_new ("s", string));
+
+ gs_shell_search_provider2_complete_launch_search (skeleton, invocation);
+ return TRUE;
+}
+
+gboolean
+gs_shell_search_provider_register (GsShellSearchProvider *self,
+ GDBusConnection *connection,
+ GError **error)
+{
+ return g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->skeleton),
+ connection,
+ "/org/gnome/Software/SearchProvider", error);
+}
+
+void
+gs_shell_search_provider_unregister (GsShellSearchProvider *self)
+{
+ g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->skeleton));
+}
+
+static void
+search_provider_dispose (GObject *obj)
+{
+ GsShellSearchProvider *self = GS_SHELL_SEARCH_PROVIDER (obj);
+
+ g_cancellable_cancel (self->cancellable);
+ g_clear_object (&self->cancellable);
+
+ if (self->metas_cache != NULL) {
+ g_hash_table_destroy (self->metas_cache);
+ self->metas_cache = NULL;
+ }
+
+ g_clear_object (&self->search_results);
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->skeleton);
+
+ G_OBJECT_CLASS (gs_shell_search_provider_parent_class)->dispose (obj);
+}
+
+static void
+gs_shell_search_provider_init (GsShellSearchProvider *self)
+{
+ self->metas_cache = g_hash_table_new_full ((GHashFunc) as_utils_unique_id_hash,
+ (GEqualFunc) as_utils_unique_id_equal,
+ g_free,
+ (GDestroyNotify) g_variant_unref);
+
+ self->search_results = gs_app_list_new ();
+ self->skeleton = gs_shell_search_provider2_skeleton_new ();
+
+ g_signal_connect (self->skeleton, "handle-get-initial-result-set",
+ G_CALLBACK (handle_get_initial_result_set), self);
+ g_signal_connect (self->skeleton, "handle-get-subsearch-result-set",
+ G_CALLBACK (handle_get_subsearch_result_set), self);
+ g_signal_connect (self->skeleton, "handle-get-result-metas",
+ G_CALLBACK (handle_get_result_metas), self);
+ g_signal_connect (self->skeleton, "handle-activate-result",
+ G_CALLBACK (handle_activate_result), self);
+ g_signal_connect (self->skeleton, "handle-launch-search",
+ G_CALLBACK (handle_launch_search), self);
+}
+
+static void
+gs_shell_search_provider_class_init (GsShellSearchProviderClass *klass)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (klass);
+
+ oclass->dispose = search_provider_dispose;
+}
+
+GsShellSearchProvider *
+gs_shell_search_provider_new (void)
+{
+ return g_object_new (gs_shell_search_provider_get_type (), NULL);
+}
+
+void
+gs_shell_search_provider_setup (GsShellSearchProvider *provider,
+ GsPluginLoader *loader)
+{
+ provider->plugin_loader = g_object_ref (loader);
+}
diff --git a/src/gs-shell-search-provider.h b/src/gs-shell-search-provider.h
new file mode 100644
index 0000000..f3bbbd1
--- /dev/null
+++ b/src/gs-shell-search-provider.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * gs-shell-search-provider.h - Implementation of a GNOME Shell
+ * search provider
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gnome-software-private.h"
+
+#define GS_TYPE_SHELL_SEARCH_PROVIDER gs_shell_search_provider_get_type()
+
+G_DECLARE_FINAL_TYPE (GsShellSearchProvider, gs_shell_search_provider, GS, SHELL_SEARCH_PROVIDER, GObject)
+
+gboolean gs_shell_search_provider_register (GsShellSearchProvider *self,
+ GDBusConnection *connection,
+ GError **error);
+void gs_shell_search_provider_unregister (GsShellSearchProvider *self);
+GsShellSearchProvider *gs_shell_search_provider_new (void);
+void gs_shell_search_provider_setup (GsShellSearchProvider *provider,
+ GsPluginLoader *loader);
diff --git a/src/gs-shell.c b/src/gs-shell.c
new file mode 100644
index 0000000..8f0dc6f
--- /dev/null
+++ b/src/gs-shell.c
@@ -0,0 +1,2532 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#ifdef HAVE_MOGWAI
+#include <libmogwai-schedule-client/scheduler.h>
+#endif
+
+#include "gs-common.h"
+#include "gs-shell.h"
+#include "gs-basic-auth-dialog.h"
+#include "gs-details-page.h"
+#include "gs-installed-page.h"
+#include "gs-metered-data-dialog.h"
+#include "gs-moderate-page.h"
+#include "gs-loading-page.h"
+#include "gs-search-page.h"
+#include "gs-overview-page.h"
+#include "gs-updates-page.h"
+#include "gs-category-page.h"
+#include "gs-extras-page.h"
+#include "gs-repos-dialog.h"
+#include "gs-prefs-dialog.h"
+#include "gs-update-dialog.h"
+#include "gs-update-monitor.h"
+#include "gs-utils.h"
+
+static const gchar *page_name[] = {
+ "unknown",
+ "overview",
+ "installed",
+ "search",
+ "updates",
+ "details",
+ "category",
+ "extras",
+ "moderate",
+ "loading",
+};
+
+typedef struct {
+ GsShellMode mode;
+ GtkWidget *focus;
+ GsCategory *category;
+ gchar *search;
+} BackEntry;
+
+typedef struct
+{
+ GSettings *settings;
+ gboolean ignore_primary_buttons;
+ GCancellable *cancellable;
+ GsPluginLoader *plugin_loader;
+ GsShellMode mode;
+ GHashTable *pages;
+ GtkWidget *header_start_widget;
+ GtkWidget *header_end_widget;
+ GtkBuilder *builder;
+ GtkWindow *main_window;
+ GQueue *back_entry_stack;
+ GPtrArray *modal_dialogs;
+ gulong search_changed_id;
+ gchar *events_info_uri;
+ gboolean in_mode_change;
+ GsPage *page;
+
+#ifdef HAVE_MOGWAI
+ MwscScheduler *scheduler;
+ gulong scheduler_invalidated_handler;
+#endif /* HAVE_MOGWAI */
+} GsShellPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsShell, gs_shell, G_TYPE_OBJECT)
+
+enum {
+ SIGNAL_LOADED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+static void
+modal_dialog_unmapped_cb (GtkWidget *dialog,
+ GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ g_debug ("modal dialog %p unmapped", dialog);
+ g_ptr_array_remove (priv->modal_dialogs, dialog);
+}
+
+void
+gs_shell_modal_dialog_present (GsShell *shell, GtkDialog *dialog)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWindow *parent;
+
+ /* show new modal on top of old modal */
+ if (priv->modal_dialogs->len > 0) {
+ parent = g_ptr_array_index (priv->modal_dialogs,
+ priv->modal_dialogs->len - 1);
+ g_debug ("using old modal %p as parent", parent);
+ } else {
+ parent = priv->main_window;
+ g_debug ("using main window");
+ }
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+
+ /* add to stack, transfer ownership to here */
+ g_ptr_array_add (priv->modal_dialogs, dialog);
+ g_signal_connect (GTK_WIDGET (dialog), "unmap",
+ G_CALLBACK (modal_dialog_unmapped_cb), shell);
+
+ /* present the new one */
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_window_present (GTK_WINDOW (dialog));
+}
+
+gboolean
+gs_shell_is_active (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ return gtk_window_is_active (priv->main_window);
+}
+
+GtkWindow *
+gs_shell_get_window (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ return priv->main_window;
+}
+
+void
+gs_shell_activate (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ gtk_window_present (priv->main_window);
+}
+
+static void
+gs_shell_set_header_start_widget (GsShell *shell, GtkWidget *widget)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *old_widget;
+ GtkWidget *header;
+
+ old_widget = priv->header_start_widget;
+ header = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header"));
+
+ if (priv->header_start_widget == widget)
+ return;
+
+ if (widget != NULL) {
+ g_object_ref (widget);
+ gtk_header_bar_pack_start (GTK_HEADER_BAR (header), widget);
+ }
+
+ priv->header_start_widget = widget;
+
+ if (old_widget != NULL) {
+ gtk_container_remove (GTK_CONTAINER (header), old_widget);
+ g_object_unref (old_widget);
+ }
+}
+
+static void
+gs_shell_set_header_end_widget (GsShell *shell, GtkWidget *widget)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *old_widget;
+ GtkWidget *header;
+
+ old_widget = priv->header_end_widget;
+ header = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header"));
+
+ if (priv->header_end_widget == widget)
+ return;
+
+ if (widget != NULL) {
+ g_object_ref (widget);
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (header), widget);
+ }
+
+ priv->header_end_widget = widget;
+
+ if (old_widget != NULL) {
+ gtk_container_remove (GTK_CONTAINER (header), old_widget);
+ g_object_unref (old_widget);
+ }
+}
+
+static void
+gs_shell_refresh_auto_updates_ui (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ gboolean automatic_updates_paused;
+ gboolean automatic_updates_enabled;
+ GtkInfoBar *metered_updates_bar;
+
+ automatic_updates_enabled = g_settings_get_boolean (priv->settings, "download-updates");
+
+ metered_updates_bar = GTK_INFO_BAR (gtk_builder_get_object (priv->builder, "metered_updates_bar"));
+
+#ifdef HAVE_MOGWAI
+ automatic_updates_paused = (priv->scheduler == NULL || !mwsc_scheduler_get_allow_downloads (priv->scheduler));
+#else
+ automatic_updates_paused = gs_plugin_loader_get_network_metered (priv->plugin_loader);
+#endif
+
+ gtk_info_bar_set_revealed (metered_updates_bar,
+ priv->mode != GS_SHELL_MODE_LOADING &&
+ automatic_updates_enabled &&
+ automatic_updates_paused);
+ gtk_info_bar_set_default_response (metered_updates_bar, GTK_RESPONSE_OK);
+}
+
+static void
+gs_shell_metered_updates_bar_response_cb (GtkInfoBar *info_bar,
+ gint response_id,
+ gpointer user_data)
+{
+ GsShell *shell = GS_SHELL (user_data);
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkDialog *dialog;
+
+ dialog = GTK_DIALOG (gs_metered_data_dialog_new (priv->main_window));
+ gs_shell_modal_dialog_present (shell, dialog);
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
+static void
+gs_shell_download_updates_changed_cb (GSettings *settings,
+ const gchar *key,
+ gpointer user_data)
+{
+ GsShell *shell = user_data;
+
+ gs_shell_refresh_auto_updates_ui (shell);
+}
+
+static void
+gs_shell_network_metered_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+#ifndef HAVE_MOGWAI
+ GsShell *shell = user_data;
+
+ /* @automatic_updates_paused only depends on network-metered if we’re
+ * compiled without Mogwai. */
+ gs_shell_refresh_auto_updates_ui (shell);
+#endif
+}
+
+#ifdef HAVE_MOGWAI
+static void
+scheduler_invalidated_cb (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ /* The scheduler shouldn’t normally be invalidated, since we Hold() it
+ * until we’re done with it. However, if the scheduler is stopped by
+ * systemd (`systemctl stop mogwai-scheduled`) this signal will be
+ * emitted. It may also be invalidated while our main window is hidden,
+ * as we release our Hold() then. */
+ g_signal_handler_disconnect (priv->scheduler,
+ priv->scheduler_invalidated_handler);
+ priv->scheduler_invalidated_handler = 0;
+
+ g_clear_object (&priv->scheduler);
+}
+
+static void
+scheduler_allow_downloads_changed_cb (GsShell *shell)
+{
+ gs_shell_refresh_auto_updates_ui (shell);
+}
+
+static void
+scheduler_hold_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer data)
+{
+ g_autoptr(GError) error_local = NULL;
+ MwscScheduler *scheduler = (MwscScheduler *) source_object;
+ g_autoptr(GsShell) shell = data; /* reference added when starting the async operation */
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ if (!mwsc_scheduler_hold_finish (scheduler, result, &error_local)) {
+ g_warning ("Couldn't hold the Mogwai Scheduler daemon: %s",
+ error_local->message);
+ return;
+ }
+
+ priv->scheduler_invalidated_handler =
+ g_signal_connect_swapped (scheduler, "invalidated",
+ (GCallback) scheduler_invalidated_cb,
+ shell);
+
+ g_signal_connect_object (scheduler, "notify::allow-downloads",
+ (GCallback) scheduler_allow_downloads_changed_cb,
+ shell,
+ G_CONNECT_SWAPPED);
+
+ g_assert (priv->scheduler == NULL);
+ priv->scheduler = scheduler;
+
+ /* Update the UI accordingly. */
+ gs_shell_refresh_auto_updates_ui (shell);
+}
+
+static void
+scheduler_release_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer data)
+{
+ MwscScheduler *scheduler = (MwscScheduler *) source_object;
+ g_autoptr(GsShell) shell = data; /* reference added when starting the async operation */
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ g_autoptr(GError) error_local = NULL;
+
+ if (!mwsc_scheduler_release_finish (scheduler, result, &error_local))
+ g_warning ("Couldn't release the Mogwai Scheduler daemon: %s",
+ error_local->message);
+
+ g_clear_object (&priv->scheduler);
+}
+
+static void
+scheduler_ready_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer data)
+{
+ MwscScheduler *scheduler;
+ g_autoptr(GError) error_local = NULL;
+ g_autoptr(GsShell) shell = data; /* reference added when starting the async operation */
+
+ scheduler = mwsc_scheduler_new_finish (result, &error_local);
+
+ if (scheduler == NULL) {
+ g_warning ("%s: Error getting Mogwai Scheduler: %s", G_STRFUNC,
+ error_local->message);
+ return;
+ }
+
+ mwsc_scheduler_hold_async (scheduler,
+ "monitoring allow-downloads property",
+ NULL,
+ scheduler_hold_cb,
+ g_object_ref (shell));
+}
+#endif /* HAVE_MOGWAI */
+
+static void
+gs_shell_basic_auth_start_cb (GsPluginLoader *plugin_loader,
+ const gchar *remote,
+ const gchar *realm,
+ GsBasicAuthCallback callback,
+ gpointer callback_data,
+ GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *dialog;
+
+ dialog = gs_basic_auth_dialog_new (priv->main_window, remote, realm, callback, callback_data);
+ gs_shell_modal_dialog_present (shell, GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
+static void
+free_back_entry (BackEntry *entry)
+{
+ if (entry->focus != NULL)
+ g_object_remove_weak_pointer (G_OBJECT (entry->focus),
+ (gpointer *) &entry->focus);
+ g_clear_object (&entry->category);
+ g_free (entry->search);
+ g_free (entry);
+}
+
+static void
+gs_shell_clean_back_entry_stack (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ BackEntry *entry;
+
+ while ((entry = g_queue_pop_head (priv->back_entry_stack)) != NULL) {
+ free_back_entry (entry);
+ }
+}
+
+void
+gs_shell_change_mode (GsShell *shell,
+ GsShellMode mode,
+ gpointer data,
+ gboolean scroll_up)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GsApp *app;
+ GsPage *page;
+ GtkWidget *widget;
+ GtkStyleContext *context;
+
+ if (priv->ignore_primary_buttons)
+ return;
+
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header"));
+ gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (widget), TRUE);
+
+ /* hide all mode specific header widgets here, they will be shown in the
+ * refresh functions
+ */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "application_details_header"));
+ gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main"));
+ gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "menu_button"));
+ gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header_selection_menu_button"));
+ gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "origin_box"));
+ gtk_widget_hide (widget);
+
+ priv->in_mode_change = TRUE;
+ /* only show the search button in overview and search pages */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_button"));
+ gtk_widget_set_visible (widget, mode == GS_SHELL_MODE_OVERVIEW ||
+ mode == GS_SHELL_MODE_SEARCH);
+ /* hide unless we're going to search */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (widget),
+ mode == GS_SHELL_MODE_SEARCH);
+ priv->in_mode_change = FALSE;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (gtk_builder_get_object (priv->builder, "header")));
+ gtk_style_context_remove_class (context, "selection-mode");
+
+ /* set the window title back to default */
+ gtk_window_set_title (priv->main_window, g_get_application_name ());
+
+ /* update main buttons according to mode */
+ priv->ignore_primary_buttons = TRUE;
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_explore"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), mode == GS_SHELL_MODE_OVERVIEW);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_installed"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), mode == GS_SHELL_MODE_INSTALLED);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_updates"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), mode == GS_SHELL_MODE_UPDATES);
+ gtk_widget_set_visible (widget, gs_plugin_loader_get_allow_updates (priv->plugin_loader) ||
+ mode == GS_SHELL_MODE_UPDATES);
+
+ priv->ignore_primary_buttons = FALSE;
+
+ /* switch page */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "stack_main"));
+ gtk_stack_set_visible_child_name (GTK_STACK (widget), page_name[mode]);
+
+ /* do action for mode */
+ priv->mode = mode;
+ switch (mode) {
+ case GS_SHELL_MODE_OVERVIEW:
+ gs_shell_clean_back_entry_stack (shell);
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "overview"));
+ break;
+ case GS_SHELL_MODE_INSTALLED:
+ gs_shell_clean_back_entry_stack (shell);
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "installed"));
+ break;
+ case GS_SHELL_MODE_MODERATE:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "moderate"));
+ break;
+ case GS_SHELL_MODE_LOADING:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "loading"));
+ break;
+ case GS_SHELL_MODE_SEARCH:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "search"));
+ gs_search_page_set_text (GS_SEARCH_PAGE (page), data);
+ break;
+ case GS_SHELL_MODE_UPDATES:
+ gs_shell_clean_back_entry_stack (shell);
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "updates"));
+ break;
+ case GS_SHELL_MODE_DETAILS:
+ app = GS_APP (data);
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "details"));
+ if (gs_app_get_local_file (app) != NULL) {
+ gs_details_page_set_local_file (GS_DETAILS_PAGE (page),
+ gs_app_get_local_file (app));
+ } else if (gs_app_get_metadata_item (app, "GnomeSoftware::from-url") != NULL) {
+ gs_details_page_set_url (GS_DETAILS_PAGE (page),
+ gs_app_get_metadata_item (app, "GnomeSoftware::from-url"));
+ } else {
+ gs_details_page_set_app (GS_DETAILS_PAGE (page), data);
+ }
+ break;
+ case GS_SHELL_MODE_CATEGORY:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "category"));
+ gs_category_page_set_category (GS_CATEGORY_PAGE (page),
+ GS_CATEGORY (data));
+ break;
+ case GS_SHELL_MODE_EXTRAS:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "extras"));
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ /* show the back button if needed */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_back"));
+ gtk_widget_set_visible (widget,
+ mode != GS_SHELL_MODE_SEARCH &&
+ !g_queue_is_empty (priv->back_entry_stack));
+
+ priv->in_mode_change = TRUE;
+
+ if (priv->page != NULL)
+ gs_page_switch_from (priv->page);
+ g_set_object (&priv->page, page);
+ gs_page_switch_to (page, scroll_up);
+ priv->in_mode_change = FALSE;
+
+ /* update header bar widgets */
+ widget = gs_page_get_header_start_widget (page);
+ gs_shell_set_header_start_widget (shell, widget);
+
+ widget = gs_page_get_header_end_widget (page);
+ gs_shell_set_header_end_widget (shell, widget);
+
+ /* refresh the updates bar when moving out of the loading mode, but only
+ * if the Mogwai scheduler state is already known, to avoid spuriously
+ * showing the updates bar */
+#ifdef HAVE_MOGWAI
+ if (priv->scheduler != NULL)
+#else
+ if (TRUE)
+#endif
+ gs_shell_refresh_auto_updates_ui (shell);
+
+ /* destroy any existing modals */
+ if (priv->modal_dialogs != NULL) {
+ gsize i = 0;
+ /* block signal emission of 'unmapped' since that will
+ * call g_ptr_array_remove_index. The unmapped signal may
+ * be emitted whilst running unref handlers for
+ * g_ptr_array_set_size */
+ for (i = 0; i < priv->modal_dialogs->len; ++i) {
+ GtkWidget *dialog = g_ptr_array_index (priv->modal_dialogs, i);
+ g_signal_handlers_disconnect_by_func (dialog,
+ modal_dialog_unmapped_cb,
+ shell);
+ }
+ g_ptr_array_set_size (priv->modal_dialogs, 0);
+ }
+}
+
+static void
+gs_overview_page_button_cb (GtkWidget *widget, GsShell *shell)
+{
+ GsShellMode mode;
+ mode = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget),
+ "gnome-software::overview-mode"));
+ gs_shell_change_mode (shell, mode, NULL, TRUE);
+}
+
+static void
+save_back_entry (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ BackEntry *entry;
+ GsPage *page;
+
+ entry = g_new0 (BackEntry, 1);
+ entry->mode = priv->mode;
+
+ entry->focus = gtk_window_get_focus (priv->main_window);
+ if (entry->focus != NULL)
+ g_object_add_weak_pointer (G_OBJECT (entry->focus),
+ (gpointer *) &entry->focus);
+
+ switch (priv->mode) {
+ case GS_SHELL_MODE_CATEGORY:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "category"));
+ entry->category = gs_category_page_get_category (GS_CATEGORY_PAGE (page));
+ g_object_ref (entry->category);
+ g_debug ("pushing back entry for %s with %s",
+ page_name[entry->mode],
+ gs_category_get_id (entry->category));
+ break;
+ case GS_SHELL_MODE_SEARCH:
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "search"));
+ entry->search = g_strdup (gs_search_page_get_text (GS_SEARCH_PAGE (page)));
+ g_debug ("pushing back entry for %s with %s",
+ page_name[entry->mode], entry->search);
+ break;
+ default:
+ g_debug ("pushing back entry for %s", page_name[entry->mode]);
+ break;
+ }
+
+ g_queue_push_head (priv->back_entry_stack, entry);
+}
+
+static void
+gs_shell_plugin_events_sources_cb (GtkWidget *widget, GsShell *shell)
+{
+ gs_shell_show_sources (shell);
+}
+
+static void
+gs_shell_plugin_events_no_space_cb (GtkWidget *widget, GsShell *shell)
+{
+ g_autoptr(GError) error = NULL;
+ if (!g_spawn_command_line_async ("baobab", &error))
+ g_warning ("failed to exec baobab: %s", error->message);
+}
+
+static void
+gs_shell_plugin_events_network_settings_cb (GtkWidget *widget, GsShell *shell)
+{
+ g_autoptr(GError) error = NULL;
+ if (!g_spawn_command_line_async ("gnome-control-center network", &error))
+ g_warning ("failed to exec gnome-control-center: %s", error->message);
+}
+
+static void
+gs_shell_plugin_events_more_info_cb (GtkWidget *widget, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ g_autoptr(GError) error = NULL;
+ if (!g_app_info_launch_default_for_uri (priv->events_info_uri, NULL, &error)) {
+ g_warning ("failed to launch URI %s: %s",
+ priv->events_info_uri, error->message);
+ }
+}
+
+static void
+gs_shell_plugin_events_restart_required_cb (GtkWidget *widget, GsShell *shell)
+{
+ g_autoptr(GError) error = NULL;
+ if (!g_spawn_command_line_async (LIBEXECDIR "/gnome-software-restarter", &error))
+ g_warning ("failed to restart: %s", error->message);
+}
+
+/* this is basically a workaround for GtkSearchEntry. Due to delayed emission of the search-changed
+ * signal it can't be blocked during insertion of text into the entry. Therefore we block the
+ * precursor of that signal to be able to add text to the entry without firing the handlers
+ * connected to "search-changed"
+ */
+static void
+block_changed (GtkEditable *editable,
+ gpointer user_data)
+{
+ g_signal_stop_emission_by_name (editable, "changed");
+}
+
+static void
+block_changed_signal (GtkSearchEntry *entry)
+{
+ g_signal_connect (entry, "changed", G_CALLBACK (block_changed), NULL);
+}
+
+static void
+unblock_changed_signal (GtkSearchEntry *entry)
+{
+ g_signal_handlers_disconnect_by_func (entry, G_CALLBACK (block_changed), NULL);
+}
+
+static void
+gs_shell_go_back (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ BackEntry *entry;
+ GtkWidget *widget;
+
+ /* nothing to do */
+ if (g_queue_is_empty (priv->back_entry_stack)) {
+ g_debug ("no back stack, showing overview");
+ gs_shell_change_mode (shell, GS_SHELL_MODE_OVERVIEW, NULL, FALSE);
+ return;
+ }
+
+ entry = g_queue_pop_head (priv->back_entry_stack);
+
+ switch (entry->mode) {
+ case GS_SHELL_MODE_UNKNOWN:
+ case GS_SHELL_MODE_LOADING:
+ /* happens when using --search, --details, --install, etc. options */
+ g_debug ("popping back entry for %s", page_name[entry->mode]);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_OVERVIEW, NULL, FALSE);
+ break;
+ case GS_SHELL_MODE_CATEGORY:
+ g_debug ("popping back entry for %s with %s",
+ page_name[entry->mode],
+ gs_category_get_id (entry->category));
+ gs_shell_change_mode (shell, entry->mode, entry->category, FALSE);
+ break;
+ case GS_SHELL_MODE_SEARCH:
+ g_debug ("popping back entry for %s with %s",
+ page_name[entry->mode], entry->search);
+
+ /* set the text in the entry and move cursor to the end */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
+ block_changed_signal (GTK_SEARCH_ENTRY (widget));
+ gtk_entry_set_text (GTK_ENTRY (widget), entry->search);
+ gtk_editable_set_position (GTK_EDITABLE (widget), -1);
+ unblock_changed_signal (GTK_SEARCH_ENTRY (widget));
+
+ /* set the mode directly */
+ gs_shell_change_mode (shell, entry->mode,
+ (gpointer) entry->search, FALSE);
+ break;
+ default:
+ g_debug ("popping back entry for %s", page_name[entry->mode]);
+ gs_shell_change_mode (shell, entry->mode, NULL, FALSE);
+ break;
+ }
+
+ if (entry->focus != NULL)
+ gtk_widget_grab_focus (entry->focus);
+
+ free_back_entry (entry);
+}
+
+static void
+gs_shell_back_button_cb (GtkWidget *widget, GsShell *shell)
+{
+ gs_shell_go_back (shell);
+}
+
+static void
+gs_shell_reload_cb (GsPluginLoader *plugin_loader, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ g_autoptr(GList) keys = g_hash_table_get_keys (priv->pages);
+ for (GList *l = keys; l != NULL; l = l->next) {
+ GsPage *page = GS_PAGE (g_hash_table_lookup (priv->pages, l->data));
+ gs_page_reload (page);
+ }
+}
+
+static void
+overview_page_refresh_done (GsOverviewPage *overview_page, gpointer data)
+{
+ GsShell *shell = data;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GsPage *page;
+
+ g_signal_handlers_disconnect_by_func (overview_page, overview_page_refresh_done, data);
+
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "updates_page"));
+ gs_page_reload (page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "installed_page"));
+ gs_page_reload (page);
+
+ gs_shell_change_mode (shell, GS_SHELL_MODE_OVERVIEW, NULL, TRUE);
+
+ /* now that we're finished with the loading page, connect the reload signal handler */
+ g_signal_connect (priv->plugin_loader, "reload",
+ G_CALLBACK (gs_shell_reload_cb), shell);
+}
+
+static void
+initial_refresh_done (GsLoadingPage *loading_page, gpointer data)
+{
+ GsShell *shell = data;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ g_signal_handlers_disconnect_by_func (loading_page, initial_refresh_done, data);
+
+ g_signal_emit (shell, signals[SIGNAL_LOADED], 0);
+
+ /* if the "loaded" signal handler didn't change the mode, kick off async
+ * overview page refresh, and switch to the page once done */
+ if (priv->mode == GS_SHELL_MODE_LOADING) {
+ GsPage *page;
+
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "overview_page"));
+ g_signal_connect (page, "refreshed",
+ G_CALLBACK (overview_page_refresh_done), shell);
+ gs_page_reload (page);
+ return;
+ }
+
+ /* now that we're finished with the loading page, connect the reload signal handler */
+ g_signal_connect (priv->plugin_loader, "reload",
+ G_CALLBACK (gs_shell_reload_cb), shell);
+}
+
+static gboolean
+window_keypress_handler (GtkWidget *window, GdkEvent *event, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *w;
+
+ /* handle ctrl+f shortcut */
+ if (event->type == GDK_KEY_PRESS) {
+ GdkEventKey *e = (GdkEventKey *) event;
+ if ((e->state & GDK_CONTROL_MASK) > 0 &&
+ e->keyval == GDK_KEY_f) {
+ w = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
+ if (!gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (w))) {
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (w), TRUE);
+ w = GTK_WIDGET (gtk_builder_get_object (priv->builder,
+ "entry_search"));
+ gtk_widget_grab_focus (w);
+ } else {
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (w), FALSE);
+ }
+ return GDK_EVENT_STOP;
+ }
+ }
+
+ /* pass to search bar */
+ w = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
+ return gtk_search_bar_handle_event (GTK_SEARCH_BAR (w), event);
+}
+
+static void
+search_changed_handler (GObject *entry, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const gchar *text;
+
+ text = gtk_entry_get_text (GTK_ENTRY (entry));
+ if (strlen (text) > 2) {
+ if (gs_shell_get_mode (shell) != GS_SHELL_MODE_SEARCH) {
+ save_back_entry (shell);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_SEARCH,
+ (gpointer) text, TRUE);
+ } else {
+ GsPage *page = GS_PAGE (g_hash_table_lookup (priv->pages, "search"));
+ gs_search_page_set_text (GS_SEARCH_PAGE (page), text);
+ gs_page_switch_to (page, TRUE);
+ }
+ }
+}
+
+static void
+search_button_clicked_cb (GtkToggleButton *toggle_button, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *search_bar;
+
+ search_bar = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (search_bar),
+ gtk_toggle_button_get_active (toggle_button));
+
+ if (priv->in_mode_change)
+ return;
+
+ /* go back when exiting the search view */
+ if (priv->mode == GS_SHELL_MODE_SEARCH &&
+ !gtk_toggle_button_get_active (toggle_button))
+ gs_shell_go_back (shell);
+}
+
+static void
+search_mode_enabled_cb (GtkSearchBar *search_bar, GParamSpec *pspec, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *search_button;
+
+ search_button = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_button"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (search_button),
+ gtk_search_bar_get_search_mode (search_bar));
+}
+
+static gboolean
+window_key_press_event (GtkWidget *win, GdkEventKey *event, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GdkKeymap *keymap;
+ GdkModifierType state;
+ gboolean is_rtl;
+ GtkWidget *button;
+
+ button = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_back"));
+ if (!gtk_widget_is_visible (button) || !gtk_widget_is_sensitive (button))
+ return GDK_EVENT_PROPAGATE;
+
+ state = event->state;
+ keymap = gdk_keymap_get_for_display (gtk_widget_get_display (win));
+ gdk_keymap_add_virtual_modifiers (keymap, &state);
+ state = state & gtk_accelerator_get_default_mod_mask ();
+ is_rtl = gtk_widget_get_direction (button) == GTK_TEXT_DIR_RTL;
+
+ if ((!is_rtl && state == GDK_MOD1_MASK && event->keyval == GDK_KEY_Left) ||
+ (is_rtl && state == GDK_MOD1_MASK && event->keyval == GDK_KEY_Right) ||
+ event->keyval == GDK_KEY_Back) {
+ gtk_widget_activate (button);
+ return GDK_EVENT_STOP;
+ }
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
+window_button_press_event (GtkWidget *win, GdkEventButton *event, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *button;
+
+ /* Mouse hardware back button is 8 */
+ if (event->button != 8)
+ return GDK_EVENT_PROPAGATE;
+
+ button = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_back"));
+ if (!gtk_widget_is_visible (button) || !gtk_widget_is_sensitive (button))
+ return GDK_EVENT_PROPAGATE;
+
+ gtk_widget_activate (button);
+ return GDK_EVENT_STOP;
+}
+
+static gboolean
+main_window_closed_cb (GtkWidget *dialog, GdkEvent *event, gpointer user_data)
+{
+ GsShell *shell = user_data;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *widget;
+
+ /* hide any notifications */
+ g_application_withdraw_notification (g_application_get_default (),
+ "installed");
+ g_application_withdraw_notification (g_application_get_default (),
+ "install-resources");
+
+ /* clear any in-app notification */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "notification_event"));
+ gtk_revealer_set_reveal_child (GTK_REVEALER (widget), FALSE);
+
+ /* release our hold on the download scheduler */
+#ifdef HAVE_MOGWAI
+ if (priv->scheduler != NULL) {
+ if (priv->scheduler_invalidated_handler > 0)
+ g_signal_handler_disconnect (priv->scheduler,
+ priv->scheduler_invalidated_handler);
+ priv->scheduler_invalidated_handler = 0;
+
+ mwsc_scheduler_release_async (priv->scheduler,
+ NULL,
+ scheduler_release_cb,
+ g_object_ref (shell));
+ }
+#endif /* HAVE_MOGWAI */
+
+ gs_shell_clean_back_entry_stack (shell);
+ gtk_widget_hide (dialog);
+ return TRUE;
+}
+
+static void
+gs_shell_main_window_mapped_cb (GtkWidget *widget, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ gs_plugin_loader_set_scale (priv->plugin_loader,
+ (guint) gtk_widget_get_scale_factor (widget));
+
+ /* Set up the updates bar. Do this here rather than in gs_shell_setup()
+ * since we only want to hold the scheduler open while the gnome-software
+ * main window is visible, and not while we’re running in the background. */
+#ifdef HAVE_MOGWAI
+ if (priv->scheduler == NULL)
+ mwsc_scheduler_new_async (priv->cancellable,
+ (GAsyncReadyCallback) scheduler_ready_cb,
+ g_object_ref (shell));
+#else
+ gs_shell_refresh_auto_updates_ui (shell);
+#endif /* HAVE_MOGWAI */
+}
+
+static void
+gs_shell_main_window_realized_cb (GtkWidget *widget, GsShell *shell)
+{
+
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GdkRectangle geometry;
+ GdkDisplay *display;
+ GdkMonitor *monitor;
+
+ display = gtk_widget_get_display (GTK_WIDGET (priv->main_window));
+ monitor = gdk_display_get_monitor_at_window (display,
+ gtk_widget_get_window (GTK_WIDGET (priv->main_window)));
+
+ /* adapt the window for low and medium resolution screens */
+ gdk_monitor_get_geometry (monitor, &geometry);
+ if (geometry.width < 800 || geometry.height < 600) {
+ GtkWidget *buttonbox = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main"));
+
+ gtk_container_child_set (GTK_CONTAINER (buttonbox),
+ GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_explore")),
+ "non-homogeneous", TRUE,
+ NULL);
+ gtk_container_child_set (GTK_CONTAINER (buttonbox),
+ GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_installed")),
+ "non-homogeneous", TRUE,
+ NULL);
+ gtk_container_child_set (GTK_CONTAINER (buttonbox),
+ GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_updates")),
+ "non-homogeneous", TRUE,
+ NULL);
+ } else if (geometry.width < 1366 || geometry.height < 768) {
+ gtk_window_set_default_size (priv->main_window, 1050, 600);
+ }
+}
+
+static void
+gs_shell_allow_updates_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *widget;
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_updates"));
+ gtk_widget_set_visible (widget, gs_plugin_loader_get_allow_updates (plugin_loader) ||
+ priv->mode == GS_SHELL_MODE_UPDATES);
+}
+
+typedef enum {
+ GS_SHELL_EVENT_BUTTON_NONE = 0,
+ GS_SHELL_EVENT_BUTTON_SOURCES = 1 << 0,
+ GS_SHELL_EVENT_BUTTON_NO_SPACE = 1 << 1,
+ GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS = 1 << 2,
+ GS_SHELL_EVENT_BUTTON_MORE_INFO = 1 << 3,
+ GS_SHELL_EVENT_BUTTON_RESTART_REQUIRED = 1 << 4,
+ GS_SHELL_EVENT_BUTTON_LAST
+} GsShellEventButtons;
+
+static gboolean
+gs_shell_has_disk_examination_app (void)
+{
+ g_autofree gchar *baobab = g_find_program_in_path ("baobab");
+ return (baobab != NULL);
+}
+
+static void
+gs_shell_show_event_app_notify (GsShell *shell,
+ const gchar *title,
+ GsShellEventButtons buttons)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *widget;
+
+ /* set visible */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "notification_event"));
+ gtk_revealer_set_reveal_child (GTK_REVEALER (widget), TRUE);
+
+ /* sources button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_sources"));
+ gtk_widget_set_visible (widget, (buttons & GS_SHELL_EVENT_BUTTON_SOURCES) > 0);
+
+ /* no-space button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_no_space"));
+ gtk_widget_set_visible (widget, (buttons & GS_SHELL_EVENT_BUTTON_NO_SPACE) > 0 &&
+ gs_shell_has_disk_examination_app());
+
+ /* network settings button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_network_settings"));
+ gtk_widget_set_visible (widget, (buttons & GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS) > 0);
+
+ /* restart button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_restart_required"));
+ gtk_widget_set_visible (widget, (buttons & GS_SHELL_EVENT_BUTTON_RESTART_REQUIRED) > 0);
+
+ /* more-info button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_more_info"));
+ gtk_widget_set_visible (widget, (buttons & GS_SHELL_EVENT_BUTTON_MORE_INFO) > 0);
+
+ /* dismiss button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_dismiss"));
+ gtk_widget_set_visible (widget, (buttons & GS_SHELL_EVENT_BUTTON_RESTART_REQUIRED) == 0);
+
+ /* set title */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "label_events"));
+ gtk_label_set_markup (GTK_LABEL (widget), title);
+ gtk_widget_set_visible (widget, title != NULL);
+}
+
+void
+gs_shell_show_notification (GsShell *shell, const gchar *title)
+{
+ gs_shell_show_event_app_notify (shell, title, GS_SHELL_EVENT_BUTTON_NONE);
+}
+
+static gchar *
+gs_shell_get_title_from_origin (GsApp *app)
+{
+ /* get a title, falling back */
+ if (gs_app_get_origin_hostname (app) != NULL) {
+ /* TRANSLATORS: this is part of the in-app notification,
+ * where the %s is the truncated hostname, e.g.
+ * 'alt.fedoraproject.org' */
+ return g_strdup_printf (_("“%s”"), gs_app_get_origin_hostname (app));
+ }
+ if (gs_app_get_origin (app) != NULL) {
+ /* TRANSLATORS: this is part of the in-app notification,
+ * where the %s is the origin id, e.g. 'fedora' */
+ return g_strdup_printf (_("“%s”"), gs_app_get_origin (app));
+ }
+ return g_strdup_printf ("“%s”", gs_app_get_id (app));
+}
+
+/* return a name for the app, using quotes if the name is more than one word */
+static gchar *
+gs_shell_get_title_from_app (GsApp *app)
+{
+ const gchar *tmp = gs_app_get_name (app);
+ if (tmp != NULL) {
+ if (g_strstr_len (tmp, -1, " ") != NULL) {
+ /* TRANSLATORS: this is part of the in-app notification,
+ * where the %s is a multi-word localised app name
+ * e.g. 'Getting things GNOME!" */
+ return g_strdup_printf (_("“%s”"), tmp);
+ }
+ return g_strdup (tmp);
+ }
+ return g_strdup_printf (_("“%s”"), gs_app_get_id (app));
+}
+
+static gchar *
+get_first_line (const gchar *str)
+{
+ g_auto(GStrv) lines = NULL;
+
+ lines = g_strsplit (str, "\n", 2);
+ if (lines != NULL && g_strv_length (lines) != 0)
+ return g_strdup (lines[0]);
+
+ return NULL;
+}
+
+static void
+gs_shell_append_detailed_error (GsShell *shell, GString *str, const GError *error)
+{
+ g_autofree gchar *first_line = get_first_line (error->message);
+ if (first_line != NULL) {
+ g_autofree gchar *escaped = g_markup_escape_text (first_line, -1);
+ g_string_append_printf (str, ":\n%s", escaped);
+ }
+}
+
+static gboolean
+gs_shell_show_event_refresh (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ GsPluginAction action = gs_plugin_event_get_action (event);
+ g_autofree gchar *str_origin = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ /* ignore any errors from background downloads */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_DOWNLOAD_FAILED:
+ if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ if (gs_app_get_bundle_kind (origin) == AS_BUNDLE_KIND_CABINET) {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the source (e.g. "alt.fedoraproject.org") */
+ g_string_append_printf (str, _("Unable to download "
+ "firmware updates from %s"),
+ str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the source (e.g. "alt.fedoraproject.org") */
+ g_string_append_printf (str, _("Unable to download updates from %s"),
+ str_origin);
+ if (gs_app_get_management_plugin (origin) != NULL)
+ buttons |= GS_SHELL_EVENT_BUTTON_SOURCES;
+ }
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates"));
+ }
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ case GS_PLUGIN_ERROR_NO_NETWORK:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates: "
+ "internet access was required but wasn’t available"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS;
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the source (e.g. "alt.fedoraproject.org") */
+ g_string_append_printf (str, _("Unable to download updates "
+ "from %s: not enough disk space"),
+ str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates: "
+ "not enough disk space"));
+ }
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_AUTH_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates: "
+ "authentication was required"));
+ break;
+ case GS_PLUGIN_ERROR_AUTH_INVALID:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates: "
+ "authentication was invalid"));
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates: you do not have"
+ " permission to install software"));
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ if (action == GS_PLUGIN_ACTION_DOWNLOAD) {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to download updates"));
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to get list of updates"));
+ }
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_install (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *app = gs_plugin_event_get_app (event);
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autofree gchar *str_app = NULL;
+ g_autofree gchar *str_origin = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ str_app = gs_shell_get_title_from_app (app);
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_DOWNLOAD_FAILED:
+ if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the first %s is the application name (e.g. "GIMP") and
+ * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]" */
+ g_string_append_printf (str, _("Unable to install %s as "
+ "download failed from %s"),
+ str_app, str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to install %s "
+ "as download failed"),
+ str_app);
+ }
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ case GS_PLUGIN_ERROR_NOT_SUPPORTED:
+ if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the first %s is the application name (e.g. "GIMP")
+ * and the second %s is the name of the runtime, e.g.
+ * "GNOME SDK [flatpak.gnome.org]" */
+ g_string_append_printf (str, _("Unable to install %s as "
+ "runtime %s not available"),
+ str_app, str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to install %s "
+ "as not supported"),
+ str_app);
+ }
+ break;
+ case GS_PLUGIN_ERROR_NO_NETWORK:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to install: internet access was "
+ "required but wasn’t available"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS;
+ break;
+ case GS_PLUGIN_ERROR_INVALID_FORMAT:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to install: the application has an invalid format"));
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to install %s: "
+ "not enough disk space"),
+ str_app);
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_AUTH_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install %s: "
+ "authentication was required"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_AUTH_INVALID:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to install %s: "
+ "authentication was invalid"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to install %s: "
+ "you do not have permission to "
+ "install software"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_AC_POWER_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to install %s: "
+ "AC power is required"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to install %s: "
+ "The battery level is too low"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to install %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_update (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *app = gs_plugin_event_get_app (event);
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autofree gchar *str_app = NULL;
+ g_autofree gchar *str_origin = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ /* ignore any errors from background downloads */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_DOWNLOAD_FAILED:
+ if (app != NULL && origin != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the first %s is the app name (e.g. "GIMP") and
+ * the second %s is the origin, e.g. "Fedora" or
+ * "Fedora Project [fedoraproject.org]" */
+ g_string_append_printf (str, _("Unable to update %s from %s as download failed"),
+ str_app, str_origin);
+ buttons = TRUE;
+ } else if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s as download failed"),
+ str_app);
+ } else if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the origin, e.g. "Fedora" or
+ * "Fedora Project [fedoraproject.org]" */
+ g_string_append_printf (str, _("Unable to install updates from %s as download failed"),
+ str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates as download failed"));
+ }
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ case GS_PLUGIN_ERROR_NO_NETWORK:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Unable to update: "
+ "internet access was required but "
+ "wasn’t available"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS;
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "not enough disk space"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "not enough disk space"));
+ }
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_AUTH_REQUIRED:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "authentication was required"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "authentication was required"));
+ }
+ break;
+ case GS_PLUGIN_ERROR_AUTH_INVALID:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "authentication was invalid"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "authentication was invalid"));
+ }
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "you do not have permission to "
+ "update software"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "you do not have permission to "
+ "update software"));
+ }
+ break;
+ case GS_PLUGIN_ERROR_AC_POWER_REQUIRED:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "AC power is required"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "AC power is required"));
+ }
+ break;
+ case GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "The battery level is too low"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "The battery level is too low"));
+ }
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s"), str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates"));
+ }
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_upgrade (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *app = gs_plugin_event_get_app (event);
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autofree gchar *str_app = NULL;
+ g_autofree gchar *str_origin = NULL;
+
+ str_app = g_strdup_printf ("%s %s", gs_app_get_name (app), gs_app_get_version (app));
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_DOWNLOAD_FAILED:
+ if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the first %s is the distro name (e.g. "Fedora 25") and
+ * the second %s is the origin, e.g. "Fedora Project [fedoraproject.org]" */
+ g_string_append_printf (str, _("Unable to upgrade to %s from %s"),
+ str_app, str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the app name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to upgrade to %s "
+ "as download failed"),
+ str_app);
+ }
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ case GS_PLUGIN_ERROR_NO_NETWORK:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "internet access was required but "
+ "wasn’t available"),
+ str_app);
+ buttons |= GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS;
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "not enough disk space"),
+ str_app);
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_AUTH_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "authentication was required"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_AUTH_INVALID:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "authentication was invalid"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "you do not have permission to upgrade"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_AC_POWER_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "AC power is required"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "The battery level is too low"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_remove (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *app = gs_plugin_event_get_app (event);
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autofree gchar *str_app = NULL;
+
+ str_app = gs_shell_get_title_from_app (app);
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_AUTH_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to remove %s: authentication was required"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_AUTH_INVALID:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to remove %s: authentication was invalid"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to remove %s: you do not have"
+ " permission to remove software"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_AC_POWER_REQUIRED:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to remove %s: "
+ "AC power is required"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW:
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to remove %s: "
+ "The battery level is too low"),
+ str_app);
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* non-interactive generic */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to remove %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_launch (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *app = gs_plugin_event_get_app (event);
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autofree gchar *str_app = NULL;
+ g_autofree gchar *str_origin = NULL;
+
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_NOT_SUPPORTED:
+ if (app != NULL && origin != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the first %s is the application name (e.g. "GIMP")
+ * and the second %s is the name of the runtime, e.g.
+ * "GNOME SDK [flatpak.gnome.org]" */
+ g_string_append_printf (str, _("Unable to launch %s: %s is not installed"),
+ str_app,
+ str_origin);
+ }
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Not enough disk space — free up some space "
+ "and try again"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* non-interactive generic */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+ /* TRANSLATORS: we failed to get a proper error code */
+ g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_file_to_app (GsShell *shell, GsPluginEvent *event)
+{
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_NOT_SUPPORTED:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Failed to install file: not supported"));
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Failed to install file: authentication failed"));
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Not enough disk space — free up some space "
+ "and try again"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* non-interactive generic */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+ /* TRANSLATORS: we failed to get a proper error code */
+ g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_url_to_app (GsShell *shell, GsPluginEvent *event)
+{
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_NOT_SUPPORTED:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Failed to install: not supported"));
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Failed to install: authentication failed"));
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Not enough disk space — free up some space "
+ "and try again"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* non-interactive generic */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+ /* TRANSLATORS: we failed to get a proper error code */
+ g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event_fallback (GsShell *shell, GsPluginEvent *event)
+{
+ GsApp *app = gs_plugin_event_get_app (event);
+ GsApp *origin = gs_plugin_event_get_origin (event);
+ GsShellEventButtons buttons = GS_SHELL_EVENT_BUTTON_NONE;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ const GError *error = gs_plugin_event_get_error (event);
+ g_autoptr(GString) str = g_string_new (NULL);
+ g_autofree gchar *str_app = NULL;
+ g_autofree gchar *str_origin = NULL;
+
+ switch (error->code) {
+ case GS_PLUGIN_ERROR_DOWNLOAD_FAILED:
+ if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * the %s is the origin, e.g. "Fedora" or
+ * "Fedora Project [fedoraproject.org]" */
+ g_string_append_printf (str, _("Unable to contact %s"),
+ str_origin);
+ }
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("Not enough disk space — free up some space "
+ "and try again"));
+ buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
+ break;
+ case GS_PLUGIN_ERROR_RESTART_REQUIRED:
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("%s needs to be restarted "
+ "to use new plugins."),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append (str, _("This application needs to be "
+ "restarted to use new plugins."));
+ }
+ buttons |= GS_SHELL_EVENT_BUTTON_RESTART_REQUIRED;
+ break;
+ case GS_PLUGIN_ERROR_AC_POWER_REQUIRED:
+ /* TRANSLATORS: need to be connected to the AC power */
+ g_string_append (str, _("AC power is required"));
+ break;
+ case GS_PLUGIN_ERROR_BATTERY_LEVEL_TOO_LOW:
+ /* TRANSLATORS: not enough juice to do this safely */
+ g_string_append (str, _("The battery level is too low"));
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ break;
+ default:
+ /* non-interactive generic */
+ if (!gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_INTERACTIVE))
+ return FALSE;
+ /* TRANSLATORS: we failed to get a proper error code */
+ g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
+ break;
+ }
+ if (str->len == 0)
+ return FALSE;
+
+ /* add more-info button */
+ if (origin != NULL) {
+ const gchar *uri = gs_app_get_url (origin, AS_URL_KIND_HELP);
+ if (uri != NULL) {
+ g_free (priv->events_info_uri);
+ priv->events_info_uri = g_strdup (uri);
+ buttons |= GS_SHELL_EVENT_BUTTON_MORE_INFO;
+ }
+ }
+
+ /* show in-app notification */
+ gs_shell_show_event_app_notify (shell, str->str, buttons);
+ return TRUE;
+}
+
+static gboolean
+gs_shell_show_event (GsShell *shell, GsPluginEvent *event)
+{
+ const GError *error;
+ GsPluginAction action;
+
+ /* get error */
+ error = gs_plugin_event_get_error (event);
+ if (error == NULL)
+ return FALSE;
+
+ /* name and shame the plugin */
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_TIMED_OUT)) {
+ gs_shell_show_event_app_notify (shell, error->message,
+ GS_SHELL_EVENT_BUTTON_NONE);
+ return TRUE;
+ }
+
+ /* split up the events by action */
+ action = gs_plugin_event_get_action (event);
+ switch (action) {
+ case GS_PLUGIN_ACTION_REFRESH:
+ case GS_PLUGIN_ACTION_DOWNLOAD:
+ return gs_shell_show_event_refresh (shell, event);
+ case GS_PLUGIN_ACTION_INSTALL:
+ return gs_shell_show_event_install (shell, event);
+ case GS_PLUGIN_ACTION_UPDATE:
+ return gs_shell_show_event_update (shell, event);
+ case GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD:
+ return gs_shell_show_event_upgrade (shell, event);
+ case GS_PLUGIN_ACTION_REMOVE:
+ return gs_shell_show_event_remove (shell, event);
+ case GS_PLUGIN_ACTION_LAUNCH:
+ return gs_shell_show_event_launch (shell, event);
+ case GS_PLUGIN_ACTION_FILE_TO_APP:
+ return gs_shell_show_event_file_to_app (shell, event);
+ case GS_PLUGIN_ACTION_URL_TO_APP:
+ return gs_shell_show_event_url_to_app (shell, event);
+ default:
+ break;
+ }
+
+ /* capture some warnings every time */
+ return gs_shell_show_event_fallback (shell, event);
+}
+
+static void
+gs_shell_rescan_events (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *widget;
+ g_autoptr(GsPluginEvent) event = NULL;
+
+ /* find the first active event and show it */
+ event = gs_plugin_loader_get_event_default (priv->plugin_loader);
+ if (event != NULL) {
+ if (!gs_shell_show_event (shell, event)) {
+ GsPluginAction action = gs_plugin_event_get_action (event);
+ const GError *error = gs_plugin_event_get_error (event);
+ if (error != NULL &&
+ !g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED) &&
+ !g_error_matches (error,
+ G_IO_ERROR,
+ G_IO_ERROR_CANCELLED)) {
+ g_warning ("not handling error %s for action %s: %s",
+ gs_plugin_error_to_string (error->code),
+ gs_plugin_action_to_string (action),
+ error->message);
+ }
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_INVALID);
+ return;
+ }
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_VISIBLE);
+ return;
+ }
+
+ /* nothing to show */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "notification_event"));
+ gtk_revealer_set_reveal_child (GTK_REVEALER (widget), FALSE);
+}
+
+static void
+gs_shell_events_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsShell *shell)
+{
+ gs_shell_rescan_events (shell);
+}
+
+static void
+gs_shell_plugin_event_dismissed_cb (GtkButton *button, GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ guint i;
+ g_autoptr(GPtrArray) events = NULL;
+
+ /* mark any events currently showing as invalid */
+ events = gs_plugin_loader_get_events (priv->plugin_loader);
+ for (i = 0; i < events->len; i++) {
+ GsPluginEvent *event = g_ptr_array_index (events, i);
+ if (gs_plugin_event_has_flag (event, GS_PLUGIN_EVENT_FLAG_VISIBLE)) {
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_INVALID);
+ gs_plugin_event_remove_flag (event, GS_PLUGIN_EVENT_FLAG_VISIBLE);
+ }
+ }
+
+ /* show the next event */
+ gs_shell_rescan_events (shell);
+}
+
+static void
+gs_shell_setup_pages (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ g_autoptr(GList) keys = g_hash_table_get_keys (priv->pages);
+ for (GList *l = keys; l != NULL; l = l->next) {
+ g_autoptr(GError) error = NULL;
+ GsPage *page = GS_PAGE (g_hash_table_lookup (priv->pages, l->data));
+ if (!gs_page_setup (page, shell,
+ priv->plugin_loader,
+ priv->builder,
+ priv->cancellable,
+ &error)) {
+ g_warning ("Failed to setup panel: %s", error->message);
+ }
+ }
+}
+
+static void
+gs_shell_add_about_menu_item (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GMenu *primary_menu;
+ g_autoptr(GMenuItem) menu_item = NULL;
+ g_autofree gchar *label = NULL;
+
+ primary_menu = G_MENU (gtk_builder_get_object (priv->builder, "primary_menu"));
+
+ /* TRANSLATORS: this is the menu item that opens the about window */
+ menu_item = g_menu_item_new (_("About Software"), "app.about");
+ g_menu_append_item (primary_menu, menu_item);
+}
+
+void
+gs_shell_setup (GsShell *shell, GsPluginLoader *plugin_loader, GCancellable *cancellable)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *widget;
+ GtkStyleContext *style_context;
+ GsPage *page;
+
+ g_return_if_fail (GS_IS_SHELL (shell));
+
+ priv->plugin_loader = g_object_ref (plugin_loader);
+ g_signal_connect_object (priv->plugin_loader, "notify::events",
+ G_CALLBACK (gs_shell_events_notify_cb),
+ shell, 0);
+ g_signal_connect_object (priv->plugin_loader, "notify::allow-updates",
+ G_CALLBACK (gs_shell_allow_updates_notify_cb),
+ shell, 0);
+ g_signal_connect_object (priv->plugin_loader, "notify::network-metered",
+ G_CALLBACK (gs_shell_network_metered_notify_cb),
+ shell, 0);
+ g_signal_connect_object (priv->plugin_loader, "basic-auth-start",
+ G_CALLBACK (gs_shell_basic_auth_start_cb),
+ shell, 0);
+ priv->cancellable = g_object_ref (cancellable);
+
+ priv->settings = g_settings_new ("org.gnome.software");
+
+ /* get UI */
+ priv->builder = gtk_builder_new_from_resource ("/org/gnome/Software/gnome-software.ui");
+ priv->main_window = GTK_WINDOW (gtk_builder_get_object (priv->builder, "window_software"));
+ g_signal_connect (priv->main_window, "map",
+ G_CALLBACK (gs_shell_main_window_mapped_cb), shell);
+ g_signal_connect (priv->main_window, "realize",
+ G_CALLBACK (gs_shell_main_window_realized_cb), shell);
+
+ g_signal_connect (priv->main_window, "delete-event",
+ G_CALLBACK (main_window_closed_cb), shell);
+
+ /* fix up the header bar */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header"));
+ if (gs_utils_is_current_desktop ("Unity")) {
+ style_context = gtk_widget_get_style_context (widget);
+ gtk_style_context_remove_class (style_context, GTK_STYLE_CLASS_TITLEBAR);
+ gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
+ gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (widget), "");
+ } else {
+ g_object_ref (widget);
+ gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (widget)), widget);
+ gtk_window_set_titlebar (GTK_WINDOW (priv->main_window), widget);
+ g_object_unref (widget);
+ }
+
+ /* global keynav */
+ g_signal_connect_after (priv->main_window, "key_press_event",
+ G_CALLBACK (window_key_press_event), shell);
+ /* mouse hardware back button */
+ g_signal_connect_after (priv->main_window, "button_press_event",
+ G_CALLBACK (window_button_press_event), shell);
+
+ /* show the search bar when clicking on the search button */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_button"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (search_button_clicked_cb),
+ shell);
+ /* set the search button enabled when search bar appears */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
+ g_signal_connect (widget, "notify::search-mode-enabled",
+ G_CALLBACK (search_mode_enabled_cb),
+ shell);
+
+ /* show the account popover when clicking on the account button */
+ /* widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "menu_button"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (menu_button_clicked_cb),
+ shell); */
+
+ /* setup buttons */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_back"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_back_button_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_explore"));
+ g_object_set_data (G_OBJECT (widget),
+ "gnome-software::overview-mode",
+ GINT_TO_POINTER (GS_SHELL_MODE_OVERVIEW));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_overview_page_button_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_installed"));
+ g_object_set_data (G_OBJECT (widget),
+ "gnome-software::overview-mode",
+ GINT_TO_POINTER (GS_SHELL_MODE_INSTALLED));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_overview_page_button_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_updates"));
+ g_object_set_data (G_OBJECT (widget),
+ "gnome-software::overview-mode",
+ GINT_TO_POINTER (GS_SHELL_MODE_UPDATES));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_overview_page_button_cb), shell);
+
+ /* set up in-app notification controls */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_dismiss"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_plugin_event_dismissed_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_sources"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_plugin_events_sources_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_no_space"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_plugin_events_no_space_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_network_settings"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_plugin_events_network_settings_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_more_info"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_plugin_events_more_info_cb), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_events_restart_required"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gs_shell_plugin_events_restart_required_cb), shell);
+
+ /* add pages to hash */
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "overview_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("overview"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "updates_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("updates"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "installed_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("installed"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "moderate_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("moderate"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "loading_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("loading"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "search_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("search"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "details_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("details"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "category_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("category"), page);
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "extras_page"));
+ g_hash_table_insert (priv->pages, g_strdup ("extras"), page);
+ gs_shell_setup_pages (shell);
+
+ /* set up the metered data info bar and mogwai */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "metered_updates_bar"));
+ g_signal_connect (widget, "response",
+ (GCallback) gs_shell_metered_updates_bar_response_cb, shell);
+
+ g_signal_connect (priv->settings, "changed::download-updates",
+ (GCallback) gs_shell_download_updates_changed_cb, shell);
+
+ /* set up search */
+ g_signal_connect (priv->main_window, "key-press-event",
+ G_CALLBACK (window_keypress_handler), shell);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
+ priv->search_changed_id =
+ g_signal_connect (widget, "search-changed",
+ G_CALLBACK (search_changed_handler), shell);
+
+ /* load content */
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "loading_page"));
+ g_signal_connect (page, "refreshed",
+ G_CALLBACK (initial_refresh_done), shell);
+
+ /* coldplug */
+ gs_shell_rescan_events (shell);
+
+ /* primary menu */
+ gs_shell_add_about_menu_item (shell);
+
+ /* show loading page, which triggers the initial refresh */
+ gs_shell_change_mode (shell, GS_SHELL_MODE_LOADING, NULL, TRUE);
+}
+
+void
+gs_shell_reset_state (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ /* reset to overview, unless we're in the loading state which advances
+ * to overview on its own */
+ if (priv->mode != GS_SHELL_MODE_LOADING)
+ priv->mode = GS_SHELL_MODE_OVERVIEW;
+
+ gs_shell_clean_back_entry_stack (shell);
+}
+
+void
+gs_shell_set_mode (GsShell *shell, GsShellMode mode)
+{
+ gs_shell_change_mode (shell, mode, NULL, TRUE);
+}
+
+GsShellMode
+gs_shell_get_mode (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ return priv->mode;
+}
+
+const gchar *
+gs_shell_get_mode_string (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ return page_name[priv->mode];
+}
+
+void
+gs_shell_install (GsShell *shell, GsApp *app, GsShellInteraction interaction)
+{
+ GsPage *page;
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ save_back_entry (shell);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_DETAILS,
+ (gpointer) app, TRUE);
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "details"));
+ gs_page_install_app (page, app, interaction, priv->cancellable);
+}
+
+void
+gs_shell_show_installed_updates (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *dialog;
+
+ dialog = gs_update_dialog_new (priv->plugin_loader);
+ gs_update_dialog_show_installed_updates (GS_UPDATE_DIALOG (dialog));
+
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), priv->main_window);
+ gtk_window_present (GTK_WINDOW (dialog));
+}
+
+void
+gs_shell_show_sources (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *dialog;
+
+ /* use if available */
+ if (g_spawn_command_line_async ("software-properties-gtk", NULL))
+ return;
+
+ dialog = gs_repos_dialog_new (priv->main_window, priv->plugin_loader);
+ gs_shell_modal_dialog_present (shell, GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
+void
+gs_shell_show_prefs (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *dialog;
+
+ dialog = gs_prefs_dialog_new (priv->main_window, priv->plugin_loader);
+ gs_shell_modal_dialog_present (shell, GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
+void
+gs_shell_show_app (GsShell *shell, GsApp *app)
+{
+ save_back_entry (shell);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_DETAILS, app, TRUE);
+ gs_shell_activate (shell);
+}
+
+void
+gs_shell_show_category (GsShell *shell, GsCategory *category)
+{
+ save_back_entry (shell);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_CATEGORY, category, TRUE);
+}
+
+void gs_shell_show_extras_search (GsShell *shell, const gchar *mode, gchar **resources)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GsPage *page;
+
+ page = GS_PAGE (gtk_builder_get_object (priv->builder, "extras_page"));
+
+ save_back_entry (shell);
+ gs_extras_page_search (GS_EXTRAS_PAGE (page), mode, resources);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_EXTRAS, NULL, TRUE);
+ gs_shell_activate (shell);
+}
+
+void
+gs_shell_show_search (GsShell *shell, const gchar *search)
+{
+ save_back_entry (shell);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_SEARCH,
+ (gpointer) search, TRUE);
+}
+
+void
+gs_shell_show_local_file (GsShell *shell, GFile *file)
+{
+ g_autoptr(GsApp) app = gs_app_new (NULL);
+ save_back_entry (shell);
+ gs_app_set_local_file (app, file);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_DETAILS,
+ (gpointer) app, TRUE);
+ gs_shell_activate (shell);
+}
+
+void
+gs_shell_show_search_result (GsShell *shell, const gchar *id, const gchar *search)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GsPage *page;
+
+ save_back_entry (shell);
+ page = GS_PAGE (g_hash_table_lookup (priv->pages, "search"));
+ gs_search_page_set_appid_to_show (GS_SEARCH_PAGE (page), id);
+ gs_shell_change_mode (shell, GS_SHELL_MODE_SEARCH,
+ (gpointer) search, TRUE);
+}
+
+void
+gs_shell_show_uri (GsShell *shell, const gchar *url)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ g_autoptr(GError) error = NULL;
+
+ if (!gtk_show_uri_on_window (priv->main_window,
+ url,
+ GDK_CURRENT_TIME,
+ &error)) {
+ g_warning ("failed to show URI %s: %s",
+ url, error->message);
+ }
+}
+
+static void
+gs_shell_dispose (GObject *object)
+{
+ GsShell *shell = GS_SHELL (object);
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ if (priv->back_entry_stack != NULL) {
+ g_queue_free_full (priv->back_entry_stack, (GDestroyNotify) free_back_entry);
+ priv->back_entry_stack = NULL;
+ }
+ g_clear_object (&priv->builder);
+ g_clear_object (&priv->cancellable);
+ g_clear_object (&priv->plugin_loader);
+ g_clear_object (&priv->header_start_widget);
+ g_clear_object (&priv->header_end_widget);
+ g_clear_object (&priv->page);
+ g_clear_pointer (&priv->pages, g_hash_table_unref);
+ g_clear_pointer (&priv->events_info_uri, g_free);
+ g_clear_pointer (&priv->modal_dialogs, g_ptr_array_unref);
+ g_clear_object (&priv->settings);
+
+#ifdef HAVE_MOGWAI
+ if (priv->scheduler != NULL) {
+ if (priv->scheduler_invalidated_handler > 0)
+ g_signal_handler_disconnect (priv->scheduler,
+ priv->scheduler_invalidated_handler);
+
+ mwsc_scheduler_release_async (priv->scheduler,
+ NULL,
+ scheduler_release_cb,
+ g_object_ref (shell));
+ }
+#endif /* HAVE_MOGWAI */
+
+ G_OBJECT_CLASS (gs_shell_parent_class)->dispose (object);
+}
+
+static void
+gs_shell_class_init (GsShellClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = gs_shell_dispose;
+
+ signals [SIGNAL_LOADED] =
+ g_signal_new ("loaded",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsShellClass, loaded),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+static void
+gs_shell_init (GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+ priv->pages = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ priv->back_entry_stack = g_queue_new ();
+ priv->ignore_primary_buttons = FALSE;
+ priv->modal_dialogs = g_ptr_array_new_with_free_func ((GDestroyNotify) gtk_widget_destroy);
+}
+
+GsShell *
+gs_shell_new (void)
+{
+ GsShell *shell;
+ shell = g_object_new (GS_TYPE_SHELL, NULL);
+ return GS_SHELL (shell);
+}
diff --git a/src/gs-shell.h b/src/gs-shell.h
new file mode 100644
index 0000000..a02d24d
--- /dev/null
+++ b/src/gs-shell.h
@@ -0,0 +1,95 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_SHELL (gs_shell_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsShell, gs_shell, GS, SHELL, GObject)
+
+struct _GsShellClass
+{
+ GObjectClass parent_class;
+
+ void (* loaded) (GsShell *shell);
+};
+
+typedef enum {
+ GS_SHELL_MODE_UNKNOWN,
+ GS_SHELL_MODE_OVERVIEW,
+ GS_SHELL_MODE_INSTALLED,
+ GS_SHELL_MODE_SEARCH,
+ GS_SHELL_MODE_UPDATES,
+ GS_SHELL_MODE_DETAILS,
+ GS_SHELL_MODE_CATEGORY,
+ GS_SHELL_MODE_EXTRAS,
+ GS_SHELL_MODE_MODERATE,
+ GS_SHELL_MODE_LOADING,
+ GS_SHELL_MODE_LAST
+} GsShellMode;
+
+typedef enum {
+ GS_SHELL_INTERACTION_NONE = (0u),
+ GS_SHELL_INTERACTION_NOTIFY = (1u << 0),
+ GS_SHELL_INTERACTION_FULL = (1u << 1) | GS_SHELL_INTERACTION_NOTIFY,
+ GS_SHELL_INTERACTION_LAST
+} GsShellInteraction;
+
+GsShell *gs_shell_new (void);
+void gs_shell_activate (GsShell *shell);
+void gs_shell_refresh (GsShell *shell,
+ GCancellable *cancellable);
+void gs_shell_change_mode (GsShell *shell,
+ GsShellMode mode,
+ gpointer data,
+ gboolean scroll_up);
+void gs_shell_reset_state (GsShell *shell);
+void gs_shell_set_mode (GsShell *shell,
+ GsShellMode mode);
+void gs_shell_modal_dialog_present (GsShell *shell,
+ GtkDialog *dialog);
+GsShellMode gs_shell_get_mode (GsShell *shell);
+const gchar *gs_shell_get_mode_string (GsShell *shell);
+void gs_shell_install (GsShell *shell,
+ GsApp *app,
+ GsShellInteraction interaction);
+void gs_shell_show_installed_updates(GsShell *shell);
+void gs_shell_show_sources (GsShell *shell);
+void gs_shell_show_prefs (GsShell *shell);
+void gs_shell_show_app (GsShell *shell,
+ GsApp *app);
+void gs_shell_show_category (GsShell *shell,
+ GsCategory *category);
+void gs_shell_show_search (GsShell *shell,
+ const gchar *search);
+void gs_shell_show_local_file (GsShell *shell,
+ GFile *file);
+void gs_shell_show_search_result (GsShell *shell,
+ const gchar *id,
+ const gchar *search);
+void gs_shell_show_extras_search (GsShell *shell,
+ const gchar *mode,
+ gchar **resources);
+void gs_shell_show_uri (GsShell *shell,
+ const gchar *url);
+void gs_shell_setup (GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GCancellable *cancellable);
+gboolean gs_shell_is_active (GsShell *shell);
+GtkWindow *gs_shell_get_window (GsShell *shell);
+void gs_shell_show_notification (GsShell *shell,
+ const gchar *title);
+
+G_END_DECLS
diff --git a/src/gs-star-widget.c b/src/gs-star-widget.c
new file mode 100644
index 0000000..4485af1
--- /dev/null
+++ b/src/gs-star-widget.c
@@ -0,0 +1,327 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <math.h>
+
+#include "gs-common.h"
+#include "gs-star-widget.h"
+
+typedef struct
+{
+ gboolean interactive;
+ gint rating;
+ guint icon_size;
+ GtkWidget *box1;
+ GtkImage *images[5];
+} GsStarWidgetPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsStarWidget, gs_star_widget, GTK_TYPE_BIN)
+
+typedef enum {
+ PROP_ICON_SIZE = 1,
+ PROP_INTERACTIVE,
+ PROP_RATING,
+} GsStarWidgetProperty;
+
+enum {
+ RATING_CHANGED,
+ SIGNAL_LAST
+};
+
+static GParamSpec *properties[PROP_RATING + 1] = { 0, };
+static guint signals [SIGNAL_LAST] = { 0 };
+
+const gint rate_to_star[] = {20, 40, 60, 80, 100, -1};
+
+static void gs_star_widget_refresh (GsStarWidget *star);
+
+gint
+gs_star_widget_get_rating (GsStarWidget *star)
+{
+ GsStarWidgetPrivate *priv;
+ g_return_val_if_fail (GS_IS_STAR_WIDGET (star), -1);
+ priv = gs_star_widget_get_instance_private (star);
+ return priv->rating;
+}
+
+void
+gs_star_widget_set_icon_size (GsStarWidget *star, guint pixel_size)
+{
+ GsStarWidgetPrivate *priv;
+ g_return_if_fail (GS_IS_STAR_WIDGET (star));
+ priv = gs_star_widget_get_instance_private (star);
+
+ if (priv->icon_size == pixel_size)
+ return;
+
+ priv->icon_size = pixel_size;
+ g_object_notify_by_pspec (G_OBJECT (star), properties[PROP_ICON_SIZE]);
+ gs_star_widget_refresh (star);
+}
+
+static void
+gs_star_widget_button_clicked_cb (GtkButton *button, GsStarWidget *star)
+{
+ GsStarWidgetPrivate *priv;
+ gint rating;
+
+ priv = gs_star_widget_get_instance_private (star);
+ if (!priv->interactive)
+ return;
+
+ rating = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "GsStarWidget::value"));
+ gs_star_widget_set_rating (star, rating);
+ g_signal_emit (star, signals[RATING_CHANGED], 0, priv->rating);
+}
+
+/* Update the star styles to display the new rating */
+static void
+gs_star_widget_refresh_rating (GsStarWidget *star)
+{
+ GsStarWidgetPrivate *priv = gs_star_widget_get_instance_private (star);
+
+ if (!gtk_widget_get_realized (GTK_WIDGET (star)))
+ return;
+
+ for (guint i = 0; i < G_N_ELEMENTS (priv->images); i++) {
+ GtkWidget *im = GTK_WIDGET (priv->images[i]);
+ gboolean enabled;
+
+ /* add fudge factor so we can actually get 5 stars in reality */
+ enabled = priv->rating >= rate_to_star[i] - 10;
+
+ gtk_style_context_add_class (gtk_widget_get_style_context (im),
+ enabled ? "star-enabled" : "star-disabled");
+ gtk_style_context_remove_class (gtk_widget_get_style_context (im),
+ enabled ? "star-disabled" : "star-enabled");
+ }
+}
+
+static void
+gs_star_widget_refresh (GsStarWidget *star)
+{
+ GsStarWidgetPrivate *priv = gs_star_widget_get_instance_private (star);
+
+ if (!gtk_widget_get_realized (GTK_WIDGET (star)))
+ return;
+
+ /* remove all existing widgets */
+ gs_container_remove_all (GTK_CONTAINER (priv->box1));
+
+ for (guint i = 0; i < G_N_ELEMENTS (priv->images); i++) {
+ GtkWidget *w;
+ GtkWidget *im;
+
+ /* create image */
+ im = gtk_image_new_from_icon_name ("starred-symbolic",
+ GTK_ICON_SIZE_DIALOG);
+ gtk_image_set_pixel_size (GTK_IMAGE (im), (gint) priv->icon_size);
+ priv->images[i] = GTK_IMAGE (im);
+
+ /* create button */
+ if (priv->interactive) {
+ w = gtk_button_new ();
+ g_signal_connect (w, "clicked",
+ G_CALLBACK (gs_star_widget_button_clicked_cb), star);
+ g_object_set_data (G_OBJECT (w),
+ "GsStarWidget::value",
+ GINT_TO_POINTER (rate_to_star[i]));
+ gtk_container_add (GTK_CONTAINER (w), im);
+ gtk_widget_set_visible (im, TRUE);
+ } else {
+ w = im;
+ }
+ gtk_widget_set_sensitive (w, priv->interactive);
+ gtk_style_context_add_class (gtk_widget_get_style_context (w), "star");
+ gtk_widget_set_visible (w, TRUE);
+ gtk_container_add (GTK_CONTAINER (priv->box1), w);
+ }
+
+ gs_star_widget_refresh_rating (star);
+}
+
+void
+gs_star_widget_set_interactive (GsStarWidget *star, gboolean interactive)
+{
+ GsStarWidgetPrivate *priv;
+ g_return_if_fail (GS_IS_STAR_WIDGET (star));
+ priv = gs_star_widget_get_instance_private (star);
+
+ if (priv->interactive == interactive)
+ return;
+
+ priv->interactive = interactive;
+ g_object_notify_by_pspec (G_OBJECT (star), properties[PROP_INTERACTIVE]);
+ gs_star_widget_refresh (star);
+}
+
+void
+gs_star_widget_set_rating (GsStarWidget *star,
+ gint rating)
+{
+ GsStarWidgetPrivate *priv;
+ g_return_if_fail (GS_IS_STAR_WIDGET (star));
+ priv = gs_star_widget_get_instance_private (star);
+
+ if (priv->rating == rating)
+ return;
+
+ priv->rating = rating;
+ g_object_notify_by_pspec (G_OBJECT (star), properties[PROP_RATING]);
+ gs_star_widget_refresh_rating (star);
+}
+
+static void
+gs_star_widget_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsStarWidget *self = GS_STAR_WIDGET (object);
+ GsStarWidgetPrivate *priv = gs_star_widget_get_instance_private (self);
+
+ switch ((GsStarWidgetProperty) prop_id) {
+ case PROP_ICON_SIZE:
+ g_value_set_uint (value, priv->icon_size);
+ break;
+ case PROP_INTERACTIVE:
+ g_value_set_boolean (value, priv->interactive);
+ break;
+ case PROP_RATING:
+ g_value_set_int (value, priv->rating);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_star_widget_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsStarWidget *self = GS_STAR_WIDGET (object);
+
+ switch ((GsStarWidgetProperty) prop_id) {
+ case PROP_ICON_SIZE:
+ gs_star_widget_set_icon_size (self, g_value_get_uint (value));
+ break;
+ case PROP_INTERACTIVE:
+ gs_star_widget_set_interactive (self, g_value_get_boolean (value));
+ break;
+ case PROP_RATING:
+ gs_star_widget_set_rating (self, g_value_get_int (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_star_widget_destroy (GtkWidget *widget)
+{
+ GTK_WIDGET_CLASS (gs_star_widget_parent_class)->destroy (widget);
+}
+
+static void
+gs_star_widget_realize (GtkWidget *widget)
+{
+ GTK_WIDGET_CLASS (gs_star_widget_parent_class)->realize (widget);
+
+ /* Create child widgets. */
+ gs_star_widget_refresh (GS_STAR_WIDGET (widget));
+}
+
+static void
+gs_star_widget_init (GsStarWidget *star)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (star), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (star));
+}
+
+static void
+gs_star_widget_class_init (GsStarWidgetClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ widget_class->destroy = gs_star_widget_destroy;
+ widget_class->realize = gs_star_widget_realize;
+ object_class->get_property = gs_star_widget_get_property;
+ object_class->set_property = gs_star_widget_set_property;
+
+ /**
+ * GsStarWidget:icon-size:
+ *
+ * Size of the star icons to use in the widget, in pixels.
+ *
+ * Since: 3.38
+ */
+ properties[PROP_ICON_SIZE] =
+ g_param_spec_uint ("icon-size",
+ "Icon Size",
+ "Size of icons to use, in pixels",
+ 0, G_MAXUINT, 12,
+ G_PARAM_READWRITE);
+
+ /**
+ * GsStarWidget:interactive:
+ *
+ * Whether the widget accepts user input to change #GsStarWidget:rating.
+ *
+ * Since: 3.38
+ */
+ properties[PROP_INTERACTIVE] =
+ g_param_spec_boolean ("interactive",
+ "Interactive",
+ "Whether the rating is interactive",
+ FALSE,
+ G_PARAM_READWRITE);
+
+ /**
+ * GsStarWidget:rating:
+ *
+ * The rating to display on the widget, as a percentage. `-1` indicates
+ * that the rating is unknown.
+ *
+ * Since: 3.38
+ */
+ properties[PROP_RATING] =
+ g_param_spec_int ("rating",
+ "Rating",
+ "Rating, out of 100%, or -1 for unknown",
+ -1, 100, -1,
+ G_PARAM_READWRITE);
+
+ signals [RATING_CHANGED] =
+ g_signal_new ("rating-changed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsStarWidgetClass, rating_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+
+ g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-star-widget.ui");
+ gtk_widget_class_bind_template_child_private (widget_class, GsStarWidget, box1);
+}
+
+GtkWidget *
+gs_star_widget_new (void)
+{
+ GsStarWidget *star;
+ star = g_object_new (GS_TYPE_STAR_WIDGET, NULL);
+ return GTK_WIDGET (star);
+}
diff --git a/src/gs-star-widget.h b/src/gs-star-widget.h
new file mode 100644
index 0000000..baa1382
--- /dev/null
+++ b/src/gs-star-widget.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_STAR_WIDGET (gs_star_widget_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsStarWidget, gs_star_widget, GS, STAR_WIDGET, GtkBin)
+
+struct _GsStarWidgetClass
+{
+ GtkBinClass parent_class;
+
+ void (*rating_changed) (GsStarWidget *star);
+};
+
+GtkWidget *gs_star_widget_new (void);
+gint gs_star_widget_get_rating (GsStarWidget *star);
+void gs_star_widget_set_rating (GsStarWidget *star,
+ gint rating);
+void gs_star_widget_set_icon_size (GsStarWidget *star,
+ guint pixel_size);
+void gs_star_widget_set_interactive (GsStarWidget *star,
+ gboolean interactive);
+
+G_END_DECLS
diff --git a/src/gs-star-widget.ui b/src/gs-star-widget.ui
new file mode 100644
index 0000000..21621d1
--- /dev/null
+++ b/src/gs-star-widget.ui
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsStarWidget" parent="GtkBin">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="spacing">2</property>
+ <style>
+ <class name="star"/>
+ </style>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-summary-tile.c b/src/gs-summary-tile.c
new file mode 100644
index 0000000..c2ed8f9
--- /dev/null
+++ b/src/gs-summary-tile.c
@@ -0,0 +1,247 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-summary-tile.h"
+#include "gs-common.h"
+
+struct _GsSummaryTile
+{
+ GsAppTile parent_instance;
+ GtkWidget *image;
+ GtkWidget *name;
+ GtkWidget *summary;
+ GtkWidget *eventbox;
+ GtkWidget *stack;
+ gint preferred_width;
+ GtkCssProvider *tile_provider; /* (owned) (nullable) */
+};
+
+G_DEFINE_TYPE (GsSummaryTile, gs_summary_tile, GS_TYPE_APP_TILE)
+
+enum {
+ PROP_0,
+ PROP_PREFERRED_WIDTH
+};
+
+static void
+gs_summary_tile_refresh (GsAppTile *self)
+{
+ GsSummaryTile *tile = GS_SUMMARY_TILE (self);
+ GsApp *app = gs_app_tile_get_app (self);
+ AtkObject *accessible;
+ GtkStyleContext *context;
+ const GdkPixbuf *pixbuf;
+ gboolean installed;
+ g_autofree gchar *name = NULL;
+ const gchar *summary;
+ const gchar *css;
+
+ if (app == NULL)
+ return;
+
+ gtk_image_set_pixel_size (GTK_IMAGE (tile->image), 64);
+ gtk_stack_set_visible_child_name (GTK_STACK (tile->stack), "content");
+
+ /* set name */
+ gtk_label_set_label (GTK_LABEL (tile->name), gs_app_get_name (app));
+
+ summary = gs_app_get_summary (app);
+ gtk_label_set_label (GTK_LABEL (tile->summary), summary);
+ gtk_widget_set_visible (tile->summary, summary && summary[0]);
+
+ pixbuf = gs_app_get_pixbuf (app);
+ if (pixbuf != NULL) {
+ gs_image_set_from_pixbuf (GTK_IMAGE (tile->image), pixbuf);
+ } else {
+ gtk_image_set_from_icon_name (GTK_IMAGE (tile->image),
+ "application-x-executable",
+ GTK_ICON_SIZE_DIALOG);
+ }
+ context = gtk_widget_get_style_context (tile->image);
+ if (gs_app_get_use_drop_shadow (app))
+ gtk_style_context_add_class (context, "icon-dropshadow");
+ else
+ gtk_style_context_remove_class (context, "icon-dropshadow");
+
+ /* perhaps set custom css */
+ css = gs_app_get_metadata_item (app, "GnomeSoftware::AppTile-css");
+ gs_utils_widget_set_css (GTK_WIDGET (tile), &tile->tile_provider, "summary-tile", css);
+
+ accessible = gtk_widget_get_accessible (GTK_WIDGET (tile));
+
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ installed = TRUE;
+ name = g_strdup_printf (_("%s (Installed)"),
+ gs_app_get_name (app));
+ break;
+ case AS_APP_STATE_INSTALLING:
+ installed = FALSE;
+ name = g_strdup_printf (_("%s (Installing)"),
+ gs_app_get_name (app));
+ break;
+ case AS_APP_STATE_REMOVING:
+ installed = TRUE;
+ name = g_strdup_printf (_("%s (Removing)"),
+ gs_app_get_name (app));
+ break;
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ case AS_APP_STATE_AVAILABLE:
+ default:
+ installed = FALSE;
+ name = g_strdup (gs_app_get_name (app));
+ break;
+ }
+
+ gtk_widget_set_visible (tile->eventbox, installed);
+
+ if (GTK_IS_ACCESSIBLE (accessible) && name != NULL) {
+ atk_object_set_name (accessible, name);
+ atk_object_set_description (accessible, gs_app_get_summary (app));
+ }
+}
+
+static void
+gs_summary_tile_init (GsSummaryTile *tile)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (tile), FALSE);
+ tile->preferred_width = -1;
+// gtk_image_clear (GTK_IMAGE (tile->image));
+ gtk_widget_init_template (GTK_WIDGET (tile));
+}
+
+static void
+gs_summary_tile_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsSummaryTile *app_tile = GS_SUMMARY_TILE (object);
+
+ switch (prop_id) {
+ case PROP_PREFERRED_WIDTH:
+ g_value_set_int (value, app_tile->preferred_width);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_summary_tile_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsSummaryTile *app_tile = GS_SUMMARY_TILE (object);
+
+ switch (prop_id) {
+ case PROP_PREFERRED_WIDTH:
+ app_tile->preferred_width = g_value_get_int (value);
+ gtk_widget_queue_resize (GTK_WIDGET (app_tile));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gs_summary_tile_dispose (GObject *object)
+{
+ GsSummaryTile *tile = GS_SUMMARY_TILE (object);
+
+ g_clear_object (&tile->tile_provider);
+
+ G_OBJECT_CLASS (gs_summary_tile_parent_class)->dispose (object);
+}
+
+static void
+gs_app_get_preferred_width (GtkWidget *widget,
+ gint *min, gint *nat)
+{
+ gint m;
+ GsSummaryTile *app_tile = GS_SUMMARY_TILE (widget);
+
+ if (app_tile->preferred_width < 0) {
+ /* Just retrieve the default values */
+ GTK_WIDGET_CLASS (gs_summary_tile_parent_class)->get_preferred_width (widget, min, nat);
+ return;
+ }
+
+ GTK_WIDGET_CLASS (gs_summary_tile_parent_class)->get_preferred_width (widget, &m, NULL);
+
+ if (min != NULL)
+ *min = m;
+ if (nat != NULL)
+ *nat = MAX (m, app_tile->preferred_width);
+}
+
+static void
+gs_summary_tile_class_init (GsSummaryTileClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GsAppTileClass *tile_class = GS_APP_TILE_CLASS (klass);
+
+ object_class->get_property = gs_summary_tile_get_property;
+ object_class->set_property = gs_summary_tile_set_property;
+ object_class->dispose = gs_summary_tile_dispose;
+
+ widget_class->get_preferred_width = gs_app_get_preferred_width;
+
+ tile_class->refresh = gs_summary_tile_refresh;
+
+ /**
+ * GsAppTile:preferred-width:
+ *
+ * The only purpose of this property is to be retrieved as the
+ * natural width by gtk_widget_get_preferred_width() fooling the
+ * parent #GtkFlowBox container and making it switch to more columns
+ * (children per row) if it is able to place n+1 children in a row
+ * having this specified width. If this value is less than a minimum
+ * width of this app tile then the minimum is returned instead. Set
+ * this property to -1 to turn off this feature and return the default
+ * natural width instead.
+ */
+ g_object_class_install_property (object_class, PROP_PREFERRED_WIDTH,
+ g_param_spec_int ("preferred-width",
+ "Preferred width",
+ "The preferred width of this widget, its only purpose is to trick the parent container",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE));
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-summary-tile.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsSummaryTile,
+ image);
+ gtk_widget_class_bind_template_child (widget_class, GsSummaryTile,
+ name);
+ gtk_widget_class_bind_template_child (widget_class, GsSummaryTile,
+ summary);
+ gtk_widget_class_bind_template_child (widget_class, GsSummaryTile,
+ eventbox);
+ gtk_widget_class_bind_template_child (widget_class, GsSummaryTile,
+ stack);
+}
+
+GtkWidget *
+gs_summary_tile_new (GsApp *cat)
+{
+ GsAppTile *tile = g_object_new (GS_TYPE_SUMMARY_TILE, NULL);
+ gs_app_tile_set_app (tile, cat);
+ return GTK_WIDGET (tile);
+}
diff --git a/src/gs-summary-tile.h b/src/gs-summary-tile.h
new file mode 100644
index 0000000..c9c16ef
--- /dev/null
+++ b/src/gs-summary-tile.h
@@ -0,0 +1,21 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-app-tile.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_SUMMARY_TILE (gs_summary_tile_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsSummaryTile, gs_summary_tile, GS, SUMMARY_TILE, GsAppTile)
+
+GtkWidget *gs_summary_tile_new (GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-summary-tile.ui b/src/gs-summary-tile.ui
new file mode 100644
index 0000000..a63bbd6
--- /dev/null
+++ b/src/gs-summary-tile.ui
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsSummaryTile" parent="GsAppTile">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <!-- This is the minimum (sic!) width of a tile when the GtkFlowBox parent container switches to 3 columns -->
+ <property name="preferred-width">270</property>
+ <style>
+ <class name="view"/>
+ <class name="tile"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage" id="waiting">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="name">waiting</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkOverlay" id="overlay">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <child type="overlay">
+ <object class="GtkEventBox" id="eventbox">
+ <property name="visible">False</property>
+ <property name="no_show_all">True</property>
+ <property name="visible_window">True</property>
+ <property name="halign">end</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkImage" id="installed-icon">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="margin-top">6</property>
+ <property name="margin-right">6</property>
+ <property name="icon-name">software-installed-symbolic</property>
+ <style>
+ <class name="installed-icon"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid">
+ <property name="visible">True</property>
+ <property name="margin-top">17</property>
+ <property name="margin-bottom">17</property>
+ <property name="margin-start">17</property>
+ <property name="margin-end">17</property>
+ <property name="row-spacing">1</property>
+ <property name="column-spacing">14</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="summary">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.0</property>
+ <property name="lines">2</property>
+ <property name="vexpand">True</property>
+ <property name="single-line-mode">True</property>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">content</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-third-party-repo-row.c b/src/gs-third-party-repo-row.c
new file mode 100644
index 0000000..e1da3fc
--- /dev/null
+++ b/src/gs-third-party-repo-row.c
@@ -0,0 +1,247 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-third-party-repo-row.h"
+
+#include "gs-progress-button.h"
+#include <glib/gi18n.h>
+
+typedef struct
+{
+ GsApp *app;
+
+ GtkWidget *button;
+ GtkWidget *comment_label;
+ GtkWidget *name_label;
+ guint refresh_idle_id;
+} GsThirdPartyRepoRowPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsThirdPartyRepoRow, gs_third_party_repo_row, GTK_TYPE_LIST_BOX_ROW)
+
+enum {
+ SIGNAL_BUTTON_CLICKED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+void
+gs_third_party_repo_row_set_name (GsThirdPartyRepoRow *row, const gchar *name)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+ gtk_label_set_text (GTK_LABEL (priv->name_label), name);
+}
+
+void
+gs_third_party_repo_row_set_comment (GsThirdPartyRepoRow *row, const gchar *comment)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+ gtk_label_set_markup (GTK_LABEL (priv->comment_label), comment);
+}
+
+static void
+refresh_ui (GsThirdPartyRepoRow *row)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+ GtkStyleContext *context;
+
+ if (priv->app == NULL)
+ return;
+
+ /* do a fill bar for the current progress */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_INSTALLING:
+ gs_progress_button_set_progress (GS_PROGRESS_BUTTON (priv->button),
+ gs_app_get_progress (priv->app));
+ gs_progress_button_set_show_progress (GS_PROGRESS_BUTTON (priv->button), TRUE);
+ break;
+ default:
+ gs_progress_button_set_show_progress (GS_PROGRESS_BUTTON (priv->button), FALSE);
+ break;
+ }
+
+ /* set button text */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_UNAVAILABLE:
+ /* TRANSLATORS: this is a button in the software repositories
+ dialog for installing a repo.
+ The ellipsis indicates that further steps are required */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("_Install…"));
+ /* enable button */
+ gtk_widget_set_sensitive (priv->button, TRUE);
+ break;
+ case AS_APP_STATE_AVAILABLE:
+ case AS_APP_STATE_AVAILABLE_LOCAL:
+ /* TRANSLATORS: this is a button in the software repositories
+ dialog for installing a repo */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("_Install"));
+ /* enable button */
+ gtk_widget_set_sensitive (priv->button, TRUE);
+ break;
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ /* TRANSLATORS: this is a button in the software repositories
+ dialog for removing multiple repos */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("_Remove All"));
+ /* enable button */
+ gtk_widget_set_sensitive (priv->button, TRUE);
+ break;
+ case AS_APP_STATE_INSTALLING:
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ that shows the status of a repo being installed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Installing"));
+ /* disable button */
+ gtk_widget_set_sensitive (priv->button, FALSE);
+ break;
+ case AS_APP_STATE_REMOVING:
+ /* TRANSLATORS: this is a button in the software repositories dialog
+ that shows the status of a repo being removed */
+ gtk_button_set_label (GTK_BUTTON (priv->button), _("Removing"));
+ /* disable button */
+ gtk_widget_set_sensitive (priv->button, FALSE);
+ break;
+ default:
+ break;
+ }
+
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ gtk_widget_set_visible (priv->button, FALSE);
+ break;
+ default:
+ gtk_widget_set_visible (priv->button, TRUE);
+ break;
+ }
+
+ context = gtk_widget_get_style_context (priv->button);
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_INSTALLED:
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ gtk_style_context_add_class (context, "destructive-action");
+ break;
+ default:
+ gtk_style_context_remove_class (context, "destructive-action");
+ break;
+ }
+}
+
+static gboolean
+refresh_idle (gpointer user_data)
+{
+ g_autoptr(GsThirdPartyRepoRow) row = (GsThirdPartyRepoRow *) user_data;
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+
+ refresh_ui (row);
+
+ priv->refresh_idle_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void
+app_state_changed_cb (GsApp *repo, GParamSpec *pspec, GsThirdPartyRepoRow *row)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+
+ if (priv->refresh_idle_id > 0)
+ return;
+ priv->refresh_idle_id = g_idle_add (refresh_idle, g_object_ref (row));
+}
+
+void
+gs_third_party_repo_row_set_app (GsThirdPartyRepoRow *row, GsApp *app)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+
+ if (priv->app != NULL)
+ g_signal_handlers_disconnect_by_func (priv->app, app_state_changed_cb, row);
+
+ g_set_object (&priv->app, app);
+ if (priv->app != NULL) {
+ g_signal_connect_object (priv->app, "notify::state",
+ G_CALLBACK (app_state_changed_cb),
+ row, 0);
+ g_signal_connect_object (priv->app, "notify::progress",
+ G_CALLBACK (app_state_changed_cb),
+ row, 0);
+ refresh_ui (row);
+ }
+}
+
+GsApp *
+gs_third_party_repo_row_get_app (GsThirdPartyRepoRow *row)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+ return priv->app;
+}
+
+static void
+button_clicked_cb (GtkWidget *widget, GsThirdPartyRepoRow *row)
+{
+ g_signal_emit (row, signals[SIGNAL_BUTTON_CLICKED], 0);
+}
+
+static void
+gs_third_party_repo_row_destroy (GtkWidget *object)
+{
+ GsThirdPartyRepoRow *row = GS_THIRD_PARTY_REPO_ROW (object);
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+
+ if (priv->app != NULL) {
+ g_signal_handlers_disconnect_by_func (priv->app, app_state_changed_cb, row);
+ g_clear_object (&priv->app);
+ }
+
+ if (priv->refresh_idle_id != 0) {
+ g_source_remove (priv->refresh_idle_id);
+ priv->refresh_idle_id = 0;
+ }
+
+ GTK_WIDGET_CLASS (gs_third_party_repo_row_parent_class)->destroy (object);
+}
+
+static void
+gs_third_party_repo_row_init (GsThirdPartyRepoRow *row)
+{
+ GsThirdPartyRepoRowPrivate *priv = gs_third_party_repo_row_get_instance_private (row);
+
+ gtk_widget_init_template (GTK_WIDGET (row));
+ g_signal_connect (priv->button, "clicked",
+ G_CALLBACK (button_clicked_cb), row);
+}
+
+static void
+gs_third_party_repo_row_class_init (GsThirdPartyRepoRowClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ widget_class->destroy = gs_third_party_repo_row_destroy;
+
+ signals [SIGNAL_BUTTON_CLICKED] =
+ g_signal_new ("button-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsThirdPartyRepoRowClass, button_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-third-party-repo-row.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsThirdPartyRepoRow, button);
+ gtk_widget_class_bind_template_child_private (widget_class, GsThirdPartyRepoRow, comment_label);
+ gtk_widget_class_bind_template_child_private (widget_class, GsThirdPartyRepoRow, name_label);
+}
+
+GtkWidget *
+gs_third_party_repo_row_new (void)
+{
+ return g_object_new (GS_TYPE_THIRD_PARTY_REPO_ROW, NULL);
+}
diff --git a/src/gs-third-party-repo-row.h b/src/gs-third-party-repo-row.h
new file mode 100644
index 0000000..91d1552
--- /dev/null
+++ b/src/gs-third-party-repo-row.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gnome-software-private.h"
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_THIRD_PARTY_REPO_ROW (gs_third_party_repo_row_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsThirdPartyRepoRow, gs_third_party_repo_row, GS, THIRD_PARTY_REPO_ROW, GtkListBoxRow)
+
+struct _GsThirdPartyRepoRowClass
+{
+ GtkListBoxRowClass parent_class;
+ void (*button_clicked) (GsThirdPartyRepoRow *row);
+};
+
+GtkWidget *gs_third_party_repo_row_new (void);
+void gs_third_party_repo_row_set_name (GsThirdPartyRepoRow *row,
+ const gchar *name);
+void gs_third_party_repo_row_set_comment (GsThirdPartyRepoRow *row,
+ const gchar *comment);
+void gs_third_party_repo_row_set_app (GsThirdPartyRepoRow *row,
+ GsApp *app);
+GsApp *gs_third_party_repo_row_get_app (GsThirdPartyRepoRow *row);
+
+G_END_DECLS
diff --git a/src/gs-third-party-repo-row.ui b/src/gs-third-party-repo-row.ui
new file mode 100644
index 0000000..68ba9b1
--- /dev/null
+++ b/src/gs-third-party-repo-row.ui
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsThirdPartyRepoRow" parent="GtkListBoxRow">
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="margin-top">18</property>
+ <property name="margin-bottom">18</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">18</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox" id="hbox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">end</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="comment_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GsProgressButton" id="button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="width_request">105</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-update-dialog.c b/src/gs-update-dialog.c
new file mode 100644
index 0000000..cd3c0b6
--- /dev/null
+++ b/src/gs-update-dialog.c
@@ -0,0 +1,842 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-update-dialog.h"
+#include "gs-app-row.h"
+#include "gs-update-list.h"
+#include "gs-common.h"
+
+typedef struct {
+ gchar *title;
+ gchar *stack_page;
+ GtkWidget *focus;
+} BackEntry;
+
+typedef enum {
+ GS_UPDATE_DIALOG_SECTION_ADDITIONS,
+ GS_UPDATE_DIALOG_SECTION_REMOVALS,
+ GS_UPDATE_DIALOG_SECTION_UPDATES,
+ GS_UPDATE_DIALOG_SECTION_DOWNGRADES,
+ GS_UPDATE_DIALOG_SECTION_LAST,
+} GsUpdateDialogSection;
+
+struct _GsUpdateDialog
+{
+ GtkDialog parent_instance;
+
+ GQueue *back_entry_stack;
+ GCancellable *cancellable;
+ GsPluginLoader *plugin_loader;
+ GtkWidget *box_header;
+ GtkWidget *button_back;
+ GtkWidget *image_icon;
+ GtkWidget *label_details;
+ GtkWidget *label_name;
+ GtkWidget *label_summary;
+ GtkWidget *list_boxes[GS_UPDATE_DIALOG_SECTION_LAST];
+ GtkWidget *list_box_installed_updates;
+ GtkWidget *os_update_description;
+ GtkWidget *os_update_box;
+ GtkWidget *scrolledwindow;
+ GtkWidget *scrolledwindow_details;
+ GtkWidget *spinner;
+ GtkWidget *stack;
+ GtkWidget *permissions_section_box;
+ GtkWidget *permissions_section_content;
+};
+
+G_DEFINE_TYPE (GsUpdateDialog, gs_update_dialog, GTK_TYPE_DIALOG)
+
+static void
+save_back_entry (GsUpdateDialog *dialog)
+{
+ BackEntry *entry;
+
+ entry = g_slice_new0 (BackEntry);
+ entry->stack_page = g_strdup (gtk_stack_get_visible_child_name (GTK_STACK (dialog->stack)));
+ entry->title = g_strdup (gtk_window_get_title (GTK_WINDOW (dialog)));
+
+ entry->focus = gtk_window_get_focus (GTK_WINDOW (dialog));
+ if (entry->focus != NULL)
+ g_object_add_weak_pointer (G_OBJECT (entry->focus),
+ (gpointer *) &entry->focus);
+
+ g_queue_push_head (dialog->back_entry_stack, entry);
+}
+
+static void
+back_entry_free (BackEntry *entry)
+{
+ if (entry->focus != NULL)
+ g_object_remove_weak_pointer (G_OBJECT (entry->focus),
+ (gpointer *) &entry->focus);
+ g_free (entry->stack_page);
+ g_free (entry->title);
+ g_slice_free (BackEntry, entry);
+}
+
+static struct {
+ GsAppPermissions permission;
+ const char *title;
+ const char *subtitle;
+} permission_display_data[] = {
+ { GS_APP_PERMISSIONS_NETWORK, N_("Network"), N_("Can communicate over the network") },
+ { GS_APP_PERMISSIONS_SYSTEM_BUS, N_("System Services"), N_("Can access D-Bus services on the system bus") },
+ { GS_APP_PERMISSIONS_SESSION_BUS, N_("Session Services"), N_("Can access D-Bus services on the session bus") },
+ { GS_APP_PERMISSIONS_DEVICES, N_("Devices"), N_("Can access system device files") },
+ { GS_APP_PERMISSIONS_HOME_FULL, N_("Home folder"), N_("Can view, edit and create files") },
+ { GS_APP_PERMISSIONS_HOME_READ, N_("Home folder"), N_("Can view files") },
+ { GS_APP_PERMISSIONS_FILESYSTEM_FULL, N_("File system"), N_("Can view, edit and create files") },
+ { GS_APP_PERMISSIONS_FILESYSTEM_READ, N_("File system"), N_("Can view files") },
+ { GS_APP_PERMISSIONS_DOWNLOADS_FULL, N_("Downloads folder"), N_("Can view, edit and create files") },
+ { GS_APP_PERMISSIONS_DOWNLOADS_READ, N_("Downloads folder"), N_("Can view files") },
+ { GS_APP_PERMISSIONS_SETTINGS, N_("Settings"), N_("Can view and change any settings") },
+ { GS_APP_PERMISSIONS_X11, N_("Legacy display system"), N_("Uses an old, insecure display system") },
+ { GS_APP_PERMISSIONS_ESCAPE_SANDBOX, N_("Sandbox escape"), N_("Can escape the sandbox and circumvent any other restrictions") },
+};
+
+static void
+populate_permissions_section (GsUpdateDialog *dialog, GsAppPermissions permissions)
+{
+ GList *children;
+
+ children = gtk_container_get_children (GTK_CONTAINER (dialog->permissions_section_content));
+ for (GList *l = children; l != NULL; l = l->next)
+ gtk_widget_destroy (GTK_WIDGET (l->data));
+ g_list_free (children);
+
+ for (gsize i = 0; i < G_N_ELEMENTS (permission_display_data); i++) {
+ GtkWidget *row, *image, *box, *label;
+
+ if ((permissions & permission_display_data[i].permission) == 0)
+ continue;
+
+ row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+ gtk_widget_show (row);
+ if ((permission_display_data[i].permission & ~MEDIUM_PERMISSIONS) != 0) {
+ gtk_style_context_add_class (gtk_widget_get_style_context (row), "permission-row-warning");
+ }
+
+ image = gtk_image_new_from_icon_name ("dialog-warning-symbolic", GTK_ICON_SIZE_MENU);
+ if ((permission_display_data[i].permission & ~MEDIUM_PERMISSIONS) == 0)
+ gtk_widget_set_opacity (image, 0);
+
+ gtk_widget_show (image);
+ gtk_container_add (GTK_CONTAINER (row), image);
+
+ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_widget_show (box);
+ gtk_container_add (GTK_CONTAINER (row), box);
+
+ label = gtk_label_new (_(permission_display_data[i].title));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (box), label);
+
+ label = gtk_label_new (_(permission_display_data[i].subtitle));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label");
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (box), label);
+
+ gtk_container_add (GTK_CONTAINER (dialog->permissions_section_content), row);
+ }
+}
+
+static void
+set_updates_description_ui (GsUpdateDialog *dialog, GsApp *app)
+{
+ AsAppKind kind;
+ const GdkPixbuf *pixbuf;
+ const gchar *update_details;
+
+ /* set window title */
+ kind = gs_app_get_kind (app);
+ if (kind == AS_APP_KIND_OS_UPDATE) {
+ gtk_window_set_title (GTK_WINDOW (dialog), gs_app_get_name (app));
+ } else if (gs_app_get_source_default (app) != NULL &&
+ gs_app_get_update_version (app) != NULL) {
+ g_autofree gchar *tmp = NULL;
+ tmp = g_strdup_printf ("%s %s",
+ gs_app_get_source_default (app),
+ gs_app_get_update_version (app));
+ gtk_window_set_title (GTK_WINDOW (dialog), tmp);
+ } else if (gs_app_get_source_default (app) != NULL) {
+ gtk_window_set_title (GTK_WINDOW (dialog),
+ gs_app_get_source_default (app));
+ } else {
+ gtk_window_set_title (GTK_WINDOW (dialog),
+ gs_app_get_update_version (app));
+ }
+
+ /* set update header */
+ gtk_widget_set_visible (dialog->box_header, kind == AS_APP_KIND_DESKTOP);
+ update_details = gs_app_get_update_details (app);
+ if (update_details == NULL) {
+ /* TRANSLATORS: this is where the packager did not write
+ * a description for the update */
+ update_details = _("No update description available.");
+ }
+ gtk_label_set_label (GTK_LABEL (dialog->label_details), update_details);
+ gtk_label_set_label (GTK_LABEL (dialog->label_name), gs_app_get_name (app));
+ gtk_label_set_label (GTK_LABEL (dialog->label_summary), gs_app_get_summary (app));
+
+ pixbuf = gs_app_get_pixbuf (app);
+ if (pixbuf != NULL)
+ gs_image_set_from_pixbuf (GTK_IMAGE (dialog->image_icon), pixbuf);
+
+ /* show the back button if needed */
+ gtk_widget_set_visible (dialog->button_back, !g_queue_is_empty (dialog->back_entry_stack));
+
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEW_PERMISSIONS)) {
+ gtk_widget_show (dialog->permissions_section_box);
+ populate_permissions_section (dialog, gs_app_get_update_permissions (app));
+ } else {
+ gtk_widget_hide (dialog->permissions_section_box);
+ }
+}
+
+static void
+row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ GsUpdateDialog *dialog)
+{
+ GsApp *app;
+
+ app = GS_APP (g_object_get_data (G_OBJECT (gtk_bin_get_child (GTK_BIN (row))), "app"));
+
+ /* save the current stack state for the back button */
+ save_back_entry (dialog);
+
+ /* setup package view */
+ gs_update_dialog_show_update_details (dialog, app);
+}
+
+static void
+installed_updates_row_activated_cb (GtkListBox *list_box,
+ GtkListBoxRow *row,
+ GsUpdateDialog *dialog)
+{
+ GsApp *app;
+
+ app = gs_app_row_get_app (GS_APP_ROW (row));
+
+ /* save the current stack state for the back button */
+ save_back_entry (dialog);
+
+ gs_update_dialog_show_update_details (dialog, app);
+}
+
+static void
+get_installed_updates_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsUpdateDialog *dialog)
+{
+ guint i;
+ guint64 install_date;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* get the results */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+
+ /* if we're in teardown, short-circuit and return immediately without
+ * dereferencing priv variables */
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) ||
+ dialog->spinner == NULL) {
+ g_debug ("get installed updates cancelled");
+ return;
+ }
+
+ gs_stop_spinner (GTK_SPINNER (dialog->spinner));
+
+ /* error */
+ if (list == NULL) {
+ g_warning ("failed to get installed updates: %s", error->message);
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "empty");
+ return;
+ }
+
+ /* no results */
+ if (gs_app_list_length (list) == 0) {
+ g_debug ("no installed updates to show");
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "empty");
+ return;
+ }
+
+ /* set the header title using any one of the applications */
+ install_date = gs_app_get_install_date (gs_app_list_index (list, 0));
+ if (install_date > 0) {
+ GtkWidget *header;
+ g_autoptr(GDateTime) date = NULL;
+ g_autofree gchar *date_str = NULL;
+ g_autofree gchar *subtitle = NULL;
+
+ date = g_date_time_new_from_unix_utc ((gint64) install_date);
+ date_str = g_date_time_format (date, "%x");
+
+ /* TRANSLATORS: this is the subtitle of the installed updates dialog window.
+ %s will be replaced by the date when the updates were installed.
+ The date format is defined by the locale's preferred date representation
+ ("%x" in strftime.) */
+ subtitle = g_strdup_printf (_("Installed on %s"), date_str);
+ header = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
+ gtk_header_bar_set_subtitle (GTK_HEADER_BAR (header), subtitle);
+ }
+
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "installed-updates-list");
+
+ gs_container_remove_all (GTK_CONTAINER (dialog->list_box_installed_updates));
+ for (i = 0; i < gs_app_list_length (list); i++) {
+ gs_update_list_add_app (GS_UPDATE_LIST (dialog->list_box_installed_updates),
+ gs_app_list_index (list, i));
+ }
+}
+
+void
+gs_update_dialog_show_installed_updates (GsUpdateDialog *dialog)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* TRANSLATORS: this is the title of the installed updates dialog window */
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Installed Updates"));
+
+ gtk_widget_set_visible (dialog->button_back, !g_queue_is_empty (dialog->back_entry_stack));
+ gs_start_spinner (GTK_SPINNER (dialog->spinner));
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "spinner");
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION,
+ NULL);
+ gs_plugin_loader_job_process_async (dialog->plugin_loader, plugin_job,
+ dialog->cancellable,
+ (GAsyncReadyCallback) get_installed_updates_cb,
+ dialog);
+}
+
+static void
+unset_focus (GtkWidget *widget)
+{
+ GtkWidget *focus;
+
+ focus = gtk_window_get_focus (GTK_WINDOW (widget));
+ if (GTK_IS_LABEL (focus))
+ gtk_label_select_region (GTK_LABEL (focus), 0, 0);
+ gtk_window_set_focus (GTK_WINDOW (widget), NULL);
+}
+
+static gchar *
+format_version_update (GsApp *app)
+{
+ const gchar *tmp;
+ const gchar *version_current = NULL;
+ const gchar *version_update = NULL;
+
+ /* current version */
+ tmp = gs_app_get_version (app);
+ if (tmp != NULL && tmp[0] != '\0')
+ version_current = tmp;
+
+ /* update version */
+ tmp = gs_app_get_update_version (app);
+ if (tmp != NULL && tmp[0] != '\0')
+ version_update = tmp;
+
+ /* have both */
+ if (version_current != NULL && version_update != NULL &&
+ g_strcmp0 (version_current, version_update) != 0) {
+ return g_strdup_printf ("%s → %s",
+ version_current,
+ version_update);
+ }
+
+ /* just update */
+ if (version_update)
+ return g_strdup (version_update);
+
+ /* we have nothing, nada, zilch */
+ return NULL;
+}
+
+static GtkWidget *
+create_app_row (GsApp *app)
+{
+ GtkWidget *row, *label;
+
+ row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+ g_object_set_data_full (G_OBJECT (row),
+ "app",
+ g_object_ref (app),
+ g_object_unref);
+ label = gtk_label_new (gs_app_get_source_default (app));
+ g_object_set (label,
+ "margin-start", 20,
+ "margin-end", 0,
+ "margin-top", 6,
+ "margin-bottom", 6,
+ "xalign", 0.0,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_hexpand (label, TRUE);
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (row), label);
+ if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE ||
+ gs_app_get_state (app) == AS_APP_STATE_UPDATABLE_LIVE) {
+ g_autofree gchar *verstr = format_version_update (app);
+ label = gtk_label_new (verstr);
+ } else {
+ label = gtk_label_new (gs_app_get_version (app));
+ }
+ g_object_set (label,
+ "margin-start", 0,
+ "margin-end", 20,
+ "margin-top", 6,
+ "margin-bottom", 6,
+ "xalign", 1.0,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+ gtk_widget_set_halign (label, GTK_ALIGN_END);
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (row), label);
+ gtk_widget_show_all (row);
+
+ return row;
+}
+
+static gboolean
+is_downgrade (const gchar *evr1,
+ const gchar *evr2)
+{
+ gint rc;
+ g_autofree gchar *epoch1 = NULL;
+ g_autofree gchar *epoch2 = NULL;
+ g_autofree gchar *version1 = NULL;
+ g_autofree gchar *version2 = NULL;
+ g_autofree gchar *release1 = NULL;
+ g_autofree gchar *release2 = NULL;
+
+ if (evr1 == NULL || evr2 == NULL)
+ return FALSE;
+
+ /* split into epoch-version-release */
+ if (!gs_utils_parse_evr (evr1, &epoch1, &version1, &release1))
+ return FALSE;
+ if (!gs_utils_parse_evr (evr2, &epoch2, &version2, &release2))
+ return FALSE;
+
+ /* ignore epoch here as it's a way to make downgrades happen and not
+ * part of the semantic version */
+
+ /* check version */
+#if AS_CHECK_VERSION(0,7,15)
+ rc = as_utils_vercmp_full (version1, version2,
+ AS_VERSION_COMPARE_FLAG_NONE);
+#else
+ rc = as_utils_vercmp (version1, version2);
+#endif
+ if (rc != 0)
+ return rc > 0;
+
+ /* check release */
+#if AS_CHECK_VERSION(0,7,15)
+ rc = as_utils_vercmp_full (version1, version2,
+ AS_VERSION_COMPARE_FLAG_NONE);
+#else
+ rc = as_utils_vercmp (release1, release2);
+#endif
+ if (rc != 0)
+ return rc > 0;
+
+ return FALSE;
+}
+
+static GsUpdateDialogSection
+get_app_section (GsApp *app)
+{
+ GsUpdateDialogSection section;
+
+ /* Sections:
+ * 1. additions
+ * 2. removals
+ * 3. updates
+ * 4. downgrades */
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_AVAILABLE:
+ section = GS_UPDATE_DIALOG_SECTION_ADDITIONS;
+ break;
+ case AS_APP_STATE_UNAVAILABLE:
+ section = GS_UPDATE_DIALOG_SECTION_REMOVALS;
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ case AS_APP_STATE_UPDATABLE_LIVE:
+ if (is_downgrade (gs_app_get_version (app),
+ gs_app_get_update_version (app)))
+ section = GS_UPDATE_DIALOG_SECTION_DOWNGRADES;
+ else
+ section = GS_UPDATE_DIALOG_SECTION_UPDATES;
+ break;
+ default:
+ g_warning ("get_app_section: unhandled state %s for %s",
+ as_app_state_to_string (gs_app_get_state (app)),
+ gs_app_get_unique_id (app));
+ section = GS_UPDATE_DIALOG_SECTION_UPDATES;
+ break;
+ }
+
+ return section;
+}
+
+static gint
+os_updates_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GObject *o1 = G_OBJECT (gtk_bin_get_child (GTK_BIN (a)));
+ GObject *o2 = G_OBJECT (gtk_bin_get_child (GTK_BIN (b)));
+ GsApp *a1 = g_object_get_data (o1, "app");
+ GsApp *a2 = g_object_get_data (o2, "app");
+ const gchar *key1 = gs_app_get_source_default (a1);
+ const gchar *key2 = gs_app_get_source_default (a2);
+
+ return g_strcmp0 (key1, key2);
+}
+
+static GtkWidget *
+get_section_header (GsUpdateDialog *dialog, GsUpdateDialogSection section)
+{
+ GtkStyleContext *context;
+ GtkWidget *header;
+ GtkWidget *label;
+
+ /* get labels and buttons for everything */
+ if (section == GS_UPDATE_DIALOG_SECTION_ADDITIONS) {
+ /* TRANSLATORS: This is the header for package additions during
+ * a system update */
+ label = gtk_label_new (_("Additions"));
+ } else if (section == GS_UPDATE_DIALOG_SECTION_REMOVALS) {
+ /* TRANSLATORS: This is the header for package removals during
+ * a system update */
+ label = gtk_label_new (_("Removals"));
+ } else if (section == GS_UPDATE_DIALOG_SECTION_UPDATES) {
+ /* TRANSLATORS: This is the header for package updates during
+ * a system update */
+ label = gtk_label_new (_("Updates"));
+ } else if (section == GS_UPDATE_DIALOG_SECTION_DOWNGRADES) {
+ /* TRANSLATORS: This is the header for package downgrades during
+ * a system update */
+ label = gtk_label_new (_("Downgrades"));
+ } else {
+ g_assert_not_reached ();
+ }
+
+ /* create header */
+ header = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
+ context = gtk_widget_get_style_context (header);
+ gtk_style_context_add_class (context, "app-listbox-header");
+
+ /* put label into the header */
+ gtk_widget_set_hexpand (label, TRUE);
+ gtk_container_add (GTK_CONTAINER (header), label);
+ gtk_widget_set_visible (label, TRUE);
+ gtk_widget_set_margin_start (label, 6);
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ context = gtk_widget_get_style_context (label);
+ gtk_style_context_add_class (context, "app-listbox-header-title");
+
+ /* success */
+ return header;
+}
+
+static void
+list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GsUpdateDialog *dialog = (GsUpdateDialog *) user_data;
+ GObject *o = G_OBJECT (gtk_bin_get_child (GTK_BIN (row)));
+ GsApp *app = g_object_get_data (o, "app");
+ GtkWidget *header = NULL;
+
+ if (before == NULL)
+ header = get_section_header (dialog, get_app_section (app));
+ else
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static void
+create_section (GsUpdateDialog *dialog, GsUpdateDialogSection section)
+{
+ GtkStyleContext *context;
+
+ dialog->list_boxes[section] = gtk_list_box_new ();
+ gtk_list_box_set_selection_mode (GTK_LIST_BOX (dialog->list_boxes[section]),
+ GTK_SELECTION_NONE);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (dialog->list_boxes[section]),
+ os_updates_sort_func,
+ dialog, NULL);
+ gtk_list_box_set_header_func (GTK_LIST_BOX (dialog->list_boxes[section]),
+ list_header_func,
+ dialog, NULL);
+ g_signal_connect (GTK_LIST_BOX (dialog->list_boxes[section]), "row-activated",
+ G_CALLBACK (row_activated_cb), dialog);
+ gtk_widget_set_visible (dialog->list_boxes[section], TRUE);
+ gtk_widget_set_vexpand (dialog->list_boxes[section], TRUE);
+ gtk_container_add (GTK_CONTAINER (dialog->os_update_box), dialog->list_boxes[section]);
+ gtk_widget_set_margin_top (dialog->list_boxes[section], 24);
+
+ /* reorder the children */
+ for (guint i = 0; i < GS_UPDATE_DIALOG_SECTION_LAST; i++) {
+ if (dialog->list_boxes[i] == NULL)
+ continue;
+ gtk_box_reorder_child (GTK_BOX (dialog->os_update_box),
+ dialog->list_boxes[i], i);
+ }
+
+ /* make rounded edges */
+ context = gtk_widget_get_style_context (dialog->list_boxes[section]);
+ gtk_style_context_add_class (context, "app-updates-section");
+}
+
+void
+gs_update_dialog_show_update_details (GsUpdateDialog *dialog, GsApp *app)
+{
+ AsAppKind kind;
+ g_autofree gchar *str = NULL;
+
+ /* debug */
+ str = gs_app_to_string (app);
+ g_debug ("%s", str);
+
+ /* set update header */
+ set_updates_description_ui (dialog, app);
+
+ /* workaround a gtk+ issue where the dialog comes up with a label selected,
+ * https://bugzilla.gnome.org/show_bug.cgi?id=734033 */
+ unset_focus (GTK_WIDGET (dialog));
+
+ /* set update description */
+ kind = gs_app_get_kind (app);
+ if (kind == AS_APP_KIND_OS_UPDATE) {
+ GsAppList *related;
+ GsApp *app_related;
+ GsUpdateDialogSection section;
+ GtkWidget *row;
+
+ gtk_label_set_text (GTK_LABEL (dialog->os_update_description),
+ gs_app_get_description (app));
+
+ /* clear existing data */
+ for (guint i = 0; i < GS_UPDATE_DIALOG_SECTION_LAST; i++) {
+ if (dialog->list_boxes[i] == NULL)
+ continue;
+ gs_container_remove_all (GTK_CONTAINER (dialog->list_boxes[i]));
+ }
+
+ /* add new apps */
+ related = gs_app_get_related (app);
+ for (guint i = 0; i < gs_app_list_length (related); i++) {
+ app_related = gs_app_list_index (related, i);
+
+ section = get_app_section (app_related);
+ if (dialog->list_boxes[section] == NULL)
+ create_section (dialog, section);
+
+ row = create_app_row (app_related);
+ gtk_list_box_insert (GTK_LIST_BOX (dialog->list_boxes[section]), row, -1);
+ }
+ gtk_stack_set_transition_type (GTK_STACK (dialog->stack), GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT);
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "os-update-list");
+ gtk_stack_set_transition_type (GTK_STACK (dialog->stack), GTK_STACK_TRANSITION_TYPE_NONE);
+ } else {
+ gtk_stack_set_transition_type (GTK_STACK (dialog->stack), GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT);
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), "package-details");
+ gtk_stack_set_transition_type (GTK_STACK (dialog->stack), GTK_STACK_TRANSITION_TYPE_NONE);
+ }
+}
+
+static void
+button_back_cb (GtkWidget *widget, GsUpdateDialog *dialog)
+{
+ BackEntry *entry;
+
+ /* return to the previous view */
+ entry = g_queue_pop_head (dialog->back_entry_stack);
+
+ gtk_stack_set_transition_type (GTK_STACK (dialog->stack), GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT);
+ gtk_stack_set_visible_child_name (GTK_STACK (dialog->stack), entry->stack_page);
+ gtk_stack_set_transition_type (GTK_STACK (dialog->stack), GTK_STACK_TRANSITION_TYPE_NONE);
+
+ gtk_window_set_title (GTK_WINDOW (dialog), entry->title);
+ if (entry->focus)
+ gtk_widget_grab_focus (entry->focus);
+ back_entry_free (entry);
+
+ gtk_widget_set_visible (dialog->button_back, !g_queue_is_empty (dialog->back_entry_stack));
+}
+
+static void
+scrollbar_mapped_cb (GtkWidget *sb, GtkScrolledWindow *swin)
+{
+ GtkWidget *frame;
+
+ frame = gtk_bin_get_child (GTK_BIN (gtk_bin_get_child (GTK_BIN (swin))));
+
+ if (gtk_widget_get_mapped (GTK_WIDGET (sb))) {
+ gtk_scrolled_window_set_shadow_type (swin, GTK_SHADOW_IN);
+ if (GTK_IS_FRAME (frame))
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+ } else {
+ if (GTK_IS_FRAME (frame))
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_scrolled_window_set_shadow_type (swin, GTK_SHADOW_NONE);
+ }
+}
+
+static gboolean
+key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+ GsUpdateDialog *dialog = (GsUpdateDialog *) widget;
+ GdkKeymap *keymap;
+ GdkModifierType state;
+ gboolean is_rtl;
+
+ if (!gtk_widget_is_visible (dialog->button_back) || !gtk_widget_is_sensitive (dialog->button_back))
+ return GDK_EVENT_PROPAGATE;
+
+ state = event->state;
+ keymap = gdk_keymap_get_for_display (gtk_widget_get_display (widget));
+ gdk_keymap_add_virtual_modifiers (keymap, &state);
+ state = state & gtk_accelerator_get_default_mod_mask ();
+ is_rtl = gtk_widget_get_direction (dialog->button_back) == GTK_TEXT_DIR_RTL;
+
+ if ((!is_rtl && state == GDK_MOD1_MASK && event->keyval == GDK_KEY_Left) ||
+ (is_rtl && state == GDK_MOD1_MASK && event->keyval == GDK_KEY_Right) ||
+ event->keyval == GDK_KEY_Back) {
+ gtk_widget_activate (dialog->button_back);
+ return GDK_EVENT_STOP;
+ }
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
+button_press_event (GsUpdateDialog *dialog, GdkEventButton *event)
+{
+ /* Mouse hardware back button is 8 */
+ if (event->button != 8)
+ return GDK_EVENT_PROPAGATE;
+
+ if (!gtk_widget_is_visible (dialog->button_back) || !gtk_widget_is_sensitive (dialog->button_back))
+ return GDK_EVENT_PROPAGATE;
+
+ gtk_widget_activate (dialog->button_back);
+ return GDK_EVENT_STOP;
+}
+
+static void
+set_plugin_loader (GsUpdateDialog *dialog, GsPluginLoader *plugin_loader)
+{
+ dialog->plugin_loader = g_object_ref (plugin_loader);
+}
+
+static void
+gs_update_dialog_dispose (GObject *object)
+{
+ GsUpdateDialog *dialog = GS_UPDATE_DIALOG (object);
+
+ if (dialog->back_entry_stack != NULL) {
+ g_queue_free_full (dialog->back_entry_stack, (GDestroyNotify) back_entry_free);
+ dialog->back_entry_stack = NULL;
+ }
+
+ g_cancellable_cancel (dialog->cancellable);
+ g_clear_object (&dialog->cancellable);
+
+ g_clear_object (&dialog->plugin_loader);
+
+ G_OBJECT_CLASS (gs_update_dialog_parent_class)->dispose (object);
+}
+
+static void
+gs_update_dialog_init (GsUpdateDialog *dialog)
+{
+ GtkWidget *scrollbar;
+
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+
+ dialog->back_entry_stack = g_queue_new ();
+ dialog->cancellable = g_cancellable_new ();
+
+ g_signal_connect (GTK_LIST_BOX (dialog->list_box_installed_updates), "row-activated",
+ G_CALLBACK (installed_updates_row_activated_cb), dialog);
+
+ g_signal_connect (dialog->button_back, "clicked",
+ G_CALLBACK (button_back_cb),
+ dialog);
+
+ g_signal_connect_after (dialog, "show", G_CALLBACK (unset_focus), NULL);
+
+ scrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (dialog->scrolledwindow_details));
+ g_signal_connect (scrollbar, "map", G_CALLBACK (scrollbar_mapped_cb), dialog->scrolledwindow_details);
+ g_signal_connect (scrollbar, "unmap", G_CALLBACK (scrollbar_mapped_cb), dialog->scrolledwindow_details);
+
+ /* global keynav and mouse back button */
+ g_signal_connect (dialog, "key-press-event",
+ G_CALLBACK (key_press_event), NULL);
+ g_signal_connect (dialog, "button-press-event",
+ G_CALLBACK (button_press_event), NULL);
+}
+
+static void
+gs_update_dialog_class_init (GsUpdateDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_update_dialog_dispose;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-update-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, box_header);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, button_back);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, image_icon);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, label_details);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, label_name);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, label_summary);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, list_box_installed_updates);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, os_update_description);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, os_update_box);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, scrolledwindow);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, scrolledwindow_details);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, spinner);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, stack);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, permissions_section_box);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdateDialog, permissions_section_content);
+}
+
+GtkWidget *
+gs_update_dialog_new (GsPluginLoader *plugin_loader)
+{
+ GsUpdateDialog *dialog;
+
+ dialog = g_object_new (GS_TYPE_UPDATE_DIALOG,
+ "use-header-bar", TRUE,
+ NULL);
+ set_plugin_loader (dialog, plugin_loader);
+
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-update-dialog.h b/src/gs-update-dialog.h
new file mode 100644
index 0000000..0008baa
--- /dev/null
+++ b/src/gs-update-dialog.h
@@ -0,0 +1,27 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_UPDATE_DIALOG (gs_update_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsUpdateDialog, gs_update_dialog, GS, UPDATE_DIALOG, GtkDialog)
+
+GtkWidget *gs_update_dialog_new (GsPluginLoader *plugin_loader);
+void gs_update_dialog_show_installed_updates (GsUpdateDialog *dialog);
+void gs_update_dialog_show_update_details (GsUpdateDialog *dialog,
+ GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-update-dialog.ui b/src/gs-update-dialog.ui
new file mode 100644
index 0000000..a83b026
--- /dev/null
+++ b/src/gs-update-dialog.ui
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsUpdateDialog" parent="GtkDialog">
+ <property name="modal">True</property>
+ <property name="default_width">600</property>
+ <property name="default_height">600</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <child>
+ <object class="GtkButton" id="button_back">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button_back_accessible">
+ <property name="accessible-name" translatable="yes">Go back</property>
+ </object>
+ </child>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_update_back">
+ <property name="visible">True</property>
+ <property name="icon_name">go-previous-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="border_width">0</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="transition_duration">300</property>
+ <child>
+ <object class="GtkBox" id="box_spinner">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_empty">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="spacing">16</property>
+ <property name="orientation">vertical</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="icon_empty">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="pixel-size">64</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_empty">
+ <property name="visible">True</property>
+ <property name="justify">center</property>
+ <property name="label" translatable="yes">No updates have been installed on this system.</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">40</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">empty</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box7">
+ <property name="visible">True</property>
+ <property name="margin_start">6</property>
+ <property name="margin_end">6</property>
+ <property name="margin_top">6</property>
+ <property name="margin_bottom">9</property>
+ <property name="border_width">5</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkBox" id="box_header">
+ <property name="visible">True</property>
+ <property name="spacing">9</property>
+ <child>
+ <object class="GtkImage" id="image_icon">
+ <property name="visible">True</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">application-x-executable</property>
+ <property name="icon_size">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box9">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkLabel" id="label_name">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label">Inkscape</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">50</property>
+ <property name="width_chars">50</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.3999999999999999"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_summary">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label">Vector based drawing program</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">50</property>
+ <property name="width_chars">50</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="permissions_section_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">18</property>
+ <child>
+ <object class="GtkLabel" id="permissions_section_title">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="halign">start</property>
+ <property name="margin_bottom">6</property>
+ <property name="label" translatable="yes">Requires additional permissions</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="permissions_section_content">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">18</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_details">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkLabel" id="label_details">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="margin">6</property>
+ <property name="label">New in kmod 14-1
+* Moo
+* bar</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">package-details</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin_top">24</property>
+ <property name="margin_bottom">18</property>
+ <property name="margin_start">18</property>
+ <property name="margin_end">18</property>
+ <child>
+ <object class="GtkLabel" id="os_update_description">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="os_update_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="vexpand">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">os-update-list</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_installed_updates">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkFrame" id="frame_installed_updates">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GsUpdateList" id="list_box_installed_updates">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">installed-updates-list</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkSizeGroup" id="sizegroup_update_details">
+ <property name="ignore-hidden">False</property>
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="scrolledwindow"/>
+ <widget name="scrolledwindow_details"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/gs-update-list.c b/src/gs-update-list.c
new file mode 100644
index 0000000..5122329
--- /dev/null
+++ b/src/gs-update-list.c
@@ -0,0 +1,120 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "gs-update-list.h"
+
+#include "gs-app-row.h"
+#include "gs-common.h"
+
+typedef struct
+{
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+} GsUpdateListPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsUpdateList, gs_update_list, GTK_TYPE_LIST_BOX)
+
+static void
+gs_update_list_app_state_notify_cb (GsApp *app, GParamSpec *pspec, gpointer user_data)
+{
+ if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+ GsAppRow *app_row = GS_APP_ROW (user_data);
+ gs_app_row_unreveal (app_row);
+ }
+}
+
+void
+gs_update_list_add_app (GsUpdateList *update_list, GsApp *app)
+{
+ GsUpdateListPrivate *priv = gs_update_list_get_instance_private (update_list);
+ GtkWidget *app_row;
+
+ app_row = gs_app_row_new (app);
+ gs_app_row_set_show_update (GS_APP_ROW (app_row), FALSE);
+ gs_app_row_set_show_buttons (GS_APP_ROW (app_row), FALSE);
+ gtk_container_add (GTK_CONTAINER (update_list), app_row);
+ gs_app_row_set_size_groups (GS_APP_ROW (app_row),
+ priv->sizegroup_image,
+ priv->sizegroup_name,
+ priv->sizegroup_desc,
+ NULL);
+ g_signal_connect_object (app, "notify::state",
+ G_CALLBACK (gs_update_list_app_state_notify_cb),
+ app_row, 0);
+ gtk_widget_show (app_row);
+}
+
+static void
+list_header_func (GtkListBoxRow *row,
+ GtkListBoxRow *before,
+ gpointer user_data)
+{
+ GtkWidget *header;
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_list_box_row_set_header (row, header);
+}
+
+static gint
+list_sort_func (GtkListBoxRow *a,
+ GtkListBoxRow *b,
+ gpointer user_data)
+{
+ GsApp *a1 = gs_app_row_get_app (GS_APP_ROW (a));
+ GsApp *b1 = gs_app_row_get_app (GS_APP_ROW (b));
+ return g_strcmp0 (gs_app_get_name (a1), gs_app_get_name (b1));
+}
+
+static void
+gs_update_list_dispose (GObject *object)
+{
+ GsUpdateList *update_list = GS_UPDATE_LIST (object);
+ GsUpdateListPrivate *priv = gs_update_list_get_instance_private (update_list);
+
+ g_clear_object (&priv->sizegroup_image);
+ g_clear_object (&priv->sizegroup_name);
+ g_clear_object (&priv->sizegroup_desc);
+
+ G_OBJECT_CLASS (gs_update_list_parent_class)->dispose (object);
+}
+
+static void
+gs_update_list_init (GsUpdateList *update_list)
+{
+ GsUpdateListPrivate *priv = gs_update_list_get_instance_private (update_list);
+ priv->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ priv->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ priv->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (update_list),
+ list_header_func,
+ update_list, NULL);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (update_list),
+ list_sort_func,
+ update_list, NULL);
+}
+
+static void
+gs_update_list_class_init (GsUpdateListClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = gs_update_list_dispose;
+}
+
+GtkWidget *
+gs_update_list_new (void)
+{
+ GsUpdateList *update_list;
+ update_list = g_object_new (GS_TYPE_UPDATE_LIST, NULL);
+ return GTK_WIDGET (update_list);
+}
diff --git a/src/gs-update-list.h b/src/gs-update-list.h
new file mode 100644
index 0000000..731b412
--- /dev/null
+++ b/src/gs-update-list.h
@@ -0,0 +1,31 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_UPDATE_LIST (gs_update_list_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsUpdateList, gs_update_list, GS, UPDATE_LIST, GtkListBox)
+
+struct _GsUpdateListClass
+{
+ GtkListBoxClass parent_class;
+};
+
+GtkWidget *gs_update_list_new (void);
+void gs_update_list_add_app (GsUpdateList *update_list,
+ GsApp *app);
+
+G_END_DECLS
diff --git a/src/gs-update-monitor.c b/src/gs-update-monitor.c
new file mode 100644
index 0000000..296a512
--- /dev/null
+++ b/src/gs-update-monitor.c
@@ -0,0 +1,1271 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+#include <gsettings-desktop-schemas/gdesktop-enums.h>
+
+#include "gs-update-monitor.h"
+#include "gs-common.h"
+
+#define SECONDS_IN_AN_HOUR (60 * 60)
+#define SECONDS_IN_A_DAY (SECONDS_IN_AN_HOUR * 24)
+
+struct _GsUpdateMonitor {
+ GObject parent;
+
+ GApplication *application;
+ GCancellable *cancellable;
+ GSettings *settings;
+ GsPluginLoader *plugin_loader;
+ GDBusProxy *proxy_upower;
+ GError *last_offline_error;
+
+ GNetworkMonitor *network_monitor;
+ guint network_changed_handler;
+ GCancellable *network_cancellable;
+
+ guint cleanup_notifications_id; /* at startup */
+ guint check_startup_id; /* 60s after startup */
+ guint check_hourly_id; /* and then every hour */
+ guint check_daily_id; /* every 3rd day */
+ guint notification_blocked_id; /* rate limit notifications */
+};
+
+G_DEFINE_TYPE (GsUpdateMonitor, gs_update_monitor, G_TYPE_OBJECT)
+
+typedef struct {
+ GsUpdateMonitor *monitor;
+} DownloadUpdatesData;
+
+static void
+download_updates_data_free (DownloadUpdatesData *data)
+{
+ g_clear_object (&data->monitor);
+ g_slice_free (DownloadUpdatesData, data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(DownloadUpdatesData, download_updates_data_free);
+
+typedef struct {
+ GsUpdateMonitor *monitor;
+ GsApp *app;
+} LanguagePackData;
+
+static void
+language_pack_data_free (LanguagePackData *data)
+{
+ g_clear_object (&data->monitor);
+ g_clear_object (&data->app);
+ g_slice_free (LanguagePackData, data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(LanguagePackData, language_pack_data_free);
+
+static gboolean
+reenable_offline_update_notification (gpointer data)
+{
+ GsUpdateMonitor *monitor = data;
+ monitor->notification_blocked_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void
+notify_offline_update_available (GsUpdateMonitor *monitor)
+{
+ const gchar *title;
+ const gchar *body;
+ guint64 elapsed_security = 0;
+ guint64 security_timestamp = 0;
+ g_autoptr(GNotification) n = NULL;
+
+ if (gs_application_has_active_window (GS_APPLICATION (monitor->application)))
+ return;
+ if (monitor->notification_blocked_id > 0)
+ return;
+
+ /* rate limit update notifications to once per hour */
+ monitor->notification_blocked_id = g_timeout_add_seconds (SECONDS_IN_AN_HOUR, reenable_offline_update_notification, monitor);
+
+ /* get time in days since we saw the first unapplied security update */
+ g_settings_get (monitor->settings,
+ "security-timestamp", "x", &security_timestamp);
+ if (security_timestamp > 0) {
+ elapsed_security = (guint64) g_get_monotonic_time () - security_timestamp;
+ elapsed_security /= G_USEC_PER_SEC;
+ elapsed_security /= 60 * 60 * 24;
+ }
+
+ /* only show the scary warning after the user has ignored
+ * security updates for a full day */
+ if (elapsed_security > 1) {
+ title = _("Security Updates Pending");
+ body = _("It is recommended that you install important updates now");
+ n = g_notification_new (title);
+ g_notification_set_body (n, body);
+ g_notification_add_button (n, _("Restart & Install"), "app.reboot-and-install");
+ g_notification_set_default_action_and_target (n, "app.set-mode", "s", "updates");
+ g_application_send_notification (monitor->application, "updates-available", n);
+ } else {
+ title = _("Software Updates Available");
+ body = _("Important OS and application updates are ready to be installed");
+ n = g_notification_new (title);
+ g_notification_set_body (n, body);
+ g_notification_add_button (n, _("Not Now"), "app.nop");
+ g_notification_add_button_with_target (n, _("View"), "app.set-mode", "s", "updates");
+ g_notification_set_default_action_and_target (n, "app.set-mode", "s", "updates");
+ g_application_send_notification (monitor->application, "updates-available", n);
+ }
+}
+
+static gboolean
+has_important_updates (GsAppList *apps)
+{
+ guint i;
+ GsApp *app;
+
+ for (i = 0; i < gs_app_list_length (apps); i++) {
+ app = gs_app_list_index (apps, i);
+ if (gs_app_get_update_urgency (app) == AS_URGENCY_KIND_CRITICAL ||
+ gs_app_get_update_urgency (app) == AS_URGENCY_KIND_HIGH)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+check_if_timestamp_more_than_a_week_ago (GsUpdateMonitor *monitor, const gchar *timestamp)
+{
+ GTimeSpan d;
+ gint64 tmp;
+ g_autoptr(GDateTime) last_update = NULL;
+ g_autoptr(GDateTime) now = NULL;
+
+ g_settings_get (monitor->settings, timestamp, "x", &tmp);
+ if (tmp == 0)
+ return TRUE;
+
+ last_update = g_date_time_new_from_unix_local (tmp);
+ if (last_update == NULL) {
+ g_warning ("failed to set timestamp %" G_GINT64_FORMAT, tmp);
+ return TRUE;
+ }
+
+ now = g_date_time_new_now_local ();
+ d = g_date_time_difference (now, last_update);
+ if (d >= 7 * G_TIME_SPAN_DAY)
+ return TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+no_updates_for_a_week (GsUpdateMonitor *monitor)
+{
+ if (check_if_timestamp_more_than_a_week_ago (monitor, "install-timestamp") ||
+ check_if_timestamp_more_than_a_week_ago (monitor, "online-updates-timestamp"))
+ return TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+_filter_by_app_kind (GsApp *app, gpointer user_data)
+{
+ AsAppKind kind = GPOINTER_TO_UINT (user_data);
+ return gs_app_get_kind (app) == kind;
+}
+
+static gboolean
+_sort_by_rating_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ if (gs_app_get_rating (app1) < gs_app_get_rating (app2))
+ return -1;
+ if (gs_app_get_rating (app1) > gs_app_get_rating (app2))
+ return 1;
+ return 0;
+}
+
+static GNotification *
+_build_autoupdated_notification (GsUpdateMonitor *monitor, GsAppList *list)
+{
+ guint need_restart_cnt = 0;
+ g_autoptr(GsAppList) list_apps = NULL;
+ g_autoptr(GNotification) n = NULL;
+ g_autoptr(GString) body = g_string_new (NULL);
+ g_autofree gchar *title = NULL;
+
+ /* filter out apps */
+ list_apps = gs_app_list_copy (list);
+ gs_app_list_filter (list_apps,
+ _filter_by_app_kind,
+ GUINT_TO_POINTER(AS_APP_KIND_DESKTOP));
+ gs_app_list_sort (list_apps, _sort_by_rating_cb, NULL);
+ /* FIXME: add the applications that are currently active that use one
+ * of the updated runtimes */
+ if (gs_app_list_length (list_apps) == 0) {
+ g_debug ("no desktop apps in updated list, ignoring");
+ return NULL;
+ }
+
+ /* how many apps needs updating */
+ for (guint i = 0; i < gs_app_list_length (list_apps); i++) {
+ GsApp *app = gs_app_list_index (list_apps, i);
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT))
+ need_restart_cnt++;
+ }
+
+ /* >1 app updated */
+ if (gs_app_list_length (list_apps) > 0) {
+ if (need_restart_cnt > 0) {
+ /* TRANSLATORS: apps were auto-updated and restart is required */
+ title = g_strdup_printf (ngettext ("%u Application Updated — Restart Required",
+ "%u Applications Updated — Restart Required",
+ gs_app_list_length (list_apps)),
+ gs_app_list_length (list_apps));
+ } else {
+ /* TRANSLATORS: apps were auto-updated */
+ title = g_strdup_printf (ngettext ("%u Application Updated",
+ "%u Applications Updated",
+ gs_app_list_length (list_apps)),
+ gs_app_list_length (list_apps));
+ }
+ }
+
+ /* 1 app updated */
+ if (gs_app_list_length (list_apps) == 1) {
+ GsApp *app = gs_app_list_index (list_apps, 0);
+ /* TRANSLATORS: %1 is an application name, e.g. Firefox */
+ g_string_append_printf (body, _("%s has been updated."), gs_app_get_name (app));
+ if (need_restart_cnt > 0) {
+ /* TRANSLATORS: the app needs restarting */
+ g_string_append_printf (body, " %s", _("Please restart the application."));
+ }
+
+ /* 2 apps updated */
+ } else if (gs_app_list_length (list_apps) == 2) {
+ GsApp *app1 = gs_app_list_index (list_apps, 0);
+ GsApp *app2 = gs_app_list_index (list_apps, 1);
+ /* TRANSLATORS: %1 and %2 are both application names, e.g. Firefox */
+ g_string_append_printf (body, _("%s and %s have been updated."),
+ gs_app_get_name (app1),
+ gs_app_get_name (app2));
+ if (need_restart_cnt > 0) {
+ g_string_append (body, " ");
+ /* TRANSLATORS: at least one application needs restarting */
+ g_string_append_printf (body, ngettext ("%u application requires a restart.",
+ "%u applications require a restart.",
+ need_restart_cnt),
+ need_restart_cnt);
+ }
+
+ /* 3+ apps */
+ } else if (gs_app_list_length (list_apps) >= 3) {
+ GsApp *app1 = gs_app_list_index (list_apps, 0);
+ GsApp *app2 = gs_app_list_index (list_apps, 1);
+ GsApp *app3 = gs_app_list_index (list_apps, 2);
+ /* TRANSLATORS: %1, %2 and %3 are all application names, e.g. Firefox */
+ g_string_append_printf (body, _("Includes %s, %s and %s."),
+ gs_app_get_name (app1),
+ gs_app_get_name (app2),
+ gs_app_get_name (app3));
+ if (need_restart_cnt > 0) {
+ g_string_append (body, " ");
+ /* TRANSLATORS: at least one application needs restarting */
+ g_string_append_printf (body, ngettext ("%u application requires a restart.",
+ "%u applications require a restart.",
+ need_restart_cnt),
+ need_restart_cnt);
+ }
+ }
+
+ /* create the notification */
+ n = g_notification_new (title);
+ if (body->len > 0)
+ g_notification_set_body (n, body->str);
+ g_notification_set_default_action_and_target (n, "app.set-mode", "s", "updates");
+ return g_steal_pointer (&n);
+}
+
+static void
+update_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get result */
+ list = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed update application: %s", error->message);
+ return;
+ }
+
+ /* notifications are optional */
+ if (g_settings_get_boolean (monitor->settings, "download-updates-notify")) {
+ g_autoptr(GNotification) n = NULL;
+ g_application_withdraw_notification (monitor->application,
+ "updates-installed");
+ n = _build_autoupdated_notification (monitor, list);
+ if (n != NULL)
+ g_application_send_notification (monitor->application,
+ "updates-installed", n);
+ }
+}
+
+static gboolean
+_should_auto_update (GsApp *app)
+{
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE_LIVE)
+ return FALSE;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEW_PERMISSIONS))
+ return FALSE;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_DO_NOT_AUTO_UPDATE))
+ return FALSE;
+ return TRUE;
+}
+
+static void
+download_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+ g_autoptr(GsAppList) update_online = NULL;
+ g_autoptr(GsAppList) update_offline = NULL;
+
+ /* get result */
+ list = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get updates: %s", error->message);
+ return;
+ }
+
+ update_online = gs_app_list_new ();
+ update_offline = gs_app_list_new ();
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ if (_should_auto_update (app)) {
+ g_debug ("auto-updating %s", gs_app_get_unique_id (app));
+ gs_app_list_add (update_online, app);
+ } else {
+ gs_app_list_add (update_offline, app);
+ }
+ }
+
+ /* install any apps that can be installed LIVE */
+ if (gs_app_list_length (update_online) > 0) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "list", update_online,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ update_finished_cb,
+ monitor);
+ }
+
+ /* show a notification for offline updates */
+ if (gs_app_list_length (update_offline) > 0) {
+ if (has_important_updates (update_offline) ||
+ no_updates_for_a_week (monitor)) {
+ notify_offline_update_available (monitor);
+ }
+ }
+}
+
+static void
+get_updates_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ g_autoptr(DownloadUpdatesData) download_updates_data = (DownloadUpdatesData *) data;
+ GsUpdateMonitor *monitor = download_updates_data->monitor;
+ guint64 security_timestamp = 0;
+ guint64 security_timestamp_old = 0;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) apps = NULL;
+ gboolean download_updates;
+
+ /* get result */
+ apps = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (apps == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get updates: %s", error->message);
+ return;
+ }
+
+ /* no updates */
+ if (gs_app_list_length (apps) == 0) {
+ g_debug ("no updates; withdrawing updates-available notification");
+ g_application_withdraw_notification (monitor->application,
+ "updates-available");
+ return;
+ }
+
+ /* find security updates, or clear timestamp if there are now none */
+ g_settings_get (monitor->settings,
+ "security-timestamp", "x", &security_timestamp_old);
+ for (guint i = 0; i < gs_app_list_length (apps); i++) {
+ GsApp *app = gs_app_list_index (apps, i);
+ if (gs_app_get_metadata_item (app, "is-security") != NULL) {
+ security_timestamp = (guint64) g_get_monotonic_time ();
+ break;
+ }
+ }
+ if (security_timestamp_old != security_timestamp) {
+ g_settings_set (monitor->settings,
+ "security-timestamp", "x", security_timestamp);
+ }
+
+ g_debug ("got %u updates", gs_app_list_length (apps));
+
+#ifdef HAVE_MOGWAI
+ download_updates = TRUE;
+#else
+ download_updates = g_settings_get_boolean (monitor->settings, "download-updates");
+#endif
+
+ if (download_updates) {
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* download any updates; individual plugins are responsible for deciding
+ * whether it’s appropriate to unconditionally download the updates, or
+ * to schedule the download in accordance with the user’s metered data
+ * preferences */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_DOWNLOAD,
+ "list", apps,
+ NULL);
+ g_debug ("Getting updates");
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ download_finished_cb,
+ monitor);
+ } else {
+ /* notify immediately if auto-updates are turned off */
+ if (has_important_updates (apps) ||
+ no_updates_for_a_week (monitor)) {
+ notify_offline_update_available (monitor);
+ }
+ }
+}
+
+static gboolean
+should_show_upgrade_notification (GsUpdateMonitor *monitor)
+{
+ GTimeSpan d;
+ gint64 tmp;
+ g_autoptr(GDateTime) now = NULL;
+ g_autoptr(GDateTime) then = NULL;
+
+ g_settings_get (monitor->settings, "upgrade-notification-timestamp", "x", &tmp);
+ if (tmp == 0)
+ return TRUE;
+ then = g_date_time_new_from_unix_local (tmp);
+ if (then == NULL) {
+ g_warning ("failed to parse timestamp %" G_GINT64_FORMAT, tmp);
+ return TRUE;
+ }
+
+ now = g_date_time_new_now_local ();
+ d = g_date_time_difference (now, then);
+ if (d >= 7 * G_TIME_SPAN_DAY)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void
+get_system_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (object);
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GNotification) n = NULL;
+ g_autoptr(GsApp) app = NULL;
+
+ /* get result */
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get system: %s", error->message);
+ return;
+ }
+
+ /* might be already showing, so just withdraw it and re-issue it */
+ g_application_withdraw_notification (monitor->application, "eol");
+
+ /* do not show when the main window is active */
+ if (gs_application_has_active_window (GS_APPLICATION (monitor->application)))
+ return;
+
+ /* is not EOL */
+ app = gs_plugin_loader_get_system_app (plugin_loader);
+ if (gs_app_get_state (app) != AS_APP_STATE_UNAVAILABLE)
+ return;
+
+ /* TRANSLATORS: this is when the current OS version goes end-of-life */
+ n = g_notification_new (_("Operating System Updates Unavailable"));
+ /* TRANSLATORS: this is the message dialog for the distro EOL notice */
+ g_notification_set_body (n, _("Upgrade to continue receiving security updates."));
+ g_notification_set_default_action_and_target (n, "app.set-mode", "s", "update");
+ g_application_send_notification (monitor->application, "eol", n);
+}
+
+static void
+get_upgrades_finished_cb (GObject *object,
+ GAsyncResult *res,
+ gpointer data)
+{
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (data);
+ GsApp *app;
+ g_autofree gchar *body = NULL;
+ g_autoptr(GDateTime) now = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GNotification) n = NULL;
+ g_autoptr(GsAppList) apps = NULL;
+
+ /* get result */
+ apps = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (apps == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_warning ("failed to get upgrades: %s",
+ error->message);
+ }
+ return;
+ }
+
+ /* no results */
+ if (gs_app_list_length (apps) == 0) {
+ g_debug ("no upgrades; withdrawing upgrades-available notification");
+ g_application_withdraw_notification (monitor->application,
+ "upgrades-available");
+ return;
+ }
+
+ /* do not show if gnome-software is already open */
+ if (gs_application_has_active_window (GS_APPLICATION (monitor->application)))
+ return;
+
+ /* only nag about upgrades once per week */
+ if (!should_show_upgrade_notification (monitor))
+ return;
+
+ g_debug ("showing distro upgrade notification");
+ now = g_date_time_new_now_local ();
+ g_settings_set (monitor->settings, "upgrade-notification-timestamp", "x",
+ g_date_time_to_unix (now));
+
+ /* rely on the app list already being sorted with the
+ * chronologically newest release last */
+ app = gs_app_list_index (apps, gs_app_list_length (apps) - 1);
+
+ /* TRANSLATORS: this is a distro upgrade, the replacement would be the
+ * distro name, e.g. 'Fedora' */
+ body = g_strdup_printf (_("A new version of %s is available to install"),
+ gs_app_get_name (app));
+
+ /* TRANSLATORS: this is a distro upgrade */
+ n = g_notification_new (_("Software Upgrade Available"));
+ g_notification_set_body (n, body);
+ g_notification_set_default_action_and_target (n, "app.set-mode", "s", "updates");
+ g_application_send_notification (monitor->application, "upgrades-available", n);
+}
+
+static void
+get_updates (GsUpdateMonitor *monitor)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(DownloadUpdatesData) download_updates_data = NULL;
+
+ /* disabled in gsettings or from a plugin */
+ if (!gs_plugin_loader_get_allow_updates (monitor->plugin_loader)) {
+ g_debug ("not getting updates as not enabled");
+ return;
+ }
+
+ download_updates_data = g_slice_new0 (DownloadUpdatesData);
+ download_updates_data->monitor = g_object_ref (monitor);
+
+ /* NOTE: this doesn't actually do any network access */
+ g_debug ("Getting updates");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_SEVERITY,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ get_updates_finished_cb,
+ g_steal_pointer (&download_updates_data));
+}
+
+void
+gs_update_monitor_autoupdate (GsUpdateMonitor *monitor)
+{
+ get_updates (monitor);
+}
+
+static void
+get_upgrades (GsUpdateMonitor *monitor)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* disabled in gsettings or from a plugin */
+ if (!gs_plugin_loader_get_allow_updates (monitor->plugin_loader)) {
+ g_debug ("not getting upgrades as not enabled");
+ return;
+ }
+
+ /* NOTE: this doesn't actually do any network access, it relies on the
+ * AppStream data being up to date, either by the appstream-data
+ * package being up-to-date, or the metadata being auto-downloaded */
+ g_debug ("Getting upgrades");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ get_upgrades_finished_cb,
+ monitor);
+}
+
+static void
+get_system (GsUpdateMonitor *monitor)
+{
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ g_debug ("Getting system");
+ app = gs_plugin_loader_get_system_app (monitor->plugin_loader);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader, plugin_job,
+ monitor->cancellable,
+ get_system_finished_cb,
+ monitor);
+}
+
+static void
+refresh_cache_finished_cb (GObject *object,
+ GAsyncResult *res,
+ gpointer data)
+{
+ GsUpdateMonitor *monitor = data;
+ g_autoptr(GDateTime) now = NULL;
+ g_autoptr(GError) error = NULL;
+
+ if (!gs_plugin_loader_job_action_finish (GS_PLUGIN_LOADER (object), res, &error)) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to refresh the cache: %s", error->message);
+ return;
+ }
+
+ /* update the last checked timestamp */
+ now = g_date_time_new_now_local ();
+ g_settings_set (monitor->settings, "check-timestamp", "x",
+ g_date_time_to_unix (now));
+
+ get_updates (monitor);
+}
+
+typedef enum {
+ UP_DEVICE_LEVEL_UNKNOWN,
+ UP_DEVICE_LEVEL_NONE,
+ UP_DEVICE_LEVEL_DISCHARGING,
+ UP_DEVICE_LEVEL_LOW,
+ UP_DEVICE_LEVEL_CRITICAL,
+ UP_DEVICE_LEVEL_ACTION,
+ UP_DEVICE_LEVEL_LAST
+} UpDeviceLevel;
+
+static void
+install_language_pack_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(LanguagePackData) language_pack_data = data;
+
+ if (!gs_plugin_loader_job_action_finish (GS_PLUGIN_LOADER (object), res, &error)) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_debug ("failed to install language pack: %s", error->message);
+ return;
+ } else {
+ g_debug ("language pack for %s installed",
+ gs_app_get_name (language_pack_data->app));
+ }
+}
+
+static void
+get_language_pack_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (data);
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) app_list = NULL;
+
+ app_list = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (app_list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_debug ("failed to find language pack: %s", error->message);
+ return;
+ }
+
+ /* none found */
+ if (gs_app_list_length (app_list) == 0) {
+ g_debug ("no language pack found");
+ return;
+ }
+
+ /* there should be one langpack for a given locale */
+ app = g_object_ref (gs_app_list_index (app_list, 0));
+ if (!gs_app_is_installed (app)) {
+ g_autoptr(LanguagePackData) language_pack_data = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ language_pack_data = g_slice_new0 (LanguagePackData);
+ language_pack_data->monitor = g_object_ref (monitor);
+ language_pack_data->app = g_object_ref (app);
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_INSTALL,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ install_language_pack_cb,
+ g_steal_pointer (&language_pack_data));
+ }
+}
+
+/*
+ * determines active locale and looks for langpacks
+ * installs located language pack, if not already
+ */
+static void
+check_language_pack (GsUpdateMonitor *monitor) {
+
+ const gchar *locale;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ locale = gs_plugin_loader_get_locale (monitor->plugin_loader);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_LANGPACKS,
+ "search", locale,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ get_language_pack_cb,
+ monitor);
+}
+
+static void
+check_updates (GsUpdateMonitor *monitor)
+{
+ gint64 tmp;
+ gboolean refresh_on_metered;
+ g_autoptr(GDateTime) last_refreshed = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* never check for updates when offline */
+ if (!gs_plugin_loader_get_network_available (monitor->plugin_loader))
+ return;
+
+ /* check for language pack */
+ check_language_pack (monitor);
+
+#ifdef HAVE_MOGWAI
+ refresh_on_metered = TRUE;
+#else
+ refresh_on_metered = g_settings_get_boolean (monitor->settings,
+ "refresh-when-metered");
+#endif
+
+ if (!refresh_on_metered &&
+ gs_plugin_loader_get_network_metered (monitor->plugin_loader))
+ return;
+
+ /* never refresh when the battery is low */
+ if (monitor->proxy_upower != NULL) {
+ g_autoptr(GVariant) val = NULL;
+ val = g_dbus_proxy_get_cached_property (monitor->proxy_upower,
+ "WarningLevel");
+ if (val != NULL) {
+ guint32 level = g_variant_get_uint32 (val);
+ if (level >= UP_DEVICE_LEVEL_LOW) {
+ g_debug ("not getting updates on low power");
+ return;
+ }
+ }
+ } else {
+ g_debug ("no UPower support, so not doing power level checks");
+ }
+
+ g_settings_get (monitor->settings, "check-timestamp", "x", &tmp);
+ last_refreshed = g_date_time_new_from_unix_local (tmp);
+ if (last_refreshed != NULL) {
+ gint now_year, now_month, now_day, now_hour;
+ gint year, month, day;
+ g_autoptr(GDateTime) now = NULL;
+
+ now = g_date_time_new_now_local ();
+
+ g_date_time_get_ymd (now, &now_year, &now_month, &now_day);
+ now_hour = g_date_time_get_hour (now);
+
+ g_date_time_get_ymd (last_refreshed, &year, &month, &day);
+
+ /* check that it is the next day */
+ if (!((now_year > year) ||
+ (now_year == year && now_month > month) ||
+ (now_year == year && now_month == month && now_day > day)))
+ return;
+
+ /* ...and past 6am */
+ if (!(now_hour >= 6))
+ return;
+ }
+
+ g_debug ("Daily update check due");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "age", (guint64) (60 * 60 * 24),
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader, plugin_job,
+ monitor->network_cancellable,
+ refresh_cache_finished_cb,
+ monitor);
+}
+
+static gboolean
+check_hourly_cb (gpointer data)
+{
+ GsUpdateMonitor *monitor = data;
+
+ g_debug ("Hourly updates check");
+ check_updates (monitor);
+
+ return G_SOURCE_CONTINUE;
+}
+
+static gboolean
+check_thrice_daily_cb (gpointer data)
+{
+ GsUpdateMonitor *monitor = data;
+
+ g_debug ("Daily upgrades check");
+ get_upgrades (monitor);
+ get_system (monitor);
+
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+stop_upgrades_check (GsUpdateMonitor *monitor)
+{
+ if (monitor->check_daily_id == 0)
+ return;
+
+ g_source_remove (monitor->check_daily_id);
+ monitor->check_daily_id = 0;
+}
+
+static void
+restart_upgrades_check (GsUpdateMonitor *monitor)
+{
+ stop_upgrades_check (monitor);
+ get_upgrades (monitor);
+
+ monitor->check_daily_id = g_timeout_add_seconds (SECONDS_IN_A_DAY / 3,
+ check_thrice_daily_cb,
+ monitor);
+}
+
+static void
+stop_updates_check (GsUpdateMonitor *monitor)
+{
+ if (monitor->check_hourly_id == 0)
+ return;
+
+ g_source_remove (monitor->check_hourly_id);
+ monitor->check_hourly_id = 0;
+}
+
+static void
+restart_updates_check (GsUpdateMonitor *monitor)
+{
+ stop_updates_check (monitor);
+ check_updates (monitor);
+
+ monitor->check_hourly_id = g_timeout_add_seconds (SECONDS_IN_AN_HOUR, check_hourly_cb,
+ monitor);
+}
+
+static gboolean
+check_updates_on_startup_cb (gpointer data)
+{
+ GsUpdateMonitor *monitor = data;
+
+ g_debug ("First hourly updates check");
+ restart_updates_check (monitor);
+
+ if (gs_plugin_loader_get_allow_updates (monitor->plugin_loader))
+ restart_upgrades_check (monitor);
+
+ monitor->check_startup_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void
+check_updates_upower_changed_cb (GDBusProxy *proxy,
+ GParamSpec *pspec,
+ GsUpdateMonitor *monitor)
+{
+ g_debug ("upower changed updates check");
+ check_updates (monitor);
+}
+
+static void
+network_available_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsUpdateMonitor *monitor)
+{
+ check_updates (monitor);
+}
+
+static void
+get_updates_historical_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ GsUpdateMonitor *monitor = data;
+ GsApp *app;
+ const gchar *message;
+ const gchar *title;
+ guint64 time_last_notified;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) apps = NULL;
+ g_autoptr(GNotification) notification = NULL;
+
+ /* get result */
+ apps = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (apps == NULL) {
+
+ /* save this in case the user clicks the
+ * 'Show Details' button from the notification below */
+ g_clear_error (&monitor->last_offline_error);
+ monitor->last_offline_error = g_error_copy (error);
+
+ /* TRANSLATORS: title when we offline updates have failed */
+ notification = g_notification_new (_("Software Updates Failed"));
+ /* TRANSLATORS: message when we offline updates have failed */
+ g_notification_set_body (notification, _("An important OS update failed to be installed."));
+ g_notification_add_button (notification, _("Show Details"), "app.show-offline-update-error");
+ g_notification_set_default_action (notification, "app.show-offline-update-error");
+ g_application_send_notification (monitor->application, "offline-updates", notification);
+ return;
+ }
+
+ /* no results */
+ if (gs_app_list_length (apps) == 0) {
+ g_debug ("no historical updates; withdrawing notification");
+ g_application_withdraw_notification (monitor->application,
+ "updates-available");
+ return;
+ }
+
+ /* have we notified about this before */
+ app = gs_app_list_index (apps, 0);
+ g_settings_get (monitor->settings,
+ "install-timestamp", "x", &time_last_notified);
+ if (time_last_notified >= gs_app_get_install_date (app))
+ return;
+
+ if (gs_app_get_kind (app) == AS_APP_KIND_OS_UPGRADE) {
+ /* TRANSLATORS: Notification title when we've done a distro upgrade */
+ notification = g_notification_new (_("System Upgrade Complete"));
+
+ /* TRANSLATORS: This is the notification body when we've done a
+ * distro upgrade. First %s is the distro name and the 2nd %s
+ * is the version, e.g. "Welcome to Fedora 28!" */
+ message = g_strdup_printf (_("Welcome to %s %s!"),
+ gs_app_get_name (app),
+ gs_app_get_version (app));
+ g_notification_set_body (notification, message);
+ } else {
+ /* TRANSLATORS: title when we've done offline updates */
+ title = ngettext ("Software Update Installed",
+ "Software Updates Installed",
+ gs_app_list_length (apps));
+ /* TRANSLATORS: message when we've done offline updates */
+ message = ngettext ("An important OS update has been installed.",
+ "Important OS updates have been installed.",
+ gs_app_list_length (apps));
+
+ notification = g_notification_new (title);
+ g_notification_set_body (notification, message);
+ /* TRANSLATORS: Button to look at the updates that were installed.
+ * Note that it has nothing to do with the application reviews, the
+ * users can't express their opinions here. In some languages
+ * "Review (evaluate) something" is a different translation than
+ * "Review (browse) something." */
+ g_notification_add_button_with_target (notification, C_("updates", "Review"), "app.set-mode", "s", "updated");
+ g_notification_set_default_action_and_target (notification, "app.set-mode", "s", "updated");
+ }
+ g_application_send_notification (monitor->application, "offline-updates", notification);
+
+ /* update the timestamp so we don't show again */
+ g_settings_set (monitor->settings,
+ "install-timestamp", "x", gs_app_get_install_date (app));
+
+}
+
+static gboolean
+cleanup_notifications_cb (gpointer user_data)
+{
+ GsUpdateMonitor *monitor = user_data;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* this doesn't do any network access */
+ g_debug ("getting historical updates for fresh session");
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES_HISTORICAL,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION,
+ NULL);
+ gs_plugin_loader_job_process_async (monitor->plugin_loader,
+ plugin_job,
+ monitor->cancellable,
+ get_updates_historical_cb,
+ monitor);
+
+ /* wait until first check to show */
+ g_application_withdraw_notification (monitor->application,
+ "updates-available");
+
+ monitor->cleanup_notifications_id = 0;
+ return G_SOURCE_REMOVE;
+}
+
+void
+gs_update_monitor_show_error (GsUpdateMonitor *monitor, GsShell *shell)
+{
+ const gchar *title;
+ const gchar *msg;
+ gboolean show_detailed_error;
+
+ /* can this happen in reality? */
+ if (monitor->last_offline_error == NULL)
+ return;
+
+ /* TRANSLATORS: this is when the offline update failed */
+ title = _("Failed To Update");
+
+ switch (monitor->last_offline_error->code) {
+ case GS_PLUGIN_ERROR_NOT_SUPPORTED:
+ /* TRANSLATORS: the user must have updated manually after
+ * the updates were prepared */
+ msg = _("The system was already up to date.");
+ show_detailed_error = TRUE;
+ break;
+ case GS_PLUGIN_ERROR_CANCELLED:
+ /* TRANSLATORS: the user aborted the update manually */
+ msg = _("The update was cancelled.");
+ show_detailed_error = FALSE;
+ break;
+ case GS_PLUGIN_ERROR_NO_NETWORK:
+ /* TRANSLATORS: the package manager needed to download
+ * something with no network available */
+ msg = _("Internet access was required but wasn’t available. "
+ "Please make sure that you have internet access and try again.");
+ show_detailed_error = FALSE;
+ break;
+ case GS_PLUGIN_ERROR_NO_SECURITY:
+ /* TRANSLATORS: if the package is not signed correctly */
+ msg = _("There were security issues with the update. "
+ "Please consult your software provider for more details.");
+ show_detailed_error = TRUE;
+ break;
+ case GS_PLUGIN_ERROR_NO_SPACE:
+ /* TRANSLATORS: we ran out of disk space */
+ msg = _("There wasn’t enough disk space. Please free up some space and try again.");
+ show_detailed_error = FALSE;
+ break;
+ default:
+ /* TRANSLATORS: We didn't handle the error type */
+ msg = _("We’re sorry: the update failed to install. "
+ "Please wait for another update and try again. "
+ "If the problem persists, contact your software provider.");
+ show_detailed_error = TRUE;
+ break;
+ }
+
+ gs_utils_show_error_dialog (gs_shell_get_window (shell),
+ title,
+ msg,
+ show_detailed_error ? monitor->last_offline_error->message : NULL);
+}
+
+static void
+allow_updates_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsUpdateMonitor *monitor)
+{
+ if (gs_plugin_loader_get_allow_updates (plugin_loader)) {
+ /* We restart the updates check here to avoid the user
+ * potentially waiting for the hourly check */
+ restart_updates_check (monitor);
+ restart_upgrades_check (monitor);
+ } else {
+ stop_upgrades_check (monitor);
+ }
+}
+
+static void
+gs_update_monitor_network_changed_cb (GNetworkMonitor *network_monitor,
+ gboolean available,
+ GsUpdateMonitor *monitor)
+{
+ /* cancel an on-going refresh if we're now in a metered connection */
+ if (!g_settings_get_boolean (monitor->settings, "refresh-when-metered") &&
+ g_network_monitor_get_network_metered (network_monitor)) {
+ g_cancellable_cancel (monitor->network_cancellable);
+ g_object_unref (monitor->network_cancellable);
+ monitor->network_cancellable = g_cancellable_new ();
+ }
+}
+
+static void
+gs_update_monitor_init (GsUpdateMonitor *monitor)
+{
+ GNetworkMonitor *network_monitor;
+ g_autoptr(GError) error = NULL;
+ monitor->settings = g_settings_new ("org.gnome.software");
+
+ /* cleanup at startup */
+ monitor->cleanup_notifications_id =
+ g_idle_add (cleanup_notifications_cb, monitor);
+
+ /* do a first check 60 seconds after login, and then every hour */
+ monitor->check_startup_id =
+ g_timeout_add_seconds (60, check_updates_on_startup_cb, monitor);
+
+ /* we use two cancellables because one can be cancelled by any network
+ * changes to a metered connection, and this shouldn't intervene with other
+ * operations */
+ monitor->cancellable = g_cancellable_new ();
+ monitor->network_cancellable = g_cancellable_new ();
+
+ /* connect to UPower to get the system power state */
+ monitor->proxy_upower = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.freedesktop.UPower",
+ "/org/freedesktop/UPower/devices/DisplayDevice",
+ "org.freedesktop.UPower.Device",
+ NULL,
+ &error);
+ if (monitor->proxy_upower != NULL) {
+ g_signal_connect (monitor->proxy_upower, "notify",
+ G_CALLBACK (check_updates_upower_changed_cb),
+ monitor);
+ } else {
+ g_warning ("failed to connect to upower: %s", error->message);
+ }
+
+ network_monitor = g_network_monitor_get_default ();
+ if (network_monitor == NULL)
+ return;
+ monitor->network_monitor = g_object_ref (network_monitor);
+ monitor->network_changed_handler = g_signal_connect (monitor->network_monitor,
+ "network-changed",
+ G_CALLBACK (gs_update_monitor_network_changed_cb),
+ monitor);
+}
+
+static void
+gs_update_monitor_dispose (GObject *object)
+{
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (object);
+
+ if (monitor->network_changed_handler != 0) {
+ g_signal_handler_disconnect (monitor->network_monitor,
+ monitor->network_changed_handler);
+ monitor->network_changed_handler = 0;
+ }
+
+ g_cancellable_cancel (monitor->cancellable);
+ g_clear_object (&monitor->cancellable);
+ g_cancellable_cancel (monitor->network_cancellable);
+ g_clear_object (&monitor->network_cancellable);
+
+ stop_updates_check (monitor);
+ stop_upgrades_check (monitor);
+
+ if (monitor->check_startup_id != 0) {
+ g_source_remove (monitor->check_startup_id);
+ monitor->check_startup_id = 0;
+ }
+ if (monitor->notification_blocked_id != 0) {
+ g_source_remove (monitor->notification_blocked_id);
+ monitor->notification_blocked_id = 0;
+ }
+ if (monitor->cleanup_notifications_id != 0) {
+ g_source_remove (monitor->cleanup_notifications_id);
+ monitor->cleanup_notifications_id = 0;
+ }
+ if (monitor->plugin_loader != NULL) {
+ g_signal_handlers_disconnect_by_func (monitor->plugin_loader,
+ network_available_notify_cb,
+ monitor);
+ monitor->plugin_loader = NULL;
+ }
+ g_clear_object (&monitor->settings);
+ g_clear_object (&monitor->proxy_upower);
+
+ G_OBJECT_CLASS (gs_update_monitor_parent_class)->dispose (object);
+}
+
+static void
+gs_update_monitor_finalize (GObject *object)
+{
+ GsUpdateMonitor *monitor = GS_UPDATE_MONITOR (object);
+
+ g_application_release (monitor->application);
+ g_clear_error (&monitor->last_offline_error);
+
+ G_OBJECT_CLASS (gs_update_monitor_parent_class)->finalize (object);
+}
+
+static void
+gs_update_monitor_class_init (GsUpdateMonitorClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = gs_update_monitor_dispose;
+ object_class->finalize = gs_update_monitor_finalize;
+}
+
+GsUpdateMonitor *
+gs_update_monitor_new (GsApplication *application)
+{
+ GsUpdateMonitor *monitor;
+
+ monitor = GS_UPDATE_MONITOR (g_object_new (GS_TYPE_UPDATE_MONITOR, NULL));
+ monitor->application = G_APPLICATION (application);
+ g_application_hold (monitor->application);
+
+ monitor->plugin_loader = gs_application_get_plugin_loader (application);
+ g_signal_connect (monitor->plugin_loader, "notify::allow-updates",
+ G_CALLBACK (allow_updates_notify_cb), monitor);
+ g_signal_connect (monitor->plugin_loader, "notify::network-available",
+ G_CALLBACK (network_available_notify_cb), monitor);
+
+ return monitor;
+}
diff --git a/src/gs-update-monitor.h b/src/gs-update-monitor.h
new file mode 100644
index 0000000..bee6c21
--- /dev/null
+++ b/src/gs-update-monitor.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+#include "gs-application.h"
+#include "gs-shell.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_UPDATE_MONITOR (gs_update_monitor_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsUpdateMonitor, gs_update_monitor, GS, UPDATE_MONITOR, GObject)
+
+GsUpdateMonitor *gs_update_monitor_new (GsApplication *app);
+void gs_update_monitor_autoupdate (GsUpdateMonitor *monitor);
+void gs_update_monitor_show_error (GsUpdateMonitor *monitor,
+ GsShell *shell);
+
+G_END_DECLS
diff --git a/src/gs-updates-page.c b/src/gs-updates-page.c
new file mode 100644
index 0000000..ee25448
--- /dev/null
+++ b/src/gs-updates-page.c
@@ -0,0 +1,1468 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+#include "gs-shell.h"
+#include "gs-updates-page.h"
+#include "gs-common.h"
+#include "gs-app-row.h"
+#include "gs-plugin-private.h"
+#include "gs-removal-dialog.h"
+#include "gs-update-monitor.h"
+#include "gs-updates-section.h"
+#include "gs-upgrade-banner.h"
+#include "gs-application.h"
+
+#ifdef HAVE_GNOME_DESKTOP
+#include <gdesktop-enums.h>
+#endif
+
+#include <langinfo.h>
+
+typedef enum {
+ GS_UPDATES_PAGE_FLAG_NONE = 0,
+ GS_UPDATES_PAGE_FLAG_HAS_UPDATES = 1 << 0,
+ GS_UPDATES_PAGE_FLAG_HAS_UPGRADES = 1 << 1,
+ GS_UPDATES_PAGE_FLAG_LAST
+} GsUpdatesPageFlags;
+
+typedef enum {
+ GS_UPDATES_PAGE_STATE_STARTUP,
+ GS_UPDATES_PAGE_STATE_ACTION_REFRESH,
+ GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES,
+ GS_UPDATES_PAGE_STATE_MANAGED,
+ GS_UPDATES_PAGE_STATE_IDLE,
+ GS_UPDATES_PAGE_STATE_FAILED,
+ GS_UPDATES_PAGE_STATE_LAST,
+} GsUpdatesPageState;
+
+struct _GsUpdatesPage
+{
+ GsPage parent_instance;
+
+ GsPluginLoader *plugin_loader;
+ GtkBuilder *builder;
+ GCancellable *cancellable;
+ GCancellable *cancellable_refresh;
+ GCancellable *cancellable_upgrade_download;
+ GSettings *settings;
+ GSettings *desktop_settings;
+ gboolean cache_valid;
+ guint action_cnt;
+ GsShell *shell;
+ GsPluginStatus last_status;
+ GsUpdatesPageState state;
+ GsUpdatesPageFlags result_flags;
+ GtkWidget *button_refresh;
+ GtkWidget *header_spinner_start;
+ GtkWidget *header_checking_label;
+ GtkWidget *header_start_box;
+ GtkWidget *header_end_box;
+ gboolean has_agreed_to_mobile_data;
+ gboolean ampm_available;
+
+ GtkWidget *updates_box;
+ GtkWidget *button_updates_mobile;
+ GtkWidget *button_updates_offline;
+ GtkWidget *label_updates_failed;
+ GtkWidget *label_updates_last_checked;
+ GtkWidget *label_updates_spinner;
+ GtkWidget *scrolledwindow_updates;
+ GtkWidget *spinner_updates;
+ GtkWidget *stack_updates;
+ GtkWidget *upgrade_banner;
+ GtkWidget *box_end_of_life;
+ GtkWidget *label_end_of_life;
+
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+ GtkSizeGroup *sizegroup_button;
+ GtkSizeGroup *sizegroup_header;
+ GtkListBox *sections[GS_UPDATES_SECTION_KIND_LAST];
+};
+
+enum {
+ COLUMN_UPDATE_APP,
+ COLUMN_UPDATE_NAME,
+ COLUMN_UPDATE_VERSION,
+ COLUMN_UPDATE_LAST
+};
+
+G_DEFINE_TYPE (GsUpdatesPage, gs_updates_page, GS_TYPE_PAGE)
+
+static void
+gs_updates_page_set_flag (GsUpdatesPage *self, GsUpdatesPageFlags flag)
+{
+ self->result_flags |= flag;
+}
+
+static void
+gs_updates_page_clear_flag (GsUpdatesPage *self, GsUpdatesPageFlags flag)
+{
+ self->result_flags &= ~flag;
+}
+
+static const gchar *
+gs_updates_page_state_to_string (GsUpdatesPageState state)
+{
+ if (state == GS_UPDATES_PAGE_STATE_STARTUP)
+ return "startup";
+ if (state == GS_UPDATES_PAGE_STATE_ACTION_REFRESH)
+ return "action-refresh";
+ if (state == GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES)
+ return "action-get-updates";
+ if (state == GS_UPDATES_PAGE_STATE_MANAGED)
+ return "managed";
+ if (state == GS_UPDATES_PAGE_STATE_IDLE)
+ return "idle";
+ if (state == GS_UPDATES_PAGE_STATE_FAILED)
+ return "failed";
+ return NULL;
+}
+
+static void
+gs_updates_page_invalidate (GsUpdatesPage *self)
+{
+ self->cache_valid = FALSE;
+}
+
+static GsUpdatesSectionKind
+_get_app_section (GsApp *app)
+{
+ if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE_LIVE) {
+ if (gs_app_get_kind (app) == AS_APP_KIND_FIRMWARE)
+ return GS_UPDATES_SECTION_KIND_ONLINE_FIRMWARE;
+ return GS_UPDATES_SECTION_KIND_ONLINE;
+ }
+ if (gs_app_get_kind (app) == AS_APP_KIND_FIRMWARE)
+ return GS_UPDATES_SECTION_KIND_OFFLINE_FIRMWARE;
+ return GS_UPDATES_SECTION_KIND_OFFLINE;
+}
+
+static GsAppList *
+_get_all_apps (GsUpdatesPage *self)
+{
+ GsAppList *apps = gs_app_list_new ();
+ for (guint i = 0; i < GS_UPDATES_SECTION_KIND_LAST; i++) {
+ GsAppList *list = gs_updates_section_get_list (GS_UPDATES_SECTION (self->sections[i]));
+ gs_app_list_add_list (apps, list);
+ }
+ return apps;
+}
+
+static guint
+_get_num_updates (GsUpdatesPage *self)
+{
+ guint count = 0;
+ g_autoptr(GsAppList) apps = _get_all_apps (self);
+
+ for (guint i = 0; i < gs_app_list_length (apps); ++i) {
+ GsApp *app = gs_app_list_index (apps, i);
+ if (gs_app_is_updatable (app) ||
+ gs_app_get_state (app) == AS_APP_STATE_INSTALLING)
+ ++count;
+ }
+ return count;
+}
+
+static GDateTime *
+time_next_midnight (void)
+{
+ GDateTime *next_midnight;
+ GTimeSpan since_midnight;
+ g_autoptr(GDateTime) now = NULL;
+
+ now = g_date_time_new_now_local ();
+ since_midnight = g_date_time_get_hour (now) * G_TIME_SPAN_HOUR +
+ g_date_time_get_minute (now) * G_TIME_SPAN_MINUTE +
+ g_date_time_get_second (now) * G_TIME_SPAN_SECOND +
+ g_date_time_get_microsecond (now);
+ next_midnight = g_date_time_add (now, G_TIME_SPAN_DAY - since_midnight);
+
+ return next_midnight;
+}
+
+static gchar *
+gs_updates_page_last_checked_time_string (GsUpdatesPage *self)
+{
+#ifdef HAVE_GNOME_DESKTOP
+ GDesktopClockFormat clock_format;
+#endif
+ const gchar *format_string;
+ gchar *time_string;
+ gboolean use_24h_time = FALSE;
+ gint64 tmp;
+ gint days_ago;
+ g_autoptr(GDateTime) last_checked = NULL;
+ g_autoptr(GDateTime) midnight = NULL;
+
+ g_settings_get (self->settings, "check-timestamp", "x", &tmp);
+ if (tmp == 0)
+ return NULL;
+ last_checked = g_date_time_new_from_unix_local (tmp);
+
+ midnight = time_next_midnight ();
+ days_ago = (gint) (g_date_time_difference (midnight, last_checked) / G_TIME_SPAN_DAY);
+
+#ifdef HAVE_GNOME_DESKTOP
+ clock_format = g_settings_get_enum (self->desktop_settings, "clock-format");
+ use_24h_time = (clock_format == G_DESKTOP_CLOCK_FORMAT_24H || self->ampm_available == FALSE);
+#endif
+
+ if (days_ago < 1) { // today
+ if (use_24h_time) {
+ /* TRANSLATORS: Time in 24h format */
+ format_string = _("%R");
+ } else {
+ /* TRANSLATORS: Time in 12h format */
+ format_string = _("%l:%M %p");
+ }
+ } else if (days_ago < 2) { // yesterday
+ if (use_24h_time) {
+ /* TRANSLATORS: This is the word "Yesterday" followed by a
+ time string in 24h format. i.e. "Yesterday, 14:30" */
+ format_string = _("Yesterday, %R");
+ } else {
+ /* TRANSLATORS: This is the word "Yesterday" followed by a
+ time string in 12h format. i.e. "Yesterday, 2:30 PM" */
+ format_string = _("Yesterday, %l:%M %p");
+ }
+ } else if (days_ago < 3) {
+ format_string = _("Two days ago");
+ } else if (days_ago < 4) {
+ format_string = _("Three days ago");
+ } else if (days_ago < 5) {
+ format_string = _("Four days ago");
+ } else if (days_ago < 6) {
+ format_string = _("Five days ago");
+ } else if (days_ago < 7) {
+ format_string = _("Six days ago");
+ } else if (days_ago < 8) {
+ format_string = _("One week ago");
+ } else if (days_ago < 15) {
+ format_string = _("Two weeks ago");
+ } else {
+ /* TRANSLATORS: This is the date string with: day number, month name, year.
+ i.e. "25 May 2012" */
+ format_string = _("%e %B %Y");
+ }
+
+ time_string = g_date_time_format (last_checked, format_string);
+
+ return time_string;
+}
+
+static const gchar *
+gs_updates_page_get_state_string (GsPluginStatus status)
+{
+ /* TRANSLATORS: the update panel is doing *something* vague */
+ return _("Looking for new updates…");
+}
+
+static void
+refresh_headerbar_updates_counter (GsUpdatesPage *self)
+{
+ GtkWidget *widget;
+ guint num_updates;
+
+ num_updates = _get_num_updates (self);
+
+ /* update the counter */
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "button_updates_counter"));
+ if (num_updates > 0 &&
+ gs_plugin_loader_get_allow_updates (self->plugin_loader)) {
+ g_autofree gchar *text = NULL;
+ text = g_strdup_printf ("%u", num_updates);
+ gtk_label_set_label (GTK_LABEL (widget), text);
+ gtk_widget_show (widget);
+ } else {
+ gtk_widget_hide (widget);
+ }
+
+ /* update the tab style */
+ if (num_updates > 0 &&
+ gs_shell_get_mode (self->shell) != GS_SHELL_MODE_UPDATES)
+ gtk_style_context_add_class (gtk_widget_get_style_context (widget), "needs-attention");
+ else
+ gtk_style_context_remove_class (gtk_widget_get_style_context (widget), "needs-attention");
+}
+
+static void
+gs_updates_page_update_ui_state (GsUpdatesPage *self)
+{
+ gboolean allow_mobile_refresh = TRUE;
+ g_autofree gchar *checked_str = NULL;
+ g_autofree gchar *spinner_str = NULL;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_UPDATES)
+ return;
+
+ /* spinners */
+ switch (self->state) {
+ case GS_UPDATES_PAGE_STATE_STARTUP:
+ case GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES:
+ case GS_UPDATES_PAGE_STATE_ACTION_REFRESH:
+ /* if we have updates, avoid clearing the page with a spinner */
+ if (self->result_flags != GS_UPDATES_PAGE_FLAG_NONE) {
+ gs_stop_spinner (GTK_SPINNER (self->spinner_updates));
+ gtk_spinner_start (GTK_SPINNER (self->header_spinner_start));
+ gtk_widget_show (self->header_spinner_start);
+ gtk_widget_show (self->header_checking_label);
+ } else {
+ gs_start_spinner (GTK_SPINNER (self->spinner_updates));
+ }
+ break;
+ default:
+ gs_stop_spinner (GTK_SPINNER (self->spinner_updates));
+ gtk_spinner_stop (GTK_SPINNER (self->header_spinner_start));
+ gtk_widget_hide (self->header_spinner_start);
+ gtk_widget_hide (self->header_checking_label);
+ break;
+ }
+
+ /* spinner text */
+ switch (self->state) {
+ case GS_UPDATES_PAGE_STATE_STARTUP:
+ spinner_str = g_strdup_printf ("%s\n%s",
+ /* TRANSLATORS: the updates panel is starting up */
+ _("Setting up updates…"),
+ _("(This could take a while)"));
+ gtk_label_set_label (GTK_LABEL (self->label_updates_spinner), spinner_str);
+ break;
+ case GS_UPDATES_PAGE_STATE_ACTION_REFRESH:
+ spinner_str = g_strdup_printf ("%s\n%s",
+ gs_updates_page_get_state_string (self->last_status),
+ /* TRANSLATORS: the updates panel is starting up */
+ _("(This could take a while)"));
+ gtk_label_set_label (GTK_LABEL (self->label_updates_spinner), spinner_str);
+ break;
+ default:
+ break;
+ }
+
+ /* headerbar refresh icon */
+ switch (self->state) {
+ case GS_UPDATES_PAGE_STATE_ACTION_REFRESH:
+ case GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES:
+ gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (self->button_refresh))),
+ "media-playback-stop-symbolic", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (self->button_refresh);
+ break;
+ case GS_UPDATES_PAGE_STATE_STARTUP:
+ case GS_UPDATES_PAGE_STATE_MANAGED:
+ gtk_widget_hide (self->button_refresh);
+ break;
+ case GS_UPDATES_PAGE_STATE_IDLE:
+ gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (self->button_refresh))),
+ "view-refresh-symbolic", GTK_ICON_SIZE_MENU);
+ if (self->result_flags != GS_UPDATES_PAGE_FLAG_NONE) {
+ gtk_widget_show (self->button_refresh);
+ } else {
+ if (gs_plugin_loader_get_network_metered (self->plugin_loader) &&
+ !self->has_agreed_to_mobile_data)
+ allow_mobile_refresh = FALSE;
+ gtk_widget_set_visible (self->button_refresh, allow_mobile_refresh);
+ }
+ break;
+ case GS_UPDATES_PAGE_STATE_FAILED:
+ gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (self->button_refresh))),
+ "view-refresh-symbolic", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (self->button_refresh);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ gtk_widget_set_sensitive (self->button_refresh,
+ gs_plugin_loader_get_network_available (self->plugin_loader));
+
+ /* stack */
+ switch (self->state) {
+ case GS_UPDATES_PAGE_STATE_MANAGED:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "managed");
+ break;
+ case GS_UPDATES_PAGE_STATE_FAILED:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "failed");
+ break;
+ case GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES:
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates),
+ "spinner");
+ break;
+ case GS_UPDATES_PAGE_STATE_ACTION_REFRESH:
+ if (self->result_flags != GS_UPDATES_PAGE_FLAG_NONE) {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "view");
+ } else {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "spinner");
+ }
+ break;
+ case GS_UPDATES_PAGE_STATE_STARTUP:
+ case GS_UPDATES_PAGE_STATE_IDLE:
+
+ /* if have updates, just show the view, otherwise show network */
+ if (self->result_flags != GS_UPDATES_PAGE_FLAG_NONE) {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "view");
+ break;
+ }
+
+ /* check we have a "free" network connection */
+ if (gs_plugin_loader_get_network_available (self->plugin_loader) &&
+ !gs_plugin_loader_get_network_metered (self->plugin_loader)) {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "uptodate");
+ break;
+ }
+
+ /* expensive network connection */
+ if (gs_plugin_loader_get_network_metered (self->plugin_loader)) {
+ if (self->has_agreed_to_mobile_data) {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "uptodate");
+ } else {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "mobile");
+ }
+ break;
+ }
+
+ /* no network connection */
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "offline");
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ /* any updates? */
+ gtk_widget_set_visible (self->updates_box,
+ self->result_flags & GS_UPDATES_PAGE_FLAG_HAS_UPDATES);
+
+ /* last checked label */
+ if (g_strcmp0 (gtk_stack_get_visible_child_name (GTK_STACK (self->stack_updates)), "uptodate") == 0) {
+ checked_str = gs_updates_page_last_checked_time_string (self);
+ if (checked_str != NULL) {
+ g_autofree gchar *last_checked = NULL;
+
+ /* TRANSLATORS: This is the time when we last checked for updates */
+ last_checked = g_strdup_printf (_("Last checked: %s"), checked_str);
+ gtk_label_set_label (GTK_LABEL (self->label_updates_last_checked),
+ last_checked);
+ }
+ gtk_widget_set_visible (self->label_updates_last_checked, checked_str != NULL);
+ }
+
+ /* update the counter in headerbar */
+ refresh_headerbar_updates_counter (self);
+}
+
+static void
+gs_updates_page_set_state (GsUpdatesPage *self, GsUpdatesPageState state)
+{
+ g_debug ("setting state from %s to %s (has-update:%i, has-upgrade:%i)",
+ gs_updates_page_state_to_string (self->state),
+ gs_updates_page_state_to_string (state),
+ (self->result_flags & GS_UPDATES_PAGE_FLAG_HAS_UPDATES) > 0,
+ (self->result_flags & GS_UPDATES_PAGE_FLAG_HAS_UPGRADES) > 0);
+ self->state = state;
+ gs_updates_page_update_ui_state (self);
+}
+
+static void
+gs_updates_page_decrement_refresh_count (GsUpdatesPage *self)
+{
+ /* every job increments this */
+ if (self->action_cnt == 0) {
+ g_warning ("action_cnt already zero!");
+ return;
+ }
+ if (--self->action_cnt > 0)
+ return;
+
+ /* all done */
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_IDLE);
+}
+
+static void
+gs_updates_page_network_available_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsUpdatesPage *self)
+{
+ gs_updates_page_update_ui_state (self);
+}
+
+static void
+gs_updates_page_get_updates_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsUpdatesPage *self)
+{
+ GtkWidget *widget;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ self->cache_valid = TRUE;
+
+ /* get the results */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPDATES);
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("updates-shell: failed to get updates: %s", error->message);
+ gtk_label_set_label (GTK_LABEL (self->label_updates_failed),
+ error->message);
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_FAILED);
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder,
+ "button_updates_counter"));
+ gtk_widget_hide (widget);
+ return;
+ }
+
+ /* add the results */
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ GsUpdatesSectionKind section = _get_app_section (app);
+ gs_updates_section_add_app (GS_UPDATES_SECTION (self->sections[section]), app);
+ }
+
+ /* update the counter in headerbar */
+ refresh_headerbar_updates_counter (self);
+
+ /* no results */
+ if (gs_app_list_length (list) == 0) {
+ g_debug ("updates-shell: no updates to show");
+ gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPDATES);
+ } else {
+ gs_updates_page_set_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPDATES);
+ }
+
+ /* only when both set */
+ gs_updates_page_decrement_refresh_count (self);
+}
+
+static void
+gs_updates_page_get_upgrades_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ GsUpdatesPage *self = GS_UPDATES_PAGE (user_data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get the results */
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &error);
+ if (list == NULL) {
+ gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPGRADES);
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) {
+ g_warning ("updates-shell: failed to get upgrades: %s",
+ error->message);
+ }
+ } else if (gs_app_list_length (list) == 0) {
+ g_debug ("updates-shell: no upgrades to show");
+ gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPGRADES);
+ gtk_widget_set_visible (self->upgrade_banner, FALSE);
+ } else {
+ /* rely on the app list already being sorted with the
+ * chronologically newest release last */
+ GsApp *app = gs_app_list_index (list, gs_app_list_length (list) - 1);
+ g_debug ("got upgrade %s", gs_app_get_id (app));
+ gs_upgrade_banner_set_app (GS_UPGRADE_BANNER (self->upgrade_banner), app);
+ gs_updates_page_set_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPGRADES);
+ gtk_widget_set_visible (self->upgrade_banner, TRUE);
+ }
+
+ /* only when both set */
+ gs_updates_page_decrement_refresh_count (self);
+}
+
+static void
+gs_updates_page_get_system_finished_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ GsUpdatesPage *self = GS_UPDATES_PAGE (user_data);
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GString) str = g_string_new (NULL);
+
+ /* get result */
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to get system: %s", error->message);
+ return;
+ }
+
+ /* show or hide the end of life notification */
+ app = gs_plugin_loader_get_system_app (plugin_loader);
+ if (app == NULL) {
+ g_warning ("failed to get system app");
+ gtk_widget_set_visible (self->box_end_of_life, FALSE);
+ return;
+ }
+ if (gs_app_get_state (app) != AS_APP_STATE_UNAVAILABLE) {
+ gtk_widget_set_visible (self->box_end_of_life, FALSE);
+ return;
+ }
+
+ /* construct a sufficiently scary message */
+ if (gs_app_get_name (app) != NULL && gs_app_get_version (app) != NULL) {
+ /* TRANSLATORS: the first %s is the distro name, e.g. 'Fedora'
+ * and the second %s is the distro version, e.g. '25' */
+ g_string_append_printf (str, _("%s %s is no longer supported."),
+ gs_app_get_name (app),
+ gs_app_get_version (app));
+ } else {
+ /* TRANSLATORS: OS refers to operating system, e.g. Fedora */
+ g_string_append (str, _("Your OS is no longer supported."));
+ }
+ g_string_append (str, " ");
+
+ /* TRANSLATORS: EOL distros do not get important updates */
+ g_string_append (str, _("This means that it does not receive security updates."));
+ g_string_append (str, " ");
+
+ /* TRANSLATORS: upgrade refers to a major update, e.g. Fedora 25 to 26 */
+ g_string_append (str, _("It is recommended that you upgrade to a more recent version."));
+
+ gtk_label_set_label (GTK_LABEL (self->label_end_of_life), str->str);
+ gtk_widget_set_visible (self->box_end_of_life, TRUE);
+
+}
+
+static void
+gs_updates_page_load (GsUpdatesPage *self)
+{
+ guint64 refine_flags;
+ g_autoptr(GsApp) app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ if (self->action_cnt > 0)
+ return;
+
+ /* remove all existing apps */
+ for (guint i = 0; i < GS_UPDATES_SECTION_KIND_LAST; i++)
+ gs_updates_section_remove_all (GS_UPDATES_SECTION (self->sections[i]));
+
+ refine_flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION;
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES);
+ self->action_cnt++;
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_UPDATES,
+ "interactive", TRUE,
+ "refine-flags", refine_flags,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_NONE,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ (GAsyncReadyCallback) gs_updates_page_get_updates_cb,
+ self);
+
+ /* get the system state */
+ g_object_unref (plugin_job);
+ app = gs_plugin_loader_get_system_app (self->plugin_loader);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
+ "interactive", TRUE,
+ "app", app,
+ "refine-flags", refine_flags,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ gs_updates_page_get_system_finished_cb,
+ self);
+
+ /* don't refresh every each time */
+ if ((self->result_flags & GS_UPDATES_PAGE_FLAG_HAS_UPGRADES) == 0) {
+ refine_flags |= GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPGRADE_REMOVED;
+ g_object_unref (plugin_job);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_GET_DISTRO_UPDATES,
+ "interactive", TRUE,
+ "refine-flags", refine_flags,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader,
+ plugin_job,
+ self->cancellable,
+ gs_updates_page_get_upgrades_cb,
+ self);
+ self->action_cnt++;
+ }
+}
+
+static void
+gs_updates_page_reload (GsPage *page)
+{
+ GsUpdatesPage *self = GS_UPDATES_PAGE (page);
+
+ if (self->state == GS_UPDATES_PAGE_STATE_ACTION_REFRESH) {
+ g_debug ("ignoring reload as refresh is already in progress");
+ return;
+ }
+
+ gs_updates_page_invalidate (self);
+ gs_updates_page_load (self);
+}
+
+static void
+gs_updates_page_switch_to (GsPage *page,
+ gboolean scroll_up)
+{
+ GsUpdatesPage *self = GS_UPDATES_PAGE (page);
+ GtkWidget *widget;
+
+ if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_UPDATES) {
+ g_warning ("Called switch_to(updates) when in mode %s",
+ gs_shell_get_mode_string (self->shell));
+ return;
+ }
+
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "buttonbox_main"));
+ gtk_widget_show (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "menu_button"));
+ gtk_widget_show (widget);
+
+ gtk_widget_set_visible (self->button_refresh, TRUE);
+
+ if (scroll_up) {
+ GtkAdjustment *adj;
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_updates));
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
+ }
+
+ /* no need to refresh */
+ if (self->cache_valid) {
+ gs_updates_page_update_ui_state (self);
+ return;
+ }
+
+ if (self->state == GS_UPDATES_PAGE_STATE_ACTION_GET_UPDATES) {
+ gs_updates_page_update_ui_state (self);
+ return;
+ }
+ gs_updates_page_load (self);
+}
+
+static void
+gs_updates_page_refresh_cb (GsPluginLoader *plugin_loader,
+ GAsyncResult *res,
+ GsUpdatesPage *self)
+{
+ gboolean ret;
+ g_autoptr(GDateTime) now = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* get the results */
+ ret = gs_plugin_loader_job_action_finish (plugin_loader, res, &error);
+ if (!ret) {
+ /* user cancel */
+ if (g_error_matches (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_CANCELLED)) {
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_IDLE);
+ return;
+ }
+ g_warning ("failed to refresh: %s", error->message);
+ gtk_label_set_label (GTK_LABEL (self->label_updates_failed),
+ error->message);
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_FAILED);
+ return;
+ }
+
+ /* update the last checked timestamp */
+ now = g_date_time_new_now_local ();
+ g_settings_set (self->settings, "check-timestamp", "x",
+ g_date_time_to_unix (now));
+
+ /* get the new list */
+ gs_updates_page_invalidate (self);
+ gs_page_switch_to (GS_PAGE (self), TRUE);
+}
+
+static void
+gs_updates_page_get_new_updates (GsUpdatesPage *self)
+{
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ /* force a check for updates and download */
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_ACTION_REFRESH);
+
+ g_cancellable_cancel (self->cancellable_refresh);
+ g_clear_object (&self->cancellable_refresh);
+ self->cancellable_refresh = g_cancellable_new ();
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFRESH,
+ "interactive", TRUE,
+ "age", (guint64) 1,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable_refresh,
+ (GAsyncReadyCallback) gs_updates_page_refresh_cb,
+ self);
+}
+
+static void
+gs_updates_page_show_network_settings (GsUpdatesPage *self)
+{
+ g_autoptr(GError) error = NULL;
+ if (!g_spawn_command_line_async ("gnome-control-center wifi", &error))
+ g_warning ("Failed to open the control center: %s", error->message);
+}
+
+static void
+gs_updates_page_refresh_confirm_cb (GtkDialog *dialog,
+ GtkResponseType response_type,
+ GsUpdatesPage *self)
+{
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ switch (response_type) {
+ case GTK_RESPONSE_REJECT:
+ /* open the control center */
+ gs_updates_page_show_network_settings (self);
+ break;
+ case GTK_RESPONSE_ACCEPT:
+ self->has_agreed_to_mobile_data = TRUE;
+ gs_updates_page_get_new_updates (self);
+ break;
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_updates_page_button_network_settings_cb (GtkWidget *widget,
+ GsUpdatesPage *self)
+{
+ gs_updates_page_show_network_settings (self);
+}
+
+static void
+gs_updates_page_button_mobile_refresh_cb (GtkWidget *widget,
+ GsUpdatesPage *self)
+{
+ self->has_agreed_to_mobile_data = TRUE;
+ gs_updates_page_get_new_updates (self);
+}
+
+static void
+gs_updates_page_button_refresh_cb (GtkWidget *widget,
+ GsUpdatesPage *self)
+{
+ GtkWidget *dialog;
+
+ /* cancel existing action? */
+ if (self->state == GS_UPDATES_PAGE_STATE_ACTION_REFRESH) {
+ g_cancellable_cancel (self->cancellable_refresh);
+ g_clear_object (&self->cancellable_refresh);
+ return;
+ }
+
+ /* check we have a "free" network connection */
+ if (gs_plugin_loader_get_network_available (self->plugin_loader) &&
+ !gs_plugin_loader_get_network_metered (self->plugin_loader)) {
+ gs_updates_page_get_new_updates (self);
+
+ /* expensive network connection */
+ } else if (gs_plugin_loader_get_network_available (self->plugin_loader) &&
+ gs_plugin_loader_get_network_metered (self->plugin_loader)) {
+ if (self->has_agreed_to_mobile_data) {
+ gs_updates_page_get_new_updates (self);
+ return;
+ }
+ dialog = gtk_message_dialog_new (gs_shell_get_window (self->shell),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_USE_HEADER_BAR |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CANCEL,
+ /* TRANSLATORS: this is to explain that downloading updates may cost money */
+ _("Charges May Apply"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ /* TRANSLATORS: we need network
+ * to do the updates check */
+ _("Checking for updates while using mobile broadband could cause you to incur charges."));
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ /* TRANSLATORS: this is a link to the
+ * control-center network panel */
+ _("Check _Anyway"),
+ GTK_RESPONSE_ACCEPT);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_updates_page_refresh_confirm_cb),
+ self);
+ gs_shell_modal_dialog_present (self->shell, GTK_DIALOG (dialog));
+
+ /* no network connection */
+ } else {
+ dialog = gtk_message_dialog_new (gs_shell_get_window (self->shell),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_USE_HEADER_BAR |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CANCEL,
+ /* TRANSLATORS: can't do updates check */
+ _("No Network"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ /* TRANSLATORS: we need network
+ * to do the updates check */
+ _("Internet access is required to check for updates."));
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
+ /* TRANSLATORS: this is a link to the
+ * control-center network panel */
+ _("Network Settings"),
+ GTK_RESPONSE_REJECT);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_updates_page_refresh_confirm_cb),
+ self);
+ gs_shell_modal_dialog_present (self->shell, GTK_DIALOG (dialog));
+ }
+}
+
+static void
+gs_updates_page_pending_apps_changed_cb (GsPluginLoader *plugin_loader,
+ GsUpdatesPage *self)
+{
+ gs_updates_page_invalidate (self);
+}
+
+typedef struct {
+ GsApp *app;
+ GsUpdatesPage *self;
+} GsPageHelper;
+
+static void
+gs_page_helper_free (GsPageHelper *helper)
+{
+ if (helper->app != NULL)
+ g_object_unref (helper->app);
+ if (helper->self != NULL)
+ g_object_unref (helper->self);
+ g_slice_free (GsPageHelper, helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsPageHelper, gs_page_helper_free);
+
+static void
+upgrade_download_finished_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ g_autoptr(GError) error = NULL;
+
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ return;
+ g_warning ("failed to upgrade-download: %s", error->message);
+ }
+}
+
+static void
+gs_updates_page_upgrade_download_cb (GsUpgradeBanner *upgrade_banner,
+ GsUpdatesPage *self)
+{
+ GsApp *app;
+ GsPageHelper *helper;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ app = gs_upgrade_banner_get_app (upgrade_banner);
+ if (app == NULL) {
+ g_warning ("no upgrade available to download");
+ return;
+ }
+
+ helper = g_slice_new0 (GsPageHelper);
+ helper->app = g_object_ref (app);
+ helper->self = g_object_ref (self);
+
+ if (self->cancellable_upgrade_download != NULL)
+ g_object_unref (self->cancellable_upgrade_download);
+ self->cancellable_upgrade_download = g_cancellable_new ();
+ g_debug ("Starting upgrade download with cancellable %p", self->cancellable_upgrade_download);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPGRADE_DOWNLOAD,
+ "interactive", TRUE,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable_upgrade_download,
+ upgrade_download_finished_cb,
+ helper);
+}
+
+static void
+_cancel_trigger_failed_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsUpdatesPage *self = GS_UPDATES_PAGE (user_data);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (self->plugin_loader, res, &error)) {
+ g_warning ("failed to cancel trigger: %s", error->message);
+ return;
+ }
+}
+
+static void
+upgrade_reboot_failed_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsUpdatesPage *self = (GsUpdatesPage *) user_data;
+ GsApp *app;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GVariant) retval = NULL;
+
+ /* get result */
+ retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error);
+ if (retval != NULL)
+ return;
+
+ if (error != NULL) {
+ g_warning ("Calling org.gnome.SessionManager.Reboot failed: %s",
+ error->message);
+ }
+
+ app = gs_upgrade_banner_get_app (GS_UPGRADE_BANNER (self->upgrade_banner));
+ if (app == NULL) {
+ g_warning ("no upgrade to cancel");
+ return;
+ }
+
+ /* cancel trigger */
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE_CANCEL,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ _cancel_trigger_failed_cb,
+ self);
+}
+
+static void
+upgrade_trigger_finished_cb (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsUpdatesPage *self = (GsUpdatesPage *) user_data;
+ g_autoptr(GDBusConnection) bus = NULL;
+ g_autoptr(GError) error = NULL;
+
+ /* get the results */
+ if (!gs_plugin_loader_job_action_finish (self->plugin_loader, res, &error)) {
+ g_warning ("Failed to trigger offline update: %s", error->message);
+ return;
+ }
+
+ /* trigger reboot */
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+ g_dbus_connection_call (bus,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager",
+ "org.gnome.SessionManager",
+ "Reboot",
+ NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, NULL,
+ upgrade_reboot_failed_cb,
+ self);
+}
+
+static void
+trigger_upgrade (GsUpdatesPage *self)
+{
+ GsApp *upgrade;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ upgrade = gs_upgrade_banner_get_app (GS_UPGRADE_BANNER (self->upgrade_banner));
+ if (upgrade == NULL) {
+ g_warning ("no upgrade available to install");
+ return;
+ }
+
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPGRADE_TRIGGER,
+ "interactive", TRUE,
+ "app", upgrade,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ upgrade_trigger_finished_cb,
+ self);
+}
+
+static void
+gs_updates_page_upgrade_confirm_cb (GtkDialog *dialog,
+ GtkResponseType response_type,
+ GsUpdatesPage *self)
+{
+ /* unmap the dialog */
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ switch (response_type) {
+ case GTK_RESPONSE_ACCEPT:
+ g_debug ("agreed to upgrade removing apps");
+ trigger_upgrade (self);
+ break;
+ case GTK_RESPONSE_CANCEL:
+ g_debug ("cancelled removal dialog");
+ break;
+ case GTK_RESPONSE_DELETE_EVENT:
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gs_updates_page_upgrade_install_cb (GsUpgradeBanner *upgrade_banner,
+ GsUpdatesPage *self)
+{
+ GsAppList *removals;
+ GsApp *upgrade;
+ GtkWidget *dialog;
+ guint cnt = 0;
+ guint i;
+
+ upgrade = gs_upgrade_banner_get_app (GS_UPGRADE_BANNER (self->upgrade_banner));
+ if (upgrade == NULL) {
+ g_warning ("no upgrade available to install");
+ return;
+ }
+
+ /* count the removals */
+ removals = gs_app_get_related (upgrade);
+ for (i = 0; i < gs_app_list_length (removals); i++) {
+ GsApp *app = gs_app_list_index (removals, i);
+ if (gs_app_get_state (app) != AS_APP_STATE_UNAVAILABLE)
+ continue;
+ cnt++;
+ }
+
+ if (cnt == 0) {
+ /* no need for a removal confirmation dialog */
+ trigger_upgrade (self);
+ return;
+ }
+
+ dialog = gs_removal_dialog_new ();
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gs_updates_page_upgrade_confirm_cb),
+ self);
+ gs_removal_dialog_show_upgrade_removals (GS_REMOVAL_DIALOG (dialog),
+ upgrade);
+ gs_shell_modal_dialog_present (self->shell, GTK_DIALOG (dialog));
+}
+
+static void
+gs_updates_page_upgrade_help_cb (GsUpgradeBanner *upgrade_banner,
+ GsUpdatesPage *self)
+{
+ GsApp *app;
+ const gchar *uri;
+
+ app = gs_upgrade_banner_get_app (upgrade_banner);
+ if (app == NULL) {
+ g_warning ("no upgrade available to launch");
+ return;
+ }
+
+ /* open the link */
+ uri = gs_app_get_url (app, AS_URL_KIND_HOMEPAGE);
+ gs_shell_show_uri (self->shell, uri);
+}
+
+static void
+gs_updates_page_invalidate_downloaded_upgrade (GsUpdatesPage *self)
+{
+ GsApp *app;
+ app = gs_upgrade_banner_get_app (GS_UPGRADE_BANNER (self->upgrade_banner));
+ if (app == NULL)
+ return;
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE)
+ return;
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+ g_debug ("resetting %s to AVAILABLE as the updates have changed",
+ gs_app_get_id (app));
+}
+
+static gboolean
+gs_shell_update_are_updates_in_progress (GsUpdatesPage *self)
+{
+ g_autoptr(GsAppList) list = _get_all_apps (self);
+ for (guint i = 0; i < gs_app_list_length (list); i++) {
+ GsApp *app = gs_app_list_index (list, i);
+ switch (gs_app_get_state (app)) {
+ case AS_APP_STATE_INSTALLING:
+ case AS_APP_STATE_REMOVING:
+ return TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+ return FALSE;
+}
+
+static void
+gs_updates_page_changed_cb (GsPluginLoader *plugin_loader,
+ GsUpdatesPage *self)
+{
+ /* if we do a live update and the upgrade is waiting to be deployed
+ * then make sure all new packages are downloaded */
+ gs_updates_page_invalidate_downloaded_upgrade (self);
+
+ /* check to see if any apps in the app list are in a processing state */
+ if (gs_shell_update_are_updates_in_progress (self)) {
+ g_debug ("ignoring updates-changed as updates in progress");
+ return;
+ }
+
+ /* refresh updates list */
+ gs_updates_page_reload (GS_PAGE (self));
+}
+
+static void
+gs_updates_page_status_changed_cb (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GsPluginStatus status,
+ GsUpdatesPage *self)
+{
+ switch (status) {
+ case GS_PLUGIN_STATUS_INSTALLING:
+ case GS_PLUGIN_STATUS_REMOVING:
+ if (app == NULL ||
+ (gs_app_get_kind (app) != AS_APP_KIND_OS_UPGRADE &&
+ gs_app_get_id (app) != NULL)) {
+ /* if we do a install or remove then make sure all new
+ * packages are downloaded */
+ gs_updates_page_invalidate_downloaded_upgrade (self);
+ }
+ break;
+ default:
+ break;
+ }
+
+ self->last_status = status;
+ gs_updates_page_update_ui_state (self);
+}
+
+static void
+gs_updates_page_allow_updates_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsUpdatesPage *self)
+{
+ if (!gs_plugin_loader_get_allow_updates (plugin_loader)) {
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_MANAGED);
+ return;
+ }
+ gs_updates_page_set_state (self, GS_UPDATES_PAGE_STATE_IDLE);
+}
+
+static void
+gs_updates_page_upgrade_cancel_cb (GsUpgradeBanner *upgrade_banner,
+ GsUpdatesPage *self)
+{
+ g_debug ("Cancelling upgrade download with %p", self->cancellable_upgrade_download);
+ g_cancellable_cancel (self->cancellable_upgrade_download);
+}
+
+static gboolean
+gs_updates_page_setup (GsPage *page,
+ GsShell *shell,
+ GsPluginLoader *plugin_loader,
+ GtkBuilder *builder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsUpdatesPage *self = GS_UPDATES_PAGE (page);
+ AtkObject *accessible;
+
+ g_return_val_if_fail (GS_IS_UPDATES_PAGE (self), TRUE);
+
+ for (guint i = 0; i < GS_UPDATES_SECTION_KIND_LAST; i++) {
+ self->sections[i] = gs_updates_section_new (i, plugin_loader, page);
+ gs_updates_section_set_size_groups (GS_UPDATES_SECTION (self->sections[i]),
+ self->sizegroup_image,
+ self->sizegroup_name,
+ self->sizegroup_desc,
+ self->sizegroup_button,
+ self->sizegroup_header);
+ gtk_widget_set_vexpand (GTK_WIDGET (self->sections[i]), FALSE);
+ gtk_container_add (GTK_CONTAINER (self->updates_box), GTK_WIDGET (self->sections[i]));
+ }
+
+ self->shell = shell;
+
+ self->plugin_loader = g_object_ref (plugin_loader);
+ g_signal_connect (self->plugin_loader, "pending-apps-changed",
+ G_CALLBACK (gs_updates_page_pending_apps_changed_cb),
+ self);
+ g_signal_connect (self->plugin_loader, "status-changed",
+ G_CALLBACK (gs_updates_page_status_changed_cb),
+ self);
+ g_signal_connect (self->plugin_loader, "updates-changed",
+ G_CALLBACK (gs_updates_page_changed_cb),
+ self);
+ g_signal_connect_object (self->plugin_loader, "notify::allow-updates",
+ G_CALLBACK (gs_updates_page_allow_updates_notify_cb),
+ self, 0);
+ g_signal_connect_object (self->plugin_loader, "notify::network-available",
+ G_CALLBACK (gs_updates_page_network_available_notify_cb),
+ self, 0);
+ self->builder = g_object_ref (builder);
+ self->cancellable = g_object_ref (cancellable);
+
+ /* setup system upgrades */
+ g_signal_connect (self->upgrade_banner, "download-clicked",
+ G_CALLBACK (gs_updates_page_upgrade_download_cb), self);
+ g_signal_connect (self->upgrade_banner, "install-clicked",
+ G_CALLBACK (gs_updates_page_upgrade_install_cb), self);
+ g_signal_connect (self->upgrade_banner, "cancel-clicked",
+ G_CALLBACK (gs_updates_page_upgrade_cancel_cb), self);
+ g_signal_connect (self->upgrade_banner, "help-clicked",
+ G_CALLBACK (gs_updates_page_upgrade_help_cb), self);
+
+ self->header_end_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ gtk_widget_set_visible (self->header_end_box, TRUE);
+ gs_page_set_header_end_widget (GS_PAGE (self), self->header_end_box);
+
+ self->header_start_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ gtk_widget_set_visible (self->header_start_box, TRUE);
+ gs_page_set_header_start_widget (GS_PAGE (self), self->header_start_box);
+
+ /* This label indicates that the update check is in progress */
+ self->header_checking_label = gtk_label_new (_("Checking…"));
+ gtk_container_add (GTK_CONTAINER (self->header_start_box), self->header_checking_label);
+ gtk_container_child_set(GTK_CONTAINER (self->header_start_box), self->header_checking_label,
+ "pack-type", GTK_PACK_END, NULL);
+ self->header_spinner_start = gtk_spinner_new ();
+ gtk_container_add (GTK_CONTAINER (self->header_start_box), self->header_spinner_start);
+ gtk_container_child_set (GTK_CONTAINER (self->header_start_box), self->header_spinner_start,
+ "pack-type", GTK_PACK_END, NULL);
+
+ /* setup update details window */
+ self->button_refresh = gtk_button_new_from_icon_name ("view-refresh-symbolic", GTK_ICON_SIZE_MENU);
+ accessible = gtk_widget_get_accessible (self->button_refresh);
+ if (accessible != NULL)
+ atk_object_set_name (accessible, _("Check for updates"));
+ gtk_container_add (GTK_CONTAINER (self->header_start_box), self->button_refresh);
+ g_signal_connect (self->button_refresh, "clicked",
+ G_CALLBACK (gs_updates_page_button_refresh_cb),
+ self);
+
+ g_signal_connect (self->button_updates_mobile, "clicked",
+ G_CALLBACK (gs_updates_page_button_mobile_refresh_cb),
+ self);
+ g_signal_connect (self->button_updates_offline, "clicked",
+ G_CALLBACK (gs_updates_page_button_network_settings_cb),
+ self);
+
+ /* visually aligned */
+ self->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_button = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_header = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
+
+ /* set initial state */
+ if (!gs_plugin_loader_get_allow_updates (self->plugin_loader))
+ self->state = GS_UPDATES_PAGE_STATE_MANAGED;
+ return TRUE;
+}
+
+static void
+gs_updates_page_dispose (GObject *object)
+{
+ GsUpdatesPage *self = GS_UPDATES_PAGE (object);
+
+ g_cancellable_cancel (self->cancellable_refresh);
+ g_clear_object (&self->cancellable_refresh);
+ g_cancellable_cancel (self->cancellable_upgrade_download);
+ g_clear_object (&self->cancellable_upgrade_download);
+
+ for (guint i = 0; i < GS_UPDATES_SECTION_KIND_LAST; i++) {
+ if (self->sections[i] != NULL) {
+ gtk_widget_destroy (GTK_WIDGET (self->sections[i]));
+ self->sections[i] = NULL;
+ }
+ }
+
+ g_clear_object (&self->builder);
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->cancellable);
+ g_clear_object (&self->settings);
+ g_clear_object (&self->desktop_settings);
+
+ g_clear_object (&self->sizegroup_image);
+ g_clear_object (&self->sizegroup_name);
+ g_clear_object (&self->sizegroup_desc);
+ g_clear_object (&self->sizegroup_button);
+ g_clear_object (&self->sizegroup_header);
+
+ G_OBJECT_CLASS (gs_updates_page_parent_class)->dispose (object);
+}
+
+static void
+gs_updates_page_class_init (GsUpdatesPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsPageClass *page_class = GS_PAGE_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_updates_page_dispose;
+ page_class->switch_to = gs_updates_page_switch_to;
+ page_class->reload = gs_updates_page_reload;
+ page_class->setup = gs_updates_page_setup;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-updates-page.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, updates_box);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, button_updates_mobile);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, button_updates_offline);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, label_updates_failed);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, label_updates_last_checked);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, label_updates_spinner);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, scrolledwindow_updates);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, spinner_updates);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, stack_updates);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, upgrade_banner);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, box_end_of_life);
+ gtk_widget_class_bind_template_child (widget_class, GsUpdatesPage, label_end_of_life);
+}
+
+static void
+gs_updates_page_init (GsUpdatesPage *self)
+{
+ const char *ampm;
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ self->state = GS_UPDATES_PAGE_STATE_STARTUP;
+ self->settings = g_settings_new ("org.gnome.software");
+ self->desktop_settings = g_settings_new ("org.gnome.desktop.interface");
+
+ self->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_desc = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_button = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ self->sizegroup_header = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
+
+ ampm = nl_langinfo (AM_STR);
+ if (ampm != NULL && *ampm != '\0')
+ self->ampm_available = TRUE;
+}
+
+GsUpdatesPage *
+gs_updates_page_new (void)
+{
+ GsUpdatesPage *self;
+ self = g_object_new (GS_TYPE_UPDATES_PAGE, NULL);
+ return GS_UPDATES_PAGE (self);
+}
diff --git a/src/gs-updates-page.h b/src/gs-updates-page.h
new file mode 100644
index 0000000..761c834
--- /dev/null
+++ b/src/gs-updates-page.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_UPDATES_PAGE (gs_updates_page_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsUpdatesPage, gs_updates_page, GS, UPDATES_PAGE, GsPage)
+
+GsUpdatesPage *gs_updates_page_new (void);
+
+G_END_DECLS
diff --git a/src/gs-updates-page.ui b/src/gs-updates-page.ui
new file mode 100644
index 0000000..64bbe68
--- /dev/null
+++ b/src/gs-updates-page.ui
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GsUpdatesPage" parent="GsPage">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="updates-accessible">
+ <property name="accessible-name" translatable="yes">Updates page</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box_end_of_life">
+ <property name="visible">False</property>
+ <property name="border_width">0</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">18</property>
+ <style>
+ <class name="eol-box"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">dialog-warning-symbolic</property>
+ <property name="margin_top">18</property>
+ <property name="margin_left">18</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="margin_right">18</property>
+ <property name="margin_top">18</property>
+ <property name="label" translatable="yes">Operating System Updates Unavailable</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_end_of_life">
+ <property name="visible">True</property>
+ <property name="margin_right">18</property>
+ <property name="margin_bottom">18</property>
+ <property name="label">Your OS is no longer supported. This means that it does not receive security updates. It is recommended that you upgrade to a more recent version.</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">80</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="stack_updates">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="updates_spinner_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner_updates">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_updates_spinner">
+ <property name="visible">True</property>
+ <property name="label"/>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow_updates">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GsFixedSizeBin" id="gs_fixed_bin">
+ <property name="visible">True</property>
+ <property name="preferred-width">860</property>
+ <child>
+ <object class="GtkBox" id="list_box_updates_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GsUpgradeBanner" id="upgrade_banner">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">False</property>
+ <property name="margin_top">18</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="updates_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin_bottom">18</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">view</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">48</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GsUpgradeBanner" id="upgrade_banner_uptodate">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child type="center">
+ <object class="GtkBox" id="updates_uptodate_centerbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_updates">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">object-select-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="TRANSLATORS: This means all software (plural) installed on this system is up to date.">Software is up to date</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_updates_last_checked">
+ <property name="visible">True</property>
+ <property name="margin_bottom">32</property>
+ <property name="label">Last checked: HH:MM</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">uptodate</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="updates_mobile_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_updates_mobile">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">dialog-warning-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_updates_mobile">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Checking for updates when using mobile broadband could cause you to incur charges</property>
+ <property name="wrap">True</property>
+ <property name="halign">center</property>
+ <property name="max-width-chars">40</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_updates_mobile">
+ <property name="label" translatable="yes">_Check Anyway</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="hexpand">False</property>
+ <property name="halign">center</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">mobile</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="updates_offline_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_updates_offline">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">network-offline-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_updates_offline">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Go online to check for updates</property>
+ <property name="wrap">True</property>
+ <property name="halign">center</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_updates_offline">
+ <property name="label" translatable="yes">_Network Settings</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="hexpand">False</property>
+ <property name="halign">center</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">offline</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="updates_failed_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_updates_failed">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">action-unavailable-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_updates_failed">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <property name="label" translatable="No">Failed to get updates</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">failed</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">action-unavailable-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <property name="label" translatable="yes">Updates are automatically managed</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">managed</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-updates-section.c b/src/gs-updates-section.c
new file mode 100644
index 0000000..efab7d6
--- /dev/null
+++ b/src/gs-updates-section.c
@@ -0,0 +1,642 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+#include "gs-app-list-private.h"
+#include "gs-app-row.h"
+#include "gs-page.h"
+#include "gs-common.h"
+#include "gs-progress-button.h"
+#include "gs-update-dialog.h"
+#include "gs-updates-section.h"
+#include "gs-utils.h"
+
+struct _GsUpdatesSection
+{
+ GtkListBox parent_instance;
+ GsAppList *list;
+ GsUpdatesSectionKind kind;
+ GCancellable *cancellable;
+ GsPage *page;
+ GsPluginLoader *plugin_loader;
+ GtkSizeGroup *sizegroup_image;
+ GtkSizeGroup *sizegroup_name;
+ GtkSizeGroup *sizegroup_desc;
+ GtkSizeGroup *sizegroup_button;
+ GtkSizeGroup *sizegroup_header;
+ GtkWidget *button_download;
+ GtkWidget *button_update;
+ GtkWidget *button_cancel;
+ GtkStack *button_stack;
+ GtkWidget *section_header;
+};
+
+G_DEFINE_TYPE (GsUpdatesSection, gs_updates_section, GTK_TYPE_LIST_BOX)
+
+GsAppList *
+gs_updates_section_get_list (GsUpdatesSection *self)
+{
+ return self->list;
+}
+
+static void
+_app_row_button_clicked_cb (GsAppRow *app_row, GsUpdatesSection *self)
+{
+ GsApp *app = gs_app_row_get_app (app_row);
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE_LIVE)
+ return;
+ gs_page_update_app (GS_PAGE (self->page), app, gs_app_get_cancellable (app));
+}
+
+static void
+_row_unrevealed_cb (GObject *row, GParamSpec *pspec, gpointer data)
+{
+ GtkWidget *list;
+
+ list = gtk_widget_get_parent (GTK_WIDGET (row));
+ if (list == NULL)
+ return;
+ gtk_container_remove (GTK_CONTAINER (list), GTK_WIDGET (row));
+}
+
+static void
+_unreveal_row (GsAppRow *app_row)
+{
+ gs_app_row_unreveal (app_row);
+ g_signal_connect (app_row, "unrevealed",
+ G_CALLBACK (_row_unrevealed_cb), NULL);
+}
+
+static void
+_app_state_notify_cb (GsApp *app, GParamSpec *pspec, gpointer user_data)
+{
+ if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+ GsAppRow *app_row = GS_APP_ROW (user_data);
+ _unreveal_row (app_row);
+ }
+}
+
+void
+gs_updates_section_add_app (GsUpdatesSection *self, GsApp *app)
+{
+ GtkWidget *app_row;
+ app_row = gs_app_row_new (app);
+ gs_app_row_set_show_update (GS_APP_ROW (app_row), TRUE);
+ gs_app_row_set_show_buttons (GS_APP_ROW (app_row), TRUE);
+ g_signal_connect (app_row, "button-clicked",
+ G_CALLBACK (_app_row_button_clicked_cb),
+ self);
+ gtk_container_add (GTK_CONTAINER (self), app_row);
+ gs_app_list_add (self->list, app);
+
+ gs_app_row_set_size_groups (GS_APP_ROW (app_row),
+ self->sizegroup_image,
+ self->sizegroup_name,
+ self->sizegroup_desc,
+ self->sizegroup_button);
+ g_signal_connect_object (app, "notify::state",
+ G_CALLBACK (_app_state_notify_cb),
+ app_row, 0);
+ gtk_widget_show (GTK_WIDGET (self));
+}
+
+void
+gs_updates_section_remove_all (GsUpdatesSection *self)
+{
+ g_autoptr(GList) children = NULL;
+ children = gtk_container_get_children (GTK_CONTAINER (self));
+ for (GList *l = children; l != NULL; l = l->next) {
+ GtkWidget *w = GTK_WIDGET (l->data);
+ gtk_container_remove (GTK_CONTAINER (self), w);
+ }
+ gs_app_list_remove_all (self->list);
+ gtk_widget_hide (GTK_WIDGET (self));
+}
+
+typedef struct {
+ GsUpdatesSection *self;
+ gboolean do_reboot;
+ gboolean do_reboot_notification;
+} GsUpdatesSectionUpdateHelper;
+
+static gchar *
+_get_app_sort_key (GsApp *app)
+{
+ GString *key;
+ g_autofree gchar *sort_name = NULL;
+
+ key = g_string_sized_new (64);
+
+ /* sort apps by kind */
+ switch (gs_app_get_kind (app)) {
+ case AS_APP_KIND_OS_UPDATE:
+ g_string_append (key, "1:");
+ break;
+ case AS_APP_KIND_DESKTOP:
+ g_string_append (key, "2:");
+ break;
+ case AS_APP_KIND_WEB_APP:
+ g_string_append (key, "3:");
+ break;
+ case AS_APP_KIND_RUNTIME:
+ g_string_append (key, "4:");
+ break;
+ case AS_APP_KIND_ADDON:
+ g_string_append (key, "5:");
+ break;
+ case AS_APP_KIND_CODEC:
+ g_string_append (key, "6:");
+ break;
+ case AS_APP_KIND_FONT:
+ g_string_append (key, "6:");
+ break;
+ case AS_APP_KIND_INPUT_METHOD:
+ g_string_append (key, "7:");
+ break;
+ case AS_APP_KIND_SHELL_EXTENSION:
+ g_string_append (key, "8:");
+ break;
+ default:
+ g_string_append (key, "9:");
+ break;
+ }
+
+ /* finally, sort by short name */
+ if (gs_app_get_name (app) != NULL) {
+ sort_name = gs_utils_sort_key (gs_app_get_name (app));
+ g_string_append (key, sort_name);
+ }
+
+ return g_string_free (key, FALSE);
+}
+
+static gint
+_list_sort_func (GtkListBoxRow *a, GtkListBoxRow *b, gpointer user_data)
+{
+ GsApp *a1 = gs_app_row_get_app (GS_APP_ROW (a));
+ GsApp *a2 = gs_app_row_get_app (GS_APP_ROW (b));
+ g_autofree gchar *key1 = _get_app_sort_key (a1);
+ g_autofree gchar *key2 = _get_app_sort_key (a2);
+
+ /* compare the keys according to the algorithm above */
+ return g_strcmp0 (key1, key2);
+}
+
+static void
+_update_helper_free (GsUpdatesSectionUpdateHelper *helper)
+{
+ g_object_unref (helper->self);
+ g_free (helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsUpdatesSectionUpdateHelper, _update_helper_free);
+
+static void
+_cancel_trigger_failed_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsUpdatesSection *self = GS_UPDATES_SECTION (user_data);
+ g_autoptr(GError) error = NULL;
+ if (!gs_plugin_loader_job_action_finish (self->plugin_loader, res, &error)) {
+ g_warning ("failed to cancel trigger: %s", error->message);
+ return;
+ }
+}
+
+static void
+_reboot_failed_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+ GsUpdatesSection *self = GS_UPDATES_SECTION (user_data);
+ g_autoptr(GError) error = NULL;
+ GsApp *app = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ g_autoptr(GVariant) retval = NULL;
+
+ /* get result */
+ retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), res, &error);
+ if (retval != NULL)
+ return;
+
+ if (error != NULL) {
+ g_warning ("Calling org.gnome.SessionManager.Reboot failed: %s",
+ error->message);
+ }
+
+ /* cancel trigger */
+ app = gs_app_list_index (self->list, 0);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE_CANCEL,
+ "app", app,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ gs_app_get_cancellable (app),
+ _cancel_trigger_failed_cb,
+ self);
+}
+
+static gboolean
+_all_offline_updates_downloaded (GsUpdatesSection *self)
+{
+ /* use the download size to figure out what is downloaded and what not */
+ for (guint i = 0; i < gs_app_list_length (self->list); i++) {
+ GsApp *app = gs_app_list_index (self->list, i);
+ guint64 size = gs_app_get_size_download (app);
+ if (size != 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+_update_buttons (GsUpdatesSection *self)
+{
+ /* operation in progress */
+ if (self->cancellable != NULL) {
+ gtk_widget_set_sensitive (self->button_cancel,
+ !g_cancellable_is_cancelled (self->cancellable));
+ gtk_stack_set_visible_child_name (self->button_stack, "cancel");
+ gtk_widget_show (GTK_WIDGET (self->button_stack));
+ return;
+ }
+
+ if (self->kind == GS_UPDATES_SECTION_KIND_OFFLINE_FIRMWARE ||
+ self->kind == GS_UPDATES_SECTION_KIND_OFFLINE) {
+ if (_all_offline_updates_downloaded (self))
+ gtk_stack_set_visible_child_name (self->button_stack, "update");
+ else
+ gtk_stack_set_visible_child_name (self->button_stack, "download");
+
+ gtk_widget_show (GTK_WIDGET (self->button_stack));
+ /* TRANSLATORS: This is the button for installing all
+ * offline updates */
+ gtk_button_set_label (GTK_BUTTON (self->button_update), _("Restart & Update"));
+ } else if (self->kind == GS_UPDATES_SECTION_KIND_ONLINE) {
+ gtk_stack_set_visible_child_name (self->button_stack, "update");
+ gtk_widget_show (GTK_WIDGET (self->button_stack));
+ /* TRANSLATORS: This is the button for upgrading all
+ * online-updatable applications */
+ gtk_button_set_label (GTK_BUTTON (self->button_update), _("Update All"));
+ } else {
+ gtk_widget_hide (GTK_WIDGET (self->button_stack));
+ }
+
+}
+
+static void
+_perform_update_cb (GsPluginLoader *plugin_loader, GAsyncResult *res, gpointer user_data)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsUpdatesSectionUpdateHelper) helper = (GsUpdatesSectionUpdateHelper *) user_data;
+ GsUpdatesSection *self = helper->self;
+
+ /* get the results */
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to perform update: %s", error->message);
+ goto out;
+ }
+
+ /* trigger reboot if any application was not updatable live */
+ if (helper->do_reboot) {
+ g_autoptr(GDBusConnection) bus = NULL;
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+ g_dbus_connection_call (bus,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager",
+ "org.gnome.SessionManager",
+ "Reboot",
+ NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, NULL,
+ _reboot_failed_cb,
+ self);
+
+ /* when we are not doing an offline update, show a notification
+ * if any application requires a reboot */
+ } else if (helper->do_reboot_notification) {
+ gs_utils_reboot_notify (self->list);
+ }
+
+out:
+ g_clear_object (&self->cancellable);
+ _update_buttons (self);
+}
+
+static void
+_button_cancel_clicked_cb (GtkButton *button, GsUpdatesSection *self)
+{
+ g_cancellable_cancel (self->cancellable);
+ _update_buttons (self);
+}
+
+static void
+_download_finished_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+ g_autoptr(GsUpdatesSection) self = (GsUpdatesSection *) user_data;
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ /* get result */
+ list = gs_plugin_loader_job_process_finish (GS_PLUGIN_LOADER (object), res, &error);
+ if (list == NULL) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED))
+ g_warning ("failed to download updates: %s", error->message);
+ }
+
+ g_clear_object (&self->cancellable);
+ _update_buttons (self);
+}
+
+static void
+_button_download_clicked_cb (GtkButton *button, GsUpdatesSection *self)
+{
+ g_autoptr(GCancellable) cancellable = g_cancellable_new ();
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+
+ g_set_object (&self->cancellable, cancellable);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_DOWNLOAD,
+ "list", self->list,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE,
+ "interactive", TRUE,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ (GAsyncReadyCallback) _download_finished_cb,
+ g_object_ref (self));
+ _update_buttons (self);
+}
+
+static void
+_button_update_all_clicked_cb (GtkButton *button, GsUpdatesSection *self)
+{
+ g_autoptr(GCancellable) cancellable = g_cancellable_new ();
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ GsUpdatesSectionUpdateHelper *helper = g_new0 (GsUpdatesSectionUpdateHelper, 1);
+
+ helper->self = g_object_ref (self);
+
+ /* look at each app in turn */
+ for (guint i = 0; i < gs_app_list_length (self->list); i++) {
+ GsApp *app = gs_app_list_index (self->list, i);
+ if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE)
+ helper->do_reboot = TRUE;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT))
+ helper->do_reboot_notification = TRUE;
+ }
+
+ g_set_object (&self->cancellable, cancellable);
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
+ "list", self->list,
+ "interactive", TRUE,
+ NULL);
+ gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
+ self->cancellable,
+ (GAsyncReadyCallback) _perform_update_cb,
+ helper);
+ _update_buttons (self);
+}
+
+static GtkWidget *
+_build_section_header (GsUpdatesSection *self)
+{
+ GtkStyleContext *context;
+ GtkWidget *header;
+ GtkWidget *label;
+
+ /* get labels and buttons for everything */
+ if (self->kind == GS_UPDATES_SECTION_KIND_OFFLINE_FIRMWARE) {
+ /* TRANSLATORS: This is the header for system firmware that
+ * requires a reboot to apply */
+ label = gtk_label_new (_("Integrated Firmware"));
+ } else if (self->kind == GS_UPDATES_SECTION_KIND_OFFLINE) {
+ /* TRANSLATORS: This is the header for offline OS and offline
+ * app updates that require a reboot to apply */
+ label = gtk_label_new (_("Requires Restart"));
+ } else if (self->kind == GS_UPDATES_SECTION_KIND_ONLINE) {
+ /* TRANSLATORS: This is the header for online runtime and
+ * app updates, typically flatpaks or snaps */
+ label = gtk_label_new (_("Application Updates"));
+ } else if (self->kind == GS_UPDATES_SECTION_KIND_ONLINE_FIRMWARE) {
+ /* TRANSLATORS: This is the header for device firmware that can
+ * be installed online */
+ label = gtk_label_new (_("Device Firmware"));
+ } else {
+ g_assert_not_reached ();
+ }
+
+ /* create header */
+ header = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
+ context = gtk_widget_get_style_context (header);
+ gtk_style_context_add_class (context, "app-listbox-header");
+
+ /* put label into the header */
+ gtk_widget_set_hexpand (label, TRUE);
+ gtk_container_add (GTK_CONTAINER (header), label);
+ gtk_widget_set_visible (label, TRUE);
+ gtk_widget_set_margin_start (label, 6);
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ context = gtk_widget_get_style_context (label);
+ gtk_style_context_add_class (context, "app-listbox-header-title");
+
+ /* use a stack so we can switch which buttons are showing without the
+ * sizegroup resizing */
+ self->button_stack = GTK_STACK (gtk_stack_new ());
+ gtk_container_add (GTK_CONTAINER (header), GTK_WIDGET (self->button_stack));
+ gtk_container_child_set (GTK_CONTAINER (header), GTK_WIDGET (self->button_stack), "pack-type", GTK_PACK_END, NULL);
+
+ /* add download button */
+ self->button_download = gs_progress_button_new ();
+ gtk_button_set_use_underline (GTK_BUTTON (self->button_download), TRUE);
+ gtk_button_set_label (GTK_BUTTON (self->button_download), _("_Download"));
+ context = gtk_widget_get_style_context (self->button_download);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_SUGGESTED_ACTION);
+ g_signal_connect (self->button_download, "clicked",
+ G_CALLBACK (_button_download_clicked_cb),
+ self);
+ gtk_stack_add_named (self->button_stack, self->button_download, "download");
+ gtk_widget_set_visible (self->button_download, TRUE);
+
+ /* add update button */
+ self->button_update = gs_progress_button_new ();
+ context = gtk_widget_get_style_context (self->button_update);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_SUGGESTED_ACTION);
+ g_signal_connect (self->button_update, "clicked",
+ G_CALLBACK (_button_update_all_clicked_cb),
+ self);
+ gtk_stack_add_named (self->button_stack, self->button_update, "update");
+ gtk_widget_set_visible (self->button_update, TRUE);
+
+ /* add cancel button */
+ self->button_cancel = gs_progress_button_new ();
+ gtk_button_set_label (GTK_BUTTON (self->button_cancel), _("Cancel"));
+ gs_progress_button_set_show_progress (GS_PROGRESS_BUTTON (self->button_cancel), TRUE);
+ g_signal_connect (self->button_cancel, "clicked",
+ G_CALLBACK (_button_cancel_clicked_cb),
+ self);
+ gtk_stack_add_named (self->button_stack, self->button_cancel, "cancel");
+ gtk_widget_set_visible (self->button_cancel, TRUE);
+
+ /* success */
+ return header;
+}
+
+static void
+_list_header_func (GtkListBoxRow *row, GtkListBoxRow *before, gpointer user_data)
+{
+ GsUpdatesSection *self = GS_UPDATES_SECTION (user_data);
+ GtkWidget *header;
+
+ /* section changed */
+ if (before == NULL) {
+ if (gtk_list_box_row_get_header (row) != self->section_header) {
+ gtk_widget_unparent (self->section_header);
+ }
+ header = self->section_header;
+ } else {
+ header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ }
+ gtk_list_box_row_set_header (row, header);
+}
+
+static void
+_app_row_activated_cb (GtkListBox *list_box, GtkListBoxRow *row, GsUpdatesSection *self)
+{
+ GsApp *app = gs_app_row_get_app (GS_APP_ROW (row));
+ GtkWidget *dialog;
+ g_autofree gchar *str = NULL;
+
+ /* debug */
+ str = gs_app_to_string (app);
+ g_debug ("%s", str);
+
+ dialog = gs_update_dialog_new (self->plugin_loader);
+ gs_update_dialog_show_update_details (GS_UPDATE_DIALOG (dialog), app);
+ gs_shell_modal_dialog_present (gs_page_get_shell (self->page), GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
+static void
+gs_updates_section_show (GtkWidget *widget)
+{
+ _update_buttons (GS_UPDATES_SECTION (widget));
+
+ GTK_WIDGET_CLASS (gs_updates_section_parent_class)->show (widget);
+}
+
+static void
+gs_updates_section_dispose (GObject *object)
+{
+ GsUpdatesSection *self = GS_UPDATES_SECTION (object);
+
+ g_clear_object (&self->cancellable);
+ g_clear_object (&self->list);
+ g_clear_object (&self->plugin_loader);
+ g_clear_object (&self->page);
+ g_clear_object (&self->sizegroup_image);
+ g_clear_object (&self->sizegroup_name);
+ g_clear_object (&self->sizegroup_desc);
+ g_clear_object (&self->sizegroup_button);
+ g_clear_object (&self->sizegroup_header);
+ self->button_download = NULL;
+ self->button_update = NULL;
+ self->button_cancel = NULL;
+ self->button_stack = NULL;
+ g_clear_object (&self->section_header);
+
+ G_OBJECT_CLASS (gs_updates_section_parent_class)->dispose (object);
+}
+
+static void
+gs_updates_section_class_init (GsUpdatesSectionClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_updates_section_dispose;
+ widget_class->show = gs_updates_section_show;
+}
+
+void
+gs_updates_section_set_size_groups (GsUpdatesSection *self,
+ GtkSizeGroup *image,
+ GtkSizeGroup *name,
+ GtkSizeGroup *desc,
+ GtkSizeGroup *button,
+ GtkSizeGroup *header)
+{
+ g_set_object (&self->sizegroup_image, image);
+ g_set_object (&self->sizegroup_name, name);
+ g_set_object (&self->sizegroup_desc, desc);
+ g_set_object (&self->sizegroup_button, button);
+ g_set_object (&self->sizegroup_header, header);
+
+ gtk_size_group_add_widget (self->sizegroup_button, GTK_WIDGET (self->button_stack));
+ gtk_size_group_add_widget (self->sizegroup_header, self->section_header);
+}
+
+static void
+gs_updates_section_progress_notify_cb (GsAppList *list,
+ GParamSpec *pspec,
+ GsUpdatesSection *self)
+{
+ if (self->button_cancel == NULL)
+ return;
+
+ gs_progress_button_set_progress (GS_PROGRESS_BUTTON (self->button_cancel),
+ gs_app_list_get_progress (list));
+}
+
+static void
+gs_updates_section_init (GsUpdatesSection *self)
+{
+ GtkStyleContext *context;
+
+ self->list = gs_app_list_new ();
+ gs_app_list_add_flag (self->list,
+ GS_APP_LIST_FLAG_WATCH_APPS |
+ GS_APP_LIST_FLAG_WATCH_APPS_ADDONS |
+ GS_APP_LIST_FLAG_WATCH_APPS_RELATED);
+ g_signal_connect_object (self->list, "notify::progress",
+ G_CALLBACK (gs_updates_section_progress_notify_cb),
+ self, 0);
+ gtk_list_box_set_selection_mode (GTK_LIST_BOX (self),
+ GTK_SELECTION_NONE);
+ gtk_list_box_set_sort_func (GTK_LIST_BOX (self),
+ _list_sort_func,
+ self, NULL);
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self),
+ _list_header_func,
+ self, NULL);
+ g_signal_connect (self, "row-activated",
+ G_CALLBACK (_app_row_activated_cb), self);
+ gtk_widget_set_margin_top (GTK_WIDGET (self), 24);
+
+ /* make rounded edges */
+ context = gtk_widget_get_style_context (GTK_WIDGET (self));
+ gtk_style_context_add_class (context, "app-updates-section");
+}
+
+GtkListBox *
+gs_updates_section_new (GsUpdatesSectionKind kind,
+ GsPluginLoader *plugin_loader,
+ GsPage *page)
+{
+ GsUpdatesSection *self;
+ self = g_object_new (GS_TYPE_UPDATES_SECTION, NULL);
+ self->kind = kind;
+ self->plugin_loader = g_object_ref (plugin_loader);
+ self->page = g_object_ref (page);
+ self->section_header = g_object_ref_sink (_build_section_header (self));
+ return GTK_LIST_BOX (self);
+}
diff --git a/src/gs-updates-section.h b/src/gs-updates-section.h
new file mode 100644
index 0000000..852a0b5
--- /dev/null
+++ b/src/gs-updates-section.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015-2017 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gs-app-list.h"
+#include "gs-plugin-loader.h"
+#include "gs-page.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_UPDATES_SECTION (gs_updates_section_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsUpdatesSection, gs_updates_section, GS, UPDATES_SECTION, GtkListBox)
+
+typedef enum {
+ GS_UPDATES_SECTION_KIND_OFFLINE_FIRMWARE,
+ GS_UPDATES_SECTION_KIND_OFFLINE,
+ GS_UPDATES_SECTION_KIND_ONLINE,
+ GS_UPDATES_SECTION_KIND_ONLINE_FIRMWARE,
+ GS_UPDATES_SECTION_KIND_LAST
+} GsUpdatesSectionKind;
+
+GtkListBox *gs_updates_section_new (GsUpdatesSectionKind kind,
+ GsPluginLoader *plugin_loader,
+ GsPage *page);
+GsAppList *gs_updates_section_get_list (GsUpdatesSection *self);
+void gs_updates_section_add_app (GsUpdatesSection *self,
+ GsApp *app);
+void gs_updates_section_remove_all (GsUpdatesSection *self);
+void gs_updates_section_set_size_groups (GsUpdatesSection *self,
+ GtkSizeGroup *image,
+ GtkSizeGroup *name,
+ GtkSizeGroup *desc,
+ GtkSizeGroup *button,
+ GtkSizeGroup *header);
+
+G_END_DECLS
diff --git a/src/gs-upgrade-banner.c b/src/gs-upgrade-banner.c
new file mode 100644
index 0000000..b38a353
--- /dev/null
+++ b/src/gs-upgrade-banner.c
@@ -0,0 +1,411 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2016 Richard Hughes <richard@hughsie.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <stdlib.h>
+
+#include "gs-upgrade-banner.h"
+#include "gs-common.h"
+
+typedef struct
+{
+ GsApp *app;
+
+ GtkWidget *box_upgrades;
+ GtkWidget *button_upgrades_download;
+ GtkWidget *button_upgrades_install;
+ GtkWidget *button_upgrades_help;
+ GtkWidget *button_upgrades_cancel;
+ GtkWidget *label_upgrades_summary;
+ GtkWidget *label_upgrades_title;
+ GtkWidget *label_upgrades_warning;
+ GtkWidget *progressbar;
+ guint progress_pulse_id;
+ GtkCssProvider *banner_provider; /* (owned) (nullable) */
+} GsUpgradeBannerPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GsUpgradeBanner, gs_upgrade_banner, GTK_TYPE_BIN)
+
+enum {
+ SIGNAL_DOWNLOAD_CLICKED,
+ SIGNAL_INSTALL_CLICKED,
+ SIGNAL_HELP_CLICKED,
+ SIGNAL_CANCEL_CLICKED,
+ SIGNAL_LAST
+};
+
+static guint signals [SIGNAL_LAST] = { 0 };
+
+static gboolean
+_pulse_cb (gpointer user_data)
+{
+ GsUpgradeBanner *self = GS_UPGRADE_BANNER (user_data);
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progressbar));
+
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+stop_progress_pulsing (GsUpgradeBanner *self)
+{
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+
+ if (priv->progress_pulse_id != 0) {
+ g_source_remove (priv->progress_pulse_id);
+ priv->progress_pulse_id = 0;
+ }
+}
+
+static void
+gs_upgrade_banner_refresh (GsUpgradeBanner *self)
+{
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+ const gchar *uri;
+ g_autofree gchar *name_bold = NULL;
+ g_autofree gchar *version_bold = NULL;
+ g_autofree gchar *str = NULL;
+ guint percentage;
+
+ if (priv->app == NULL)
+ return;
+
+ /* embolden */
+ name_bold = g_strdup_printf ("<b>%s</b>", gs_app_get_name (priv->app));
+ version_bold = g_strdup_printf ("<b>%s</b>", gs_app_get_version (priv->app));
+
+ /* Distributions that need to reboot to deploy the upgrade show the "Install" button */
+ if (gs_app_has_quirk (priv->app, GS_APP_QUIRK_NEEDS_REBOOT)) {
+ gtk_button_set_label (GTK_BUTTON (priv->button_upgrades_install),
+ _("_Install"));
+ gtk_label_set_text (GTK_LABEL (priv->label_upgrades_warning),
+ _("It is recommended that you back up your "
+ "data and files before upgrading."));
+ } else {
+ gtk_button_set_label (GTK_BUTTON (priv->button_upgrades_install),
+ _("_Restart Now"));
+ gtk_label_set_text (GTK_LABEL (priv->label_upgrades_warning),
+ _("Updates will be applied when the "
+ "computer is restarted."));
+ }
+
+ /* Refresh the title. Normally a distro upgrade state goes from
+ *
+ * AVAILABLE (available to download) to
+ * INSTALLING (downloading packages for later installation) to
+ * UPDATABLE (packages are downloaded and upgrade is ready to go)
+ */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_AVAILABLE:
+ /* TRANSLATORS: This is the text displayed when a distro
+ * upgrade is available. First %s is the distro name and the
+ * 2nd %s is the version, e.g. "Fedora 23 Now Available" */
+ str = g_strdup_printf (_("%s %s Now Available"),
+ name_bold, version_bold);
+ gtk_label_set_markup (GTK_LABEL (priv->label_upgrades_title), str);
+ gtk_widget_set_visible (priv->label_upgrades_warning, FALSE);
+ gtk_widget_set_visible (priv->button_upgrades_cancel, FALSE);
+ break;
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ /* TRANSLATORS: This is the text displayed while waiting to
+ * download a distro upgrade. First %s is the distro name and
+ * the 2nd %s is the version, e.g. "Waiting to Download Fedora 23" */
+ str = g_strdup_printf (_("Waiting to Download %s %s"),
+ name_bold, version_bold);
+ gtk_label_set_markup (GTK_LABEL (priv->label_upgrades_title), str);
+ gtk_widget_set_visible (priv->label_upgrades_warning, FALSE);
+ gtk_widget_set_visible (priv->button_upgrades_cancel, TRUE);
+ break;
+ case AS_APP_STATE_INSTALLING:
+ /* TRANSLATORS: This is the text displayed while downloading a
+ * distro upgrade. First %s is the distro name and the 2nd %s
+ * is the version, e.g. "Downloading Fedora 23" */
+ str = g_strdup_printf (_("Downloading %s %s"),
+ name_bold, version_bold);
+ gtk_label_set_markup (GTK_LABEL (priv->label_upgrades_title), str);
+ gtk_widget_set_visible (priv->label_upgrades_warning, FALSE);
+ gtk_widget_set_visible (priv->button_upgrades_cancel, TRUE);
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ /* TRANSLATORS: This is the text displayed when a distro
+ * upgrade has been downloaded and is ready to be installed.
+ * First %s is the distro name and the 2nd %s is the version,
+ * e.g. "Fedora 23 Ready to be Installed" */
+ str = g_strdup_printf (_("%s %s Ready to be Installed"),
+ name_bold, version_bold);
+ gtk_label_set_markup (GTK_LABEL (priv->label_upgrades_title), str);
+ gtk_widget_set_visible (priv->label_upgrades_warning, TRUE);
+ gtk_widget_set_visible (priv->button_upgrades_cancel, FALSE);
+ break;
+ default:
+ g_critical ("Unexpected app state ‘%s’ of app ‘%s’",
+ as_app_state_to_string (gs_app_get_state (priv->app)),
+ gs_app_get_unique_id (priv->app));
+ break;
+ }
+
+ /* Hide the upgrade box until the app state is known. */
+ gtk_widget_set_visible (priv->box_upgrades,
+ (gs_app_get_state (priv->app) != AS_APP_STATE_UNKNOWN));
+
+ /* Refresh the summary if we got anything better than the default blurb */
+ if (gs_app_get_summary (priv->app) != NULL)
+ gtk_label_set_text (GTK_LABEL (priv->label_upgrades_summary),
+ gs_app_get_summary (priv->app));
+
+ /* Show the right buttons for the current state */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_AVAILABLE:
+ gtk_widget_show (priv->button_upgrades_download);
+ gtk_widget_hide (priv->button_upgrades_install);
+ break;
+ case AS_APP_STATE_QUEUED_FOR_INSTALL:
+ case AS_APP_STATE_INSTALLING:
+ gtk_widget_hide (priv->button_upgrades_download);
+ gtk_widget_hide (priv->button_upgrades_install);
+ break;
+ case AS_APP_STATE_UPDATABLE:
+ gtk_widget_hide (priv->button_upgrades_download);
+ gtk_widget_show (priv->button_upgrades_install);
+ break;
+ default:
+ g_critical ("Unexpected app state ‘%s’ of app ‘%s’",
+ as_app_state_to_string (gs_app_get_state (priv->app)),
+ gs_app_get_unique_id (priv->app));
+ break;
+ }
+
+ /* only show help when we have a URL */
+ uri = gs_app_get_url (priv->app, AS_URL_KIND_HOMEPAGE);
+ gtk_widget_set_visible (priv->button_upgrades_help, uri != NULL);
+
+ /* do a fill bar for the current progress */
+ switch (gs_app_get_state (priv->app)) {
+ case AS_APP_STATE_INSTALLING:
+ percentage = gs_app_get_progress (priv->app);
+ if (percentage == GS_APP_PROGRESS_UNKNOWN) {
+ if (priv->progress_pulse_id == 0)
+ priv->progress_pulse_id = g_timeout_add (50, _pulse_cb, self);
+
+ gtk_widget_set_visible (priv->progressbar, TRUE);
+ break;
+ } else if (percentage <= 100) {
+ stop_progress_pulsing (self);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progressbar),
+ (gdouble) percentage / 100.f);
+ gtk_widget_set_visible (priv->progressbar, TRUE);
+ break;
+ }
+ break;
+ default:
+ gtk_widget_hide (priv->progressbar);
+ stop_progress_pulsing (self);
+ break;
+ }
+}
+
+static gboolean
+app_refresh_idle (gpointer user_data)
+{
+ GsUpgradeBanner *self = GS_UPGRADE_BANNER (user_data);
+
+ gs_upgrade_banner_refresh (self);
+
+ g_object_unref (self);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+app_state_changed (GsApp *app, GParamSpec *pspec, GsUpgradeBanner *self)
+{
+ g_idle_add (app_refresh_idle, g_object_ref (self));
+}
+
+static void
+app_progress_changed (GsApp *app, GParamSpec *pspec, GsUpgradeBanner *self)
+{
+ g_idle_add (app_refresh_idle, g_object_ref (self));
+}
+
+static void
+download_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
+{
+ g_signal_emit (self, signals[SIGNAL_DOWNLOAD_CLICKED], 0);
+}
+
+static void
+install_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
+{
+ g_signal_emit (self, signals[SIGNAL_INSTALL_CLICKED], 0);
+}
+
+static void
+learn_more_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
+{
+ g_signal_emit (self, signals[SIGNAL_HELP_CLICKED], 0);
+}
+
+static void
+cancel_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
+{
+ g_signal_emit (self, signals[SIGNAL_CANCEL_CLICKED], 0);
+}
+
+void
+gs_upgrade_banner_set_app (GsUpgradeBanner *self, GsApp *app)
+{
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+ const gchar *css;
+
+ g_return_if_fail (GS_IS_UPGRADE_BANNER (self));
+ g_return_if_fail (GS_IS_APP (app) || app == NULL);
+
+ if (priv->app) {
+ g_signal_handlers_disconnect_by_func (priv->app, app_state_changed, self);
+ g_signal_handlers_disconnect_by_func (priv->app, app_progress_changed, self);
+ }
+
+ g_set_object (&priv->app, app);
+ if (!app)
+ return;
+
+ g_signal_connect (priv->app, "notify::state",
+ G_CALLBACK (app_state_changed), self);
+ g_signal_connect (priv->app, "notify::progress",
+ G_CALLBACK (app_progress_changed), self);
+
+ /* perhaps set custom css */
+ css = gs_app_get_metadata_item (app, "GnomeSoftware::UpgradeBanner-css");
+ gs_utils_widget_set_css (priv->box_upgrades, &priv->banner_provider, "upgrade-banner-custom", css);
+
+ gs_upgrade_banner_refresh (self);
+}
+
+GsApp *
+gs_upgrade_banner_get_app (GsUpgradeBanner *self)
+{
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+
+ g_return_val_if_fail (GS_IS_UPGRADE_BANNER (self), NULL);
+
+ return priv->app;
+}
+
+static void
+gs_upgrade_banner_dispose (GObject *object)
+{
+ GsUpgradeBanner *self = GS_UPGRADE_BANNER (object);
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+
+ g_clear_object (&priv->banner_provider);
+
+ G_OBJECT_CLASS (gs_upgrade_banner_parent_class)->dispose (object);
+}
+
+static void
+gs_upgrade_banner_destroy (GtkWidget *widget)
+{
+ GsUpgradeBanner *self = GS_UPGRADE_BANNER (widget);
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+
+ stop_progress_pulsing (self);
+
+ if (priv->app) {
+ g_signal_handlers_disconnect_by_func (priv->app, app_state_changed, self);
+ g_signal_handlers_disconnect_by_func (priv->app, app_progress_changed, self);
+ }
+
+ g_clear_object (&priv->app);
+
+ GTK_WIDGET_CLASS (gs_upgrade_banner_parent_class)->destroy (widget);
+}
+
+static void
+gs_upgrade_banner_init (GsUpgradeBanner *self)
+{
+ GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ g_signal_connect (priv->button_upgrades_download, "clicked",
+ G_CALLBACK (download_button_cb),
+ self);
+ g_signal_connect (priv->button_upgrades_install, "clicked",
+ G_CALLBACK (install_button_cb),
+ self);
+ g_signal_connect (priv->button_upgrades_help, "clicked",
+ G_CALLBACK (learn_more_button_cb),
+ self);
+ g_signal_connect (priv->button_upgrades_cancel, "clicked",
+ G_CALLBACK (cancel_button_cb),
+ self);
+}
+
+static void
+gs_upgrade_banner_class_init (GsUpgradeBannerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->dispose = gs_upgrade_banner_dispose;
+ widget_class->destroy = gs_upgrade_banner_destroy;
+
+ signals [SIGNAL_DOWNLOAD_CLICKED] =
+ g_signal_new ("download-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsUpgradeBannerClass, download_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals [SIGNAL_INSTALL_CLICKED] =
+ g_signal_new ("install-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsUpgradeBannerClass, install_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals [SIGNAL_CANCEL_CLICKED] =
+ g_signal_new ("cancel-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsUpgradeBannerClass, cancel_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals [SIGNAL_HELP_CLICKED] =
+ g_signal_new ("help-clicked",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsUpgradeBannerClass, help_clicked),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-upgrade-banner.ui");
+
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, box_upgrades);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_download);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_install);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_cancel);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_help);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, label_upgrades_summary);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, label_upgrades_title);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, progressbar);
+ gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, label_upgrades_warning);
+}
+
+GtkWidget *
+gs_upgrade_banner_new (void)
+{
+ GsUpgradeBanner *self;
+ self = g_object_new (GS_TYPE_UPGRADE_BANNER,
+ "vexpand", FALSE,
+ NULL);
+ return GTK_WIDGET (self);
+}
diff --git a/src/gs-upgrade-banner.h b/src/gs-upgrade-banner.h
new file mode 100644
index 0000000..c8c2bf8
--- /dev/null
+++ b/src/gs-upgrade-banner.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2016 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_UPGRADE_BANNER (gs_upgrade_banner_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE (GsUpgradeBanner, gs_upgrade_banner, GS, UPGRADE_BANNER, GtkBin)
+
+struct _GsUpgradeBannerClass
+{
+ GtkBinClass parent_class;
+
+ void (*download_clicked) (GsUpgradeBanner *self);
+ void (*install_clicked) (GsUpgradeBanner *self);
+ void (*cancel_clicked) (GsUpgradeBanner *self);
+ void (*help_clicked) (GsUpgradeBanner *self);
+};
+
+GtkWidget *gs_upgrade_banner_new (void);
+void gs_upgrade_banner_set_app (GsUpgradeBanner *self,
+ GsApp *app);
+GsApp *gs_upgrade_banner_get_app (GsUpgradeBanner *self);
+
+G_END_DECLS
diff --git a/src/gs-upgrade-banner.ui b/src/gs-upgrade-banner.ui
new file mode 100644
index 0000000..3e53a25
--- /dev/null
+++ b/src/gs-upgrade-banner.ui
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GsUpgradeBanner" parent="GtkBin">
+ <child>
+ <object class="GtkBox" id="box_upgrades">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="valign">center</property>
+ <style>
+ <class name="upgrade-banner"/>
+ </style>
+ <child>
+ <object class="GtkLabel" id="label_upgrades_title">
+ <property name="visible">True</property>
+ <property name="margin-top">66</property>
+ <property name="margin_bottom">26</property>
+ <!-- Just a placeholder; actual label text is set in code -->
+ <property name="label">GNOME 3.20 Now Available</property>
+ <attributes>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_upgrades_summary">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">A major upgrade, with new features and added polish.</property>
+ <attributes>
+ <attribute name="scale" value="1.2"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_upgrades_buttons">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">fill</property>
+ <property name="valign">end</property>
+ <property name="spacing">12</property>
+ <property name="margin_top">48</property>
+ <style>
+ <class name="osd"/>
+ <class name="upgrade-buttons"/>
+ </style>
+ <child>
+ <object class="GtkButton" id="button_upgrades_help">
+ <property name="label" translatable="yes">_Learn More</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="relief">normal</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_dummy1">
+ <property name="visible">True</property>
+ <property name="label"></property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkProgressBar" id="progressbar">
+ <property name="visible">True</property>
+ <property name="width_request">400</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="fraction">0.3</property>
+ <property name="margin_top">8</property>
+ <style>
+ <class name="upgrade-progressbar"/>
+ </style>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_upgrades_warning">
+ <property name="visible">True</property>
+ <property name="label"></property><!-- Set in code -->
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="label_dummy2">
+ <property name="visible">True</property>
+ <property name="label"></property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkButton" id="button_upgrades_download">
+ <property name="label" translatable="yes">_Download</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="relief">normal</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_upgrades_cancel">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="relief">normal</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_upgrades_install">
+ <property name="label">_Install</property><!-- Set in code -->
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="relief">normal</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/gs-vendor.c b/src/gs-vendor.c
new file mode 100644
index 0000000..c87d7cd
--- /dev/null
+++ b/src/gs-vendor.c
@@ -0,0 +1,126 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-vendor.h"
+
+struct _GsVendor
+{
+ GObject parent_instance;
+
+ GKeyFile *file;
+};
+
+G_DEFINE_TYPE (GsVendor, gs_vendor, G_TYPE_OBJECT)
+
+#ifdef HAVE_PACKAGEKIT
+static const gchar *
+gs_vendor_type_to_string (GsVendorUrlType type)
+{
+ if (type == GS_VENDOR_URL_TYPE_CODEC)
+ return "CodecUrl";
+ if (type == GS_VENDOR_URL_TYPE_FONT)
+ return "FontUrl";
+ if (type == GS_VENDOR_URL_TYPE_MIME)
+ return "MimeUrl";
+ if (type == GS_VENDOR_URL_TYPE_HARDWARE)
+ return "HardwareUrl";
+ return "DefaultUrl";
+}
+#endif
+
+gchar *
+gs_vendor_get_not_found_url (GsVendor *vendor, GsVendorUrlType type)
+{
+#ifdef HAVE_PACKAGEKIT
+ const gchar *key;
+ gchar *url = NULL;
+
+ /* get data */
+ key = gs_vendor_type_to_string (type);
+ url = g_key_file_get_string (vendor->file, "PackagesNotFound", key, NULL);
+
+ /* none is a special value */
+ if (g_strcmp0 (url, "none") == 0) {
+ g_free (url);
+ url = NULL;
+ }
+
+ /* got a valid URL */
+ if (url != NULL)
+ goto out;
+
+ /* default has no fallback */
+ if (type == GS_VENDOR_URL_TYPE_DEFAULT)
+ goto out;
+
+ /* get fallback data */
+ g_debug ("using fallback");
+ key = gs_vendor_type_to_string (GS_VENDOR_URL_TYPE_DEFAULT);
+ url = g_key_file_get_string (vendor->file, "PackagesNotFound", key, NULL);
+
+ /* none is a special value */
+ if (g_strcmp0 (url, "none") == 0) {
+ g_free (url);
+ url = NULL;
+ }
+out:
+ g_debug ("url=%s", url);
+ return url;
+#else
+ return NULL;
+#endif
+}
+
+static void
+gs_vendor_init (GsVendor *vendor)
+{
+#ifdef HAVE_PACKAGEKIT
+ const gchar *fn = "/etc/PackageKit/Vendor.conf";
+ gboolean ret;
+
+ vendor->file = g_key_file_new ();
+ ret = g_key_file_load_from_file (vendor->file, fn, G_KEY_FILE_NONE, NULL);
+ if (!ret)
+ g_warning ("%s file not found", fn);
+#endif
+}
+
+static void
+gs_vendor_finalize (GObject *object)
+{
+ GsVendor *vendor = GS_VENDOR (object);
+
+ if (vendor->file != NULL)
+ g_key_file_free (vendor->file);
+
+ G_OBJECT_CLASS (gs_vendor_parent_class)->finalize (object);
+}
+
+static void
+gs_vendor_class_init (GsVendorClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gs_vendor_finalize;
+}
+
+/**
+ * gs_vendor_new:
+ *
+ * Return value: a new GsVendor object.
+ **/
+GsVendor *
+gs_vendor_new (void)
+{
+ GsVendor *vendor;
+ vendor = g_object_new (GS_TYPE_VENDOR, NULL);
+ return GS_VENDOR (vendor);
+}
+
diff --git a/src/gs-vendor.h b/src/gs-vendor.h
new file mode 100644
index 0000000..68c2521
--- /dev/null
+++ b/src/gs-vendor.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GS_TYPE_VENDOR (gs_vendor_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsVendor, gs_vendor, GS, VENDOR, GObject)
+
+typedef enum
+{
+ GS_VENDOR_URL_TYPE_CODEC,
+ GS_VENDOR_URL_TYPE_FONT,
+ GS_VENDOR_URL_TYPE_MIME,
+ GS_VENDOR_URL_TYPE_HARDWARE,
+ GS_VENDOR_URL_TYPE_DEFAULT
+} GsVendorUrlType;
+
+GsVendor *gs_vendor_new (void);
+gchar *gs_vendor_get_not_found_url (GsVendor *vendor,
+ GsVendorUrlType type);
+
+G_END_DECLS
diff --git a/src/gtk-style-hc.css b/src/gtk-style-hc.css
new file mode 100644
index 0000000..1006649
--- /dev/null
+++ b/src/gtk-style-hc.css
@@ -0,0 +1,247 @@
+.installed-overlay-box {
+ font-size: smaller;
+ background-color: @theme_selected_bg_color;
+ border-radius: 4px;
+ color: @theme_selected_fg_color;
+}
+
+.popular-installed-overlay-box {
+ font-size: smaller;
+ background-color: @theme_selected_bg_color;
+ border-radius: 0;
+ color: @theme_selected_fg_color;
+ text-shadow: none;
+}
+
+.installed-icon, .app-row-installed-label {
+ color: #999999;
+}
+
+.index-title-alignment-software {
+ font-weight: bold;
+ font-size: 125%;
+}
+
+.needs-attention {
+ background-image: none;
+ background-color: shade(@theme_selected_bg_color, 1.1);
+ border-radius: 1px;
+}
+
+.screenshot-image, .screenshot-image-thumb {
+ background-image: none;
+ background-color: shade(@theme_bg_color, 0.9);
+}
+.screenshot-image { border-radius: 5px; }
+.screenshot-image-thumb { border-radius: 3px; }
+
+.app-tile-label {
+ font-size: 105%;
+}
+
+.app-row-tag {
+ text-shadow: none;
+ color: white;
+ background-color: #999999;
+ font-size: smaller;
+ border-radius: 4px;
+ padding: 2px 10px;
+}
+
+.view.tile {
+ padding: 0;
+ background-image: none;
+ background-color: mix(@theme_base_color,@theme_bg_color,0.3);
+}
+
+.view.tile:hover {
+ background-color: @theme_base_color;
+}
+
+.view.tile:active {
+ border-color: @theme_selected_bg_color;
+ box-shadow: none;
+ color: @theme_selected_bg_color;
+}
+
+.view.tile:backdrop {
+ box-shadow: none;
+ border-color: @unfocused_borders;
+}
+
+/* The rest of the featured-tile CSS is loaded at runtime in gs-feature-tile.c */
+.featured-tile {
+ all: unset;
+ padding: 0;
+ border-radius: 3px;
+ border-width: 1px;
+ border-image: none;
+}
+
+.application-details-infobar.info {
+ background-color: #d3d7cf;
+ color: @theme_fg_color;
+ border-color: darker(#d3d7cf);
+ border-style: solid;
+ border-width: 1px;
+ text-shadow: none;
+}
+
+.application-details-infobar.warning {
+ background-color: #fcaf3e;
+ color: @theme_fg_color;
+ border-color: darker(#fcaf3e);
+ border-style: solid;
+ border-width: 1px;
+ text-shadow: none;
+}
+
+.application-details-title {
+ font-weight: bold;
+ font-size: 125%;
+}
+
+.application-details-summary {
+}
+
+.review-summary {
+ font-weight: bold;
+}
+
+.application-details-description {
+}
+
+.install-progress {
+ background-image: linear-gradient(to top, @theme_selected_bg_color 2px, alpha(@theme_selected_bg_color, 0) 2px);
+ background-repeat: no-repeat;
+ background-position: 0 bottom;
+ background-size: 0;
+ transition: none;
+}
+
+.install-progress:dir(rtl) { background-position: 100% bottom; }
+
+.error-label {
+ text-shadow: none;
+}
+
+.app-row-origin-text {
+ font-size: smaller;
+}
+
+.app-listbox-header {
+ padding: 6px;
+ background-image: none;
+ background-color: #babdb6;
+ border-color: #000000;
+}
+
+.app-updates-section {
+ border-radius: 4px;
+ border: 1px solid #000000;
+}
+
+.app-listbox-header-title {
+ font-size: larger;
+}
+
+.image-list {
+ background-color: transparent;
+}
+
+box.star, GtkBox.star {
+ background-color: transparent;
+ background-image: none;
+}
+
+button.star, .button.star {
+ outline-offset: 0;
+ background-color: transparent;
+ background-image: none;
+ border-image: none;
+ border-radius: 0;
+ border-width: 0px;
+ padding: 0;
+ box-shadow: none;
+ outline-offset: -1px;
+}
+
+/* for the review dialog */
+.star-enabled {
+ color: #000000;
+}
+.star-disabled {
+ color: #777777;
+}
+
+/* for the app details shell */
+.star-enabled:disabled {
+ color: #000000;
+}
+.star-disabled:disabled {
+ color: #777777;
+}
+
+.counter-label {
+ text-shadow: none;
+ color: @theme_selected_fg_color;
+ background-color: mix(@theme_selected_bg_color, @theme_selected_fg_color, 0.3);
+ font-size: smaller;
+ border-radius: 4px;
+ padding: 0px 4px;
+}
+
+/* the following two selectors are to color the small gap before the list inside the scrolled window
+ setting a background on the scrolled window affects the undershoot and the overshoot so explicitelly
+ excluding with :not() */
+.category-sidebar:not(.undershoot):not(.overshoot) { background-color: @theme_base_color; }
+
+.category-sidebar:backdrop:not(.undershoot):not(.overshoot) { background-color: @theme_unfocused_base_color; }
+
+/* Superfluous borders removal */
+.category-sidebar {
+ border-style: none;
+}
+
+.category-sidebar:dir(rtl) {
+ border-left-style: solid;
+}
+
+.category-sidebar:dir(ltr) {
+ border-right-style: solid;
+}
+
+.dimmer-label {
+ opacity: 0.25;
+ text-shadow: none;
+}
+
+.update-failed-details {
+ font-family: Monospace;
+ font-size: 90%;
+ padding: 16px;
+}
+
+.upgrade-banner {
+ background-color: #1c5288;
+ padding: 0px;
+ border-radius: 4px;
+ border: 1px solid darker(@theme_bg_color);
+ color: @theme_selected_fg_color;
+}
+
+.upgrade-buttons {
+ padding: 18px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.upgrade-progressbar {
+ box-shadow: none
+}
+
+.eol-box {
+ background-color: @theme_selected_bg_color;
+ border: 1px solid shade(@theme_selected_bg_color, 0.8);
+ color: @theme_selected_fg_color;
+}
diff --git a/src/gtk-style.css b/src/gtk-style.css
new file mode 100644
index 0000000..4b5fcef
--- /dev/null
+++ b/src/gtk-style.css
@@ -0,0 +1,523 @@
+.installed-overlay-box {
+ font-size: smaller;
+ background-color: @theme_selected_bg_color;
+ border-radius: 0;
+ color: @theme_selected_fg_color;
+ text-shadow: 0 1px 0 rgba(0,0,0,0.5);
+}
+ .installed-overlay-box:backdrop label {
+ color: @theme_selected_fg_color;
+ }
+
+.installed-icon {
+ color: @theme_selected_bg_color;
+}
+
+.popular-installed-overlay-box {
+ font-size: smaller;
+ background-color: @theme_selected_bg_color;
+ border-radius: 0;
+ color: @theme_selected_fg_color;
+ text-shadow: none;
+}
+ .popular-installed-overlay-box:backdrop label {
+ color: @theme_selected_fg_color;
+ }
+
+.index-title-alignment-software {
+ font-weight: bold;
+ font-size: 125%;
+}
+
+.app-row-installed-label {
+ color: @theme_selected_bg_color;
+ font-size: smaller;
+}
+
+.app-row-app-size {
+ font-size: x-small;
+}
+
+.needs-attention {
+ background-image: none;
+ background-color: shade(@theme_selected_bg_color, 1.1);
+ border-radius: 1px;
+}
+
+.toolbar-primary-buttons-software {
+ padding-left: 26px;
+ padding-right: 26px;
+}
+
+.round-button {
+ border-radius: 16px;
+ -gtk-outline-radius: 16px;
+}
+
+.details-license-free,
+.details-license-nonfree,
+.details-license-unknown,
+.details-license-free:backdrop,
+.details-license-nonfree:backdrop,
+.details-license-unknown:backdrop {
+ outline-offset: 0;
+ background-image: none;
+ border-image: none;
+ border-radius: 4px;
+ border-width: 0 0 2px 0;
+ padding: 1px 9px;
+ box-shadow: none;
+ text-shadow: none;
+ color: #ffffff;
+}
+
+.details-license-free label,
+.details-license-free:backdrop label,
+.details-license-free:hover label,
+.details-license-nonfree label,
+.details-license-nonfree:backdrop label,
+.details-license-nonfree:hover label {
+ color: #fff;
+}
+
+.details-license-unknown label,
+.details-license-unknown:backdrop label,
+.details-license-unknown:hover label {
+ color: #373d3f;
+}
+
+.content-rating {
+ outline-offset: 0;
+ background-image: none;
+ background-color: #dbdbdb;
+ border-image: none;
+ border-radius: 4px;
+ border-width: 0px;
+ padding: 1px 9px;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+.details-license-free {
+ background-color: #4e9a06;
+ border-color: #3e7905;
+}
+.details-license-free:hover {
+ background-color: #5db807;
+ border-color: #4d9606;
+}
+.details-license-free:backdrop {
+ border-color: #4e9a06;
+}
+
+.details-license-nonfree {
+ background-color: #ee2222;
+ border-color: #c20f0f;
+}
+.details-license-nonfree:hover {
+ background-color: #f25959;
+ border-color: #ed1b1b;
+}
+.details-license-nonfree:backdrop {
+ border-color: #ee2222;
+}
+
+.details-license-unknown {
+ background-color: #dbdbdb;
+ border-color: #bbbbbb;
+}
+.details-license-unknown:hover {
+ background-color: #eeeeee;
+ border-color: #d5d5d5;
+}
+.details-license-unknown:backdrop {
+ border-color: #dbdbdb;
+}
+
+.kudo-pill {
+ color: @theme_selected_fg_color;
+ background-color: shade(@theme_selected_bg_color, 1.1);
+ background-image: none;
+ border-radius: 16px;
+ padding: 8px;
+}
+
+/* should be :disabled but we need to support older versions of GTK */
+.kudo-pill:disabled {
+ color: @theme_bg_color;
+ background-color: mix(@insensitive_fg_color, @theme_bg_color, 0.6);
+}
+
+.kudo-pill:disabled:backdrop {
+ color: @theme_unfocused_bg_color;
+ background-color: mix(@insensitive_fg_color, @theme_unfocused_bg_color, 0.8);
+}
+
+.onlyjustvisible:disabled {
+ opacity: 0.25;
+}
+
+.screenshot-image, .screenshot-image-thumb {
+ background-image: none;
+ background-color: shade(@theme_bg_color, 0.9);
+}
+.screenshot-image { border-radius: 5px; }
+.screenshot-image-thumb { border-radius: 3px; }
+
+.app-tile-label {
+ font-size: 105%;
+}
+
+.app-row-tag {
+ text-shadow: none;
+ color: @theme_selected_fg_color;
+ background-color: #999999;
+ font-size: smaller;
+ border-radius: 4px;
+ padding: 2px 10px;
+}
+
+.review-textbox {
+ padding: 6px;
+}
+
+@define-color gs_tile_bg_color mix(@theme_base_color,@theme_bg_color,0.3);
+@define-color gs_tile_borders mix(@gs_tile_bg_color,@theme_fg_color,0.3);
+@define-color gs_tile_borders_alpha alpha(@theme_fg_color,0.3);
+
+.view.tile {
+ padding: 1px;
+ border: none;
+ box-shadow: inset 0 2px 0 @theme_base_color,
+ inset 0 -2px 0 mix(@gs_tile_bg_color,@gs_tile_borders,0.5),
+ inset 0 0 0 1px @gs_tile_borders,
+ inset 0 -3px 0 -2px shade(@gs_tile_borders,0.75);
+ background: @gs_tile_bg_color;
+}
+
+.view.category-tile {
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+.app-list {
+ background-color: @theme_base_color;
+}
+
+.view.tile:hover {
+ background-color: @theme_base_color;
+}
+
+/* Making some shadows transparent instead of replacing multiple shadows with
+ one shadow prevents some horrendous transition animations, which happen even
+ with backdrop transition disabled. */
+
+.view.tile:active,
+.view.tile.colorful:active {
+ background: @gs_tile_bg_color;
+ box-shadow: inset 0 2px 0 transparent,
+ inset 0 -2px 0 transparent,
+ inset 0 0 0 1px @theme_selected_bg_color,
+ inset 0 -3px 0 -2px transparent;
+ color: @theme_selected_bg_color;
+}
+
+.view.tile:backdrop {
+ box-shadow: inset 0 2px 0 transparent,
+ inset 0 -2px 0 transparent,
+ inset 0 0 0 1px @unfocused_borders,
+ inset 0 -3px 0 -2px transparent;
+ /* Tile transitions are choppy for me for some reason. */
+ transition: none;
+}
+
+/* The rest of the featured-tile CSS is loaded at runtime in gs-feature-tile.c */
+.featured-tile {
+ all: unset;
+ padding: 0;
+ border-radius: 5px; /* match button tiles */
+ border-width: 1px;
+ border-image: none;
+ box-shadow: none;
+ /* box-shadow: inset 0 0 0 1px alpha(@theme_fg_color,0.3), 0 0 1px alpha(black,0.4); */
+}
+ .featured-tile:backdrop label {
+ color: inherit;
+ text-shadow: none;
+ }
+
+.application-details-infobar.info {
+ background-color: shade(@theme_bg_color, 0.9);
+ color: @theme_fg_color;
+ border-color: darker(shade(@theme_bg_color, 0.9));
+ border-style: solid;
+ border-width: 1px;
+ text-shadow: none;
+}
+
+.application-details-infobar {
+ background-color: shade(@theme_bg_color, 0.9);
+ color: @theme_fg_color;
+ border-color: darker(shade(@theme_bg_color, 0.9));
+ border-style: solid;
+ border-width: 1px;
+ padding: 12px;
+ text-shadow: none;
+}
+
+.application-details-infobar.warning {
+ background-color: #fcaf3e;
+ color: #2e3436;
+ border-color: darker(#fcaf3e);
+ border-style: solid;
+ border-width: 1px;
+ text-shadow: none;
+}
+
+.application-details-title {
+ font-weight: bold;
+ font-size: 125%;
+}
+
+.application-details-webapp-warning {
+ font-weight: bold;
+}
+
+.application-details-summary {
+}
+
+.application-details-description {
+}
+
+.install-progress {
+ background-image: linear-gradient(to top, @theme_selected_bg_color 2px, alpha(@theme_selected_bg_color, 0) 2px);
+ background-repeat: no-repeat;
+ background-position: 0 bottom;
+ background-size: 0;
+ transition: none;
+}
+
+.install-progress:dir(rtl) { background-position: 100% bottom; }
+
+.review-summary {
+ font-weight: bold;
+}
+
+.review-listbox {
+ all: unset;
+}
+
+.review-row button, .review-row .button { font-size: smaller; }
+
+/* gtk+ 3.20+ only */
+.review-row .vote-buttons button {
+ margin-right: -1px;
+
+ /* restricting transition properties since the hack for the separator*/
+ transition-property: background, box-shadow, border-style, text-shadow;
+}
+
+/* this is the separator between yes and no vote buttons, gtk+ 3.20 only */
+.review-row .vote-buttons button:not(:first-child):not(:hover):not(:active):not(:backdrop) {
+ border-image: linear-gradient(to top, @borders, @borders) 0 0 0 1 / 5px 0 5px 1px;
+}
+.review-row .vote-buttons button:not(:first-child):backdrop {
+ border-image: linear-gradient(to top, @unfocused_borders, @unfocused_borders) 0 0 0 1 / 5px 0 5px 1px;
+}
+
+.reviewbar {
+ background-image: none;
+ background-color: #babdb6;
+ color: #555753;
+}
+
+.error-label {
+ text-shadow: none;
+}
+
+.version-arrow-label {
+ font-size: x-small;
+}
+
+.overview-more-button {
+ font-size: smaller;
+ padding: 0px 15px;
+}
+
+.app-row-origin-text {
+ font-size: smaller;
+}
+
+.app-listbox-header {
+ padding: 6px;
+ background-image: none;
+ border-bottom: 1px solid @theme_bg_color;
+}
+
+.app-listbox-header:dir(ltr) { padding-left: 10px; }
+
+.app-listbox-header:dir(rtl) { padding-right: 10px; }
+
+.app-updates-section {
+ border-radius: 4px;
+ border: 1px solid darker(@theme_bg_color);
+}
+
+.app-listbox-header-title {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.image-list {
+ background-color: transparent;
+}
+
+box.star, GtkBox.star {
+ background-color: transparent;
+ background-image: none;
+}
+
+button.star, .button.star {
+ outline-offset: 0;
+ background-color: transparent;
+ background-image: none;
+ border-image: none;
+ border-radius: 0;
+ border-width: 0px;
+ padding: 0;
+ box-shadow: none;
+ outline-offset: -1px;
+}
+
+/* i have no idea why GTK adds padding here */
+flowboxchild {
+ padding: 0px;
+}
+
+/* for the review dialog */
+.star-enabled,
+.star-enabled:disabled {
+ color: shade(@theme_fg_color, 0.8);
+}
+.star-disabled,
+.star-disabled:disabled {
+ color: shade(@theme_bg_color, 0.8);
+}
+
+.counter-label {
+ text-shadow: none;
+ color: @theme_selected_fg_color;
+ background-color: mix(@theme_selected_bg_color, @theme_selected_fg_color, 0.3);
+ font-size: smaller;
+ border-radius: 4px;
+ padding: 0px 4px;
+}
+
+/* the following two selectors are to color the small gap before the list inside the scrolled window
+ setting a background on the scrolled window affects the undershoot and the overshoot so explicitelly
+ excluding with :not() */
+.category-sidebar:not(.undershoot):not(.overshoot) { background-color: @theme_base_color; }
+
+.category-sidebar:backdrop:not(.undershoot):not(.overshoot) { background-color: @theme_unfocused_base_color; }
+
+/* padding removal */
+.list-box-app-row {
+ padding: 0px;
+}
+
+/* Superfluous borders removal */
+.category-sidebar {
+ border-style: none;
+}
+
+.category-sidebar:dir(rtl) {
+ border-left-style: solid;
+}
+
+.category-sidebar:dir(ltr) {
+ border-right-style: solid;
+}
+
+.dimmer-label {
+ opacity: 0.25;
+ text-shadow: none;
+}
+
+.update-failed-details {
+ font-family: Monospace;
+ font-size: smaller;
+ padding: 16px;
+}
+
+.upgrade-banner {
+ background-color: #1c5288;
+ padding: 0px;
+ border-radius: 4px;
+ border: 1px solid darker(@theme_bg_color);
+ color: @theme_selected_fg_color;
+}
+
+.upgrade-buttons {
+ padding: 18px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.upgrade-progressbar {
+ box-shadow: none
+}
+
+.eol-box {
+ background-color: @theme_selected_bg_color;
+ border: 1px solid shade(@theme_selected_bg_color, 0.8);
+ color: @theme_selected_fg_color;
+}
+
+.category_page_header_filter_box .radio, .category_page_header_filter_box .radio:hover {
+ background-color: transparent; background-image: none;
+ box-shadow: none;
+ border: none;
+ border-radius: 0;
+ border-bottom: 4px solid transparent;
+}
+
+.category_page_header_filter_box .radio:hover {
+ border-bottom-color: @theme_selected_bg_color;
+}
+
+.category_page_header_filter_box .radio:checked {
+ border-bottom-color: @theme_selected_bg_color;
+}
+
+/* uses theme_bg_color and a shade with the ratio of the original color */
+.category_page_header_filter_box {
+ background-color: shade(@theme_bg_color, 0.9);
+ border-bottom: 1px solid darker(shade(@theme_bg_color, 0.9));
+}
+
+.switcher-label {
+ opacity: 0.5;
+}
+
+.featured-button-left,
+.featured-button-right {
+ padding: 2px 5px;
+ margin: 6px;
+}
+
+.featured-button-left:not(:hover),
+.featured-button-right:not(:hover) {
+ background: transparent;
+ border:transparent;
+ box-shadow: none;
+}
+
+/* these typographical classes will be provided in gtk eventually */
+.title-1{
+ font-weight: 800;
+ font-size: 20pt;
+}
+.caption{
+ font-weight: 400;
+ font-size: 10pt;
+}
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..6581e77
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,257 @@
+cargs = ['-DG_LOG_DOMAIN="Gs"']
+cargs += ['-DLOCALPLUGINDIR=""']
+
+resources_src = gnome.compile_resources(
+ 'gs-resources',
+ 'gnome-software.gresource.xml',
+ source_dir : '.',
+ c_name : 'gs'
+)
+
+gdbus_src = gnome.gdbus_codegen(
+ 'gs-shell-search-provider-generated',
+ 'shell-search-provider-dbus-interfaces.xml',
+ interface_prefix : 'org.gnome.',
+ namespace : 'Gs'
+)
+
+gnome_software_sources = [
+ 'gs-app-addon-row.c',
+ 'gs-application.c',
+ 'gs-app-row.c',
+ 'gs-app-tile.c',
+ 'gs-basic-auth-dialog.c',
+ 'gs-category-page.c',
+ 'gs-category-tile.c',
+ 'gs-common.c',
+ 'gs-css.c',
+ 'gs-content-rating.c',
+ 'gs-details-page.c',
+ 'gs-extras-page.c',
+ 'gs-feature-tile.c',
+ 'gs-first-run-dialog.c',
+ 'gs-fixed-size-bin.c',
+ 'gs-folders.c',
+ 'gs-hiding-box.c',
+ 'gs-history-dialog.c',
+ 'gs-info-bar.c',
+ 'gs-installed-page.c',
+ 'gs-language.c',
+ 'gs-loading-page.c',
+ 'gs-main.c',
+ 'gs-metered-data-dialog.c',
+ 'gs-moderate-page.c',
+ 'gs-overview-page.c',
+ 'gs-origin-popover-row.c',
+ 'gs-page.c',
+ 'gs-popular-tile.c',
+ 'gs-prefs-dialog.c',
+ 'gs-progress-button.c',
+ 'gs-removal-dialog.c',
+ 'gs-repos-dialog.c',
+ 'gs-repo-row.c',
+ 'gs-review-bar.c',
+ 'gs-review-dialog.c',
+ 'gs-review-histogram.c',
+ 'gs-review-row.c',
+ 'gs-screenshot-image.c',
+ 'gs-search-page.c',
+ 'gs-shell.c',
+ 'gs-shell-search-provider.c',
+ 'gs-star-widget.c',
+ 'gs-summary-tile.c',
+ 'gs-third-party-repo-row.c',
+ 'gs-update-dialog.c',
+ 'gs-update-list.c',
+ 'gs-update-monitor.c',
+ 'gs-updates-page.c',
+ 'gs-updates-section.c',
+ 'gs-upgrade-banner.c',
+ 'gs-vendor.c'
+]
+
+gnome_software_dependencies = [
+ appstream_glib,
+ gio_unix,
+ glib,
+ gmodule,
+ goa,
+ gtk,
+ json_glib,
+ libm,
+ libsoup,
+ libxmlb,
+]
+
+if get_option('packagekit')
+ gnome_software_sources += [
+ 'gs-dbus-helper.c',
+ ]
+ gnome_software_sources += gnome.gdbus_codegen(
+ 'gs-packagekit-generated',
+ 'org.freedesktop.PackageKit.xml',
+ interface_prefix : 'org.freedesktop.',
+ namespace : 'Gs'
+ )
+ gnome_software_sources += gnome.gdbus_codegen(
+ 'gs-packagekit-modify2-generated',
+ 'org.freedesktop.PackageKit.Modify2.xml',
+ interface_prefix : 'org.freedesktop.',
+ namespace : 'Gs'
+ )
+ gnome_software_dependencies += [packagekit]
+endif
+
+if get_option('gnome_desktop')
+ gnome_software_dependencies += [gnome_desktop]
+endif
+
+if get_option('gspell')
+ gnome_software_dependencies += [gspell]
+endif
+
+if get_option('mogwai')
+ gnome_software_dependencies += [mogwai_schedule_client]
+endif
+
+executable(
+ 'gnome-software',
+ resources_src,
+ gdbus_src,
+ sources : gnome_software_sources,
+ include_directories : [
+ include_directories('..'),
+ include_directories('../lib'),
+ ],
+ dependencies : gnome_software_dependencies,
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs,
+ install : true,
+ install_dir : get_option('bindir')
+)
+
+executable(
+ 'gnome-software-restarter',
+ sources : 'gs-restarter.c',
+ include_directories : [
+ include_directories('..'),
+ ],
+ dependencies : [
+ gio_unix,
+ glib,
+ ],
+ c_args : cargs,
+ install : true,
+ install_dir : get_option('libexecdir')
+)
+
+# no quoting
+cdata = configuration_data()
+cdata.set('bindir', join_paths(get_option('prefix'),
+ get_option('bindir')))
+
+# replace @bindir@
+configure_file(
+ input : 'org.gnome.Software.service.in',
+ output : 'org.gnome.Software.service',
+ install_dir: join_paths(get_option('datadir'), 'dbus-1/services'),
+ configuration : cdata
+)
+
+# replace @bindir@
+configure_file(
+ input : 'gnome-software-service.desktop.in',
+ output : 'gnome-software-service.desktop',
+ install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart'),
+ configuration : cdata
+)
+
+# replace @bindir@
+i18n.merge_file(
+ input: 'org.gnome.Software.desktop.in',
+ output: 'org.gnome.Software.desktop',
+ type: 'desktop',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'applications')
+)
+
+i18n.merge_file(
+ input: 'gnome-software-local-file.desktop.in',
+ output: 'gnome-software-local-file.desktop',
+ type: 'desktop',
+ po_dir: join_paths(meson.source_root(), 'po'),
+ install: true,
+ install_dir: join_paths(get_option('datadir'), 'applications')
+)
+
+install_data('org.gnome.Software-search-provider.ini',
+ install_dir : 'share/gnome-shell/search-providers')
+
+if get_option('man')
+ xsltproc = find_program('xsltproc')
+ custom_target('manfile-gnome-software',
+ input: 'gnome-software.xml',
+ output: 'gnome-software.1',
+ install: true,
+ install_dir: join_paths(get_option('mandir'), 'man1'),
+ command: [
+ xsltproc,
+ '--nonet',
+ '--stringparam', 'man.output.quietly', '1',
+ '--stringparam', 'funcsynopsis.style', 'ansi',
+ '--stringparam', 'man.th.extra1.suppress', '1',
+ '--stringparam', 'man.authors.section.enabled', '0',
+ '--stringparam', 'man.copyright.section.enabled', '0',
+ '-o', '@OUTPUT@',
+ 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+ '@INPUT@'
+ ]
+ )
+endif
+
+if get_option('packagekit')
+ # replace @bindir@
+ configure_file(
+ input : 'org.freedesktop.PackageKit.service.in',
+ output : 'org.freedesktop.PackageKit.service',
+ install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services'),
+ configuration : cdata
+ )
+endif
+
+if get_option('tests')
+ cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), '..', 'data') + '"']
+ e = executable(
+ 'gs-self-test-src',
+ compiled_schemas,
+ sources : [
+ 'gs-css.c',
+ 'gs-common.c',
+ 'gs-content-rating.c',
+ 'gs-self-test.c',
+ ],
+ include_directories : [
+ include_directories('..'),
+ include_directories('../lib'),
+ ],
+ dependencies : [
+ appstream_glib,
+ gio_unix,
+ glib,
+ gmodule,
+ goa,
+ gtk,
+ json_glib,
+ libm,
+ libsoup,
+ ],
+ link_with : [
+ libgnomesoftware
+ ],
+ c_args : cargs
+ )
+ test('gs-self-test-src', e, suite: ['plugins', 'src'], env: test_env)
+endif
diff --git a/src/org.freedesktop.PackageKit.Modify2.xml b/src/org.freedesktop.PackageKit.Modify2.xml
new file mode 100644
index 0000000..1e8fb7d
--- /dev/null
+++ b/src/org.freedesktop.PackageKit.Modify2.xml
@@ -0,0 +1,560 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
+ <!ENTITY ERROR_GENERAL "org.freedesktop.PackageKit.Denied">
+]>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+
+ <interface name="org.freedesktop.PackageKit.Modify2">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The interface used for modifying the package database (version 2).
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallPackageFiles">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs local package files or service packs.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="files" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of file names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An interaction mode that specifies which UI elements should be shown
+ or hidden different from the user default, e.g.
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,show-progress</doc:tt>.
+ The show options are:
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>.
+ The hide options are:
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,hide-progress,hide-finished,hide-warning</doc:tt>.
+ Convenience options such as:
+ <doc:tt>never</doc:tt>, <doc:tt>defaults</doc:tt> or <doc:tt>always</doc:tt>.
+ are also available.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallProvideFiles">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs packages to provide files.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="files" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of file names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallPackageNames">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs packages from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="packages" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of package names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallMimeTypes">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs mimetype handlers from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="mime_types" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of mime types, e.g. <doc:tt>text/plain</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallFontconfigResources">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs fontconfig resources (usually fonts) from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of font descriptors from fontconfig, e.g. <doc:tt>:lang=mn</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallGStreamerResources">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs GStreamer fontconfig resources (usually codecs) from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of codecs descriptors from <doc:tt>pk-gstreamer-install</doc:tt>, e.g.
+ <doc:tt>Advanced Streaming Format (ASF) demuxer|decoder-video/x-ms-asf</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallResources">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs resources of a given type from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="s" name="type" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The type of resource to request, e.g. <doc:tt>plasma-service</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of resource descriptors
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="RemovePackageByFiles">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Removes packages that provide the given local files.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="files" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of file names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An interaction mode that specifies which UI elements should be shown
+ or hidden different from the user default, e.g.
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,show-progress</doc:tt>.
+ The show options are:
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>.
+ The hide options are:
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,hide-progress,hide-finished,hide-warning</doc:tt>.
+ Convenience options such as:
+ <doc:tt>never</doc:tt>, <doc:tt>defaults</doc:tt> or <doc:tt>always</doc:tt>.
+ are also available.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <method name="InstallPrinterDrivers">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs printer drivers from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of printer model descriptors in IEEE 1284
+ Device ID format,
+ e.g. <doc:tt>MFG:Hewlett-Packard;MDL:HP LaserJet
+ 6MP;</doc:tt>.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="desktop_id" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The desktop file ID of the calling application.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="a{sv}" name="platform_data" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ Additional platform specific data, in the form of GVariant
+ dictionary mapping strings to variants. As the name indicates,
+ the platform data may vary depending on the operating system.
+ Currently recognized keys are:
+ <doc:tt>desktop-startup-id</doc:tt>: startup notification
+ identifier that is used to transfer focus to the software installer application;
+ if the startup notification id is not available, this can be just "_TIMEeventtime",
+ where eventtime is the time stamp from the event triggering the call.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <property name="DisplayName" type="s" access="read">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Translated, human readable name of the program implementing the interface, e.g. 'Software' for gnome-software.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </property>
+
+ </interface>
+</node>
diff --git a/src/org.freedesktop.PackageKit.service.in b/src/org.freedesktop.PackageKit.service.in
new file mode 100644
index 0000000..54c0466
--- /dev/null
+++ b/src/org.freedesktop.PackageKit.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.freedesktop.PackageKit
+Exec=@bindir@/gnome-software --gapplication-service
diff --git a/src/org.freedesktop.PackageKit.xml b/src/org.freedesktop.PackageKit.xml
new file mode 100644
index 0000000..c70cac3
--- /dev/null
+++ b/src/org.freedesktop.PackageKit.xml
@@ -0,0 +1,506 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
+ <!ENTITY ERROR_GENERAL "org.freedesktop.PackageKit.Denied">
+]>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+
+ <interface name="org.freedesktop.PackageKit.Query">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The interface used for querying the package database.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+
+ <!--*****************************************************************************************-->
+ <method name="IsInstalled">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Finds out if the package is installed.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="s" name="package_name" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ A package name, e.g. <doc:tt>hal-info</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>timeout=10</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="b" name="installed" direction="out">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ If the package is installed.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="SearchFile">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Finds the package name for an installed or available file
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="s" name="file_name" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ A package name, e.g. <doc:tt>/usr/share/help/gimp/index.html</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>timeout=10</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="b" name="installed" direction="out">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ If the package is installed.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="package_name" direction="out">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The package name of the file, e.g. <doc:tt>hal-info</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+ </interface>
+
+ <!-- ######################################################################################### -->
+ <interface name="org.freedesktop.PackageKit.Modify">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ The interface used for modifying the package database.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallPackageFiles">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs local package files or service packs.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="files" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of file names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An interaction mode that specifies which UI elements should be shown
+ or hidden different from the user default, e.g.
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,show-progress</doc:tt>.
+ The show options are:
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>.
+ The hide options are:
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,hide-progress,hide-finished,hide-warning</doc:tt>.
+ Convenience options such as:
+ <doc:tt>never</doc:tt>, <doc:tt>defaults</doc:tt> or <doc:tt>always</doc:tt>.
+ are also available.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallProvideFiles">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs packages to provide files.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="files" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of file names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallPackageNames">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs packages from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="packages" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of package names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallMimeTypes">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs mimetype handlers from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="mime_types" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of mime types, e.g. <doc:tt>text/plain</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallFontconfigResources">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs fontconfig resources (usually fonts) from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of font descriptors from fontconfig, e.g. <doc:tt>:lang=mn</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallGStreamerResources">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs GStreamer fontconfig resources (usually codecs) from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of codecs descriptors from <doc:tt>pk-gstreamer-install</doc:tt>, e.g.
+ <doc:tt>Advanced Streaming Format (ASF) demuxer|decoder-video/x-ms-asf</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="InstallResources">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs resources of a given type from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="type" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The type of resource to request, e.g. <doc:tt>plasma-service</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of resource descriptors
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <!--*****************************************************************************************-->
+ <method name="RemovePackageByFiles">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Removes packages that provide the given local files.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="files" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of file names.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An interaction mode that specifies which UI elements should be shown
+ or hidden different from the user default, e.g.
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,show-progress</doc:tt>.
+ The show options are:
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>.
+ The hide options are:
+ <doc:tt>hide-confirm-search,hide-confirm-deps,hide-confirm-install,hide-progress,hide-finished,hide-warning</doc:tt>.
+ Convenience options such as:
+ <doc:tt>never</doc:tt>, <doc:tt>defaults</doc:tt> or <doc:tt>always</doc:tt>.
+ are also available.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+
+ <method name="InstallPrinterDrivers">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Installs printer drivers from a configured software source.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ <arg type="u" name="xid" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The X window handle ID, used for focus stealing prevention and setting modality.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="as" name="resources" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An array of printer model descriptors in IEEE 1284
+ Device ID format,
+ e.g. <doc:tt>MFG:Hewlett-Packard;MDL:HP LaserJet
+ 6MP;</doc:tt>.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ <arg type="s" name="interaction" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ An optional interaction mode, e.g.
+ <doc:tt>show-confirm-search,show-confirm-deps,show-confirm-install,show-progress,show-finished,show-warning</doc:tt>
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
+ </interface>
+</node>
+
diff --git a/src/org.gnome.Software-search-provider.ini b/src/org.gnome.Software-search-provider.ini
new file mode 100644
index 0000000..7d8f809
--- /dev/null
+++ b/src/org.gnome.Software-search-provider.ini
@@ -0,0 +1,5 @@
+[Shell Search Provider]
+DesktopId=org.gnome.Software.desktop
+BusName=org.gnome.Software
+ObjectPath=/org/gnome/Software/SearchProvider
+Version=2
diff --git a/src/org.gnome.Software.desktop.in b/src/org.gnome.Software.desktop.in
new file mode 100644
index 0000000..dde6bad
--- /dev/null
+++ b/src/org.gnome.Software.desktop.in
@@ -0,0 +1,18 @@
+[Desktop Entry]
+Name=Software
+Comment=Add, remove or update software on this computer
+# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+Icon=org.gnome.Software
+Exec=gnome-software %U
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;System;PackageManager;
+# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+Keywords=Updates;Upgrade;Sources;Repositories;Preferences;Install;Uninstall;Program;Software;App;Store;
+StartupNotify=true
+MimeType=x-scheme-handler/appstream;x-scheme-handler/apt;x-scheme-handler/snap;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-software
+X-GNOME-Bugzilla-Component=gnome-software
+X-GNOME-UsesNotifications=true
+DBusActivatable=true
diff --git a/src/org.gnome.Software.service.in b/src/org.gnome.Software.service.in
new file mode 100644
index 0000000..ed3a53d
--- /dev/null
+++ b/src/org.gnome.Software.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.gnome.Software
+Exec=@bindir@/gnome-software --gapplication-service
diff --git a/src/shell-search-provider-dbus-interfaces.xml b/src/shell-search-provider-dbus-interfaces.xml
new file mode 100644
index 0000000..f6840e2
--- /dev/null
+++ b/src/shell-search-provider-dbus-interfaces.xml
@@ -0,0 +1,44 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<!--
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+-->
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name='org.gnome.Shell.SearchProvider2'>
+ <method name='GetInitialResultSet'>
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='as' name='Results' direction='out' />
+ </method>
+ <method name = 'GetSubsearchResultSet'>
+ <arg type='as' name='PreviousResults' direction='in' />
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='as' name='Results' direction='out' />
+ </method>
+ <method name = 'GetResultMetas'>
+ <arg type='as' name='Results' direction='in' />
+ <arg type='aa{sv}' name='Metas' direction='out' />
+ </method>
+ <method name = 'ActivateResult'>
+ <arg type='s' name='Result' direction='in' />
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='u' name='Timestamp' direction='in' />
+ </method>
+ <method name = 'LaunchSearch'>
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='u' name='Timestamp' direction='in' />
+ </method>
+ </interface>
+</node>
diff --git a/subprojects/libglib-testing.wrap b/subprojects/libglib-testing.wrap
new file mode 100644
index 0000000..537a946
--- /dev/null
+++ b/subprojects/libglib-testing.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+directory = libglib-testing
+url = https://gitlab.gnome.org/pwithnall/libglib-testing.git
+revision = 0.1.0
diff --git a/subprojects/libxmlb.wrap b/subprojects/libxmlb.wrap
new file mode 100644
index 0000000..ea04cf5
--- /dev/null
+++ b/subprojects/libxmlb.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+directory = libxmlb
+url = https://github.com/hughsie/libxmlb.git
+revision = master
diff --git a/subprojects/malcontent.wrap b/subprojects/malcontent.wrap
new file mode 100644
index 0000000..730bf4f
--- /dev/null
+++ b/subprojects/malcontent.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+directory=malcontent
+url=https://gitlab.freedesktop.org/pwithnall/malcontent.git
+revision=ab75b35d91a32aae6179f42a8037a8ef28e2f3c5
diff --git a/subprojects/sysprof.wrap b/subprojects/sysprof.wrap
new file mode 100644
index 0000000..8ee1f97
--- /dev/null
+++ b/subprojects/sysprof.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+directory=sysprof
+url=https://gitlab.gnome.org/GNOME/sysprof.git
+revision=555ec04e322ec979c84a7a21d09a5afd9c02f672
diff --git a/tests/actions.py b/tests/actions.py
new file mode 100755
index 0000000..da0887e
--- /dev/null
+++ b/tests/actions.py
@@ -0,0 +1,68 @@
+#! /usr/bin/python
+
+# This a simple test, using the dogtail framework:
+#
+# Activate the app via the org.gtk.Application bus interface.
+# Check that the expected actions are exported on the session bus.
+# Activate each action and verify the result.
+
+import os
+from gi.repository import Gio
+
+settings = Gio.Settings.new("org.gnome.desktop.interface")
+settings.set_boolean ("toolkit-accessibility", True)
+
+from dogtail.tree import *
+from dogtail.utils import *
+from dogtail.procedural import *
+from dogtail.rawinput import keyCombo
+
+try:
+ run('gnome-software')
+
+ app = root.application('gnome-software')
+
+ bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
+ proxy = Gio.DBusProxy.new_sync(bus, Gio.DBusProxyFlags.NONE,
+ None,
+ 'org.gnome.Software',
+ '/org/gnome/Software',
+ 'org.gtk.Application')
+ proxy.call_sync('Activate', GLib.Variant('(a{sv})', ({},)), 0, -1, None)
+
+ doDelay(1)
+ try:
+ shopping_button = app.child(name=u'Let\u2019s Go Shopping', retry=False)
+ shopping_button.click()
+ except tree.SearchError:
+ print "not first-run, moving on"
+
+ doDelay(1)
+ assert (len(app.children) == 1)
+
+ dbus_actions = Gio.DBusProxy.new_sync(bus, Gio.DBusProxyFlags.NONE,
+ None,
+ 'org.gnome.Software',
+ '/org/gnome/Software',
+ 'org.gtk.Actions')
+
+ names = dbus_actions.call_sync('List', None, 0, -1, None).unpack()[0]
+ assert (u'quit' in names)
+ assert (u'about' in names)
+
+ dbus_actions.call_sync('Activate',
+ GLib.Variant('(sava{sv})', (u'about', [], {})),
+ 0, -1, None)
+
+ doDelay (1)
+ assert (len(app.children) == 2)
+ keyCombo("<Esc>")
+ doDelay (1)
+ assert (len(app.children) == 1)
+
+ dbus_actions.call_sync('Activate',
+ GLib.Variant('(sava{sv})', (u'quit', [], {})),
+ 0, -1, None)
+ assert (len(app.children) == 0)
+finally:
+ os.system("killall gnome-software")
diff --git a/tests/basic.py b/tests/basic.py
new file mode 100755
index 0000000..cbca229
--- /dev/null
+++ b/tests/basic.py
@@ -0,0 +1,157 @@
+#! /usr/bin/python
+
+# This a simple test, using the dogtail framework:
+#
+# Click on All, Installed, Updates and check that the button state
+# and the main page content update as expected. Type a few characters
+# on the overview page, hit Enter, and verify that we end up on the
+# search page. Hit Escape and verify that we go back to the overview
+# page.
+
+from gi.repository import Gio
+
+settings = Gio.Settings.new("org.gnome.desktop.interface")
+settings.set_boolean ("toolkit-accessibility", True)
+
+import os
+from dogtail.tree import *
+from dogtail.utils import *
+from dogtail.procedural import *
+
+try:
+ run('gnome-software')
+
+ app_name = 'gnome-software'
+ app = root.application(app_name)
+
+ all_button = app.child('All')
+ installed_button = app.child('Installed')
+ updates_button = app.child('Updates')
+ back_button = app.child('Go back')
+
+ overview_page = app.child('Overview page')
+ installed_page = app.child('Installed page')
+ updates_page = app.child('Updates page')
+ search_page = app.child('Search page')
+ details_page = app.child('Details page')
+ install_button = details_page.child('Install')
+ remove_button = details_page.child('Remove')
+
+ search_page_listbox = search_page.child(roleName='list box')
+
+ try:
+ shopping_button = app.child(name=u'Let\u2019s Go Shopping', retry=False)
+ shopping_button.click()
+ except tree.SearchError:
+ print "not first-run, moving on"
+
+ all_button.click()
+ assert (all_button.checked)
+ assert (not installed_button.checked)
+ assert (not updates_button.checked)
+ assert (overview_page.showing)
+ assert (not installed_page.showing)
+ assert (not updates_page.showing)
+ assert (not search_page.showing)
+
+ installed_button.click()
+ assert (not all_button.checked)
+ assert (installed_button.checked)
+ assert (not updates_button.checked)
+ assert (not overview_page.showing)
+ assert (installed_page.showing)
+ assert (not updates_page.showing)
+ assert (not search_page.showing)
+
+ updates_button.click()
+ assert (not all_button.checked)
+ assert (not installed_button.checked)
+ assert (updates_button.checked)
+ assert (not overview_page.showing)
+ assert (not installed_page.showing)
+ assert (updates_page.showing)
+ assert (not search_page.showing)
+
+ installed_button.click()
+ assert (not all_button.checked)
+ assert (installed_button.checked)
+ assert (not updates_button.checked)
+ assert (not overview_page.showing)
+ assert (installed_page.showing)
+ assert (not updates_page.showing)
+ assert (not search_page.showing)
+
+ all_button.click()
+ assert (all_button.checked)
+ assert (not installed_button.checked)
+ assert (not updates_button.checked)
+ assert (overview_page.showing)
+ assert (not installed_page.showing)
+ assert (not updates_page.showing)
+ assert (not search_page.showing)
+
+ type("archive\n")
+ doDelay(2)
+ assert (not all_button.checked)
+ assert (not installed_button.checked)
+ assert (not updates_button.checked)
+ assert (not overview_page.showing)
+ assert (not installed_page.showing)
+ assert (not updates_page.showing)
+ assert (search_page.showing)
+
+ """Details page test section"""
+ search_page_listbox.child(roleName='label', name='Archive Manager').click()
+ doDelay(4)
+ assert (not overview_page.showing)
+ assert (not installed_page.showing)
+ assert (not updates_page.showing)
+ assert (not search_page.showing)
+ assert (details_page.showing)
+ assert (install_button.showing or remove_button.showing)
+ assert (back_button.showing)
+ assert (root.application(app_name).child('Details page')
+ .child(roleName='push button', name='History')
+ .states.contains(pyatspi.STATE_VISIBLE))
+ assert (root.application(app_name).child('Details page')
+ .child(roleName='push button', name='Website')
+ .states.contains(pyatspi.STATE_VISIBLE))
+
+ if install_button.showing:
+ assert (not root.application(app_name).child('Details page')
+ .child(roleName='push button', name='Launch')
+ .states.contains(pyatspi.STATE_VISIBLE))
+ else:
+ assert (root.application(app_name).child('Details page')
+ .child(roleName='push button', name='Launch')
+ .states.contains(pyatspi.STATE_VISIBLE))
+
+ back_button.click()
+ assert (not all_button.checked)
+ assert (not installed_button.checked)
+ assert (not updates_button.checked)
+ assert (not overview_page.showing)
+ assert (not installed_page.showing)
+ assert (not updates_page.showing)
+ assert (search_page.showing)
+ assert (not install_button.showing)
+ assert (not remove_button.showing)
+ assert (not back_button.showing)
+
+ keyCombo("Escape")
+ assert (all_button.checked)
+ assert (not installed_button.checked)
+ assert (not updates_button.checked)
+ assert (overview_page.showing)
+ assert (not installed_page.showing)
+ assert (not updates_page.showing)
+ assert (not search_page.showing)
+
+ super_menu = root.application('gnome-shell').child(roleName='menu', name='Software')
+ super_menu.click()
+ root.application('gnome-shell').child(roleName='label', name='Software Sources').click()
+ assert (len(app.children) == 2)
+ sources_dialog = app.children[-1]
+ assert (sources_dialog.child(roleName='label', name='Software Sources'))
+finally:
+ os.system("killall gnome-software")